Gives Claude a local SQLite journal to remember what happened across sessions. It automatically detects your project via git root and logs attempts, blockers, decisions, and their outcomes. When you start a fresh conversation, call get_handoff to pull a structured summary of what the last session tried, what's stuck, and why. You can query past sessions with get_history or filter for unresolved blockers. Everything lives in a single database file at ~/.memoir/memoir.db with rolling retention that keeps your last 20 sessions per project. Useful when you're iterating on something tricky and don't want to re-explain context or repeat failed approaches every time you open a new chat.
Structured session journals for AI agents. Persistent memory across sessions -- no more repeating dead ends.
When a session ends, all reasoning is lost -- what was tried, what failed, what's blocked. The next session starts from scratch and repeats the same mistakes. memoir logs it all and hands it off so the next session picks up where the last one left off.
Works with any MCP client: Claude Code, Cursor, Codex, Windsurf, and more.
claude mcp add memoir -s user -- npx -y memoir-mcp
npx -y memoir-mcp
| Tool | Description |
|---|---|
log_attempt | Record something that was tried and its outcome. |
log_blocker | Flag something that's stuck and why. |
resolve_blocker | Mark a blocker as resolved with what fixed it. |
log_decision | Record a design or architecture choice and its rationale. |
end_session | Close the current session with an optional summary. |
| Tool | Description |
|---|---|
get_handoff | Structured summary of the last session -- what was attempted, what's blocked, what was decided. |
get_history | Query past sessions (default: last 3, max 20). |
get_blockers | List unresolved (or resolved) blockers across all sessions. |
Single SQLite file at ~/.memoir/memoir.db. No API keys, no external services.
All limits are configurable via environment variables:
| Variable | Default | Description |
|---|---|---|
MEMOIR_MAX_CONTENT | 500 | Max characters for content fields |
MEMOIR_MAX_OUTCOME | 300 | Max characters for outcome/resolution fields |
MEMOIR_MAX_ENTRIES | 50 | Max entries per session |
MEMOIR_MAX_SESSIONS | 20 | Max sessions per project (rolling) |
Example with custom limits:
claude mcp add memoir -s user -e MEMOIR_MAX_CONTENT=1000 -e MEMOIR_MAX_ENTRIES=100 -- npx -y memoir-mcp
Handoff output uses a compact format to keep context window usage low.
MIT
MEMOIR_MAX_CONTENTMax characters for content fields
MEMOIR_MAX_OUTCOMEMax characters for outcome/resolution fields
MEMOIR_MAX_ENTRIESMax entries per session
MEMOIR_MAX_SESSIONSMax sessions per project (rolling)
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent