Leçon 04 · Planification

Déléguer les gros problèmes à un agent dédié

« L'isolation de processus offre l'isolation de contexte gratuitement. » Le sous-agent fait le sale boulot, le parent ne reçoit qu'un résumé propre.

⏱ ~10 min · 📝 3 widgets interactifs · 🧑‍💻 Basé sur shareAI-lab · s04_subagent.py

Le problème de l'agent parent

Imaginez que vous demandez à Claude Code de « comprendre comment ce dépôt Rust de 100 000 lignes gère la concurrence ». Approche naïve : il fait lui-même ls, cat, grep dans le contexte principal.

Problème : cette exploration va empiler 30 tool_results dans messages[], chacun représentant quelques milliers de tokens. Au moment où il commence à rédiger la réponse, le contexte est déjà saturé par l'exploration — quelques étapes de plus et la limite est atteinte, la réponse se retrouve désorganisée.

La solution de s04 : confier la tâche d'exploration à un nouvel agent. Le nouvel agent démarre avec messages=[], explore de son côté, et ne renvoie au parent que le résumé final. Le contexte du parent ne grandit que d'un seul message : « j'ai appelé l'outil task, il a retourné XXX ». Propre et efficace.

def run_subagent(prompt: str) -> str:
    sub_messages = [{"role":"user", "content": prompt}]  # contexte tout neuf
    for _ in range(30):  # plafond de sécurité
        response = client.messages.create(..., messages=sub_messages, tools=CHILD_TOOLS, ...)
        ...
    # on ne retourne que le texte final, tout le raisonnement intermédiaire est écarté
    return "".join(b.text for b in response.content if hasattr(b, "text"))

Comparaison des contextes parent et enfant

Ce widget simule une tâche concrète : « Lister tous les endroits dans ce dépôt qui appellent une API dépréciée. » Vous pouvez la lancer avec deux stratégies : (A) l'agent parent fait lui-même le travail ; (B) un subagent est spawné. Comparez ensuite la taille finale des deux contextes.

CHILD_TOOLS : quels outils le sous-agent reçoit-il ?

Dans l'implémentation de s04, un détail facile à rater : le sous-agent n'a pas accès à l'outil task.

# le sous-agent n'a accès qu'aux outils de base, pas de spawn récursif
CHILD_TOOLS = [bash, read_file, write_file, edit_file]

# l'agent parent dispose d'un outil task en plus
PARENT_TOOLS = CHILD_TOOLS + [task]

Pourquoi ? Pour éviter que le dispatch récursif ne dégénère en arbre d'explosion. Un subagent qui spawne 4 sous-sous-agents, lesquels en spawnent eux-mêmes… en quelques itérations on obtient des dizaines d'appels concurrents que ni les tokens ni les rate limits de l'API ne peuvent absorber. La convention de s04 : le spawn est plat, parent → enfant, sur un seul niveau. Le vrai code de Claude Code fonctionne de la même façon — l'outil Task ne peut pas être appelé depuis l'intérieur d'un Task.

Ce qui est visible et ce qui ne l'est pas

Clarification des responsabilités : pour chacune des affirmations suivantes, est-elle vraie ou fausse ?

Interactif

Widget 1 · Parent vs Child · comparaison de la taille des contextes

Même tâche, deux stratégies. Cliquez sur Run pour voir la longueur finale de messages[] et l'estimation de tokens dans chaque cas.

🧠 Agent parent fait tout lui-même
messages: 0 · ~0 tokens
🎯 Spawn d'un subagent
messages: 0 · ~0 tokens
Interactif

Widget 2 · Vrai ou Faux · responsabilités parent/enfant

6 questions V/F pour tester votre compréhension des frontières d'isolation.

Correct : 0 / 6
Interactif

Widget 3 · Quand spawner · quelles tâches conviennent à un subagent ?

6 descriptions de tâches : décidez si (A) le parent la fait lui-même ou (B) un subagent est spawné. Il n'y a pas de réponse « absolument correcte », mais certains choix sont clairement plus judicieux.

Correct : 0 / 6