Vestavěné nástroje agentů
Tohle jsou nástroje vázané na server, které vestavěný runtime agenta registruje přímo — jazykový server, strukturální hledání, debugger, kernely, otázky a řízení workerů — na rozdíl od nástrojů MCP, které si přemosťuje, a od obecných nástrojů na soubory, hledání a shell z runtime harnessu. Na registru MCP nejsou: externí klient MCP je neuvidí, protože každý je vázaný na živý prostředek na straně serveru — proces jazykového serveru, ladicí adaptér, interpret — a ten patří jednomu běhu.
Každý nástroj se tu registruje jen tehdy, když je pro běh zapojený prostředek, na kterém stojí — dohled jazykového serveru nebo debuggeru, parser tree-sitter, továrna kernelů, port pro otázky, sestava režimu vibe. Zjištění, jestli pro tenhle checkout existuje jazykový server nebo ladicí adaptér, je samostatná pozdější kontrola (status / adapters): ty nástroje na ploše zůstanou, aby se agent mohl zeptat, proč nejde nic použít, místo aby hádal.
Úrovně schválení
Sekce “Úrovně schválení”Každý nástroj deklaruje úroveň a ta rozhoduje, které plochy ho vidí — nejen jestli se ptá na schválení. Režim Plan a podagenti jen pro čtení jsou zastropovaní na read, takže nástroj úrovně write nebo exec v jejich schématu vůbec není.
| Úroveň | Význam | Nástroje tady |
|---|---|---|
read |
Bez vedlejších účinků | lsp, ast_grep, ask_user, pětice vibe_* |
write |
Mění soubory | lsp_rename, ast_edit, resolve |
exec |
Spouští nebo řídí proces | debug, eval |
lsp — dotazy na jazykový server
Sekce “lsp — dotazy na jazykový server”Registruje se, když má běh dohled jazykového serveru a pracovní adresář. Jestli server opravdu umí odpovědět, se zjistí až při volání, jako průnik: musí existovat kořenová značka a zároveň se musí najít binárka serveru. Jedno z toho samo znamená, že se server nespustí — řekne to status — místo tichého odhadu.
Pozice se adresují řádkem line a podřetězcem symbol, nikdy sloupcem. Model, který má uvést sloupec, hádá, a špatný odhad trefí jiný symbol na stejném řádku — odpověď, která vypadá správně a je o něčem jiném. Vynechat symbol u navigační akce je chyba, ne odhad prvního sloupce.
| Akce | Argumenty | Vrací |
|---|---|---|
diagnostics |
file (nebo "*") |
Chyby a varování; "*" místo toho spustí kontrolu projektu |
definition |
file, line, symbol |
Kde je symbol deklarovaný |
type_definition |
file, line, symbol |
Kde je deklarovaný jeho typ |
implementation |
file, line, symbol |
Konkrétní implementace |
references |
file, line, symbol |
Každé použití, strop 50 |
hover |
file, line, symbol |
Signatura a dokumentační komentář |
symbols |
query nebo file |
Hledání v pracovním prostoru přes query (strop 100); symboly dokumentu přes file (strop 200) |
code_actions |
file, line, symbol |
Rychlé opravy, které server nabízí |
status |
— | Které servery běží a pro které kořeny |
reload |
— | Restartuje server pro tenhle kořen |
Diagnostiky při zápisu
Sekce “Diagnostiky při zápisu”Přínos není samotný nástroj. write, edit a apply_patch jsou obalené: po zápisu se soubor přes jazykový server synchronizuje a uloží a do výsledku nástroje se složí jen nově zavedené diagnostiky. Agent se dozví, že rozbil sestavení, v okamžiku, kdy ho rozbil, a nemusí si vzpomenout, že se má zeptat.
Už nahlášené diagnostiky potlačuje evidence daného běhu, klíčovaná závažností, kódem a textem zprávy — pozice je schválně vynechaná, takže diagnostika, která jen sjela o čtyři řádky níž, se znovu nehlásí jako nová.
lsp_rename — přejmenování napříč projektem
Sekce “lsp_rename — přejmenování napříč projektem”Samostatný nástroj úrovně write z jediného důvodu: úroveň rozhoduje o viditelnosti. Složit přejmenování do lsp by buď dalo průzkumníkovi jen pro čtení možnost přepsat repozitář, nebo by každé hover schovalo za výzvu ke schválení.
| Argument | Význam |
|---|---|
file |
Kde symbol je |
line |
Řádek číslovaný od 1 |
symbol |
Podřetězec, který ho na tom řádku identifikuje |
new_name |
Jak se má jmenovat |
ast_grep — strukturální hledání
Sekce “ast_grep — strukturální hledání”Hledá kód podle tvaru, ne podle textu. $NAME sedí na libovolný uzel, $$$NAME na řadu sourozenců a $_ je zástupný znak, který nic nezachytí.
Vlastnost, která z něj dělá porovnávač, a ne regulární výraz s pár kroky navíc: metaproměnná zopakovaná v jednom vzoru musí zachytit tentýž text.
ast_grep(pattern: "if ($X != null) $X.dispose()", language: "dart")sedí na guard, který zavolá dispose na to, co právě otestoval, a nesedí na ten, který dispose zavolá na něco jiného.
| Argument | Význam |
|---|---|
pattern |
Fragment kódu s metaproměnnými |
path |
Soubor nebo adresář k prohledání; výchozí je celý pracovní prostor |
language |
Identifikátor dodávané gramatiky (dart, python, rust, c, …). Odvozený, když path pojmenuje soubor |
max_results |
Výchozí 50 |
ast_edit — strukturální přepis, připravený
Sekce “ast_edit — strukturální přepis, připravený”Stejné párování a k tomu šablona rewrite, do které se metaproměnné dosadí zpátky. Nic se nezapíše. Změna se připraví a výsledek pojmenuje edit_id.
ast_edit(pattern: "dispose($X)", rewrite: "$X.dispose()", language: "dart")→ (proposed) 12 replacements in 4 files … call resolve with edit_id "edit_1"| Argument | Význam |
|---|---|
pattern |
Co se má shodovat |
rewrite |
Co tam přijde, s dosazeným $NAME |
path |
Rozsah; výchozí je celý pracovní prostor |
language |
Identifikátor jazyka |
resolve — potvrď nebo zahoď připravenou změnu
Sekce “resolve — potvrď nebo zahoď připravenou změnu”| Argument | Význam |
|---|---|
edit_id |
Z výsledku (proposed) |
action |
accept nebo discard |
Každý soubor se porovná s obsahem zachyceným při přípravě a jakýkoli nesoulad odmítne celou změnu. Částečně provedený strukturální přepis nechá strom, který se nepřeloží ani ve starém tvaru, ani v novém.
debug — řízení debuggeru
Sekce “debug — řízení debuggeru”Registruje se, když má běh dohled ladicí relace, pracovní adresář a identifikátor konverzace. Jestli adaptér opravdu umí nastartovat, se zjistí až při volání, stejným pravidlem průniku jako u jazykového serveru (kořenová značka a zároveň binárka). Úroveň exec; není bezpečný pro paralelní volání (relace je stav napříč voláními, takže continue, které předběhne stack, by četlo rámec, který se už posunul).
Jedna relace na konverzaci, s tvrdou TTL (30 minut). Druhý launch se odmítne, místo aby první tiše nahradil.
| Operace | Argumenty | Poznámky |
|---|---|---|
adapters |
— | Které adaptéry se tu dají použít a proč ne |
status |
— | Jestli relace běží a kde se zastavila |
breakpoints |
file, lines[] |
Prázdné lines soubor vyčistí. Lze nastavit před spuštěním |
launch |
program, args[] |
Spustí program zastavený na tvých zarážkách |
attach |
port |
Připojí se k už běžícímu laděnému procesu |
continue |
thread_id? |
Běží do dalšího zastavení |
pause |
thread_id? |
Zastaví ho tam, kde právě je |
step_over / step_in / step_out |
thread_id? |
Posune o jeden krok |
threads |
— | Identifikátory a názvy vláken |
stack |
thread_id? |
Rámce, strop 30 |
scopes |
frame_id |
Rozsahy na rámci, každý s reference |
variables |
reference |
Potomci, strop 50, hodnoty strop 400 znaků |
evaluate |
expression, frame_id? |
Vyhodnoceno ve vlastním rozsahu rámce |
output |
— | stdout/stderr laděného procesu, ohraničené |
terminate |
— | Ukončí relaci a zabije adaptér |
Adaptéry
Sekce “Adaptéry”| Id | Příkaz | Kořenové značky |
|---|---|---|
dart |
dart debug_adapter |
pubspec.yaml |
debugpy |
python3 -m debugpy.adapter |
pyproject.toml, setup.py, requirements.txt |
lldb |
lldb-dap |
Cargo.toml, CMakeLists.txt |
delve |
dlv dap |
go.mod |
debugpy dává přednost projektovému .venv/bin nebo venv/bin před $PATH: python z $PATH je jiné prostředí a připojení ze špatného selže tak, že to vypadá jako rozbitý kód.
eval — persistentní interprety
Sekce “eval — persistentní interprety”Buňka Pythonu nebo JavaScriptu, jejíž proměnné, importy a načtená data mezi voláními přežijí. Úroveň exec; není bezpečný pro paralelní volání.
| Argument | Význam |
|---|---|
code |
Buňka |
description |
Povinné. 5–10 slov pro popisek v přepisu |
language |
python (výchozí) nebo javascript |
reset |
Zahodí interpret a nejdřív spustí čistý |
- Poslední výraz se vypíše jako v notebooku.
display()funguje, frame z pandas se vykreslí jako tabulka a figura z matplotlib se vrátí jako obrázek, který ukáže přepis.- Idiomy IPython, které se píšou reflexivně —
%pip,%cd,!cmd,%%bash,%%timeit— se přepíšou na obyčejný kód.%pipnavíc vyklidísys.modules, takže dalšíimportuvidí právě nainstalované.
Volání vlastních nástrojů z buňky
Sekce “Volání vlastních nástrojů z buňky”contents = tool("read", {"path": "lib/auth.dart"})Most znovu vstoupí do registru nástrojů harnessu, takže guardraily, schválení i každý obal platí přesně jako u volání, které vydal model. Jede po vlastní rouře kernelu, ne po loopback socketu: žádný port, žádné tajemství, žádné pravidlo odchozího provozu.
Časový limit buňky je rozpočet nečinnosti (výchozí 5 minut) a po dobu nevyřízeného volání přes most je pozastavený, takže buňka, která se rozvětví na podagenty, se uprostřed rozvětvení nezabije.
ask_user — zeptej se člověka
Sekce “ask_user — zeptej se člověka”Úroveň read. Jediný způsob, jak se běh na cokoli zeptá operátora. V konverzaci vykreslí očíslovanou kartu a blokuje, dokud někdo neodpoví, nepřeskočí, nebo dokud otázka nevyprší. Otázku nikdy nepiš jako zprávu do chatu — to ukončí tah.
| Argument | Význam |
|---|---|
question |
Na co se zeptat |
context |
Volitelné: proč se ptáš a co na odpovědi visí |
options[] |
Volby, každá {label, description?} |
allow_free_text |
Jestli se přijme napsaná odpověď |
multi_select |
Jestli lze zvolit několik možností |
Přeskočení je úspěch: pokračuj na vysloveném předpokladu a neptej se znovu. Vypršení je chyba se stejným pokynem. Výzvy k oprávnění („smím to udělat?“) jsou samostatná brána a vykreslí se jako stejná karta v konverzaci.
Registruje se jen tehdy, když existuje port pro otázky i cílový prostor. Bez připojeného člověka volání selže, místo aby blokovalo navždy — stejný uzavřený postoj, jaký zaujme prompt guardrailu, když není připojený schvalovatel.
vibe_* — řízení workerů na pozadí
Sekce “vibe_* — řízení workerů na pozadí”Registruje se jen tehdy, když je zapnutý režim vibe. Všech pět je na úrovni read: brána patří na nástroje workera, tam, kde se úprava opravdu děje.
| Nástroj | Argumenty | Poznámky |
|---|---|---|
vibe_spawn |
brief, label, tier? |
Vrátí se hned; worker běží dál |
vibe_send |
worker_id, message |
Připojí k zadání a spustí znovu |
vibe_wait |
worker_id, timeout_seconds? |
Blokuje, dokud se neusadí |
vibe_kill |
worker_id |
Zastaví ho |
vibe_list |
— | Úroveň, stav, uplynulý čas a poslední výsledek |
tier je fast (mechanická práce s jasnou specifikací) nebo good (návrh, úsudek, nebo revize výstupu workera fast).