Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Add persistent memory to Claude Code that survives across sessions. Use when: maintaining continuity across Claude Code sessions, building agents with persistent project memory, avoiding repeated context setup. Covers claude-mem (AI-compressed session logs) and Claude Subconscious (Letta-based background agent).
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -47% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -5% | 0% |
Claude Code forgets everything between sessions. Two open-source tools solve this by automatically capturing context and injecting it into future sessions:
Both eliminate the need to re-explain context when returning to a project.
GitHub: thedotmack/claude-mem
bashnpm install -g claude-mem cd your-project claude-mem init claude-mem setup-hooks
This creates .claude-mem/ with config, compressed memories, and an index. Hooks auto-capture after each session and auto-inject before the next.
.claude-mem/ directorybashclaude-mem capture # Capture current session claude-mem inject # Inject memories into context claude-mem search "auth flow" # Semantic search through memories claude-mem list # List all memories claude-mem stats # Show memory stats claude-mem compress # Reduce storage for old memories
json{ "compression": { "model": "claude-sonnet-4-20250514", "strategy": "smart" }, "inject": { "maxMemories": 10, "relevanceThreshold": 0.7, "strategy": "semantic" } }
Strategies: smart (AI picks what's important), full (captures everything), minimal (only decisions and errors).
GitHub: letta-ai/claude-subconscious
bash/plugin marketplace add letta-ai/claude-subconscious /plugin install claude-subconscious@claude-subconscious export LETTA_API_KEY="your-api-key"
Get your API key from app.letta.com. Or self-host:
bashpip install letta letta server --port 8283 export LETTA_BASE_URL="http://localhost:8283"
| Mode | Behavior | Token Cost | |------|----------|------------| | whisper (default) | Short guidance before each prompt | Low | | full | Full memory blocks + message history | Higher | | off | Disabled | None |
| | claude-mem | Claude Subconscious | |---|-----------|-------------------| | Storage | Local files (.claude-mem/) | Letta cloud or self-hosted | | Cost | Uses your Claude API for compression | Requires Letta API key (free tier) | | Latency | Near-zero (local) | ~1-2s per whisper | | Memory style | Compressed session summaries | Continuous learning agent | | Best for | Local-first, privacy-sensitive | Rich cross-session context |
bash# Session 1: Work on auth module $ claude-mem stats Memories: 12 | Storage: 45KB | Last capture: 2 hours ago # Session 2: Return to project — auto-injected context # Claude already knows: "You implemented JWT auth with RS256, refresh tokens in Redis"
After discussing a REST-to-GraphQL migration, you start a new session:
[subconscious] Last session you decided to switch from REST to GraphQL for the
user service. Migration is 60% done — resolvers for User and Project are complete,
Order and Payment still need conversion. You preferred code-first schema with TypeGraphQL.relevanceThreshold higher (0.8+) if too much context is injectedwhisper mode gives 90% of the value at lower token cost.claude-mem/memories/ to .gitignore for private projectsOther measured skills in the registry, with their headline benchmark lift.