Aller au contenu

Outils d’agent intégrés

Voici les outils liés au serveur que le moteur d’exécution d’agent intégré enregistre directement — serveur de langage, recherche structurelle, débogueur, noyaux, questions et contrôle des workers — par opposition aux outils MCP qu’il intègre par passerelle et aux outils génériques de fichiers, de recherche et de shell du moteur d’exécution du harnais. Ils ne figurent pas dans le registre MCP : un client MCP externe ne les verra pas, car chacun est lié à une ressource côté serveur vivante — un processus de serveur de langage, un adaptateur de débogage, un interpréteur — qui appartient à une seule exécution.

Chaque outil de cette page n’est enregistré que lorsque la ressource qui le sous-tend est câblée pour l’exécution — un superviseur de serveur de langage ou de débogage, un analyseur tree-sitter, une fabrique de noyaux, un port de questions, une liste de workers vibe. La détection d’un serveur de langage ou d’un adaptateur de débogage pour cette copie de travail est une vérification distincte et ultérieure (status / adapters) : ces outils restent sur la surface pour que l’agent puisse demander pourquoi rien n’est utilisable, plutôt que de deviner.

Chaque outil déclare un palier, et le palier décide quelles surfaces le voient — pas seulement s’il demande une approbation. Le mode plan et les sous-agents en lecture seule sont plafonnés à read, donc un outil de palier write ou exec est totalement absent de leur schéma.

Palier Signification Outils ici
read Aucun effet de bord lsp, ast_grep, ask_user, les cinq vibe_*
write Modifie des fichiers lsp_rename, ast_edit, resolve
exec Démarre ou pilote un processus debug, eval

Enregistré lorsque l’exécution dispose d’un superviseur de serveur de langage et d’un répertoire de travail. Savoir si un serveur peut réellement répondre est détecté au moment de l’appel, sous forme d’intersection : un marqueur racine doit exister et le binaire du serveur doit être résolvable. L’un ou l’autre seul signifie qu’aucun serveur ne démarre — status le dit — plutôt qu’une supposition silencieuse.

Les positions sont désignées par line plus une sous-chaîne symbol, jamais par colonne. Un modèle à qui l’on demande une colonne devine, et une mauvaise supposition se résout sur un autre symbole de la même ligne — une réponse qui a l’air juste et qui porte sur autre chose. Omettre symbol sur une action de navigation est une erreur, pas une supposition de première colonne.

Action Arguments Renvoie
diagnostics file (ou "*") Erreurs et avertissements ; "*" exécute le vérificateur du projet à la place
definition file, line, symbol Où le symbole est déclaré
type_definition file, line, symbol Où son type est déclaré
implementation file, line, symbol Les implémentations concrètes
references file, line, symbol Chaque utilisation, plafonnée à 50
hover file, line, symbol Signature et commentaire de documentation
symbols query ou file Recherche dans l’espace de travail avec query (plafonnée à 100) ; symboles du document avec file (plafonnés à 200)
code_actions file, line, symbol Correctifs rapides proposés par le serveur
status — Quels serveurs sont en cours, et pour quelles racines
reload — Redémarre le serveur pour cette racine

Le bénéfice ne vient pas de l’outil. write, edit et apply_patch sont enveloppés : après l’écriture, le fichier est synchronisé et enregistré via le serveur de langage, et seuls les diagnostics nouvellement introduits sont intégrés au résultat de l’outil. Un agent apprend qu’il a cassé la compilation au moment où il l’a cassée, sans avoir à penser à poser la question.

Les diagnostics déjà signalés sont supprimés par un registre par exécution indexé sur la gravité, le code et le message — la position étant délibérément exclue, pour qu’un diagnostic qui a simplement descendu de quatre lignes ne soit pas signalé de nouveau comme nouveau.

lsp_rename — renommage à l’échelle du projet

Section intitulée « lsp_rename — renommage à l’échelle du projet »

Un outil distinct, de palier write, pour une seule raison : le palier décide de la visibilité. Replier le renommage dans lsp donnerait soit à un explorateur en lecture seule la capacité de réécrire le dépôt, soit mettrait chaque hover derrière une demande d’approbation.

Argument Signification
file Où se trouve le symbole
line Ligne indexée à partir de 1
symbol Sous-chaîne qui l’identifie sur cette ligne
new_name Le nom à lui donner

Trouve du code par sa forme plutôt que par son texte. $NAME correspond à n’importe quel nœud, $$$NAME à une suite de frères, et $_ est un joker qui ne lie rien.

La propriété qui en fait un moteur de correspondance plutôt qu’une expression régulière avec des étapes en plus : une métavariable répétée dans un même motif doit capturer le même texte.

ast_grep(pattern: "if ($X != null) $X.dispose()", language: "dart")

correspond à une garde qui libère ce qu’elle a testé, et ne correspond pas à une garde qui libère autre chose.

Argument Signification
pattern Un fragment de code avec des métavariables
path Fichier ou répertoire à explorer ; par défaut, tout l’espace de travail
language Un identifiant de grammaire embarqué (dart, python, rust, c, …). Déduit lorsque path désigne un fichier
max_results 50 par défaut

ast_edit — réécriture structurelle, préparée

Section intitulée « ast_edit — réécriture structurelle, préparée »

Même correspondance, plus un modèle rewrite où les métavariables sont réinjectées. Rien n’est écrit. La modification est préparée et le résultat nomme un 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 Signification
pattern Ce qu’il faut faire correspondre
rewrite Ce qu’il faut mettre à la place, avec $NAME substitué
path Portée ; par défaut, tout l’espace de travail
language Identifiant de langage

resolve — valider ou abandonner une modification préparée

Section intitulée « resolve — valider ou abandonner une modification préparée »
Argument Signification
edit_id Provenant du résultat (proposed)
action accept ou discard

Chaque fichier est comparé au contenu capturé au moment de la préparation, et la moindre divergence fait échouer la modification dans son ensemble. Une réécriture structurelle partiellement appliquée laisse un arbre qui ne compile sous aucune des deux formes.


Enregistré lorsque l’exécution dispose d’un superviseur de session de débogage, d’un répertoire de travail et d’un identifiant de conversation. Savoir si un adaptateur peut réellement démarrer est détecté au moment de l’appel, selon la même règle d’intersection que le serveur de langage (marqueur racine et binaire). Palier exec ; non sûr en parallèle (une session est un état qui traverse les appels, donc un continue qui dépasse stack lirait un cadre qui a déjà bougé).

Une seule session par conversation, avec une durée de vie stricte (30 minutes). Un second launch est refusé plutôt que de remplacer silencieusement le premier.

Op Arguments Notes
adapters — Quels adaptateurs sont utilisables ici, et pourquoi pas
status — Si une session est en cours, et où elle s’est arrêtée
breakpoints file, lines[] Un lines vide efface le fichier. Peut être défini avant le lancement
launch program, args[] Démarre le programme arrêté sur vos points d’arrêt
attach port Se connecte à un programme débogué déjà en cours d’exécution
continue thread_id? Exécute jusqu’au prochain arrêt
pause thread_id? L’arrête là où il en est
step_over / step_in / step_out thread_id? Avance d’un pas
threads — Identifiants et noms des threads
stack thread_id? Cadres, plafonnés à 30
scopes frame_id Portées d’un cadre, chacune avec une reference
variables reference Enfants, plafonnés à 50, valeurs plafonnées à 400 caractères
evaluate expression, frame_id? Évaluée dans la portée propre du cadre
output — La sortie standard et la sortie d’erreur du programme débogué, bornées
terminate — Met fin à la session et tue l’adaptateur
Id Commande Marqueurs racine
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 préfère un .venv/bin ou venv/bin local au projet à $PATH : un python de $PATH est un environnement différent, et s’y attacher depuis le mauvais échoue d’une manière qui se lit comme du code cassé.


Une cellule Python ou JavaScript dont les variables, les imports et les données chargées survivent d’un appel à l’autre. Palier exec ; non sûr en parallèle.

Argument Signification
code La cellule
description Obligatoire. 5 à 10 mots pour le libellé de la transcription
language python (par défaut) ou javascript
reset Abandonne l’interpréteur et repart d’un état propre
  • La dernière expression est renvoyée comme le ferait un notebook.
  • display() fonctionne, un dataframe pandas est rendu sous forme de tableau, et une figure matplotlib revient sous forme d’image que la transcription affiche.
  • Les idiomes IPython que l’on tape par réflexe — %pip, %cd, !cmd, %%bash, %%timeit — sont réécrits en code ordinaire. %pip vide en outre sys.modules, de sorte que le prochain import voit ce qui vient d’être installé.
contents = tool("read", {"path": "lib/auth.dart"})

La passerelle re-entre dans le registre d’outils du harnais, si bien que les garde-fous, l’approbation et chaque enveloppe s’appliquent exactement comme à un appel émis par le modèle. Elle emprunte le tube propre du noyau plutôt qu’un socket de bouclage : aucun port, aucun secret, aucune règle de sortie réseau.

Le délai d’expiration de la cellule est un budget d’inactivité (5 minutes par défaut) et il est suspendu tant qu’un appel via la passerelle est en cours, de sorte qu’une cellule qui se ramifie vers des sous-agents n’est pas tuée en pleine ramification.


Palier read. La seule façon dont une exécution demande quoi que ce soit à l’opérateur. Elle affiche une carte numérotée dans la conversation et bloque jusqu’à ce que quelqu’un réponde, ignore, ou que la question expire. N’écrivez jamais la question comme un message de chat — cela termine le tour.

Argument Signification
question Ce qu’il faut demander
context Facultatif : pourquoi vous posez la question et ce qui dépend de la réponse
options[] Des choix, chacun {label, description?}
allow_free_text Si une réponse saisie au clavier est acceptée
multi_select Si plusieurs options peuvent être choisies

Une réponse ignorée est un succès : poursuivez sur une hypothèse énoncée et ne reposez pas la question. Une expiration est une erreur avec la même instruction. Les demandes d’autorisation (« puis-je faire ceci ? ») sont une barrière distincte et s’affichent comme la même carte dans la conversation.

Enregistré uniquement lorsqu’un port de questions et un espace cible existent tous les deux. Sans humain rattaché, l’appel échoue plutôt que de bloquer indéfiniment — la même posture de refus par défaut qu’adopte un prompt de garde-fou sans approbateur connecté.


Enregistrés uniquement tant que le mode vibe est actif. Les cinq sont de palier read : la barrière appartient aux outils du worker, là où la modification a réellement lieu.

Outil Arguments Notes
vibe_spawn brief, label, tier? Renvoie immédiatement ; le worker continue de tourner
vibe_send worker_id, message Ajoute au brief et relance
vibe_wait worker_id, timeout_seconds? Bloque jusqu’à ce qu’il ait terminé
vibe_kill worker_id L’arrête
vibe_list — Palier, statut, temps écoulé et dernier résultat

tier vaut fast (travail mécanique avec une spécification claire) ou good (conception, jugement, ou relecture de la sortie d’un worker fast).