Hook agent zgłasza środowiska uruchomieniowe agentów, które działają w pętli bez limitu tur, budżetu lub czasu, czyli lukę niekontrolowanej autonomii, przez którą spreparowane dane wejściowe prowadzą do nieograniczonych kosztów albo eskalacji przez prompt injection. Rozpoznaje język i obejmuje dwa ekosystemy frameworków agentowych: JavaScript (środowisko query z SDK agentów Claude) i Python (LangChain, LangGraph, CrewAI, OpenAI Agents). Jest deterministycznym silnikiem stojącym za specjalizacją llm, a ty możesz go uruchomić samodzielnie w trybie scan lub check.
Uruchamianie
- Przeszukaj bazę kodu
- Sprawdź wywołanie
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
Każdy wiersz pod nagłówkiem Uncapped agent loops found dotyczy pliku, który importuje SDK agentów, i wskazuje albo wywołanie środowiska query z SDK agentów Claude bez limitu tur, budżetu lub czasu (JavaScript, domyślnie bez ograniczeń), albo jawne zniesienie domyślnego limitu frameworka, takie jak max_iterations=None / max_turns=None (Python, domyślnie z limitem). W obu przypadkach hook kończy działanie z niezerowym kodem wyjścia. W Vercel AI SDK funkcje generateText/streamText domyślnie wykonują jeden krok (stopWhen: stepCountIs(1)), więc samo ich wywołanie nie może się zapętlić i nie jest zgłaszane, a zwykłego db.query(...) hook nigdy nie myli z wywołaniem agenta. Gdy nic nie znajdzie, wypisuje no uncapped agent loops found.
Jak czytać werdykt
| Werdykt | Znaczenie |
|---|---|
uncapped | Wywołanie środowiska query bez limitu (JS) albo jawne zniesienie limitu (=None, Py). |
safe | Wywołanie query, które ustawia limit, generowanie w jednym kroku albo wywołanie frameworka z domyślnym limitem. |
invalid | Fragment kodu nie zawiera rozpoznawalnego wywołania agenta, które można by ocenić. |
Opcje CLI
| Opcja | Wartość | Opis |
|---|---|---|
--pattern | fragment kodu | Sprawdza jedno wywołanie. Powtórz opcję, aby sprawdzić kilka, po jednym werdykcie na wiersz. |
--lang | język | Wymagana z --pattern: javascript lub python. |
--dir | folder | Zawęża skanowanie do folderu. Można ją powtarzać i łączyć z --file. |
--file | plik | Zawęża skanowanie do jednego pliku. Można ją powtarzać i łączyć z --dir. |
Bez żadnej opcji przeszukuje cały projekt. Opcja --pattern wymaga --lang i nie można jej łączyć z --dir ani --file.
Wybierz, co przeszukuje
Pomija to, co Git ignoruje. Aby pominąć więcej albo przeszukać to, co Git ignoruje, nadaj hookowi agent własne ustawienia:
npx lagune write add --ignore test/fixtures --checker agent
{
"checkers": {
"agent": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}
Wszystkie ustawienia opisuje strona Konfiguracja hooków.
Ręcznie napisana pętla agenta, w dowolnym języku, wykracza poza możliwości skanowania statycznego. Traktuj wynik jako solidne minimum, a nie pełną inwentaryzację.
Hook rozstrzyga tylko kwestię limitu: zawężanie uprawnień agenta, mieszanie poziomów zaufania i autoryzacja wymagają oceny, którą nadal zapewnia specjalizacja llm.
Najczęściej zadawane pytania
Agenta bez limitu można wciągnąć w niekończącą się rekurencję, nieograniczone koszty albo eskalację przez prompt injection. Ustawienie maxTurns/maxBudgetUsd/stopWhen/signal go ogranicza, a hook agent zgłasza każde wywołanie środowiska query, które nie ustawia żadnego z nich.
