# SKILL — Réflexe de continuité Trilium Skill universel de mémoire de projet. Décrit **quand** lire le contexte et **quand** capitaliser proactivement dans Trilium au fil d'une session. Orienté comportement — le « comment » technique est dans le skill de référence API Trilium. Réutilisable pour tout projet suivi dans le système Context Continuity (Trilium comme base pivot, partagée entre Claude et Le Chat). --- ## Le principe Trilium est la mémoire longue du projet, partagée entre LLMs. Une conversation ne doit jamais être la seule détentrice d'une décision ou d'un fait : tout ce qui compte est capitalisé dans Trilium au fil de l'eau, pour qu'une nouvelle conversation (même sur un autre LLM) puisse reprendre sans perte. L'agent ne se contente pas de répondre : il **tient la mémoire à jour proactivement** aux moments clés, et **lit le contexte** en début de session. --- ## Deux chemins d'accès selon le LLM **Côté Le Chat (Mistral)** : accès **natif via MCP**. Les tools (`get_contexte`, `add_decision`, `add_history`, etc.) sont appelés directement par l'agent. **Côté Claude** : le connecteur MCP n'est pas disponible (le serveur n'implémente pas OAuth, requis par Claude). L'accès se fait donc **par relais humain** : l'agent propose à Bastien la commande exacte à lancer, Bastien l'exécute sur GrosseBertha et colle le retour. C'est transparent côté comportement — seul le mécanisme diffère. > Quand l'OAuth sera ajouté au serveur MCP, Claude pourra accéder directement > et ce relais deviendra inutile. --- ## EN DÉBUT DE SESSION — lire le contexte Au démarrage d'une session sur un projet existant, récupérer le briefing de reprise avant de travailler : - **Le Chat** : appeler le tool `get_contexte(projet="SlidingAutomation", llm_cible="Le Chat Large")`. - **Claude** : proposer à Bastien : ``` python trilium_context.py generate-context --projet SlidingAutomation --llm-cible "Claude Sonnet" --note-id --version ``` puis lire le briefing qu'il colle. Le briefing contient : décisions actives, historique valide, glossaire, backlog actif. **Confirmer en 3 lignes** : (a) objectif, (b) prochaine action, (c) incertitude — avant de continuer. Optionnel mais recommandé : créer la note de conversation dès le début (`new_conversation`) pour pouvoir la clôturer ensuite. --- ## PENDANT LA SESSION — capitaliser aux moments clés L'agent surveille activement ces déclencheurs et propose la capitalisation **sans attendre la fin** : ### Déclencheur : une décision est actée Dès qu'un choix technique ou architectural est tranché (« on fait X plutôt que Y ») : - **Le Chat** : `add_decision(projet, enonce, justification)` - **Claude** : proposer ``` python trilium_context.py add-decision --projet SlidingAutomation --enonce "Énoncé court et actionnable" --justification "Pourquoi ce choix" ``` ### Déclencheur : un test est effectué ou une contrainte découverte Dès qu'un test valide/invalide quelque chose, ou qu'une limite est rencontrée : - **Le Chat** : `add_history(projet, enonce, type_historique, detail)` - **Claude** : proposer ``` python trilium_context.py add-history --projet SlidingAutomation --type "Test effectue" --enonce "Ce qui a été testé" --detail "Résultat observé" ``` `type_historique` ∈ { `Fait etabli`, `Test effectue`, `Hypothese invalidee`, `Contrainte decouverte` } (sans accent, exactement ces libellés). ### Déclencheur : une tâche future émerge Dès qu'un « il faudra faire X » apparaît : - **Le Chat** : `add_backlog(projet, titre, priorite)` - **Claude** : proposer la commande équivalente. `priorite` ∈ { `haute`, `moyenne`, `basse` }. ### Déclencheur : une tâche change d'état Quand un item passe en cours / fait / bloqué : `update_backlog(note_id, statut)`. `statut` ∈ { `a faire`, `en cours`, `bloque`, `fait`, `abandonne` }. --- ## EN FIN DE SESSION — clôturer Quand Bastien signale que la limite de tokens approche (l'agent se répète, oublie une contrainte, perd en précision), produire une **synthèse de clôture** de 150-200 mots, format concis sans markdown complexe : ``` Synthèse de clôture : - Objectif de la session : ... - Accompli : ... - En cours : ... - Bloqué : ... - Prochaine action : ... ``` Puis l'enregistrer : - **Le Chat** : `close_session(note_id, synthese)` - **Claude** : proposer ``` python trilium_context.py close-session --note-id --summary "COLLE ICI LA SYNTHÈSE" ``` Enfin, générer le briefing de reprise (`generate-context`) pour la prochaine session ou la bascule vers l'autre LLM. --- ## Règles de capitalisation — à respecter strictement Ces règles évitent que les filtres de Trilium ratent les notes : - **Nom de projet sans espaces** : `SlidingAutomation`, jamais `Sliding Automation`. - **Valeurs de statut en minuscules** : `actif`, `active`, `a faire` — jamais de majuscule. - **`encoreValide`** : `true` / `false` en minuscules. - **`typeHistorique`** : exactement un des 4 libellés sans accent. - Énoncés **courts et actionnables** — une ligne, pas un paragraphe. --- ## Posture de l'agent Capitaliser n'est pas optionnel ni réservé à la fin. L'agent propose l'enregistrement **au moment où l'information naît**, brièvement (« Je note cette décision dans Trilium ? » + la commande prête). Il n'attend pas que Bastien le demande. La mémoire du projet est une responsabilité continue, pas une corvée de clôture.