import json, os from trilium_api import create_note, get_note_id, set_label, find_note_by_title, update_note_content with open(os.path.expanduser('~/App/Context_continuity/trilium_ids.json')) as f: ids = json.load(f) skills_id = find_note_by_title('Skills', ids['root']) if not skills_id: res = create_note(ids['root'], 'Skills', note_type='book') skills_id = get_note_id(res) set_label(skills_id, 'type', 'container') res = create_note(skills_id, 'Skill - Structure Context Continuity') nid = get_note_id(res) set_label(nid, 'type', 'skill') set_label(nid, 'domaine', 'context-continuity') set_label(nid, 'version', '1.0') content = ( '
Ce skill decrit comment un LLM doit interagir avec la base Trilium ' 'du systeme Context Continuity. A lire avant toute session de travail ' 'sur un projet suivi.
' 'Trilium est organise sous une note racine Context Continuity ' 'avec 8 sous-dossiers :
' '| Dossier | Contenu | Cle trilium_ids.json |
|---|---|---|
| Projets | Une note par projet suivi | Projets |
| Conversations | Une note par session LLM | Conversations |
| Backlog | Taches a developper | Backlog |
| Decisions | Decisions actives du projet | Decisions |
| Historique | Faits etablis, tests effectues, contraintes | Historique |
| Glossaire | Vocabulaire specifique au projet | Glossaire |
| Contextes Reprise | Briefings generes pour bascule LLM | ContextesReprise |
| Skills | Documentation technique pour LLMs | Skills |
| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | projet | oui |
| projet | NomSansEspaces ex: SlidingAutomation | oui |
| statut | actif | en-pause | archive | oui |
Contenu HTML : objectif, stack technique, repartition LLMs.
' '| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | conversation | oui |
| projet | NomSansEspaces | oui |
| llm | Claude Sonnet | Claude Opus | Le Chat Large | Le Chat Medium | oui |
| statut | en-cours | clos | oui |
| date | YYYY-MM-DD HH:MM | oui |
| syntheseCloture | texte libre 200 mots max | non - rempli a la cloture |
Creee via : python trilium_context.py new-conversation
| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | backlogItem | oui |
| projet | NomSansEspaces | oui |
| statut | a faire | en cours | bloque | fait | abandonne | oui |
| priorite | haute | moyenne | basse | oui |
Creee via : python trilium_context.py add-backlog (a implementer) '
'ou manuellement dans Trilium.
'
'ATTENTION : list-backlog filtre sur statut != "fait" et != "abandonne". '
'Utiliser exactement ces valeurs.
| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | decision | oui |
| projet | NomSansEspaces | oui |
| statut | active | revisee | annulee | oui |
| llm | nom du LLM ayant aide | non |
Creee via : python trilium_context.py add-decision --projet X --enonce "..." --justification "..."
'
'generate-context inclut uniquement les decisions avec statut=active.
'
'Pour annuler une decision, changer son label statut en "annulee" dans Trilium.
| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | historiqueItem | oui |
| projet | NomSansEspaces | oui |
| typeHistorique | Fait etabli | Test effectue | Hypothese invalidee | Contrainte decouverte | oui |
| encoreValide | true | false | oui |
Creee via : python trilium_context.py add-history --projet X --type "..." --enonce "..." --detail "..."
'
'generate-context inclut uniquement les entrees avec encoreValide=true.
'
'Pour invalider une entree obsolete, changer encoreValide en "false" dans Trilium.
| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | termeGlossaire | oui |
| projet | NomSansEspaces | oui |
| definition | texte court - definition operationnelle | oui |
ATTENTION : le label definition est lu par generate-context '
'pour afficher le glossaire dans le briefing. Sans ce label, la note affiche "(voir note)".
'
'Creer manuellement dans Trilium ou via script avec set_label(nid, "definition", "...").
| Label | Valeurs possibles | Obligatoire |
|---|---|---|
| type | contexteReprise | oui |
| projet | NomSansEspaces | oui |
| llmCible | nom du LLM destinataire | oui |
| version | entier incremente a chaque reprise | oui |
| tokens | estimation tokens du briefing | non |
| conversationSource | noteId de la conversation clĂ´turee | non |
Creee automatiquement par generate-context. Ne pas creer manuellement.
' 'Des qu une decision technique ou architecturale est prise, demander a l utilisateur :
' 'Lance cette commande pour enregistrer la decision :\n'
'python trilium_context.py add-decision \\\n'
' --projet NomProjet \\\n'
' --enonce "Enonce court et actionnable" \\\n'
' --justification "Pourquoi cette decision"'
'Des qu un test est effectue ou une contrainte decouverte :
' 'python trilium_context.py add-history \\\n'
' --projet NomProjet \\\n'
' --type "Test effectue" \\\n'
' --enonce "Ce qui a ete teste en une ligne" \\\n'
' --detail "Resultat observe"'
'Quand l utilisateur signale que la limite approche, produire :
' 'Synthese de cloture :\n'
'- Objectif de la session : [ce qu on voulait faire]\n'
'- Accompli : [ce qui a ete fait]\n'
'- En cours : [ce qui est a moitie fait]\n'
'- Bloque : [blocages eventuels]\n'
'- Prochaine action : [premiere chose a faire a la reprise]'
'Format concis, 150-200 mots max, sans markdown complexe ' '(sera colle en argument --summary).
' '| Erreur | Consequence | Fix |
|---|---|---|
| Valeur statut avec majuscule ex: "Actif" | Filtre ne trouve pas la note | Toujours minuscules : "actif" |
| Nom projet avec espaces ex: "Sliding Automation" | search_by_label echoue | Sans espaces : "SlidingAutomation" |
| Label definition absent sur termeGlossaire | Briefing affiche "(voir note)" | Ajouter set_label(nid, "definition", "...") |
| encoreValide="True" avec majuscule | Filtre cherche "true" et ne trouve pas | Toujours "true" ou "false" minuscules |
| typeHistorique hors liste | Affichage incoherent dans briefing | Utiliser exactement : Fait etabli | Test effectue | Hypothese invalidee | Contrainte decouverte |
python3 -c "\n'
'from trilium_api import find_note_by_title, get_note_content\n'
'nid = find_note_by_title(\'Skill - Structure Context Continuity\')\n'
'print(get_note_content(nid))\n'
'"'
)
update_note_content(nid, content)
print('Skill structure cree:', nid)