delegate-chore
Point de repli pour les tâches de routine. task_type=chore, modèle par défaut haiku (le moins cher). La sélection du système d'exécution (Codex / Devin / Cursor / Claude) est gérée par dispatch.sh.
Chemins des scripts
- Claude Code :
skill_dir=.claude/skills/delegate-chore - Codex :
skill_dir=.agents/skills/delegate-chore
Les exemples de commandes ci-dessous utilisent le chemin .claude/skills/delegate-chore pour Claude Code. Pour Codex, remplacez par .agents/skills/delegate-chore.
Référence des prix des modèles
Uniquement si une analyse des coûts ou une comparaison des prix unitaires est nécessaire, lisez <skill_dir>/model-token-prices.json. Ces données sont fournies à titre de référence et ne sont pas utilisées pour décider du déclenchement de la délégation.
Avant de déléguer (coût de la délégation)
La délégation entraîne un surcoût (démarrage du worker, échange requête/réponse, lecture par l'agent principal). Si cette tâche peut être automatisée par une seule commande (sed, find, chmod, etc.) sans avoir à charger son contenu dans le contexte du modèle, la délégation est purement une perte (le surcoût dépasse les gains d'hygiène du contexte et de jetons). Dans ce cas, l'agent principal l'exécute directement ou, si la tâche est répétitive, la propose pour automatisation via la boucle de rétroaction ci-dessous. La délégation est rentable pour les tâches volumineuses qui nécessitent que le modèle lise et traite le contenu. Justification : docs/design/delegate-chore.md §5.
Flux d'exécution (one-shot)
- Création de la requête : Passez le Markdown avec Objectif / Périmètre / Contexte / Critères d'acceptation / Vérification / Contraintes via stdin. Rédigez la requête de manière concise : ne collez pas le contenu des fichiers dans le Contexte ; référencez-les par leur chemin (et éventuellement la plage de lignes) (pour ne pas augmenter le jeton facturé par la sortie de l'agent principal).
- Si l'utilisateur spécifie un modèle ou un niveau d'effort dans la conversation, préfixez l'appel
runavec des variables d'environnement en ligne (ex :DELEGATE_CHORE_MODEL=gpt-5.5@high bash .../run.sh ...). En cas de code de sortie 6, utilisez la ligne de stderr contenant la liste des valeurs acceptables pour l'explication à l'utilisateur.
- Si l'utilisateur spécifie un modèle ou un niveau d'effort dans la conversation, préfixez l'appel
- Exécution :
out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/run.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID")"(pour un lancement de premier niveau,$PARENT_TASK_TYPE_CHAINpeut être vide).runexécute successivement prepare → dispatch → read-response en interne. stdout renvoie un seul JSON (qu'il s'agisse d'un succès ou d'un échec) contenantexit_code/status/content/content_truncated/response_file/observe_file/run_dir.- La valeur par défaut du sélecteur (s'il est omis) est
auto. Le sixième argument positionnel est le sélecteur pour read-response ; il diffère du sixième argument positionnelsession_modedeprepare.sh. - Le code de sortie est transmis par les scripts internes. Code 3 = prérequis insuffisants ; code 4 = cycle de délégation détecté, annuler.
runémetobserve_file: <path>sur stderr avant l'appel àdispatch. En cas d'arrêt forcé, utilisez ce chemin comme voie de récupération.- Dans un parent en mode non interactif (
claude -petc.), exécutezrunimpérativement en avant-plan, et configurez un timeout Bash plus long que la durée prévue de la délégation (pour Claude Code :BASH_DEFAULT_TIMEOUT_MS/BASH_MAX_TIMEOUT_MSou l'argumenttimeoutde l'outil Bash).
- Consommation de la réponse : Lisez
status="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .status)"/content="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .content)". Sicontent_truncatedesttrue, extrayezresponse_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .response_file)"et lisez-le par sections avecbash .claude/skills/delegate-chore/scripts/read-response.sh "$response_file" <N>. Après lecture, ne résumez pas le contenu du worker (ne l'écho pas). La réponse de l'agent principal à l'utilisateur doit se limiter à une ligne pointant vers le résumé (pour ne pas augmenter le jeton facturé par la sortie de l'agent principal ; spec.md §6).
Flux avancé (scripts individuels)
Pour les flux nécessitant une intervention du parent en cours de route (observation pendant le dispatch, exécution en arrière-plan, reprise / suivi), utilisez les scripts individuels classiques.
- Préparation (agrégée) :
prepare.shregroupe vérification des prérequis, résolution du modèle, vérification de la chaîne et génération de la requête en un seul appel (réduit les allers-retours bash et les sorties dans le contexte de l'agent principal). Passez le Markdown avec Objectif / Périmètre / Contexte / Critères d'acceptation / Vérification / Contraintes via stdin. Rédigez la requête de manière concise : ne collez pas le contenu des fichiers dans le Contexte ; référencez-les par leur chemin (et éventuellement la plage de lignes) (pour ne pas augmenter le jeton facturé par la sortie de l'agent principal). Code 3 = prérequis insuffisants ; code 4 = cycle de délégation détecté, annuler.- Si l'utilisateur spécifie un modèle ou un niveau d'effort dans la conversation, préfixez l'appel
prepareavec des variables d'environnement en ligne (ex :DELEGATE_CHORE_MODEL=gpt-5.5@high bash .../prepare.sh ...). En cas de code de sortie 6, utilisez la ligne de stderr contenant la liste des valeurs acceptables pour l'explication à l'utilisateur. out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/prepare.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID")"(pour un lancement de premier niveau,$PARENT_TASK_TYPE_CHAINpeut être vide).model="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .model)"/request_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .request_file)"/response_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .response_file)"/run_dir="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .run_dir)"/observe_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .observe_file)"
- Si l'utilisateur spécifie un modèle ou un niveau d'effort dans la conversation, préfixez l'appel
- Exécution :
bash .claude/skills/delegate-chore/scripts/dispatch.sh "$model" chore "$request_file" "$response_file" "$run_dir" "$observe_file". La sélection du système d'exécution (Codex / Devin / Cursor / Claude) en fonction du préfixe du nom du modèle est gérée pardispatch.sh. stdout ne contient que le chemin du fichier response_file. Dans un parent en mode non interactif (claude -petc.), exécutezdispatchimpérativement en avant-plan, et configurez un timeout Bash plus long que la durée prévue de la délégation (pour Claude Code :BASH_DEFAULT_TIMEOUT_MS/BASH_MAX_TIMEOUT_MSou l'argumenttimeoutde l'outil Bash). Pendant l'exécution, la surveillance normale se limite à lire depuisobserve_fileles champsstate.phase/state.started_at/heartbeat.ts/heartbeat.stdout_bytes/heartbeat.stderr_bytes/heartbeat.last_stream_change_atavecread-json.sh.state.phasepeut êtreprepared | running | superseded | stalled | ended. Les étatspreparedetsupersededcorrespondent à des observations non dispatchées (state.started_at == null,usagenon défini, équivalent null pourread-json.sh) ; excluez-les du dénominateur lors de l'agrégation des usages. - Lecture de la réponse :
bash .claude/skills/delegate-chore/scripts/read-response.sh "$response_file" auto.autolit le statut et toutes les sections en une seule fois si la réponse est petite (moins de 10 Ko par défaut) ; si elle est volumineuse, il renvoie le statut, l'index et la section Résumé seulement. Utilisez... "$response_file" <N>pour obtenir des sections supplémentaires selon les besoins. Après lecture, ne résumez pas le contenu du worker (ne l'écho pas). La réponse de l'agent principal à l'utilisateur doit se limiter à une ligne pointant vers le résumé (pour ne pas augmenter le jeton facturé par la sortie de l'agent principal ; spec.md §6).
Réutilisation de session (reprise / suivi)
Les reprises et suivis ne font pas partie du flux one-shot, utilisez donc les scripts individuels.
Par défaut, il s'agit d'une exécution normale. Utilisez explicitement une exécution initiale avec reprise (resumable initial run) uniquement lorsqu'il y a une forte probabilité de renvoi par l'agent parent (par exemple pour des corrections transversales importantes). Ne pas abuser.
- Exécution initiale avec reprise : Passez
resumablecomme sixième argument àprepare.sh.dispatchrecevraresumableen septième argument, et des chaînes vides en huitième et neuvième arguments.out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/prepare.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID" resumable)"session_mode="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .session_mode)"/lineage_id="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .lineage_id)"bash .claude/skills/delegate-chore/scripts/dispatch.sh "$model" chore "$request_file" "$response_file" "$run_dir" "$observe_file" "$session_mode" "" ""- Après avoir lu la réponse, vérifiez
bash .claude/skills/delegate-chore/scripts/read-json.sh .backend_session.persistence "$observe_file". Si la valeur est autre queresumable, le suivi est impossible ; décidez sur-le-champ et n'attendez pas de repli implicite ultérieur.
- Exécution de suivi : Utilisée uniquement lorsque l'agent parent détecte un défaut lors de la vérification des différences. Passez
followup=<chemin_observe_file_précédent>comme sixième argument àprepare.sh. Le code de sortie 5 signifie un échec de validation ; annulez et relancez en tant que délégation normale. Pas de repli implicite.out="$(printf '%s' "$req_md" | bash .claude/skills/delegate-chore/scripts/prepare.sh chore DELEGATE_CHORE_MODEL haiku "$PARENT_TASK_TYPE_CHAIN" "$REQUESTER_SESSION_ID" "followup=$previous_observe_file")"session_mode="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .session_mode)"/resume_id="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .resume_id)"/backend_session_home="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .backend_session_home)"bash .claude/skills/delegate-chore/scripts/dispatch.sh "$model" chore "$request_file" "$response_file" "$run_dir" "$observe_file" "$session_mode" "$resume_id" "$backend_session_home"- La requête de suivi DOIT inclure le défaut détecté par l'agent parent, la plage pertinente du dernier
git diff, et une référence au fichierresponse_fileprécédent. Ne pas se fier uniquement à l'ancien contexte de conversation du worker.
Proposition de création de compétence (boucle de rétroaction)
Les tâches qui passent par delegate-chore sont le signe qu'il n'existe pas de compétence dédiée. Après avoir consommé la réponse, si cette tâche :
- apparaît de manière répétée / constitue une catégorie réutilisable clairement délimitée
alors proposez à l'utilisateur, via AskUserQuestion, la création d'une nouvelle compétence delegate-<nom> (en incluant le nom suggéré, le modèle par défaut, les autorisations d'outils et le type de lancement). Une fois l'accord obtenu, utilisez skill-creator pour générer un modèle conforme à ce protocole. Ne proposez pas pour des tâches uniques et triviales.
Proposition d'automatisation de processus déterministes
Dans le même esprit, si vous remarquez qu'une même séquence de commandes, une procédure de vérification ou une édition standardisée se répète et ne nécessite pas de décision de la part du LLM (car les embranchements sont fixes), proposez via AskUserQuestion une automatisation appropriée : script, git hook, npm script, CI, etc. (incluez la procédure cible, la cible d'automatisation et le déclencheur prévu). Ne proposez pas pour des procédures uniques ou impliquant une prise de décision.
Masquage du temps d'attente (pour les parents interactifs)
En mode interactif, vous pouvez masquer le temps d'attente perçu en exécutant dispatch.sh (ou run.sh) en arrière-plan, en vérifiant state.phase / heartbeat via observe_file, puis en appelant read-response.sh une fois que l'état est ended. Cela améliore la perception sans réduire le temps total (wall time). En mode non interactif, l'exécution en avant-plan reste obligatoire.
Contraintes
- Les modifications sont autorisées. Mais NE PAS pusher (les pushs et les PR sont gérés directement par l'agent parent).
- Ne pas redéléguer à un type déjà présent dans
task_type_chain(délégation vers un autre type autorisée). - L'agent principal n'écho pas et ne résume pas la sortie du worker. La réponse à l'utilisateur se limite à une ligne pointant vers le résumé (pour ne pas augmenter le jeton facturé par la sortie de l'agent principal ; spec.md §6).