Project Memory keeps context in markdown files inside your project, so a new chat or a different agent can continue exactly where the last one stopped. Rich, visual, and built for real projects β not a blank page.
New chat = blank memory. You repeat decisions, re-explain the stack, and re-discover blockers every single time.
Five small markdown files in your project become the source of truth. The agent reads them first, every session.
Session 2 knows what Session 1 decided. No repetition. No lost context. Just continue.
One rule to remember: if it is important for the next session, write it in a file now β not in chat only.
Markdown only. No server, no database, no vendor lock-in. Git-friendly, team-friendly.
No secrets in memory files. The check script reports file and line only, never the value.
Old entries move to archive/, grouped by month. Nothing is silently erased.
This copies the skill into both .agents/skills/ and .claude/skills/, so any agent finds it.
Windows: .\install.ps1 -Project C:\path\to\my-project
Then restart your agent, or start a new session.
Copy the whole folder skills/project-memory/ to <project>/.agents/skills/project-memory/ for Cursor, Codex, Gemini and Copilot, or to <project>/.claude/skills/project-memory/ for Claude Code. For all projects, use your home folder instead of the project folder.
Team: commit the skill folder into the project repo. The team only pulls. Each project still gets its own memory files β never copy another project's memory files.
Say: βUse the project-memory skill, start this project.β The agent creates the 5 memory files from templates. You tell it the purpose, stack and current status. It writes them down.
The agent reads the memory files first, before other work. Or it runs the status script and reads the summary. You do not repeat yourself.
After an important, verified action, the agent updates the matching file immediately. Not at the end. Not in chat only.
PROJECT_MEMORY.mdDECISIONS.mdTODO.mdCHANGELOG.mdThe agent runs the check, archives if needed, and gives you a short summary: Completed, Changed, Decisions, Remaining, Next step, Memory files updated.
| Script | What it does | Example |
|---|---|---|
pm_init.py | Creates the 5 files from templates. Skips existing files. | pm_init.py --project . |
pm_status.py | Prints purpose, blockers, in-progress work, latest decision & change. | pm_status.py /path/to/my-project |
pm_check.py | Checks files exist, sizes, secret patterns. Exit 0 = pass, 1 = issues. | pm_check.py /path/to/my-project |
pm_archive.py | Keeps newest 20 log entries, moves older ones to archive/YYYY-MM.md. | pm_archive.py /path/to/my-project |
Never write secrets, passwords, API keys or tokens in memory files. Write where a value is stored, never the value itself.
Summary at the top of PROJECT_MEMORY: max 10 lines. Logs over 200 lines: run archive.
Update: replace the skill folder only. Memory files stay untouched. Uninstall: delete the skill folder. Memory files stay unless you delete them too.
βWhat stack did we choose? Why? What was left?β β repeat, guess, restart.
Open the folder, read 4 files, continue. Decisions have reasons. Tasks have status. Changes have a log.
No repetition. No lost context. The agent asks only about open items β like hosting, still undecided.
Login is done. The user chooses SQLite for v1 to keep setup simple. The agent writes it down at once, with reason and alternatives, so it is not a mystery later.
No chat history. The agent reads the files and knows: purpose, SQLite decision and why, product list in progress, hosting still undecided. It does not ask about the database again. It asks only about the open item β hosting β and continues with the product list.
β That is the whole point: the second session continues from files, not from memory of the first chat.