PD-293 — One Ring : orchestration multi-stories via claude-peers + contrôle iPhone¶
1. Contexte¶
Le workflow de gouvernance ProbatioVault (11 étapes, /gov) fonctionne en mode single-story : un humain pilote une session Claude Code qui orchestre une seule PD-XXX à la fois. Le workflow supporte déjà le parallélisme technique (chaque story a sa propre FSM Jira), mais le goulot d'étranglement est le coût cognitif humain de suivre N sessions simultanées.
Problème : Quand 3-5 stories sont en cours sur des projets différents (backend, app, infra...), l'humain doit jongler entre N fenêtres/terminaux, répondre aux escalades de chaque session, et maintenir le contexte mental de chacune. Résultat : throughput limité à ~1 story active à la fois.
Source : Veille claude-peers (2026-03-27), bcherny features (2026-03-30), discussion ProbatioVault (2026-03-30).
2. Besoin¶
En tant que PO/architecte ProbatioVault (The Sovereign), je veux une session Claude Code unique (The One Ring) qui orchestre N sessions autonomes (Ringbearers) exécutant chacune /gov PD-XXX, afin de piloter plusieurs stories en parallèle depuis une seule interface, y compris depuis mon iPhone via /remote-control.
3. Architecture LOTR¶
┌─────────────────────────────────────────────────────────┐
│ The Sovereign (humain, iPhone) │
│ Source d'intention, validation finale │
│ Interface : /remote-control │
└───────────────────────┬─────────────────────────────────┘
│ commandes / réponses
▼
┌─────────────────────────────────────────────────────────┐
│ The One Ring (session Claude Code Lord) │
│ Orchestre N sessions, poll avancement, remonte │
│ escalades, crée/détruit des Ringbearers │
│ ⚠️ NE EXECUTE RIEN — pur routeur/interface │
│ Skill : /gov-lord │
└───────┬──────────┬──────────┬───────────────────────────┘
│ │ │ claude-peers-mcp
▼ ▼ ▼ (list_peers, send_message)
┌──────────┐ ┌──────────┐ ┌──────────┐
│Ringbearer│ │Ringbearer│ │Ringbearer│
│ /gov │ │ /gov │ │ /gov │
│ PD-275 │ │ PD-282 │ │ PD-293 │
│(backend) │ │(backend) │ │(ia-gov) │
└──────────┘ └──────────┘ └──────────┘
Sessions Claude Code autonomes
Chacune a ses propres credentials
4. Périmètre fonctionnel¶
4.1 Installation et configuration claude-peers-mcp¶
- Intégrer
claude-peers-mcp(https://github.com/louislva/claude-peers-mcp) dans l'écosystème ProbatioVault - Configurer le broker (localhost:7899, SQLite) pour auto-launch
- Ajouter la config MCP dans
.mcp.jsondu repo ia-governance
4.2 Skill /gov-lord (The One Ring)¶
Skill d'orchestration multi-stories. Commandes :
| Commande | Description |
|---|---|
/gov-lord start PD-XXX [projet] | Crée un Ringbearer (nouvelle session Claude Code) et lance /gov PD-XXX |
/gov-lord status | Poll tous les Ringbearers, affiche tableau de bord consolidé |
/gov-lord stop PD-XXX | Arrête un Ringbearer |
/gov-lord escalade | Liste les escalades en attente de réponse humaine |
/gov-lord respond PD-XXX "réponse" | Transmet une réponse du Sovereign à un Ringbearer |
Invariant de sécurité critique (INV-293-01) : Le One Ring NE DOIT JAMAIS exécuter de commande qui sort de son rôle d'interface. Il ne lit pas de code, ne modifie pas de fichier, ne touche pas à Jira, ne lance pas de build. Il communique UNIQUEMENT avec les Ringbearers via claude-peers-mcp. Toute demande hors scope doit être bloquée avec message explicite.
4.3 Démarrage rapide des Ringbearers¶
- Chaque Ringbearer est une session Claude Code lancée avec les options minimales pour démarrage rapide
- Le Ringbearer exécute
/gov PD-XXX projeten totale autonomie - Le Ringbearer utilise
set_summarypour publier son état courant (étape, gate, verdict...) - Le Ringbearer remonte ses escalades via
send_messageau One Ring
4.4 Skill /remote-control (interface iPhone)¶
Interface mobile permettant au Sovereign de piloter le One Ring depuis l'iPhone :
- Voir le tableau de bord consolidé (N stories, état, escalades)
- Répondre aux escalades
- Lancer/arrêter des Ringbearers
- Fonctionnement via Claude Code web app (claude.ai/code) sur Safari mobile
4.5 Protocole de communication¶
Messages Ringbearer → One Ring : - STATUS_UPDATE : changement d'étape/gate (auto, via set_summary) - ESCALADE : question nécessitant décision humaine (bloquant) - GATE_RESULT : verdict de gate (GO/RESERVE/NON_CONFORME) - WORKFLOW_DONE : story terminée
Messages One Ring → Ringbearer : - PO_RESPONSE : réponse à une escalade - PAUSE : mettre en pause - RESUME : reprendre - ABORT : abandon de la story
5. Hors périmètre¶
- Modification du workflow
/govexistant (les Ringbearers l'utilisent tel quel) - Partage de credentials entre sessions (chaque Ringbearer a ses propres accès)
- Interface native iOS (on utilise Claude Code web app)
- Communication directe entre Ringbearers (tout passe par le One Ring)
6. Contraintes¶
| Contrainte | Description |
|---|---|
| Sécurité | Le One Ring n'a accès à AUCUN credential projet (Vault, GitLab, Jira). Il ne peut que communiquer via claude-peers-mcp. |
| Isolation | Chaque Ringbearer est une session isolée avec son propre contexte, ses propres credentials, son propre working directory. |
| Scalabilité | Supporter jusqu'à 5 Ringbearers simultanés (limite raisonnable pour un MacBook). |
| Latence | Le polling du broker (1s) est acceptable. Les escalades doivent apparaître en < 5s sur le One Ring. |
| Résilience | Si un Ringbearer crash, le One Ring le détecte (peer disparu) et le signale au Sovereign. |
7. Critères d'acceptation préliminaires¶
- CA-01 : Le One Ring peut lister les Ringbearers actifs via
list_peers - CA-02 : Le One Ring peut créer un Ringbearer qui lance
/gov PD-XXXen autonomie - CA-03 : Les escalades des Ringbearers apparaissent sur le One Ring en < 5s
- CA-04 : Le Sovereign peut répondre à une escalade via
/gov-lord respond - CA-05 : Le One Ring refuse toute commande hors scope (lecture code, modification fichier, accès Jira direct)
- CA-06 :
/remote-controlaffiche le tableau de bord consolidé depuis iPhone - CA-07 : Un Ringbearer crashé est détecté et signalé au Sovereign
- CA-08 : Le workflow
/govexistant fonctionne sans modification dans un Ringbearer
8. Dépendances¶
| Dépendance | Type | Statut |
|---|---|---|
| claude-peers-mcp | Externe (npm) | Disponible (github.com/louislva/claude-peers-mcp) |
Claude Code /remote-control | Feature Claude Code | À vérifier disponibilité |
| claude/channel protocol | Feature Claude Code | Utilisé par claude-peers-mcp |
| Claude Code web app (iPhone) | Plateforme | Disponible (claude.ai/code) |
9. Arbitrages et décisions¶
- Pourquoi LOTR ? Métaphore volontaire : le One Ring contrôle les Ringbearers, mais le Sovereign (humain) reste au-dessus. L'anneau est un outil, pas un maître.
- Pourquoi pas de communication directe inter-Ringbearers ? Principe de moindre complexité. Le One Ring comme médiateur unique simplifie le debug et la traçabilité. Si un Ringbearer a besoin d'info d'un autre projet, il passe par le One Ring qui route.
- Pourquoi limiter à 5 ? Ressources machine (RAM, CPU, contexte LLM) + coût API. Au-delà de 5, le One Ring lui-même devient un goulot.
10. Diagrammes¶
10.1 Flux de création d'un Ringbearer¶
sequenceDiagram
participant S as Sovereign (iPhone)
participant O as One Ring
participant B as Broker (localhost:7899)
participant R as Ringbearer
S->>O: /gov-lord start PD-275 backend
O->>O: Vérifie scope (OK: création Ringbearer)
O->>R: Lance session Claude Code (claude --bare)
R->>B: register_peer()
R->>R: /gov PD-275 backend
R->>B: set_summary("PD-275: étape 0 - besoin")
O->>B: list_peers()
B-->>O: [Ringbearer PD-275: "étape 0 - besoin"]
O-->>S: ✅ Ringbearer PD-275 démarré — étape 0 10.2 Flux d'escalade¶
sequenceDiagram
participant S as Sovereign (iPhone)
participant O as One Ring
participant R as Ringbearer PD-275
R->>O: send_message(ESCALADE, "Gate 3 RESERVE — invariant INV-03 ambigu, besoin clarification PO")
O->>O: Vérifie scope (OK: remontée escalade)
O-->>S: 🚨 ESCALADE PD-275 : "Gate 3 RESERVE — invariant INV-03 ambigu"
S->>O: /gov-lord respond PD-275 "L'invariant INV-03 s'applique uniquement aux documents signés"
O->>R: send_message(PO_RESPONSE, "L'invariant INV-03 s'applique uniquement aux documents signés")
R->>R: Continue Gate 3 avec la clarification