Claude Code has no memory between sessions. Every time you start a new conversation, Claude forgets your project's stack, architecture decisions, gotchas, and what you worked on yesterday.
SaferSkills independently audited claude-recall (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Obsidian-backed persistent memory for Claude Code. Install once, works on every session. All context is auto-generated using a local LLM — no manual Obsidian editing required.
A session = one terminal session (open terminal → close terminal or /exit). This is NOT per-prompt. The session marker at ~/.claude/.recall_<session_id> prevents context re-injection after the first prompt of a session.
Terminal session opens → UserPromptSubmit fires → context loaded ONCE
Terminal session continues → UserPromptSubmit fires → SKIPPED (marker exists)
Terminal session closes → Stop hook fires → session note written, context updatedSession start → load_context.py → keyword match → inject 2-3 relevant nodes
Tool use → post_tool_use.py → mark_files_stale() on Edit/Write/Create
Session end → save_context.py → claude CLI → update mindmap.json nodes
/recall query → MCP server recall_get() → return relevant context nodesBoth hooks run via Claude Code hooks in ~/.claude/settings.json. No invocation needed. The /recall command is invoked directly by the user during a Claude session. MCP tools are available for Claude to call mid-session for deeper context.
claude-recall natively uses claude CLI — meaning it inherits your Claude Code auth. API keys are only used as fallback.
claude CLI backendANTHROPIC_API_KEY (haiku-4-5)To manually refresh project context during a session, type the full command:
/Users/sayansenapati/.claude/skills/claude-recall/scripts/recall_update.py updateOr from any project directory, run:
python3 ~/.claude/skills/claude-recall/scripts/recall_update.py updateAvailable actions:
update — Scan project with LLM and regenerate context.mdstatus — Show current context.md contentreset — Delete context.md and regenerate from scratchNote: /recall is not a native Claude Code command. You must use the full path above. The hint shown in Claude's context will remind you of this each session.
| What you type | What happens |
|---|---|
| Full path above | Runs /recall update — LLM regenerates context.md |
| (context loads automatically) | Happens on first prompt of every session |
Claude automatically generates and updates context.md content:
Auto-generated content is wrapped in markers:
## Stack
<!-- auto:stack:start -->
Next.js 16 · Tailwind CSS · TypeScript
<!-- auto:stack:end -->curl -fsSL https://raw.githubusercontent.com/senapati484/claude-recall/main/install.sh | bashThe installer:
~/.claude/claude-recall.json)~/.claude/skills/claude-recall/anthropic and fastmcp via pipclaude CLI and optional API keysUserPromptSubmit, Stop, and PostToolUse hooks + MCP server in ~/.claude/settings.json<vault>/claude-recall/ folder structureThen restart Claude Code.
<your-vault>/
└── claude-recall/
├── _index.md ← deduplicated project table (auto-updated)
└── projects/
└── <project-slug>/
├── context.md ← auto-populated + user can edit
└── sessions/
└── YYYY-MM-DD_HH-MM.md ← auto-written on exit`context.md` is the permanent memory file — auto-populated with project stack, architecture decisions, gotchas, and current state. Users can add their own notes outside the auto-markers. Claude reads it before your first message every session.
`_index.md` shows each project ONCE with accumulated stats:
| Project | Directory | Sessions | Total Turns | Last Active |
|---------|-----------|----------|-------------|-------------|
| setu | `/home/.../setu` | 5 | 127 | 2025-01-16 14:07 |Project slug is derived from the directory you launched claude in: /home/sayan/projects/setu → setu, /home/sayan/client/acme → client-acme
scripts/load_context.py — UserPromptSubmit hook. Fires on every prompt.scripts/save_context.py — Stop hook. Fires on exit.scripts/summarize.py — LLM summarizer.scripts/mindmap.py — Mindmap storage + retrieval.scripts/mcp_server.py — FastMCP server.scripts/post_tool_use.py — PostToolUse hook.scripts/recall_update.py — /recall command.update: Build initial mindmap from filesystem + READMEstatus: Show mindmap as tree with stale indicatorsquery: Search mindmap for relevant nodesreset: Delete and regenerate mindmap.jsonscripts/utils.py — shared helpers:llm_available() — checks for claude CLI or API keysget_anthropic_client() — cached Anthropic clientmerge_auto_section() — preserves user content outside auto-markersdetect_project_stack() — scans package.json, requirements.txt, etc.~/.claude/claude-recall.json){
"vault_path": "/path/to/your/vault",
"vault_folder": "claude-recall",
"max_context_tokens": 400,
"include_recent_sessions": 2,
"save_sessions": true,
"load_on_every_prompt": true,
"use_claude_api": true
}| Key | Default | Description |
|---|---|---|
vault_path | required | Absolute path to your Obsidian vault |
vault_folder | claude-recall | Folder name created inside the vault |
max_context_tokens | 400 | Token budget for injected context (~1.6K chars) |
include_recent_sessions | 2 | How many past session notes to load |
load_on_every_prompt | true | Reload relevant context on every prompt |
use_claude_api | true | Use Claude API for summarization |
| Symptom | Fix | |
|---|---|---|
| Context not loading | Check hooks in ~/.claude/settings.json; restart Claude Code | |
| "Vault not found" error | Check vault_path in config; verify drive is mounted | |
| Sessions not saving | Verify vault is writable; check save_sessions: true in config | |
| Wrong project loaded | Launch claude from the correct project directory | |
| Mindmap is empty | Run /recall update to populate from filesystem | |
| "claude CLI: not found" | Install Claude Code and ensure it's in your PATH | |
| Hook errors | Run `echo '{"cwd":"'$(pwd)'","session_id":"t"}' \ | python3 ~/.claude/skills/claude-recall/scripts/load_context.py` |
| Re-install / update | Re-run the curl install command — detects existing install |
<vault>/claude-recall/projects/<slug>/context.md in Obsidian<!-- auto:*:start/end --> markersrecall_update.py when user asks for context refresh~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.