Chef d'orchestre uniquement pour la coordination · Tâches lourdes déléguées aux sous-agents · Réponse instantanée
Phénomène : on donne une tâche lourde à l'assistant IA, puis il ne répond plus aux messages, on ne peut pas l'interrompre, on attend 10 minutes pour une seule phrase. Cause racine : ce n'est pas le modèle qui est lent, c'est le chef d'orchestre qui exécute la tâche lourde en avant-plan, bloquant toute la conversation – les messages de l'utilisateur font la queue derrière. Solution : transformer « délégation des tâches lourdes + réponse instantanée » en une règle inscrite dans les instructions de l'Agent, et l'appliquer de manière idempotente sur la machine.
Indépendant de la plateforme : le bloc de règles lui-même est indépendant de la plateforme ; tout Agent AI supportant les fichiers d'instructions / le prompt système / les sous-agents est applicable (Claude Code / Codex / Cursor / WorkBuddy / Hermes / autres plateformes similaires). Le script d'approvisionnement n'écrit directement que dans les deux emplacements testés ; pour les autres plateformes, il suit le chemin « exportation du bloc de règles prêt à coller » – il ne devine pas les chemins de configuration, ni n'invente de champs.
Quand l'utiliser
- Quand l'utilisateur se plaint « j'attends trop longtemps / ça bloque quand j'essaie d'interrompre / personne ne répond / je dois discuter souvent avec toi » ;
- Pour institutionnaliser « déléguer les tâches lourdes aux sous-agents, le chef d'orchestre répond instantanément » sur une ou plusieurs instances d'Agent sur la machine ;
- Pour ajouter ce mécanisme à une instance (via
scripts/provision_agent_responsiveness.py) et vérifier qu'il est bien actif (viascripts/audit_agent_responsiveness.py).
La cause racine
Le chef d'orchestre exécute les tâches lourdes (récupération par lots, traitement de plusieurs fichiers, scripts longs) en avant-plan → tout le cycle de réponse est bloqué :
- Pendant une commande longue en avant-plan, les messages de l'utilisateur font la queue ;
- Sur certaines plateformes, quand un sous-agent est en cours d'exécution, l'interruption utilisateur est dégradée en « file d'attente » : elle n'est lue qu'à la fin du cycle complet ;
- D'où la sensation utilisateur « cet assistant ne me répond pas » – alors qu'il est simplement en train de travailler sans interruption.
Conclusion : pour qu'un assistant soit toujours joignable, il doit ne pas exécuter lui-même les tâches lourdes, et lorsqu'il est effectivement occupé, une voie d'interruption instantanée doit être préservée. Ces deux conditions doivent être remplies ensemble.
Les trois choses à faire ensemble (indispensables)
1. Inscrire le bloc de règles dans la couche d'instructions de l'Agent (en tête)
Le bloc de règles complet se trouve dans templates/agent-ops-rules.md (utilisé par le script). Les six règles clés :
- Quadruple niveau (trier avant d'agir) : L0 Question/Réponse → répondre directement, ne pas déléguer | L1 Opération rapide unique (≤1 outil et ≤20 secondes) → exécuter directement | L2 Opération multi-étapes / longue / par lots / avec Internet → toujours déléguer | L3 Nécessité d'une validation utilisateur → d'abord répondre « Ceci nécessite votre décision sur X ».
- Après délégation, répondre immédiatement et terminer le tour (interdiction d'attendre sans rien faire ; attendre = ne pas avoir délégué).
- Commandes de plus de 60 secondes en arrière-plan (les commandes longues en avant-plan bloquent tout le tour).
- Le sous-agent ne retourne que la conclusion + le chemin du produit ; l'analyse intégrée est faite par le chef d'orchestre.
- L'interruption utilisateur a la priorité absolue : répondre immédiatement, si possible répondre, ne jamais faire attendre l'utilisateur.
- Les tâches nécessitant une question / validation restent chez le chef d'orchestre (le sous-agent ne peut pas interroger un humain).
Le bloc de règles est encapsulé par
<!-- agent-ops-rules:v1 -->…<!-- /agent-ops-rules -->, grâce à cette paire de marqueurs, le script d'approvisionnement est idempotent : en cas de réexécution, il ne remplace que son propre bloc marqué, sans toucher à votre contenu.
2. Préserver une voie d'interruption instantanée (dépendante de la plateforme)
La sémantique de « l'utilisateur interrompt l'IA quand elle est occupée » varie selon les plateformes, avec des effets radicalement différents :
| Sémantique d'interruption | Expérience réelle | Satisfait « réponse instantanée » ? |
|---|---|---|
| Attendre la fin du cycle complet pour être lue | L'utilisateur attend | ❌ |
| Rattachée au « dernier résultat d'outil », livrée seulement quand l'ensemble des outils en cours est terminé | Quand le chef d'orchestre exécute une commande longue en avant-plan, tout est bloqué jusqu'à la sortie de la commande | ❌ (inefficace pour les longues commandes) |
| Interrompt immédiatement la génération / requête en cours, injecte le message de l'utilisateur comme nouveau message, et le travail déjà effectué est conservé | L'interruption est presque instantanée | ✅ |
Critère (en une phrase) : pour pouvoir « interrompre à tout moment », il faut choisir la sémantique interruption immédiate + conservation du travail effectué ; et l'associer à la règle « commande longue en arrière-plan » – les deux sont nécessaires.
(Les détails de clé et tests pour Hermes sont dans references/hermes-implementation.md ; pour les autres plateformes, cherchez l'option avec la même sémantique dans les réglages de votre plateforme.)
3. La concurrence des sous-agents doit être suffisante (sinon « tout déléguer » sera bloqué par le nombre de slots)
« Déléguer toutes les tâches lourdes » suppose pouvoir en déléguer plusieurs en même temps. Une concurrence trop faible transforme la délégation en file d'attente – l'utilisateur attend quand même.
- Réglez la limite de concurrence à un niveau acceptable (généralement 3–6) ; les conséquences d'un dépassement varient selon les plateformes (certaines rejettent tout le lot, d'autres tronquent) – donc déléguez par lots plutôt que de forcer la limite.
- La concurrence est directement liée au coût : chaque sous-agent est facturé indépendamment, réglez selon vos besoins, ne mettez pas tout au maximum sans raison.
4. Après modification, l'Agent doit recharger les instructions
Les fichiers d'instructions / le prompt système sont généralement lus une seule fois au démarrage du processus. Écrire sans redémarrer = ne pas avoir appliqué :
- Redémarrez le processus / la passerelle / la session de l'Agent concerné (selon votre plateforme) ;
- Après redémarrage, vérifiez : demandez à l'Agent de réciter cette règle – s'il peut la dire, elle est vraiment chargée (plutôt que « je pense qu'il l'a lue »).
Approvisionnement / Audit en un clic
# ① Simulation (comportement par défaut, n'écrit aucun fichier) : voir quels fichiers seraient modifiés
python3 scripts/provision_agent_responsiveness.py
# ② Écriture réelle (sauvegarde automatique + idempotence ; si plateforme non détectée, exporte le bloc prêt à coller)
python3 scripts/provision_agent_responsiveness.py --apply
# ③ Forcer l'exportation du bloc prêt à coller (pour Codex / Cursor / WorkBuddy / plateforme inconnue)
python3 scripts/provision_agent_responsiveness.py --apply --export --out ./agent-ops-rules.md
# ④ Audit : le bloc de règles existe-t-il / est-il en tête / est-il à jour ?
python3 scripts/audit_agent_responsiveness.py
Conventions de comportement du script d'approvisionnement (codées en dur, vérifiables) :
| Convention | Description |
|---|---|
| Simulation par défaut | Sans --apply, n'écrit rien sur le disque |
| Sauvegarde automatique | Génère <nom_fichier>.bak-agent-ops-<timestamp> avant l'écriture |
| Idempotence | Si marqueurs présents, compare le contenu : identique → passe ; différent → ne remplace que le bloc marqué |
| Ne pas écraser le contenu utilisateur | Insère uniquement en haut du fichier (en ignorant le YAML frontmatter), ne supprime aucun contenu original |
| Ne pas deviner les chemins | Écrit uniquement dans les deux emplacements testés (Hermes SOUL.md, Claude Code ~/.claude/CLAUDE.md) ; pour les autres plateformes, exporte un bloc à coller |
| Bibliothèque standard uniquement | Utilise seulement les bibliothèques standard (argparse / pathlib / json etc.), compatible Windows / macOS / Linux |
Conventions du script d'audit : vérifie point par point les faits vérifiables au niveau du fichier (existence / marquage / emplacement en tête / contenu à jour) ; si aucune plateforme prise en charge n'est détectée, il affiche « Aucune plateforme prise en charge détectée » et retourne le code de sortie 2 – il ne prétend jamais que tout est OK si ce n'est pas le cas.
Couche d'adaptation de plateforme (tableau de correspondance des outils)
| Action abstraite | Hermes (testé) | Claude Code | Cursor / Codex / WorkBuddy | Autres plateformes similaires |
|---|---|---|---|
| Emplacement du bloc de règles | <HERMES_HOME>/SOUL.md (et <HERMES_HOME>/profiles/<p>/SOUL.md) | ~/.claude/CLAUDE.md | Selon l'emplacement des instructions globales / du prompt système de votre plateforme | Exporter agent-ops-rules.md puis coller dans le prompt système |
| Déléguer un sous-agent | delegate_task | Tâche / outil sous-agent (selon la correspondance de votre plateforme) | Selon la correspondance de votre plateforme pour les sous-agents / tâches | Selon la correspondance de votre plateforme pour les sous-agents / tâches |
| Commande longue en arrière-plan | Exécution en arrière-plan + notification de fin | Tâche en arrière-plan / mode asynchrone de l'outil de commande | Selon le mode d'exécution en arrière-plan de votre plateforme | Utiliser les processus en arrière-plan du système + journals sur disque |
Limite d'honnêteté : les noms de clés et la sémantique de la colonne Hermes viennent de tests réels sur machine ; le chemin
~/.claude/CLAUDE.mdde Claude Code est testé. Les noms d'outils de Cursor / Codex / WorkBuddy peuvent varier selon les versions, ce Skill n'invente pas de commandes ou de noms de champs – veuillez faire la correspondance vous-même selon le tableau ci-dessus. Une version plus complète de la discipline de délégation multiplateforme se trouve dans le Skillsubagent-firstdu même auteur.
Pièges (communs à toutes les plateformes)
- Le fichier d'instructions n'est lu qu'au démarrage : modifier sans redémarrer (ou sans redémarrer la bonne instance) = pas d'effet. Ne considérez pas « c'est écrit dans le fichier » comme une preuve.
- Mauvais choix de sémantique d'interruption : choisir la sémantique « livrée quand l'ensemble des outils en cours est terminé » combinée à « le chef d'orchestre exécute une commande longue en avant-plan » donne à l'utilisateur l'impression que personne ne répond. Il faut absolument choisir « interruption immédiate + conservation du travail effectué ».
- Les variables d'environnement peuvent écraser la configuration : sur de nombreuses plateformes, « env prioritaire sur config ». Après modification, vérifiez d'abord la source réellement active, ne regardez pas seulement le fichier de configuration.
- Fausse redémarre : on arrête seulement le processus d'encapsulation / l'instance planifiée, mais le vrai processus enfant tourne encore avec l'ancienne config. Pour vérifier, regardez l'heure de démarrage du processus, pas le nombre de processus.
- Limite de concurrence non vérifiée : on pense « tout peut être délégué », mais en réalité, le dépassement de la limite entraîne un rejet ou une troncature du lot entier → déléguez par lots et vérifiez la valeur limite active.
- Installer à un seul endroit : les fichiers d'instructions et les répertoires de skills pour plusieurs instances / profils sont indépendants – installez-les un par un (le script d'approvisionnement parcourt les profils Hermes ; pour les autres plateformes, installez selon le nombre de vos instances).
- N'utilisez pas « désactiver les outils lourds du chef d'orchestre » pour le forcer à déléguer : sur la plupart des plateformes, l'ensemble d'outils du sous-agent est un sous-ensemble de celui du chef d'orchestre (il ne peut pas avoir d'outils que le chef d'orchestre n'a pas) – désactiver revient à se priver de ressources.
- Fausse validation : si le script d'audit ne vérifie que « le fichier contient-il ces quelques mots », il risque de valider un contenu périmé / écrasé par des modifications ultérieures. Vérifiez la conformité du contenu avec le modèle actuel, et si aucune plateforme n'est détectée, dites honnêtement « Aucune plateforme prise en charge détectée ».
Liste de vérification d'acceptation (à répondre quand on vous demande « est-ce que ça marche vraiment ? »)
A. Couche fichier (vérification automatique par script)
- Le fichier cible du bloc de règles existe et
greppermet de trouver le marqueuragent-ops-rules:v1; - Le bloc de règles est en tête (dans le premier tiers du fichier) ;
- Le contenu du bloc de règles est identique au modèle actuel (pas un résidu d'ancienne version) ;
- Réexécution du script d'approvisionnement : ne produit pas un deuxième bloc de règles et n'écrase pas votre contenu existant ;
-
audit_agent_responsiveness.pyest entièrement vert (code de sortie 0) ; si aucune plateforme n'est détectée, code de sortie 2 + message clair.
B. Couche runtime (vérification manuelle)
- Après redémarrage, demandez à l'Agent de réciter cette règle → s'il peut la dire, l'instruction est vraiment chargée ;
- Donnez une tâche lourde à l'Agent → il répond immédiatement une phrase « j'ai délégué (qui fait quoi) », au lieu de travailler en silence pendant 10 minutes ;
- Pendant l'exécution de la tâche lourde, l'utilisateur interrompt d'une phrase → il reçoit immédiatement un accusé de réception, et la réponse n'est pas interrompue ;
- Une fois la tâche lourde terminée : le produit peut être relu et vérifié par le chef d'orchestre (pas seulement « auto-déclaré terminé »).
C. Cas limites
- Pendant l'interruption utilisateur, le sous-agent en cours d'exécution n'est pas annulé en cascade (ou la partie annulée est clairement expliquée) ;
- Les tâches nécessitant une validation utilisateur ne sont pas déléguées à un sous-agent.
Licence
MIT License. Libre d'utilisation pour projets personnels et commerciaux, avec mention de l'auteur.
🙋 À propos de l'auteur
九品锦锂e | J'encapsule les pièges que j'ai rencontrés en skills « prêts à l'emploi », pas de manuel. Ce skill est la version que j'utilise moi-même tous les jours.
WeChat : ly5419495 (Ajoutez la note « SkillHub » pour que je vous accepte en priorité) Compte public : 初五Agent (Recherchez sur WeChat, les bilans et méthodes y sont écrits, vous pouvez lire sans ajouter mon WeChat)
Mes autres outils directement utilisables se trouvent sur cette page d'étagère (ouvrez dans un navigateur) : https://skillpay.alipay.com/public/jiupinjinlie
Si vous bloquez en cours d'utilisation ou si vous avez d'autres scénarios que vous souhaitez me voir encapsuler en skill, contactez-moi par l'un des moyens ci-dessus.

Ce Skill est la version complète, sans fonctionnalité supprimée.