| name | ops-monitor |
| description | Sonde ops /6h (T1/Haiku, caveman full) — FUSION coordination-agents + dispatch-task-monitor : battement bus canal_agents (sense/intégration/dispatch/heartbeat) PUIS scan sessions Cowork → TASK_MONITOR.md. Souvent no-op. |
ROUTAGE : T1/Haiku, caveman full, Extended Thinking OFF. Sonde ops FUSIONNÉE (bus canal_agents + sessions Cowork). Souvent no-op. Lecture ciblée, JAMAIS de scan vault. Max 10 fiches intégrées/run, max 3 offloads/run.
==================== PARTIE A — BUS canal_agents ====================
TOUTE écriture bus passe par : py "%USERPROFILE%\Documents\Claude\Projects\TricorderKit Autonome\canal_agents\scripts\sync_bus.py" (read/inbox/tasks/dispatch/done/claim/heartbeat/health ; flags via --help ; si UnicodeEncodeError : $env:PYTHONIOENCODING="utf-8"). Jamais à la main, jamais python3.
A) SENSE : read --agent claude --advance ; health ; inbox --agent claude. Partenaire actif = heartbeats récents (codex|antigravity). Aucun battement >24h → traiter quand même les livrables, noter "aucun partenaire actif".
B) INTÉGRATION (sauter si aucun deliverable_ready ni fichier neuf) : fiches en zone R40 97_A_Trier/05_A_Integrer/Fiches a trier - en attente/ via MCP obsidian-japan-alliance. QA : 2 sources concordantes OU 1 primaire officielle (Wikipedia exclu) ; ID via next-id (R34) ; patch_note/write_note SANS écraser ; archiver l'original (R31, jamais delete) ; conflit → arbitrage Sébastien. Puis done --task + 1 entrée Journal (≤3 lignes).
C) OFFLOADS : depuis le dernier RAPPORT_MATIN/BILAN_NUIT (TRICORDERKIT_RAPPORTS). DÉDUP OBLIGATOIRE via tasks + inbox --agent codex — jamais 2× la même tâche. Routage selon ROUTING.md. âš ï¸ ANTI-FAMINE : si le partenaire enchaîne les task_failed (≥3 récents sans livrable), NE PAS redispatcher — signaler et lister pour Sébastien. Arbitrages (conflits, irréversible) → jamais offloadés.
D) heartbeat claude --state idle|working.
==================== PARTIE B — TASK MONITOR sessions Cowork ====================
- Appelle list_sessions avec limit=50 → sépare running vs idle.
- Pour les 5 sessions idle les plus récentes, appelle read_transcript (max 3 turns) → extrais la dernière action réalisée.
- Écris "00_SYSTEM/05_Hot_Cache/TASK_MONITOR.md" via obsidian-claude-vault (mode overwrite) :
---
last_check: YYYY-MM-DD HH:MM
running: N
idle: N
---
# 🔠Task Monitor — YYYY-MM-DD HH:MM
## 🟢 Running (N)
| Titre | Session ID |
|---|---|
## 🟡 Idle — relances possibles (N)
| Titre | Dernière action | Relancer ? |
|---|---|---|
## 📊 Stats
Total: N | Running: N | Idle: N
🤖 Auto — ops-monitor
Lecture seule sur les transcripts (jamais relancer une session toi-même) ; écriture uniquement dans TASK_MONITOR.md.
==================== SORTIE ====================
≤10 lignes combinées : "Ops HH:30 — BUS (partenaire: X) integ:N offloads:A/B skip arbitrages:Z | SESSIONS running:N idle:N relances:N". Tout no-op → 1 ligne. Vouvoyer Sébastien, pas de notification si tout est nominal.