{"slug": "pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il", "title": "Pourquoi votre sub-agent ne charge pas la même mémoire que vous (et comment il pousse sur main dans votre dos)", "summary": "A developer discovered that sub-agents do not inherit the parent's user-scope memory or feedback rules, causing a sub-agent to commit directly to the main branch without creating a feature branch or pull request. The incident occurred because the sub-agent operated in its own context sandbox and lacked access to the parent's rule requiring branch verification before commits. The developer implemented an amendment (R9) requiring that load-bearing feedbacks be explicitly inlined in the brief for any delegated task, as sub-agents do not transitively inherit the parent's memory index.", "body_md": "18 mai, fin d'après-midi. Je délègue à un sub-agent un chantier d'autosend de premiers contacts, six fichiers à toucher. Le brief tient en quinze lignes, phase 0 nommée, commandes d'audit listées avant tout INSERT. Trois quarts d'heure plus tard, retour : *committed to main*. Je relis deux fois. Je lance `git log --oneline -5`\n\net je trouve `3756e63`\n\n, un commit feature posé sur la branche par défaut, sans branche, sans PR, sans tag `[workaround-assumed]`\n\n. Trente minutes de cherry-pick, de reset et de PR rétroactive, *comme si rien n'était*.\n\nCe qui cuit, c'est que cette classe d'incident, je l'avais eue dix jours plus tôt. Le 14 mai, un commit à moi était parti sur la mauvaise branche après qu'un `git checkout`\n\nantérieur a été silencieusement annulé entre deux tours. J'avais écrit la règle le soir même, `feedback_git_branch_check_avant_commit.md`\n\n, deux paragraphes : *\"avant tout commit non-trivial, taper git branch --show-current\"*. Je la consulte mécaniquement depuis. Le sub-agent qui a poussé\n\n`3756e63`\n\nne l'avait jamais lue.Mon modèle mental était faux. Je m'imaginais une hiérarchie où la mémoire user-scope que je consulte — cent vingt feedbacks à l'heure où j'écris ces lignes — descendait *par héritage* vers les agents délégués. Comme si appeler un sub-agent revenait à lui tendre une boîte d'outils déjà ouverte, mes règles dedans.\n\nLa réalité est plus crue. Un sub-agent opère dans **sa propre sandbox de contexte**. Il reçoit le brief que je lui écris, éventuellement un sous-ensemble de rules projet-scope rattachées au répertoire de travail, mais pas l'index user-scope du parent. Aucune transitivité. La règle que je traite comme *load-bearing*, celle dont la violation produit l'incident, est opérationnellement absente pour le délégué si elle n'est pas inlinée dans le brief.\n\nL'asymétrie reste invisible tant que j'opère seul. Le parent charge sa mémoire, applique ses règles, le système tient. Elle devient un trou structurel dès que je délègue, et plus la délégation est répétée, plus la classe d'incident est probable. La mémoire d'un agent ne se transmet pas par héritage. Elle se transmet par briefing explicite, ou pas du tout.\n\nCertes, on pourrait objecter qu'inliner *tous* les feedbacks dans chaque brief reviendrait à reconstruire un index complet à chaque appel, et qu'aucun sub-agent ne lirait un brief de deux mille mots avec attention. L'objection est juste, et la règle ne demande pas cela.\n\nLa plupart de mes feedbacks ne sont pas équivalents. Certains sont génériques — ma préférence pour le français, ma signature de commit, mes goûts typographiques. D'autres portent un **invariant structurel** dont la violation produit un incident immédiat ou différé : *vérifier la branche avant chaque commit non-trivial*, *jamais de bulk DELETE sans pré-flight count récent*, *audit DB matériel avant tout test contrat*. Ceux-là, je ne les saute pas. Le critère tient en une phrase : un feedback est *load-bearing* pour une tâche si, pour le parent, sauter cette règle aurait produit l'incident qu'on cherche à éviter. Un coût de récupération qui vaut la peine pour le parent est un coût de briefing qui vaut la peine pour le délégué.\n\nJ'ai posé l'amendement dans la version 0.7 du toolkit :\n\n```\nR9 amendment — The brief must inline (or path-reference) the\nuser-scope feedbacks the parent treats as load-bearing for\nthis task. Sub-agents do not transitively inherit the parent's\nmemory index — what is not in the brief is operationally absent.\n```\n\nTrois cas d'application reviennent. Agent qui touche au git : inliner le feedback branch-check. Agent qui touche aux opérations bulk DB : inliner le pre-flight count et la whitelist de sources safe. Agent qui touche à l'audit : inliner le feedback d'audit DB matériel. Deux ou trois lignes de brief, une classe d'incident entière évitée.\n\nLa doctrine tient quand un humain est dans la boucle, et tombe dès que l'autonomie prend la main. L'amendement R9 ne demande pas au sub-agent d'être plus discipliné — ce qui serait illusoire. Il demande au parent de **matérialiser** sa propre discipline dans le brief, avant de cliquer *delegate*. J'aurais épargné trente minutes de cherry-pick si j'avais consacré quinze secondes à inliner *check git branch* dans le brief de cet après-midi-là. La même règle, deux fois : une fois pour moi, une fois pour le délégué.\n\n*Counterpart Toolkit v0.7, amendement R9. Toolkit public sous CC-BY-4.0. La règle vit dans doctrine-counterpart/CLAUDE.md ; l'audit matériel qui a justifié l'amendement vit dans v0.7-candidates.md — N=1 structurel, promote sur arbitrage : le mode de défaillance silencieuse se mesure en gravité, pas en fréquence.*", "url": "https://wpnews.pro/news/pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il", "canonical_source": "https://dev.to/michelfaure/pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il-pousse-sur-main-dans-4p4b", "published_at": "2026-06-06 08:46:54+00:00", "updated_at": "2026-06-06 09:12:05.000024+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-safety", "mlops", "large-language-models"], "entities": [], "alternates": {"html": "https://wpnews.pro/news/pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il", "markdown": "https://wpnews.pro/news/pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il.md", "text": "https://wpnews.pro/news/pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il.txt", "jsonld": "https://wpnews.pro/news/pourquoi-votre-sub-agent-ne-charge-pas-la-meme-memoire-que-vous-et-comment-il.jsonld"}}