La nuit où le brain s'est armé
16 mars 2026Chapitre 3 — La nuit où le brain s’est armé
Sources vérifiées :
git log 2026-03-16(139 commits) Commits clés :1a25397(SQLite brain state engine) ·66746ef(patch OSINT) ·a312461(pipeline embeddings) ·0ed8d99(RAG layer) ·2ed1ec9(Brain-as-a-Service) ·fa69c79(brain.tetardtek.com live) ·42d7439(MCP server) ·3e823b1(BSI v3-1) ·9f9ad9b(kernel v0.7.0)
Le 16 mars 2026, le brain est passé de fichiers sur un disque à un cerveau vivant en ligne. En un jour.
Ce n’est pas une exagération. À minuit, le brain est un dossier de markdown avec des agents et des conventions. À 23h42, il a une base de données, un pipeline d’embeddings, un moteur de recherche sémantique, un serveur API, une URL publique, un protocole MCP, et un système de distillation de mémoire. 139 commits. Un lundi.
Minuit — Postiz et les derniers gestes de la veille
La journée commence dans la continuité du 15 mars. À 00h10, Postiz est shadow-installé sur le VPS — trois containers Docker, vhost, SSL. À 00h27, il est en prod. À 00h34, SuperOAuth Tier 2 est livré — webhooks et staleness gate. Les dernières livraisons de la nuit précédente se ferment proprement.
Puis, à 01h06, quelque chose de différent commence.
Le brain apprend à se souvenir autrement
Un claim s’ouvre : shadow-audit-sql. Le plan est posé en dix minutes — cinq patches pour donner au brain une mémoire structurée. Pas des fichiers YAML éparpillés. Une vraie base de données.
À 01h21, P1 tombe — brain-index-regen.sh réécrit, les claims deviennent des enregistrements. P2 à 01h23 — agent-memory/ créé, les observations des agents ont un endroit où vivre. P3 à 01h27 — le compteur de tiers et le BHP Phase 2. P4 à 01h33 — le metabolism reçoit sa propre spec.
Et à 01h44, le commit qui change tout :
1a25397 — feat(be1): P5 — SQLite brain state engine : schema.sql 6 tables/5 vues, migrate.py 44 claims+6 signals+11 handoffs, 4 requêtes utilitaires
Six tables. Cinq vues. 44 claims migrés. Le brain vient de passer des fichiers à une base de données. Les claims, les signaux, les handoffs — tout ce qui était éparpillé dans des YAML est maintenant requêtable, joinable, interrogeable. Le cerveau se souvient structurellement.
À 02h09, helloWorld et brain-watch passent de grep à SQLite. Le fallback grep reste si la base est absente. Pragmatisme.
À 02h17, la branche shadow-sql est mergée. Le brain a un état persistant. Il a quatre jours.
Le garde-fou
À 01h59, juste après P5 — presque perdu dans le bruit de la migration — un commit de sécurité.
66746ef — fix(security): patch OSINT — garde-fou reconnaissance passive hardcodé (ADR-013)
Le constat est inconfortable. Le brain tient désormais en mémoire des données d’infrastructure sensibles — adresses VPS, ports internes, configurations SSH, topologie des conteneurs. Suffisamment pour cartographier un système entier. En parallèle, il dispose d’un accès réseau actif. Un auditeur extérieur aurait reconnu ce profil immédiatement : c’est exactement le workflow d’un outil de reconnaissance passive d’infrastructure. Légitime entre les bonnes mains. Dangereux sans garde-fou.
La décision n’a pas été de retirer les capacités réseau — elles sont nécessaires. La décision a été d’inscrire une interruption obligatoire dans secrets-guardian, directement dans l’agent qui ne dort jamais. Désormais, toute combinaison “données infra sensibles en contexte + requête réseau” déclenche une demande de confirmation explicite avant d’agir. Le garde-fou est hardcodé dans le kernel — il s’applique quel que soit le modèle qui tourne.
ADR-013 acte cette décision. Le brain sait qu’il est dangereux. Et il a choisi de se brider.
Le cerveau apprend à chercher
À 02h22, un deuxième chantier s’ouvre sans attendre que le premier refroidisse. BE-2 — pipeline d’ingestion et index vectoriel.
L’idée : le brain ne doit pas juste stocker ses fichiers. Il doit les comprendre. Transformer chaque morceau de texte en vecteur, pouvoir chercher par similarité sémantique, pas par mot-clé.
embed.py naît à 03h04 — le pipeline d’embeddings avec nomic-embed-text. Chaque fichier du brain est découpé en chunks, chaque chunk transformé en vecteur de 768 dimensions, stocké dans SQLite. Le brain se digère lui-même.
À 04h23, un bug. Puis un autre. chunk_by_size entre en boucle infinie sur certains fichiers. Fix, retest. Re-boucle. Le post-mortem sera écrit deux fois dans le changelog. Ce genre de bug — celui qui résiste, qu’on croit fixé et qui revient — c’est celui qui apprend quelque chose. À 13h59, le vrai fix tombe. À 14h10, les 55 tests passent au vert. BE-2 est mergé.
À 13h53, la recherche arrive :
4e9479d — feat(search): BE-2d — search.py + bsi-search.sh + helloWorld intégration
Le brain peut se chercher dans lui-même. Tape une question, il trouve les morceaux les plus proches dans sa mémoire vectorielle. helloWorld l’utilise au boot pour enrichir le briefing.
Le brain se met en ligne
L’après-midi du 16 mars est une escalade.
À 15h12 :
0ed8d99 — feat(be3): RAG layer — rag.py, bsi-rag.sh, 82 tests verts
La couche RAG — Retrieval-Augmented Generation. Le brain ne cherche plus seulement. Il utilise ce qu’il trouve pour répondre. La mémoire devient active.
À 15h26, 14 minutes plus tard :
2ed1ec9 — feat(be3b): Brain-as-a-Service — server.py, bsi-server.sh, 101 tests
Un serveur. Le brain a un serveur. API FastAPI, endpoints, authentification par token. Le cerveau qui jusqu’ici n’existait que dans un terminal vient de devenir un service.
À 15h42 :
8b0ce57 — feat(be3c): VPS deploy — systemd, install script, …
Déployé. Sur le VPS. Avec systemd. 1 205 chunks de mémoire indexés.
Et à 17h04, le commit qu’on devrait encadrer :
fa69c79 — chore(infra): brain.tetardtek.com live — vhost + SSL + smoke test OK
Le brain est en ligne. Une URL. Un certificat SSL. Un smoke test qui passe. Le cerveau qui, quatre jours plus tôt, était un init dans un terminal, a maintenant une adresse sur internet.
MCP — le brain parle un protocole
À 17h48, le brain apprend une nouvelle langue.
42d7439 — feat(be4b): MCP server — brain_search + brain_boot, FastMCP StreamableHTTP port 7701
MCP — Model Context Protocol. Le standard qui permet à Claude de parler à des outils externes. Le brain vient de devenir un outil MCP. N’importe quelle session Claude peut maintenant interroger le brain — brain_search('sujet'), brain_boot(). Le cerveau n’est plus enfermé dans son propre terminal. Il est accessible.
Le fix derrière Apache prend une dizaine de minutes — proxy headers, ASGI wrapper, le type de plomberie invisible qui fait que tout fonctionne. 16 tests cassés par les changements d’API. Tous refixés.
À 17h37, les zones d’accès sont définies : public, work, kernel. Le brain sait quoi montrer et à qui. Les données privées ne passent pas la frontière.
La distillation
À 18h40, un concept nouveau apparaît : secrets_check — un validateur de cohérence zéro-exposure. SHA256. Le brain vérifie que ses secrets n’ont pas fuité, par checksum.
À 19h44, quelque chose de plus subtil :
ba2920a — feat(be5): distill.py — session memory distillation, mistral:7b, 3 chunks/session, lang-aware
La distillation. Prendre une session entière — des heures de conversation, de code, de décisions — et en extraire trois chunks de mémoire. Le résidu. Ce qui mérite de survivre à la session. Le brain apprend à oublier intelligemment.
Le modèle est Mistral 7B, en local. Pas d’API externe. La mémoire du brain ne sort jamais de la machine. Les grandes sessions sont filtrées (MAX_MESSAGES 50), les micro-sessions ignorées, la déduplication empêche l’accumulation.
BSI v3 — le système nerveux
Le soir. À partir de 20h59, en moins de deux heures, le BSI franchit huit versions.
3e823b1 (21:01) — v3-1 : hiérarchie formelle. satellite_type, satellite_level, parent_satellite. Une session n’est plus un claim flottant — elle a une position dans un arbre.
1e105ac (21:43) — v3-2 : contrat de résultat. Chaque satellite rend compte à la fermeture : status, files, tests, children, signal_id.
866e2f1 (21:50) — v3-3 : exit triggers. Les conditions sous lesquelles une session se termine proprement, partiellement, ou échoue — avec escalade automatique vers le pilote.
fd6634d (22:10) — v3-4 : workflows thématiques. Un fichier YAML orchestre une séquence de satellites.
85ad21b (21:26) — v3-5 : tiered-close. Trois niveaux de fermeture selon la criticité : Atomic, Validated, Orchestrated.
6d63cb3 (22:04) — v3-6 : theme branch strategy. Les branches thématiques entrent dans le protocole.
9b496f2 (22:34) — v3-7 : rendering. Un mutex de fichiers — file-lock.sh, un registre de verrous — pour que deux sessions n’écrivent pas au même endroit.
ab91867 (22:42) — v3-8 : pre-flight. Six vérifications avant toute écriture : claim ouvert, scope, zone kernel, verrou, circuit breaker, branche thématique.
Huit versions. Moins de deux heures. Chacune ouvre un claim satellite, livre, ferme, envoie un signal au pilote. Le BSI v3 n’est pas spécifié puis implémenté — il s’implémente lui-même, par son propre protocole, en temps réel. Le système nerveux qui se câble en marchant.
Le kernel se verrouille
À 21h52, un commit silencieux mais lourd :
9f9ad9b — kernel: v0.7.0 — ADR-014 ancré, kerneluser, zone BSI mapping, délégation human-only
kerneluser. Le concept qui dit : sur cette machine, il y a un propriétaire. Le brain sait qui il sert. Les zones sont mappées — kernel, project, personal. La délégation est human-only : certaines choses, aucun agent ne peut les décider seul.
À 22h01, le kernel est verrouillé — kernel.lock, 79 fichiers. Un firewall interne. Le brain ne se protège plus seulement des fuites de secrets. Il se protège de lui-même.
À 22h56, un champ optionnel apparaît dans le schema BSI : user_id. Le brain vient de poser la première brique du multi-user. Il ne le sait pas encore, mais ce champ deviendra le fondement du BaaS.
À 23h29, l’avant-dernier commit de la journée : sync-template.sh. Le premier script qui copie le brain en excluant ce qui est privé. Le premier geste vers la distribution.
139 commits. Le brain a commencé la journée comme un dossier de fichiers markdown. Il la termine avec une base de données, un moteur de recherche sémantique, un serveur API live sur internet, un protocole MCP, un système de distillation de mémoire, un BSI à huit versions, un kernel verrouillé, et le premier script de template.
Le titre dit “la nuit où le brain s’est armé”. Ce n’était pas qu’une nuit. Et ce n’était pas que de la défense. Le brain s’est armé de capacités — il a appris à chercher, à répondre, à se mettre en ligne, à oublier intelligemment, et à se protéger de lui-même. Tout ça le même jour.
Le 16 mars 2026 est le jour où le brain est devenu vivant.
Ce qui a été construit
Infrastructure cognitive :
- SQLite brain state engine — 6 tables, 5 vues, 44 claims migrés (
1a25397, 01:44) - Pipeline embeddings —
embed.py, nomic-embed-text, chunking (a312461, 03:04) — 1 205 fragments indexés au déploiement (1658ef0, 16:55) - Recherche sémantique —
search.py+ intégration helloWorld (4e9479d, 13:53) - RAG layer — retrieval-augmented generation, 82 tests (
0ed8d99, 15:12) - Brain-as-a-Service — server.py, API FastAPI, 101 tests (
2ed1ec9, 15:26) - VPS deploy — systemd, install script, 108 tests (
8b0ce57, 15:42) - brain.tetardtek.com LIVE — vhost + SSL + smoke test (
fa69c79, 17:04) - MCP server — brain_search + brain_boot, port 7701 (
42d7439, 17:48) - Distillation mémoire — mistral:7b, 3 chunks/session, lang-aware (
ba2920a, 19:44)
Sécurité et gouvernance :
- Patch OSINT — garde-fou reconnaissance passive, ADR-013 (
66746ef, 01:59) - secrets_check — validateur zero-exposure SHA256 (
4a085cc, 19:18) - kernel v0.7.0 — kerneluser, zone mapping, délégation human-only (
9f9ad9b, 21:52) - kernel.lock — 79 fichiers verrouillés (
b9b2241, 22:01)
BSI v3 (21:01→22:42) :
- v3-1 hiérarchie satellite · v3-2 contrat résultat · v3-3 exit triggers · v3-4 workflows thématiques · v3-5 tiered-close · v3-6 theme branch strategy · v3-7 rendering (mutex fichiers) · v3-8 pre-flight
Premières briques distribution :
- user_id optionnel dans schema BSI — première brique multi-user (
863a053, 22:56) - sync-template.sh — premier script template avec exclusions (
fc1923a, 23:29)
Décisions clés
Sécurité par défaut, pas par convention. Le garde-fou OSINT est inscrit dans l’agent permanent, déclenché automatiquement. ADR-013 acte que la mémoire fine d’infrastructure combinée aux capacités réseau constitue un profil de reconnaissance qui nécessite une confirmation humaine explicite, sans exception.
BSI comme protocole vivant. Huit versions en moins de deux heures — chaque version livrée par son propre protocole. Le BSI v3 ne s’est pas spécifié puis implémenté. Il s’est implémenté lui-même.
Le brain en ligne le jour 5. Pas “quand ce sera prêt”. Pas “quand les tests seront complets”. Le jour 5. La décision de ne pas attendre la perfection pour se mettre en ligne est aussi une décision architecturale — le feedback réel bat la spécification théorique.
La distillation comme hygiène cognitive. Le brain ne garde pas tout. Il distille — trois chunks par session, le résidu utile. Oublier intelligemment est une capacité, pas un défaut.
Le kernel se verrouille tôt. 79 fichiers lockés le jour 5. La protection n’est pas arrivée quand le système était stable — elle est arrivée pendant qu’il se construisait. C’est le bon moment.