project-memory
Skill0 starsChanged 54 days agoMITView on GitHub
Moteur de mémoire structurée à 3 couches (Cold / Warm / Hot) pour une mission de conseil. À utiliser dès qu'un agent ou un skill doit lire ou persister de la mémoire projet avant de modifier un livrable. Se déclenche pour : initialiser le substrat de mémoire d'un projet (init_memory, appelé par project-init), lire les décisions actives AVANT de réécrire un livrable, acter une décision structurante (cadrage, méthodo, hypothèse, arbitrage client), écrire une synthèse de jalon, logguer un run IA, ou lancer une passe de maintenance ("lint", "health-check de la mémoire", "operator run", "heartbeat", "dreams", "vérifie la mémoire du projet", "synthèse de jalon"). Lire les décisions actives EN PREMIER avant d'écraser toute saisie humaine. Utilise ce skill chaque fois que la mémoire d'un projet doit être lue, écrite ou maintenue, même si l'utilisateur ne nomme pas explicitement le "substrat" ou la "mémoire".
24 other projects use a version of this.
Adopted by
Most recently taken up by
- CheehooLabs/SpureeSkillstheir own version, first seen Nov 8, 2026
- cobibean/project-memory-skilltheir own version, first seen Nov 8, 2026
- RRFRRF/project-memory-skilltheir own version, first seen Nov 8, 2026
- xuyewild/multi-ai-skillstheir own version, first seen Oct 25, 2026
- kaushikhegde11/obsidian-project-memorytheir own version, first seen Oct 20, 2026
- mooktakim/skillstheir own version, first seen Oct 17, 2026
Other versions24 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 24
- SpillwaveSolutions/project-memory★ 88same name
- CheehooLabs/SpureeSkills★ 18same name
- RRFRRF/project-memory-skill★ 8same name
- scaleto/Antigravity-Super-Skill-Architecture★ 8same name
- cobibean/project-memory-skill★ 7same name
- me-cedric/agent-compass★ 3same name
- tasuku-9/project-memory-skill★ 3same name
- jukrap/ai-agent-playbook★ 2same name
- sakuruamayday-ops/enterprise-project-application-assistant★ 2same name
- g030105021203-cell/project-memory★ 1same name
14 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- skills/folder-analyzer-optimizer/CLAUDE.mdCLAUDE.md
- benchmarkSkill
- decision-toolkitSkill
- deep-researchSkill
- deliverable-panel-reviewSkill
- de-slopSkill
- fact-checkerSkill
- file-naming-standardSkill
- folder-analyzer-optimizerSkill
- humanize-outputSkill
- instructions-auditSkill
- meeting-summarySkill
- personal-insightsSkill
- process-interviewerSkill
- project-initSkill
- project-lintSkill
- prompt-optimizerSkill
- session-handoffSkill
- skill-creatorSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 0 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 19 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 58
Read context.md. Retourner les métadonnées (frontmatter + corps) à l'agent appelant.
- Very specific: line 68
Read Décisions/_Index.md : si une décision Active existe déjà sur le même slug, REFUSER et rediriger vers revise_decision.
- Very specific: line 76
Read l'ancienne décision (old_decision_path).
- Very specific: line 83
Read l'ancienne décision. Si son statut n'est pas Active : REFUSER et expliquer l'état actuel.
- Very specific: line 101
Read la synthèse. Edit pour annoter/compléter avec content_delta.
- Very specific: line 106
Read Synthèses/_Index.md. Read la synthèse du jalon demandé, ou la plus récente si jalon=None.
- Very specific: line 110
Read Logs/_Index.md. Read les N logs les plus récents (ou filtrés par agent).
“Common” is measured: kept by at least 6 in 10 of the 19 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
project-memory
Substrat de mémoire structurée par mission, à 3 couches (Cold / Warm / Hot). Colonne vertébrale d'une mission de conseil : garantit que les décisions humaines (golden data) ne sont jamais écrasées par une régénération IA, mutualise la mémoire entre tous les agents/skills d'une mission, et rend la pensée auditable.
Ce skill est LLM-driven : tu exécutes chaque opération toi-même via Read / Write / Edit sur des fichiers .md. Il n'y a pas de moteur Python. La fiabilité du substrat dépend entièrement de ta discipline à suivre les gestes ci-dessous dans l'ordre.
Ce skill est le moteur ; il est en général invoqué par project-init (à l'init) ou par un agent métier (en cours de mission). Le point d'entrée du cycle de vie d'un projet est project-init, pas ce skill.
Règles dures (jamais d'exception)
- Immuabilité Cold. Ne jamais éditer le corps d'une décision au statut
Active. Le seul Edit in-place autorisé sur un fichierDécisions/est le flip de statut dans le frontmatter (Active -> Révisée ou Abrogée, avec mise à jour deRévisé par), exécuté exclusivement parrevise_decisionouabrogate_decision. Tout autre Edit d'une décision Active est une corruption du substrat. - Index après chaque écriture. Après TOUTE écriture dans
Décisions/,Synthèses/ouLogs/, régénérer immédiatement l'_Index.mddu dossier touché, puis le_memory/_Index.mdracine. C'est une étape à part entière, jamais omise. - Frontmatter conforme avant Write. Vérifier le frontmatter contre
references/frontmatter-standards.mdavant chaque Write. Champ obligatoire manquant ou valeur énumérée invalide : corriger d'abord, ne pas persister un fichier non conforme. - Append-only Hot. Un log = un nouveau fichier. Jamais d'Edit d'un log existant.
Référentiels (lire au besoin, progressive disclosure)
references/memory-structure.md: doctrine des 3 couches, règle de routage, structure de dossier.references/frontmatter-standards.md: les 4 frontmatters + règle de validation avant écriture.references/templates/: canevas de contenu (decision, synthesis, log, index).references/claude-md-per-scope.md: template duCLAUDE.mddéposé dans chaque_memory/.references/config.example.md: domaines de décision, jalons, schémacontext.md, politique de purge, locale. À lire pour toute opération qui touche unDomaineou unJalon.references/operator-cadences.md: détail des routineslint_memory/operator_runet du modèle à 3 cadences. À lire avant d'exécuter ou de programmer une routine.
Le SKILL.md reste générique : les valeurs métier (domaines, jalons) vivent dans config.example.md.
Opérations
Chaque opération est une séquence de gestes ordonnés. Exécuter dans l'ordre, sans sauter d'étape.
init_memory(id, locale, context_meta)
Crée la structure complète. Idempotent : si _memory/ existe déjà, ne rien casser (compléter ce qui manque seulement).
- Déterminer la racine : la racine du dossier projet courant (
<racine projet>/_memory/). - Créer
_memory/et les 3 sous-dossiersDécisions/,Synthèses/,Logs/. - Lire
references/config.example.mdpour le schémacontext.md, les domaines et jalons. - Écrire
context.md(frontmatter du schéma deconfig.example.md+ corps : description courte). Substituer lescontext_metafournis. Valider le frontmatter contre le schéma config (tous les champs présents, dates au formatYYYY-MM-DD) avant Write. - Écrire
_memory/CLAUDE.mddepuisreferences/claude-md-per-scope.md, en substituant id / locale et en copiant les listes de domaines et jalons depuis config.example.md (le CLAUDE.md doit être autoportant). - Écrire un
_Index.mdvide (mais frontmatté) dans chacun des 3 sous-dossiers, puis le_memory/_Index.mdracine (Scope: top). - Proposer la programmation des routines de maintenance : si le contexte est Cowork, poser l'
AskUserQuestionde programmation (cf.references/operator-cadences.md, section Scheduling). Si Claude Code local : ne pas proposer de scheduling (les routines restent on-demand). Défaut si pas de réponse : maintenance manuelle, aucune routine programmée.
read_context(id)
- Read
context.md. Retourner les métadonnées (frontmatter + corps) à l'agent appelant.
read_active_decisions(id, domain=None)
Appel obligatoire pour tout agent avant modification d'un livrable. Chemin de sécurité : ne pas dépendre de l'_Index.md (qui peut être désynchronisé), scanner les fichiers directement.
- Lister tous les fichiers
.mddeDécisions/(hors_Index.md). Read le frontmatter de chacun. - Filtrer ceux au statut
Active(et pardomainsi fourni). Read le corps complet de chaque décision Active. - Retourner la liste structurée : slug, domaine, décision retenue, conséquences. C'est le contexte anti-écrasement.
create_decision(id, slug, domain, content, options=None, consequences=None)
- Lire
config.example.md: vérifier quedomainest une valeur autorisée. - Read
Décisions/_Index.md: si une décision Active existe déjà sur le mêmeslug, REFUSER et rediriger versrevise_decision. - Construire le fichier
YYYY-MM-DD-<slug>.mddepuistemplates/decision-template.md: frontmatterStatut: Active,Révise: "",Révisé par: ""; corps Contexte / Options / Décision retenue / Conséquences (Décision et Conséquences obligatoires). - Valider le frontmatter (règle dure 3). Write le fichier.
- Régénérer
Décisions/_Index.mdpuis_memory/_Index.md(règle dure 2). - Logguer l'opération (
log_action).
revise_decision(id, old_decision_path, new_slug, new_content, ...)
Ne jamais éditer le corps de l'ancienne décision (règle dure 1).
- Read l'ancienne décision (
old_decision_path). Si son statut n'est pasActive: REFUSER l'opération et expliquer l'état actuel. Ne pas réviser une décision déjàRéviséeouAbrogée. - Créer la nouvelle décision (
YYYY-MM-DD-<new_slug>.md,Statut: Active,Révise: <old_decision_path>). Write. - Edit du frontmatter de l'ancienne uniquement :
Statut: Active->Révisée,Révisé par: <chemin de la nouvelle>. Ne pas toucher au corps de l'ancienne. - Valider les deux frontmatters. Régénérer
Décisions/_Index.mdpuis_memory/_Index.md. - Logguer l'opération (
log_action).
abrogate_decision(id, old_decision_path, reason)
- Read l'ancienne décision. Si son statut n'est pas
Active: REFUSER et expliquer l'état actuel. - Edit du frontmatter uniquement :
Statut->Abrogée. Pas deRévisé par(pas de remplacement). Ne pas toucher au corps. - Régénérer
Décisions/_Index.mdpuis_memory/_Index.md. - Logguer l'opération avec
reason(log_action).
log_action(id, agent, skill, action_meta)
- Construire
YYYY-MM-DD-<slug-action>.mddepuistemplates/log-template.md(frontmatter Log + corps : Action / Inputs lus / Décisions actives consultées / Modifications / Sources / Checks / Sortie). - Valider le frontmatter. Write (nouveau fichier, append-only, règle dure 4).
- Régénérer
Logs/_Index.mdpuis_memory/_Index.md.
create_synthesis(id, jalon, content)
- Lire
config.example.md: vérifier quejalonest autorisé. - Construire
YYYY-MM-DD-<slug-jalon>.mddepuistemplates/synthesis-template.md. Valider le frontmatter. Write. - Régénérer
Synthèses/_Index.mdpuis_memory/_Index.md. - Logguer l'opération (
log_action).
update_synthesis(id, synthesis_path, content_delta)
Une synthèse est Warm (permanent évolutif), donc l'Edit in-place est autorisé ici (contrairement aux décisions Cold).
- Read la synthèse. Edit pour annoter/compléter avec
content_delta. Mettre à jour laDatesi pertinent. - Régénérer
Synthèses/_Index.mdpuis_memory/_Index.md. - Logguer l'opération (
log_action).
read_synthesis(id, jalon=None)
- Read
Synthèses/_Index.md. Read la synthèse dujalondemandé, ou la plus récente sijalon=None. Retourner le contenu. Lecture seule.
read_logs(id, limit=N, agent=None)
Lecture seule de la couche Hot, pour reconstituer la trace d'un run ou préparer une synthèse de jalon.
- Read
Logs/_Index.md. Read les N logs les plus récents (ou filtrés paragent). Retourner la liste structurée.
purge_logs(id, threshold_days, aggregate_to=None)
- Lire la politique de purge dans
config.example.md. - Identifier les logs au-delà du seuil. Avant suppression : si
aggregate_toest fourni (ou par défaut selon config),create_synthesis/update_synthesispour condenser les logs anciens en une synthèse Warm. - Supprimer les fichiers de log au-delà du seuil. Régénérer
Logs/_Index.mdpuis_memory/_Index.md. - Logguer la purge (
log_action) : plage de dates supprimée, nombre de fichiers, chemin de la synthèse d'agrégation. Ce log est lui-même soumis à la purge future.
rebuild_indexes(id)
Utilitaire de récupération : régénère tous les index à partir du contenu réel des dossiers.
- Pour chaque sous-dossier, lister les fichiers
.md(hors_Index.md), lire leur frontmatter, reconstruire l'_Index.md(cf.templates/index-template.md). - Reconstruire le
_memory/_Index.mdracine (Scope: top) en agrégeant les trois.
lint_memory(id, mode=quick)
Health-check du substrat. Corrige automatiquement la dérive d'index (déterministe, sûr) ; tout le reste est une PROPOSITION, jamais une action structurante silencieuse.
Mode quick (défaut, ~30 s) :
- Dérive d'index : pour chaque sous-dossier (
Décisions/,Synthèses/,Logs/), comparer le compteur déclaré dans_Index.mdau nombre réel de.md(hors_Index.md), et la liste indexée aux fichiers présents. Idem pour le_memory/_Index.mdracine vs la somme des trois. Écart -> corriger viarebuild_indexes(c'est la seule auto-correction autorisée). - Conformité frontmatter : valider chaque fichier contre
references/frontmatter-standards.md(champ obligatoire manquant, valeur énumérée invalide, date nonYYYY-MM-DD). Non conforme -> signaler (ne pas réécrire le corps). - Intégrité Cold : pour chaque décision, vérifier la cohérence des liens de statut (
Révisepointe vers un fichier existant ; uneRévisée/Abrogéen'est pas restéeActive;Révisé parpointe vers une décisionActive). Incohérence -> signaler. - Liens cassés : tout
[[cible]]dont le fichier n'existe pas -> signaler.
Mode full (~quelques min) : quick +
5. Décisions Active contradictoires : repérer deux décisions Active du même Domaine qui se contredisent (signal de revise_decision/abrogate_decision à proposer).
6. Logs au-delà du seuil de purge (cf. config.example.md) non encore agrégés en synthèse -> proposer purge_logs avec agrégation.
7. Décisions Active orphelines : aucune synthèse ni log récent ne les mentionne (conviction possiblement périmée) -> proposer une revue.
Sortie : un rapport structuré (tableau : check / statut OK-Corrigé-À revoir / détail). Les corrections d'index appliquées sont listées. Tout le reste est une liste de propositions. Logguer le lint (log_action, action=lint).
operator_run(id, cadence=hebdo)
Passe de maintenance autonome sur le _memory/. Une invocation = un run = un rapport = stop. Pas de question en cours de run, pas de boucle.
Trois cadences (hebdo, dreams, jalon), détaillées dans references/operator-cadences.md. Lire ce référentiel avant d'exécuter. En résumé :
hebdo: heartbeat léger (lint full + check conviction + détection de proximité de jalon). Log court de propositions.dreams: re-lecture froide profonde, produit une synthèse + propositions. Cadence mensuelle.jalon: même passe profonde quedreams, déclenchée par l'arrivée à un jalon ; la synthèse porte le jalon correspondant.
Règle dure transverse : l'operator propose, l'humain dispose. Ne JAMAIS créer/réviser/abroger une décision ni écrire une synthèse de fond sans validation. Failure handling et idle-timeout : si une étape échoue ou n'avance pas, la logguer et continuer le run.
Routines de maintenance & programmation (HITL)
lint_memory et operator_run peuvent tourner à la demande, ou être programmés. La programmation passe par une question explicite à l'humain (l'agent appelant, en contexte interactif, porte l'AskUserQuestion ; ce skill ne programme jamais rien seul).
Quand poser la question : à la fin de init_memory (création d'un nouveau projet) en contexte Cowork uniquement, et sur demande explicite ("programme une routine", "planifie un lint").
Mécanisme et défauts : voir references/operator-cadences.md (section Scheduling). En Cowork, proposer hebdo (hebdo) + dreams (mensuel) via le mécanisme de routines Cowork ; jalon reste événementiel. En Claude Code local, pas de scheduling autonome pour l'instant (routines on-demand).
Principe : les routines produisent des propositions dans un log, jamais des actions structurantes silencieuses. Sortie 100 % dans le _memory/ du projet (logs + cascade d'index), aucune notification externe par défaut. Démarrer en manuel quelques cycles, basculer en planifié seulement après accord humain.
Concurrence
En cas de sous-agents concurrents, sérialiser les écritures (un agent finit son opération, index compris, avant qu'un autre n'écrive dans le même dossier). Un garde-fou .lock déterministe par dossier _memory/ peut être ajouté si une corruption d'index sous concurrence est observée ; il n'est pas dans le périmètre par défaut.
Discipline côté consommateurs
La discipline "lire les décisions Active AVANT toute modification de livrable" est portée par les agents/skills consommateurs, pas par ce skill. Ici, read_active_decisions se contente de fournir le contexte ; c'est l'agent appelant qui doit l'invoquer en premier.
Convention de logging : les opérations qui écrivent dans Décisions/ ou Synthèses/, ainsi que purge_logs, s'auto-logguent (dernière étape de leur séquence) pour l'auditabilité. Le logging de l'activité métier plus large (paragraphes touchés dans le livrable, sources mobilisées par une section) reste à la charge de l'agent appelant via log_action.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

