projectmem is local-first by design — no telemetry, no cloud, no accounts. Your project memory never leaves your machine unless you explicitly send it to an AI tool (Claude, Cursor, etc.).
If you've found a security issue, please email support@projectmem.dev with details rather than opening a public issue.
- We aim to respond within 72 hours.
- We'll work with you on disclosure timing.
- Significant fixes will be credited in the changelog (unless you prefer anonymity).
projectmem is open source and we'd rather be transparent about the trade-offs than hide them. The most up-to-date discussion is in the Privacy & Security section of the User Guide. The short version:
| Location | Contents | Shared? |
|---|---|---|
.projectmem/events.jsonl |
Raw event log (failures, fixes, decisions) | Gitignored by default |
.projectmem/summary.md |
Distilled briefing for AI agents | Committed to git |
.projectmem/PROJECT_MAP.md |
Architecture map | Committed to git |
~/.projectmem/global/ |
Cross-project patterns and gotchas | Local only, shared across all your projects |
.projectmem/watch.pid · watch.log |
Watcher state and runtime log | Gitignored, local only |
-
Never paste secrets into
pjm log/note/decision. The event log is append-only. Treat it like git history: don't commit anything you wouldn't want re-read later. -
Local-first ≠ data stays on your machine. projectmem doesn't see your data. But the moment you connect it to Claude, Cursor, ChatGPT, or any cloud AI, your
summary.md/PROJECT_MAP.mdcontents are sent to that AI vendor as part of normal AI use. -
Global memory mixes work and personal projects.
~/.projectmem/global/is shared across every project on your machine. Usepjm init --no-globalfor sensitive repos. -
Git hooks execute
pjmon every commit.pjm initinstalls three git hooks (pre-commit, post-commit, post-merge). Inspect them in.git/hooks/. Remove withpjm hooks uninstall. -
The watcher is a detached background process.
pjm watch --daemonauto-starts onpjm initin interactive terminals. Stop withpjm watch --stop. Skip auto-start withpjm init --no-watch. -
Memory files are AI instructions — treat like code. AI agents read
AI_INSTRUCTIONS.md,PROJECT_MAP.md, andsummary.mdas authoritative guidance. Malicious prompt-injection text in those files can manipulate AI behavior. Review changes like you'd review code. -
The MCP server is local-only.
pjm-mcplistens on stdio, not over the network. No remote attack surface — but any local AI client you connect can write to your memory via the 8 MCP tools.
pjm watch --stop # 1. stop the watcher
pjm hooks uninstall # 2. remove git hooks
rm -rf .projectmem/ # 3. delete project memory (optional)
rm -rf ~/.projectmem/ # 4. delete global memory (optional)
pip uninstall projectmem # 5. uninstall the packageThe following are in scope for security reports:
- Code execution vulnerabilities in
pjmCLI orpjm-mcpserver - Information disclosure beyond what's documented in the trade-offs above
- Privilege escalation via git hooks
- Malicious-package risks via dependency chain (we use only
typer,mcp,watchdog)
The following are not security issues (by design):
- AI vendor receiving your memory when you connect to them — that's normal AI use
- Global memory being shared across local projects — that's the documented behavior; use
--no-globalto opt out - Git hooks running
pjm— that's the documented behavior; uninstall hooks to opt out - Sensitive data appearing in
events.jsonlbecause you typed it — see trade-off #1