Files
brain-template/brain-compose.yml

395 lines
14 KiB
YAML

# brain-compose.yml — Kernel spec
# Versionné dans le kernel. Schema + feature flags + registre agents.
# Géré par l'agent brain-compose — ne pas éditer manuellement.
version: "0.8.0"
# ---
# Ownership — kerneluser
# true : propriétaire de ce brain — écriture zone:kernel autorisée (human-confirmed)
# false : utilisateur invité (SaaS futur) — zone:kernel bloquée
# Défaut : true sur tout brain forké (l'owner est toujours kerneluser)
# ---
kerneluser: true
identityShow: on # conséquence de kerneluser: true — présence visuelle complète des agents
# kerneluser: false → identityShow: off (mode clean/pro — BaaS client)
# ---
# Brain API Key — accès kernel + tiers (optionnel)
# ⚠️ La VRAIE clé va dans brain-compose.local.yml (gitignored) sous instances.<name>.brain_api_key
# Ce champ reste null ici — jamais commiter une vraie clé dans brain-compose.yml
# Absent ou null → tier: free (jamais d'erreur, jamais de blocage)
# Format prod : bk_live_<32chars>
# Format dev : bk_test_<32chars> (tier: free forcé côté serveur, toujours valide)
# Validation : key-guardian.sh au boot → lit local.yml → valide → écrit feature_set dans local.yml
# ---
brain_api_key: null # toujours null ici — clé réelle dans brain-compose.local.yml
# ---
# feature_set schema — objet écrit par key-guardian après validation
# Stocké dans brain-compose.local.yml (non versionné) pour éviter les commits de clé
# Structure contractuelle : ne pas modifier manuellement
# ---
feature_set_schema:
tier: free # free | pro | full
agents: [] # liste des agents autorisés ([] = feature_set.free)
contexts: [] # manifests BHP autorisés ([] = accès libre sur free)
distillation: false # true = brain-engine distillation locale autorisée (full only)
catalog_version: "1.0.0" # version du CATALOG.yml agents — sync brain-store
last_validated_at: null # ISO 8601 — dernière validation réussie
expires_at: null # ISO 8601 — expiration clé (null = pas d'expiration fixe)
grace_until: null # ISO 8601 — VPS unreachable → grace 72h avant downgrade
# ---
# Modes — comportement de session (permissions BSI + agents autorisés)
# Priorité : déclaration explicite > detectmode > brain-compose.local.yml > prod (safe default)
# ---
modes:
prod:
description: "Session normale — Invariants protégés, écriture confirmée"
permissions:
invariant: confirm
contexte: confirm
reference: write
personnel: write
brain_write: false
forge: false
agents: "*"
dev:
description: "Forge — pleine puissance, écriture libre sur le brain"
permissions:
invariant: confirm # même en dev, les Invariants demandent confirmation
contexte: write
reference: write
personnel: write
brain_write: true
forge: true
agents: "*"
toolkit-only:
description: "Croissance autonome — toolkit source unique, docs officielles si inconnu"
permissions:
invariant: false
contexte: false
reference: read
personnel: false
brain_write: toolkit-scribe-only
forge: false
docs_fetch: ask # always | ask | never
agents: [toolkit-scribe, debug, code-review]
behavior: |
Pattern connu dans toolkit → agit seul
Pattern inconnu → docs officielles (selon docs_fetch) → toolkit-scribe écrit
Jamais d'invention
brainstorm:
description: "Réflexion scopée — pas d'écriture système"
permissions:
invariant: false
contexte: scope-only
reference: read
personnel: false
brain_write: false
forge: false
agents: [brainstorm, coach]
coach:
description: "Mentorat — progression en écriture, brain en lecture"
permissions:
invariant: false
contexte: false
reference: read
personnel: write
brain_write: progression-only
forge: false
agents: [coach, coach-scribe, scribe]
deploy:
description: "Déploiement — agents infra uniquement"
permissions:
invariant: false
contexte: false
reference: read
personnel: false
brain_write: false
forge: false
agents: [vps, ci-cd, pm2, secrets-guardian]
debug:
description: "Debug — lecture + agents debug"
permissions:
invariant: false
contexte: scope-only
reference: read
personnel: false
brain_write: false
forge: false
agents: [debug, code-review]
projet-audit:
description: "Audit lecture seule — todo-scribe uniquement en écriture"
permissions:
invariant: false
contexte: false
reference: read
personnel: false
brain_write: todo-scribe-only
forge: false
agents: [coach, agent-review]
review-front:
description: "Review frontend"
permissions:
invariant: false
contexte: false
reference: read
personnel: false
brain_write: false
forge: false
agents: [code-review, frontend-stack, testing]
review-back:
description: "Review backend/sécu"
permissions:
invariant: false
contexte: false
reference: read
personnel: false
brain_write: false
forge: false
agents: [code-review, security, testing]
conserve:
description: "Économie context — proposé auto si seuil métabolisme dépassé"
permissions:
invariant: confirm
contexte: confirm
reference: read
personnel: false
brain_write: false
forge: false
agents: [debug, code-review, todo-scribe, metabolism-scribe]
behavior: |
Cible context < 40%. Pas de chargement de sources non essentielles.
metabolism-scribe en fin de session obligatoire.
HANDOFF:
description: "Reprise propre depuis une session précédente"
permissions:
invariant: false
contexte: scope-only
reference: read
personnel: false
brain_write: false
forge: false
agents: "*"
rendering:
description: "Instance autonome sur projet — scope strict, zéro drift kernel"
permissions:
invariant: false
contexte: false
reference: read
personnel: false
brain_write: false # pas d'écriture brain/ — uniquement le repo projet
forge: false
scope_lock: true # BLOQUÉ hors du scope déclaré dans le claim
zone_lock: project # zone:kernel → BLOCKED_ON immédiat, pas de négociation
circuit_breaker:
max_consecutive_fails: 3 # 3 échecs → arrêt + signal BLOCKED_ON vers pilote
on_trigger: "signal → BLOCKED_ON pilote"
agents: [code-review, security, testing, debug, vps, ci-cd, pm2, migration]
behavior: |
Instance travaille sur zone:project uniquement.
Toute tentative d'accès zone:kernel → BLOCKED_ON immédiat, signal pilote.
Fichier hors scope déclaré → vérifier mutex (BSI-v3-7) avant d'écrire.
3 on_fail consécutifs → circuit breaker → arrêt complet + signal pilote.
Jamais de décision architecturale — signal pilote si ambiguïté.
cockpit:
description: "Mode assisté — coach proactif, routing automatique, pipeline kanban"
permissions:
invariant: confirm
contexte: write
reference: write
personnel: write
brain_write: true
forge: false
agents: [coach, kanban-scribe, interprete, brainstorm, orchestrator]
behavior: |
Coach proactif : route avant qu'on cherche, anticipe, propose
kanban-scribe : actif automatiquement au wrap
interprete : écoute en continu — pas besoin d'invocation explicite
Human nodes : décision de valeur uniquement, jamais de mécanique
# ---
# detectmode — helloWorld détecte le mode selon les signaux de session
# ---
detectmode:
signals:
- match: [vps, ci-cd, pm2]
mode: deploy
- match: [code-review, frontend-stack]
mode: review-front
- match: [code-review, security]
mode: review-back
- match: [debug]
mode: debug
- match: [brainstorm]
mode: brainstorm
- match: [coach, progression]
mode: coach
- bsi_claim: HANDOFF
mode: HANDOFF
default: prod # mode permissions par défaut — session type par défaut = navigate (ADR-044)
# ---
# Feature sets — contrôlent les agents invocables par instance
# Les agents "bloqués" existent dans le kernel, brain-compose contrôle l'accès.
# ---
feature_sets:
free:
description: "Agents fondamentaux — exploration et maintenance brain"
coach_level: boot # coach-boot.md — présence légère, speech protocol sans contexte accumulé
sessions:
- navigate
- work
- debug
- brainstorm
- brain
- handoff
agents:
- coach-boot
- brain-guardian # auto-méfiance structurelle — session-brain
- scribe
- todo-scribe
- debug
- mentor
- helloWorld
- aside
- brainstorm
- interprete
- orchestrator
- orchestrator-scribe
- recruiter
- agent-review
- time-anchor
- pattern-scribe
featured:
description: "Progression personnelle — RAG + distillation pour apprendre avec un brain qui connaît l'utilisateur"
extends: free
coach_level: full # coach.md complet — c'est la proposition de valeur centrale
distillation: true # RAG actif — le brain apprend et se souvient
sessions:
extends: free
- coach
- capital
agents:
- coach # coach.md full — remplace coach-boot en featured+
- coach-scribe
- capital-scribe
- progression-scribe
# Pas d'agents dev (code-review, security, vps, etc.)
# Use case : apprendre avec un brain qui te connaît — non-dev bienvenu
pro:
description: "Agents métier — développement complet + coaching full"
extends: featured
coach_level: full
sessions:
extends: featured
- audit
- deploy
- infra
- urgence
- refacto
- migration
agents:
- coach # coach.md full — remplace coach-boot en pro+
- code-review
- security
- testing
- refacto
- vps
- ci-cd
- monitoring
- pm2
- frontend-stack
- optimizer-backend
- optimizer-db
- optimizer-frontend
- toolkit-scribe
- coach-scribe
- git-analyst
- capital-scribe
- i18n
- doc
- migration
- mail
- brain-compose
- config-scribe
- audit
- brain-state-bot
full:
description: "Accès complet — owner, usage personnel sans restriction + distillation"
extends: pro
coach_level: L2 # coach.md + BACT + milestones long terme + progression accumulée
sessions: "*" # inclut kernel + edit-brain — owner uniquement
distillation: true
agents: "*" # BACT, SYMSEC, ambient, phi-3-mini
# ---
# Changelog — semver
# v0.x.x : kernel en évolution rapide, breaking changes possibles
# v1.0.0 : interface contractuelle stable
# ---
changelog:
- version: "0.1.0"
date: "2026-03-13"
notes: "Initial — 30+ agents, config-scribe, brain-compose Phase 1, symlinks, feature flags"
- version: "0.2.0"
date: "2026-03-14"
notes: "BSI (BRAIN-INDEX.md), brain_name, brain-template, aside, brainstorm, brain-compose up"
- version: "0.3.0"
date: "2026-03-14"
notes: "orchestrator-scribe (free), brain-compose+config-scribe (pro), CHECKPOINT signal, session-as-identity, orchestration-patterns"
- version: "0.4.0"
date: "2026-03-14"
notes: "Système de modes — 11 modes, permissions BSI par mode, detectmode, toolkit-only autonome avec docs_fetch"
- version: "0.5.0"
date: "2026-03-14"
notes: "Multi-sessions BSI v1.2 — CHECKPOINT/HANDOFF signals + handoff files ; brain-watch-vps daemon (stale TTL check, Telegram notifications) ; brain-bot Telegram webhook (/status /sessions /focus /help) ; workspace spec v1.0 (ram.md log.md feedback.md) ; supervisor patterns v1 (7 protocoles) ; statusline session-role ; secrets-guardian recovery protocol ; BLOCKED_ON false-positive fix"
- version: "0.5.1"
date: "2026-03-14"
notes: "Métabolisme v1 — mode conserve, metabolism-scribe, metabolism-spec, progression/metabolism/, helloWorld briefing métabolisme"
- version: "0.6.0"
date: "2026-03-15"
notes: "Constitution v1.1.0 — Section 9 North Star + invariants autonomie + auto-amélioration (ADR-011) ; wiki/concepts.md fondamentaux brain V2 ; brain-engine vision north star"
- version: "0.7.0"
date: "2026-03-16"
notes: "BSI-v3 fondations — tiered-close, zone-aware claims (ADR-014), result contract, exit triggers ; kerneluser: true ancré kernel ; KERNEL.md délégation human-only phase actuelle"
- version: "0.8.0"
date: "2026-03-17"
notes: "Brain API Key Phase 1 — brain_api_key field (optionnel), feature_set_schema contractuel, tiers free/pro/full ; cache feature_set dans brain-compose.local.yml"
- version: "0.8.1"
date: "2026-03-17"
notes: "brain-store CATALOG — agents/CATALOG.yml source de vérité par tier (free/pro/owner) ; GET /agents filtré par tier ; catalog_version dans feature_set_schema"
- version: "0.9.0"
date: "2026-03-17"
notes: "Feature sets v2 — coach_level par tier (boot/full/L2), sessions disponibles par tier, distillation flag owner, pattern-scribe + audit + time-anchor en free"
- version: "0.9.1"
date: "2026-03-18"
notes: "identityShow ancré — conséquence directe de kerneluser (on=owner/off=client) ; G-4 migration session-infra/capital/urgence vers format L0/L1/L2/L3 ; session-projet retiré (alias → session-work)"
- version: "0.9.2"
date: "2026-03-18"
notes: "Tier featured ajouté (RAG + distillation progression, non-dev) ; session-kernel + session-edit-brain → full tier uniquement (owner) ; brain-guardian ajouté en free ; chaîne tiers : free → featured → pro → full"