Guide · IA & agents

Pipeline d'articles avec Claude Code

Deux appels claude -p en lecture seule pour un brouillon, puis une relecture humaine. Doc du 18 octobre 2026, commandes non rejouées.

Un pipeline d'articles avec Claude Code, dans ce guide, est une suite d'appels claude -p dont la sortie est un fichier que quelqu'un relit. Ce n'est pas une publication, pas un CMS, et pas un résultat déjà produit. Les drapeaux viennent de la page « Run Claude Code programmatically », relue le 18 octobre 2026. Les prompts en français plus bas sont une application de ces drapeaux, pas des exemples copiés sur la page. Aucun appel n'a été lancé. Aucun brouillon n'a été généré pour illustrer la méthode.

La commande claude doit déjà répondre. Sinon, Installer Claude Code vient avant. Un sous-agent de relecture, si vous en ajoutez un, suit le format documenté des sous-agents. Ce second guide est un brouillon du même jour. S'il n'est pas encore en ligne, la page Anthropic reste la source du format.

Prérequis

Un répertoire de travail qui ne contient pas de secrets, et un fichier de consignes que vous avez écrit, par exemple brief.md. Le pipeline ne doit pas inventer les faits du brief. S'il n'y a pas de brief, il n'y a pas de pipeline, juste un prompt vague.

Deux modes ne se mélangent pas. Sans --bare, claude -p charge le même contexte qu'une session interactive : hooks, skills, plugins, serveurs MCP, mémoire, CLAUDE.md, y compris dans un dossier que vous n'avez pas marqué comme fiable. La page dit qu'il n'y a alors ni dialogue de confiance, ni demande d'approbation par serveur. Avec --bare, cette découverte est sautée. Le mode bare ne lit pas OAuth. Pour l'API Anthropic, il faut ANTHROPIC_API_KEY dans l'environnement, ou un apiKeyHelper dans --settings. Les autres fournisseurs gardent leurs propres identifiants, selon la page.

Pour un script qui doit se comporter pareil d'une machine à l'autre, la page recommande --bare. Un hook dans le ~/.claude d'un collègue, ou un serveur MCP du .mcp.json du projet, ne part pas, parce que le mode bare ne les lit pas. C'est le réglage retenu ici. Le coût est de perdre les instructions du projet, sauf ce que vous repassez avec un drapeau.

Premier appel : le texte sort sur stdout

La page montre qu'une session non interactive lit l'entrée standard, et que la sortie peut être redirigée. L'exemple officiel, non rejoué, est :

cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

build-error.txt et output.txt sont des noms d'exemple. La même page montre un appel bare limité à Read :

claude --bare -p "Summarize README.md" --allowedTools "Read"

L'application pour un brief, qui combine ces deux formes et qui n'a pas été exécutée, ressemble à ceci. Le prompt n'est pas celui de la page :

cat brief.md | claude --bare -p "Rédige un brouillon en français à partir du texte reçu sur l'entrée standard. N'invente pas de source. Si un fait manque, écris qu'il manque." --allowedTools "Read" > brouillon.md

--allowedTools "Read" vient de l'exemple bare. Il pré-approuve Read. Le mode bare a déjà accès, selon la page, aux outils Bash, lecture de fichiers et édition de fichiers, sauf restriction. Limiter à Read est donc une restriction de l'exemple, pas une garantie lue ailleurs que dans la syntaxe des permission rules, que cette page ne détaille pas en entier. Ne retirez pas le drapeau pour « aller plus vite ». Bash dans un pipeline de rédaction peut lancer autre chose qu'une rédaction.

La redirection est le point fragile. La page dit que Claude Code sort avec le code 0 en succès, et un code non nul si l'exécution échoue. Un drapeau invalide est signalé sur stderr avant le départ. Un échec pendant l'exécution, dont une authentification manquante, est imprimé comme résultat sur stdout. Avec > brouillon.md, ce message d'échec peut se retrouver dans le fichier. Le code de sortie est le contrôle. Un fichier non vide n'est pas un succès.

Deuxième appel : relire, pas publier

La page documente --output-format json. Le texte est dans le champ result. L'exemple officiel :

claude -p "Summarize this project" --output-format json

Et l'extraction avec jq, aussi sur la page :

claude -p "Summarize this project" --output-format json | jq -r '.result'

jq est l'outil que la page cite pour lire ce JSON. S'il n'est pas installé, la page ne donne pas sa procédure d'installation. N'inventez pas un gestionnaire de paquets.

Pour contraindre la forme, la page associe --output-format json et --json-schema, avec un schéma JSON. L'exemple officiel extrait des noms de fonctions et place la sortie structurée dans structured_output. Un schéma invalide fait quitter claude avec Error: --json-schema is not a valid JSON Schema, suivi du diagnostic du validateur. Avant v2.1.205, la page dit qu'un schéma invalide était ignoré en silence. Si votre version est plus ancienne, un JSON « qui a l'air bon » peut être du texte libre.

Une application de cette forme, non exécutée, pour une relecture du brouillon :

claude --bare -p "Lis brouillon.md. Signale les phrases qui affirment un fait sans dire d'où il vient. Ne modifie pas le fichier." \
  --allowedTools "Read" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"gaps":{"type":"array","items":{"type":"string"}}},"required":["gaps"]}'

Le schéma reprend la forme de l'exemple officiel (objet, propriété, tableau de chaînes, champ requis). Les noms gaps et le prompt sont ceux de ce guide. Le champ à lire ensuite, si l'appel réussit, est structured_output, pas result. La page le dit pour ce couple de drapeaux. Ce guide n'a pas de JSON à montrer.

--continue enchaîne sur la conversation la plus récente. --resume reprend un identifiant. L'exemple de la page récupère session_id avec jq. Utile si le second appel doit voir le premier. Inutile si le second appel doit seulement lire le fichier, ce qui est le cas ici : le fichier est la pièce, pas la mémoire de la session. Une session qui continue entraîne aussi, selon la page, le total de dépense estimé de toute la conversation. Aucun chiffre n'est rapporté, parce qu'aucun appel n'a eu lieu.

Où s'arrête le pipeline

Le fichier brouillon.md n'est pas un article publié. Quelqu'un le lit, retire ce qui n'est pas sourcé, et décide. Claude Code n'a pas, dans les pages relues, une commande « publier sur le blog ». N'en ajoutez pas une dans le script.

Un sous-agent en lecture seule peut remplacer le second appel si vous voulez isoler la relecture. La page des sous-agents, lue pour l'autre guide, accepte en mode -p un fichier JSON via --agents, à partir de v2.1.281. La forme documentée est claude -p --agents ./agents.json "Review my changes". Combinez-la avec --bare seulement en sachant que le mode bare ne charge pas les sous-agents du disque : la page headless dit de les passer avec --agents. Les deux drapeaux ensemble sont une combinaison des deux pages, pas un exemple unique, et elle n'a pas été lancée.

/skill-name dans la chaîne du prompt est développé avant l'exécution, selon la page headless. En mode bare, la liste des skills n'est pas envoyée. Un skill de maison ne partira pas sauf si vous le chargez par un drapeau prévu pour ça (--plugin-dir, ou le prompt qui le nomme, selon ce que vous avez vraiment configuré). Ne comptez pas sur un skill non listé dans la commande.

Erreur fréquente

Le brouillon contient le message d'authentification, et le script continue. Cause documentée : l'échec interne est écrit sur stdout, et la redirection le capture. Le correctif n'est pas de relancer en élargissant les outils. C'est de regarder le code de sortie avant de traiter brouillon.md comme un texte. En mode bare, l'absence de ANTHROPIC_API_KEY est le cas que la page prépare : pas de lecture OAuth, donc pas de session claude.ai pour compenser.

L'autre échec, plus silencieux sur les vieilles versions : un --json-schema refusé ou ignoré. Si la sortie n'a pas structured_output, ne parsez pas result en faisant semblant que le schéma a été appliqué.

Vérification

Le contrôle documenté est le code de sortie, puis la présence du champ annoncé par le format choisi : result pour --output-format json seul, structured_output si --json-schema est passé et accepté. jq, dans les exemples de la page, sert à ça. Ensuite, une personne ouvre brouillon.md et cherche les phrases qui affirment un fait. Un JSON valide avec une liste gaps vide n'a pas été produit ici, et ne prouverait pas que le texte est juste.

Si claude n'est pas trouvé, le problème est en amont. Ce n'est pas un échec du schéma.

Sources

Pages relues le 18 octobre 2026 :

Sources recontrôlées le 19 octobre 2026. Les prompts français et le schéma gaps sont des adaptations. Ils ne figurent pas tels quels dans la documentation. Pas de tarif, pas d'exemple de brouillon, pas de capture.