Dev & Engineering claude-code-pluginsession-memorytext summarizationlocal-firstofflineprivacyopencodepython

Recall — Local Project Memory for Claude Code

Durable, fully offline memory for Claude Code: capture every session locally and resume instantly without re-explaining your project or burning tokens.

FollowAgents review · FARS-2.1
Use with care
66/ 100 5-point scale 3.3 / 5
1 2 3 4 5 6
1Trust19 / 29 · 3.3/5

README and SECURITY.md document least-privilege design (writes confined to output_dir, O_NOFOLLOW, hardened git subprocess, scoped transcript reads), with tests corroborating redaction and incremental capture; however, the core scripts (common.py, redact.py, etc.) are not in the provided evidence, so security claims rest on documentation plus partial tests — scored 2, not 3. User confirmation exists via SessionStart resume/logging questions, .capture-paused, and uninstall.

2Reliability8 / 14 · 2.9/5

Files are self-consistent (README, SECURITY, pyproject, tests agree) and there are zero runtime deps with both numpy paths covered in the CI matrix, giving 2 for self-consistency and dependency availability; failure messaging is thin — hooks deliberately fail silent, and only the save output reports which path ran — hence 1.

3Adaptability12 / 18 · 3.3/5

Audience (local subscription users), scenarios (Claude Code primary, opencode opt-in), and triggers (Stop/SessionEnd/SessionStart hooks) are clearly described; boundaries are honestly stated (no fencing on opencode, silent no-op degradation); environment coverage (Python 3.9–3.13, numpy optional) is good — but all documentation-asserted, so 2.

4Convention14 / 18 · 3.9/5

Information architecture (Layout) and install notes (marketplace/local/opencode) are thorough: 3. Known limitations are candid (best-effort redaction, opencode drift): 3. MIT LICENSE present: 3. Deductions: no CHANGELOG and no visible plugin version (plugin. not in evidence), so versioning is 1; naming is consistent but stability unproven (2); maintenance has CONTRIBUTING/SECURITY templates but maintainer identity is unverified (2).

5Effectiveness9 / 13 · 3.5/5

Output is diffable plaintext markdown with history/context separation: 2. Marginal value versus CLAUDE.md/--continue is argued clearly but not executed-verified: 2. Zero-token cost claims align with the local algorithm: 2 — all conservative pending any run.

6Verifiability4 / 8 · 2.5/5

Claims trace to named files (common.py:git_info etc.), but the referenced scripts are absent from the evidence and cannot be checked: 1. README/SECURITY/tests corroborate each other: 2. Fact/inference separation is good (explicit 'best-effort, not a guarantee'): 2.

Evidence confidence: Low Reviewed Sep 10, 2026 Reviewed revision e65cb1e406fe
Before you use it
  • This is a static review; no code was executed. Security claims (redaction, confined writes, hardened git) rest on documentation and partial tests — core scripts were not in the evidence to verify.
  • Redaction is best-effort; manually inspect .recall/ files before committing.
  • Committing .recall/ as shared team memory carries prompt-injection risk; the opencode path has no untrusted-data fencing and deserves extra caution.
  • No CHANGELOG or visible version number makes upgrade tracking difficult; publisher is unverified — audit the scripts yourself before adoption.
  • Hooks fail silently by design; capture can stop without notice, so periodically confirm history.md is being updated.
Review evidence [1][2][3][4][5][6][7][8][9]
See the full review method →

What does this agent do, and when should you use it?

Recall is a fully-local plugin that solves Claude Code's cold-start problem — having to re-explain your project every session. Through SessionStart, Stop and SessionEnd hooks it incrementally appends session activity to `.recall/history.md` inside your project, then a local TF-IDF + TextRank summarizer condenses it into a ~1–2K token `context.md` for the next session. There are no LLM calls, no network requests and no API keys anywhere; the summarizer (with an optional numpy accelerator and an equivalent pure-Python path) is vendored in `scripts/summarizer.py`. Beyond the Claude Code plugin, an installer script provides opt-in support for opencode, and both tools can share the same `.recall/` memory files. The project also ships redaction, confined writes and hardened git invocation as security measures, under an MIT license.

During a session, Stop/SessionEnd hooks run capture.py to incrementally append your prompts, Claude's replies, files touched and commands run to .recall/history.md. At session start, session_start.py surfaces context.md and asks whether to resume and keep logging. When wrapping up, /recall:save triggers make_context.py, which calls scripts/summarizer.py (TF-IDF sentence vectors → cosine-similarity graph → TextRank PageRank power iteration → top-N sentences) and wraps the summary with deterministic facts from the transcript and git — first ask, files, commands, where you left off, git diff --stat — overwriting context.md. Alternatively set auto_save_context: "on_end" to regenerate automatically. Commands: /recall:save, /recall:show, /recall:log. For opencode projects, run python3 ~/recall/scripts/install.py --opencode --project <path> to generate a capture shim, a /recall-save command and an opencode. instructions entry.

  1. Developers on a Claude Code subscription who want to stop spending tokens re-explaining project context every session
  2. Engineers working on the same project across multiple days and sessions who need to quickly recover last progress and open threads
  3. Privacy-sensitive individuals or teams whose code, paths and occasional secrets must never leave the machine
  4. Teams mixing Claude Code and opencode on one repo who want a shared session memory in .recall/
  5. Small teams who want to commit .recall/ as shared team memory so members can pick up each other's work (trusting repo writers)

What are this agent's strengths and limitations?

Pros
  • Fully offline with zero model-token cost: summaries come from local TF-IDF + TextRank, with no external model or API calls
  • Explicit privacy guarantees: no network calls, no API keys, plus best-effort redaction of API keys, tokens, .env assignments and PEM keys before writing
  • Cheap resumption: a ~1–2K token compact context.md versus replaying a full transcript with --resume
  • Cross-harness portability: .recall/ is plain markdown, shareable between Claude Code and opencode on the same repo
Limitations
  • Summaries are extractive (TF-IDF + TextRank), not LLM-written, limiting paraphrase quality and semantic compression
  • opencode support tracks its public CLI (session list, export, plugin events API); fast upstream changes could silently degrade capture
  • On opencode, context.md loads via instructions without Claude Code's untrusted-data fencing, requiring extra caution when committing shared memory
  • Codex and other harnesses are not supported yet; new adapters must be built on the provided seam
  • Redaction is best-effort, not a guarantee — review .recall/ files before committing

How do you install or deploy this agent?

From the marketplace (inside Claude Code):

/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall

Local dev (no install step):

claude --plugin-dir /path/to/recall

opencode (once per project):

git clone https://github.com/raiyanyahya/recall ~/recall
python3 ~/recall/scripts/install.py --opencode --project /path/to/your/project

No pip install needed — the summarizer is vendored and stdlib-only (numpy optional). Run under your subscription login; if claude reports "Invalid API key", clear a stale variable with unset ANTHROPIC_API_KEY.

How do you use this agent?

  1. Start a Claude Code session normally; Recall shows context.md and asks whether to resume and whether to keep logging.
  2. Work as usual — Stop/SessionEnd hooks automatically append session activity to .recall/history.md.
  3. Before wrapping up, run /recall:save to generate/overwrite context.md (or set auto_save_context: "on_end" in recall.config. for automatic regeneration).
  4. Open a fresh session and resume from the compact summary without re-explaining.

Other commands: /recall:show prints context.md; /recall:log tails history.md. Optionally drop a recall.config. in your project root to override defaults (output dir, summary length, redaction, git inclusion); create .recall/.capture-paused to pause logging.

How does this agent compare with similar options?

The README directly compares against Claude Code's built-in options: CLAUDE.md (and the # shortcut) is hand-written rules and instructions that require manual upkeep and don't record what happened; --continue/--resume replays a full prior transcript (token-heavy, machine-bound); context compaction works only within a session. Recall fills the gap between them: an automatic, deterministic record of each session condensed into a compact resume point.

FAQ

Does using Recall cost anything extra?
No. The summary is produced by a local TF-IDF + TextRank algorithm — no LLM calls — so capturing and updating memory spends zero model tokens, and resuming from a ~1–2K token context.md actually reduces per-session token spend.
Will my code or transcripts be sent anywhere?
No. Recall makes no network calls, uses no API key and loads no third-party model. Everything is written under .recall/ inside your project, with best-effort redaction of common secret shapes before writing.
Is it safe to clone an untrusted repo while using Recall?
Recall hardens git invocations (external diff, hooks and pager disabled), confines output_dir inside the project, and injects context.md fenced as untrusted reference data. However, if you commit .recall/ as shared team memory, a repo writer could craft it for prompt injection — it is git-ignored by default.
Does it work without numpy?
Yes. numpy is an optional accelerator; if unavailable, an identical pure-Python TextRank runs instead, with the same algorithm and results. No installation is required either way.
Can I use it with opencode or Codex?
opencode is supported via an opt-in one-time installer that generates the plugin shim, /recall-save command and opencode.. Codex and other harnesses are not yet supported, though the code exposes an adapter seam (scripts/harness_opencode.py, --harness on make_context.py) for contributions.

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents