Watch the 60-second promo: youtu.be/YCqfJ8-XVqY A full screen-recorded walkthrough is coming soon — this written version covers the same flow step-by-step so you can follow along on your own project.
This is the 15-minute tour. By the end you'll have set up projectmem on a real project, watched the AI agent log a bug → record a failed attempt → record the fix, and seen the pre-commit warning catch you the next time you almost repeat the same mistake.
- Python ≥ 3.10
- A git repository you can experiment in (or a fresh
git initsomewhere) - An MCP-capable AI client — any of: Claude Desktop, Cursor, Antigravity (legacy IDE), Codex. The flow is identical across all four.
pip install projectmemTwo console commands ship: pjm (the CLI) and pjm-mcp (the MCP server
that your AI client talks to).
cd path/to/your/project
pjm initYou should see, in order:
.projectmem/directory created withevents.jsonl,summary.md,PROJECT_MAP.md,AI_INSTRUCTIONS.md.CLAUDE.mdcreated at the repo root — the rules-file bridge that instructs AI clients to call projectmem's MCP tools before reading source.PROJECT_MAP.mdpre-populated from yourpyproject.toml/package.json/Cargo.toml/go.mod— no manual stack tour needed (new in 0.1.3).- Git hooks installed —
pre-commitfor failure warnings,post-commitandpost-mergefor auto-capture. - A printed MCP client config block with your absolute paths already filled in (new in 0.1.3) — copy it.
Paste the printed config block into your client's MCP config file:
| Client | Config file |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Cursor | ~/.cursor/mcp.json (per-project) or via Settings → MCP |
| Antigravity (legacy) | ~/.gemini/antigravity/mcp_config.json |
| Codex | ~/.codex/config.toml (TOML, not JSON) |
Then fully quit and restart the client (cold start — closing the window isn't enough; MCP servers initialize only on launch).
Verify the connection: open your client's tools panel. You should
see 14 projectmem tools. Hover search_events — its query and
limit parameters should show descriptions. If they don't, you're not
on 0.1.3.
Open a new chat in your AI client. Paste:
I just added projectmem to this project. Please get the project summary, and since the memory is still empty, read the source files and set it up: capture what this project is, its stack, and any architectural decisions worth recording. Then regenerate the summary.
The agent will:
- Call
get_summary→ see the placeholder content. - Read your source files.
- Call
add_decisionandadd_noteto record what it learns. - Call
get_summaryagain to confirm the new state.
You're now in Setup Mode → done. Memory is populated.
Pick any real bug in your project. In your AI chat:
Bug: <describe the symptom>. Log this as an issue in projectmem, then investigate the cause.
Expect: log_issue followed by the agent reading the relevant files.
Try a fix that you think might be wrong:
Try <approach A> first. If it doesn't work, we'll try something else.
When it doesn't fix the bug:
That didn't work. Record it as a failed attempt in projectmem, then revert it.
Expect: record_attempt with outcome="failed". This is the seed
that makes the pre-commit warning fire later.
Now apply the real fix:
The real fix is <approach B>. Apply it, confirm the bug is gone, and record the fix.
Expect: record_fix — the issue closes, memory is sealed.
Run pjm show in your terminal — you'll see the full audit trail:
issue → failed attempt → fix.
A week from now, in a totally different chat, the AI agent forgets and suggests approach A again (the failed one). You apply it without thinking, stage it, and:
git commit -m "fix: try approach A"projectmem's pre-commit hook intercepts and prints:
projectmem: Pre-Commit Check
<file>
WARN 1 failed attempt on this file
Last failure: tried approach A — didn't fix the bug
You pivot before committing the same dead end. That's the judgment layer. Memory + warning at the moment of action.
If the warning doesn't fire, run
pjm hooks install—pjm initauto-installs hooks but only when.git/hooks/exists at the moment of init.
Open a brand-new chat in your AI client (fresh context). Paste:
Get me up to speed on this project — what is it, what's been worked on recently, and are there any known gotchas I should avoid?
The agent will call get_summary / get_context and answer from
memory — no re-reading of source files. That's the token savings in
action: a fresh session inherits everything the previous one learned.
pjm score # A–F grade + hours saved + tokens saved + USD saved
pjm visualize # interactive D3 dashboard in your browserThe score is your concrete answer to "is this thing actually saving me time?"
In about 15 minutes you exercised every part of projectmem:
| Feature | Where you saw it |
|---|---|
| Setup Mode (Step 4) | Agent populated summary.md and PROJECT_MAP.md |
| Issue → attempt → fix lifecycle (Step 5) | log_issue, record_attempt, record_fix |
| Pre-commit warning (Step 6) | git commit printed the warning |
| Maintenance Mode (Step 7) | Fresh chat answered from memory, no file scan |
| Token savings (Step 7 + 8) | pjm score reports the saved-token estimate |
| Secret redaction | Any API key you accidentally pasted is auto-scrubbed before disk |
- Pre-commit warning doesn't fire →
.git/hooks/pre-commitdoesn't exist. Runpjm hooks install. Under conda/venv, 0.1.3 bakes the absolute pjm path into the hook — confirm withhead .git/hooks/pre-commit. - Agent re-reads files instead of using memory → your client may not
surface the MCP
instructions=field strongly. projectmem also writes aCLAUDE.mdrules file at the repo root for exactly this — open that file and confirm the bridge block is intact. - Multiple machines / team members →
.projectmem/is meant to be committed to git. Each clone inherits the memory. Don't.gitignoreit.
- Cross-project memory: lessons learned in one repo can surface in
others with the same stack (
~/.projectmem/global/). Trypjm global showto see what's accumulated across your machine. - Issues + feature requests: github.com/riponcm/projectmem/issues.
Last updated for projectmem 0.1.3.