Hooki

Hook agent: Wykrywanie pętli agentów bez limitu

Przeszukaj bazę kodu pod kątem wywołań agentów i LLM bez limitu kroków lub czasu albo oceń pojedyncze wywołanie z wiersza poleceń.

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​

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

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​

WerdyktZnaczenie
uncappedWywołanie środowiska query bez limitu (JS) albo jawne zniesienie limitu (=None, Py).
safeWywołanie query, które ustawia limit, generowanie w jednym kroku albo wywołanie frameworka z domyślnym limitem.
invalidFragment kodu nie zawiera rozpoznawalnego wywołania agenta, które można by ocenić.

Opcje CLI​

OpcjaWartośćOpis
--patternfragment koduSprawdza jedno wywołanie. Powtórz opcję, aby sprawdzić kilka, po jednym werdykcie na wiersz.
--langjęzykWymagana z --pattern: javascript lub python.
--dirfolderZawęża skanowanie do folderu. Można ją powtarzać i łączyć z --file.
--fileplikZawęż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.

W miarę możliwości, bez gwarancji kompletności

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ę.

wskazówka

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.