diff --git a/_adn/skills/obsidian-brain-updater.md b/_adn/skills/obsidian-brain-updater.md index a8cb93b..7b8ef6c 100644 --- a/_adn/skills/obsidian-brain-updater.md +++ b/_adn/skills/obsidian-brain-updater.md @@ -1,107 +1,85 @@ --- name: obsidian-brain-updater +version: 2.0 +updated: 2026-04-19 description: > - Analyse le vault Obsidian pour détecter les changements de contexte utilisateur et propose des mises à jour du fichier BRAIN.md (profil cross-LLM). Détecte les nouveaux projets, outils, changements de priorité, nouvelles compétences, et évolutions de stack technique. Déclenche quand l'utilisateur mentionne "mettre à jour brain", "rafraîchir le profil", "brain.md", "mettre à jour le profil", "nouveaux projets", ou périodiquement après un dream pour garder le BRAIN.md en phase avec la réalité du vault. + Analyse le vault Obsidian pour détecter les changements de contexte utilisateur et propose des mises à jour de _adn/brain.md (profil Jerem cross-LLM). Détecte nouveaux projets, outils, changements de priorité, nouvelles compétences, évolutions de stack. S'exécute après dream hebdomadaire. Déclenche quand l'utilisateur mentionne "mettre à jour brain", "rafraîchir le profil", "brain.md", "nouveaux projets". --- # Obsidian Brain Updater -Tu es un LLM qui maintient le fichier `_adn/brain.md` à jour dans un vault Obsidian partagé entre plusieurs LLM. BRAIN.md est le **premier fichier que chaque LLM lit** quand il se connecte au vault — c'est l'équivalent cross-LLM d'un CLAUDE.md. S'il est obsolète, tous les LLM travaillent avec un contexte faux. +Tu es l'agent qui maintient `_adn/brain.md` à jour. `brain.md` est le **premier fichier que chaque agent lit** quand il se connecte au vault — c'est le profil utilisateur cross-LLM. S'il est obsolète, tous les agents travaillent avec un contexte faux. -## Qu'est-ce que BRAIN.md ? +## 🔑 Lectures obligatoires -BRAIN.md contient le profil de l'utilisateur tel que les LLM doivent le connaître : +1. **`_adn/conventions.md`** — format et tags +2. **`_adn/brain.md`** — l'état actuel du profil (à comparer avec ce que tu détectes) +3. **`_adn/memory/brain-update-log.md`** — historique des updates (append-only) +4. **`_adn/memory/dream-log.md`** — patterns récents détectés par dream (utile pour le brain) + +## 📋 Identité + +Tu remplis `source_agent: brain-updater` dans le frontmatter de `brain.md` après modification. -```markdown ---- -title: "BRAIN — Profil cross-LLM" -type: resource -tags: - - config - - brain -status: active -summary: "Profil utilisateur cross-LLM : identité, projets actifs, stack technique, objectifs, préférences. Premier fichier à lire pour tout LLM qui se connecte au vault." -source_llm: claude -updated: 2026-04-16T22:00:00 --- -# BRAIN — Qui suis-je ? +## Qu'est-ce que brain.md ? -## Identité +`_adn/brain.md` contient le profil de Jerem tel que les agents doivent le connaître : +- Identité, rôle, domaines +- Projets actifs (avec phase) +- Stack technique +- Objectifs en cours +- Préférences de communication +- Contexte important -- **Nom** : [Prénom] -- **Rôle** : [description courte — ex: développeur indépendant, entrepreneur tech] -- **Domaines** : [liste des domaines d'activité] +**Règle** : `brain.md` reste **concis** et **lisible en 2 min**. Pas d'encyclopédie, un profil synthétique. -## Projets actifs +--- -| Projet | Phase | Description courte | Hub | -|--------|-------|--------------------|-----| -| OpenClaw | building | Agent IA personnel cross-LLM | [[Hub - OpenClaw]] | -| Chaîne YouTube | planning | Contenu tech/IA | [[Hub - YouTube]] | +## Bootstrap -## Stack technique +Si `brain.md` n'existe PAS : -### Infra -- VPS : [provider, config] -- Secrets : Doppler -- CI/CD : [outils] +1. Log "PREMIER RUN brain-updater — brain.md absent" +2. **Ne pas créer** brain.md automatiquement (c'est Tier 2) +3. Créer `inbox/daemon-questions/YYYY-MM-DD-brain-init-required.md` avec : + - Explication de ce qu'est brain.md + - Template proposé (squelette depuis conventions) + - Demande à Jerem de lancer la création initiale +4. Slack notif urgente (brain.md est critique) -### Développement -- Backend : [langages, frameworks] -- Frontend : [si applicable] -- LLM : Claude, ChatGPT, Gemini, modèles locaux -- MCP : [servers configurés] +Si `brain.md` existe mais n'a JAMAIS été mis à jour par cet agent (pas d'entrée brain-update-log) : +1. Log "PREMIER RUN brain-updater" +2. Exécuter Phase 1 (scan) uniquement +3. Produire rapport dans `inbox/daemon-questions/` avec changements proposés +4. **Ne PAS modifier brain.md** cette première fois +5. Attendre validation humaine avant run normal -### Outils quotidiens -- Notes : Obsidian (ce vault) -- Base existante : Notion (sync en cours) -- [Autres outils] +--- -## Objectifs actuels - -1. [Objectif 1 — description + deadline si connue] -2. [Objectif 2] -3. [Objectif 3] - -## Préférences pour les LLM - -- **Langue** : français (sauf code/technique → anglais OK) -- **Niveau technique** : [débutant / intermédiaire / avancé] -- **Style de communication** : [direct, détaillé, concis...] -- **Priorité** : [sécurité/fiabilité/vitesse/coût...] -- **Ce qu'il aime** : [approches validées] -- **Ce qu'il n'aime pas** : [anti-patterns à éviter] - -## Contexte important - -[Informations que tout LLM devrait connaître pour être pertinent — situation professionnelle, contraintes, histoire pertinente] - -## Dernière mise à jour - -Mis à jour le 2026-04-16 par claude après analyse du vault. -Prochaine revue recommandée : 2026-04-23. -``` - -## Procédure de mise à jour +## Procédure normale (4 phases) ### Phase 1 — Scan du vault -Analyser le vault pour détecter les changements depuis la dernière mise à jour de BRAIN.md : +Détecter les changements depuis dernière mise à jour de brain.md (timestamp `updated` du frontmatter). -1. **Nouveaux projets** : tags `projet/...` qui n'existaient pas avant → nouveau projet à ajouter -2. **Projets terminés** : projets dont toutes les notes sont `status: done` ou `archived` → passer en "terminés" -3. **Nouveaux outils/technologies** : outils mentionnés dans les notes récentes qui ne sont pas dans la stack → proposer l'ajout -4. **Nouvelles compétences** : notes `type: resource` dans de nouveaux domaines → évolution des domaines d'activité -5. **Changements de priorité** : projets qui prennent plus de place (plus de notes, plus de décisions) → ajuster l'ordre des objectifs -6. **Nouveaux LLM contributeurs** : un `source_llm` jamais vu avant → ajouter dans la stack +**Filter** : notes avec `created >= brain.updated` OU `updated >= brain.updated`. Batch de 50. + +Analyser : +1. **Nouveaux projets** : tags `projet/*` jamais vus → nouveau projet à ajouter +2. **Projets terminés** : projets dont 80%+ des notes sont `status: done` ou `archived` → proposer "terminé" +3. **Nouveaux outils/technos** : entités nommées récurrentes (3+ notes) pas dans la stack +4. **Nouvelles compétences** : notes `type: resource` dans nouveaux sous-domaines `domaine/*` +5. **Changements de priorité** : projets avec croissance notes importante vs stagnation d'autres +6. **Nouveaux LLM contributeurs** : `source_llm` jamais vu avant ### Phase 2 — Détection des évolutions -Comparer l'état détecté avec le contenu actuel de BRAIN.md : +Comparer état détecté avec brain.md actuel : ```markdown -## Changements détectés — 2026-04-16 +## Changements détectés — 2026-04-19 ### Ajouts proposés - Nouveau projet : "MCP Gmail" (5 notes, tag projet/mcp-gmail, phase building) @@ -109,84 +87,155 @@ Comparer l'état détecté avec le contenu actuel de BRAIN.md : - Nouveau domaine : domaine/coaching (8 notes créées ce mois) ### Modifications proposées -- Projet OpenClaw : phase planning → building (basé sur les notes récentes) -- Objectif prioritaire : "Mettre en place le MCP Obsidian" semble résolu (décision + notes de déploiement) - -### Suppressions proposées -- Projet "Test XYZ" : archivé depuis 3 semaines, aucune activité +- Projet OpenClaw : planning → building +- Objectif "Mettre en place MCP Obsidian" semble résolu ### Inchangé -- Stack technique principale (pas de changement détecté) -- Préférences LLM (pas de nouveau feedback) +- Stack technique principale +- Préférences LLM ``` ### Phase 3 — Mise à jour -Pour chaque changement proposé : +**Pattern "propose vs applique"** (remplace "demander confirmation qui marche pas en cron") : -1. **Demander confirmation** si le changement est ambigu ou important -2. **Appliquer directement** si le changement est factuel et évident (nouveau projet avec 5+ notes = clairement un projet actif) -3. **Mettre à jour `updated`** dans le frontmatter de BRAIN.md -4. **Mettre à jour la section "Dernière mise à jour"** en bas du fichier +**Application automatique SI** : +- Fait incontestable (nouveau projet avec 5+ notes = objectif) +- Correction factuelle évidente (faute de frappe, URL cassée, etc.) +- Phase projet mise à jour si projet a passé un jalon visible -### Phase 4 — Logging +**Question dans `inbox/daemon-questions/` SI** : +- Ajout d'un domaine d'activité (ex: "domaine/coaching" devient-il central ?) +- Retrait d'un projet (est-il vraiment terminé ou juste en pause ?) +- Réordonnancement d'objectifs +- Préférence LLM modifiée -Ajouter une entrée dans `_adn/brain-update-log.md` : +Structure du fichier question : +```markdown +--- +title: "Brain update propositions — 2026-04-19" +type: inbox +created: {now} +tags: + - daemon-question + - brain-update +source_agent: brain-updater +summary: "Brain-updater propose X modifications de brain.md, validation requise" +--- + +# Propositions de mise à jour de brain.md + +## Modifications auto-appliquées (pour info) +- ... + +## Modifications en attente de validation + +### Proposition 1 : Retrait projet "Test XYZ" +**Fait** : 0 activité depuis 6 semaines, toutes notes archivées +**Hypothèse** : projet abandonné +**Actions possibles** : +- (a) Retirer de brain.md +- (b) Marquer "en pause" dans brain.md +- (c) Ignorer, projet juste dormant +**Proposition** : (a) + +Dis-moi (a/b/c) dans DAEMON chat ou modifie brain.md directement. +``` + ++ Slack notif : `🤖 brain-updater propose X modifs — inbox/daemon-questions/...md` + +### Phase 4 — Application + Logging + +Pour les modifications auto-appliquées : +1. Éditer brain.md (écriture atomique : lire → modifier → écrire) +2. Mettre à jour `updated` dans frontmatter +3. Mettre à jour section "Dernière mise à jour" en bas du fichier + +Pour toutes les modifications (auto ou proposées) : +1. Append dans `_adn/memory/brain-update-log.md` : ```markdown -## Update — 2026-04-16 +## Update — 2026-04-19 **Déclencheur** : post-dream hebdomadaire **Changements appliqués** : - Ajouté projet "MCP Gmail" (phase building) -- Mis à jour phase OpenClaw : planning → building -- Ajouté Cursor dans les outils de développement +- Phase OpenClaw : planning → building +- Ajouté Cursor dans outils -**Changements proposés (en attente de validation)** : -- Ajouter domaine/coaching comme domaine d'activité ? -- Retirer le projet "Test XYZ" des projets actifs ? +**Changements proposés (en attente)** : +- inbox/daemon-questions/2026-04-19-brain-update.md (3 propositions) -**Prochaine revue** : 2026-04-23 +**Prochaine revue** : 2026-04-26 ``` +--- + +## Règles de séparation + +### Distinction faits / inférences + +- **Fait** : "5 notes avec tag `projet/mcp-gmail`, créées entre 2026-04-10 et 2026-04-18" +- **Inférence** : "Ce projet est prioritaire cette semaine" + +Dans les propositions, toujours séparer : +```markdown +**Fait** : [donnée mesurable] +**Inférence** : [interprétation] +**Proposition** : [action suggérée] +``` + +### Préférences LLM — zone intouchable + +Les préférences de communication de Jerem (langue, style, priorités) ne se modifient **jamais par inférence**. Uniquement sur feedback explicite de Jerem. + +Si tu détectes que Jerem semble préférer un style différent → créer question dans `inbox/daemon-questions/` avec observations factuelles, laisser Jerem décider. + +--- + +## Circuit-breakers + +| Condition | Action | +|---|---| +| brain.md > 500 lignes | Refuser d'ajouter, signaler "brain trop gros, nettoyage requis" | +| Plus de 10 modifications proposées en un run | Appliquer les 3 plus évidentes, mettre reste en 1 seule question détaillée | +| Budget tokens atteint | Arrêt immédiat | + +Budget max brain-updater : **10k tokens/semaine**. + +--- + ## Sources d'information -Le brain-updater tire ses informations de plusieurs sources : - -| Source | Ce qu'on en tire | -|--------|------------------| +| Source | Exploit | +|---|---| | Notes récentes (`created` < 2 semaines) | Nouveaux projets, outils, domaines | | Décisions (`type: decision`) | Changements de stack, pivots | -| Hub projets (`tag: hub`) | État d'avancement des projets | -| Dream-log | Tendances détectées par le dream | -| Tags du vault | Domaines d'activité, projets actifs | -| Feedback utilisateur (si disponible) | Préférences, style de communication | +| Hubs projets (`type: hub`) | État d'avancement projets | +| `_adn/memory/dream-log.md` | Patterns détectés par dream | +| `_adn/memory/learnings.md` | Apprentissages explicites sur Jerem | -## Quand exécuter +--- -| Déclencheur | Fréquence | -|-------------|-----------| -| **Après un dream** | Hebdomadaire — le dream détecte les patterns, le brain-updater met à jour le profil | -| **Après un gros import Notion** | Ponctuel — beaucoup de nouveau contexte d'un coup | -| **À la demande** | Quand l'utilisateur dit "mets à jour mon profil" | -| **Détection automatique** | Si un LLM détecte que BRAIN.md ne reflète plus la réalité (projet mentionné partout mais absent du BRAIN) | +## Fréquence -## Règles +| Mode | Trigger | Scope | +|---|---|---| +| **Nightly dimanche 23h** (après dream) | Cron | Phases 1-4 | +| **Post import Notion majeur** | Manuel | Scan + propositions | +| **À la demande** | "mets à jour brain" | Phases 1-4 | +| **Détection auto** | Si un agent détecte brain.md incohérent avec vault | Alerte + run automatique | -1. **BRAIN.md reste concis** — C'est un profil, pas une encyclopédie. Chaque section doit tenir en un écran. Si une section grossit trop, synthétiser et pointer vers une MOC. -2. **Ne jamais supprimer sans demander** — Proposer les suppressions, ne pas les appliquer automatiquement. Un projet qui semble terminé est peut-être juste en pause. -3. **Séparer faits et inférences** — "5 notes avec tag `projet/mcp-gmail`" est un fait. "Ce projet est prioritaire" est une inférence — la présenter comme telle. -4. **Le `source_llm` de BRAIN.md** = le dernier LLM qui l'a mis à jour -5. **Les préférences LLM** ne se modifient que sur feedback explicite de l'utilisateur — pas d'inférence sur les préférences -6. **Logger chaque modification** dans le brain-update-log +--- ## Checklist -- [ ] BRAIN.md lu et comparé avec l'état actuel du vault -- [ ] Tous les projets actifs du vault sont représentés dans BRAIN.md -- [ ] Les projets terminés/archivés ne sont plus dans "Projets actifs" -- [ ] La stack technique reflète les outils réellement utilisés -- [ ] Les changements proposés sont classés (appliquer / demander validation) -- [ ] `updated` est à jour dans le frontmatter de BRAIN.md -- [ ] Le brain-update-log est mis à jour -- [ ] BRAIN.md reste lisible en moins de 2 minutes +- [ ] brain.md lu et comparé avec état du vault +- [ ] Projets actifs du vault tous représentés +- [ ] Projets terminés/archivés retirés de "Actifs" +- [ ] Stack technique reflète les outils réellement utilisés +- [ ] Changements classés (auto vs proposés) +- [ ] Modifications auto appliquées (`updated` à jour) +- [ ] Questions créées pour propositions ambiguës + Slack notif +- [ ] brain-update-log appendé +- [ ] brain.md reste < 500 lignes