-p avec votre prompt et les options CLI dont vous avez besoin :
claude -p). Pour les packages SDK Python et TypeScript avec sorties structurées, callbacks d’approbation d’outils et objets de message natifs, consultez la documentation complète de l’Agent SDK.
Utilisation basique
Ajoutez le flag-p (ou --print) à n’importe quelle commande claude pour l’exécuter de manière non-interactive. Toutes les options CLI ne se combinent pas avec -p. Claude Code rejette --bg, et rejette --cloud avec une description de tâche, avec une erreur nommant le conflit ; --cloud avec un ID de session et -p à la place met en file d’attente un message dans cette session cloud et se termine. Les options que vous combinerez souvent avec -p incluent :
--continuepour continuer les conversations--allowedToolspour approuver automatiquement les outils--output-formatpour obtenir une sortie structurée
Démarrer plus rapidement avec le mode bare
Ajoutez--bare pour réduire le temps de démarrage en ignorant la découverte automatique des hooks, skills, commandes personnalisées, sous-agents, plugins installés, serveurs MCP, mémoire automatique et CLAUDE.md. Sans cela, claude -p charge le même contexte qu’une session interactive, y compris tout ce qui est configuré dans le répertoire de travail ou ~/.claude.
Le mode bare est utile pour CI et les scripts où vous avez besoin du même résultat sur chaque machine. Un hook dans le ~/.claude d’un coéquipier ou un serveur MCP dans le .mcp.json du projet ne s’exécutera pas, car le mode bare ne les lit jamais. Un répertoire que vous nommez avec --add-dir est une exception partielle : le mode bare charge les skills de son dossier .claude/skills/, mais ignore toujours ses dossiers .claude/commands/ et .claude/agents/. Skills from additional directories couvre ce qui se charge et ce qui ne se charge pas.
Sans --bare, une session -p exécute les hooks dans le .claude/settings.json d’un projet et connecte les serveurs dans son .mcp.json, même dans un dossier que vous n’avez jamais approuvé. Une session -p n’affiche aucune boîte de dialogue de confiance d’espace de travail et aucune invite d’approbation par serveur. What runs before you trust a folder couvre chaque type de contenu de référentiel sous -p et comment le garder à l’écart.
Cet exemple exécute une tâche de résumé ponctuelle en mode bare et pré-approuve l’outil Read pour que l’appel se termine sans invite de permission. Définissez ANTHROPIC_API_KEY avant de l’exécuter, car le mode bare n’utilise pas votre connexion d’abonnement :
ANTHROPIC_API_KEY dans l’environnement, avec une clé créée dans la Claude Console, ou fournissez un apiKeyHelper dans le JSON --settings. Amazon Bedrock, Google Cloud’s Agent Platform et Microsoft Foundry continuent à lire leurs propres identifiants de fournisseur comme d’habitude.
En mode bare, Claude a accès aux outils Bash, lecture de fichier et modification de fichier. Passez tout contexte dont vous avez besoin avec un flag :
--bare est le mode recommandé pour les appels scriptés et SDK, et deviendra le mode par défaut pour -p dans une version future.Tâches en arrière-plan à la sortie
Si Claude démarre une tâche Bash en arrière-plan lors d’une exécutionclaude -p, par exemple un serveur de développement ou une compilation en surveillance, ce shell est terminé environ cinq secondes après que Claude ait retourné son résultat final et que stdin ait été fermé. La période de grâce permet à une tâche qui se termine juste après le résultat de livrer quand même sa sortie.
Si Claude démarre un sous-agent en arrière-plan ou un workflow, claude -p reste plutôt ouvert jusqu’à ce que ce travail se termine, car son résultat fait partie de la sortie finale.
Par défaut, l’attente se termine après 10 minutes d’attente continue inactive, donc un sous-agent ou un workflow bloqué ne peut pas maintenir le processus ouvert indéfiniment. À ce stade, Claude Code arrête tout ce qui s’exécute toujours et abandonne son résultat partiel. Pour modifier la limite, définissez CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS, ou définissez-le sur 0 pour attendre sans limite.
Si Claude démarre une montre Monitor lors d’une exécution claude -p, Claude Code attend la montre jusqu’à ce qu’elle expire ou que le plafond de dix minutes termine l’attente, selon ce qui arrive en premier. Pendant qu’il attend, Claude continue à répondre à ce que la montre signale. Par défaut, une montre expire cinq minutes après que Claude la démarre.
Arrêter une exécution avec SIGTERM
Si vous arrêtez une exécutionclaude -p avec SIGTERM, par exemple avec kill ou depuis un superviseur de processus, Claude Code se termine avec le code 143. Claude Code laisse le tour en cours inachevé et n’enregistre aucun résultat pour celui-ci. Pour terminer le tour à la place, envoyez SIGINT, ou appelez interrupt() du SDK Agent, avant d’arrêter le processus.
Sur SIGTERM, Claude Code termine l’arborescence des processus de toute commande Bash qui s’exécute toujours. Claude Code exécute ensuite les hooks SessionEnd et se termine. Lors de la sortie, Claude Code ne démarre aucun nouvel appel d’outil, n’envoie aucune nouvelle demande de modèle et n’exécute aucun hook autre que SessionEnd. Si l’exécution était au milieu d’une commande ou en attente d’une réponse à une invite de permission quand le signal est arrivé, Claude Code gère cette étape comme suit :
- Exécution d’une commande : Claude Code enregistre la commande comme tuée dans la session.
- En attente d’une réponse à une invite de permission : si vous envoyez SIGTERM au processus, Claude Code laisse l’invite sans réponse. Si votre programme ferme la session via le SDK Agent, le SDK termine l’entrée de Claude Code avant d’envoyer un signal, et Claude Code annule l’invite dès que l’entrée se termine.
CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1.
Si le répertoire de travail est supprimé
Si le répertoire de travail d’une sessionclaude -p ou Agent SDK est supprimé en cours de session, la session continue de s’exécuter. Quand un tour commence alors que le répertoire est manquant, Claude Code émet un message d’avertissement dans la sortie stream-json, et les commandes shell échouent jusqu’à ce que le répertoire existe à nouveau.
Exemples
Ces exemples mettent en évidence les modèles CLI courants. Lorsqu’une commande nomme un fichier tel queauth.py ou build-error.txt, remplacez-le par un fichier de votre propre projet. Dans les environnements CI ou autres environnements scriptés, ajoutez --bare pour que Claude Code démarre sans charger les hooks, plugins, mémoire automatique ou CLAUDE.md de l’hôte.
Transmettre des données via Claude
Le mode non interactif lit stdin, vous pouvez donc transmettre des données et rediriger la réponse comme n’importe quel autre outil en ligne de commande. Cet exemple transmet un journal de compilation à Claude et écrit l’explication dans un fichier :--output-format json, la charge utile de réponse inclut total_cost_usd et une ventilation des coûts par modèle, afin que les appelants scriptés puissent suivre les dépenses sans consulter le tableau de bord d’utilisation. Lorsque vous continuez une conversation antérieure avec --continue ou --resume, l’exécution rapporte le total de la conversation, les dépenses des exécutions antérieures incluses. Les deux chiffres sont des estimations côté client et peuvent différer de votre facture réelle.
L’entrée stdin transmise est limitée à 10 Mo. Si vous dépassez la limite, Claude Code se ferme avec une erreur claire et un statut non nul. Pour travailler avec des entrées plus volumineuses, écrivez le contenu dans un fichier et référencez le chemin du fichier dans votre invite au lieu de le transmettre.
Ajouter Claude à un script de compilation
Vous pouvez envelopper un appel non interactif dans un script pour utiliser Claude comme linter ou examinateur spécifique au projet. Ce scriptpackage.json transmet le diff par rapport à main à Claude et lui demande de signaler les fautes de frappe. Transmettre le diff signifie que Claude n’a pas besoin de permission Bash pour le lire, et les guillemets échappés gardent le script portable vers Windows :
npm run lint:claude.
Obtenir une sortie structurée
Utilisez--output-format pour contrôler la façon dont les réponses sont renvoyées :
text(par défaut) : sortie en texte brutjson: JSON structuré avec résultat, ID de session et métadonnéesstream-json: JSON délimité par des sauts de ligne pour le streaming en temps réel
result :
--output-format json avec --json-schema et une définition JSON Schema. La réponse inclut les métadonnées de la requête (ID de session, utilisation, etc.) avec la sortie structurée dans le champ structured_output.
Cet exemple extrait les noms de fonction et les retourne sous forme de tableau de chaînes :
claude se ferme avec Error: --json-schema is not a valid JSON Schema suivi du diagnostic du validateur. Claude Code accepte les schémas qui utilisent le mot-clé format, tel que "format": "email", mais traite format comme une annotation et ne l’applique pas. Avant la v2.1.205, Claude Code ignorait silencieusement un schéma invalide et retournait du texte non structuré, et traitait tout schéma contenant format comme invalide.
Réponses en streaming
Utilisez--output-format stream-json avec --verbose et --include-partial-messages pour recevoir les jetons au fur et à mesure qu’ils sont générés. Chaque ligne est un objet JSON représentant un événement :
result avec le texte de réponse final, le coût et les métadonnées de session.
Si votre consommateur lit le flux lentement, Claude Code attend que la sortie en file d’attente se vide avant de se fermer, en mettant à l’échelle l’attente en fonction de la quantité restante en file d’attente, plafonnée à 30 secondes. Avant la v2.1.214, l’attente de fermeture était plafonnée à environ deux secondes, ce qui pouvait couper la fin d’une grande réponse.
L’exemple suivant utilise jq pour filtrer les deltas de texte et afficher uniquement le texte en streaming. L’indicateur -r génère des chaînes brutes (sans guillemets) et -j joint sans sauts de ligne pour que les jetons se transmettent continuellement :
Suivre les messages des sous-agents
Les messages des sous-agents apparaissent dans le flux sous forme de messagesassistant et user dont le champ parent_tool_use_id est l’ID de l’appel d’outil qui a généré le sous-agent. Les messages de la conversation principale portent null dans ce champ.
Le premier message d’un sous-agent s’exécutant en avant-plan est un message user portant l’invite qui le pilote. Après ce premier message, Claude Code émet :
- Par défaut : les blocs
tool_useettool_resultdu sous-agent. - Avec
--forward-subagent-textouCLAUDE_CODE_FORWARD_SUBAGENT_TEXT: les blocs de texte et de réflexion du sous-agent également, afin que vous puissiez reconstruire la transcription de chaque sous-agent. Cela nécessite Claude Code v2.1.211 ou ultérieur.
parent_tool_use_id, les messages du sous-agent imbriqué portent l’ID de l’appel d’outil Agent ou Skill qui l’a démarré, afin que vous puissiez reconstruire l’arborescence d’imbrication complète en suivant ces ID. Avant la v2.1.219, les messages des sous-agents imbriqués n’apparaissaient pas dans le flux.
Les compétences qui s’exécutent dans un sous-agent apparaissent dans le flux de la même manière : le premier message de la compétence dupliquée est un message user portant le contenu de la compétence qui pilote l’exécution. Si vous activez l’une ou l’autre option, le flux porte également les blocs de texte et de réflexion de la compétence dupliquée. Avant la v2.1.265, seuls les blocs tool_use et tool_result d’une compétence dupliquée apparaissaient dans le flux.
Gérer les tentatives d’API
Lorsqu’une requête API échoue avec une erreur réessayable, Claude Code émet un événementsystem/api_retry avant de réessayer. Sur la v2.1.246 ou ultérieur, lorsqu’un 401 ou 403 rejette une credential apiKeyHelper, Claude Code effectue les deux premières tentatives silencieusement sans événement, puis émet l’événement comme d’habitude à partir de la troisième tentative consécutive. Les tentatives silencieuses comptent toujours vers attempt. Vous pouvez utiliser l’événement pour afficher la progression des tentatives dans votre propre interface.
Lire les métadonnées de session
L’événementsystem/init rapporte les métadonnées de session, y compris le modèle, les outils, les serveurs MCP et les plugins chargés. C’est le premier événement du flux sauf si des événements de démarrage le précèdent :
- Événements
plugin_install, lorsqueCLAUDE_CODE_SYNC_PLUGIN_INSTALLest défini. - Événements
hook_started,hook_progressethook_response, tandis qu’un hookSessionStartouSetupconfiguré s’exécute. Ceux-ci se transmettent au fur et à mesure que le hook les produit. Claude Code v2.1.169 à v2.1.203 les a livrés en un seul lot après la fin du hook, toujours avantsystem/init; v2.1.204 a restauré la livraison en direct.
capabilities de chaînes nommant les comportements de protocole que cette version de Claude Code implémente, tels que interrupt_receipt_v1 ou interrupt_cancel_queued_v1. Vérifiez-le pour détecter les fonctionnalités au lieu de comparer les chaînes de version, et ignorez les valeurs que vous ne reconnaissez pas. Le champ nécessite Claude Code v2.1.205 ou ultérieur et est absent des versions antérieures. Consultez SDKSystemMessage pour la liste des capacités.
Échouer CI lorsqu’un plugin ou un serveur MCP ne se charge pas
Utilisez les champs de plugin dans l’événementsystem/init pour détecter un plugin qui ne s’est pas chargé :
Lorsqu’un répertoire ou une archive
--plugin-dir lui-même échoue à se charger, son entrée plugin_errors inclut le chemin absolu résolu en tant que path. Utilisez-le pour déterminer lequel de plusieurs valeurs --plugin-dir a échoué. Le champ path nécessite Claude Code v2.1.283 ou ultérieur.
Utilisez les champs du serveur MCP de la même manière. Lorsque vous passez --mcp-config avec -p, Claude Code attend les serveurs toujours en attente avant d’exécuter le premier tour, jusqu’au délai d’expiration de démarrage MCP_TIMEOUT, 30 secondes par défaut. Un serveur distant avec une liste d’outils mise en cache ignore l’attente, affiche pending dans system/init et se connecte lors de son premier appel d’outil. L’attente nécessite Claude Code v2.1.221 ou ultérieur.
Claude Code valide chaque entrée --mcp-config au démarrage et ignore les entrées qui échouent la validation, par exemple une entrée url sans type. L’exécution continue et se ferme correctement, vérifiez donc ces champs pour détecter un serveur qui ne s’est jamais chargé :
Lorsque vous exécutez la commande à la main dans un terminal, Claude Code imprime également un avertissement de démarrage sur stderr, tel que
Warning: 1 MCP server skipped due to invalid config:, suivi de la raison de chaque entrée ignorée. Lorsque vous redirigez stderr, ou lorsqu’un programme tel qu’un exécuteur CI ou un hôte SDK le capture, Claude Code n’imprime aucun avertissement et rapporte les entrées ignorées uniquement dans le champ mcp_server_errors. L’avertissement nécessite Claude Code v2.1.219 ou ultérieur.
Suivre les installations de plugins
LorsqueCLAUDE_CODE_SYNC_PLUGIN_INSTALL est défini, Claude Code émet des événements system/plugin_install tandis que les plugins de marketplace s’installent avant le premier tour. Utilisez-les pour afficher la progression de l’installation dans votre propre interface utilisateur.
Approuver automatiquement les outils
Utilisez--allowedTools pour permettre à Claude d’utiliser certains outils sans demander. Cet exemple exécute une suite de tests et corrige les défaillances, permettant à Claude d’exécuter des commandes Bash et de lire/modifier des fichiers sans demander la permission :
-p, le mode de permission de démarrage intégré est Manual sur tous les plans, donc passez le mode de permission que vous souhaitez :
auto: passez--permission-mode autopour qu’un classificateur examine la plupart des actions au lieu de vousdontAsk: Claude Code refuse chaque appel qui demanderait autrement, ce qui est utile pour les exécutions CI verrouillées. Les actions qui n’ont pas besoin d’approbation en mode Manual s’exécutent toujours, telles que les lectures de fichiers dans vos répertoires de travail et l’ensemble de commandes en lecture seule, ainsi que les actions que vos entrées--allowedToolsou les règlespermissions.allowcouvrent.AskUserQuestion, les outils de connecteur que votre organisation a définis surask, et les outils MCP marquésrequiresUserInteractionsont refusés même lorsqu’une règle d’autorisation correspondacceptEdits: Claude écrit les fichiers sans demander, et Claude Code approuve automatiquement les commandes de système de fichiers courants telles quemkdir,touch,mvetcp. Les actions qu’aucun mode n’approuve automatiquement s’appliquent toujours. Hormis l’ensemble de commandes en lecture seule, les autres commandes shell et requêtes réseau ont toujours besoin d’une entrée--allowedToolsou d’une règlepermissions.allow. Consultez ce queacceptEditsapprouve automatiquement pour la liste complète
acceptEdits comme base de référence :
Désactiver les invites de permission dans les exécutions sans surveillance
Passez--permission-prompts none lorsque personne n’est disponible pour répondre aux invites de permission, par exemple dans une tâche planifiée. L’indicateur est plus important lorsque votre exécution a un hôte de permission : une application Agent SDK avec un rappel canUseTool, ou un outil MCP que vous passez avec --permission-prompt-tool. Sans l’indicateur, votre exécution attend que cet hôte réponde à chaque demande de permission.
Avec l’indicateur, votre exécution ne consulte pas l’hôte et n’attend pas. Tout ce qui demanderait est refusé sauf si un hook PermissionRequest l’autorise, Claude est informé que personne ne peut approuver la demande et ne pas la réessayer, et l’exécution continue. Dans une exécution -p sans hôte, ces demandes sont refusées de toute façon, et l’indicateur indique également à Claude de ne pas les réessayer. Les règles de permission, les hooks PermissionRequest et le mode de permission que vous définissez décident toujours de chaque appel en premier ; Claude Code refuse uniquement les demandes que rien d’autre ne résout.
Cet exemple exécute une tâche sans surveillance en mode auto. Le classificateur examine chaque action comme d’habitude, et Claude Code refuse tout ce qui aurait autrement entraîné une invite :
--permission-prompts none, Claude Code supprime les outils qui ont besoin d’une réponse d’une personne, tels que AskUserQuestion, afin que Claude ne puisse pas les appeler. Toute demande d’élicitation MCP à laquelle aucun hook Elicitation ne répond est annulée.
Avec --output-format stream-json, les refus apparaissent sous forme de messages système permission_denied, et le message de résultat final les énumère dans permission_denials.
L’indicateur
--permission-prompts nécessite Claude Code v2.1.259 ou ultérieur. Les versions antérieures le rejettent avec une erreur d’option inconnue.Créer un commit
Cet exemple examine les modifications mises en scène et crée un commit avec un message approprié :--allowedTools utilise la syntaxe de règle de permission. Le * de fin active la correspondance de préfixe, donc Bash(git diff *) autorise toute commande commençant par git diff. L’espace avant * est important : sans lui, Bash(git diff*) correspondrait également à git diff-index.
Le support des commandes diffère en mode
-p :- Les compétences invoquées par l’utilisateur et les commandes personnalisées fonctionnent. Incluez
/skill-namedans la chaîne d’invite et Claude Code l’étend avant d’exécuter. - Les commandes intégrées qui ne s’exécutent que dans l’interface du terminal, telles que
/login, ne sont pas disponibles. /model,/effort,/fast,/coloret/renameacceptent la valeur comme argument, par exemple/model sonnet, et/mcpsans argument imprime un résumé textuel du statut du serveur. Ces formes nécessitent Claude Code v2.1.205 ou ultérieur et suivent les notes de disponibilité de chaque commande.- Pour modifier un paramètre, passez
key=valueà/config, par exemple/config thinking=false. /output-style <style>bascule les styles de sortie et/output-styleseul les énumère. Nécessite Claude Code v2.1.269 ou ultérieur.
Personnaliser l’invite système
Utilisez--append-system-prompt pour ajouter des instructions tout en conservant le comportement par défaut de Claude Code. Cet exemple transmet un diff PR à Claude et lui demande de vérifier les vulnérabilités de sécurité. Enregistrez-le en tant que script shell, par exemple review.sh :
"$1" représente le premier argument que vous passez sur la ligne de commande. Exécutez bash review.sh 123 et le shell remplace "$1" par 123, donc le script récupère le diff pour la PR 123. Claude Code imprime l’examen en JSON, avec le texte dans le champ result.
Consultez les indicateurs d’invite système pour plus d’options, y compris --system-prompt pour remplacer complètement l’invite par défaut.
Continuer les conversations
Utilisez--continue pour continuer la conversation la plus récente, ou --resume avec un ID de session pour continuer une conversation spécifique. Sur Claude Code v2.1.257 ou ultérieur, lorsque vous passez --continue, Claude Code ouvre une session en arrière-plan qui a terminé, mais pas une qui s’exécute toujours. Cet exemple exécute un examen, puis envoie des invites de suivi :
--resume le chemin absolu vers le fichier de transcription .jsonl d’une session, et Claude Code continue la conversation stockée dans ce fichier.
Étapes suivantes
- Démarrage rapide de l’Agent SDK : créez votre premier agent avec Python ou TypeScript
- Référence CLI : tous les flags et options CLI
- GitHub Actions : utilisez l’Agent SDK dans les workflows GitHub
- GitLab CI/CD : utilisez l’Agent SDK dans les pipelines GitLab