Scripts et intégration continue avec la CLI DCode : dcode -p, JSON et exécutions planifiées

La CLI DCode fonctionne dans les scripts et les tâches d'intégration continue avec dcode -p : une requête en entrée, puis du texte, du JSON ou du stream-json en sortie, avec un code de sortie qu'un script peut vérifier. DCode 2.5, publié le 10 novembre 2026, ajoute des options comme --allowed-tools et --json-schema, DCODE_API_KEY et dcode schedule.
Faits saillants
- dcode -p exécute une seule requête sans l'espace de travail puis se termine, et --output-format affiche du texte, du JSON ou du stream-json.
- DCode 2.5 ajoute --allowed-tools, --add-dir, --max-turns, --system-prompt, --append-system-prompt, --input-format stream-json et --json-schema, entre autres options.
- DCODE_API_KEY connecte une tâche d'intégration continue sans navigateur, et ses requêtes sont payées avec vos crédits d'API.
- Une exécution -p est en Accès complet à moins que vous passiez --mode, et une étape qui demanderait votre accord est refusée.
- dcode schedule exécute une requête selon un horaire par le planificateur de votre ordinateur, en mode Auto à moins que vous passiez --mode.
dcode -p exécute une seule requête sans l'espace de travail puis se termine. Il lit le dossier où il s'exécute, fait la tâche et affiche la réponse, pour qu'un script ou une tâche d'intégration continue (CI) puisse s'en servir. DCode 2.5, publié le 10 novembre 2026, lui donne les options dont ont besoin les scripts et les tâches de CI, une façon de se connecter sur une machine de CI, et dcode schedule pour des requêtes selon un horaire. Le reste de la version est dans notre article sur DCode 2.5, et l'espace de travail du terminal dans notre article sur la CLI DCode 2.0.
Comment exécuter une seule requête?
dcode -p "Explique les tests qui échouent dans ce dépôt"
Sans --model, une exécution prend votre choix enregistré, sinon Raven Flash; --model "Raven Max" choisit l'autre modèle. --attach ajoute un fichier, une image ou un PDF, et --cwd s'exécute dans un autre dossier. Une exécution ne s'arrête jamais pour demander une mise à jour.
Se connecter
DCODE_API_KEY tirée des secrets de votre CI, ou la connexion enregistrée par dcode login.
Choisir le mode
--mode plan, ou --mode build avec --allowed-tools. Sinon, Accès complet.
Lancer une requête
dcode -p fait la tâche dans le dossier où il s'exécute, puis se termine.
Lire le résultat
Du texte, du json ou du stream-json, et un code de sortie : 0 quand c'est terminé.
Quoi de neuf pour les scripts dans DCode 2.5?
Ces options sont nouvelles pour dcode -p dans 2.5 :
--allowed-tools <rules...>permet à des outils de s'exécuter sans demander pour cette exécution, par exemple"Bash(npm test:*) Edit".--add-dir <folders...>permet à l'agent de travailler dans d'autres dossiers que le dossier courant.--max-turns <n>arrête l'exécution après ce nombre de tours.--system-prompt <text>remplace l'invite système pour cette exécution.--append-system-prompt <text>ajoute du texte après l'invite système pour cette exécution.--input-format stream-jsonlit vos messages sur l'entrée standard, un objet JSON par ligne, avec--output-format stream-json.--json-schema <schema>fait de la réponse un JSON conforme à ce schéma, donné en texte JSON ou dans un fichier.--mcp-config <file|json>ajoute des serveurs MCP pour cette exécution.--settings <file|json>charge d'autres réglages pour cette exécution, en texte JSON ou dans un fichier.--fallback-model <name>est le modèle qu'utilise l'exécution quand celui choisi est occupé.--name,--session-idet--fork-sessionnomment la session, la démarrent avec l'identifiant de votre choix, ou continuent dans une copie d'une session.--worktree [name]travaille dans un nouvel arbre de travail git sur la branchedcode/<name>, pour que les changements de l'exécution restent à l'écart de votre copie de travail.
Que peut faire une exécution sans demander?
Personne ne peut répondre à une question pendant une exécution -p : une étape qui demanderait votre accord est donc refusée. C'est pourquoi -p travaille en Accès complet à moins que vous passiez un autre mode. Sur une machine ou un dépôt qui vous importe, choisissez ce que l'exécution peut faire :
# lire et planifier seulement
dcode -p "Planifie la migration vers la nouvelle API" --mode plan
# demander avant les modifications, avec les outils voulus permis d'avance
dcode -p "Lance les tests et corrige ce qui échoue" --mode build --allowed-tools "Bash(npm test:*) Edit"
# aucun interpréteur de commandes pour cette exécution
dcode -p "Résume les TODO ouverts" --disallowed-tools "Bash"
--allowed-tools prend des noms d'outils comme Edit, des règles comme Bash(npm test:*) et des outils MCP, séparés par des espaces. Une règle qui n'est pas une règle d'outil arrête l'exécution avant qu'elle commence.
Qu'affiche une exécution?
--output-format | Ce qui est affiché |
|---|---|
text | La réponse, et rien d'autre. Par défaut. |
json | Un seul objet JSON à la fin de l'exécution. --json fait la même chose. |
stream-json | Un objet JSON par ligne pour chaque événement au moment où il arrive, puis une ligne finale dont le type est "result", avec les champs de json. |
Toute autre valeur arrête l'exécution avec un message, pour qu'une faute de frappe ne devienne jamais du texte brut qu'un analyseur ne peut pas lire. L'objet JSON contient response, la réponse; sessionId, pour reprendre la session avec --resume; usage, les jetons de l'exécution quand ils sont connus; et, avec --json-schema, structuredOutput, la réponse comme valeur JSON.
Nouveauté de 2.5, --input-format stream-json envoie plusieurs messages sur l'entrée standard. Chaque ligne avec "type":"user" lance un tour, tous dans la même session, et chacun se termine par sa propre ligne result :
printf '%s\n' '{"type":"user","message":{"role":"user","content":"Trouve le test le plus lent"}}' \
'{"type":"user","message":{"role":"user","content":"Maintenant, rends-le plus rapide"}}' \
| dcode --input-format stream-json --output-format stream-json
Comment un script lit-il une réponse JSON?
Donnez un schéma à --json-schema, en texte JSON ou dans un fichier, et la réponse doit être un JSON qui y est conforme. Si la première réponse ne l'est pas, DCode redemande une fois dans la même session; si la deuxième ne l'est pas non plus, l'exécution affiche Error: the answer did not match --json-schema avec la raison et se termine avec le code 1. Un schéma pour une liste de noms de paquets, dans schema.json :
{
"type": "object",
"properties": {
"packages": { "type": "array", "items": { "type": "string" } }
},
"required": ["packages"]
}
Lancez l'exécution avec la sortie JSON, puis lisez structuredOutput depuis n'importe quel script. Ici avec Node.js, dont la CLI a déjà besoin :
dcode -p "Énumère les paquets de ce dépôt" --json-schema schema.json \
--output-format json > run.json
node read-packages.mjs
// read-packages.mjs
import { readFileSync } from "node:fs";
const run = JSON.parse(readFileSync("run.json", "utf8"));
for (const name of run.structuredOutput.packages) console.log(name);
Comment exécuter DCode en intégration continue?
Donnez à DCODE_API_KEY la valeur d'une clé d'API de votre tableau de bord, gardée dans les secrets de votre CI et jamais dans le dépôt. Elle connecte cette exécution sans navigateur. La clé est gardée en mémoire pour cette exécution seulement et n'est jamais enregistrée, et elle est retirée de l'environnement avant que quoi que ce soit s'exécute, pour que les commandes de l'agent ne la voient jamais. Si la clé est refusée, l'exécution le dit et se termine avec le code 1.
Voici une tâche pour GitHub Actions qui passe en revue chaque demande de tirage et garde la réponse en JSON. Toute CI qui fait tourner Node.js 22.13 ou version ultérieure fonctionne de la même façon : installer la CLI, définir la clé à partir des secrets, lancer dcode -p.
name: Revue DCode
on: pull_request
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm install -g @dipoleml/dcode-cli
- run: |
dcode -p "Passe en revue les changements de cette branche et énumère les risques" \
--mode plan --output-format json > review.json
env:
DCODE_API_KEY: ${{ secrets.DCODE_API_KEY }}
- run: node -e "console.log(require('./review.json').response)"
Les requêtes faites avec une clé d'API sont payées avec vos crédits d'API. Les crédits se vendent en paquets de 5, 10, 20 et 50 $ US; ils s'achètent une fois, ne se renouvellent jamais et n'expirent jamais. Une clé peut recevoir un plafond de dépenses et une date d'expiration, comme l'explique notre article sur une clé par application.
Quels codes de sortie une exécution renvoie-t-elle?
| Code | Signification |
|---|---|
| 0 | Terminé. |
| 1 | Quelque chose a échoué : une option ou une valeur erronée, une requête vide, une clé d'API refusée, une réponse non conforme à --json-schema, une ligne de l'entrée standard qui n'était pas du JSON, ou une erreur pendant l'exécution. |
| 2 | Aucune connexion. |
| 3 | Node.js est trop ancien : il faut la version 22.13 ou ultérieure. |
Une erreur tient en une ligne de texte sur la sortie d'erreur standard, avec le traceId de l'exécution, et --verbose affiche la sortie d'erreur complète. Sans DCODE_API_KEY, une exécution utilise la connexion enregistrée sur la machine par dcode login; sans l'une ni l'autre, elle se termine avec le code 2.
Comment exécuter une requête selon un horaire?
Nouveauté de 2.5, dcode schedule exécute une requête selon un horaire :
# chaque jour de semaine à 9 h, dans ce dossier
dcode schedule add "every weekday at 9:00" "Résume les commits d'hier et les TODO ouverts"
# une expression cron, un autre dossier, le mode plan
dcode schedule add "30 7 * * 1" "Vérifie les mises à jour des dépendances et énumère-les" --cwd ~/code/api --mode plan
dcode schedule list
dcode schedule run <id>
dcode schedule remove <id>
Le moment est une expression cron à cinq champs à l'heure locale (minute, heure, jour, mois, jour de la semaine), ou des mots anglais comme "every day at 9:00", "every monday at 8:30" ou "every 2 hours". Chaque exécution est un dcode -p avec votre requête dans ce dossier, le dossier courant à moins que vous passiez --cwd, en mode Auto à moins que vous passiez --mode. Le planificateur de votre ordinateur lance les exécutions, donc la CLI n'a pas besoin d'être ouverte, et la sortie de chaque exécution s'ajoute à un journal sous ~/.dcode/cli/schedules. list --json affiche les horaires en JSON.
Personne n'est là pour répondre pendant une exécution planifiée non plus : une étape qui demanderait votre accord est refusée. En mode Auto, tout ce sur quoi Auto demande toujours, comme une poussée ou un déploiement, n'a donc pas lieu. Passez --mode plan pour une tâche qui doit seulement lire et rendre compte.
Comment installer la CLI?
La CLI demande Node.js 22.13 ou version ultérieure. Installez-la en une ligne, ou avec npm :
# macOS et Linux
curl -fsSL https://dipoleml.com/install.sh | sh
# Windows (PowerShell)
irm https://dipoleml.com/install.ps1 | iex
# ou avec npm
npm install -g @dipoleml/dcode-cli
La CLI s'installe gratuitement, et les exécutions connectées avec votre compte puisent dans votre plan. Les plans et les prix de l'API par jeton sont sur la page des tarifs.
Questions et réponses
Comment exécuter DCode dans une tâche d'intégration continue?
Installez la CLI avec npm sur un exécuteur doté de Node.js 22.13 ou version ultérieure, définissez DCODE_API_KEY à partir des secrets de votre CI, et lancez dcode -p avec le mode dont la tâche a besoin. La clé connecte cette exécution seulement, et ses requêtes sont payées avec vos crédits d'API.
dcode -p peut-il afficher du JSON?
Oui. --output-format json affiche un seul objet JSON à la fin de l'exécution, avec la réponse dans response et la session dans sessionId; stream-json affiche un objet par ligne au fil des événements. Avec --json-schema, la réponse doit être conforme à votre schéma et arrive dans structuredOutput.
Que peut faire une exécution dcode -p sans demander?
Personne ne peut répondre pendant une exécution : une étape qui demanderait votre accord est donc refusée, et -p travaille en Accès complet à moins que vous passiez un autre mode. Pour une exécution prudente, passez --mode plan, ou --mode build avec les outils voulus dans --allowed-tools.
dcode schedule demande-t-il que la CLI reste ouverte?
Non. Le planificateur de votre ordinateur lance chaque exécution, sous la forme de dcode -p dans le dossier choisi, en mode Auto à moins que vous passiez --mode. La sortie de chaque exécution s'ajoute à un journal sous ~/.dcode/cli/schedules.
Première publication le Dernière mise à jour le


