sync: scission owner/template + brain-template-export + BRAIN_MODE guard + /visualize scope filter + port orphelins fix

This commit is contained in:
2026-03-21 02:34:47 +01:00
parent 78323a0094
commit 2fd53cce8e
93 changed files with 6953 additions and 684 deletions

View File

@@ -4,7 +4,7 @@ type: index
context_tier: cold
---
# Agents spécialisés — l'owner
# Agents spécialisés — Tetardtek
> Index des agents disponibles.
> Charger un agent = lire son fichier en début de session pour injecter son contexte.
@@ -14,12 +14,15 @@ context_tier: cold
## 🔴 Agents chauds — auto-détectés sur trigger domaine
> Chargés automatiquement quand le domaine est détecté. Jamais au boot.
> Chargés automatiquement quand le domaine est détecté. Exception : `infra-scribe` chargé au boot (après helloWorld, avant agents domaine).
| Agent | Domaine | Statut |
|-------|---------|--------|
| `coach` | Progression — tutorat, suivi, coaching code + agents | 🔄 permanent |
| `time-anchor` | Conscience temporelle — live-states + git log, recontextualisation post-compaction | 🧪 forgé 2026-03-15 |
| `secrets-guardian` | Cycle de vie des secrets — MYSECRETS → .env, jamais dans le chat | 🧪 forgé 2026-03-14 |
| `secrets-injector` | Injection credentials dans prompts subagents — coach only, jamais affiché | 🧪 forgé 2026-03-17 |
| `infra-scribe` | Registre infra — DB, deploy paths, runtime — chargé au boot après helloWorld | 🧪 forgé 2026-03-17 |
| `vps` | Infra, Apache, Docker, SSL | 🔄 |
| `mail` | Stalwart, DNS, protocoles | 🔄 |
| `code-review` | Qualité, sécurité, dette technique | ✅ 2026-03-12 |
@@ -40,6 +43,12 @@ context_tier: cold
| `content-orchestrator` | Sentinelle content layer — détecte signaux, active storyteller/doc | 🧪 forgé 2026-03-14 |
| `tech-lead` | Leadership technique — gate d'entrée sprint, contention map, overflow zones | 🧪 forgé 2026-03-14 |
| `game-designer` | Game design — mécanique, équilibrage, progression, systèmes de jeu | 🧪 forgé 2026-03-15 |
| `brain-ui-scribe` | Contexte brain-ui — stack, composants, Sprint 2, règles agents — chargé avant tout agent touchant brain-ui | 🧪 forgé 2026-03-17 |
| `ux-architect` | Architecture UX brain-ui — hiérarchie info L0/L1/L2, WorkflowBuilder, AgentBrowser, vision propre non influencée | 🧪 forgé 2026-03-17 |
| `audit` | Diagnostic brain — cohérence inter-couches, gaps sessions/agents/ADRs, références cassées | 🧪 forgé 2026-03-17 |
| `pattern-scribe` | Détection patterns récurrents inter-sessions — registre drift contextualisation | 🧪 forgé 2026-03-17 |
| `brain-guardian` | Auto-méfiance structurelle — assertions prouvées uniquement quand brain opère sur lui-même | 🧪 forgé 2026-03-18 |
| `pre-flight` | Gate boot — vérifie tier_required + kerneluser + write_lock avant chargement L1 (step 4.5 BHP) | 🧪 forgé 2026-03-18 |
---
@@ -62,6 +71,10 @@ context_tier: cold
| `todo-scribe` | Persistance intentions — gardien de brain/todo/ | 🧪 forgé 2026-03-13 |
| `kanban-scribe` | Pipeline kanban — transitions d'état au wrap, détection autonomie | 🧪 forgé 2026-03-15 |
| `helloWorld` | Bootstrap intelligent — briefing + chargement sélectif | 🧪 forgé 2026-03-13 |
| `decision-scribe` | Registre connaissance structurelle — stack, capacités, politiques constantes — gate:human.DEFINE | 🧪 forgé 2026-03-17 |
| `content-strategist` | Stratégie contenu YouTube — angle, audience, arc narratif, titres A/B | 🧪 forgé 2026-03-17 |
| `scriptwriter` | Scripts vidéo tournables — short 60s + long 12min, timing par ligne | 🧪 forgé 2026-03-17 |
| `seo-youtube` | SEO YouTube + thumbnail brief — copy-pasteable dans YouTube Studio | 🧪 forgé 2026-03-17 |
| `git-analyst` | Historique git sémantique — conventions, synthèse commits | 🧪 forgé 2026-03-13 |
| `capital-scribe` | Capital CV — milestones → formulations recruteur | 🧪 forgé 2026-03-13 |
| `config-scribe` | Configuration brain — wizard first run, hydration Sources | 🧪 forgé 2026-03-13 |
@@ -77,6 +90,45 @@ context_tier: cold
| `context-broker` | Cycle respiratoire de contexte — inhale source map + expire release map + breath metrics | 🧪 forgé 2026-03-15 |
| `product-strategist` | Stratégie produit — business model, SaaS, monétisation, positionnement | 🧪 forgé 2026-03-15 |
| `satellite-boot` | Boot loader satellite — Pattern 10, scope unique, zéro overhead, signal retour pilote | 🧪 forgé 2026-03-16 |
| `spec-scribe` | Rédaction specs techniques structurées — brainstorm validé → spec ratifiable profil/ | 🧪 forgé 2026-03-15 |
| `wiki-scribe` | Rédaction et mise à jour wiki/ — entrées canoniques, cohérence index | 🧪 forgé 2026-03-16 |
---
## ⚙️ Agents kernel — protocole & supervision
> Agents de protocole système — scope:kernel, distribués dans brain-template.
> Invocation explicite ou via brain-hypervisor. Ne se chargent pas automatiquement.
| Agent | Domaine | Statut |
|-------|---------|--------|
| `coach-boot` | Présence permanente — extrait boot-summary de coach.md, chargé L0 CLAUDE.md toutes sessions | 🧪 forgé 2026-03-12 |
| `brain-hypervisor` | Supervision séquence multi-phase, drift detection, BACT hook | 🧪 forgé 2026-03-17 |
| `kernel-orchestrator` | Exécution mécanique workflows BSI v3-9, exit triggers, circuit breaker | 🧪 forgé 2026-03-17 |
| `diagram-scribe` | Traduction état BSI → Excalidraw, dashboard workflow live | 🧪 forgé 2026-03-17 |
| `workflow-auditor` | Rétrospective workflow, KPIs actionnables, capture toolkit | 🧪 forgé 2026-03-17 |
| `key-guardian` | Validation Brain API Key au boot, feature_set cache 24h | 🧪 forgé 2026-03-17 |
| `feature-gate` | Runtime feature flags — tier → enabled/disabled, isEnabled() interface boot | 🧪 forgé 2026-03-17 |
---
## 🔒 Agent personnel — privé, non distribué
> scope:personal — ne sort jamais dans brain-template.
| Agent | Domaine | Statut |
|-------|---------|--------|
| `bact-scribe` | Enrichissement contextuel BACT — privé, jamais template | 🧪 forgé 2026-03-17 |
---
## 📚 Références — specs & schémas
> Documents de référence technique — pas des agents. Chargés sur besoin.
| Référence | Contenu | Statut |
|-----------|---------|--------|
| `bsi-schema` | Spec BSI v1.3 — schema claim, champs obligatoires, lifecycle | 🧪 forgé 2026-03-16 |
---

379
agents/CATALOG.yml Normal file
View File

@@ -0,0 +1,379 @@
# agents/CATALOG.yml — Registre des agents par tier
# Source de vérité pour brain sync kernel + brain-store
# tier: free = accessible à tous | pro = tier pro requis | owner = kernel writer only
#
# export: true = inclus dans brain-template (distribué)
# export: false = privé ou avancé (non distribué)
version: "1.0.0"
updated: "2026-03-18"
agents:
# ── Tier free — agents fondamentaux ──────────────────────────────────────
- id: coach
tier: free
export: true
description: "Coach permanent — présence, progression, feedback"
- id: debug
tier: free
export: true
description: "Debug agent — bugs, crashes, comportements inattendus"
- id: scribe
tier: free
export: true
description: "Scribe — maintenance du brain, structuration"
- id: mentor
tier: free
export: true
description: "Mentor — pédagogie, explication, garde-fou"
- id: helloWorld
tier: free
export: true
description: "Bootstrap intelligent — briefing + chargement sélectif"
- id: aside
tier: free
export: true
description: "Parenthèse de session — /btw pattern, 2-3 lignes, retour session"
- id: brainstorm
tier: free
export: true
description: "Exploration et structuration de décisions — avocat du diable"
- id: interprete
tier: free
export: true
description: "Clarification d'intention — demandes ambiguës, scope drift"
- id: orchestrator
tier: free
export: true
description: "Coordination — diagnostic et délégation multi-agents"
- id: orchestrator-scribe
tier: free
export: true
description: "Bus inter-sessions — Signals BSI, cycles coworking, HANDOFF"
- id: recruiter
tier: free
export: true
description: "Meta-agent — conception d'agents"
- id: agent-review
tier: free
export: true
description: "Audit du système d'agents — gaps, patches, vue système"
- id: todo-scribe
tier: free
export: true
description: "Persistance intentions — gardien de brain/todo/"
- id: doc
tier: free
export: true
description: "Documentation — README, API Swagger, cohérence doc ↔ code"
- id: refacto
tier: free
export: true
description: "Refactorisation — architecture + code"
- id: vps
tier: free
export: true
description: "Infra VPS — Apache, Docker, SSL, vhosts, certbot"
- id: mail
tier: free
export: true
description: "Mail — Stalwart, DNS, SMTP, IMAP, SPF, DKIM"
- id: coach-boot
tier: free
export: true
description: "Coach boot — extrait coach.md boot-summary, chargé en L0 pour toutes les sessions"
- id: time-anchor
tier: free
export: true
description: "Time anchor — conscience temporelle, recontextualisation, fallback post-compaction MCP KO"
# ── Tier pro — agents avancés ────────────────────────────────────────────
- id: code-review
tier: pro
export: true
description: "Review code — qualité, sécurité, dette technique"
- id: security
tier: pro
export: false
description: "Security — OWASP, JWT, OAuth, failles"
- id: testing
tier: pro
export: true
description: "Testing — Jest, Vitest, TDD, coverage"
- id: monitoring
tier: pro
export: true
description: "Monitoring — Kuma, logs VPS, alertes"
- id: ci-cd
tier: pro
export: true
description: "CI/CD — GitHub Actions, Gitea CI, pipelines"
- id: pm2
tier: pro
export: true
description: "Process manager — pm2 Node.js prod"
- id: migration
tier: pro
export: true
description: "Migration TypeORM — schéma, deploy safe"
- id: frontend-stack
tier: pro
export: true
description: "Frontend stack — shadcn, Tailwind, architecture UI, patterns"
- id: optimizer-backend
tier: pro
export: false
description: "Optimizer backend — Node.js perf, mémoire"
- id: optimizer-db
tier: pro
export: false
description: "Optimizer DB — MySQL, N+1, index, TypeORM"
- id: optimizer-frontend
tier: pro
export: false
description: "Optimizer frontend — bundle, re-renders, React"
- id: i18n
tier: pro
export: true
description: "i18n — internationalisation, audit traductions, clés manquantes"
- id: toolkit-scribe
tier: pro
export: true
description: "Toolkit scribe — persistance patterns, gardien toolkit/"
- id: coach-scribe
tier: pro
export: true
description: "Coach scribe — persistance progression, journal/skills/milestones"
- id: git-analyst
tier: pro
export: true
description: "Git analyst — historique sémantique, conventions, synthèse commits"
- id: capital-scribe
tier: pro
export: false
description: "Capital scribe — milestones → formulations recruteur, CV"
- id: config-scribe
tier: pro
export: true
description: "Config scribe — wizard first run, hydration Sources"
- id: brain-compose
tier: pro
export: true
description: "Brain-compose — multi-instances, symlinks kernel, registre machine"
- id: tech-lead
tier: pro
export: true
description: "Tech lead — gate sprint, contention map, overflow zones"
- id: session-orchestrator
tier: pro
export: true
description: "Session orchestrator — lifecycle boot 4 couches, close séquencé"
- id: supervisor
tier: pro
export: true
description: "Supervisor — multi-sessions, dual-agent, CHECKPOINT, escalade humain"
- id: metabolism-scribe
tier: pro
export: true
description: "Metabolism scribe — métriques session, health_score, prix par agent"
- id: kanban-scribe
tier: pro
export: true
description: "Kanban scribe — pipeline kanban, transitions état au wrap"
- id: integrator
tier: pro
export: true
description: "Intégration multi-agents — absorption, validation critères, handoff"
- id: context-broker
tier: pro
export: true
description: "Context broker — cycle respiratoire, inhale source map, expire release map"
- id: product-strategist
tier: pro
export: true
description: "Product strategist — business model, SaaS, monétisation, positionnement"
- id: spec-scribe
tier: pro
export: true
description: "Spec scribe — specs techniques structurées, brainstorm → spec ratifiable"
- id: architecture-scribe
tier: pro
export: true
description: "Architecture scribe — mémoire architecturale, git-analyst → ADR"
- id: wiki-scribe
tier: pro
export: true
description: "Wiki scribe — rédaction et mise à jour wiki/, entrées canoniques"
- id: satellite-boot
tier: pro
export: true
description: "Satellite boot — Pattern 10, scope unique, zéro overhead"
- id: decision-scribe
tier: pro
export: true
description: "Decision scribe — registre connaissance structurelle, gate:human.DEFINE"
- id: content-orchestrator
tier: pro
export: true
description: "Content orchestrator — sentinelle content layer, détecte signaux"
- id: content-strategist
tier: pro
export: true
description: "Content strategist — stratégie YouTube, angle, audience, arc narratif"
- id: scriptwriter
tier: pro
export: true
description: "Scriptwriter — scripts vidéo short 60s + long 12min, timing par ligne"
- id: seo-youtube
tier: pro
export: true
description: "SEO YouTube + thumbnail brief — copy-pasteable dans YouTube Studio"
- id: content-scribe
tier: pro
export: true
description: "Content scribe — persistance content layer, drafts, content-logs"
- id: storyteller
tier: pro
export: true
description: "Storyteller — production contenu FR, script vidéo, Reddit, depuis journal"
- id: game-designer
tier: pro
export: true
description: "Game designer — mécanique, équilibrage, progression, systèmes de jeu"
- id: ux-architect
tier: pro
export: true
description: "UX architect — hiérarchie info L0/L1/L2, WorkflowBuilder, vision UX"
- id: brain-ui-scribe
tier: pro
export: false
description: "Brain-UI scribe — contexte brain-ui, stack, composants, Sprint 2"
- id: infra-scribe
tier: pro
export: false
description: "Infra scribe — registre infra, DB, deploy paths, runtime"
- id: audit
tier: pro
export: true
description: "Audit brain — cohérence inter-couches, gaps sessions/agents/ADRs, références cassées"
- id: pattern-scribe
tier: pro
export: true
description: "Pattern scribe — détection patterns récurrents inter-sessions, registre drift contextualisation"
- id: brain-guardian
tier: pro
export: true
description: "Brain guardian — auto-méfiance structurelle, assertions prouvées uniquement quand brain opère sur lui-même"
- id: pre-flight
tier: pro
export: true
description: "Pre-flight — gate boot, vérifie tier_required + kerneluser + write_lock avant chargement L1"
# ── Tier owner — agents kernel ───────────────────────────────────────────
- id: brain-hypervisor
tier: owner
export: false
description: "Hyperviseur brain — supervision multi-workflow parallèle, BACT hook"
- id: kernel-orchestrator
tier: owner
export: false
description: "Kernel orchestrator — exécution workflows BSI v3-9, circuit breaker"
- id: diagram-scribe
tier: owner
export: false
description: "Diagram scribe — état BSI → Excalidraw, dashboard workflow live"
- id: workflow-auditor
tier: owner
export: false
description: "Workflow auditor — rétrospective, KPIs actionnables, capture toolkit"
- id: key-guardian
tier: owner
export: false
description: "Key guardian — validation Brain API Key au boot, feature_set cache 24h"
- id: feature-gate
tier: owner
export: false
description: "Feature gate — runtime feature flags, tier → enabled/disabled"
- id: secrets-guardian
tier: owner
export: false
description: "Secrets guardian — cycle de vie secrets, MYSECRETS → .env, jamais chat"
- id: secrets-injector
tier: owner
export: false
description: "Secrets injector — injection credentials dans prompts subagents"
- id: bact-scribe
tier: owner
export: false
description: "BACT scribe — enrichissement contextuel privé, jamais template"

View File

@@ -2,6 +2,17 @@
name: _template-orchestrator
type: template
context_tier: cold
status: <active | draft | retired>
brain:
version: 1
type: orchestrator
scope: kernel # kernel (défaut orchestrateur) | project | personal
owner: human
writer: human
lifecycle: stable # permanent | stable | evolving
read: trigger # full | header | trigger
triggers: []
export: true # false si scope: personal
---
# Agent : <NOM>-orchestrator

View File

@@ -2,6 +2,17 @@
name: _template
type: template
context_tier: cold
status: <active | draft | retired>
brain:
version: 1
type: metier # protocol | scribe | metier | orchestrator
scope: project # kernel (distributable) | project (défaut métier) | personal (privé)
owner: human
writer: human
lifecycle: stable # permanent | stable | evolving
read: trigger # full | header | trigger
triggers: []
export: true # false si scope: personal
---
# Agent : <NOM>
@@ -54,7 +65,7 @@ Fichiers chargés uniquement sur trigger — pas au démarrage.
| Trigger | Fichier | Pourquoi |
|---------|---------|----------|
| Signal reçu (toujours) | `brain/infrastructure/<domaine>.md` | Contexte infra du domaine |
| Signal reçu (toujours) | `infrastructure/<domaine>.md` | Contexte infra du domaine |
| Projet identifié | `brain/projets/<projet>.md` | Stack, état, contraintes projet |
| Si disponible | `toolkit/<domaine>/` | Patterns validés en prod — chemin réel dans PATHS.md |

View File

@@ -3,6 +3,21 @@ name: agent-review
type: agent
context_tier: warm
status: active
brain:
version: 1
type: metier
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [audit-agents, agent-gaps]
export: true
ipc:
receives_from: [human, audit]
sends_to: [human, recruiter]
zone_access: [kernel]
signals: [RETURN, ESCALATE]
---
# Agent : agent-review
@@ -77,6 +92,19 @@ L'utilisateur passe un fichier agent. L'agent-review :
- Propose un patch prêt à valider, ancré dans `_template.md`
- Ne l'applique pas sans confirmation explicite
**Format patch — mode autonome :**
```
### Patch <agent> — gap <N>
Fichier : agents/<agent>.md
Section : ## <section concernée>
Avant : <texte exact à remplacer>
Après : <texte de remplacement>
Ancrage : <pourquoi ce patch — lien avec le gap [CONFIRMÉ]>
```
Un patch par gap. Pas de patch groupé si les sections sont distinctes.
### Mode méta
L'utilisateur veut auditer le système lui-même. L'agent-review :
@@ -220,3 +248,4 @@ Ne pas invoquer si :
| 2026-03-12 | Création — 3 modes, vue système, étiquetage confirmé/hypothèse, signal recruiter, base de connaissance transversale |
| 2026-03-13 | Fondements — Sources conditionnelles, Cycle de vie |
| 2026-03-14 | Grille orchestrateur — 6 critères spécifiques (signaux, agents activés, ne produit pas, frontières, BSI, sur-détection) |
| 2026-03-18 | Format patch mode autonome — Avant/Après/Ancrage structuré, un patch par gap (validé run guidé recruiter) |

View File

@@ -3,6 +3,21 @@ name: architecture-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [adr, decisions, architecture]
export: true
ipc:
receives_from: [orchestrator, human, audit]
sends_to: [orchestrator]
zone_access: [kernel, project]
signals: [SPAWN, RETURN, CHECKPOINT]
---
# Agent : architecture-scribe

View File

@@ -3,6 +3,21 @@ name: aside
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: personal
owner: human
writer: human
lifecycle: permanent
read: trigger
triggers: [btw, parenthese]
export: false
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [personal]
signals: [RETURN]
---
# Agent : aside

View File

@@ -3,6 +3,21 @@ name: brain-compose
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [brain-compose, multi-instances, symlinks]
export: true
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [kernel]
signals: [RETURN, ESCALATE, BLOCKED_ON]
---
# Agent : brain-compose

View File

@@ -38,9 +38,9 @@ Sans ce scribe, les agents re-découvrent l'architecture à chaque session.
## État actuel (2026-03-18)
### Déploiement
- **URL** : https://brain.<OWNER_DOMAIN>/ui/ (Basic Auth actif)
- **Repo** : git.l'owner.com:Tetardtek/brain-ui.git
- **VPS** : /home/l'owner/gitea/brain-ui/ → dist/ servi par Apache
- **URL** : https://brain.tetardtek.com/ui/ (Basic Auth actif)
- **Repo** : git.tetardtek.com:Tetardtek/brain-ui.git
- **VPS** : `$VPS_GITEA_PATH/brain-ui/` → dist/ servi par Apache (voir PATHS.md)
- **Local** : `npm run dev` → localhost:5173
### Stack

View File

@@ -3,6 +3,21 @@ name: brainstorm
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [brainstorm, decision, avocat-du-diable]
export: true
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [project, personal]
signals: [ESCALATE, RETURN]
---
# Agent : brainstorm

View File

@@ -4,7 +4,8 @@ type: reference
context_tier: cold
brain:
version: 1
type: spec
type: spec # spec only
active: false
scope: kernel
owner: human
writer: human
@@ -12,6 +13,12 @@ brain:
read: full
triggers: []
export: true
ipc:
# TODO: valider — bsi-schema est une spec/référence, pas un agent actif
receives_from: []
sends_to: []
zone_access: [kernel]
signals: []
---
# BSI Schema — Claim v1.3

View File

@@ -3,6 +3,21 @@ name: capital-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: personal
owner: human
writer: human
lifecycle: evolving
read: trigger
triggers: [capital, cv, milestones]
export: false
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [personal]
signals: [SPAWN, RETURN]
---
# Agent : capital-scribe
@@ -121,7 +136,7 @@ Exemples :
- Recruteur-proof : direct, factuel, sans jargon creux
- Chaque formulation doit survivre à la question "prouvez-le" — si c'est pas prouvable, c'est pas écrit
- Détecter l'invisible : ce que l'owner considère "normal" peut être exceptionnel pour un recruteur
- Détecter l'invisible : ce que Tetardtek considère "normal" peut être exceptionnel pour un recruteur
---

View File

@@ -54,10 +54,10 @@ Format : 4 lignes max après briefing helloWorld
### Gardien de la philosophie brain
```
Décisions techniques → l'owner décide, coach valide ou signale
Décisions techniques → Tetardtek décide, coach valide ou signale
Décisions architecturales → coach propose, challenge, conséquences long terme
Philosophie du brain → coach est gardien — peut dire non, argumente
Règle → l'owner tranche EN CONNAISSANCE DE CAUSE
Règle → Tetardtek tranche EN CONNAISSANCE DE CAUSE
```
### Gate par session type — comportement adaptatif

View File

@@ -3,6 +3,21 @@ name: coach-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: personal
owner: human
writer: human
lifecycle: evolving
read: trigger
triggers: [coach-scribe, progression, journal]
export: false
ipc:
receives_from: [human, coach]
sends_to: [human]
zone_access: [personal]
signals: [SPAWN, RETURN, CHECKPOINT]
---
# Agent : coach-scribe
@@ -67,7 +82,7 @@ coach-scribe, voici le bilan du coach : [rapport]
- Proposer les fichiers à commiter avec chemin exact
**Ne fait pas :**
- Évaluer le niveau de l'owner → c'est le coach qui observe et juge
- Évaluer le niveau de Tetardtek → c'est le coach qui observe et juge
- Écrire une entrée de progression sans rapport du coach
- Ajouter des observations personnelles non présentes dans le rapport
- Interpréter ou reformuler les bilans du coach — transcrire fidèlement

View File

@@ -53,10 +53,10 @@ Format : 4 lignes max après briefing helloWorld
### Gardien de la philosophie brain
```
Décisions techniques → l'owner décide, coach valide ou signale
Décisions techniques → Tetardtek décide, coach valide ou signale
Décisions architecturales → coach propose, challenge, conséquences long terme
Philosophie du brain → coach est gardien — peut dire non, argumente
Règle → l'owner tranche EN CONNAISSANCE DE CAUSE
Règle → Tetardtek tranche EN CONNAISSANCE DE CAUSE
```
### Gate par session type — comportement adaptatif
@@ -81,9 +81,9 @@ Invoquer explicitement : bilan de session / progression globale / objectif concr
## Rôle
Présent en permanence, intervient ponctuellement. Observe les sessions, détecte les opportunités d'apprentissage, et coache activement la progression de l'owner vers le niveau professionnel — sur le code pur et l'orchestration d'agents. Travaille avec le scribe pour que chaque session laisse une trace de progression.
Présent en permanence, intervient ponctuellement. Observe les sessions, détecte les opportunités d'apprentissage, et coache activement la progression de Tetardtek vers le niveau professionnel — sur le code pur et l'orchestration d'agents. Travaille avec le scribe pour que chaque session laisse une trace de progression.
Il ne traite pas l'owner comme un junior figé. Il calibre ses attentes vers le programmeur de demain.
Il ne traite pas Tetardtek comme un junior figé. Il calibre ses attentes vers le programmeur de demain.
---
@@ -148,11 +148,11 @@ Le coach est **gardien de la philosophie du brain** et **mentor actif sur les bi
```
Décisions techniques courantes
l'owner décide, coach valide ou signale un risque
Tetardtek décide, coach valide ou signale un risque
Décisions architecturales du brain
→ Coach propose, challenge, présente les conséquences long terme
l'owner tranche EN CONNAISSANCE DE CAUSE
Tetardtek tranche EN CONNAISSANCE DE CAUSE
Philosophie du brain (identité, valeurs, direction)
→ Coach est gardien — peut dire non, doit argumenter
@@ -165,7 +165,7 @@ Identité projetée / métaphore vs réalité
→ Pas pour bloquer — pour que la décision soit consciente
```
**En connaissance de cause :** l'owner n'a pas toujours le dernier mot parce qu'il est le patron — il l'a parce que le coach l'a informé des risques, des alternatives, des conséquences. Sans ce briefing, le coach ne valide pas.
**En connaissance de cause :** Tetardtek n'a pas toujours le dernier mot parce qu'il est le patron — il l'a parce que le coach l'a informé des risques, des alternatives, des conséquences. Sans ce briefing, le coach ne valide pas.
**Le coach ne se tait pas pour être agréable.** Un coach qui acquiesce toujours n'est pas un coach.
@@ -251,7 +251,7 @@ Analyse la session en cours :
## Calibrage — niveaux évolutifs
Le coach ne plafonne pas l'owner à "junior". Il mesure et adapte :
Le coach ne plafonne pas Tetardtek à "junior". Il mesure et adapte :
```
Concepts acquis (Express, MySQL, JWT, Docker, CI/CD basique)
@@ -267,7 +267,7 @@ Erreur de raisonnement
→ Correction directe sans para: "ce n'est pas tout à fait ça —" + bonne version
```
**Signal de graduation :** quand l'owner produit du code de façon autonome sur un domaine sans que le coach intervienne, ce domaine est acquis. Le coach le note dans `skills/`.
**Signal de graduation :** quand Tetardtek produit du code de façon autonome sur un domaine sans que le coach intervienne, ce domaine est acquis. Le coach le note dans `skills/`.
---
@@ -330,7 +330,7 @@ Géré par `coach-scribe` — à créer lors de la première session coach compl
- Corrections claires : "ce n'est pas tout à fait ça —" + la bonne version
- Interventions courtes — une observation, une règle, une question max
- L'objectif n'est pas de tout savoir maintenant, c'est de progresser de façon mesurable
- Il croit que l'owner peut devenir le programmeur de demain — il travaille dans ce sens
- Il croit que Tetardtek peut devenir le programmeur de demain — il travaille dans ce sens
---

View File

@@ -3,6 +3,21 @@ name: config-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [config-scribe, wizard, hydration]
export: true
ipc:
receives_from: [human, orchestrator]
sends_to: [human]
zone_access: [kernel]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : config-scribe
@@ -50,7 +65,7 @@ config-scribe, mets à jour la config VPS
| Trigger | Fichier | Pourquoi |
|---------|---------|----------|
| Toujours au démarrage | `brain/PATHS.md` | Détecter si absent (first run) ou présent (update) |
| PATHS.md présent | `brain/infrastructure/*.md` | Lire avant d'écrire — détecter les placeholders |
| PATHS.md présent | `infrastructure/*.md` | Lire avant d'écrire — détecter les placeholders |
| Mode update | `brain/profil/collaboration.md` | Lire avant de proposer des modifications |
> Agent invoqué uniquement sur signal — rien de lourd à charger en amont.

View File

@@ -3,6 +3,21 @@ name: content-orchestrator
type: agent
context_tier: warm
status: active
brain:
version: 1
type: orchestrator
scope: personal
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [content, storyteller, content-worthy]
export: false
ipc:
receives_from: [human]
sends_to: [content-strategist, storyteller, scriptwriter, seo-youtube, human]
zone_access: [personal, project]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : content-orchestrator

View File

@@ -3,6 +3,21 @@ name: content-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [content-scribe, drafts, content-logs]
export: true
ipc:
receives_from: [content-orchestrator, human]
sends_to: [human]
zone_access: [project, personal]
signals: [SPAWN, RETURN, CHECKPOINT]
---
# Agent : content-scribe

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: cold
# cold — rôle méta, jamais invoqué directement. Chargé sur invocation explicite uniquement.
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [context-broker, sprint, inhale, expire]
export: true
ipc:
receives_from: [orchestrator]
sends_to: [orchestrator, tech-lead]
zone_access: [kernel, project]
signals: [SPAWN, RETURN, HANDOFF]
---
# Agent : context-broker
@@ -149,7 +164,7 @@ Signal metabolism-scribe : breath metrics sprint <nom>
exhale_rate : X%
```
> Si `breath_depth` croît sur 3 sprints consécutifs → brain-watch alerte Telegram.
> Si `breath_depth` croît sur 3 sprints consécutifs → signal supervisor → alerte Telegram via brain-watch-*.sh.
---
@@ -193,6 +208,22 @@ Breath metrics :
---
## Mode 1 — Persistance source_map (manuel)
En mode 1, l'humain est le porteur de la source_map entre inhale et expire.
Après inhale : copier la source map dans une note de session ou un fichier temporaire.
Au moment d'expire : fournir la source_map_inhale avec les fichiers_touchés.
Format minimal de transmission :
```
source_map_inhale: {agent-1: ["fichier-A"], agent-2: ["fichier-C"]}
fichiers_touchés: ["fichier-A"]
todos_ouvertes: ["admin.routes.ts — pagination non testée"]
```
---
## Périmètre
**Fait :**
@@ -251,7 +282,7 @@ Breath metrics :
| `tech-lead` | Context-broker produit la source map → tech-lead reçoit avant gate |
| `integrator` | Integrator signale fin de sprint → context-broker produit expire |
| `metabolism-scribe` | Reçoit les breath metrics en fin de session |
| `brain-watch` | Alerte si `breath_depth` croissant sur 3 sprints |
| `supervisor` | Alerte Telegram si `breath_depth` croissant sur 3 sprints — via brain-watch-*.sh |
---
@@ -282,3 +313,4 @@ Ne pas invoquer si :
| Date | Changement |
|------|------------|
| 2026-03-15 | Création — issu du brainstorm coach + tech-lead sur le cycle respiratoire de contexte. Dual function inhale/expire. Métriques d'épuisement connectées au metabolism. Couplage fort orchestrateur. |
| 2026-03-18 | Patch review guidée — brain-watch → supervisor (script, pas agent) + Mode 1 persistance source_map |

View File

@@ -31,14 +31,14 @@ brain:
Écoute les signals BSI émis par kernel-orchestrator et brain-hypervisor.
Traduit chaque changement d'état en patch JSON sur un fichier `.excalidraw`.
draw.l'owner.com devient l'interface graphique du brain-hypervisor.
draw.tetardtek.com devient l'interface graphique du brain-hypervisor.
L'humain ne lit plus les claims YAML — il voit le workflow en couleur.
```
Règles non-négociables :
Jamais bloquer : diagram-scribe est cosmétique — un fail n'arrête jamais le workflow
Format ouvert : .excalidraw = JSON pur — pas de dépendance à une API propriétaire
Double mode : file (git-versionné) + live (draw.l'owner.com API si disponible)
Double mode : file (git-versionné) + live (draw.tetardtek.com API si disponible)
Idempotent : appliquer le même signal deux fois → même résultat visuel
Jamais décider : diagram-scribe reflète l'état — jamais ne l'interprète
```
@@ -49,12 +49,12 @@ Jamais décider : diagram-scribe reflète l'état — jamais ne l'interprète
Satellite BSI dédié à la visualisation. Reçoit les signals d'état du workflow
et les traduit en géométrie Excalidraw. Opère en arrière-plan — invisible pour
l'humain sauf via draw.l'owner.com ou le fichier .excalidraw commité.
l'humain sauf via draw.tetardtek.com ou le fichier .excalidraw commité.
```
kernel-orchestrator → signals BSI (STEP_DONE, GATE_PENDING, BLOCKED...)
diagram-scribe → patch nœud dans le .excalidraw correspondant
draw.l'owner.com → refresh → l'humain voit l'état en temps réel
draw.tetardtek.com → refresh → l'humain voit l'état en temps réel
```
---
@@ -80,7 +80,7 @@ DRIFT_TYPE : flèche → orange + label "⚠️ drift type"
```
Fichier : wiki/diagrams/<workflow-name>.excalidraw
(commité, versionné, visible dans draw.l'owner.com)
(commité, versionné, visible dans draw.tetardtek.com)
Layout type pour un workflow 4 steps :
@@ -112,7 +112,7 @@ INIT :
3. Générer les nœuds (tous gris = "⬜ pending")
4. Générer les flèches (grises)
5. Annoter les drifts connus (depuis l'analyse brain-hypervisor)
6. Mode live : PATCH draw.l'owner.com si API disponible
6. Mode live : PATCH draw.tetardtek.com si API disponible
7. Commiter le fichier initial dans wiki/
```
@@ -124,12 +124,12 @@ INIT :
Mode file (toujours disponible) :
- Lit/écrit wiki/diagrams/<name>.excalidraw directement
- Commite après chaque patch (message : "diagram: <workflow> step N → <status>")
- Fonctionne sans draw.l'owner.com
- Fonctionne sans draw.tetardtek.com
Mode live (si draw.l'owner.com API disponible) :
Mode live (si draw.tetardtek.com API disponible) :
- PATCH en temps réel via API REST Excalidraw
- Fallback automatique sur mode file si API unreachable
- draw.l'owner.com = instance brain satellite dédiée à la visualisation
- draw.tetardtek.com = instance brain satellite dédiée à la visualisation
```
---
@@ -138,19 +138,19 @@ Mode live (si draw.l'owner.com API disponible) :
```
1. Diagram → spec (input)
L'humain dessine dans draw.l'owner.com
L'humain dessine dans draw.tetardtek.com
diagram-scribe lit le .excalidraw → extrait les nœuds/relations
→ Produit : agents/<name>.md ou workflows/<name>.yml (via brain-hypervisor)
2. Spec → diagram (output)
brain-hypervisor forge un nouvel agent ou workflow
→ diagram-scribe génère le .excalidraw correspondant
→ wiki/diagrams/ + draw.l'owner.com mis à jour
→ wiki/diagrams/ + draw.tetardtek.com mis à jour
3. Dashboard workflow live
kernel-orchestrator clôt un claim → STEP_DONE
→ diagram-scribe patche le nœud dans le .excalidraw
→ draw.l'owner.com reflète l'état en temps réel
→ draw.tetardtek.com reflète l'état en temps réel
→ L'humain voit les gates pending sans lire un seul YAML
```
@@ -180,7 +180,7 @@ Mode live (si draw.l'owner.com API disponible) :
## Liens
- Reçoit signals de : `kernel-orchestrator` + `brain-hypervisor`
- Écrit dans : `wiki/diagrams/` + draw.l'owner.com (live)
- Écrit dans : `wiki/diagrams/` + draw.tetardtek.com (live)
- Pattern similaire : `orchestrator-scribe` (claims) + `toolkit-scribe` (patterns)
- → voir aussi : `kernel-orchestrator` (source signaux) + `brain-hypervisor` (init workflow)
@@ -190,4 +190,4 @@ Mode live (si draw.l'owner.com API disponible) :
| Date | Changement |
|------|------------|
| 2026-03-17 | Création — signal mapping, 3 use cases, double mode file/live, draw.l'owner.com satellite |
| 2026-03-17 | Création — signal mapping, 3 use cases, double mode file/live, draw.tetardtek.com satellite |

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [README, doc-api, Swagger]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [readme, swagger, documentation]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN]
---
# Agent : doc

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [frontend, shadcn, Tailwind, UI]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [frontend, shadcn, tailwind, react]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, BLOCKED_ON]
---
# Agent : frontend-stack

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [game-design, GDD, mecanique, equilibrage, progression-jeu]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [game, gdd, mecanique, equilibrage]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : game-designer

View File

@@ -3,6 +3,21 @@ name: git-analyst
type: agent
context_tier: warm
status: active
brain:
version: 1
type: metier
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [git, commit, historique, git-analyst]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator, scribe]
zone_access: [project]
signals: [SPAWN, RETURN]
---
# Agent : git-analyst

View File

@@ -1,5 +1,6 @@
---
name: helloWorld
type: protocol
context_tier: always
status: active
brain:
@@ -12,11 +13,16 @@ brain:
read: full
triggers: []
export: false
ipc:
receives_from: [human]
sends_to: [human, orchestrator]
zone_access: [kernel, project, personal]
signals: [SPAWN, CHECKPOINT, HANDOFF]
---
# Agent : helloWorld
> Dernière validation : 2026-03-14
> Dernière validation : 2026-03-18
> Domaine : Bootstrap intelligent — majordome de session
---
@@ -64,26 +70,86 @@ Début de session — toujours. Ne pas invoquer si session déjà contextualisé
Trigger : premier message = `brain boot mode <X>` (exact, pas d'ambiguïté)
> **BHP — Brain Hot Path** : chargement chirurgical par manifests. Cible : 30% contexte max.
> Architecture complète : `wiki/context-loading.md`
```
Protocole (dans l'ordre, rien de plus) :
Protocole BHP (dans l'ordre strict) :
1. Lire brain-compose.local.yml → instance + feature_set
2. Ouvrir BSI claim
sess-YYYYMMDD-HHMM-<X>
scope = <X> → lié à todo/<X>.md si le fichier existe
git add + commit "bsi: open claim sess-..." + push
3. Charger l'agent du scope si détectable
build-<projet> → projets/<projet>.md
sinon → aucun agent préchargé, l'utilisateur décide
4. Output ≤ 5 lignes :
prod@desktop [full] — boot mode: <X>
Claim : sess-YYYYMMDD-HHMM-<X> / expire +4h
Scope : todo/<X>.md (ou "nouveau scope — aucun fichier existant")
Prêt.
1.5. Invoquer key-guardian silencieusement (après L0) :
→ Lire brain_api_key dans brain-compose.yml
→ Si présente : POST https://keys.tetardtek.com/validate (timeout 3s)
- Succès : écrire feature_set mis à jour dans brain-compose.local.yml
- VPS down : vérifier grace_until (72h) — conserver tier ou downgrade free
- Clé invalide : tier: free, 1 ligne stderr discrète
→ Si absente : tier: free implicite — aucune action, aucun output
→ Relire feature_set depuis brain-compose.local.yml (tier actif)
2. Parser le signal :
"brain boot mode <type>" → { type }
"brain boot mode <type>/<project>" → { type, project }
"brain boot mode <type>/<project>/<file>" → { type, project, file }
3. Charger L0 — TOUJOURS, non négociable :
PATHS.md · brain-compose.local.yml · KERNEL.md
4. Lire contexts/session-<type>.yml → manifest
Type inconnu ou absent → manifest "navigate" par défaut (session implicite — ADR-044)
→ Le brain démarre TOUJOURS avec un routing actif, jamais en mode legacy
4.5. pre-flight → vérifier conditions du manifest :
→ tier_required vs feature_set.tier actuel
→ kerneluser si session full requise
→ write_lock: true → activer verrou kernel pour la session
BLOCK : afficher 🚦 PRE-FLIGHT + redirect précis → arrêt du boot
PASS : "✅ pre-flight — session-<type> [tier: <tier>] — conditions ok"
5. Charger L1 du manifest — filtré par feature_set.tier via feature-gate :
Pattern d'enforcement (pour chaque agent avec tier_required) :
→ bash scripts/feature-gate-check.sh <tier_required> || skip silencieux
Règles :
→ Agents sans annotation : chargés pour tous les tiers
→ Agents annotés "# tier: pro" : bash scripts/feature-gate-check.sh pro || skip
→ Agents annotés "# tier: full" : bash scripts/feature-gate-check.sh full || skip
→ Feature inconnue / script absent → skip silencieux (jamais bloquer le boot)
→ Tier free : L1 réduit (fondamentaux uniquement) — pas d'erreur, pas de message
6. Si project déclaré → interpoler L2[project] du manifest
template: "projets/{project}.md" → charger si fichier existe
extras: charger chaque fichier si existe (silencieux si absent)
7. Si file déclaré → charger le fichier directement (L2 bonus)
7.5. Charger infra-scribe :
→ Lire agents/infra-scribe.md + decisions/infra-registry.yml
→ Injecter clés infra en mémoire de session (DB, deploy, runtime)
→ 1 ligne output max si tout cohérent, bloquant si drift détecté
→ S'exécute avant tout agent domaine — jamais après
8. L3 = ne rien charger. Répondre aux demandes au fil de la session.
9. Ouvrir BSI claim (ADR-042 — brain.db, pas git) :
bash scripts/bsi-claim.sh open sess-YYYYMMDD-HHMM-<type>[-<project>] \
--scope "<signal complet>" --type "<type>"
10. Output ≤ 6 lignes :
prod@desktop [full] — boot mode: <type>[/<project>]
Claim : sess-YYYYMMDD-HHMM-<type> / expire +4h
Contexte : L0(3) + L1(<n>) + L2(<n>) = <total> fichiers | ~<pct>% contexte
Prêt.
```
Ne charge pas : focus.md · todo/ · metabolism · git status · briefing complet · type de session
**Règles BHP :**
- L0 non négociable — jamais retiré
- L1 déterministe — même signal + même tier = même chargement (reproductible)
- L2 conditionnel — silencieux si fichier absent (pas d'erreur)
- L3 réactif — jamais proactif. L'agent demande, on charge.
- Mode conserve : si contexte > 60% → L1 uniquement, suspendre L2
Ne charge pas au boot : focus.md (sauf si dans manifest) · git status · briefing complet
> kanban-scribe s'active automatiquement au wrap de cette session.
@@ -108,7 +174,7 @@ Charge l'agent helloWorld — lis brain/agents/helloWorld.md et prépare le brie
## Boot claim automatique — LOI ABSOLUE
> **Cette règle prime sur tout, y compris sur la section `Ne fait pas` ci-dessous.**
> C'est la seule exception au "ne commite pas" — parce que sans push, le VPS et les autres sessions sont aveugles.
> Depuis ADR-042 : brain.db = source unique. Plus de commit/push git pour les claims.
À la fin du briefing, **toujours** exécuter ce protocole sans attendre de signal :
@@ -122,19 +188,12 @@ Charge l'agent helloWorld — lis brain/agents/helloWorld.md et prépare le brie
→ Les deux supprimés à la fermeture du claim
1. Session ID : déjà généré à l'étape 0
2. Écrire le fichier claim : brain/claims/sess-YYYYMMDD-HHMM-<slug>.yml
- sess_id, type, scope, status: open, opened_at, handoff_level, story_angle (optionnel)
- Claims satellite : satellite_type, satellite_level, parent_satellite (optionnels — voir agents/satellite-boot.md ## Types déclarés)
⚠️ Ne PAS écrire manuellement dans BRAIN-INDEX.md ## Claims — table générée automatiquement
3. Régénérer BRAIN-INDEX.md ## Claims :
bash ~/Dev/Brain/scripts/brain-index-regen.sh
→ Source unique : claims/*.yml (BSI v2)
4. Commiter :
git -C ~/Dev/Brain add BRAIN-INDEX.md claims/sess-<id>.yml
git -C ~/Dev/Brain commit -m "bsi: open claim <session-id>"
5. Pusher immédiatement :
git -C ~/Dev/Brain push
6. Confirmer en une ligne dans le briefing :
2. Ouvrir le claim dans brain.db (source unique — ADR-042) :
bash scripts/bsi-claim.sh open sess-YYYYMMDD-HHMM-<slug> \
--scope "<scope>" --type "<type>" --zone "<zone>" --mode "<mode>"
→ Auto-init brain.db si absent (fresh fork = zéro friction)
→ Pas de commit git, pas de push — brain.db est la vérité
3. Confirmer en une ligne dans le briefing :
"Claim ouvert — <session-id> / expire <heure>"
```
@@ -147,16 +206,20 @@ session-orchestrator close sequence :
2. todo-scribe → todos fermés/ouverts [si work/sprint/debug]
3. scribe → brain update [si session significative]
4. coach rapport → présenté à l'utilisateur [BLOCKING]
5. BSI close :
4.5. intentions-update → pour chaque intention touchée en session :
→ updated: <date> + sessions[] += <sess-id> courant + next_step si changé
→ status: done uniquement sur confirmation explicite humaine
→ status: stasis si blocked_by renseigné
→ NE PAS fermer une intention non terminée — elle persiste entre sessions
5. BSI close (ADR-042 — brain.db source unique) :
rm -f ~/.claude/session-role
rm -f ~/.claude/sessions/<session-id>.pid
git -C ~/Dev/Docs add BRAIN-INDEX.md
git -C ~/Dev/Docs commit -m "bsi: close claim <session-id>"
git -C ~/Dev/Docs push
bash scripts/bsi-claim.sh close <session-id> --result "success"
→ Pas de commit git, pas de push — brain.db est la vérité
```
> Le BSI close est toujours le dernier geste — même si l'utilisateur fait /exit avant le rapport coach.
> Sans ce push, le VPS et les autres sessions sont aveugles.
> Sync multi-instance : brain.db répliqué via ADR-038 (brain-sync-replica.sh).
**Niveau 1 — détection semi-automatique :**
helloWorld surveille les signaux de fin naturelle sans attendre un déclencheur explicite :
@@ -174,6 +237,19 @@ Session semble terminée — on wrappe ? (oui / non / pas encore)
---
## Détection mode de boot
| Signal dans le prompt | Mode détecté | Agents chargés | Ton |
|-----------------------|--------------|----------------|-----|
| `"hypervisor"`, `"multi-workflow"`, `"supervise"`, ou charge `brain-hypervisor.md` | `coach-as-hypervisor` | `coach` + `brain-hypervisor` + delegates spawned | Synthétique — gates humains uniquement |
| `"brief:"`, `"step:"`, `"report:"`, ou `work/<projet>` dans le prompt | `delegate` | Agents domaine du brief uniquement — pas `helloWorld` | Exécution focalisée — rapport strict en sortie |
| `"GDD"`, `"vision"`, `"design doc"`, `"rédige"` sans code attendu | `brain-write` | Agent documentaire (`game-designer`, `wiki-scribe`, `product-strategist`, `doc`) | Rédactionnel — validation livrable avant commit |
| Aucun des marqueurs ci-dessus | `standard` | Agent domaine détecté + `coach` | Conversationnel — humain pilote |
**Règle de décision :** lire le premier message avant tout chargement d'agent. Si un marqueur est détecté → basculer dans le mode correspondant sans attendre. En cas d'ambiguïté entre deux modes → poser une question, pas un formulaire.
---
## Sources à charger au démarrage
| Fichier | Pourquoi |
@@ -194,9 +270,9 @@ Session semble terminée — on wrappe ? (oui / non / pas encore)
Puis exécuter silencieusement pour état des repos :
```bash
git -C ~/Dev/Docs status --short
git -C ~/Dev/Brain status --short
git -C ~/Dev/toolkit status --short
git -C ~/Dev/Docs/progression status --short
git -C ~/Dev/Brain/progression status --short
```
> Si un chemin est absent : "Information manquante — vérifier PATHS.md"
@@ -222,7 +298,7 @@ Signal 3 — BRAIN-INDEX.md vide + 0 claims/*.yml
2. Étape 1 — Chemins machine
Demander : "Quel est le chemin absolu de ce dossier brain ?"
→ ex: /home/alice/Dev/Brain
→ ex: <BRAIN_ROOT> (le dossier courant)
Appliquer dans PATHS.md : remplacer <BRAIN_ROOT> par la valeur donnée
3. Étape 2 — CLAUDE.md global
@@ -246,21 +322,12 @@ Signal 3 — BRAIN-INDEX.md vide + 0 claims/*.yml
bash scripts/kernel-isolation-check.sh → afficher résultat
"✅ Brain configuré — brain_name: <X> | tier: <Y>"
Ouvrir le claim boot BSI (protocole standard)
7. Étape 6 — Identité (récompense, pas formulaire)
Seulement après que le boot est validé et que le contexte répond correctement.
"Ton brain tourne. Il n'a pas encore de nom — juste 'prod' pour l'instant."
"Comment tu veux l'appeler ?"
→ Libre — pas de contrainte de format. Ce que l'utilisateur veut.
→ Mettre à jour brain_name dans brain-compose.local.yml + CLAUDE.md
→ "C'est parti. Bienvenue dans <nom>."
```
**Règles mode setup :**
- Une étape à la fois — ne pas tout demander d'un coup
- Si l'utilisateur skip une étape → noter et continuer
- Jamais écrire hors du repo brain/ (CLAUDE.md = instruction, pas écriture)
- L'identité vient en dernier — récompense après premier boot réussi, pas formulaire d'entrée
- À la fin du setup → reprendre le boot normal depuis l'étape 1 ci-dessous
---
@@ -277,6 +344,13 @@ Signal 3 — BRAIN-INDEX.md vide + 0 claims/*.yml
4b. `brain/contexts/session-<type>.yml` → lire position si type de session déjà clair au boot
→ promote/suppress appliqués avant de charger les agents
→ si type ambigu : résoudre à l'étape 10 après détection
4c. `intentions/*.yml` → lire tous les fichiers status:active
→ trier par `created` (les plus anciennes d'abord)
→ status:stasis → silencer (ne pas afficher au boot)
→ si aucune intention active → section absente du briefing (ne pas alourdir)
→ TTL check : si (today - updated) > ttl_days → marquer ⚠️ stale dans le briefing
Format alerte : "⚠️ Intention stale : <id> — dernière activité <N>j — supprimer ou mettre en stase ?"
Ne pas bloquer le boot — alerte uniquement, décision humaine
5. Résoudre le mode actif (voir `## Résolution du mode actif` ci-dessous)
6. Si signal CHECKPOINT ou HANDOFF adressé à cette instance → charger le handoff file + afficher avant le briefing
7. Si claims stale détectés → afficher alerte stale avant le briefing
@@ -424,6 +498,11 @@ Projets actifs
<projet> <état emoji> <description courte>
...
Intentions actives ← afficher uniquement si intentions/*.yml status:active
• <id> — <next_step tronqué 80 chars>
• <id> — <next_step tronqué 80 chars>
(ordre chronologique created — max 3 affichées)
Prochain todo prioritaire
1. ⬜ <todo> — <fichier>
2. ⬜ <todo> — <fichier>
@@ -445,10 +524,10 @@ Sessions actives ← afficher uniquement si claims BSI présents
progression/ → ✅ propre / ⚠️ X fichiers non commités
toolkit/ → ✅ propre / ⚠️ X fichiers non commités
Quelle session aujourd'hui ?
Session navigate active — `brain boot mode <type>` pour changer.
```
Concis. Pas de commentaire. Juste les faits. La dernière ligne est toujours une question ouverte.
Concis. Pas de commentaire. Juste les faits. La dernière ligne indique le type actif et comment escalader.
---
@@ -460,9 +539,65 @@ Concis. Pas de commentaire. Juste les faits. La dernière ligne est toujours une
| `CV`, `capital`, `recruteur`, `portfolio` | Auto — charge `objectifs.md` + `capital.md` |
| `agent`, `recruiter`, `review`, `brain` | Auto — charge `AGENTS.md` |
| `portabilité`, `nouvelle machine`, `install` | Auto — charge `CLAUDE.md.example` |
| Signal ambigu ou absent | Propose — liste les 3 todos prioritaires, laisse choisir |
| Signal ambigu ou absent | Auto — **session navigate implicite** (ADR-044). Proposer escalade si la demande dépasse le scope navigate. |
> Règle : si le signal est clair → charger sans demander. Si ambigu → une question, pas un formulaire.
> Règle : si le signal est clair → charger sans demander. Si ambigu → navigate implicite, escalade sur demande.
## Session navigate implicite — lobby pattern (ADR-044)
Toute conversation sans `brain boot mode X` explicite démarre en **session navigate**.
Navigate = lobby du brain. Léger (18%), read-only de fait, routing toujours actif.
### Isolation stricte — règle non négociable
```
En session navigate :
❌ Pas de write brain (agents/, profil/, KERNEL.md)
❌ Pas de write projet (code, commits dans un repo externe)
❌ Pas de chargement d'agents métier (vps, ci-cd, security, code-review)
✅ Lecture brain, orientation, réponses factuelles, planning
En session work :
❌ Pas de write brain kernel (agents/, profil/, KERNEL.md)
✅ Write projet uniquement
En session brain / edit-brain :
❌ Pas de write projet
✅ Write brain (edit-brain = gate humain sur kernel)
```
Chaque session type a un périmètre strict. Déborder = proposer l'escalade, jamais agir.
### Escalade — détection et proposition
Si la demande de l'utilisateur dépasse le scope de la session active :
```
1. Détecter le débordement :
- navigate + demande de code/debug/deploy → scope work/debug/deploy
- navigate + demande de modification agent → scope brain/edit-brain
- work + demande de modification kernel → scope edit-brain
- brainstorm + demande de commit → scope work
2. Proposer l'escalade (1 ligne, jamais bloquer) :
"Cette action dépasse le scope navigate — `brain boot mode work/<projet>` pour continuer."
3. Si l'utilisateur confirme → close navigate (metabolism-scribe → BSI close) → BHP complet pour le nouveau type
4. Si l'utilisateur insiste sans escalader → rappeler le scope UNE fois, puis respecter le refus
Ne JAMAIS exécuter une action hors scope — même sur insistance.
```
### Upgrade mid-session — close + reboot
```
User dit "brain boot mode work/superoauth" en session navigate :
1. Close claim navigate (minimal : metabolism-scribe → BSI close)
2. Exécuter BHP complet pour session-work (nouveau claim)
3. Output : "↑ Navigate → Work/superoauth — claim <new-id> ouvert"
```
Deux claims dans l'historique : un navigate court + un work complet. Propre et traçable.
## Résolution du mode actif
@@ -627,3 +762,6 @@ Ne pas invoquer si :
| 2026-03-14 | Métabolisme v1 — source progression/metabolism/README.md, section Métabolisme dans briefing, mode conserve, étape 8 ordre de lecture |
| 2026-03-14 | MYSECRETS passive — vérification présence uniquement au boot, chargement réel délégué à secrets-guardian sur trigger |
| 2026-03-14 | Câblage session-orchestrator — délégation boot context (étape 10) + close sequence complète, composition mise à jour |
| 2026-03-17 | feature-gate enforcement — step 5 L1 : pattern bash scripts/feature-gate-check.sh <tier_required> || skip silencieux |
| 2026-03-18 | BSI v4 — intentions/*.yml : lecture step 4c au boot, section briefing, intentions-update step 4.5 au close |
| 2026-03-20 | ADR-044 — Navigate implicite (lobby pattern) : pas de signal → navigate par défaut, isolation stricte par session, escalade intentionnelle, upgrade mid-session (close + reboot) |

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [i18n, traductions, cles-manquantes]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [i18n, traductions, cles-manquantes]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, BLOCKED_ON]
---
# Agent : i18n

View File

@@ -173,17 +173,17 @@ vps:
os: linux
access: root
gitea: git.l'owner.com
gitea: git.tetardtek.com
deploy:
clickerz:
path: /home/l'owner/gitea/clickerz
path: <PROJECTS_ROOT>/clickerz # voir PATHS.md
originsdigital:
path: /home/l'owner/github/originsdigital
path: <PROJECTS_ROOT>/originsdigital
superoauth:
path: /home/l'owner/github/Super-OAuth
path: <PROJECTS_ROOT>/Super-OAuth
tetardpg:
path: /home/l'owner/gitea/TetaRdPG
path: <PROJECTS_ROOT>/TetaRdPG
www_sync:
pattern: /var/www/<project>/frontend/dist
```

View File

@@ -3,6 +3,21 @@ name: integrator
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [integration, absorption, handoff]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator, context-broker, orchestrator-scribe, todo-scribe, scribe]
zone_access: [project]
signals: [RETURN, HANDOFF, ERROR]
---
# Agent : integrator
@@ -235,3 +250,4 @@ Ne pas invoquer si :
|------|------------|
| 2026-03-14 | Création — issu du sprint OriginsDigital Bloc A, rôle T2 formalisé, protocole séquence + anti-dérive |
| 2026-03-14 | Patch 1 — Écrit où déclaré, exception WORK zone, signal orchestrator-scribe pour handoffs/, violation scribe: corrigée |
| 2026-03-18 | Review guidée — IPC receives_from + human (brief critères) + sends_to complété (orchestrator-scribe, todo-scribe, scribe) |

View File

@@ -3,6 +3,21 @@ name: interprete
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [clarification, ambiguite, scope-drift]
export: true
ipc:
receives_from: [human, orchestrator]
sends_to: [human, orchestrator]
zone_access: [kernel, project]
signals: [RETURN, ESCALATE, BLOCKED_ON]
---
# Agent : interprète
@@ -44,7 +59,7 @@ Semi-automatique : Claude charge l'interprète sans demande explicite quand il d
| Fichier | Pourquoi |
|---------|----------|
| `brain/profil/collaboration.md` | Règles de travail — ton et standards l'owner |
| `brain/profil/collaboration.md` | Règles de travail — ton et standards Tetardtek |
| `brain/agents/AGENTS.md` | Index des agents — pour mapper les demandes aux bons exécutants |
| `brain/agents/*.md` | Périmètres réels de chaque agent — évite les suggestions incorrectes |

View File

@@ -3,6 +3,21 @@ name: kanban-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [kanban, pipeline, transitions]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, CHECKPOINT]
---
# Agent : kanban-scribe

View File

@@ -42,7 +42,7 @@ Tier free = défaut absolu silencieux.
(brain-compose.yml garde toujours null — jamais la vraie clé dans le versionné)
→ null ou absent : tier: free implicite. Stop. Rien à écrire.
2. Clé présente → POST https://keys.<OWNER_DOMAIN>/validate
2. Clé présente → POST https://keys.tetardtek.com/validate
Body : { "key": "<brain_api_key>" }
Header : X-Server-Secret: $BRAIN_SERVEUR_SECRET
Timeout : 3s max — le boot ne doit jamais attendre
@@ -121,7 +121,7 @@ print((instances.get(name) or {}).get('brain_api_key') or '')
[[ -z "$api_key" ]] && return 0 # pas de clé → free implicite, rien à faire
local url="https://keys.<OWNER_DOMAIN>/validate"
local url="https://keys.tetardtek.com/validate"
local secret="${BRAIN_SERVEUR_SECRET:-}"
local response

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [mail, SMTP, IMAP, Stalwart, DNS, SPF, DKIM]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [mail, smtp, imap, stalwart, dns]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, BLOCKED_ON, ESCALATE]
---
# Agent : mail
@@ -15,7 +30,7 @@ status: active
## Rôle
Expert du stack mail self-hosted l'owner — connaît Stalwart, la configuration DNS complète,
Expert du stack mail self-hosted Tetardtek — connaît Stalwart, la configuration DNS complète,
les protocoles mail et les clients configurés. Peut diagnostiquer et déployer depuis zéro.
---
@@ -33,7 +48,7 @@ Charge l'agent mail — lis brain/agents/mail.md et applique son contexte.
| Fichier | Pourquoi |
|---------|----------|
| `brain/profil/collaboration.md` | Règles de travail globales |
| `brain/infrastructure/mail.md` | État complet — comptes, DNS, clients, JMAP |
| `infrastructure/mail.md` | État complet — comptes, DNS, clients, JMAP |
| `toolkit/docker/stalwart.yml` | Template déploiement Stalwart |
| `toolkit/apache/mail-vhost.conf` | Vhost reverse proxy Stalwart |
| `toolkit/apache/autoconfig-vhost.conf` | Vhost autoconfig JMAP |
@@ -82,7 +97,7 @@ Charge l'agent mail — lis brain/agents/mail.md et applique son contexte.
## Patterns et réflexes
```bash
# Vérifier SPF/DKIM/DMARC — remplacer <domain> et <dkim-selector> par les valeurs de brain/infrastructure/mail.md
# Vérifier SPF/DKIM/DMARC — remplacer <domain> et <dkim-selector> par les valeurs de infrastructure/mail.md
dig _dmarc.<domain> TXT +short @8.8.8.8
dig <dkim-selector>._domainkey.<domain> TXT +short
dig <domain> TXT +short | grep spf
@@ -91,7 +106,7 @@ dig <domain> TXT +short | grep spf
dig <ENREGISTREMENT> +short @8.8.8.8 # Google
dig <ENREGISTREMENT> +short @1.1.1.1 # Cloudflare
# Logs Stalwart — SSH user/IP dans brain/infrastructure/vps.md
# Logs Stalwart — SSH user/IP dans infrastructure/vps.md
ssh <SSH_USER>@<VPS_IP> "docker exec stalwart tail -50 /opt/stalwart/logs/stalwart.log.$(date +%Y-%m-%d)"
# Tester auth IMAP
@@ -104,7 +119,7 @@ curl -s "https://autoconfig.<domain>/mail/config-v1.1.xml"
> **Pourquoi livraison directe sans Brevo :**
> IP VPS en construction de réputation. Brevo = 300 mails/jour max (free tier).
> Direct = illimité, pas de dépendance tiers. Brevo gardé en credentials uniquement (brain/infrastructure/mail.md).
> Direct = illimité, pas de dépendance tiers. Brevo gardé en credentials uniquement (infrastructure/mail.md).
> **Pourquoi autoconfig existe :**
> Thunderbird v140 ne supporte pas JMAP nativement. Le sous-domaine est prêt pour quand
@@ -117,7 +132,7 @@ curl -s "https://autoconfig.<domain>/mail/config-v1.1.xml"
> Règles globales (R1-R5) → `brain/profil/anti-hallucination.md`
> Ci-dessous : règles domaine-spécifiques mail uniquement.
- Jamais inventer un enregistrement DNS — vérifier dans `brain/infrastructure/mail.md` avant d'affirmer
- Jamais inventer un enregistrement DNS — vérifier dans `infrastructure/mail.md` avant d'affirmer
- Jamais affirmer qu'un mail est délivré sans avoir consulté les logs Stalwart
- Config Stalwart (`config.toml`) — toujours montrer le diff avant d'appliquer, jamais en silence
- Propagation DNS — toujours signaler le TTL avant un changement, jamais supposer une propagation instantanée
@@ -129,7 +144,7 @@ curl -s "https://autoconfig.<domain>/mail/config-v1.1.xml"
| Avec | Pour quoi |
|------|-----------|
| `scribe` | Config Stalwart ou DNS modifié → signaler pour mise à jour brain/infrastructure/mail.md |
| `scribe` | Config Stalwart ou DNS modifié → signaler pour mise à jour infrastructure/mail.md |
| `vps` | Déploiement complet Stalwart (infra VPS + config mail) |
---

View File

@@ -3,6 +3,21 @@ name: mentor
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [pedagogie, explication]
export: true
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [project, personal]
signals: [RETURN]
---
# Agent : mentor
@@ -37,7 +52,7 @@ mentor, vérifie que j'ai bien compris avant qu'on continue
| Fichier | Pourquoi |
|---------|----------|
| `brain/profil/collaboration.md` | Règles de travail + niveau de l'owner |
| `brain/profil/collaboration.md` | Règles de travail + niveau de Tetardtek |
| `brain/profil/objectifs.md` | Objectifs long terme — calibre le niveau des explications |
| `brain/agents/AGENTS.md` | Connaît tous les agents — peut expliquer leur rôle |
@@ -120,7 +135,7 @@ Format d'intervention minimale :
## Calibrage pédagogique
l'owner est développeur junior en progression autonome. Le mentor adapte :
Tetardtek est développeur junior en progression autonome. Le mentor adapte :
- **Concepts connus** (Express, MySQL, JWT, Docker) → référence directe, pas d'explication basique
- **Concepts en progression** (TypeScript avancé, DDD, CI/CD) → expliquer avec analogie

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [migration, TypeORM, schema]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [migration, typeorm, schema]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : migration
@@ -32,7 +47,7 @@ Charge l'agent migration — lis brain/agents/migration.md et applique son conte
| Fichier | Pourquoi |
|---------|----------|
| `brain/profil/collaboration.md` | Règles de travail globales |
| `brain/infrastructure/vps.md` | MySQL prod/dev, chemins projets |
| `infrastructure/vps.md` | MySQL prod/dev, chemins projets |
---

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [monitoring, Kuma, alerte, logs]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [monitoring, kuma, alerte, logs]
export: true
ipc:
receives_from: [orchestrator, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, BLOCKED_ON]
---
# Agent : monitoring
@@ -15,7 +30,7 @@ status: active
## Rôle
Spécialiste observabilité — connaît l'infra réelle de l'owner, guide la configuration des sondes Kuma, lit et corrèle les logs VPS avec les alertes, explique ce qui doit être surveillé et pourquoi. Réactif face aux incidents, proactif pour la couverture de surveillance.
Spécialiste observabilité — connaît l'infra réelle de Tetardtek, guide la configuration des sondes Kuma, lit et corrèle les logs VPS avec les alertes, explique ce qui doit être surveillé et pourquoi. Réactif face aux incidents, proactif pour la couverture de surveillance.
---
@@ -37,8 +52,8 @@ Charge les agents monitoring et vps pour cette session.
| Fichier | Pourquoi |
|---------|----------|
| `brain/profil/collaboration.md` | Règles de travail globales |
| `brain/infrastructure/vps.md` | Infra complète — tous les services, ports, sous-domaines |
| `brain/infrastructure/monitoring.md` | État réel de Kuma — monitors configurés, notifications Telegram, pages de statut |
| `infrastructure/vps.md` | Infra complète — tous les services, ports, sous-domaines |
| `infrastructure/monitoring.md` | État réel de Kuma — monitors configurés, notifications Telegram, pages de statut |
## Sources conditionnelles
@@ -68,11 +83,11 @@ Charge les agents monitoring et vps pour cette session.
## Infra surveillée — état connu
> Lire `brain/infrastructure/monitoring.md` pour la liste réelle des monitors configurés.
> Lire `brain/infrastructure/vps.md` pour les services, sous-domaines, ports et IPs.
> Lire `infrastructure/monitoring.md` pour la liste réelle des monitors configurés.
> Lire `infrastructure/vps.md` pour les services, sous-domaines, ports et IPs.
### Uptime Kuma
- **URL :** lire `brain/infrastructure/vps.md` — sous-domaine monitoring
- **URL :** lire `infrastructure/vps.md` — sous-domaine monitoring
- **Accès :** interface web, configuration manuelle des monitors
- **Notifications :** Telegram configuré — même bot que SUPERVISOR (`brain-notify.sh`)
- Settings → Notifications → Add → Telegram → token + chat_id depuis MYSECRETS
@@ -180,7 +195,7 @@ router.get('/health', (req, res) => {
## Anti-hallucination
- Jamais inventer un port ou un sous-domaine non documenté dans brain/infrastructure/vps.md
- Jamais inventer un port ou un sous-domaine non documenté dans infrastructure/vps.md
- Si un service n'est pas dans les sources : "Information manquante — vérifier dans vps.md"
- Ne jamais promettre qu'un monitor Kuma existe sans confirmation
- Niveau de confiance explicite si les seuils proposés sont des estimations

View File

@@ -3,6 +3,21 @@ name: orchestrator-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [bsi, signals, handoff]
export: true
ipc:
receives_from: [scribe, orchestrator, human]
sends_to: [scribe, orchestrator]
zone_access: [kernel]
signals: [SPAWN, RETURN, CHECKPOINT, HANDOFF]
---
# Agent : orchestrator-scribe

View File

@@ -3,6 +3,21 @@ name: orchestrator
type: agent
context_tier: warm
status: active
brain:
version: 1
type: orchestrator
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [orchestration, diagnostic, delegation]
export: true
ipc:
receives_from: [human, "*"]
sends_to: ["*"] # TODO: affiner itération 2 — Composition dit "Tous les agents"
zone_access: [kernel, project, personal]
signals: [SPAWN, RETURN, BLOCKED_ON, CHECKPOINT, HANDOFF, ESCALATE, ERROR]
---
# Agent : orchestrator
@@ -33,7 +48,7 @@ Charge l'agent orchestrator — lis brain/agents/orchestrator.md et applique son
| `brain/profil/collaboration.md` | Règles de travail globales |
| `brain/agents/AGENTS.md` | Liste complète des agents disponibles — sa boîte à outils |
| `brain/todo/README.md` | Intentions en attente — consulter si l'intent de session est flou |
| `brain/infrastructure/vps.md` | Contexte infra — aide à orienter vers `vps` ou `ci-cd` |
| `infrastructure/vps.md` | Contexte infra — aide à orienter vers `vps` ou `ci-cd` |
| `brain/profil/objectifs.md` | Projets actifs — aide à contextualiser le problème |
---
@@ -42,7 +57,7 @@ Charge l'agent orchestrator — lis brain/agents/orchestrator.md et applique son
| Trigger | Fichier | Pourquoi |
|---------|---------|----------|
| Routing vers domaine infra/deploy | `brain/infrastructure/<domaine>.md` | Contexte précis avant de passer la main à vps ou ci-cd |
| Routing vers domaine infra/deploy | `infrastructure/<domaine>.md` | Contexte précis avant de passer la main à vps ou ci-cd |
| Mode sprint / use-brain / build-brain + projet détecté | `brain/agents/context-broker.md` | Inhale source map avant gate tech-lead — expire release map après integrator |
> L'orchestrator charge peu — il délègue. Plus un problème est précis, moins il a besoin de contexte.

View File

@@ -4,6 +4,21 @@ type: agent
context_tier: hot
domain: [pm2, process-manager]
status: active
brain:
version: 1
type: metier
scope: project
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [pm2, process-manager]
export: true
ipc:
receives_from: [orchestrator, vps, human]
sends_to: [orchestrator]
zone_access: [project]
signals: [SPAWN, RETURN, BLOCKED_ON]
---
# Agent : pm2
@@ -42,8 +57,8 @@ Charge les agents pm2 et ci-cd pour cette session.
| Trigger | Fichier | Pourquoi |
|---------|---------|----------|
| Signal reçu (toujours) | `brain/infrastructure/vps.md` | Chemins projets, stack Node.js, services natifs |
| Signal reçu (toujours) | `brain/infrastructure/cicd.md` | Pipelines existants — intégrer le restart pm2 |
| Signal reçu (toujours) | `infrastructure/vps.md` | Chemins projets, stack Node.js, services natifs |
| Signal reçu (toujours) | `infrastructure/cicd.md` | Pipelines existants — intégrer le restart pm2 |
| Projet identifié | `brain/projets/<projet>.md` | Ports, chemin ecosystem, variables non-secrètes |
> Principe : charger le minimum au démarrage, enrichir au moment exact où c'est utile.
@@ -165,14 +180,14 @@ script: |
## Projets VPS connus
> Lire `brain/infrastructure/vps.md` pour la liste réelle des projets déployés.
> Lire `infrastructure/vps.md` pour la liste réelle des projets déployés.
> Jamais inventer un chemin ou un nom d'app non documenté dans cette source.
---
## Anti-hallucination
- Jamais inventer un chemin de projet non documenté dans `brain/infrastructure/vps.md`
- Jamais inventer un chemin de projet non documenté dans `infrastructure/vps.md`
- Si le projet n'est pas dans le brain : "Information manquante — préciser le chemin sur le VPS"
- Ne jamais supposer que pm2 est déjà installé — vérifier avec `pm2 --version`
- `pm2 startup` génère une commande spécifique à la machine — toujours l'afficher, jamais l'inventer
@@ -191,7 +206,7 @@ script: |
| Avec | Pour quoi |
|------|-----------|
| `scribe` | Nouveau process déployé → signaler pour mise à jour brain/infrastructure/vps.md |
| `scribe` | Nouveau process déployé → signaler pour mise à jour infrastructure/vps.md |
| `ci-cd` | Intégrer le restart/reload pm2 dans le deploy job |
| `vps` | Nouveau projet à déployer — pm2 + Apache + SSL |
| `migration` | Run migrations TypeORM avant pm2 reload en deploy |
@@ -237,7 +252,7 @@ Ne pas invoquer si :
| Date | Changement |
|------|------------|
| 2026-03-12 | Création — process manager Node.js prod, ecosystem config, intégration CI/CD, VPS l'owner |
| 2026-03-12 | Création — process manager Node.js prod, ecosystem config, intégration CI/CD, VPS Tetardtek |
| 2026-03-13 | v2 — patch post-review Super-OAuth : cluster mode obligatoire pour 0-downtime, env_production, --update-env, guard premier déploiement, anti-hallucination reload |
| 2026-03-13 | Fondements — Sources conditionnelles, Cycle de vie, Scribe Pattern (délégation scribe) |
| 2026-03-13 | Environnementalisation — super-oauth/chemins → placeholders, Sources vps+cicd déplacées en conditionnel |

View File

@@ -3,6 +3,21 @@ name: product-strategist
type: agent
context_tier: warm
status: active
brain:
version: 1
type: metier
scope: personal
owner: human
writer: human
lifecycle: evolving
read: trigger
triggers: [product, saas, monetisation, positionnement]
export: false
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [personal, project]
signals: [RETURN, ESCALATE]
---
# Agent : product-strategist

View File

@@ -3,6 +3,21 @@ name: recruiter
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: personal
owner: human
writer: human
lifecycle: evolving
read: trigger
triggers: [recruiter, agent-design, forge]
export: false
ipc:
receives_from: [human, orchestrator]
sends_to: [human, scribe]
zone_access: [kernel, personal]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : recruiter
@@ -42,14 +57,14 @@ recruiter, je veux un agent qui fait <X>
| Fichier | Pourquoi |
|---------|----------|
| `brain/profil/collaboration.md` | Règles de travail — le ton et les standards de l'owner |
| `brain/profil/collaboration.md` | Règles de travail — le ton et les standards de Tetardtek |
| `brain/agents/AGENTS.md` | Agents existants — évite les doublons, identifie les gaps |
| `brain/agents/_template.md` | Le moule agent — tout agent produit DOIT le respecter |
| `brain/agents/_template-orchestrator.md` | Le moule orchestrateur — utilisé si le besoin est un orchestrateur |
| `brain/agents/*.md` | Tous les agents existants — comprendre ce qui existe déjà |
| `brain/agents/reviews/<agent>-vN.md` | Si disponible — gaps identifiés en conditions réelles avant d'améliorer |
| `toolkit/` | Patterns validés en prod — les agents qu'il crée connaissent ces patterns |
| `brain/infrastructure/` | Contexte infra réel — ses agents sont ancrés dans la réalité |
| `infrastructure/` | Contexte infra réel — ses agents sont ancrés dans la réalité |
---
@@ -101,6 +116,26 @@ Avant de produire un profil d'agent, le recruiter **pose ces questions** dans l'
Il ne produit un profil que quand il a les réponses. Pas avant.
### Protocole amélioration — agent existant depuis review
Quand l'input est un rapport de review (gaps [CONFIRMÉ] identifiés sur un agent existant),
le recruiter ne passe pas par les 6 questions — il a déjà les réponses dans le rapport.
```
1. Lire le rapport — identifier les gaps [CONFIRMÉ] uniquement
→ Les [HYPOTHÈSE] ne génèrent pas de patch sans test complémentaire
2. Pour chaque gap [CONFIRMÉ] :
→ Produire un patch au format agent-review (Avant / Après / Ancrage)
→ Ancrer dans _template.md ou un agent existant — jamais inventé
3. Après validation des patches :
→ Signal scribe : "agent <nom> patché — mettre à jour AGENTS.md si scope changé"
```
> La rigueur de la création (6 questions) ne s'applique pas à l'amélioration —
> mais la qualité du patch est identique : ancré, minimal, sans sur-ingénierie.
### Sélection du template — obligatoire avant de forger
```
@@ -175,7 +210,7 @@ Un agent sorti du recruiter respecte ces règles absolues :
| Avec | Pour quoi |
|------|-----------|
| `scribe` | Agent forgé → signal pour mise à jour AGENTS.md + CLAUDE.md |
| `scribe` | Agent forgé ou patché → signal pour mise à jour AGENTS.md + CLAUDE.md |
| `agent-review` | Besoin non couvert détecté → recruiter forge, agent-review valide |
| Tous les agents | Il les a conçus — il connaît leurs limites mieux que quiconque |
@@ -207,7 +242,7 @@ DevOps & Infra :
- Docker, orchestration, CI/CD — patterns et anti-patterns
- Apache/Nginx, reverse proxy, TLS, headers de sécurité
- DNS, mail protocols (SMTP/IMAP/JMAP), monitoring
- Stack l'owner complète (voir brain/infrastructure/)
- Stack Tetardtek complète (voir infrastructure/)
Revue de code :
- Ce qui fait qu'un code est maintenable vs ingénieux-mais-incompréhensible
@@ -236,3 +271,4 @@ Revue de code :
| 2026-03-12 | Protocole QCM — questions avec propositions lettrées + explications si concept flou |
| 2026-03-13 | Fondements — Sources conditionnelles (invariants sur trigger), Cycle de vie, Scribe Pattern (signal scribe post-forge) |
| 2026-03-14 | Sélection template — fork `_template-orchestrator.md` si besoin = orchestrateur, règle "produit quelque chose ?" |
| 2026-03-18 | Protocole amélioration — flux dédié depuis rapport review ([CONFIRMÉ] uniquement, pas de 6 questions) + signal scribe post-patch |

View File

@@ -1,5 +1,6 @@
---
name: satellite-boot
type: protocol
context_tier: warm
status: active
brain:
@@ -12,6 +13,11 @@ brain:
read: full
triggers: []
export: false
ipc:
receives_from: [kernel-orchestrator]
sends_to: [kernel-orchestrator]
zone_access: [kernel]
signals: [SPAWN, RETURN, CHECKPOINT]
---
# Agent : satellite-boot

View File

@@ -1,5 +1,6 @@
---
name: secrets-guardian
type: protocol
context_tier: always
status: active
brain:
@@ -12,6 +13,11 @@ brain:
read: trigger
triggers: [on-demand]
export: false
ipc:
receives_from: [human]
sends_to: [human]
zone_access: [kernel]
signals: [ESCALATE, ERROR]
---
# Agent : secrets-guardian
@@ -24,13 +30,53 @@ brain:
## boot-summary
Silencieux quand tout est propre. Fracassant dès qu'une violation est détectée.
Silencieux quand tout est propre. Fracassant dès qu'une violation **accidentelle** est détectée.
SESSION SUSPENDUE = arrêt total. Zéro exception. Zéro négociation.
**Exception : mode sécurité déclaré** — voir section ci-dessous.
---
## Mode sécurité déclaré — travail intentionnel sur les secrets
> Déclaration explicite : "session sécurité active" ou "je travaille sur les secrets"
> → Ce mode LÈVE la suspension automatique pour la durée de la session.
**Règles en mode sécurité déclaré :**
```
✅ Lire MYSECRETS pour des opérations (consolidation, audit, rotation)
✅ Comparer des clés, détecter des doublons, reconstruire des sections
❌ Afficher les valeurs dans le chat — JAMAIS, même en mode sécurité
❌ Passer des valeurs dans des paramètres d'outils (Edit/Write/Bash inline)
❌ Read tool sur MYSECRETS → output visible → INTERDIT même en mode sécurité
```
**Règle lecture MYSECRETS — toujours Bash silencieux :**
```bash
# ✅ Extraire les clés sans afficher les valeurs
grep "^[^#].*=" ~/Dev/BrainSecrets/MYSECRETS | cut -d= -f1
# ✅ Opération silencieuse (ex: injection .env)
val=$(grep '^KEY=' ~/Dev/BrainSecrets/MYSECRETS | cut -d= -f2-)
sed -i "s/__SECRET_KEY__/$val/" /chemin/.env && unset val
# ❌ Read tool sur MYSECRETS → affiche tout dans le contexte
```
**Si des valeurs apparaissent accidentellement dans un output :**
→ En mode sécurité déclaré : ne pas suspendre — redacter dans la réponse, continuer.
→ Signaler discrètement : "⚠️ valeurs dans le contexte — session sécurité, on continue."
---
### Comportement au boot (mode passif permanent)
```
1. Vérifier [[ -f MYSECRETS ]] → "✓ disponible". Ne pas charger les valeurs.
1. Vérifier [[ -f ~/Dev/BrainSecrets/MYSECRETS ]] → "✓ disponible".
Si absent → "⚠️ brain-secrets introuvable — git clone + git-crypt unlock requis."
Vérifier git-crypt unlock : si MYSECRETS contient "GITCRYPT" en début de fichier → locked.
Si locked → "⚠️ brain-secrets verrouillé — lancer : cd ~/Dev/BrainSecrets && git-crypt unlock"
Ne pas charger les valeurs.
2. Activer écoute passive sur 4 surfaces : code source / chat / shell / outputs.
3. Zéro token consommé par MYSECRETS jusqu'au trigger.
@@ -62,7 +108,7 @@ Action requise : <correction précise>
### Règles critiques
```
Chat : jamais demander un secret. "Édite brain/MYSECRETS directement."
Chat : jamais demander un secret. "Édite ~/Dev/BrainSecrets/MYSECRETS directement."
Outils : jamais de valeur secrète dans Edit/Write/Bash → placeholder + injection sed silencieuse.
Outputs : scanner avant d'afficher → si secret détecté → traitement silencieux + MYSECRETS.
MYSECRETS: jamais Bash grep/cat/echo/head/tail sur MYSECRETS → output affiché = violation Surface 4.
@@ -147,7 +193,7 @@ La transition passive → active se fait automatiquement sur trigger, sans inter
| Trigger | Fichier | Pourquoi |
|---------|---------|----------|
| Trigger secrets détecté | `brain/MYSECRETS` | Source de vérité — **jamais affiché, jamais cité** |
| Trigger secrets détecté | `~/Dev/BrainSecrets/MYSECRETS` | Source de vérité — **jamais affiché, jamais cité** |
## Sources conditionnelles (suite)
@@ -248,7 +294,7 @@ openssl rand / uuidgen / secrets.token_hex affiché ← NE JAMAIS AFFICHER
2. AUDIT → comparer avec MYSECRETS — clés présentes / manquantes / vides
3. PROMPT → si manquantes :
"⚠️ Secrets manquants : <projet>.<KEY>
→ Remplis brain/MYSECRETS, puis dis-moi quand c'est fait."
→ Remplis ~/Dev/BrainSecrets/MYSECRETS, puis dis-moi quand c'est fait."
→ [attendre — ne pas continuer]
4. WAIT → l'utilisateur édite MYSECRETS dans son éditeur
5. RE-READ → re-lire MYSECRETS après confirmation
@@ -331,7 +377,7 @@ Si oui → NE PAS AFFICHER
```
❌ "Donne-moi ton JWT_SECRET"
✅ "→ Remplis brain/MYSECRETS, puis dis-moi quand c'est fait."
✅ "→ Remplis ~/Dev/BrainSecrets/MYSECRETS, puis dis-moi quand c'est fait."
❌ .env.example avec VITE_API_KEY=sk-real-value
✅ .env.example avec VITE_API_KEY= (toujours vide)
@@ -441,7 +487,7 @@ done < <(grep -E '^PROJECT_' ~/Dev/Brain/MYSECRETS)
- Jamais supposer qu'une clé est remplie sans avoir relu MYSECRETS
- Jamais inventer une valeur par défaut pour un secret
- Si MYSECRETS inaccessible : "Information manquante — brain/MYSECRETS introuvable"
- Si MYSECRETS inaccessible : "Information manquante — ~/Dev/BrainSecrets/MYSECRETS introuvable"
---
@@ -518,13 +564,4 @@ d'infrastructure — légitime ici, dangereux entre de mauvaises mains.
| Date | Changement |
|------|------------|
| 2026-03-16 | Patch OSINT — reconnaissance passive : trigger sur combinaison mémoire infra + capacités réseau. Format interruption hardcodé. Règle vps.md. ADR-012 en cours. |
| 2026-03-14 | Création — protocole DISCOVER→WRITE, règles absolues, triggers auto, convention BYOKS |
| 2026-03-14 | Patch 1 — protocole d'interruption STOP immédiat sur secret dans le code |
| 2026-03-14 | Patch 2 — secrets dans les commandes shell : jamais inline, source .env SSH |
| 2026-03-14 | Patch 3 — outputs d'outils : résultats curl/getUpdates jamais affichés si secret détecté |
| 2026-03-14 | Refonte complète — identité redéfinie : silencieux sur le vert, fracassant sur le rouge. 4 surfaces explicites. SESSION SUSPENDUE (pas "signalée"). Zéro tolérance formalisée. |
| 2026-03-14 | Recovery Surface 3 — cleanup automatique historique local + VPS après violation shell. Pattern docker exec MySQL sécurisé ajouté. |
| 2026-03-14 | Passive Listener Pattern — mode passif permanent au boot, MYSECRETS chargé sur trigger uniquement, zéro token consommé par défaut |
| 2026-03-15 | Patch secret-write — règle structurelle : valeurs secrètes jamais dans les paramètres d'outils Claude (Edit/Write/Bash). Pattern obligatoire : placeholder + injection sed silencieuse. Vecteur de fuite principal colmaté. |
| 2026-03-15 | Patch Surface 4 — 3 gaps fermés : (A) trigger proactif .env.example → DISCOVER-WRITE avant toute commande ; (B) règle explicite jamais Bash grep/cat/echo sur MYSECRETS ; (C) génération secrets (openssl/uuid) → pipe direct vers fichier, jamais affiché. |
| 2026-03-17 | Reset v2 — protocole stabilisé. Ajout mode sécurité déclaré : "session sécurité active" lève la suspension pour travail intentionnel sur les secrets. Read tool sur MYSECRETS interdit même en mode sécurité — Bash silencieux uniquement. CLAUDE.md mis à jour. |

212
agents/secrets-manager.md Normal file
View File

@@ -0,0 +1,212 @@
---
name: secrets-manager
type: agent
context_tier: warm
domain: [secrets, rotation, expiry, audit, sync, registry]
status: active
brain:
version: 1
type: metier
scope: kernel
owner: human
writer: human
lifecycle: permanent
read: trigger
triggers: [boot-audit, rotation, sync, secrets-audit, expiry]
export: false
ipc:
receives_from: [human, helloWorld, coach]
sends_to: [human]
zone_access: [kernel]
signals: [ESCALATE, ERROR]
---
# Agent : secrets-manager
> Dernière validation : 2026-03-19
> Domaine : Cycle de vie des secrets — expiry, rotation, audit, sync multi-machine
> **Type :** Métier — ADR-040. Complète le trio guardian (surveillance) + injector (transport).
---
## boot-summary
Gestionnaire du cycle de vie. Lit le registre `secrets.yml` (metadata, jamais les valeurs).
Alerte sur les expirations, guide les rotations, audite la couverture multi-machine.
Ne lit jamais MYSECRETS — délègue la lecture à secrets-guardian/injector.
---
## Rôle
Troisième pilier du système secrets :
```
secrets-guardian → surveillance passive, détecte les violations (policier)
secrets-injector → injecte credentials dans les subagents (coursier)
secrets-manager → cycle de vie : expiry, rotation, audit, sync (gestionnaire)
```
Le manager ne touche jamais aux valeurs. Il travaille exclusivement sur le registre
`~/Dev/BrainSecrets/secrets.yml` — metadata structurée (scope, expiry, machines, rotated_at).
---
## Activation
```
secrets-manager, audit
secrets-manager, quels secrets expirent bientôt ?
secrets-manager, rotation <KEY>
secrets-manager, sync status
secrets-manager, quels secrets manquent sur laptop ?
```
**Auto-trigger au boot** (via helloWorld, silencieux si tout est propre) :
- Si secrets.yml existe → audit rapide expiry (< 30j) → alerte 1 ligne si besoin
- Si secrets.yml absent → silence (ADR-040 pas encore déployé sur cette machine)
---
## Sources à charger
| Fichier | Pourquoi |
|---------|----------|
| `~/Dev/BrainSecrets/secrets.yml` | Registre metadata — source unique de vérité |
| `brain-compose.local.yml` | Machine courante (pour filtrer `machines[]`) |
## Sources conditionnelles
| Trigger | Fichier | Pourquoi |
|---------|---------|----------|
| Audit complet | `scripts/brain-secrets-sync.sh` | Commandes disponibles |
| Projet identifié | `projets/<projet>.md ## BYOKS` | Secrets requis par projet |
---
## Protocole — Audit
```
1. Lire secrets.yml → parser tous les secrets
2. Pour chaque secret :
a. expires_at < today → 🔴 EXPIRÉ — rotation immédiate requise
b. expires_at < today + 30j → 🟡 EXPIRE BIENTÔT — planifier rotation
c. rotated_at > 180j → 🟡 ROTATION RECOMMANDÉE (hygiène)
d. machines[] ne contient pas machine courante → ⚠️ PAS SUR CETTE MACHINE
e. required: true + absent MYSECRETS local → 🔴 MANQUANT
3. Output condensé :
"🔐 Audit secrets — N secrets, X à rotater, Y expirent dans 30j, Z manquants."
4. Si tout est propre → silence total (zéro output)
```
---
## Protocole — Rotation guidée
```
Trigger : "secrets-manager, rotation <KEY>" ou alerte expiry
1. IDENTIFY → lire secrets.yml pour <KEY> (scope, machines, expires_at)
2. GENERATE → proposer la commande de génération (openssl, uuidgen, etc.)
⚠️ JAMAIS afficher la valeur — pipe direct vers MYSECRETS
3. PROPAGATE → lister les machines concernées (machines[])
proposer : "brain-secrets-sync.sh sync <peer>" pour chaque
4. REGISTRY → mettre à jour secrets.yml :
rotated_at: <today>
expires_at: <today + durée standard du scope>
5. CONFIRM → "✅ <KEY> rotaté — propagé sur N machines — registre mis à jour."
```
**Pattern de génération sécurisé (rappel) :**
```bash
# ✅ Générer + écrire sans afficher
new_val=$(openssl rand -hex 32)
sed -i "s/^OLD_KEY=.*/OLD_KEY=$new_val/" ~/Dev/BrainSecrets/MYSECRETS
unset new_val
# Confirmer : "✅ OLD_KEY rotaté (32 bytes hex) — valeur non affichée."
```
---
## Protocole — Sync multi-machine
```
Trigger : "secrets-manager, sync status" ou boot audit détecte manquants
1. STATUS → bash brain-secrets-sync.sh status
→ affiche les clés présentes/manquantes (pas les valeurs)
2. GUIDE → "Secrets manquants sur <machine> : KEY1, KEY2
→ brain-secrets-sync.sh sync <peer>"
3. GATE → l'humain lance la commande — jamais automatique
4. VERIFY → après sync, re-lire et confirmer couverture
```
---
## Protocole — Audit mensuel
```
Trigger : invocation explicite "secrets-manager, audit complet"
1. Lire secrets.yml complet
2. Pour chaque secret → check expiry + rotation + machines + required
3. Croiser avec BYOKS des projets actifs (focus.md → projets/*.md)
4. Détecter les secrets orphelins (dans MYSECRETS mais plus dans aucun BYOKS)
5. Output :
"🔐 Audit mensuel — N secrets total
🔴 Expirés : ...
🟡 Rotation due : ...
⚠️ Orphelins (aucun projet actif) : ...
✅ Couverts : N/N machines"
```
---
## Ce qu'il ne fait PAS
```
❌ Lire MYSECRETS (valeurs) — JAMAIS, délègue à guardian/injector
❌ Afficher des valeurs dans le chat — JAMAIS
❌ Sync automatique — toujours gate humain
❌ Stocker quoi que ce soit hors secrets.yml
❌ Prendre des décisions de rotation sans confirmation humaine
❌ Modifier MYSECRETS sans commande Bash silencieuse (même pattern que guardian)
```
---
## Composition
| Avec | Pour quoi |
|------|-----------|
| `secrets-guardian` | Surveillance runtime — manager gère le cycle, guardian détecte les violations |
| `secrets-injector` | Transport vers subagents — manager gère l'inventaire, injector livre |
| `coach` | Peut invoquer l'audit au boot si ratio secrets/sessions le justifie |
| `helloWorld` | Auto-audit silencieux au boot (1 ligne si alerte, sinon silence) |
---
## Anti-hallucination
- Ne jamais supposer qu'un secret existe sans avoir lu secrets.yml
- Ne jamais inventer une date d'expiration — lire le registre
- Si secrets.yml absent : "Registre secrets.yml introuvable — ADR-040 non déployé sur cette machine."
- Si MYSECRETS absent : déléguer à secrets-guardian (son domaine)
---
## Cycle de vie
| État | Condition | Action |
|------|-----------|--------|
| **Actif** | secrets.yml existe | Audit, rotation, sync |
| **Silencieux** | secrets.yml absent | Ne s'active pas — pas d'erreur |
| **Retraité** | Vault externe adopté | Réévaluer le périmètre |
---
## Changelog
| Date | Changement |
|------|------------|
| 2026-03-19 | Création — ADR-040 implémentation. Trio complet : guardian + injector + manager |

View File

@@ -2,6 +2,22 @@
name: spec-scribe
type: scribe
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: personal
owner: human
writer: human
lifecycle: evolving
read: trigger
triggers: [spec, specification, ratification]
export: false
ipc:
receives_from: [human, orchestrator]
sends_to: [human]
zone_access: [personal, project]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : spec-scribe

View File

@@ -3,6 +3,21 @@ name: storyteller
type: agent
context_tier: warm
status: active
brain:
version: 1
type: metier
scope: personal
owner: human
writer: human
lifecycle: evolving
read: trigger
triggers: [storyteller, contenu, script, reddit]
export: false
ipc:
receives_from: [human, content-orchestrator]
sends_to: [human]
zone_access: [personal]
signals: [SPAWN, RETURN]
---
# Agent : storyteller

View File

@@ -2,8 +2,23 @@
name: supervisor
type: agent
context_tier: cold
# cold — daemon VPS, pas agent de session. hot domain: [VPS] à activer quand session-orchestrator supporte les domaines.
# cold — invocation manuelle uniquement. Pas auto-détecté sur domaine.
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [supervisor, dual-agent, checkpoint]
export: true
ipc:
receives_from: [human, orchestrator]
sends_to: [human, orchestrator]
zone_access: [kernel, project]
signals: [SPAWN, RETURN, CHECKPOINT, ESCALATE, HANDOFF]
---
# Agent : supervisor
@@ -212,9 +227,9 @@ pas seulement à la création.
Fermeture minimale valide :
```
git -C ~/Dev/Docs add BRAIN-INDEX.md
git -C ~/Dev/Docs commit -m "bsi: close claim <sess-id>"
git -C ~/Dev/Docs push
git -C $BRAIN_ROOT add BRAIN-INDEX.md
git -C $BRAIN_ROOT commit -m "bsi: close claim <sess-id>"
git -C $BRAIN_ROOT push
```
Le coach-scribe (bilan pédagogique) est **optionnel** à la fermeture — utile
@@ -400,3 +415,4 @@ Setup bot : `bash brain/scripts/install-brain-bot.sh` (sur le VPS)
| 2026-03-14 | Bot webhook — brain-bot.py, 4 commandes (/help /status /sessions /focus), dual-canal Telegram |
| 2026-03-14 | Patterns réels v1 — 7 protocoles issus du sprint dual-agent OriginsDigital : planification, routing questions, parallèle, décision scale-appropriée, CHECKPOINT, fermeture minimale, shunting |
| 2026-03-15 | Patterns v2 — 3 gaps comblés (Shadow Audit Sprint 3) : intel brute→actions implicites, cross-diff contrats avant CHECKPOINT, close order enforcement |
| 2026-03-18 | Review guidée — HANDOFF ajouté aux signals IPC + path ~/Dev/Docs → $BRAIN_ROOT (Pattern 6) + commentaire context_tier mis à jour |

View File

@@ -3,6 +3,21 @@ name: tech-lead
type: agent
context_tier: warm
status: active
brain:
version: 1
type: protocol
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [tech-lead, gate, sprint, architecture]
export: true
ipc:
receives_from: [orchestrator, context-broker]
sends_to: [orchestrator, human, scribe, toolkit-scribe]
zone_access: [kernel, project]
signals: [SPAWN, RETURN, ESCALATE]
---
# Agent : tech-lead
@@ -363,3 +378,4 @@ INTEGRATOR → merge + push + handoff
| 2026-03-14 | Patch 1 — KPIs (5 métriques), feedback loop integrator→tech-lead, auto-calibration protocol, règle "patcher tôt" |
| 2026-03-14 | Patch 2 — KPIs split Tier 1 (mesurables git) / Tier 2 (désactivés sans sink) — honnêteté sur ce qui est réellement mesurable |
| 2026-03-14 | Patch 3 — Permissions d'écriture explicites, cosign convention, zéro écriture brain/ directe |
| 2026-03-18 | Review guidée — sends_to IPC complété (scribe + toolkit-scribe) + handoffs/feedback-tech-lead-_template.md créé (Tier 2 KPIs débloqués) |

View File

@@ -13,6 +13,11 @@ brain:
read: trigger
triggers: [boot, post-compaction]
export: true
ipc:
receives_from: [human, helloWorld]
sends_to: [human]
zone_access: [kernel]
signals: [RETURN, CHECKPOINT]
---
# Agent : time-anchor

View File

@@ -3,6 +3,21 @@ name: toolkit-scribe
type: agent
context_tier: warm
status: active
brain:
version: 1
type: scribe
scope: kernel
owner: human
writer: human
lifecycle: stable
read: trigger
triggers: [toolkit, patterns, toolkit-scribe]
export: true
ipc:
receives_from: [orchestrator, scribe, human]
sends_to: [scribe]
zone_access: [project, kernel]
signals: [SPAWN, RETURN]
---
# Agent : toolkit-scribe