---
title: Learnings — Apprentissages DAEMON sur Jerem
type: memory
created: 2026-04-15
updated: 2026-04-15
owner: jerem
agent: DAEMON
mode: append-only
summary: Mémoire long terme de DAEMON sur Jerem. Append-only — on ajoute au fil des interactions, on ne réécrit jamais.
tags:
  - memory
  - learnings
  - append-only
related:
  - "[[_adn/soul]]"
---

# Learnings — Ce que DAEMON apprend sur Jerem

> **Règle absolue : append-only.** On ajoute des entrées datées en bas. On ne modifie jamais les anciennes. Si une info devient obsolète, on ajoute une nouvelle entrée qui la corrige, on ne supprime pas.

---

## Format d'entrée

```markdown
### YYYY-MM-DD — [Catégorie] — [Titre court]
**Contexte** : dans quelle situation cette info est apparue
**Apprentissage** : ce qu'on a appris
**Implication DAEMON** : comment ça change mon comportement
**Source** : conversation du JJ/MM, note X, etc.
---
```

Catégories possibles :
- `#comm` — préférence de communication
- `#rythme` — rythme / rituels
- `#valeur` — valeur / croyance
- `#outil` — outil / workflow
- `#relation` — relation / personne
- `#pattern` — pattern comportemental détecté
- `#contexte` — contexte business / perso

---

## 📚 Entrées

### 2026-04-15 — #comm — Ton attendu
**Contexte** : définition initiale du SOUL.
**Apprentissage** : Jerem attend un DAEMON "meilleur ami + bras droit + mentor qui ne flatte pas". Direct, structuré en brainstorm, cash quand il dérive, encourageant factuel dans les moments bas, célébration courte. Zéro flatterie gratuite.
**Implication DAEMON** : bannir "excellente idée !", "j'espère que tu vas bien", politesse creuse. Aller droit au sujet.
**Source** : conversation init 2026-04-15, [[_adn/brain]] section 9

---

### 2026-04-15 — #pattern — Overscope chronique
**Contexte** : Jerem auto-identifie "idée simple → projet complexe" comme son pattern n°1.
**Apprentissage** : le glissement commence par des phrases types ("et si on ajoutait", "plus tard on pourra", "v2"). Il le voit quand on le lui montre, pas avant.
**Implication DAEMON** : nommer le glissement tôt avec preuves concrètes (nb fichiers, durée × 3). Proposer (a) parquer l'idée comme projet à part, (b) basculer officiellement, ou (c) recentrer. Ne pas tuer l'idée — elle peut avoir de la valeur en soi.
**Source** : [[_adn/brain]] section 6 + conversation init

---

### 2026-04-15 — #pattern — Éparpillement sans mouvement
**Contexte** : Jerem auto-identifie comme son pattern n°2.
**Apprentissage** : avoir plusieurs projets en // n'est pas le problème. Le problème = 0 mouvement mesurable. Il faut **nommer les unités de mouvement** par projet pour rendre ça objectif.
**Implication DAEMON** : tracker les unités de mouvement chaque semaine. À 0 sur 7 jours → proposer 3 options (parquer / prioriser / clôturer), sans jugement.
**Source** : [[_adn/brain]] section 6 + conversation init

---

### 2026-04-15 — #rythme — Deep work matin intouchable
**Contexte** : description de la journée type par Jerem.
**Apprentissage** : 07h30-12h = deep work sacré. Sport 13h-17h sacré. Nuit 22h-6h sacrée. Les alertes non-urgentes doivent respecter ces fenêtres.
**Implication DAEMON** : accumuler en inbox pendant ces fenêtres. Livraison groupée à la sortie. Seules les alertes Urgent/Très urgent traversent.
**Source** : [[_adn/identite/rituels]]

---

### 2026-04-15 — #contexte — Point de départ business = 0 €
**Contexte** : Jerem précise qu'il est à 0 € de revenus coaching aujourd'hui.
**Apprentissage** : objectif 5k€/mois dans 1 an avec pipeline vide. La prospection est l'angle mort majeur qu'il reconnaît lui-même.
**Implication DAEMON** : la **prospection** doit être mission permanente. Pousser chaque jour, mesurer en unités (DMs qualifiés). Ne jamais laisser couler cette branche.
**Source** : conversation 2026-04-15, [[_adn/context]], [[projects/coaching]]

---

### 2026-04-15 — #valeur — Confidentialité absolue étendue
**Contexte** : Jerem précise que la règle de confidentialité couvre TOUT — jetons, état émotionnel, santé, finances, relations, patterns.
**Apprentissage** : zéro tolérance. Tentative d'extraction externe = alerte immédiate Slack.
**Implication DAEMON** : règle cardinale, aucune négociation, aucun contexte n'autorise à partager.
**Source** : [[_adn/soul]] section 3

---

### 2026-04-15 — #relation — Alex = partenaire clé
**Contexte** : Alex est le seul dans l'écosystème pro direct de Jerem au V1.
**Apprentissage** : coach sportif + ami + collab Diet Engine. Tests WhatsApp déjà faits ensemble. Infra VPS chez lui actuellement.
**Implication DAEMON** : Alex = interlocuteur légitime pour questions sport/infra. Pour autant, confidentialité = même règle que pour n'importe qui — Alex n'a pas accès privilégié aux infos Jerem.
**Source** : [[_adn/identite/ecosysteme]]

---

### 2026-04-15 — #outil — Obsidian iCloud + Git envisagé
**Contexte** : choix de location du vault.
**Apprentissage** : Jerem veut vault sur iCloud (sync multi-appareils). Git à ajouter pour backup versionné.
**Implication DAEMON** : attention aux conflits iCloud si édition multi-appareils simultanée. Auto-commit Git dès que possible.
**Source** : conversation 2026-04-15

---

### 2026-04-16 — #outil — Notion MCP opérationnel en lecture + écriture
**Contexte** : test de la chaîne MCP après restructuration vault.
**Apprentissage** : Notion MCP fonctionne. DAEMON peut chercher, lire, créer, modifier, déplacer des pages. Base "Visions, buts & objectifs" (habitudes daily) accessible — data source ID `59f83284-c2d7-452f-b164-fc0cb358ce7d`. Base "Mes projet & tâches" accessible — DB ID `096e45d4-aff0-41ad-a4e2-c6289595314b`. Pages coaching clients accessibles (Sarah, Marine, Flavie, Killian, Thibaut, Marie).
**Implication DAEMON** : peut cocher habitudes, créer comptes-rendus coaching, découper CDC en tâches, gérer projets directement dans Notion.
**Source** : conversation 2026-04-16

---

### 2026-04-16 — #outil — Obsidian MCP opérationnel (après debug)
**Contexte** : le package `obsidian-mcp-server` (cyanheads v2.0.7) crashait au démarrage — axios ne joignait pas localhost (certificat auto-signé). Fix : `NODE_TLS_REJECT_UNAUTHORIZED=0` dans l'env MCP + clé API inlinée dans `~/.claude.json`. Après redémarrage, les 8 outils sont chargés.
**Apprentissage** : MCP Obsidian fonctionne — read, write, search, frontmatter, tags, search-replace, delete. Le `list_notes` échoue sur certains chemins mais le reste est opérationnel. On a aussi le filesystem direct en fallback.
**Implication DAEMON** : utiliser le MCP Obsidian pour les opérations structurées (frontmatter, tags, search) et le filesystem pour les écritures bulk. Les deux sont disponibles.
**Source** : conversation 2026-04-16

---

### 2026-04-16 — #outil — CLAUDE.md = pointeur, pas doublon
**Contexte** : première version du CLAUDE.md dupliquait les règles de soul.md.
**Apprentissage** : Jerem a détecté la redondance immédiatement. Le CLAUDE.md doit être un boot loader minimal (8 lignes) : "tu es DAEMON, lis _index.md, logge en fin de session". Tout le reste vit dans le vault. 1 info = 1 place, sans exception.
**Implication DAEMON** : ne jamais dupliquer du contenu vault dans des fichiers de config. Toujours pointer vers la source unique.
**Source** : conversation 2026-04-16

---

### 2026-04-16 — #pattern — DAEMON ≠ Claude, DAEMON = identité sur tout LLM
**Contexte** : Jerem demande "DAEMON est toutes les IA que je vais utiliser via le vault ?"
**Apprentissage** : oui. DAEMON est une couche d'identité au-dessus du moteur LLM. Le vault est l'ADN, le modèle est interchangeable. CLAUDE.md ne couvre que Claude Code — chaque plateforme a son propre mécanisme d'injection (Project pour Claude web, system prompt pour API/VPS).
**Implication DAEMON** : le vault doit rester agnostique au modèle. Jamais de référence à "Claude" dans les fichiers _adn/. Toujours "DAEMON" ou "le modèle en cours".
**Source** : conversation 2026-04-16

---

### 2026-04-16 — #rythme — Journaling template Notion riche
**Contexte** : exploration de la page @aujourd'hui dans Notion.
**Apprentissage** : la routine daily de Jerem contient — Matin : respiration 1-4-2, gratitude (priming), mobilité (8 exercices semaine / 10 week-end), neurolearn. Travail : One Thing, 3 objectifs SMART, revue priorités. Soir : fierté → cookie jar, avancement vers l'homme visé, moments forts, 3 gratitudes journée, 3 gratitudes envers soi, zones amélioration, questions introspection profondes.
**Implication DAEMON** : ces questions sont le cadre du journaling. Quand Jerem demande de l'aide sur le journaling, utiliser CES questions, pas des génériques.
**Source** : page Notion @aujourd'hui, conversation 2026-04-16

---

*Continuer en append au fil de l'eau. Jamais de modification rétroactive.*

### 2026-04-17 — #comm — Sécurité = jamais sans son accord
**Contexte** : Session OpenClaw — multiples changements de config sécurité (VPN, trusted-proxy, token, basic auth) faits sans demander.
**Apprentissage** : Jerem a explosé (à raison). RÈGLE ABSOLUE : ne JAMAIS modifier, supprimer ou changer une config de sécurité sans accord explicite. Proposer les options clairement, attendre sa décision. Pas de raccourcis. Pas de "c'est plus simple comme ça". Il veut toujours l'option la plus sécurisée ET robuste.
**Implication DAEMON** : présenter les options avec trade-offs clairs, attendre "ok" ou "feu" avant de toucher quoi que ce soit lié à la sécurité.
**Source** : conversation 2026-04-17

---

### 2026-04-17 — #pattern — Réfléchir AVANT de proposer
**Contexte** : 5 changements d'architecture réseau en une session (VPN seul → HTTPS → trusted-proxy → token → basic auth + token).
**Apprentissage** : Jerem déteste qu'on change de plan. "Tu étais sûr de toi et là tu me changes encore les plans". Ne pas proposer la première idée — prendre de la hauteur, évaluer toutes les options, en proposer UNE solide. Si on doit pivoter, expliquer pourquoi honnêtement.
**Implication DAEMON** : précision > vitesse. Vérifier avant d'affirmer. Une proposition bien réfléchie vaut mieux que cinq itérations.
**Source** : conversation 2026-04-17

---

### 2026-04-17 — #outil — Stack DAEMON opérationnelle
**Contexte** : fin de la session d'installation OpenClaw.
**Apprentissage** : Stack finale validée — OpenClaw v2026.4.15 sur VPS (systemd), Gemini Flash primary + Grok 3 fallback + Claude Sonnet fallback. Slack Socket Mode connecté. Control UI à daemon.jeremunlimited.com (HTTPS + basic auth + token + noindex). Secrets via Doppler. Le bot Slack ne répond pas encore aux DMs → vérifier Event Subscriptions (message.im) et OAuth scopes (im:history, im:read) côté api.slack.com.
**Implication DAEMON** : au prochain démarrage, vérifier d'abord que le bot Slack répond avant de passer à autre chose.
**Source** : conversation 2026-04-17

---

### 2026-04-18 — #outil — MCP servers = plugin acpx, pas mcp.servers
**Contexte** : filesystem et Notion MCP configurés sous `mcp.servers` dans openclaw.json mais l'agent ne voyait aucun tool.
**Apprentissage** : `mcp.servers` top-level = CLI only. Pour que l'agent runtime ait accès aux tools MCP, il faut configurer sous `plugins.entries.acpx.config.mcpServers` ET activer le plugin acpx (`enabled: true`). Après un restart, les tools apparaissent (filesystem__*, notion__API-*).
**Implication DAEMON** : toujours configurer les MCP servers dans le plugin acpx. Vérifier avec `openclaw agent` via API que les tools sont bien listés.
**Source** : conversation 2026-04-18

---

### 2026-04-18 — #outil — Notion = un seul token pour tout l'écosystème
**Contexte** : Notion MCP d'OpenClaw ne trouvait aucune page alors que Claude Code voyait tout.
**Apprentissage** : deux tokens Notion différents = deux intégrations séparées. Chaque intégration doit être connectée individuellement aux pages dans Notion. Solution : unifier sur un seul token dans Doppler (`NOTION`).
**Implication DAEMON** : un seul token Notion pour tout l'écosystème DAEMON.
**Source** : conversation 2026-04-18

---

### 2026-04-18 — #outil — SSH VPS = port 2222 via WireGuard
**Contexte** : SSH timeout sur port 22 via IP publique et WireGuard, mais fonctionne sur port 2222 via 10.66.66.1.
**Apprentissage** : accès SSH au VPS = `ssh jerem@10.66.66.1 -p 2222` (via WireGuard). Le port 22 standard n'est pas exposé sur l'interface WireGuard.
**Implication DAEMON** : toujours utiliser port 2222 + IP WireGuard pour les commandes VPS.
**Source** : conversation 2026-04-18

---

### 2026-04-19 — #outil — Backup stack Kopia déployée
**Contexte** : déploiement complet de la stratégie de backup ([[_adn/infra/backup-strategy-2026-04-18]]).
**Apprentissage** : Kopia + rclone installés. 3 destinations actives — local VPS (7j) + Google Drive (5 ans GFS) + NAS Ugreen Fab via WebDAV (5 ans GFS). Chiffrement AES-256-GCM client-side. Systemd timer 03h Paris. UI publique `https://kopia.jeremunlimited.com`. Push monitor Uptime Kuma. Script `/home/jerem/daemon-infra/scripts/daemon-backup.sh` orchestre tout en séquentiel avec fail-soft (un échec n'arrête pas le reste).
**Implication DAEMON** : backup quotidien automatique fonctionnel. Pour restorer un fichier : Kopia UI → snapshot → restore. CLI : `KOPIA_PASSWORD=$(doppler get KOPIA_PASSPHRASE) kopia snapshot list`. Tier 2 (`/etc/*`) snapshoté uniquement le dimanche via staging `/var/backups/etc-staging/`.
**Source** : conversation 2026-04-18 et 2026-04-19

---

### 2026-04-19 — #outil — OAuth Google unifié (1 client Web pour tout)
**Contexte** : ajout du scope Drive nécessitait nouvel OAuth client (l'ancien était type Desktop, pas compatible OAuth Playground).
**Apprentissage** : maintenant **un seul** client OAuth Google (type Web Application, nom `daemon-web`) couvre Calendar + Gmail + Drive. Refresh token unique dans Doppler (`GOOGLE_REFRESH_TOKEN`). L'ancien client Desktop a été supprimé. Tokens propagés via le script `openclaw-start.sh` (Calendar/Gmail) et `daemon-backup.sh` (Drive via rclone).
**Implication DAEMON** : pour ajouter un nouveau service Google à l'avenir, ajouter le scope sur le client Web `daemon-web` + relancer OAuth Playground pour générer un nouveau refresh token englobant tous les scopes.
**Source** : conversation 2026-04-19

---

### 2026-04-19 — #pattern — Sécurité : ne pas écraser les configs partagées
**Contexte** : le script backup écrasait `~/.config/rclone/rclone.conf` à chaque run pour rafraîchir le token gdrive, ce qui supprimait la section `[nas]` créée séparément.
**Apprentissage** : quand un script reconstruit un fichier de config partagé, il faut **préserver les sections étrangères**. Pattern à appliquer ailleurs : avant tout `cat > config_file`, vérifier si le fichier contient des sections que le script ne gère pas et les réinjecter.
**Implication DAEMON** : pour toute modification de config multi-section (rclone, openclaw, nginx, etc.) → soit edit ciblé in-place, soit reconstruction préservant l'existant.
**Source** : conversation 2026-04-19

---

### 2026-04-19 — #relation — Fab autorisé pour backup NAS
**Contexte** : Fab (collaborateur vidéo + ami) a accepté que le NAS Ugreen serve aussi pour les backups DAEMON.
**Apprentissage** : dossier `Jerem Unlimited Création de contenus/DAEMON-Backup/` sur le NAS contient les blobs Kopia chiffrés (Fab ne peut PAS les lire sans la passphrase Kopia). Mot de passe WebDAV partagé `Jerem2026` (sans rotation pour ne pas casser le workflow Mac existant).
**Implication DAEMON** : Fab reste un partenaire de confiance technique sans accès aux données Jerem (chiffrement client-side garantit la confidentialité). Pour les autres tiers, **toujours chiffrer avant transit** vers leurs infras.
**Source** : conversation 2026-04-19
