Deepseek ArtifactsDeepseek Artifacts
Guide d'automatisation

Mode headless de Claude Code : -p, CI et la GitHub Action

Scriptez Claude Code comme un outil Unix : prompts à coup unique avec claude -p, fichiers passés par pipe, JSON à analyser, sessions reprises par id, --bare pour la CI, et la GitHub Action @claude qui construit des fonctionnalités depuis un issue — tiré droit du pas à pas d'Anthropic lui-même.

L'essentiel

  • claude -p "prompt" tourne en un coup et imprime le résultat — pas de session interactive. Ça se compose comme n'importe quel outil Unix : pipe en entrée, pipe en sortie, chaînage dans les scripts et les étapes de CI.
  • --output-format json renvoie le résultat plus session_id, coûts et métadonnées ; stream-json émet des événements séparés par des sauts de ligne pour les consommateurs en temps réel. Analysez avec jq et construisez dessus.
  • Le headless démarre sans permission d'édition ni destructive. Accordez exactement le nécessaire avec --allowedTools "Bash(git diff *),Edit" — syntaxe de règles de permission, correspondance par préfixe.
  • La GitHub Action @claude est le mode headless avec une interface : taguez @claude sur un issue ou une PR et elle lit le code, crée des PR et des commits, répond aux questions et relit le code — sur vos propres runners GitHub.

Building headless automation with Claude Code | Code w/ Claude

Chaîne : Anthropic20:59

Regarder

Headless mode — official documentation

Documentation officielle : code.claude.com/docs

Regarder

Claude Code GitHub Action — official docs

Documentation officielle : code.claude.com/docs

Regarder

Les flags, limites et comportements de cette page sont vérifiés contre la documentation officielle du headless ; la conférence ci-dessus est le pas à pas d'Anthropic lui-même et la source visuelle des captures.

Les captures d'écran sont attribuées à leurs créateurs, avec des liens profonds vers les horodatages exacts. Les plans du conférencier et du public ne sont pas utilisés.

Exécuter Claude Code en headless, étape par étape

Partie 1 — Les bases du headless

  1. 1

    Ce qu'est le mode headless

    Le mode headless, c'est Claude Code sans l'interface interactive : le même agent, piloté par programme. Anthropic le présente comme une brique simple pour les applications agentiques — utilisez-le comme un outil Unix dans vos scripts et pipelines, pour l'automatisation de CI, les environnements distants, ou comme moteur derrière une interface de chat web.

    Claude Code SDK slide describing programmatic access to Claude Code in headless environments as a building block for scripts, CI tools and remote environments
    Le cadrage d'Anthropic lui-même : le SDK est un accès programmatique à Claude Code en environnement headless.Voir à 2:10
  2. 2

    Prompts à coup unique avec claude -p

    Le flag -p (ou --print) exécute un seul prompt et sort : claude -p "Write me a function that calculates the Fibonacci sequence". Rien ne reste ouvert — vous obtenez la sortie sur stdout et un code de sortie que vos scripts peuvent vérifier. Associez-y --allowedTools pour accorder l'accès en écriture d'avance.

    Claude Code headless one-shot command claude -p writing a Fibonacci function with the allowedTools flag in a terminal
    Une question en un coup : claude -p génère la fonction de Fibonacci et sort — pas de TUI, pas de relances.Voir à 3:30
  3. 3

    Passer des fichiers par pipe droit dans Claude

    Le stdin marche comme pour tout outil CLI : cat app.log | claude -p "summarize the most common error logs". Dans la démo d'Anthropic, 2000 lignes de log entrent et un résumé des erreurs en langue courante sort — la même astuce marche pour les échecs de build, les stack traces et les exports. Le stdin passé par pipe est plafonné à 10 Mo.

    Piping app log files into Claude Code headless mode with cat and claude -p to summarize the most common error logs
    cat plus le symbole pipe plus claude -p : deux mille lignes de log deviennent un diagnostic en trois phrases.Voir à 3:55
  4. 4

    Décoder les sorties qu'on déteste lire

    Le même motif transforme les sorties hostiles en réponses : ifconfig | claude -p "what interfaces do I have configured? don't include lo". Tout ce qu'une commande imprime — état réseau, erreurs du compilateur, plans terraform — peut passer par Claude pour un résumé humain.

    Claude Code headless mode explaining the output of ifconfig after piping the command result into claude -p
    ifconfig passé par claude -p : chaque interface expliquée, la loopback exclue sur demande.Voir à 4:15
  5. 5

    Obtenir du JSON structuré en sortie

    Ajoutez --output-format json et la réponse devient un objet analysable : le texte du résultat, la session_id, la durée et total_cost_usd. Pour les consommateurs en direct, --output-format stream-json émet des événements séparés par des lignes au fil de l'eau — la dernière ligne est le résultat final.

    Claude Code headless JSON output showing the result field, session id and total cost from the output-format json flag
    Mode JSON : un seul bloc avec le résultat, un id de session à reprendre plus tard, et le coût de l'exécution.Voir à 4:35

Partie 2 — Scripter comme un ingénieur

  1. 6

    Accorder les outils délibérément

    Le headless démarre sans permission d'édition ni destructive. --allowedTools préapprouve ce dont la tâche a besoin, en syntaxe de règles de permission : --allowedTools "Bash(npm run build),Bash(npm test:*),Write". Les outils MCP peuvent être mis en liste allow de la même façon — accordez l'ensemble le plus étroit qui fasse le travail.

    Claude Code SDK deep dive slide listing allowedTools permission rules, output-format stream-json and the system-prompt flag
    Le décryptage du SDK : permissions d'outils, modes de sortie structurée et prompts système personnalisés sur une seule diapositive.Voir à 11:00
  2. 7

    Garder le contexte d'une exécution à l'autre

    Le mode JSON renvoie une session_id — repassez-la avec --resume "$session_id" pour poursuivre le même état de conversation depuis une exécution ultérieure ou un autre processus. C'est comme ça qu'on bâtit des produits interactifs par-dessus : l'utilisateur dit quelque chose, Claude répond, vous préservez la session pour le tour suivant.

  3. 8

    Gérer les permissions sans humain

    Si vous ne pouvez pas prédire quels outils Claude nécessitera, --permission-prompt-tool délègue les décisions d'approbation à un serveur MCP à l'exécution — l'outil demande à votre service (ou à votre utilisateur, via votre app) d'autoriser chaque action, au lieu que vous listiez tout à l'avance.

  4. 9

    Passer en --bare pour la CI

    --bare saute la découverte automatique des hooks, skills, commandes personnalisées, sous-agents, plugins, serveurs MCP et CLAUDE.md pour le démarrage le plus rapide possible — recommandé pour les scripts et la CI, et promis comme défaut de -p. Il exige ANTHROPIC_API_KEY et reçoit le contexte explicitement via des flags.

Partie 3 — La GitHub Action @claude

  1. 10

    Faire connaissance avec la GitHub Action @claude

    La GitHub Action est le mode headless avec une interface bâtie sur le SDK. Taguez @claude sur n'importe quelle PR ou issue et elle peut lire votre code, créer des PR, ajouter des commits aux existantes, répondre aux questions et relire les changements — sur vos runners GitHub habituels, donc aucune infrastructure à garder.

    Anthropic slide listing what the Claude GitHub Action does when tagged on a pull request or issue, running on existing GitHub runners
    Le contrat de l'Action : taguez @claude, décrivez ce qu'il vous faut — elle travaille le dépôt sur vos propres runners.Voir à 17:10
  2. 11

    Assigner un issue à Claude

    Dans la démo en direct d'Anthropic, un commentaire « @claude please implement this feature and comment on it » a fait répondre le bot avec un plan délimité — des puces de ce qu'il allait construire — avant de créer la branche, les commits et la pull request, le tout traçable dans les logs de l'Action.

    GitHub issue where tagging at-claude produced a scoped implementation plan comment for a per question timer feature
    Le commentaire @claude sur un vrai issue : Claude répond avec un plan délimité avant de toucher au code.Voir à 7:50
  3. 12

    L'installer sur votre dépôt

    Le résultat est un résumé d'implémentation cochée sur l'issue — fonctionnalités ajoutées, todos fermés. Pour y arriver, ouvrez Claude Code dans votre dépôt et lancez /install-github-action : un flux interactif ouvre une PR avec le YAML du workflow, puis configurez les clés d'API en secrets du dépôt et fusionnez.

    GitHub issue completed by the Claude Code action showing a checked implementation summary and the features added to the quiz app
    L'exécution finie : un résumé d'implémentation coché avec chaque fonctionnalité que l'Action a ajoutée à l'appli de démo.Voir à 13:30

Headless vs interactif vs SDK vs la GitHub Action

Quatre façons de piloter le même agent — choisissez selon qui (ou quoi) demande :

  • 1CLI interactive — la session TUI : prompts de permission, mode plan, /commands. Idéal pour un humain qui pilote une tâche maintenant.
  • 2Headless claude -p — un tir programmatique : stdin et stdout, codes de sortie, pas d'interface. Idéal pour les scripts, les tâches cron et les questions rapides depuis d'autres outils.
  • 3L'Agent SDK — la même puissance headless en bibliothèque typée : sessions multi-tours, outils personnalisés, streaming. Idéal quand Claude est un composant dans votre application.
  • 4La GitHub Action @claude — du headless sur le modèle d'événements de GitHub : issues, PR et reviews sur vos propres runners. Idéal pour l'automatisation à l'échelle du dépôt que toute l'équipe peut déclencher.
  • 5--bare headless — un démarrage dénudé pour la CI : pas de CLAUDE.md, de hooks, skills, plugins ni de découverte automatique MCP, contexte explicite via des flags, le démarrage à froid le plus rapide.

Elles partagent le même accès au modèle et le même système de permissions — une règle de permission accordée au headless s'applique partout, c'est pourquoi la discipline --allowedTools compte.

Le headless déraille ? Premier secours

Cinq pièges propres au headless, et le remède de chacun :

  • 1Le script sort avant que Claude ait fini. Vérifiez le code de sortie : 0 c'est le succès, tout le reste a échoué. SIGTERM sort avec 143 et laisse le tour inachevé — terminez les exécutions avec SIGINT ou le interrupt() du SDK si vous devez stopper en plein tour.
  • 2L'entrée par pipe tronquée en silence. Le stdin est plafonné à 10 Mo — écrivez les payloads plus gros dans un fichier et référencez le chemin dans le prompt.
  • 3« --bg rejected » ou une erreur --cloud. Les flags réservés à l'interactif ne s'appliquent pas à -p : --bg est rejeté sans appel, et --cloud a besoin d'un id de session pour mettre un message en file plutôt qu'une description de tâche.
  • 4L'exécution de CI ignore votre CLAUDE.md et vos hooks. C'est --bare qui fait son travail : il saute la découverte automatique. Passez le contexte explicitement avec --settings, --mcp-config, --agents ou --plugin-dir.
  • 5Les tâches bash d'arrière-plan meurent en cours de route. Les shells d'arrière-plan sont tués environ 5 secondes après l'arrivée du résultat ; les sous-agents et workflows gardent le processus en vie jusqu'à un plafond d'inactivité de 10 minutes. Attendez-les explicitement en CI.

Pour tout le reste, ajoutez --verbose et lisez les événements stream-json — system/init nomme le modèle, les outils et les serveurs MCP réellement chargés.

Questions fréquentes

Guides Claude Code associés