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.
Paliers d’approbation
Section intitulée « Paliers d’approbation »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 |
lsp — requêtes de serveur de langage
Section intitulée « lsp — requêtes de serveur de langage »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 |
Diagnostics à l’écriture
Section intitulée « Diagnostics à l’écriture »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 |
ast_grep — recherche structurelle
Section intitulée « ast_grep — recherche structurelle »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.
debug — piloter un débogueur
Section intitulée « debug — piloter un débogueur »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 |
Adaptateurs
Section intitulée « Adaptateurs »| 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é.
eval — interpréteurs persistants
Section intitulée « eval — interpréteurs persistants »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.%pipvide en outresys.modules, de sorte que le prochainimportvoit ce qui vient d’être installé.
Appeler vos propres outils depuis une cellule
Section intitulée « Appeler vos propres outils depuis une cellule »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.
ask_user — poser une question à l’humain
Section intitulée « ask_user — poser une question à l’humain »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é.
vibe_* — diriger des workers en arrière-plan
Section intitulée « vibe_* — diriger des workers en arrière-plan »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).