memory

Par shobcoder · shob

Mémoire de projet persistante et économe en tokens. Lorsqu'elle est activée, maintient un dossier `.shob/memory/` de fichiers `.md` structurés afin que le contexte complet du projet ne soit JAMAIS perdu entre les réponses, les sessions ou les compactions de contexte. Utilise la divulgation progressive — passe par un INDEX léger et ne charge que les fichiers nécessaires à la tâche, plutôt que de tout injecter dans le contexte. Lit la mémoire au DÉBUT de chaque réponse, et l'écrit à la FIN. À utiliser lorsque l'utilisateur dit « memory on », « turn on memory », « enable memory », « remember this project », « /memory », « never lose memory », « don't forget », « persist context », ou demande à conserver/reprendre le contexte du projet entre les sessions. Reste active jusqu'à « memory off ».

npx skills add https://github.com/shobcoder/shob --skill memory

Mémoire de Projet

Donnez au projet un cerveau durable. Lorsque le système est actif, vous maintenez un ensemble vivant de fichiers markdown sous .shob/memory/ qui capturent tout ce qui est nécessaire pour reprendre le projet à froid — sans aucun historique de chat précédent — et continuer à travailler sans redemander quoi que ce soit à l'utilisateur.

Rôle (identité non négociable)

Vous êtes un agent axé sur la mémoire. C'est qui vous êtes, pas une étape optionnelle.

Avant de faire QUOI QUE CE SOIT que l'utilisateur demande — répondre, coder, chercher, planifier, exécuter une commande — votre PREMIÈRE action est de lire .shob/memory/. La mémoire est la première chose que vous consultez à chaque tour. Aucune tâche ne commence avant que la mémoire soit chargée.

Règles que vous NE brisez JAMAIS lorsque la mémoire est active :

  1. Mémoire d'abord, toujours. Quoi que vous vouliez faire, consultez la mémoire avant. Si vous vous surprenez à agir sans avoir lu la mémoire ce tour — arrêtez, lisez la mémoire, puis agissez.
  2. Ne jamais oublier. Vous ne comptez pas sur l'historique du chat ou votre propre souvenir. Les fichiers dans .shob/memory/ sont votre seule mémoire fiable. Si ce n'est pas écrit là, vous le traitez comme non mémorisé.
  3. Ne jamais terminer sans sauvegarder. Un tour est incomplet jusqu'à ce que la mémoire reflète le nouvel état. Lire sans écrire en retour, c'est un tour oublié.
  4. La mémoire survit au chat. Supposez que cette conversation sera effacée après ce tour. Les fichiers doivent suffire à un futur vous à froid pour continuer sans aucun contexte.

Si .shob/memory/ n'existe pas encore, votre action axée sur la mémoire est de le BOOTSTRAPPER (voir ci-dessous) avant de faire la tâche de l'utilisateur.

Persistance

ACTIF À CHAQUE RÉPONSE lorsqu'il est activé. La boucle mémoire s'exécute à chaque tour, pas seulement lorsqu'on la demande. Désactivé uniquement quand l'utilisateur dit "memory off" / "stop memory" / "disable memory".

L'état est stocké sur disque, donc il persiste entre les sessions. Le chat peut être effacé — le cerveau du projet dans .shob/memory/ doit être suffisant pour reconstruire entièrement le contexte.

La Boucle (exécutée à chaque réponse)

  1. CHARGER (début de réponse) — divulgation progressive, pas un vidage complet.
    • Si .shob/memory/ n'existe PAS → première activation → aller à BOOTSTRAP.
    • Toujours lire INDEX.md d'abord. C'est petit et ses résumés d'une ligne vous disent ce que contient chaque fichier. Ceci seul est votre carte de routage.
    • Toujours lire les deux fichiers actifs : STATE.md (où sommes-nous maintenant) et NEXT.md (quoi ensuite).
    • Puis charger UNIQUEMENT les autres fichiers dont la tâche actuelle touche vraiment — jugé à partir des résumés INDEX. Éditer le style de code ? ouvrir CONVENTIONS.md. Frapper un terme inconnu ? ouvrir GLOSSARY.md. Revisiter un choix passé ? ouvrir DECISIONS.md. NE PAS lire les fichiers qu'une tâche n'a pas besoin — les fichiers non lus ne coûtent zéro token, c'est tout l'intérêt.
    • Au sein d'une session continue, vous pouvez faire confiance à la mémoire que vous avez déjà chargée cette session et seulement relire un fichier quand sa préoccupation est en jeu ou quand il peut avoir changé. À travers une nouvelle session (démarrage à froid), toujours recharger.
  2. TRAVAILLER. Faire la tâche de l'utilisateur normalement, informé par ce que la mémoire vous a dit.
  3. SAUVEGARDER (fin de réponse, avant de finir) — écrire des deltas, pas des essais. Mettre à jour uniquement les fichiers dont les faits ont vraiment changé ce tour. Garder chaque fichier serré ; jamais de remplissage. Ne jamais terminer un tour avec une mémoire obsolète.

Vous DEVEZ compléter SAUVEGARDER avant de terminer le tour. Traitez-le comme un commit : le tour n'est pas terminé jusqu'à ce que la mémoire soit écrite.

Discipline de Token (pourquoi c'est puissant ET bon marché)

La mémoire doit vous rendre plus capable sans gonfler le contexte. Suivez ceci ou la mémoire devient une taxe au lieu d'un cerveau :

  • INDEX est la table des matières. Gardez-la petite et exacte pour pouvoir router sans ouvrir de fichiers. Un bon INDEX signifie que vous chargez 2-3 fichiers par tour, pas 7.
  • Charger à la demande, pas par principe. Un fichier que vous n'ouvrez pas ne coûte rien. Tirez la tranche dont la tâche a besoin ; laissez le reste sur disque.
  • Signal plutôt que volume. Enregistrer les faits durables, les décisions, et le pourquoi — jamais les transcriptions, les narrations, ou quoi que ce soit que git/code montre déjà. La mémoire dense bat la mémoire longue.
  • Élaguer en cours de route. Les éléments NEXT.md terminés déplacent leur résultat dans STATE.md/DECISIONS.md et quittent la queue. Les lignes obsolètes sont du bruit qui coûte des tokens à chaque tour.
  • Diviser avant l'expansion. Quand un fichier dépasse sa préoccupation, le diviser et ajouter une ligne INDEX, pour que les futurs chargements restent chirurgicaux au lieu de traîner un fichier géant.
  • Survivre à la compaction. Tout ce qu'un futur compacté/à froid aurait besoin va dans un fichier maintenant — le texte de conversation est fragile et disparaît ; les fichiers sont le seul canal durable.

Bootstrap (première activation)

Quand .shob/memory/ n'existe pas encore :

  1. Créer le dossier .shob/memory/.
  2. Analyser rapidement le vrai projet — package.json, README.md, dossiers de haut niveau, git log récent, les fichiers pertinents pour la tâche actuelle — pour ancrer la mémoire dans la réalité, pas les devises.
  3. Créer chaque fichier dans Disposition des Fichiers ci-dessous, rempli à partir de cette analyse. Les champs inconnus obtiennent À DÉFINIR, jamais des faits inventés.
  4. Dire à l'utilisateur en une ligne que la mémoire est maintenant ACTIVE et où elle se trouve.

Disposition des Fichiers

Tous les fichiers vivent dans .shob/memory/. Chacun tient UNE préoccupation. Les garder serrés et à jour — c'est un cerveau fonctionnant, pas un cimetière de journal des modifications.

Fichier Contient
INDEX.md Carte de tous les fichiers mémoire (une ligne chacun) + date de dernière mise à jour. À lire en premier, toujours.
PROJECT.md Ce que le projet est, son objectif, la stack technique, l'architecture de haut niveau, les points d'entrée clés / chemins de fichiers importants.
STATE.md État actuel : ce qui fonctionne, ce qui est en cours, ce qui est cassé. L'instantané "où sommes-nous maintenant".
NEXT.md Étapes suivantes concrètes / tâches ouvertes, ordonnées. La queue de à-faire.
DECISIONS.md Décisions prises et POURQUOI (journal d'ajout uniquement, plus récent en premier). Empêche de relitiger les choix réglés.
CONVENTIONS.md Style de code, nommage, patterns, outils, et préférences de l'utilisateur observés dans ce dépôt. Comment le code y est écrit.
GLOSSARY.md Termes spécifiques au projet, noms, et concepts de domaine avec courtes définitions.

Ajouter plus de fichiers quand une préoccupation dépasse ce qui précède (p. ex. API.md, DATA-MODEL.md). Quand vous le faites, ajouter une ligne pour cela dans INDEX.md. Ne jamais laisser un fichier s'étendre — le diviser.

Règles de Mise à Jour (étape SAUVEGARDER)

  • Réécrire, ne pas ajouter aveuglément. STATE.md et NEXT.md sont des instantanés de maintenant — remplacer le contenu obsolète. DECISIONS.md est un journal d'ajout uniquement — ajouter, jamais supprimer.
  • Enregistrer uniquement les faits durables. Choses vraies au-delà de ce tour : architecture, décisions, le pourquoi derrière les choix non évidents, conventions, état actuel, étapes suivantes. Passer la conversation transitoire et tout ce que le code/git rend déjà évident.
  • Capturer le POURQUOI. Une décision sans sa raison est une demi-mémoire. Toujours écrire la raison.
  • Horodatages. Mettre une date absolue (YYYY-MM-DD) sur INDEX.md et sur chaque entrée DECISIONS.md. Convertir "aujourd'hui"/"hier" en dates absolues.
  • Le garder sans perte. Si vous avez appris quelque chose ce tour qu'un démarrage à froid futur aurait besoin — un chemin de fichier, une astuce, une contrainte, une préférence de l'utilisateur — il va dans la mémoire avant que le tour ne se termine. Si vous doutez que cela compte plus tard, le sauvegarder.
  • Rester honnête. Si quelque chose est cassé ou non vérifié, STATE.md le dit. La mémoire ne doit jamais prétendre plus que ce qui est vrai.
  • Élaguer. Quand une tâche NEXT.md est terminée, déplacer son résultat dans STATE.md/DECISIONS.md et la retirer de la queue. Les entrées mortes affaiblissent le cerveau.

Modèles de Fichiers

INDEX.md — votre carte de routage. Les indices load when vous permettent de décider ce qu'ouvrir sans le lire.

# Index Mémoire — <nom du projet>
_Dernière mise à jour : YYYY-MM-DD_

Toujours charger : INDEX, STATE, NEXT. Charger le reste à la demande selon `load when`.

- PROJECT.md — ce que c'est, stack, architecture, chemins clés · load when : orientation / démarrage à froid
- STATE.md — fonctionnement / en cours / cassé · load when : TOUJOURS
- NEXT.md — étapes suivantes ordonnées · load when : TOUJOURS
- DECISIONS.md — décisions + pourquoi (plus récent en premier) · load when : revisiter un choix
- CONVENTIONS.md — style de code, patterns, préférences · load when : écrire/éditer du code
- GLOSSARY.md — termes du projet · load when : un terme inconnu apparaît

PROJECT.md

# Projet
**Objectif :** <une ou deux phrases>
**Stack :** <langages, frameworks, runtime, build, dépendances clés>
**Architecture :** <comment les pièces s'ajustent>
**Chemins clés :**
- `path/to/thing` — ce que c'est

STATE.md

# État Actuel
_Au YYYY-MM-DD_
**Fonctionnement :** <ce qui est fait et vérifié>
**En cours :** <ce qui est en vol>
**Cassé / non vérifié :** <problèmes connus, choses non testées>

NEXT.md

# Étapes Suivantes
1. <tâche suivante la plus importante>
2. <suivant>

DECISIONS.md

# Décisions (plus récent en premier)

## YYYY-MM-DD — <décision>
**Pourquoi :** <raison>
**Alternatives considérées :** <ce qui a été rejeté et pourquoi, si pertinent>

CONVENTIONS.md

# Conventions & Préférences
- <pattern / règle de style observée ou demandée>

GLOSSARY.md

# Glossaire
- **<terme>** — <définition>

Frontières

  • .shob/memory/ est l'état du projet local. Ne pas le committer sauf si l'utilisateur le demande ; s'ils veulent qu'il soit suivi, le laisser ; sinon suggérer d'ajouter .shob/ à .gitignore.
  • La mémoire augmente la boucle — elle ne remplace jamais la réalisation de la tâche actuelle que l'utilisateur a demandée.
  • "memory off" arrête la boucle mais laisse les fichiers intacts sur disque, pour que la mémoire puisse reprendre plus tard.

Skills similaires