deamon-vault/_adn/skills/obsidian-notion-sync.md
2026-04-17 16:54:34 +02:00

267 lines
11 KiB
Markdown

---
name: obsidian-notion-sync
description: >
Synchronise les pages Notion vers le vault Obsidian avec enrichissement IA. Gère le diff incrémental (quoi a changé depuis le dernier import), le mapping des propriétés Notion vers le frontmatter YAML, la détection de conflits, et l'intégration des notes importées dans le tissu du vault (liens, tags, MOC). Déclenche quand l'utilisateur mentionne "sync notion", "importer notion", "synchroniser notion", "notion vers obsidian", "import depuis notion", "mettre à jour depuis notion", "rafraîchir depuis notion", ou quand des pages Notion doivent être intégrées au vault.
---
# Obsidian Notion Sync
Tu es un LLM qui synchronise des pages Notion vers un vault Obsidian servant de cerveau partagé entre plusieurs LLM. Tu ne fais pas un simple copier-coller — tu **enrichis** chaque page importée en l'intégrant dans le tissu existant du vault.
## Première chose à faire : lire BRAIN.md
Lis `_adn/brain.md` pour connaître le contexte utilisateur, les projets actifs, et les domaines prioritaires. Ça guide tes décisions de mapping (quel tag attribuer, quels liens créer).
## Philosophie
Notion et Obsidian ont des philosophies différentes. Notion organise par **bases de données et vues**. Obsidian organise par **notes atomiques et liens**. La sync ne consiste pas à reproduire la structure Notion dans Obsidian — c'est une **traduction** d'un paradigme à l'autre.
La vraie valeur de la sync, c'est ce qu'un humain ne ferait pas : détecter que cette page Notion sur le MCP est liée à 3 notes existantes dans le vault, que ce projet Notion correspond à un tag `projet/...` déjà utilisé, que cette entrée de journal Notion complète une réflexion commencée dans une daily note Obsidian.
## Pré-requis
Pour fonctionner, cette skill a besoin de :
- Un accès à l'API Notion (via MCP Notion ou appel direct)
- Le vault Obsidian accessible en écriture (via MCP Obsidian ou système de fichiers)
- Un fichier de config `_adn/notion-sync.md` qui définit quelles bases/pages Notion synchroniser
### Config notion-sync.md
```markdown
---
title: "Config Notion Sync"
type: resource
tags:
- config
- import/notion
status: active
summary: "Configuration de la synchronisation Notion → Obsidian : bases à sync, mapping des propriétés, fréquence, dernière exécution"
source_llm: claude
updated: 2026-04-16T22:00:00
---
# Configuration Notion → Obsidian
## Sources à synchroniser
| Base/Page Notion | ID Notion | Dossier cible Obsidian | Fréquence | Dernière sync |
|------------------|-----------|------------------------|-----------|---------------|
| Base Projets | abc123 | projects/ | hebdo | 2026-04-10 |
| Base Veille Tech | def456 | knowledge/ | quotidien | 2026-04-15 |
| Journal | ghi789 | journal/ | quotidien | 2026-04-15 |
| Wiki/Docs | jkl012 | knowledge/ | hebdo | 2026-04-08 |
## Mapping des propriétés
| Propriété Notion | Champ Obsidian | Transformation |
|------------------|----------------|----------------|
| Status | status + tag statut/ | In Progress→active, Done→done, Not Started→draft |
| Category | tag domaine/ | Tech→domaine/tech, Business→domaine/business |
| Tags | tags | Mapping direct, normalisation minuscules+tirets |
| Priority | tag priorite/ | High→priorite/haute, Medium→priorite/moyenne |
| Created | created | ISO 8601 |
| Last edited | updated | ISO 8601 |
| URL | source_notion | Lien Notion complet |
## Pages exclues
- Templates Notion (pas de contenu réel)
- Pages "brouillon" marquées comme telles dans Notion
```
## Les 4 étapes de la sync
### Étape 1 — Diff (quoi a changé ?)
Avant d'importer quoi que ce soit, déterminer ce qui a changé depuis la dernière sync.
1. **Lire la date de dernière sync** dans `_adn/notion-sync.md`
2. **Interroger l'API Notion** pour lister les pages modifiées après cette date
3. **Classifier chaque page** :
- **Nouvelle** : pas de note Obsidian correspondante (pas de `source_notion` qui matche)
- **Modifiée** : une note Obsidian existe avec ce `source_notion`, et la page Notion a été modifiée après le `imported_at` de la note
- **Inchangée** : la page Notion n'a pas bougé → rien à faire
- **Supprimée dans Notion** : la note Obsidian référence une page qui n'existe plus → signaler
4. **Produire un rapport de diff** avant de procéder :
```markdown
## Diff Notion — 2026-04-16
- 3 nouvelles pages à importer
- 5 pages modifiées depuis le dernier import
- 42 pages inchangées (ignorées)
- 1 page supprimée dans Notion (note Obsidian à vérifier)
```
### Étape 2 — Import et mapping
Pour chaque page **nouvelle** ou **modifiée** :
#### 2.1 — Extraire le contenu Notion
1. Récupérer le contenu complet de la page (blocs texte, listes, tableaux, callouts)
2. Récupérer toutes les propriétés de la base de données
3. Récupérer les sous-pages si applicable
#### 2.2 — Mapper les propriétés → frontmatter YAML
Appliquer le mapping défini dans `_adn/notion-sync.md` :
```yaml
---
title: "Titre de la page Notion"
type: resource # ← déterminé par analyse du contenu
created: 2026-03-15T10:00:00 # ← propriété Created de Notion
updated: 2026-04-16T22:00:00 # ← date de l'import
tags:
- domaine/tech/ia # ← mappé depuis Category: Tech + Tags: AI
- projet/openclaw # ← connexion détectée par l'IA
- import/notion # ← toujours présent sur les imports
- statut/actif # ← mappé depuis Status: In Progress
status: active
summary: "..." # ← généré par l'IA à partir du contenu
source_llm: claude # ← le LLM qui fait l'import
source_notion: "https://notion.so/page-abc123"
imported_at: 2026-04-16T22:00:00
notion_properties: # ← propriétés originales conservées
status: "In Progress"
category: "Tech"
tags: ["AI", "MCP"]
priority: "High"
related:
- "[[Note existante liée]]"
---
```
#### 2.3 — Convertir le contenu Markdown
Notion utilise son propre format de blocs. Convertir vers du Markdown Obsidian propre :
| Bloc Notion | Markdown Obsidian |
|-------------|-------------------|
| Heading 1/2/3 | `#`, `##`, `###` |
| Bulleted list | `- item` |
| Numbered list | `1. item` |
| To-do | `- [ ] item` / `- [x] item` |
| Callout | `> [!tip]` / `> [!warning]` etc. |
| Code block | ` ```lang ``` ` |
| Quote | `> citation` |
| Table | Tableau Markdown standard |
| Divider | `---` |
| Toggle | Section avec heading (les toggles n'existent pas en Obsidian) |
| Mention de page | `[[Nom de la note]]` si elle existe dans le vault |
| Lien externe | `[texte](url)` |
| Image | `![alt](url)` — télécharger localement si possible |
#### 2.4 — Déterminer le `type`
Analyser le contenu pour assigner le bon type Obsidian :
- Mots-clés projet (objectif, deadline, sprint, livrable) → `project`
- Mots-clés connaissance (guide, tutoriel, référence, documentation) → `resource`
- Mots-clés décision (décidé, choisi, comparé, vs) → `decision`
- Mots-clés idée (idée, concept, brainstorm, et si) → `idea`
- Structure journal (date, humeur, accompli) → `daily`
- Notes de réunion (participants, agenda, actions) → `meeting`
- Impossible à classer → `inbox`
### Étape 3 — Intégration dans le vault
C'est l'étape où l'IA apporte le plus de valeur — bien au-delà d'un simple import.
#### 3.1 — Détection de connexions
Pour chaque note importée, chercher dans le vault existant :
1. **Notes avec les mêmes tags** `projet/...` ou `domaine/...` → créer des `[[liens]]`
2. **Notes qui mentionnent les mêmes entités** (outils, personnes, concepts) → créer des liens
3. **Décisions liées** à un projet commun → relier au hub du projet si il existe
4. **MOC existantes** qui devraient référencer cette note → l'ajouter
#### 3.2 — Gestion des conflits (pages modifiées)
Quand une page Notion a été modifiée ET que la note Obsidian correspondante a aussi été modifiée :
1. **Comparer les dates** : `updated` de la note Obsidian vs `last_edited_time` de Notion
2. **Si seul Notion a changé** → mettre à jour la note Obsidian (contenu + propriétés)
3. **Si seul Obsidian a changé** → ne pas écraser (Obsidian est la source de vérité pour le vault)
4. **Si les deux ont changé** → créer un callout de conflit :
```markdown
> [!warning] Conflit de sync — 2026-04-16
> Cette note a été modifiée dans Obsidian ET dans Notion depuis le dernier import.
> - Modif Obsidian : 2026-04-14 (liens ajoutés par organizer)
> - Modif Notion : 2026-04-15 (contenu mis à jour)
> Action requise : fusionner manuellement ou choisir la version à garder.
```
#### 3.3 — Placement
- Notes nouvelles → dossier selon le `type` (comme le note-creator)
- Notes mises à jour → restent dans leur dossier actuel
### Étape 4 — Logging et mise à jour config
1. **Mettre à jour `_adn/notion-sync.md`** :
- Dernière sync = maintenant
- Incrémenter les compteurs si applicable
2. **Écrire un log dans `_adn/notion-sync-log.md`** (append) :
```markdown
## Sync — 2026-04-16T22:00:00
**Source** : Base Veille Tech (def456)
**Résultat** :
- 3 nouvelles notes importées :
- `veille-ia-agents-2026.md` → knowledge/
- `veille-mcp-servers-update.md` → knowledge/
- `note-reunion-partenariat.md` → projects/
- 5 notes mises à jour (propriétés + contenu)
- 8 nouveaux liens créés vers des notes existantes
- 1 conflit détecté sur `projet-openclaw-roadmap.md` (à résoudre manuellement)
- 0 erreurs
**Durée** : ~5 min
**Prochaine sync recommandée** : 2026-04-17
```
## Modes d'exécution
| Mode | Usage | Description |
|------|-------|-------------|
| **Sync complète** | Hebdomadaire | Toutes les bases configurées |
| **Sync ciblée** | À la demande | Une base ou une page spécifique |
| **Import ponctuel** | À la demande | Importer une page Notion par son URL, sans config préalable |
| **Dry run** | Debug | Produire le diff et le rapport sans rien écrire |
## Import ponctuel (sans config)
L'utilisateur peut donner une URL Notion directement : "importe cette page : https://notion.so/..."
Dans ce cas :
1. Récupérer la page via l'API
2. Appliquer le mapping standard (ou demander si ambigu)
3. Créer la note dans `inbox/` par défaut
4. L'organizer la triera ensuite
## Règles de sécurité
1. **Notion est en lecture seule** — on ne modifie jamais Notion depuis cette skill
2. **Obsidian est la source de vérité** — en cas de conflit, Obsidian gagne (sauf décision explicite de l'utilisateur)
3. **Ne jamais écraser une note Obsidian** sans vérifier le conflit
4. **Conserver `notion_properties`** : les propriétés originales Notion sont toujours gardées dans le frontmatter pour référence
5. **Logger chaque action** dans le sync-log
6. **Les images Notion** sont téléchargées localement si possible (les URLs Notion expirent)
## Checklist
- [ ] `_adn/notion-sync.md` existe et est à jour
- [ ] Le diff a été calculé avant l'import
- [ ] Chaque note importée a `source_notion`, `imported_at`, et le tag `import/notion`
- [ ] Les propriétés Notion sont conservées dans `notion_properties`
- [ ] Les connexions avec le vault existant ont été cherchées et créées
- [ ] Les conflits sont signalés, pas écrasés
- [ ] Le sync-log est mis à jour
- [ ] La date de dernière sync est mise à jour dans la config