Communitygithub.com

oubakio/delegate-skills

delegate-skills — Déléguez les tâches d'implémentation, d'investigation et de gestion Git à des modèles moins coûteux. Le protocole md2idx basé sur des fichiers allège le contexte de l'agent principal.

Qu'est-ce que delegate-skills ?

Cette compétence (skill) permet à un agent IA principal, comme Claude Code, Cursor ou Codex, de déléguer des tâches de routine (implémentation, investigation, opérations Git) à des modèles d'IA moins coûteux (par défaut `haiku`). L'objectif est de réduire la consommation de jetons (tokens) et de maintenir un contexte de travail léger pour l'agent principal, ce qui améliore l'efficacité globale. La délégation suit un protocole strict, basé sur des fichiers Markdown, pour minimiser les allers-retours et les frais généraux. Les scripts `run.sh`, `prepare.sh`, `dispatch.sh` et `read-response.sh` orchestrent le processus, en sélectionnant automatiquement la plateforme d'exécution (Codex, Devin, Cursor, Claude) selon le modèle utilisé. La compétence intègre des mécanismes d'observation, de reprise (resumable/follow-up), et une boucle de rétroaction pour suggérer la création de compétences spécialisées ou l'automatisation de processus récurrents, évitant ainsi une délégation excessive qui serait contre-productive.

Compatible avec✓Claude Code✓Codex CLI✓Cursor
npx skills add oubakiou/delegate-skills

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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)

  1. 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 run avec 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.
  2. 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_CHAIN peut être vide).
    • run exé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) contenant exit_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 positionnel session_mode de prepare.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 émet observe_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 -p etc.), exécutez run impé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_MS ou l'argument timeout de l'outil Bash).
  3. 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)". Si content_truncated est true, extrayez response_file="$(printf '%s' "$out" | bash .claude/skills/delegate-chore/scripts/read-json.sh .response_file)" et lisez-le par sections avec bash .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.

  1. Préparation (agrégée) : prepare.sh regroupe 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 prepare avec 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_CHAIN peut ê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)"
  2. 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 par dispatch.sh. stdout ne contient que le chemin du fichier response_file. Dans un parent en mode non interactif (claude -p etc.), exécutez dispatch impé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_MS ou l'argument timeout de l'outil Bash). Pendant l'exécution, la surveillance normale se limite à lire depuis observe_file les champs state.phase / state.started_at / heartbeat.ts / heartbeat.stdout_bytes / heartbeat.stderr_bytes / heartbeat.last_stream_change_at avec read-json.sh. state.phase peut être prepared | running | superseded | stalled | ended. Les états prepared et superseded correspondent à des observations non dispatchées (state.started_at == null, usage non défini, équivalent null pour read-json.sh) ; excluez-les du dénominateur lors de l'agrégation des usages.
  3. Lecture de la réponse : bash .claude/skills/delegate-chore/scripts/read-response.sh "$response_file" auto. auto lit 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 resumable comme sixième argument à prepare.sh. dispatch recevra resumable en 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 que resumable, 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 fichier response_file pré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).

Skills associés