Хук agent помечает среды выполнения агентов, которые крутятся в цикле без ограничения ходов, бюджета или времени, ту дыру неконтролируемой автономии, через которую специально сформированный ввод превращается в неограниченные расходы или эскалацию через prompt injection. Он учитывает язык и охватывает две экосистемы агентных фреймворков: JavaScript (среда выполнения query из агентного SDK Claude) и Python (LangChain, LangGraph, CrewAI, OpenAI Agents). Это детерминированный движок, стоящий за специализацией llm, и вы можете запускать его сами в режиме scan или check.
Запуск
- Сканировать кодовую базу
- Проверить вызов
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
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.
Частые вопросы
Агента без ограничений можно загнать в неограниченную рекурсию, расходы или эскалацию через prompt injection. Ограничения maxTurns, maxBudgetUsd, stopWhen или signal сдерживают его, а хук agent помечает вызов среды выполнения query, в котором не задано ни одного из них.
