# Хук agent: обнаружение неограниченных циклов агентов

> Проверьте кодовую базу на вызовы агентов и LLM без ограничения шагов или времени или оцените отдельный вызов из командной строки.

Канонический URL: https://lagune.ai/ru-RU/docs/hooks/agent
Язык: ru-RU
Оригинал: https://lagune.ai/docs/hooks/agent
Последнее обновление: 2026-11-03

Хук `agent` помечает **среды выполнения агентов, которые крутятся в цикле без ограничения ходов, бюджета или времени**, ту дыру неконтролируемой автономии, через которую специально сформированный ввод превращается в неограниченные расходы или эскалацию через prompt injection. Он **учитывает язык** и охватывает две экосистемы агентных фреймворков: **JavaScript** (среда выполнения `query` из агентного SDK **Claude**) и **Python** (**LangChain**, **LangGraph**, **CrewAI**, **OpenAI Agents**). Это детерминированный движок, стоящий за [специализацией `llm`](https://lagune.ai/ru-RU/docs/catalog), и вы можете запускать его сами в режиме **scan** или **check**.

## Запуск

**Сканировать кодовую базу**

```bash
npx lagune read agent                # scans the whole project
npx lagune read agent --dir src/ai   # scans a directory
npx lagune read agent --file chat.ts # scans a single file
```

**Проверить вызов**

```bash
npx lagune read agent --lang javascript --pattern 'query({ prompt })'                           # => uncapped
npx lagune read agent --lang javascript --pattern 'query({ prompt, options: { maxTurns: 5 } })' # => safe
npx lagune read agent --lang python --pattern 'AgentExecutor(agent=a, max_iterations=None)'     # => uncapped
```

Каждая строка в разделе **Uncapped agent loops found** находится в файле, который импортирует агентный SDK, и представляет собой либо вызов среды выполнения `query` из агентного SDK Claude без ограничения ходов, бюджета или времени (JavaScript, по умолчанию без ограничений), либо явное снятие ограничения фреймворка по умолчанию, например `max_iterations=None` / `max_turns=None` (Python, по умолчанию с ограничением). В обоих случаях хук завершается с ненулевым кодом. В Vercel AI SDK `generateText`/`streamText` по умолчанию выполняют один шаг (`stopWhen: stepCountIs(1)`), поэтому голый вызов там не может зациклиться и не помечается, а обычный `db.query(...)` никогда не принимается за вызов агента. Если ничего не найдено, выводится `no uncapped agent loops found`.

## Как читать вердикт

| Вердикт    | Значение                                                                                            |
| ---------- | --------------------------------------------------------------------------------------------------- |
| `uncapped` | Вызов среды выполнения `query` без ограничения (JS) или явное снятие ограничения (`=None`, Py).     |
| `safe`     | Вызов `query` с ограничением, генерация в один шаг или вызов фреймворка, ограниченный по умолчанию. |
| `invalid`  | Во фрагменте нет узнаваемого вызова агента, который можно оценить.                                  |

### Параметры CLI

| Параметр    | Значение      | Описание                                                                                  |
| ----------- | ------------- | ----------------------------------------------------------------------------------------- |
| `--pattern` | фрагмент кода | Проверяет один вызов. Повторите, чтобы проверить несколько, по одному вердикту на строку. |
| `--lang`    | язык          | Обязателен с `--pattern`: `javascript` или `python`.                                      |
| `--dir`     | директория    | Ограничивает сканирование директорией. Можно повторять и сочетать с `--file`.             |
| `--file`    | файл          | Ограничивает сканирование одним файлом. Можно повторять и сочетать с `--dir`.             |

Без параметров хук сканирует весь проект. `--pattern` требует `--lang` и не сочетается с `--dir` или `--file`.

**По мере возможностей, а не исчерпывающе**

Самописный цикл агента на любом языке недоступен статическому сканированию. Считайте результат надежным минимумом, а не полной инвентаризацией.

**Совет**

Хук решает только вопрос ограничения: разграничение возможностей, смешение уровней доверия и авторизация остаются вопросами суждения, которые по-прежнему охватывает [специализация `llm`](https://lagune.ai/ru-RU/docs/catalog).

## Частые вопросы

### Зачем ограничивать цикл агента?

Агента без ограничений можно загнать в неограниченную рекурсию, расходы или эскалацию через prompt injection. Ограничения maxTurns, maxBudgetUsd, stopWhen или signal сдерживают его, а хук agent помечает вызов среды выполнения query, в котором не задано ни одного из них.
