Exécuter des appels d'outils depuis du code avec Code Mode
Essayez Code Mode, une fonctionnalité expérimentale dans laquelle Claude écrit du JavaScript qui effectue plusieurs appels d'outils en une seule étape.
Code Mode modifie la façon dont Claude utilise ses outils. Sans Code Mode, Claude demande directement des appels d'outils tels que Bash, Read ou Edit et lit chaque résultat avant de décider de la suite. Avec Code Mode, Claude écrit un morceau de JavaScript qui effectue les appels d'outils, et Claude Code exécute ce code dans votre session.
[!NOTE]
Code Mode est expérimental et désactivé par défaut. Il peut changer ou être supprimé dans n'importe quelle version. Pour partager vos commentaires, exécutez
/feedback.
Fonctionnement de Code Mode
Dans une session Code Mode, vous décrivez toujours votre tâche dans un prompt, et Claude écrit du JavaScript pour l'accomplir. Un seul morceau de code peut exécuter des commandes en parallèle, utiliser un résultat dans l'appel suivant et renvoyer la partie de la sortie que Claude doit lire.
Par exemple, si vous demandez à Claude d'augmenter une limite de nouvelles tentatives, Claude peut écrire ce code pour trouver le fichier, le modifier et exécuter les tests. La dernière ligne renvoie à Claude le chemin du fichier et la sortie des tests :
const files = await $`rg -l "function retryPolicy" src`.text();
const target = files.trim().split("\n")[0];
await edit(target, "maxAttempts: 3", "maxAttempts: 5");
({ edited: target, tests: $`npm test -- retryPolicy`.nothrow() });
Dans la conversation, vous voyez les appels d'outils, comme le diff de la modification, et non le code. Pour lire le code, appuyez sur Ctrl+O afin d'ouvrir la visionneuse de transcription. Chaque morceau de code y apparaît sous la forme d'une ligne Code réduite, accompagnée d'une indication sur la façon de la développer.
Quand utiliser Code Mode
Essayez Code Mode sur des tâches qui nécessitent de nombreux appels d'outils liés, par exemple :
- Une modification qui se répète dans de nombreux fichiers
- Une recherche dont les résultats doivent être filtrés avant que Claude ne les lise
- Plusieurs commandes indépendantes qui peuvent s'exécuter en même temps
Limitations de Code Mode
Avant d'activer Code Mode, vérifiez que vous pouvez accepter ces limites :
- Reprise : vous ne pouvez reprendre une session Code Mode que dans le terminal, avec Code Mode activé
- Mode auto : le classifieur du mode auto examine le code, et non chaque appel d'outil
- Code de longue durée : sauf si le code peut s'exécuter en arrière-plan, vous attendez qu'il se termine, et il s'arrête au bout de dix minutes
- Hooks : vous pouvez voir des appels d'outils refusés lorsqu'un hook
PreToolUsene peut pas s'exécuter ou expire, et une sortie de code bloquée par un hookUserPromptSubmit - Fonctionnalités indisponibles : vous ne pouvez pas utiliser Remote Control, Claude in Chrome ni computer use
- Déplacement de la session : vous ne pouvez pas déplacer la session vers l'application Desktop ni la transformer en session en arrière-plan, et
/forkne peut pas démarrer de copie en arrière-plan
Prérequis
- Version : Claude Code v2.1.323 ou ultérieure, sur l'un ou l'autre canal de publication. Une version plus ancienne démarre sans Code Mode, avec ou sans la raison
it isn't open to your account yet - Compte : un abonnement Claude ou un compte Console. Vous ne pouvez pas utiliser Code Mode via une passerelle, Amazon Bedrock, Claude Platform on AWS, Agent Platform de Google Cloud ou Microsoft Foundry
- Organisation : votre organisation n'utilise ni la configuration HIPAA ni la conservation zéro des données
- Modèle : Claude Opus 5.5, Sonnet 5.5, Haiku 5.5 ou Fable 5.2
- Surface : une session
claudeinteractive dans un terminal. Code Mode ne fonctionne pas avec-p, l'Agent SDK, le panneau VS Code, l'application Desktop ni les sessions cloud - Installation : le build natif de Claude Code
- Windows : Git for Windows est installé
Vous ne pouvez pas non plus démarrer Code Mode lorsque certains paramètres sont activés, comme un assistant de clé API, les équipes d'agents, l'export OpenTelemetry ou DISABLE_TELEMETRY. Pour la solution à chacun de ces cas, consultez Code Mode ne démarre pas.
Essayer Code Mode
Activez Code Mode, confiez une tâche à Claude et examinez le code que Claude a écrit.
1. Vérifier votre version
Exécutez claude --version. Si la version est antérieure à v2.1.323, exécutez claude update. Si vous êtes sur le canal stable et que la mise à jour n'atteint pas v2.1.323, attendez que stable rattrape son retard ou passez à latest.
2. Démarrer Claude Code avec Code Mode activé
Définissez la variable d'environnement CLAUDE_CODE_EXPERIMENTAL_CODE_MODE sur 1. Pour essayer Code Mode, définissez-la dans votre shell. Pour activer Code Mode pour chaque nouvelle session, définissez-la dans vos paramètres utilisateur.
[tab] macOS, Linux, WSL
CLAUDE_CODE_EXPERIMENTAL_CODE_MODE=1 claude
[tab] Windows PowerShell
$env:CLAUDE_CODE_EXPERIMENTAL_CODE_MODE = "1" claude
[tab] settings.json
Enregistrez ce bloc
envdans~/.claude/settings.jsonet démarrezclaude:{ "env": { "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "1" } }Claude Code ignore cette variable dans les fichiers de paramètres d'un projet, de sorte qu'un dépôt que vous clonez ne peut pas activer Code Mode à votre place.
3. Confirmer que vous souhaitez utiliser Code Mode
Claude Code vous demande de confirmer avant votre première session Code Mode. Sélectionnez Yes, turn on Code Mode. Claude Code redémarre et affiche cette ligne en haut de la session :
Code Mode (experimental) is on · this session can be resumed only with Code Mode on
Si vous voyez une ligne différente ou aucune ligne, consultez Code Mode ne démarre pas.
4. Confier à Claude une tâche comportant de nombreux appels d'outils
Dans un projet que vous connaissez, envoyez un prompt tel que celui-ci :
Read every Markdown file in this project and list the links that point to local files that don't exist.
5. Lire le code écrit par Claude
Appuyez sur Ctrl+O et développez une ligne Code pour voir le JavaScript derrière les appels d'outils. Appuyez de nouveau sur Ctrl+O pour revenir à la conversation.
[!WARNING]
Pour reprendre ultérieurement une session Code Mode, laissez
CLAUDE_CODE_EXPERIMENTAL_CODE_MODEdéfini sur1lorsque vous exécutezclaude --continueouclaude --resume. Lorsque Code Mode est désactivé, Claude Code refuse de reprendre la session. Les sessions que vous avez démarrées sans Code Mode reprennent sans Code Mode, même si la variable est définie.
Désactiver Code Mode
Supprimez CLAUDE_CODE_EXPERIMENTAL_CODE_MODE de votre shell et de ~/.claude/settings.json, puis démarrez une nouvelle session. Vous pouvez aussi conserver la variable et changer sa valeur en 0 à l'un ou l'autre de ces emplacements. Avec un 0 à un emplacement, Code Mode reste désactivé même si vous définissez 1 à l'autre.
Bloquer Code Mode pour votre organisation
Ajoutez CLAUDE_CODE_EXPERIMENTAL_CODE_MODE avec la valeur 0 à vos paramètres gérés afin que personne dans votre organisation ne puisse utiliser Code Mode :
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "0"
}
}
Les utilisateurs qui se trouvent dans une session Code Mode y restent jusqu'à ce qu'ils quittent ou redémarrent Claude Code. Ensuite, vos utilisateurs démarrent sans Code Mode et ne peuvent pas reprendre leurs sessions Code Mode tant que le 0 est en place. Vous ne pouvez pas activer Code Mode pour vos utilisateurs depuis les paramètres gérés.
Permissions et code de longue durée
Votre mode de permission détermine la façon dont le code de Claude est vérifié et si vous pouvez parler à Claude pendant l'exécution du code.
Vérifications des permissions
Chaque appel d'outil effectué par le code de Claude passe par vos règles de permission deny et ask ainsi que par vos hooks PreToolUse. Vous n'avez pas besoin de modifier une règle ou un matcher pour un outil tel que Bash. Au-delà des règles et des hooks, un classifieur examine le code en mode auto, et vous répondez aux demandes de permission dans les modes qui en affichent :
- Mode auto : le classifieur examine chaque morceau de code avant son exécution, et non chaque appel d'outil. Il ne voit pas les valeurs calculées à l'exécution, comme un chemin tiré d'une sortie de recherche ; conservez donc des règles ou des hooks pour les appels que vous devez contrôler. Des demandes de permission peuvent toujours vous être présentées lorsqu'un nouveau code démarre alors qu'un code antérieur est en cours d'exécution
- Autres modes de permission : le code démarre sans examen, et une demande de permission vous est présentée pour chaque appel d'outil qui vous en présenterait une dans ce mode
Pour vérifier le code lui-même, écrivez un hook PreToolUse qui correspond à REPL, l'outil qui exécute le code de Claude, et lisez le JavaScript depuis tool_input.code.
[!WARNING]
Les règles Bash correspondent au texte des commandes ; Claude peut donc exécuter une commande refusée sous une forme à laquelle la règle ne correspond pas, avec ou sans Code Mode. Pour des limites qui ne dépendent pas du texte des commandes, consultez sandboxing.
Code de longue durée
Lorsque le code exécute un build ou des tests longs, Claude l'attend ou le laisse se poursuivre en arrière-plan :
- Attente : Claude répond une fois le code terminé, et le code s'arrête au bout de dix minutes, y compris le temps que vous passez sur les demandes de permission
- Arrière-plan : vous pouvez continuer à parler à Claude, et le code peut s'exécuter jusqu'à deux heures
Pour exécuter du code en arrière-plan, démarrez votre session en mode auto ou bypassPermissions. Si Claude attend toujours, vérifiez votre mode actuel et la façon dont vous avez démarré la session :
- Vous êtes passé à un autre mode : appuyez sur
Shift+Tabjusqu'à revenir au mode dans lequel vous avez démarré - Vous avez démarré dans un autre mode, ou avez choisi la session dans la liste
claude --resume: si le mode auto est disponible pour vous, quittez, puis exécutezclaude --continue --permission-mode autoavec Code Mode activé - Vous avez passé des noms d'outils à
--tools: redémarrez en mode auto sans ce flag
Dépannage
Code Mode ne démarre pas
Code Mode (experimental) isn't available en haut de la session signifie que Claude Code a démarré sans Code Mode. La raison suit sur la même ligne, et /status l'affiche également. Trouvez la raison dans ce tableau, effectuez la modification et démarrez une nouvelle session. Pour une raison qui ne figure pas dans la liste, consultez les prérequis.
| La raison contient | Que faire |
|---|---|
it isn't open to your account yet |
Si votre version est antérieure à v2.1.323, mettez à jour. Sinon, vérifiez votre connexion réseau et recommencez. Si la raison persiste, réessayez un autre jour |
it only works with the Anthropic API |
Supprimez les paramètres qui acheminent les requêtes via un fournisseur cloud, une passerelle ou une ANTHROPIC_BASE_URL personnalisée |
it doesn't work with an API key helper |
Supprimez apiKeyHelper, ANTHROPIC_AUTH_TOKEN et tout en-tête Authorization ou X-Api-Key dans ANTHROPIC_CUSTOM_HEADERS. Connectez-vous ensuite ou définissez ANTHROPIC_API_KEY |
it only works with Opus 5.5, Sonnet 5.5 and later models |
Démarrez avec un modèle pris en charge, par exemple avec --model opus. Haiku 5.5 et Fable 5.2 fonctionnent également |
it doesn't work in background jobs |
Démarrez au premier plan, sans --remote-control |
it needs settings that Claude Code downloads from Anthropic |
Supprimez la variable qui désactive la récupération des feature flags, comme DISABLE_TELEMETRY |
OpenTelemetry is on |
Supprimez CLAUDE_CODE_ENABLE_TELEMETRY et ENABLE_BETA_TRACING_DETAILED si vous pouvez vous passer de l'export OpenTelemetry |
it doesn't yet work with an installed mod |
Désactivez le mod qui vérifie les appels d'outils |
it can't be used together with agent teams yet |
Supprimez CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS |
this launch's tool options |
Démarrez sans --restricted, ajoutez REPL à --tools et retirez REPL de --disallowedTools et de vos règles deny |
couldn't save your answer |
Rendez ~/.claude.json accessible en écriture |
your organization's settings don't allow it |
Interrogez votre administrateur au sujet du paramètre géré |
Si vous ne voyez aucune ligne concernant Code Mode, exécutez claude --version. Si votre version est antérieure à v2.1.323, mettez à jour. Vérifiez ensuite que CLAUDE_CODE_EXPERIMENTAL_CODE_MODE vaut 1 dans votre shell ou vos paramètres utilisateur, et supprimez tout 0 de ces emplacements ainsi que de tout fichier --settings.
Demande de permission avec compte à rebours
Lorsque Claude démarre du code supplémentaire en mode auto alors qu'un code antérieur est encore en cours d'exécution, le code antérieur perd l'examen du classifieur. Claude Code vous interroge alors sur les appels restants du code antérieur qui nécessiteraient un examen. Si aucun IDE n'est connecté, la demande de permission affiche un compte à rebours :
Claude Code will automatically block this request in 1:59, to avoid holding up an unattended session
Répondez avant la fin du compte à rebours. Sinon, cet appel est refusé, et les appels suivants qui afficheraient un compte à rebours sont refusés sans demande de permission. Pour voir de nouveau les demandes de permission, envoyez un message à Claude.
Appel d'outil refusé par un hook
Si Claude signale un appel d'outil refusé, demandez-lui le texte de l'erreur. Ces erreurs signifient qu'un hook PreToolUse n'a pas fourni de décision, ce qui refuse l'appel même lorsque onFailure n'est pas défini :
the hook failed: lors d'un appel provenant du code de Claude, votre hook n'a pas pu démarrer, a été arrêté de force, s'est terminé avec le code 126, 127 ou un code supérieur à 128, ou a renvoyé une erreur HTTP ou une sortie non valide. Corrigez le hookthe hook did not finish: votre hook a expiré lors d'un appel provenant du code de Claude, ou lors de tout autre appel d'outil une fois que Claude a exécuté du code dans la session. Augmentez letimeoutdu hook
Pour laisser les appels se poursuivre lorsqu'un hook command ou http échoue ou expire, définissez "onFailure": "continue" sur celui-ci. Si un hook command se termine avec un code ordinaire tel que 1, l'appel se poursuit, sauf si vous définissez "onFailure": "block".
Sortie de code retenue par un hook
Si Claude signale la raison de blocage d'un hook là où vous attendiez la sortie du code de Claude, vérifiez vos hooks UserPromptSubmit. Lorsque le code peut s'exécuter en arrière-plan, les hooks command, http et mcp_tool associés à cet événement s'exécutent aussi sur la sortie du code. Pour laisser passer la sortie, modifiez le hook afin qu'il ne bloque pas lorsque source dans son entrée vaut poll_event.
Ressources associées
- Modes de permission : comparer le mode auto avec les modes qui vous présentent des demandes de permission
- Référence des hooks : écrire des hooks
PreToolUseetUserPromptSubmit - Paramètres gérés : appliquer une configuration unique à l'ensemble d'une organisation