memory-as-files
Chat history is volatile, lossy, and hidden. A file vault is permanent, searchable, and diffable. This skill turns "things you should remember about my work" into a small, structured, git-tracked folder.
When to use this skill
Use it when:
- The user works across many sessions on the same project or people
- "Remember that..." / "Don't forget..." comes up repeatedly
- The user wants the host to onboard a future session with the same context
- A handoff to a teammate or another agent is anticipated
Do not use it for ephemeral session state — use TaskList for that.
What it produces: the vault scaffold
memory/
├── TODO.md # open loops; one line per item with status
├── people/
│ └── <name>.md # what I know about each person
├── projects/
│ └── <name>.md # context per project (goal, status, blockers)
└── notes/
└── <topic>.md # domain knowledge worth keeping
The vault lives at the project root (default) or ~/memory/ (cross-project). It gets committed to git so changes are reviewable.
Maintenance rules — the actual "skill"
The vault is only useful if it stays current. Update at these natural beats:
| Trigger |
Update |
| User mentions a new person (role, ownership, contact) |
people/<name>.md |
| Project status changes (milestone, blocker, decision) |
projects/<name>.md |
| User closes an open loop |
strike or move the line in TODO.md |
| User shares non-trivial domain knowledge |
append to notes/<topic>.md |
| Session end / weekly review |
commit; review the diff |
Updates are append-mostly: don't overwrite history without recording it. Past wrongness is sometimes useful context.
Procedure
- If
memory/ doesn't exist, run the scaffold (create directories + empty
stub files with one-line headers).
- On every meaningful learning, find the right file and update it in one place.
- At session end, commit with a descriptive message:
memory: <what changed and why>.
- Suggest a weekly diff review:
git log --since="1 week ago" memory/ then git diff HEAD~5 memory/.
Anti-patterns this skill blocks
- ❌ Writing memory updates into the chat without persisting to the vault.
- ❌ One giant
memory.md — you can't grep it usefully when it's 5000 lines.
- ❌ Storing secrets (API keys, passwords, tokens) in the vault — even private
repos leak. Use a secret manager.
- ❌ Memory the user doesn't know about — always announce updates:
"I added to
projects/<Y>.md."
Why files (not a database, not chat history)
- Portable — works across hosts (Claude / Codex / Cursor / a human teammate).
- Diffable — git diff is the memory review surface.
- Greppable —
rg "person-name" memory/ finds everything in one shot.
- Boring — no service to set up, no schema to migrate, no SaaS to outlast.
Worked example (original — not lifted from any source)
Mid-session, the user says: "By the way, Sara is taking over the data pipeline from Marcus next week."
This skill triggers:
- Update
people/sara.md: append "owns data pipeline (from 2026-06-01, succeeding Marcus)."
- Update
people/marcus.md: append "handed data pipeline to Sara on 2026-06-01."
- Update
projects/data-pipeline.md: change owner line.
- Announce in chat: "Updated
people/{sara,marcus}.md and projects/data-pipeline.md with the handover."
1---2name: memory-as-files3description: Use this skill when the user wants persistent, cross-session, reviewable memory for an ongoing project, set of people, or domain knowledge. It initializes a versioned file vault (TODO.md + people/ + projects/ + notes/), defines maintenance rules so memory stays current at natural beats, and treats the vault's git diff as the periodic memory-review surface.4---56# memory-as-files78Chat history is volatile, lossy, and hidden. **A file vault is permanent, searchable, and diffable.** This skill turns "things you should remember about my work" into a small, structured, git-tracked folder.910## When to use this skill1112Use it when:13- The user works across many sessions on the same project or people14- "Remember that..." / "Don't forget..." comes up repeatedly15- The user wants the host to onboard a future session with the same context16- A handoff to a teammate or another agent is anticipated1718Do **not** use it for ephemeral session state — use TaskList for that.1920## What it produces: the vault scaffold2122```23memory/24├── TODO.md # open loops; one line per item with status25├── people/26│ └── <name>.md # what I know about each person27├── projects/28│ └── <name>.md # context per project (goal, status, blockers)29└── notes/30 └── <topic>.md # domain knowledge worth keeping31```3233The vault lives at the project root (default) or `~/memory/` (cross-project). It gets committed to git so changes are reviewable.3435## Maintenance rules — the actual "skill"3637The vault is only useful if it stays current. Update at these natural beats:3839| Trigger | Update |40|---|---|41| User mentions a new person (role, ownership, contact) | `people/<name>.md` |42| Project status changes (milestone, blocker, decision) | `projects/<name>.md` |43| User closes an open loop | strike or move the line in `TODO.md` |44| User shares non-trivial domain knowledge | append to `notes/<topic>.md` |45| Session end / weekly review | commit; review the diff |4647Updates are **append-mostly**: don't overwrite history without recording it. Past wrongness is sometimes useful context.4849## Procedure50511. If `memory/` doesn't exist, run the scaffold (create directories + empty52 stub files with one-line headers).532. On every meaningful learning, find the right file and update it in one place.543. At session end, commit with a descriptive message:55 `memory: <what changed and why>`.564. Suggest a weekly diff review:57 `git log --since="1 week ago" memory/` then `git diff HEAD~5 memory/`.5859## Anti-patterns this skill blocks6061- ❌ Writing memory updates into the chat without persisting to the vault.62- ❌ One giant `memory.md` — you can't `grep` it usefully when it's 5000 lines.63- ❌ Storing secrets (API keys, passwords, tokens) in the vault — even private64 repos leak. Use a secret manager.65- ❌ Memory the user doesn't know about — always announce updates:66 "I added <X> to `projects/<Y>.md`."6768## Why files (not a database, not chat history)6970- **Portable** — works across hosts (Claude / Codex / Cursor / a human teammate).71- **Diffable** — git diff *is* the memory review surface.72- **Greppable** — `rg "person-name" memory/` finds everything in one shot.73- **Boring** — no service to set up, no schema to migrate, no SaaS to outlast.7475## Worked example (original — not lifted from any source)7677Mid-session, the user says: "By the way, Sara is taking over the data pipeline from Marcus next week."7879This skill triggers:80811. Update `people/sara.md`: append "owns data pipeline (from 2026-06-01, succeeding Marcus)."822. Update `people/marcus.md`: append "handed data pipeline to Sara on 2026-06-01."833. Update `projects/data-pipeline.md`: change owner line.844. Announce in chat: "Updated `people/{sara,marcus}.md` and `projects/data-pipeline.md` with the handover."