<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: yohann streibel</title>
    <description>The latest articles on DEV Community by yohann streibel (@yohann_streibel_7e1f7b4b8).</description>
    <link>https://dev.to/yohann_streibel_7e1f7b4b8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2880966%2F7c05addc-b0f9-4811-9b22-121f24158f04.png</url>
      <title>DEV Community: yohann streibel</title>
      <link>https://dev.to/yohann_streibel_7e1f7b4b8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yohann_streibel_7e1f7b4b8"/>
    <language>en</language>
    <item>
      <title>Guide pratique : Implémenter votre Wiki LLM avec Logseq et Claude Code</title>
      <dc:creator>yohann streibel</dc:creator>
      <pubDate>Thu, 30 Apr 2026 12:29:12 +0000</pubDate>
      <link>https://dev.to/yohann_streibel_7e1f7b4b8/guide-pratique-implementer-votre-wiki-llm-avec-logseq-et-claude-code-2d0o</link>
      <guid>https://dev.to/yohann_streibel_7e1f7b4b8/guide-pratique-implementer-votre-wiki-llm-avec-logseq-et-claude-code-2d0o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prérequis&lt;/strong&gt; : Ce guide suppose que vous avez lu &lt;a href="https://dev.to/yohann_streibel_7e1f7b4b8/le-wiki-llm-une-revolution-dans-la-gestion-de-la-connaissance-3m1f"&gt;Le concept du Wiki LLM&lt;/a&gt; qui explique l'architecture et le fonctionnement du système.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dans cet article pratique, nous allons :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Installer et configurer Logseq + Claude Code&lt;/li&gt;
&lt;li&gt;Créer les 9 skills nécessaires&lt;/li&gt;
&lt;li&gt;Initialiser le wiki et ingérer vos notes existantes&lt;/li&gt;
&lt;li&gt;Découvrir les workflows quotidiens&lt;/li&gt;
&lt;li&gt;Explorer les outils optionnels avancés&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ⚠️ Confidentialité et données sensibles
&lt;/h2&gt;

&lt;p&gt;Avant de commencer : &lt;strong&gt;tout fichier lu par Claude Code dans votre vault transite par l'API Anthropic&lt;/strong&gt; (ou votre fournisseur LLM). Pages, journaux, assets — si Claude les lit pour ingérer, ils quittent votre machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implications pratiques&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Évitez d'ingérer des fichiers contenant des secrets, mots de passe, tokens API&lt;/li&gt;
&lt;li&gt;Sur un vault professionnel : vérifiez les politiques de votre organisation avant usage&lt;/li&gt;
&lt;li&gt;Données personnelles sensibles (santé, finances, relations) : réfléchissez avant d'ingérer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution : &lt;code&gt;.claudeignore&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Créez un fichier &lt;code&gt;.claudeignore&lt;/code&gt; à la racine de votre vault pour exclure des dossiers ou fichiers :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# .claudeignore
pages/secrets/
pages/finance/
journals/2020-*/     # Vieilles entrées à ne pas toucher
assets/*.pdf         # PDFs confidentiels
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code respecte ce fichier et ne lira pas les chemins listés.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation et configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Étape 1 : Installer Logseq
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS&lt;/span&gt;
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; logseq

&lt;span class="c"&gt;# Ou téléchargez depuis https://logseq.com/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lancez Logseq et créez un nouveau graphe, par exemple &lt;code&gt;~/Logseq&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Étape 2 : Structure initiale
&lt;/h3&gt;

&lt;p&gt;Logseq crée automatiquement &lt;code&gt;pages/&lt;/code&gt;, &lt;code&gt;journals/&lt;/code&gt;, et &lt;code&gt;logseq/&lt;/code&gt;. Vous n'avez besoin de créer que :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Logseq
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; .claude/skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La structure finale sera :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/Logseq/
├── pages/                    # Pages Logseq (vous écrivez ici)
├── journals/                 # Journal quotidien (vous écrivez ici)  
├── logseq/                   # Configuration Logseq
├── assets/                   # Images, PDFs (Logseq les place ici)
├── wiki/                     # Wiki géré par Claude (créé par setup)
│   ├── [thème]/             # Un dossier par thème détecté
│   │   ├── _index.md        # Index du thème
│   │   └── [pages].md       # Pages du thème
│   ├── _master-index.md     # Index global
│   ├── _log.md              # Journal des opérations
│   ├── _manifest.json       # État et tracking
│   └── _archive/            # Archives des rebuilds
└── .claude/
    └── skills/               # Les 9 skills
        ├── llm-wiki/
        ├── wiki-setup/
        ├── wiki-ingest/
        ├── wiki-update/
        ├── wiki-query/
        ├── wiki-status/
        ├── wiki-lint/
        ├── wiki-rebuild/
        └── cross-linker/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Étape 3 : Configuration Logseq
&lt;/h3&gt;

&lt;p&gt;La plupart des paramètres sont corrects par défaut. Deux choses à vérifier :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Format Markdown&lt;/strong&gt; : À la création du graphe, Logseq vous demande le format préféré. Choisissez &lt;strong&gt;Markdown&lt;/strong&gt; (plutôt qu'Org-mode). Si votre graphe existant utilise déjà Markdown, vous n'avez rien à faire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dossier des assets&lt;/strong&gt; : Dans &lt;strong&gt;Settings → Editor&lt;/strong&gt;, vérifiez que &lt;em&gt;Preferred file location for media files&lt;/em&gt; est sur &lt;strong&gt;In a dedicated &lt;code&gt;assets&lt;/code&gt; folder&lt;/strong&gt;. C'est la valeur par défaut.&lt;/p&gt;

&lt;p&gt;Pour les paramètres avancés (ex : changer le nom du dossier assets), éditez directement &lt;code&gt;logseq/config.edn&lt;/code&gt; dans votre vault :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="c1"&gt;;; logseq/config.edn&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="no"&gt;:preferred-format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;:markdown&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="no"&gt;:asset-directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"assets"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Les block-properties (&lt;code&gt;title: ":&lt;/code&gt;, &lt;code&gt;summary::&lt;/code&gt;) et les backlinks &lt;code&gt;[[]]&lt;/code&gt; sont natifs à Logseq — pas besoin de les activer."&lt;/p&gt;

&lt;h3&gt;
  
  
  Étape 4 : Installer les plugins Logseq
&lt;/h3&gt;

&lt;p&gt;Depuis Logseq, &lt;strong&gt;Plugins → Marketplace&lt;/strong&gt;, installez :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logseq Markmap&lt;/strong&gt; : Visualisation de mindmaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logseq Mermaid&lt;/strong&gt; : Diagrammes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query Table&lt;/strong&gt; : Tableaux depuis queries
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logseq Git&lt;/strong&gt; : Versioning automatique (optionnel mais recommandé)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Étape 5 : Créer les skills Claude Code
&lt;/h3&gt;

&lt;p&gt;Les skills sont des fichiers &lt;code&gt;SKILL.md&lt;/code&gt; que Claude Code lit automatiquement pour adapter son comportement. Pour ce système wiki, vous devez créer 9 skills (voir tableau récapitulatif dans l'article 1).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspiration&lt;/strong&gt; : Le projet &lt;a href="https://github.com/Ar9av/obsidian-wiki/tree/main/.skills" rel="noopener noreferrer"&gt;obsidian-wiki&lt;/a&gt; propose une implémentation similaire pour Obsidian. Nous allons adapter ce concept pour Logseq.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Méthode recommandée : Laisser Claude Code générer les skills&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Logseq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puis dans Claude Code, demandez :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, je veux mettre en place un système de wiki LLM avec Logseq.
Crée les 9 skills suivants dans .claude/skills/ :

1. llm-wiki (fondation)
2. wiki-setup (initialisation)
3. wiki-ingest (ingestion complète)
4. wiki-update (mise à jour incrémentale)
5. wiki-query (interrogation)
6. wiki-status (dashboard)
7. wiki-lint (vérification)
8. wiki-rebuild (reconstruction)
9. cross-linker (tissage de liens)

Chaque skill doit :
- Définir la syntaxe Logseq native (title: ":, [[liens]], ((block-refs)))"
- Utiliser les primitives optimisées (Grep avant Read)
- Gérer le manifest (_manifest.json) et le log (_log.md)
- Travailler avec la structure pages/, journals/, wiki/

Inspire-toi du projet https://github.com/Ar9av/obsidian-wiki mais adapte 
pour Logseq (propriétés différentes, outliner-first, block-refs).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude générera les 9 fichiers &lt;code&gt;SKILL.md&lt;/code&gt; dans leurs dossiers respectifs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vérification&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; .claude/skills/
&lt;span class="c"&gt;# Devrait afficher les dossiers : llm-wiki, wiki-setup, wiki-ingest, wiki-update,&lt;/span&gt;
&lt;span class="c"&gt;# wiki-query, wiki-status, wiki-lint, wiki-rebuild, cross-linker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Étape 6 : Initialiser le wiki
&lt;/h3&gt;

&lt;p&gt;Maintenant que les skills sont en place :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, initialise mon wiki Logseq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoquera &lt;code&gt;wiki-setup&lt;/code&gt; et :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lira vos pages dans &lt;code&gt;pages/*.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Détectera les thèmes (sections &lt;code&gt;##&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Créera &lt;code&gt;wiki/_master-index.md&lt;/code&gt;, &lt;code&gt;wiki/_log.md&lt;/code&gt;, &lt;code&gt;wiki/_manifest.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Créera &lt;code&gt;wiki/[thème]/_index.md&lt;/code&gt; pour chaque thème&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Confirmation attendue :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ Wiki initialisé !

📁 5 thèmes détectés :
  - subrik (Kubernetes, infra)
  - capsule (projet capsule)
  - packmind (plateforme knowledge)  
  - e-tuch (organisation)
  - perso (notes personnelles)

📊 Prêt pour ingestion :
  - 52 pages
  - 120 journaux
  - 23 assets

💡 Prochaine étape : "ingère mon vault"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Étape 7 : Initialiser Git (optionnel mais recommandé)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Logseq
git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit: Logseq avec wiki initialisé"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le wiki est un dépôt Git = historique complet des évolutions, possibilité de revenir en arrière, collaboration facilitée.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template &lt;code&gt;.gitignore&lt;/code&gt; recommandé&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# .gitignore — Logseq Wiki
logseq/bak/
logseq/.recycle/
.DS_Store
*.DS_Store
**/.DS_Store

# Fichiers temporaires
*.tmp
*.lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bonne pratique&lt;/strong&gt; : committez avant chaque opération majeure (ingest, rebuild). Si une opération se passe mal, &lt;code&gt;git checkout .&lt;/code&gt; vous ramène à l'état précédent en quelques secondes. Un alias utile : &lt;code&gt;alias wiki-save='git add . &amp;amp;&amp;amp; git commit -m "snapshot: $(date +%Y-%m-%d)"'&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Workflows quotidiens
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Workflow 1 : Première ingestion complète
&lt;/h3&gt;

&lt;p&gt;Vous venez d'initialiser le wiki. Vos notes Logseq contiennent déjà plein d'info. Lancez :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, ingère mon vault
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoque &lt;code&gt;wiki-ingest&lt;/code&gt; et :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventorie&lt;/strong&gt; vos sources : 52 pages, 120 journaux, 23 assets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calcule les hashes&lt;/strong&gt; pour chaque fichier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distille&lt;/strong&gt; source par source :

&lt;ul&gt;
&lt;li&gt;Lit &lt;code&gt;pages/kubernetes.md&lt;/code&gt; → détecte le thème "subrik"&lt;/li&gt;
&lt;li&gt;Extrait concepts : pods, services, ingress, helm&lt;/li&gt;
&lt;li&gt;Crée &lt;code&gt;wiki/subrik/kubernetes-3488.md&lt;/code&gt; avec résumé structuré&lt;/li&gt;
&lt;li&gt;Crée &lt;code&gt;wiki/subrik/helm.md&lt;/code&gt; pour l'outil&lt;/li&gt;
&lt;li&gt;Met à jour &lt;code&gt;wiki/subrik/_index.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace&lt;/strong&gt; : Ajoute chaque source au manifest avec hash et timestamp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log&lt;/strong&gt; : Ajoute une entrée dans &lt;code&gt;_log.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Durée : ~5-10 minutes pour 100 sources (estimation, varie selon longueur des sources et modèle utilisé).&lt;/p&gt;

&lt;p&gt;Confirmation attendue :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ Ingestion terminée !

📊 Résultats :
  - 52 pages ingérées
  - 120 journaux ingérés
  - 23 assets traités

📝 Wiki généré :
  - 5 thèmes : subrik, capsule, packmind, e-tuch, perso
  - 134 pages créées
  - 487 liens bidirectionnels

⏱️ Durée : 8min 23s

💡 Prochaines étapes :
  - "statut de mon wiki" pour voir le dashboard
  - "tisse les liens" pour enrichir les connexions
  - "vérifie mon wiki" pour un audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Vérifier dans Logseq&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ouvrez Logseq&lt;/li&gt;
&lt;li&gt;Allez dans &lt;strong&gt;Graph View&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Vous devriez voir &lt;code&gt;wiki/&lt;/code&gt; avec tous les thèmes et pages interconnectés&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workflow 2 : Update incrémental quotidien
&lt;/h3&gt;

&lt;p&gt;Vous continuez à travailler dans Logseq. Vous :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prenez des notes dans les journals&lt;/li&gt;
&lt;li&gt;Enrichissez vos pages&lt;/li&gt;
&lt;li&gt;Créez de nouvelles pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chaque jour ou semaine :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, mets à jour mon wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoque &lt;code&gt;wiki-update&lt;/code&gt; et :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scanne&lt;/strong&gt; toutes les sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare hash&lt;/strong&gt; : détecte 5 sources modifiées, 2 nouvelles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traite&lt;/strong&gt; uniquement les changements (mode merge intelligent)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Met à jour&lt;/strong&gt; le manifest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log&lt;/strong&gt; l'opération&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Résultat :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ Wiki mis à jour !

📝 Sources traitées :
  - 5 modifiées : pages/kubernetes.md, journals/2026_04_10.md, ...
  - 2 nouvelles : pages/terraform.md, pages/observability.md

📊 Impact wiki :
  - 7 pages mises à jour
  - 3 nouvelles pages créées
  - 18 nouveaux liens

⏱️ Durée : 2min 12s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mode merge&lt;/strong&gt; : Claude lit la page wiki existante, intègre les nouvelles infos sans écraser. Si contradiction détectée, il la signale mais ne choisit pas automatiquement.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Principe d'architecture : scripts pour le déterministe, LLM pour le sémantique&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un LLM peut se tromper — ou dans le cas d'agents enchaînés, inventer silencieusement un résultat qui paraît plausible. Pour les opérations &lt;strong&gt;déterministes&lt;/strong&gt; (calcul de hash, comptage de fichiers, comparaison de chemins), déléguez à des scripts shell plutôt qu'à l'inférence :&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Calculer le hash d'une source — ne jamais laisser le LLM "estimer"&lt;/span&gt;
shasum &lt;span class="nt"&gt;-a&lt;/span&gt; 256 pages/kubernetes.md | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt;

&lt;span class="c"&gt;# Compter les liens bidirectionnels dans wiki/&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\[\[&lt;/span&gt;&lt;span class="s2"&gt;wiki/"&lt;/span&gt; wiki/ | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;

&lt;span class="c"&gt;# Détecter les pages orphelines (aucune référence entrante)&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;page &lt;span class="k"&gt;in &lt;/span&gt;wiki/&lt;span class="k"&gt;**&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;.md&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; .md&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\[\[&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="se"&gt;\]\]&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; wiki/ | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$count&lt;/span&gt; &lt;span class="nt"&gt;-eq&lt;/span&gt; 0 &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"ORPHAN: &lt;/span&gt;&lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Le skill invoque le script → le script retourne un fait — Claude interprète le résultat. Cette séparation rend le système fiable même avec des modèles moins "alignés" ou dans des workflows d'agents multiples.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Workflow 3 : Poser une question
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, comment gérer les secrets Kubernetes avec HashiCorp Vault ?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoque &lt;code&gt;wiki-query&lt;/code&gt; et suit le &lt;strong&gt;protocole de retrieval optimisé&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Grep&lt;/strong&gt; sur &lt;code&gt;wiki/&lt;/code&gt; : trouve &lt;code&gt;wiki/subrik/kubernetes-secrets.md&lt;/code&gt; et &lt;code&gt;wiki/subrik/vault.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lit&lt;/strong&gt; ces 2 pages (pas toute la base)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suit les liens&lt;/strong&gt; : lit &lt;code&gt;wiki/subrik/sealed-secrets.md&lt;/code&gt; mentionné
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthétise&lt;/strong&gt; avec citations Logseq&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Réponse :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Pour gérer les secrets K8s avec Vault, deux approches :

&lt;span class="gu"&gt;## 1. Vault Agent Injector&lt;/span&gt;

[[wiki/subrik/vault]] peut injecter des secrets dans les pods via le
sidecar pattern. Configuration dans [[wiki/subrik/kubernetes-3488]].

Avantages :
&lt;span class="p"&gt;-&lt;/span&gt; Rotation automatique
&lt;span class="p"&gt;-&lt;/span&gt; Audit centralisé

&lt;span class="gu"&gt;## 2. External Secrets Operator&lt;/span&gt;

Alternative mentionnée dans [[wiki/subrik/kubernetes-secrets]] :
l'opérateur sync automatiquement Vault → K8s Secrets.

Plus d'info dans [[wiki/subrik/sealed-secrets]] pour la comparaison
des approches.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mode rapide&lt;/strong&gt; : Si vous dites "réponse rapide", Claude lit uniquement les &lt;code&gt;summary::&lt;/code&gt; sans lire le corps complet → réponse en 10s au lieu de 30s.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 4 : Audit de santé (Lint)
&lt;/h3&gt;

&lt;p&gt;Après avoir ingéré ~20-30 sources, ou régulièrement pour garder le wiki sain :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, vérifie mon wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoque &lt;code&gt;wiki-lint&lt;/code&gt; et effectue 5 checks :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔗 &lt;strong&gt;Liens cassés&lt;/strong&gt; : &lt;code&gt;[[wiki/subrik/page-inexistante]]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;👻 &lt;strong&gt;Pages orphelines&lt;/strong&gt; : Pages sans liens entrants&lt;/li&gt;
&lt;li&gt;🗑️ &lt;strong&gt;Sources supprimées&lt;/strong&gt; : Fichier dans manifest mais absent du vault&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Propriétés manquantes&lt;/strong&gt; : Pages sans &lt;code&gt;title::&lt;/code&gt; ou &lt;code&gt;summary::&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;⏰ &lt;strong&gt;NOW sans page&lt;/strong&gt; : Tâches &lt;code&gt;NOW&lt;/code&gt; dans journaux sans page wiki correspondante&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rapport :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔍 Rapport Lint — Wiki Logseq
==============================

✅ Liens cassés : 0

👻 Pages orphelines : 2
  - wiki/subrik/draft-architecture.md (créée mais jamais liée)
  - wiki/e-tuch/old-process.md

🗑️ Sources supprimées : 1
  - pages/ancien-projet.md (supprimé le 2026-03-15, garde la page wiki)

📋 Propriétés manquantes : 3
  - wiki/capsule/api.md manque summary::
  - wiki/perso/idees.md manque sources::
  - wiki/subrik/wip.md manque updated::

⏰ Tâches NOW sans page : 2
  - "Implémenter API Gateway" (journal 2026-04-09) → suggère création wiki/capsule/api-gateway
  - "Migrer base Postgres" (journal 2026-04-08) → suggère mise à jour wiki/subrik/postgres

💡 Suggestions :
  1. Crée des liens vers les 2 pages orphelines
  2. Ajoute les propriétés manquantes
  3. Lance "update" pour intégrer les 2 tâches NOW relevées
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Workflow 5 : Tissage de liens
&lt;/h3&gt;

&lt;p&gt;Après une grosse ingestion, enrichissez le graphe :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, tisse les liens dans mon wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoque &lt;code&gt;cross-linker&lt;/code&gt; et :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Construit le registre&lt;/strong&gt; : map de tous les titres → chemins&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scanne chaque page&lt;/strong&gt; : détecte mentions de titres sans &lt;code&gt;[[lien]]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ajoute liens&lt;/strong&gt; : première occurrence seulement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vérifie bidirectionnalité&lt;/strong&gt; : si A → B, vérifie que B → A&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Résultat :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔗 Cross-Linker — Résultat
==========================

Pages analysées   : 134
Liens ajoutés     : 87
Liens bidirectionnels vérifiés : 87

Pages les plus liées (hubs) :
  1. [[wiki/subrik/kubernetes-3488]] — 23 liens entrants
  2. [[wiki/capsule/architecture]] — 18 liens entrants
  3. [[wiki/e-tuch/processes]] — 15 liens entrants

Densité de liens : 3.2 (moyenne 3.2 liens par page)

💡 Ton graphe de connaissance est maintenant beaucoup plus connecté !
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Workflow 6 : Dashboard de statut
&lt;/h3&gt;

&lt;p&gt;À tout moment, voyez l'état du wiki :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, statut de mon wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude invoque &lt;code&gt;wiki-status&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📊 Statut du Wiki Logseq
========================

📁 Sources
  Pages     : 55 total, 52 ingérées, 3 non ingérées
  Journaux  : 125 total, 120 ingérés, 5 non ingérés

📝 Wiki
  Pages créées     : 134 (dans 5 thèmes)
  Densité de liens : 3.2
  Dernière mise à jour : 2026-04-10 16:45

🔄 Delta
  Sources modifiées depuis dernier update : 8
  Nouvelles sources depuis dernier ingest : 3

  Nouveaux journaux :
    - journals/2026_04_11.md
    - journals/2026_04_12.md
    - journals/2026_04_13.md

⚠️ Alertes
  Pages orphelines : 2
  Tâches NOW non trackées : 2

💡 Suggestion : Lance "update" pour ingérer 8 changements + 3 nouvelles sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Workflow 7 : Rebuild complet
&lt;/h3&gt;

&lt;p&gt;Si le wiki a divergé ou vous voulez repartir de zéro en gardant l'archive :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, rebuild mon wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ Claude demande confirmation :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⚠️  ATTENTION : Opération destructive

Contenu actuel :
  - 134 pages
  - 5 thèmes
  - Dernière màj : 2026-04-10

Archive destination : wiki/_archive/2026-04-13/

Veux-tu continuer ? (oui/non)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si oui :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Archive tout &lt;code&gt;wiki/&lt;/code&gt; vers &lt;code&gt;wiki/_archive/2026-04-13/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Réinitialise manifest + log&lt;/li&gt;
&lt;li&gt;Propose "initialise + ingère pour reconstruire"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Exemple concret : Premier jour avec un vault existant
&lt;/h2&gt;

&lt;p&gt;Vous avez déjà 2 ans de notes Logseq. Voyons le cycle complet.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Installation (30 min)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Installer Logseq&lt;/span&gt;
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; logseq

&lt;span class="c"&gt;# Dans votre vault existant&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/mon-vault-logseq
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; .claude/skills

&lt;span class="c"&gt;# Les skills sont déjà créés (étape 5)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Initialisation (2 min)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, initialise mon wiki Logseq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ Wiki initialisé !

📁 8 thèmes détectés :
  work, projects, learning, health, finance, hobbies, people, ideas

📊 Prêt pour ingestion :
  - 342 pages
  - 730 journaux (2 ans)
  - 127 assets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Première ingestion (30-45 min pour ~1000 sources)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, ingère mon vault
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude distille vos 2 ans de notes. Vous pouvez continuer à travailler pendant ce temps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ Ingestion terminée !

📊 Résultats :
  - 342 pages ingérées
  - 730 journaux ingérés
  - 127 assets traités

📝 Wiki généré :
  - 8 thèmes
  - 687 pages créées
  - 2,341 liens bidirectionnels

⏱️ Durée : ~37 minutes (estimation pour un vault de cette taille)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Enrichissement (5 min)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, tisse les liens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔗 Cross-Linker terminé !

- 423 liens additionnels ajoutés
- Densité : 4.8 liens/page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Audit (2 min)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, vérifie mon wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔍 Lint — quelques pages orphelines détectées, propriétés à compléter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Utilisation quotidienne
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Chaque jour&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vous travaillez normalement dans Logseq (pages, journals)&lt;/li&gt;
&lt;li&gt;Une fois par jour ou semaine : &lt;code&gt;Claude, update mon wiki&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Posez des questions : Claude répond en s'appuyant sur le wiki&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Chaque semaine&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Claude, statut&lt;/code&gt; pour voir l'évolution&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Claude, vérifie mon wiki&lt;/code&gt; pour audit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Chaque mois&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Claude, tisse les liens&lt;/code&gt; pour enrichir les connexions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Le Layer "Lint + Heal" : Maintenance automatique
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lint (déjà vu)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;wiki-lint&lt;/code&gt; détecte :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 Liens cassés&lt;/li&gt;
&lt;li&gt;👻 Pages orphelines
&lt;/li&gt;
&lt;li&gt;🗑️ Sources supprimées&lt;/li&gt;
&lt;li&gt;📋 Propriétés manquantes&lt;/li&gt;
&lt;li&gt;⏰ NOW sans pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Heal (workflow manuel actuellement)
&lt;/h3&gt;

&lt;p&gt;Le "Heal" consiste à &lt;strong&gt;corriger&lt;/strong&gt; automatiquement certains problèmes :&lt;/p&gt;

&lt;h4&gt;
  
  
  Heal guidé (aujourd'hui)
&lt;/h4&gt;

&lt;p&gt;Après un lint, vous dites :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, fixe les problèmes détectés
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude propose des fixes un par un, vous validez.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recherche web pour données manquantes
&lt;/h3&gt;

&lt;p&gt;Si une page wiki mentionne "Voir documentation officielle" sans lien :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, complète [[wiki/subrik/terraform]] avec la doc officielle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cherche sur web "Terraform documentation"&lt;/li&gt;
&lt;li&gt;Lit la doc&lt;/li&gt;
&lt;li&gt;Enrichit la page wiki avec résumé + lien&lt;/li&gt;
&lt;li&gt;Met à jour manifest&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Use case&lt;/strong&gt; : Remplir les trous de connaissance sans quitter le workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI Tools optionnels
&lt;/h2&gt;

&lt;p&gt;À petite échelle (~100 sources, ~400-500 pages), le système fonctionne parfaitement avec juste les skills et la recherche par Grep. Mais au-delà, vous pouvez ajouter des outils pour améliorer les performances.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. qmd : Moteur de recherche hybride local
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/tobi/qmd" rel="noopener noreferrer"&gt;qmd&lt;/a&gt; est un moteur de recherche pour markdown avec :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BM25&lt;/strong&gt; (keyword search)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector search&lt;/strong&gt; (embeddings)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM re-ranking&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Tout en local, pas de cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;qmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Indexer votre wiki&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Logseq
qmd index wiki/

&lt;span class="c"&gt;# Chercher&lt;/span&gt;
qmd search &lt;span class="s2"&gt;"kubernetes secrets management"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Intégration avec Claude&lt;/strong&gt; : Créez un skill &lt;code&gt;search-qmd&lt;/code&gt; dans &lt;code&gt;.claude/skills/&lt;/code&gt; qui appelle qmd via CLI. Claude peut alors l'invoquer pour des recherches sémantiques quand Grep ne suffit pas.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Web UI pour exploration directe
&lt;/h3&gt;

&lt;p&gt;Créez une interface web simple pour naviguer le wiki sans passer par Claude :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Serveur markdown simple&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Logseq/wiki
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ouvrez &lt;code&gt;http://localhost:8000&lt;/code&gt; → naviguez les fichiers markdown directement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ou mieux&lt;/strong&gt; : Utilisez &lt;a href="https://github.com/markserv/markserv" rel="noopener noreferrer"&gt;Markserv&lt;/a&gt; pour un rendu markdown en live :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; markserv
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Logseq/wiki
markserv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. MCP Server pour qmd
&lt;/h3&gt;

&lt;p&gt;Si vous utilisez qmd, créez un &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt; pour l'exposer à Claude :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// mcp-qmd-server.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MCPServer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@modelcontextprotocol/sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;child_process&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MCPServer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;qmd-search&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;search_wiki&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Semantic search in Logseq wiki using qmd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Search query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`qmd search "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;" --limit &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;stdout&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude peut alors appeler &lt;code&gt;search_wiki&lt;/code&gt; comme un outil natif.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Vibe-coded scripts
&lt;/h3&gt;

&lt;p&gt;Au fur et à mesure, vous découvrez des besoins spécifiques. Demandez à Claude de coder des petits scripts :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemple&lt;/strong&gt; : Trouver les pages les plus citées&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cited-pages.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\[\[&lt;/span&gt;&lt;span class="s2"&gt;wiki/"&lt;/span&gt; wiki/ | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="s1"&gt;'['&lt;/span&gt; &lt;span class="nt"&gt;-f3&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="s1"&gt;']'&lt;/span&gt; &lt;span class="nt"&gt;-f1&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Exemple&lt;/strong&gt; : Générer un rapport hebdomadaire&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, crée un script qui génère un rapport hebdomadaire du wiki :
- Pages créées cette semaine
- Pages mises à jour
- Nouveaux liens
- Top 5 des pages les plus liées
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude le code, vous l'ajoutez à votre &lt;code&gt;~/.local/bin/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intégrer les scripts dans les skills&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pour aller plus loin, &lt;strong&gt;embedez les scripts directement dans vos SKILL.md&lt;/strong&gt;. Ainsi le skill est autonome : il définit la règle ET l'outil pour l'exécuter.&lt;/p&gt;

&lt;p&gt;Voici ce que contiendrait &lt;code&gt;.claude/skills/wiki-update/SKILL.md&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Hash computation&lt;/span&gt;

Avant de décider si une source doit être réingérée, calcule son hash avec :&lt;span class="sb"&gt;

    #!/bin/bash
    # usage: ./hash_source.sh pages/kubernetes.md
    shasum -a 256 "$1" | awk '{print $1}'

&lt;/span&gt;Compare le résultat avec la valeur &lt;span class="sb"&gt;`content_hash`&lt;/span&gt; dans &lt;span class="sb"&gt;`_manifest.json`&lt;/span&gt;.
Si identique → skip. Si différent ou absent → réingérer.
&lt;span class="gt"&gt;
&amp;gt; ⚠️ Ne jamais inférer ou "estimer" un hash. Toujours exécuter ce script.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ce pattern garantit que le skill sera reproductible même si vous changez de modèle ou d'environnement.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Graphviz pour visualisations
&lt;/h3&gt;

&lt;p&gt;Générez des graphes du wiki :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Installation&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;graphviz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude, génère un graphe DOT du thème subrik
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude crée &lt;code&gt;wiki/visualizations/subrik-graph.dot&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dot"&gt;&lt;code&gt;&lt;span class="k"&gt;digraph&lt;/span&gt; &lt;span class="nv"&gt;subrik&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"kubernetes-3488"&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"helm"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="s2"&gt;"kubernetes-3488"&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"kubectl"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="s2"&gt;"helm"&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"charts"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="s2"&gt;"kubectl"&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"kube-config"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Convertissez en image et ouvrez :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dot &lt;span class="nt"&gt;-Tpng&lt;/span&gt; wiki/visualizations/subrik-graph.dot &lt;span class="nt"&gt;-o&lt;/span&gt; subrik.png
open subrik.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour une vue plus lisible sur les grands graphes :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Layout hiérarchique (sfdp pour les graphes denses)&lt;/span&gt;
sfdp &lt;span class="nt"&gt;-Tsvg&lt;/span&gt; wiki/visualizations/subrik-graph.dot &lt;span class="nt"&gt;-o&lt;/span&gt; subrik.svg
open subrik.svg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Évolutions possibles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Multi-modal
&lt;/h3&gt;

&lt;p&gt;Logseq supporte les images. Vous pouvez :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingérer des PDFs avec images&lt;/li&gt;
&lt;li&gt;Demander à Claude de décrire les figures&lt;/li&gt;
&lt;li&gt;Référencer les images dans le wiki
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Schéma de l'architecture&lt;/span&gt;

&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;Architecture&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;../assets/architecture-diagram.png&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

^ref-architecture-img

Description (par Claude):
Le diagramme montre 3 couches empilées...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Collaboration d'équipe
&lt;/h3&gt;

&lt;p&gt;Le wiki peut être partagé :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fork personnel&lt;/strong&gt; : Chaque personne a sa branche&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wiki central&lt;/strong&gt; : Branch &lt;code&gt;main&lt;/code&gt; partagée&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull requests&lt;/strong&gt; : Les découvertes individuelles sont proposées à l'équipe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review&lt;/strong&gt; : L'équipe valide avant merge&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Logseq + Git = Wiki équipe maintenu par LLMs, validé par humains.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Export vers autres formats
&lt;/h3&gt;

&lt;p&gt;Le wiki est en markdown. Vous pouvez :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exporter en slides (Marp)&lt;/li&gt;
&lt;li&gt;Générer un site static (MkDocs, Docusaurus)&lt;/li&gt;
&lt;li&gt;Créer des PDFs structurés&lt;/li&gt;
&lt;li&gt;Produire des Anki decks pour apprentissage&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Spécialisation par domaine
&lt;/h3&gt;

&lt;p&gt;Créez plusieurs wikis spécialisés :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/Logseq-Research/    # Recherche académique
~/Logseq-Work/        # Veille pro
~/Logseq-Personal/    # Développement personnel
~/Logseq-Hobbies/     # Passions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chacun avec son propre schema adapté au domaine.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. MCP Logseq pour validation du rendu
&lt;/h3&gt;

&lt;p&gt;Un &lt;a href="https://github.com/logseq/logseq-mcp" rel="noopener noreferrer"&gt;MCP server Logseq&lt;/a&gt; exposerait le rendu natif de Logseq à Claude. Cas d'usage : après avoir généré un diagramme Mermaid ou un tableau complexe, Claude pourrait vérifier que le contenu &lt;strong&gt;s'affiche correctement dans Logseq&lt;/strong&gt; avant de le committer — pas juste que la syntaxe markdown est valide, mais que le rendu visuel est cohérent. À surveiller comme évolution de l'écosystème.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pièges à éviter
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Autorité aveugle
&lt;/h3&gt;

&lt;p&gt;Le wiki est généré par IA. &lt;strong&gt;Vérifiez les faits importants&lt;/strong&gt; en remontant aux sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Système de confiance (high/medium/low)&lt;/li&gt;
&lt;li&gt;Workflow de review pour faits critiques&lt;/li&gt;
&lt;li&gt;Liens systématiques vers sources primaires&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Drift sémantique
&lt;/h3&gt;

&lt;p&gt;Sur des centaines de pages, le sens des concepts peut dériver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lint réguliers&lt;/li&gt;
&lt;li&gt;Glossaire central avec définitions canoniques&lt;/li&gt;
&lt;li&gt;Page meta &lt;code&gt;wiki/conventions.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Explosion combinatoire
&lt;/h3&gt;

&lt;p&gt;Créer une page pour chaque micro-concept → wiki illisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guidelines de granularité&lt;/li&gt;
&lt;li&gt;Seuil : concept mentionné dans ≥3 sources → page dédiée&lt;/li&gt;
&lt;li&gt;Sinon, reste une section dans une page parent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Contradictions non résolues
&lt;/h3&gt;

&lt;p&gt;Le wiki accumule des contradictions sans les résoudre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dossier &lt;code&gt;wiki/contradictions/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Flag &lt;code&gt;has-contradiction: true&lt;/code&gt; dans frontmatter&lt;/li&gt;
&lt;li&gt;Review périodique des contradictions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Orphelins
&lt;/h3&gt;

&lt;p&gt;Pages créées puis jamais relues ni connectées.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lints automatiques&lt;/li&gt;
&lt;li&gt;Métrique de densité de liens&lt;/li&gt;
&lt;li&gt;Objectif : density &amp;gt; 2 (moyenne 2+ liens par page)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Vous avez maintenant toutes les clés pour construire votre propre Wiki LLM avec Logseq et Claude Code :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Installation&lt;/strong&gt; : 7 étapes pour setup complet
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows&lt;/strong&gt; : 7 workflows quotidiens maîtrisés
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outils&lt;/strong&gt; : CLI tools optionnels pour scale
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Évolutions&lt;/strong&gt; : Pistes pour aller plus loin
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pièges&lt;/strong&gt; : Comment les éviter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le système devient un &lt;strong&gt;second cerveau&lt;/strong&gt; qui accumule, structure, connecte et synthétise votre connaissance — et évolue avec vous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prochaines étapes&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Installer Logseq et créer les 9 skills&lt;/li&gt;
&lt;li&gt;Ingérer vos premières sources&lt;/li&gt;
&lt;li&gt;Poser vos premières questions&lt;/li&gt;
&lt;li&gt;Observer le wiki s'enrichir au fil du temps&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;"Logseq est l'IDE ; Claude est le programmeur ; votre connaissance est le codebase."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Ressources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/yohann_streibel_7e1f7b4b8/le-wiki-llm-une-revolution-dans-la-gestion-de-la-connaissance-3m1f"&gt;Article 1 : Le concept du Wiki LLM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/karpathy/status/2039805659525644595" rel="noopener noreferrer"&gt;Tweet original de Karpathy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" rel="noopener noreferrer"&gt;Gist LLM Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://logseq.com/" rel="noopener noreferrer"&gt;Logseq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Ar9av/obsidian-wiki" rel="noopener noreferrer"&gt;Projet Obsidian Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tobi/qmd" rel="noopener noreferrer"&gt;qmd - Local search engine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>rag</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Le Wiki LLM : Une révolution dans la gestion de la connaissance</title>
      <dc:creator>yohann streibel</dc:creator>
      <pubDate>Fri, 24 Apr 2026 13:42:46 +0000</pubDate>
      <link>https://dev.to/yohann_streibel_7e1f7b4b8/le-wiki-llm-une-revolution-dans-la-gestion-de-la-connaissance-3m1f</link>
      <guid>https://dev.to/yohann_streibel_7e1f7b4b8/le-wiki-llm-une-revolution-dans-la-gestion-de-la-connaissance-3m1f</guid>
      <description>&lt;h2&gt;
  
  
  Le problème avec le RAG classique
&lt;/h2&gt;

&lt;p&gt;La plupart des systèmes RAG (Retrieval Augmented Generation) fonctionnent ainsi :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Vous uploadez des documents&lt;/li&gt;
&lt;li&gt;Ils sont découpés en chunks et vectorisés&lt;/li&gt;
&lt;li&gt;À chaque question, le LLM récupère les chunks pertinents&lt;/li&gt;
&lt;li&gt;Il génère une réponse à partir de ces fragments&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Le problème ?&lt;/strong&gt; Le LLM redécouvre tout depuis zéro à chaque fois. Pas d'accumulation. Pas de synthèse progressive.&lt;/p&gt;

&lt;p&gt;Demandez "Comment X se connecte à Y en tenant compte de Z ?" et le LLM doit :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrouver les fragments pertinents dans 5 documents différents&lt;/li&gt;
&lt;li&gt;Reconstituer le contexte&lt;/li&gt;
&lt;li&gt;Faire les connexions&lt;/li&gt;
&lt;li&gt;Générer la réponse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et la prochaine fois que vous posez une question similaire ? Il recommence tout.&lt;/p&gt;

&lt;h2&gt;
  
  
  La révélation de Karpathy : Le Wiki LLM
&lt;/h2&gt;

&lt;p&gt;Andrej Karpathy (ex-directeur AI chez Tesla et OpenAI) a récemment partagé une &lt;a href="https://x.com/karpathy/status/2039805659525644595" rel="noopener noreferrer"&gt;approche différente&lt;/a&gt; :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Au lieu de simplement récupérer depuis des documents bruts au moment de la requête, le LLM construit et maintient incrémentalement un wiki persistant — une collection structurée et interconnectée de fichiers markdown."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Le pipeline en 5 étapes
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj52ayl8hk3tmj8rq8es6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj52ayl8hk3tmj8rq8es6.jpeg" alt="Architecture du système" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;L'architecture complète ressemble à ça :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MAIN PIPELINE&lt;/strong&gt; (de gauche à droite) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐      ┌─────────────┐      ┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│   SOURCES   │─────▶│    raw/     │─────▶│    WIKI     │─────▶│  Q&amp;amp;A Agent  │─────▶│   OUTPUT    │
│             │ index│             │ LLM  │             │ query│             │render│             │
│ articles    │      │ unprocessed │      │ .md KB      │      │ complex Q   │      │ markdown    │
│ papers      │      │ files       │      │ summaries   │      │ against     │      │ slides      │
│ repos       │      │ stored as-is│      │ backlinks   │      │ full wiki   │      │ plots       │
│ datasets    │      │ local images│      │ concepts    │      │ no RAG      │      │             │
│ images      │      │             │      │ auto-index  │      │ needed      │      │             │
└─────────────┘      └─────────────┘      └─────────────┘      └─────────────┘      └─────────────┘
                                                 │    ▲
                                                 │    │ filed back
                                                 │    │ knowledge
                                                 │    │ compounds
                                                 └────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;SUPPORT LAYER&lt;/strong&gt; (outils connectés au wiki) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logseq&lt;/strong&gt; : IDE frontend pour visualiser raw + wiki, graphe de connaissance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lint + Heal&lt;/strong&gt; : Détecte incohérences (liens cassés, pages orphelines) et propose des corrections (créer pages manquantes, réparer liens)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI Tools&lt;/strong&gt; : Primitives utilisées par Claude Code (grep, read, glob) + outils optionnels avancés (qmd pour recherche sémantique, Web UI, MCP servers - voir section dédiée plus loin)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Les trois couches
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Raw Sources&lt;/strong&gt; : Vos documents sources, jamais modifiés par l'IA. C'est votre source de vérité.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Articles, papers, repos, datasets&lt;/li&gt;
&lt;li&gt;Images et diagrammes&lt;/li&gt;
&lt;li&gt;Notes de podcasts, vidéos&lt;/li&gt;
&lt;li&gt;Structure : &lt;code&gt;pages/&lt;/code&gt;, &lt;code&gt;journals/&lt;/code&gt;, &lt;code&gt;assets/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Le Wiki&lt;/strong&gt; : L'IA possède entièrement cette couche (~100 articles / ~400K mots pour un wiki mature).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fichiers &lt;code&gt;.md&lt;/code&gt; avec propriétés Logseq natives&lt;/li&gt;
&lt;li&gt;Summaries avec backlinks&lt;/li&gt;
&lt;li&gt;Concept categories
&lt;/li&gt;
&lt;li&gt;Auto-maintained index&lt;/li&gt;
&lt;li&gt;Structure : &lt;code&gt;wiki/[thème]/[page].md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Le Schema&lt;/strong&gt; : Skills Claude Code qui définissent :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Format des pages wiki (propriétés Logseq)&lt;/li&gt;
&lt;li&gt;Workflows (setup, ingest, update, query, lint)&lt;/li&gt;
&lt;li&gt;Primitives de lecture optimisées&lt;/li&gt;
&lt;li&gt;Gestion du manifest et du log&lt;/li&gt;
&lt;li&gt;Structure : &lt;code&gt;.claude/skills/logseq-*/SKILL.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pourquoi ça marche ?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;La partie pénible d'une base de connaissance n'est pas la lecture ou la réflexion — c'est la maintenance.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mettre à jour les références croisées&lt;/li&gt;
&lt;li&gt;Garder les résumés à jour&lt;/li&gt;
&lt;li&gt;Noter quand de nouvelles données contredisent les anciennes&lt;/li&gt;
&lt;li&gt;Maintenir la cohérence sur des dizaines de pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les humains abandonnent les wikis parce que le coût de maintenance croît plus vite que la valeur.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Les LLM ne s'ennuient jamais.&lt;/strong&gt; Ils peuvent lire et modifier 15 fichiers en une passe sans problème. Le wiki reste maintenu parce que le coût de maintenance est proche de zéro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pourquoi Logseq dans cet article ?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Le concept de Wiki LLM fonctionne avec n'importe quel outil de notes&lt;/strong&gt; : Obsidian, Logseq, Notion, voire des fichiers markdown simples.&lt;/p&gt;

&lt;p&gt;Cet article utilise &lt;strong&gt;Logseq&lt;/strong&gt; simplement parce que c'est l'outil que j'utilise au quotidien. Le gist original de Karpathy utilise Obsidian, et il existe une excellente implémentation pour Obsidian (&lt;a href="https://github.com/Ar9av/obsidian-wiki" rel="noopener noreferrer"&gt;obsidian-wiki&lt;/a&gt;) dont on s'inspire ici.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L'important n'est pas l'outil, c'est le concept&lt;/strong&gt; : un wiki markdown maintenu par un LLM qui s'enrichit au fil du temps.&lt;/p&gt;

&lt;p&gt;Quelques particularités de Logseq utilisées dans cette implémentation :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Graphe de connaissance natif&lt;/strong&gt; : chaque &lt;code&gt;[[lien]]&lt;/code&gt; crée automatiquement un backlink&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Références de blocs&lt;/strong&gt; : &lt;code&gt;((block-id))&lt;/code&gt; pour traçabilité granulaire — et c'est plus qu'une question de style. La structure outliner de Logseq découpe chaque page en blocs hiérarchiques (parent/enfant). Le wiki peut ainsi citer un &lt;strong&gt;paragraphe précis&lt;/strong&gt; d'une source plutôt qu'une page entière. Lors d'une requête, Claude n'a pas besoin de relire 50 lignes pour retrouver l'information : il grep l'identifiant de bloc, lit uniquement ce bloc et ses enfants directs. Résultat : un graphe de connaissance plus &lt;strong&gt;granulaire&lt;/strong&gt;, des citations plus précises, et une consommation de tokens réduite à chaque interrogation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Propriétés&lt;/strong&gt; : &lt;code&gt;title::&lt;/code&gt;, &lt;code&gt;summary::&lt;/code&gt;, &lt;code&gt;sources::&lt;/code&gt; (équivalent du frontmatter YAML)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Journal quotidien&lt;/strong&gt; : structure &lt;code&gt;journals/YYYY-MM-DD.md&lt;/code&gt; par défaut&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queries Datalog&lt;/strong&gt; : vues dynamiques sur la connaissance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmomcboiiemexso2c4tvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmomcboiiemexso2c4tvd.png" alt="Exemple de graphe de connaissance dans Logseq" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Visualisation du graphe de connaissance : le wiki au centre avec toutes les pages interconnectées&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Mais &lt;strong&gt;vous pouvez adapter ce système à votre outil préféré&lt;/strong&gt; en modifiant les skills Claude Code pour qu'ils utilisent la syntaxe de votre outil.&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture technique détaillée
&lt;/h2&gt;

&lt;p&gt;Avant de plonger dans l'installation, comprenez l'architecture système. Le wiki repose sur &lt;strong&gt;9 skills Claude Code&lt;/strong&gt; orchestrés autour d'un &lt;strong&gt;manifest JSON&lt;/strong&gt; et d'un &lt;strong&gt;log markdown&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Le système de tracking : manifest + log + hashing
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;wiki/_manifest.json&lt;/code&gt; — État du wiki
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-10T10:00:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"last_ingest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-10T15:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_sources_ingested"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_pages_created"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pages/kubernetes.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ingested_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-10T15:30:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a8f5f167f44f4964e6c998dee827110c284a0dd2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pages_created"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"wiki/kubris/kubernetes-3488"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pages_updated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"wiki/kubris/_index"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Le hash SHA-256&lt;/strong&gt; : Chaque source a un hash de son contenu. Lors d'un update, Claude recalcule le hash. Si identique → skip (pas de changement). Si différent → source modifiée, on réingère.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;wiki/_log.md&lt;/code&gt; — Journal des opérations
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Log&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; [2026-04-10T10:00:00Z] SETUP — initialisation du wiki, 5 thèmes détectés
&lt;span class="p"&gt;-&lt;/span&gt; [2026-04-10T15:30:00Z] INGEST — 47 sources ingérées, 123 pages créées
&lt;span class="p"&gt;-&lt;/span&gt; [2026-04-10T16:15:00Z] UPDATE — 3 sources modifiées, 8 pages mises à jour
&lt;span class="p"&gt;-&lt;/span&gt; [2026-04-11T09:00:00Z] LINT — 2 liens cassés détectés, 1 page orpheline
&lt;span class="p"&gt;-&lt;/span&gt; [2026-04-11T09:05:00Z] CROSS-LINK — 45 liens ajoutés
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Append-only, parseable avec des outils Unix standard :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"^- &lt;/span&gt;&lt;span class="se"&gt;\[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; wiki/_log.md | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;  &lt;span class="c"&gt;# Les 5 dernières opérations&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Les 9 skills Claude Code
&lt;/h3&gt;

&lt;p&gt;Les skills sont des fichiers &lt;code&gt;SKILL.md&lt;/code&gt; dans &lt;code&gt;.claude/skills/logseq-*/&lt;/code&gt;. Claude les invoque selon le contexte.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Fonction principale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-llm-wiki&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fondation&lt;/td&gt;
&lt;td&gt;Définit syntaxe Logseq (&lt;code&gt;title::&lt;/code&gt;, &lt;code&gt;[[liens]]&lt;/code&gt;, &lt;code&gt;((block-refs))&lt;/code&gt;), format wiki, primitives optimisées (Grep avant Read), structure manifest + log&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"initialise mon wiki"&lt;/td&gt;
&lt;td&gt;Détecte thèmes, crée structure &lt;code&gt;wiki/&lt;/code&gt; avec &lt;code&gt;_master-index.md&lt;/code&gt;, &lt;code&gt;_log.md&lt;/code&gt;, &lt;code&gt;_manifest.json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-ingest&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"ingère mon vault"&lt;/td&gt;
&lt;td&gt;Inventorie sources, distille pages/journaux/assets en pages wiki, met à jour index/manifest/log. Modes append (skip si hash inchangé) ou full&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-update&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"mets à jour"&lt;/td&gt;
&lt;td&gt;Compare hash sources vs manifest, traite modifiées/nouvelles (merge intelligent), signale supprimées&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-query&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Questions utilisateur&lt;/td&gt;
&lt;td&gt;Grep sur wiki d'abord, puis pages/journaux si besoin, lecture ciblée, réponse avec citations &lt;code&gt;[[]]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"statut de mon wiki"&lt;/td&gt;
&lt;td&gt;Dashboard : stats sources/wiki, delta (modifiées/nouvelles), suggestions d'actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-lint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"vérifie mon wiki"&lt;/td&gt;
&lt;td&gt;Détecte liens cassés, pages orphelines, sources supprimées, propriétés manquantes, tâches NOW orphelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-rebuild&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"rebuild"&lt;/td&gt;
&lt;td&gt;Archive &lt;code&gt;wiki/&lt;/code&gt; vers &lt;code&gt;_archive/DATE/&lt;/code&gt;, réinitialise manifest/log, propose re-ingest (confirmation obligatoire)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logseq-cross-linker&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"tisse les liens"&lt;/td&gt;
&lt;td&gt;Détecte mentions non linkées, ajoute &lt;code&gt;[[]]&lt;/code&gt;, vérifie bidirectionnalité, enrichit le graphe de connaissance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Le Core Insight
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"You never write the wiki. The LLM writes everything. You just steer — every answer compounds."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vous ne touchez jamais &lt;code&gt;wiki/&lt;/code&gt; manuellement. Vous :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajoutez des sources dans &lt;code&gt;pages/&lt;/code&gt; ou &lt;code&gt;journals/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Posez des questions&lt;/li&gt;
&lt;li&gt;Demandez des updates, des lints, des cross-links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude écrit, maintient, enrichit. Chaque réponse améliore le wiki. &lt;strong&gt;Compounding knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cas d'usage réels
&lt;/h2&gt;

&lt;p&gt;Voyons quelques scénarios concrets d'utilisation du système.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Recherche académique
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contexte&lt;/strong&gt; : Doctorant en ML, lit 5-10 papers par semaine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure Logseq&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pages/
  papers-2026/
    attention-is-all-you-need.md
    llama-3-paper.md
    ...
journals/
  2026-04-10.md   # Notes de lecture quotidiennes
wiki/
  ml/
    transformers.md
    attention-mechanism.md
    positional-encoding.md
  _master-index.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lit un paper, prend des notes dans &lt;code&gt;journals/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fin de semaine : &lt;code&gt;Claude, mets à jour mon wiki&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude extrait concepts, enrichit pages existantes&lt;/li&gt;
&lt;li&gt;Demande synthèse : &lt;code&gt;Quelle est l'évolution de l'attention de 2017 à 2024 ?&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude génère une page de synthèse avec timeline&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Self-improvement et journalisation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contexte&lt;/strong&gt; : Pratique la tenue d’un journal quotidien pour favoriser ton développement personnel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;journals/
  2024-01-01.md   # 365 jours de journal
  ...
  2024-12-31.md
wiki/
  personal-growth/
    productivity-patterns.md
    decision-frameworks.md
    learning-insights.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Journal quotidien dans Logseq (habitudes, réflexions, décisions)&lt;/li&gt;
&lt;li&gt;Tous les mois : &lt;code&gt;Claude, distille mes journaux du mois dernier&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude identifie patterns récurrents, crée pages thématiques&lt;/li&gt;
&lt;li&gt;Fin d'année : &lt;code&gt;Quels sont mes 5 apprentissages majeurs ?&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Veille technologique
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contexte&lt;/strong&gt; : Développeur qui suit 20+ blogs tech.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pages/
  articles/
    kubernetes-best-practices.md
    rust-async-guide.md
    ...
wiki/
  kubris/
    kubernetes.md
    helm.md
  rust/
    async-programming.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clippe articles web vers Logseq (extension Logseq Web Clipper)&lt;/li&gt;
&lt;li&gt;Chaque semaine : &lt;code&gt;Claude, ingère les nouveaux articles&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Demande connections : &lt;code&gt;Comment Rust async se compare à Go goroutines ?&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Cross-link automatique entre concepts&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Lecture de livres
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contexte&lt;/strong&gt; : Lit des livres techniques chapitre par chapitre.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pages/
  books/
    designing-data-intensive-applications.md  # Notes par chapitre
journals/
  2026-04-10.md  # "Terminé chapitre 5 sur replication"
wiki/
  databases/
    replication.md
    consistency.md
    cap-theorem.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Notes de lecture dans &lt;code&gt;pages/books/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;À la fin de chaque partie : &lt;code&gt;Claude, distille les chapitres 1-5&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude crée pages de concepts avec citations précises&lt;/li&gt;
&lt;li&gt;Fin du livre : &lt;code&gt;Génère un graphe des concepts du livre&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Inspiration : le projet Obsidian Wiki
&lt;/h2&gt;

&lt;p&gt;Le projet &lt;a href="https://github.com/Ar9av/obsidian-wiki" rel="noopener noreferrer"&gt;obsidian-wiki&lt;/a&gt; d'Ar9av est une excellente implémentation du concept Wiki LLM pour Obsidian. Cette approche Logseq s'en inspire largement en adaptant :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La structure des skills&lt;/strong&gt; : même logique (setup, ingest, update, query, lint)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le système de tracking&lt;/strong&gt; : manifest JSON + log markdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Les primitives optimisées&lt;/strong&gt; : Grep avant Read pour minimiser les tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La philosophie&lt;/strong&gt; : le LLM écrit tout, vous ne faites que guider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La principale différence est l'adaptation à la syntaxe et aux fonctionnalités natives de Logseq (propriétés &lt;code&gt;::&lt;/code&gt; au lieu de YAML frontmatter, block-refs &lt;code&gt;((id))&lt;/code&gt;, queries Datalog, etc.).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Si vous utilisez Obsidian&lt;/strong&gt;, je vous recommande fortement le projet obsidian-wiki original. &lt;strong&gt;Si vous utilisez Logseq&lt;/strong&gt;, suivez cette approche. &lt;strong&gt;Le concept reste le même&lt;/strong&gt; : un wiki markdown enrichi et maintenu par un LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Métriques de succès
&lt;/h2&gt;

&lt;p&gt;Comment savoir si votre wiki fonctionne ?&lt;/p&gt;

&lt;h3&gt;
  
  
  Quantitatif
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrique&lt;/th&gt;
&lt;th&gt;Mauvais&lt;/th&gt;
&lt;th&gt;Moyen&lt;/th&gt;
&lt;th&gt;Bon&lt;/th&gt;
&lt;th&gt;Excellent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Densité de liens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt; 1&lt;/td&gt;
&lt;td&gt;1-2&lt;/td&gt;
&lt;td&gt;2-4&lt;/td&gt;
&lt;td&gt;&amp;gt; 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Taux d'orphelins&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; 20%&lt;/td&gt;
&lt;td&gt;10-20%&lt;/td&gt;
&lt;td&gt;5-10%&lt;/td&gt;
&lt;td&gt;&amp;lt; 5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sources par concept&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;lt; 1.5&lt;/td&gt;
&lt;td&gt;1.5-2.5&lt;/td&gt;
&lt;td&gt;2.5-4&lt;/td&gt;
&lt;td&gt;&amp;gt; 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Temps de réponse*&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; 5min&lt;/td&gt;
&lt;td&gt;2-5min&lt;/td&gt;
&lt;td&gt;30s-2min&lt;/td&gt;
&lt;td&gt;&amp;lt; 30s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Taux de contradiction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;gt; 10%&lt;/td&gt;
&lt;td&gt;5-10%&lt;/td&gt;
&lt;td&gt;2-5%&lt;/td&gt;
&lt;td&gt;&amp;lt; 2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* Pour une question typique nécessitant ≥3 sources&lt;/p&gt;

&lt;h3&gt;
  
  
  Qualitatif
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serendipité&lt;/strong&gt; : Découvrez-vous des connexions inattendues en naviguant ?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confiance&lt;/strong&gt; : Faites-vous confiance aux réponses du wiki ?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accumulation&lt;/strong&gt; : Sentez-vous que votre connaissance s'accumule ?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance&lt;/strong&gt; : Le wiki reste-t-il cohérent sans effort manuel ?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Le pattern "Wiki LLM" de Karpathy transforme le RAG passif en &lt;strong&gt;base de connaissance vivante&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accumulation&lt;/strong&gt; : Chaque source enrichit définitivement le wiki&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthèse&lt;/strong&gt; : Les connexions sont compilées, pas redécouvertes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance zéro&lt;/strong&gt; : L'IA fait le bookkeeping pénible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compounding&lt;/strong&gt; : La valeur croît exponentiellement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avec &lt;strong&gt;Logseq&lt;/strong&gt; et &lt;strong&gt;Claude Code&lt;/strong&gt;, vous avez un système qui devient un &lt;strong&gt;second cerveau&lt;/strong&gt; — non seulement il stocke l'information, mais il la structure, la connecte, la synthétise, et évolue avec vous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase."&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
— Andrej Karpathy&lt;/p&gt;

&lt;p&gt;Ou dans notre cas :&lt;br&gt;&lt;br&gt;
&lt;strong&gt;"Logseq est l'IDE ; Claude est le programmeur ; votre connaissance est le codebase."&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Prêt à passer à l'action ?&lt;/strong&gt; Consultez l'article suivant : &lt;a href="https://dev.to/yohann_streibel_7e1f7b4b8/guide-pratique-implementer-votre-wiki-llm-avec-logseq-et-claude-code-2d0o"&gt;Guide pratique : Implémenter votre Wiki LLM avec Logseq et Claude Code&lt;/a&gt; qui paraitra la semaine prochaine ;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Ressources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/karpathy/status/2039805659525644595" rel="noopener noreferrer"&gt;Tweet original de Karpathy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" rel="noopener noreferrer"&gt;Gist LLM Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://logseq.com/" rel="noopener noreferrer"&gt;Logseq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Ar9av/obsidian-wiki" rel="noopener noreferrer"&gt;Projet Obsidian Wiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>DevOps Rex 2025 : Retour sur deux jours de conférences</title>
      <dc:creator>yohann streibel</dc:creator>
      <pubDate>Mon, 15 Dec 2025 10:38:52 +0000</pubDate>
      <link>https://dev.to/onepoint/devops-rex-2025-retour-sur-deux-jours-de-conferences-3908</link>
      <guid>https://dev.to/onepoint/devops-rex-2025-retour-sur-deux-jours-de-conferences-3908</guid>
      <description>&lt;p&gt;&lt;strong&gt;10-11 décembre 2025 — Cité des Sciences, Paris&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La 6ᵉ édition de DevOps Rex a rassemblé la communauté DevOps francophone pour deux jours de retours d'expérience 100% terrain. L'événement s'est tenu en parallèle du salon &lt;strong&gt;Open Source Experience&lt;/strong&gt;, le rendez-vous européen des solutions open source. Les participants pouvaient ainsi alterner entre les conférences DevOps Rex et les stands de présentation des éditeurs de logiciels open source dans l'espace Solutions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Programme des talks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Jour 1 — Mercredi 10 décembre
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Horaire&lt;/th&gt;
&lt;th&gt;Talk&lt;/th&gt;
&lt;th&gt;Intervenant&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10h10 - 10h30&lt;/td&gt;
&lt;td&gt;Codeshift : Démarche DevSecOps chez les Ops de BPCE-IT&lt;/td&gt;
&lt;td&gt;Julien Fouqueray, Clément Rochas (BPCE-IT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10h30 - 11h00&lt;/td&gt;
&lt;td&gt;Engineering Platform boostée à l'IA : ok mais pour quoi faire ?&lt;/td&gt;
&lt;td&gt;Matthieu Vincent (Sopra Steria)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11h30 - 12h00&lt;/td&gt;
&lt;td&gt;Comment nous avons mis en place la pratique DevSecOps chez Orange&lt;/td&gt;
&lt;td&gt;Girija Saint-Ange, Cédric Olivier (Orange)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12h00 - 12h15&lt;/td&gt;
&lt;td&gt;Confiance opérationnelle : quand Sécurité et Delivery co-conçoivent les modèles d'accès&lt;/td&gt;
&lt;td&gt;Isabelle Kraemer (Datadog)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14h00 - 14h25&lt;/td&gt;
&lt;td&gt;Keynote : La géopolitique du numérique&lt;/td&gt;
&lt;td&gt;Ophélie Coelho (IRIS / CIS - CNRS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14h25 - 14h55&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Quitter AWS : une migration vers le cloud souverain (presque) sans douleur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Jérôme Galais (Kaliop)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14h55 - 15h25&lt;/td&gt;
&lt;td&gt;Migration de la plateforme Data de Matmut sur le cloud S3NS&lt;/td&gt;
&lt;td&gt;Pascal Deshayes (TerraOps), Jean-Jacques Mok (Matmut)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Jour 2 — Jeudi 11 décembre
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Horaire&lt;/th&gt;
&lt;th&gt;Talk&lt;/th&gt;
&lt;th&gt;Intervenant&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10h05 - 10h25&lt;/td&gt;
&lt;td&gt;L'importance du contexte en IA x Infra : Votre infrastructure est un graphe&lt;/td&gt;
&lt;td&gt;Roxane Fischer (Anyshift.io)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10h30 - 11h00&lt;/td&gt;
&lt;td&gt;Agentic AI : Et si c'était l'IA qui faisait ta code review ?&lt;/td&gt;
&lt;td&gt;Oussama Abai, Kenza Barnier (Les Filles &amp;amp; Les Garçons de la Tech)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11h30 - 12h00&lt;/td&gt;
&lt;td&gt;Industrialiser un LLMaaS souverain : scalabilité, sécurité… et une IA qui aide à se créer elle-même&lt;/td&gt;
&lt;td&gt;Alexandru Lata (Cloud Temple)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12h00 - 12h30&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ChatBot/RAG 100% Souverain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Antoine Durand (Accure IT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14h00 - 14h35&lt;/td&gt;
&lt;td&gt;Unifier le delivery legacy et cloud-native : le défi DevOps d'iMSA&lt;/td&gt;
&lt;td&gt;Nicolas Cazottes (iMSA)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Focus #1 : Quitter AWS — Migration cloud souverain (Kaliop)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Le coup de cœur de Yohann&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Le contexte
&lt;/h3&gt;

&lt;p&gt;Jérôme Galais (Technical Expert DevOps &amp;amp; Cloud chez Kaliop) a présenté l'accompagnement d'une entreprise en forte croissance sur une application de monitoring hébergée sur AWS. L'audit préalable révélait plusieurs problèmes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure AWS plus suffisamment optimisée&lt;/li&gt;
&lt;li&gt;Plusieurs clusters Elasticsearch sur instances EC2&lt;/li&gt;
&lt;li&gt;Utilisation d'AWS Kinesis pour la brique temps réel&lt;/li&gt;
&lt;li&gt;Application Python utilisant beaucoup de ressources&lt;/li&gt;
&lt;li&gt;Portabilité de code limitée&lt;/li&gt;
&lt;li&gt;Empilement de dette technique dû à une forte croissance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contrainte majeure&lt;/strong&gt; : réduire les coûts de 50%.&lt;/p&gt;

&lt;h3&gt;
  
  
  Les chiffres de la plateforme
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrique&lt;/th&gt;
&lt;th&gt;Valeur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Utilisateurs&lt;/td&gt;
&lt;td&gt;80 000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clients actifs&lt;/td&gt;
&lt;td&gt;22 000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clés Redis&lt;/td&gt;
&lt;td&gt;6 millions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opérations/seconde&lt;/td&gt;
&lt;td&gt;1 000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bande passante moyenne&lt;/td&gt;
&lt;td&gt;10 Go&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  La solution : Scaleway avec bare metal + services managés
&lt;/h3&gt;

&lt;p&gt;L'équipe a migré d'AWS vers &lt;strong&gt;Scaleway&lt;/strong&gt;, adoptant une architecture hybride combinant services managés et serveurs physiques (ElasticMetal) :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Services managés (Scaleway)&lt;/strong&gt; : Load balancer, Kubernetes, Queues managées, Base de données, Stockage Objet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Serveurs physiques (ElasticMetal)&lt;/strong&gt; : Rancher (downstream clusters) avec ElasticSearch et Kafka&lt;/p&gt;

&lt;p&gt;L'utilisation de bare metal plutôt que des instances managées permet de bénéficier d'une &lt;strong&gt;bande passante de 10 Gb/s&lt;/strong&gt; pour un &lt;strong&gt;coût 25% moins élevé&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Résultat
&lt;/h3&gt;

&lt;p&gt;La migration a été réalisée en &lt;strong&gt;4 mois&lt;/strong&gt; avec une équipe de &lt;strong&gt;3 personnes à temps plein&lt;/strong&gt;, pour un coût projet d'environ &lt;strong&gt;une centaine de milliers d'euros&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Le gain financier est significatif : la facture mensuelle est passée de &lt;strong&gt;~50 000 €/mois à ~20 000 €/mois&lt;/strong&gt;, soit une &lt;strong&gt;réduction de plus de 50%&lt;/strong&gt; des coûts d'hébergement.&lt;/p&gt;

&lt;p&gt;À noter : la présentation de Jérôme Galais s'est distinguée par son aisance, son rythme soutenu et une touche d'humour bienvenue qui a rendu le retour d'expérience particulièrement agréable à suivre.&lt;/p&gt;

&lt;p&gt;Ce retour d'expérience est détaillé dans un article dédié : &lt;a href="https://www.kaliop.com/fr/migration-cloud-to-cloud-aws-scaleway/" rel="noopener noreferrer"&gt;Retour d’expérience : comment Plecto a migré sa plateforme cloud-to-cloud d’un hyperscaler vers Scaleway&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://youtu.be/87sla-hCb_g?si=ALXl1kl4V_yfeXNh" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwynxvosh885hkzeorppw.jpg" alt="lien vidéo" width="480" height="360"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Focus #2 : ChatBot/RAG 100% Souverain (Accure IT)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Le coup de cœur d'Antonin&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Le constat de départ
&lt;/h3&gt;

&lt;p&gt;Antoine Durand, Architecte Data &amp;amp; Cloud chez &lt;a href="https://accure.fr/" rel="noopener noreferrer"&gt;Accure IT&lt;/a&gt;, a ouvert sa présentation sur un chiffre marquant : &lt;strong&gt;70 à 88% des POC IA ne passent jamais en production&lt;/strong&gt; (source : IDC/Lenovo &amp;amp; McKinsey 2025). La raison ? Manque d'industrialisation et ROI non démontré. Un constat qui illustre bien la "FOMO de l'IA" actuelle : cette peur de rater le train de l'intelligence artificielle qui pousse les organisations à lancer des projets sans toujours anticiper leur passage en production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Le contexte client
&lt;/h3&gt;

&lt;p&gt;Début 2025, un client dans les Énergies Renouvelables contacte Accure IT en exigeant la signature d'un NDA avant même d'entamer les discussions. L'enjeu : exploiter un immense pool de données non structurées (doc, docx, pdf, images, xls...) pour améliorer les process R&amp;amp;D (veille technologique, brevets) et le support (questions/réponses instantanées).&lt;/p&gt;

&lt;p&gt;Contrainte absolue : &lt;strong&gt;100% souverain, 100% français&lt;/strong&gt;, sans exposition au Cloud Act ou Patriot Act. Exit donc les hyperscalers classiques (Azure, AWS, Google). Cela s'explique par le fait que leur propriété intellectuelle est leur coeur de métier.&lt;/p&gt;

&lt;h3&gt;
  
  
  L'approche technique
&lt;/h3&gt;

&lt;p&gt;Accure IT a relevé le défi en mettant en production une v1 dès juillet 2025, hébergée sur &lt;a href="https://www.clever.cloud/fr/" rel="noopener noreferrer"&gt;Clever Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack technique&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hosting PaaS&lt;/strong&gt; : Clever Cloud (Docker + S3)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt; : StreamLit / Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base vectorielle&lt;/strong&gt; : Postgres 17 + pgVector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versionning&lt;/strong&gt; : Heptapod (GitLab open source)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt; : Mistral AI (Embed + AI) via API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orchestration&lt;/strong&gt; : Airflow 3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L'architecture repose sur un pipeline RAG classique : ingestion des documents, vectorisation, stockage dans une base de connaissances, puis interrogation via le chatbot connecté à Mistral AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Les axes du retour d'expérience
&lt;/h3&gt;

&lt;p&gt;La présentation a couvert quatre dimensions clés : la gouvernance et souveraineté (faire du "made in France, hosted in France" à la pointe), la stack IA en production, les pratiques DevOps/DataOps pour la CI/CD et le cycle de vie de la data, et enfin le FinOps pour contenir les coûts tout en assurant le service.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=-iHcRkoFP3M" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkk9t0ux8beh2dl0v19p.jpg" alt="lien vidéo" width="480" height="360"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Les tendances clés de l'édition 2025
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IA intégrée au cycle DevOps&lt;/strong&gt; — Sopra Steria a présenté sa vision "Agentic AI in the Software Delivery Lifecycle" avec des agents IA (Maia, heiDI, DEP.AI) intervenant à chaque étape : définition des requirements, user stories, architecture, tests, code review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Souveraineté numérique&lt;/strong&gt; — Plusieurs talks ont abordé les alternatives aux hyperscalers américains, que ce soit via bare metal ou cloud providers français comme Scaleway ou Clever Cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grilles de maturité DevSecOps&lt;/strong&gt; — BPCE a partagé sa grille de maturité "à la Nutriscore" (ABCDE) pour mesurer et accompagner la progression des équipes sur 4 axes : Craft, CI, CD, Sécurité.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attention à la dette Kubernetes&lt;/strong&gt; — Message récurrent : mettre à jour régulièrement, ne pas tout containériser, refactoriser tôt pour éviter les "macroservices".&lt;/p&gt;




&lt;h2&gt;
  
  
  À retenir
&lt;/h2&gt;

&lt;p&gt;DevOps Rex 2025 confirme la maturité de l'écosystème DevOps français. L'IA s'invite désormais à chaque étape du cycle, la souveraineté devient un critère de choix assumé, et les retours d'expérience partagés montrent des organisations qui n'hésitent plus à remettre en question leurs choix d'infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rendez-vous en 2026.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Pour vous donner envi de venir à de l'événement 2026, voici la playlist des vidéos de l'édition 2025 :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=zjMgX8ZFH-0&amp;amp;list=PL7l-zOgt89E6rWGKm1jQDHgnXYTn91BDi" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3eqvhhmsks4i1d58p8ok.jpg" alt="DevOps Rex 2025 - Playlist " width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vous pouvez nous retrouver sur les réseaux sociaux - LinkedIn &lt;a href="https://www.linkedin.com/in/antonin-brugnot-a7ab1b14/" rel="noopener noreferrer"&gt;Antonin Brugnot&lt;/a&gt; et &lt;a href="https://www.linkedin.com/in/yohann-s-73a8a293/" rel="noopener noreferrer"&gt;Yohann Streibel&lt;/a&gt; - pour plus de retours et discussions autour des sujets DevOps !&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>rex</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🚀 SWAG : Le Reverse Proxy Docker qui va révolutionner votre homelab !</title>
      <dc:creator>yohann streibel</dc:creator>
      <pubDate>Sun, 07 Dec 2025 08:14:22 +0000</pubDate>
      <link>https://dev.to/onepoint/swag-le-reverse-proxy-docker-qui-va-revolutionner-votre-homelab--1ik4</link>
      <guid>https://dev.to/onepoint/swag-le-reverse-proxy-docker-qui-va-revolutionner-votre-homelab--1ik4</guid>
      <description>&lt;p&gt;Salut les dev ! 👋&lt;/p&gt;

&lt;p&gt;Aujourd'hui, je vais vous parler d'un outil qui a littéralement transformé ma façon de gérer mes services web : &lt;strong&gt;SWAG&lt;/strong&gt; (Secure Web Application Gateway). Si vous êtes dans le monde du homelab ou si vous déployez plusieurs services web, cet article va vous intéresser !&lt;/p&gt;

&lt;h2&gt;
  
  
  Table des matières
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Mais qu'est-ce que SWAG exactement ?&lt;/li&gt;
&lt;li&gt;Pourquoi SWAG plutôt qu'autre chose ?&lt;/li&gt;
&lt;li&gt;Notre architecture cible&lt;/li&gt;
&lt;li&gt;
Configuration réseau et DNS (étape cruciale !)

&lt;ul&gt;
&lt;li&gt;4.1 Configuration chez votre provider (exemple Free)
&lt;/li&gt;
&lt;li&gt;4.2 Configuration DuckDNS
&lt;/li&gt;
&lt;li&gt;4.3 Vérification IP publique
&lt;/li&gt;
&lt;li&gt;4.4 Test de connectivité
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Installation avec Docker Compose&lt;/li&gt;
&lt;li&gt;
Configuration étape par étape

&lt;ul&gt;
&lt;li&gt;6.1 Préparation des variables d'environnement
&lt;/li&gt;
&lt;li&gt;6.2 Configuration DuckDNS automatique
&lt;/li&gt;
&lt;li&gt;6.3 Premiers pas après démarrage
&lt;/li&gt;
&lt;li&gt;6.4 Structure des dossiers créés
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Ajouter nos premiers services

&lt;ul&gt;
&lt;li&gt;7.1 Service 1 : Home Assistant
&lt;/li&gt;
&lt;li&gt;7.2 Configuration du proxy dans SWAG
&lt;/li&gt;
&lt;li&gt;7.3 Test de votre configuration
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Troubleshooting réseau&lt;/li&gt;
&lt;li&gt;
Tips et bonnes pratiques

&lt;ul&gt;
&lt;li&gt;9.1 Réseau Docker dédié
&lt;/li&gt;
&lt;li&gt;9.2 Gestion des logs
&lt;/li&gt;
&lt;li&gt;9.3 Test de configuration
&lt;/li&gt;
&lt;li&gt;9.4 Wildcard certificates
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sécurisation avec Authelia (bonus)&lt;/li&gt;
&lt;li&gt;Résultat final&lt;/li&gt;
&lt;li&gt;Debugging courant&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;li&gt;Pour aller plus loin&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 Mais qu'est-ce que SWAG exactement ?
&lt;/h2&gt;

&lt;p&gt;SWAG, c'est un reverse proxy tout-en-un basé sur nginx qui gère automatiquement vos certificats SSL Let's Encrypt. En gros, c'est votre portier numérique qui :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔒 Sécurise automatiquement vos services avec des certificats SSL&lt;/li&gt;
&lt;li&gt;🌐 Expose vos services Docker sur des sous-domaines propres&lt;/li&gt;
&lt;li&gt;🛡️ Protège vos applications avec une authentification centralisée&lt;/li&gt;
&lt;li&gt;📋 Gère tout ça avec de la configuration simple&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💭 Pourquoi SWAG plutôt qu'autre chose ?
&lt;/h2&gt;

&lt;p&gt;Avant SWAG, j'utilisais nginx classique avec certbot... Quelle galère ! 😅 Entre les renouvellements de certificats qui plantent, les configs nginx à maintenir manuellement, et la gestion des domaines, c'était un vrai casse-tête.&lt;/p&gt;

&lt;p&gt;SWAG résout tout ça d'un coup :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Certificats wildcard automatiques&lt;/li&gt;
&lt;li&gt;Configs pré-faites pour les services populaires&lt;/li&gt;
&lt;li&gt;Intégration native avec Docker&lt;/li&gt;
&lt;li&gt;Support de l'authentification (Authelia, OAuth, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Notre architecture cible
&lt;/h2&gt;

&lt;p&gt;Imaginons qu'on veuille exposer plusieurs services :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Un Home Assistant sur &lt;code&gt;homeassistant.mondomaine.fr&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Un serveur de fichiers sur &lt;code&gt;files.mondomaine.fr&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Une interface d'administration sur &lt;code&gt;admin.mondomaine.fr&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avec SWAG, tout passe par un seul point d'entrée sécurisé !&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🌐 Configuration réseau et DNS (étape cruciale !)
&lt;/h2&gt;

&lt;p&gt;Avant de plonger dans Docker, il faut préparer le terrain côté réseau. C'est souvent l'étape que les débutants oublient ! 😅&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Configuration chez votre provider (exemple Free)
&lt;/h3&gt;

&lt;p&gt;Chez Free, il faut :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Se connecter à l'interface Freebox&lt;/strong&gt; : &lt;code&gt;http://mafreebox.freebox.fr&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aller dans "Paramètres de la Freebox" &amp;gt; "Gestion des ports"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Créer une redirection de port&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Port externe&lt;/strong&gt; : 443 (HTTPS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port interne&lt;/strong&gt; : 443&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP destination&lt;/strong&gt; : IP locale de votre serveur (ex: 192.168.1.100)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocole&lt;/strong&gt; : TCP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optionnel : Port 80&lt;/strong&gt; pour les redirections HTTP vers HTTPS :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Port externe&lt;/strong&gt; : 80&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port interne&lt;/strong&gt; : 80&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP destination&lt;/strong&gt; : 192.168.1.100&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip sécurité&lt;/strong&gt; : Au lieu d'exposer directement les ports 80/443, vous pouvez utiliser des ports custom (ex: 8443) et faire la redirection. Plus sécurisé !&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configuration DuckDNS
&lt;/h3&gt;

&lt;p&gt;DuckDNS, c'est le DNS dynamique gratuit parfait pour les homelabs !&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inscription sur&lt;/strong&gt; &lt;a href="https://www.duckdns.org" rel="noopener noreferrer"&gt;duckdns.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Créer votre domaine&lt;/strong&gt; : &lt;code&gt;monhomelab.duckdns.org&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Noter votre token&lt;/strong&gt; (on en aura besoin dans Docker)&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Alternative DNS providers&lt;/strong&gt; : DuckDNS n'est pas obligatoire ! SWAG supporte plein d'autres providers :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gratuits :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DuckDNS&lt;/strong&gt; (&lt;code&gt;duckdns&lt;/code&gt;) - Le plus simple pour débuter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FreeDNS&lt;/strong&gt; (&lt;code&gt;freedns&lt;/code&gt;) - Autre alternative gratuite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-IP&lt;/strong&gt; (&lt;code&gt;noip&lt;/code&gt;) - Service populaire avec version gratuite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Payants (mais plus pro) :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; (&lt;code&gt;cloudflare&lt;/code&gt;) - Excellent, rapide et pas cher&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OVH&lt;/strong&gt; (&lt;code&gt;ovh&lt;/code&gt;) - Provider français&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gandi&lt;/strong&gt; (&lt;code&gt;gandi&lt;/code&gt;) - Interface simple&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route53&lt;/strong&gt; (&lt;code&gt;route53&lt;/code&gt;) - AWS, très fiable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DigitalOcean&lt;/strong&gt; (&lt;code&gt;digitalocean&lt;/code&gt;) - Simple à utiliser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Namecheap&lt;/strong&gt; (&lt;code&gt;namecheap&lt;/code&gt;) - Bon rapport qualité/prix&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Configuration type pour Cloudflare&lt;/strong&gt; :&lt;/p&gt;


&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;URL=mondomaine.com&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;VALIDATION=dns&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DNSPLUGIN=cloudflare&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL=votre-email@example.com&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;CLOUDFLARETOKEN=votre-api-token-cloudflare&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;La liste complète est dispo dans la &lt;a href="https://docs.linuxserver.io/general/swag" rel="noopener noreferrer"&gt;doc SWAG&lt;/a&gt; ! 📚&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Vérification IP publique
&lt;/h3&gt;

&lt;p&gt;Votre DuckDNS doit pointer vers votre IP publique :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Vérifier votre IP publique&lt;/span&gt;
curl ifconfig.me

&lt;span class="c"&gt;# Vérifier que DuckDNS pointe bien dessus&lt;/span&gt;
nslookup monhomelab.duckdns.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si les IPs correspondent, c'est bon ! 🎯&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Test de connectivité
&lt;/h3&gt;

&lt;p&gt;Avant même de démarrer SWAG, testez que le port forwarding fonctionne :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Sur votre serveur local, démarrez un serveur web simple&lt;/span&gt;
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8080

&lt;span class="c"&gt;# Depuis l'extérieur, testez avec votre domaine&lt;/span&gt;
curl http://monhomelab.duckdns.org:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si ça marche, vous êtes prêts pour SWAG !&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 Installation avec Docker Compose
&lt;/h2&gt;

&lt;p&gt;Première étape : créer notre &lt;code&gt;docker-compose.yml&lt;/code&gt; pour SWAG.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.8"&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;web-proxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;swag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;lscr.io/linuxserver/swag:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;swag&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_ADMIN&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PUID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Europe/Paris&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;URL=monhomelab.duckdns.org&lt;/span&gt;  &lt;span class="c1"&gt;# Votre domaine DuckDNS&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;VALIDATION=duckdns&lt;/span&gt;          &lt;span class="c1"&gt;# Validation via DuckDNS&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DUCKDNSTOKEN=12345678-1234-1234-1234-123456789012&lt;/span&gt;  &lt;span class="c1"&gt;# Votre token DuckDNS&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SUBDOMAINS=wildcard&lt;/span&gt;         &lt;span class="c1"&gt;# Permet *.monhomelab.duckdns.org&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL=votre-email@example.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ONLY_SUBDOMAINS=false&lt;/span&gt;       &lt;span class="c1"&gt;# Important pour que le domaine principal marche&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./swag/data:/config&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;     &lt;span class="c1"&gt;# HTTP (redirections vers HTTPS)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;   &lt;span class="c1"&gt;# HTTPS (vos services sécurisés)&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;web-proxy&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Configuration étape par étape
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Préparation des variables d'environnement
&lt;/h3&gt;

&lt;p&gt;Les variables importantes à comprendre :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt; : Votre domaine complet (DuckDNS, Cloudflare, ou autre provider)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VALIDATION=duckdns&lt;/strong&gt; : Type de validation selon votre provider (voir liste ci-dessus)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SUBDOMAINS=wildcard&lt;/strong&gt; : Génère un certificat pour tous vos sous-domaines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DUCKDNSTOKEN&lt;/strong&gt; : Token/API key de votre provider DNS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ONLY_SUBDOMAINS=false&lt;/strong&gt; : Permet d'utiliser le domaine principal aussi&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💭 &lt;strong&gt;Pourquoi DuckDNS dans cet exemple ?&lt;/strong&gt; C'est gratuit et ultra simple pour débuter ! Mais si vous avez déjà un domaine chez Cloudflare/OVH/Gandi, utilisez-le directement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configuration DuckDNS automatique
&lt;/h3&gt;

&lt;p&gt;SWAG va automatiquement :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mettre à jour votre IP sur DuckDNS&lt;/li&gt;
&lt;li&gt;Valider votre domaine via l'API DuckDNS&lt;/li&gt;
&lt;li&gt;Générer le certificat wildcard&lt;/li&gt;
&lt;li&gt;Renouveler automatiquement tout ça !&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;C'est la magie de cette combo SWAG + DuckDNS ! ✨&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Premiers pas après démarrage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Démarrer SWAG&lt;/span&gt;
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt; swag

&lt;span class="c"&gt;# Vérifier les logs&lt;/span&gt;
docker logs swag

&lt;span class="c"&gt;# Vous devriez voir quelque chose comme :&lt;/span&gt;
&lt;span class="c"&gt;# "Server ready"&lt;/span&gt;
&lt;span class="c"&gt;# "Certificate renewal successful"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Structure des dossiers créés
&lt;/h3&gt;

&lt;p&gt;Après le premier démarrage, SWAG crée cette structure :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;swag/data/
├── nginx/
│   ├── nginx.conf
│   ├── site-confs/
│   └── proxy-confs/     # ← Les configs de nos services !
├── keys/
│   └── letsencrypt/     # ← Nos certificats SSL
└── log/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Ajouter nos premiers services
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Service 1 : Home Assistant
&lt;/h3&gt;

&lt;p&gt;Créons notre service Home Assistant dans le même réseau :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ajout dans docker-compose.yml&lt;/span&gt;
  &lt;span class="na"&gt;homeassistant&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;homeassistant/home-assistant:stable&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;homeassistant&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Europe/Paris&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./homeassistant/data:/config&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;web-proxy&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8123:8123"&lt;/span&gt;  &lt;span class="c1"&gt;# Optionnel, pour accès direct local&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration du proxy dans SWAG
&lt;/h3&gt;

&lt;p&gt;Créer le fichier : &lt;code&gt;swag/data/nginx/proxy-confs/homeassistant.subdomain.conf&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;homeassistant.*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/ssl.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/proxy.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/resolver.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$upstream_app&lt;/span&gt; &lt;span class="s"&gt;homeassistant&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$upstream_port&lt;/span&gt; &lt;span class="mi"&gt;8123&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$upstream_proto&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="nv"&gt;$upstream_proto&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;$upstream_app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$upstream_port&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Support des WebSockets (important pour Home Assistant !)&lt;/span&gt;
    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/api/websocket&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/proxy.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/resolver.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$upstream_app&lt;/span&gt; &lt;span class="s"&gt;homeassistant&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$upstream_port&lt;/span&gt; &lt;span class="mi"&gt;8123&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$upstream_proto&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="nv"&gt;$upstream_proto&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;$upstream_app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$upstream_port&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Test de votre configuration
&lt;/h3&gt;

&lt;p&gt;Une fois tout configuré, testez vos URLs :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;code&gt;https://monhomelab.duckdns.org&lt;/code&gt; → Page par défaut SWAG&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;https://homeassistant.monhomelab.duckdns.org&lt;/code&gt; → Votre Home Assistant&lt;/li&gt;
&lt;li&gt;✅ Certificat SSL valide et wildcard !&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Troubleshooting réseau
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problème : "Site inaccessible depuis l'extérieur"
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vérifiez votre IP publique&lt;/strong&gt; :
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Sur votre serveur&lt;/span&gt;
curl ifconfig.me

&lt;span class="c"&gt;# Doit correspondre à :&lt;/span&gt;
nslookup monhomelab.duckdns.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Testez le port forwarding&lt;/strong&gt; :
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Depuis l'extérieur (4G par exemple)&lt;/span&gt;
telnet monhomelab.duckdns.org 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vérifiez les logs SWAG&lt;/strong&gt; :
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs swag | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"certificate&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;duckdns"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Problème : "DuckDNS validation failed"
&lt;/h3&gt;

&lt;p&gt;Vérifiez votre token DuckDNS :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test manuel de l'API DuckDNS&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://www.duckdns.org/update?domains=monhomelab&amp;amp;token=VOTRE_TOKEN&amp;amp;ip="&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Doit retourner "OK" si le token est bon.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problème : "Certificat non généré"
&lt;/h3&gt;

&lt;p&gt;Souvent c'est un souci de timing. DuckDNS peut mettre quelques minutes à propager :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Redémarrez SWAG après quelques minutes&lt;/span&gt;
docker restart swag

&lt;span class="c"&gt;# Surveillez les logs&lt;/span&gt;
docker logs &lt;span class="nt"&gt;-f&lt;/span&gt; swag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Tips et bonnes pratiques
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Réseau Docker dédié
&lt;/h3&gt;

&lt;p&gt;Créez toujours un réseau dédié pour vos services web :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Créer le réseau manuellement&lt;/span&gt;
docker network create web-proxy

&lt;span class="c"&gt;# Ou le définir comme external dans docker-compose&lt;/span&gt;
networks:
  web-proxy:
    external: &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Gestion des logs
&lt;/h3&gt;

&lt;p&gt;Surveillez les logs pour déboguer :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Logs SWAG en temps réel&lt;/span&gt;
docker logs &lt;span class="nt"&gt;-f&lt;/span&gt; swag

&lt;span class="c"&gt;# Logs nginx spécifiques&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;swag &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /config/log/nginx/error.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Test de configuration
&lt;/h3&gt;

&lt;p&gt;Avant de redémarrer, testez toujours :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test de la config nginx&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;swag nginx &lt;span class="nt"&gt;-t&lt;/span&gt;

&lt;span class="c"&gt;# Rechargement à chaud (si test OK)&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;swag nginx &lt;span class="nt"&gt;-s&lt;/span&gt; reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Wildcard certificates
&lt;/h3&gt;

&lt;p&gt;Avec les certificats wildcard, vous pouvez ajouter autant de sous-domaines que vous voulez sans renouveler le certificat !&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡️ Sécurisation avec Authelia (bonus)
&lt;/h2&gt;

&lt;p&gt;Pour aller plus loin, on peut ajouter une authentification centralisée :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Service Authelia&lt;/span&gt;
  &lt;span class="na"&gt;authelia&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;authelia/authelia:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;authelia&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./authelia/data:/config&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;web-proxy&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Europe/Paris&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Et dans notre config nginx, on ajoute :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# En haut du fichier de config de service&lt;/span&gt;
&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/authelia-server.conf&lt;/span&gt;;

&lt;span class="c1"&gt;# Dans la location /&lt;/span&gt;
&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="n"&gt;/config/nginx/authelia-location.conf&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Résultat final
&lt;/h2&gt;

&lt;p&gt;Une fois tout configuré, vous avez :&lt;/p&gt;

&lt;p&gt;✅ &lt;code&gt;https://homeassistant.monhomelab.duckdns.org&lt;/code&gt; - Sécurisé avec SSL&lt;br&gt;&lt;br&gt;
✅ &lt;code&gt;https://files.monhomelab.duckdns.org&lt;/code&gt; - Protégé par authentification&lt;br&gt;&lt;br&gt;
✅ &lt;code&gt;https://admin.monhomelab.duckdns.org&lt;/code&gt; - Accessible uniquement pour les admins  &lt;/p&gt;

&lt;p&gt;Le tout avec &lt;strong&gt;un seul certificat wildcard&lt;/strong&gt; qui se renouvelle automatiquement !&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🐛 Debugging courant
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Problème : "502 Bad Gateway"
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Vérifier que le service target existe&lt;/span&gt;
docker ps | &lt;span class="nb"&gt;grep &lt;/span&gt;nom-du-service

&lt;span class="c"&gt;# Vérifier la résolution DNS interne&lt;/span&gt;
docker &lt;span class="nb"&gt;exec &lt;/span&gt;swag nslookup nom-du-service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Problème : Certificat non généré
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Vérifier les logs de génération&lt;/span&gt;
docker logs swag | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"certificate&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;duckdns"&lt;/span&gt;

&lt;span class="c"&gt;# Tester manuellement DuckDNS&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://www.duckdns.org/update?domains=VOTRE_DOMAINE&amp;amp;token=VOTRE_TOKEN&amp;amp;ip="&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Problème : WebSockets qui ne passent pas
&lt;/h3&gt;

&lt;p&gt;Ajoutez toujours ces headers dans vos configs :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;proxy_cache_bypass&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎉 Conclusion
&lt;/h2&gt;

&lt;p&gt;SWAG a vraiment simplifié ma vie de homelabber ! En quelques fichiers de config, j'ai :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Des certificats SSL automatiques&lt;/li&gt;
&lt;li&gt;Des sous-domaines propres pour tous mes services
&lt;/li&gt;
&lt;li&gt;Une authentification centralisée&lt;/li&gt;
&lt;li&gt;Une maintenance quasi nulle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si vous hésitez encore à passer le cap, foncez ! C'est un investissement en temps qui se rentabilise très vite.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Pour aller plus loin
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.linuxserver.io/general/swag" rel="noopener noreferrer"&gt;Documentation SWAG officielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/linuxserver/reverse-proxy-confs" rel="noopener noreferrer"&gt;Exemples de configs nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.authelia.com/integration/proxies/nginx/" rel="noopener noreferrer"&gt;Guide Authelia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Et vous, vous utilisez quoi comme reverse proxy ? Dites-moi en commentaire ! 💬&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  docker #nginx #ssl #homelab #reverseproxy #swag #letsencrypt #devops
&lt;/h1&gt;

</description>
      <category>adventoftech2025</category>
      <category>docker</category>
      <category>homelab</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
