Skip to content
For Claude Code

DS-ReCall: we stopped leaving memory to guesswork.

We open-sourced the curated memory discipline Devsoy has run its own projects on for months — a Claude Code memory plugin. Zero model calls in the hooks, 100% local, MIT licensed. Current version 0.3.0 (19 October 2026).

View on GitHub Install in One Line How It Works

We wanted to see what the AI forgot

Claude Code's built-in auto-memory is useful, but Claude decides what gets kept; you don't choose. Running dozens of projects (a finance terminal, a real-estate valuation platform, client CRMs) through the same assistant, that became a real risk for us — we needed a real answer to "did the agent invent this, or did I just miss something."

DS-ReCall is that answer: a discipline layer whose hooks run on zero model calls and are fully deterministic, while you decide what becomes permanent. We're not competing with automatic memory tools — they're more mature on the "effortless" axis. We stand on a different axis: you decide what's kept.

ZERO
AI calls in hooks
Hooks are deterministic: no model calls, no network
100%
Runs locally
Data never leaves your machine, zero telemetry
MIT
Open source
Free to inspect and fork

DS-ReCall 0.3.0 in numbers

Released 19 October 2026; young software, a single maintainer. The figures come from the 0.3.0 documentation.

~158
tokens, always on
Claude Code's own estimate; ~2.2k while /wrap runs
140
automated test cases
plus a negative harness: of 35 injections, 34 of 34 exercisable defects caught
0
model calls (hooks)
Runtime scripts import only fs, path, zlib

Token figures are the output of claude plugin details ds-recall (Claude Code 2.1.299), not exact counts. The real cost is not the plugin but your own CLAUDE.md and rule files, which load in full every session. The first full run of the negative harness's new test arms failed (two gaps in our own tests) and was fixed before release. The story behind the measurements, and behind our own verification step: DS-ReCall Install Guide: Our Own Install Check Failed.

Five building blocks

DS-ReCall doesn't reinvent storage — Claude Code already loads CLAUDE.md and .claude/rules/ every session. DS-ReCall curates that native layer.

1. Capture

Every session opens with an auto-stub, injects the current system clock (anti date-hallucination), and quietly nudges you if an earlier session is still unconsolidated.

2. Consolidate

/ds-recall:wrap — melts the session into canon: decisions to the log, index refreshed, rules updated. Every line carries a status tag.

3. Validate

Integrity check: broken links, orphan files, unindexed sessions. Runs on every git commit; while integrity is failing it warns by default (since 0.3.0) and blocks the commit in strict mode ("gateCommit": "block").

4. Concurrency

Per-session locks plus a guard against clobbering writes to shared canon. Multiple sessions can safely work on the same project at once.

5. Visualize

/ds-recall:graph — clusters sessions into planets by topic tag; every still-unconsolidated session stays visible on one "Needs Wrap" hot-spot.

See your memory, don't guess at it

Zero dependencies, zero build — self-contained Canvas 2D. The screenshot below is generated from a synthetic demo dataset, not a real project.

DS-ReCall live memory graph demo view
DS-RECALL · github.com/toresoysal/ds-recall

Not every tool solves the same problem

Automatic compression tools like claude-mem and Anthropic's own Remember plugin are more mature on the "effortless" axis. DS-ReCall picks a different axis. Here are the three approaches side by side.

Swipe the table sideways to see all columns.

Claude Code's built-in auto-memoryAuto-compression plugins (Remember, claude-mem, …)DS-ReCall
Who curatesClaude decides what to saveAn AI summarises for youYou (or Claude, explicitly, at /wrap)
Cost per sessionLoads the first 200 lines / 25 KB of MEMORY.mdUsually a model call per sessionZero model calls from hooks; ~158 tokens always on, ~2.2k while /wrap runs (Claude Code's estimate) — plus whatever your own CLAUDE.md and rules weigh
When memory outgrows its limitAn explicit error since Claude Code 2.1.210 (earlier: silent truncation)Varies by toolA visible size warning at /ds-recall:status and /wrap
Multi-session safetyNot a headline featureNot a headline feature of the tools we looked atPer-session locks + commit-gate (warns by default; blocks in strict mode)
Search over past sessionsRecall of what it savedUsually yes (semantic / full-text)None — the index plus grep
SetupNoneInstallInstall plus a one-command per-project setup (init.js) and one explicit step per session (/wrap) — real, deliberate friction

Honest bottom line: if you want memory that just works with zero thought, the automatic tools are more mature — use them. The built-in memory no longer truncates silently, so what is left is curation, not visibility. DS-ReCall is for when you want to decide what the AI keeps and drops yourself, when you share a CLAUDE.md across people/sessions, or when a client-facing project needs a real answer to "what did the AI make up."

Sources: the comparison table in the DS-ReCall 0.3.0 README and Claude Code's published release notes (2.1.210: an explicit error when MEMORY.md goes over its limit). The tools closest to ours in philosophy, in our own review, are engram and total-recall (September 2026; we have not benchmarked them against each other).

Get started in 4 steps

For version 0.3.0, as of 19 October 2026. You need Claude Code 2.1.275 or later and Node.js on your PATH (tested on v22).

  1. Install the pluginOne line, from your project folder: claude plugin install ds-recall --marketplace toresoysal/ds-recall --scope project --scope project enables it for that project only. Without the flag the hooks run in every project you open, including ones you never set up, and create a session stub, an index file and a transcript backup there. To try it without installing: git clone https://github.com/toresoysal/ds-recall and claude --plugin-dir ./ds-recall.
  2. Set the project up onceOne command from the project root (the second line is for Windows PowerShell): node ~/.claude/plugins/cache/devsoy/ds-recall/0.3.0/scripts/init.js node "$env:USERPROFILE\.claude\plugins\cache\devsoy\ds-recall\0.3.0\scripts\init.js" It creates CLAUDE.md, the decision log, the timeline and the config file, copies the three helper scripts (validate.js, wrap-prep.js, session-lib.js) into .claude/scripts/, and adds the .gitignore lines. It never overwrites a file you already have; run it with --dry-run first to see what it would do (it writes nothing). Adjust the version folder in the path to the version you have. The eight manual copy steps that 0.1 and 0.2 required live on in a collapsed section of the user guide.
  3. Turn off built-in auto-memory"autoMemoryEnabled": false in your project's .claude/settings.json, or re-run init.js with --disable-auto-memory (your settings are never edited without that option) — if you forget, SessionStart reminds you every session.
  4. Verify, then use itCheck that node .claude/scripts/validate.js prints RESULT: OK. Then /ds-recall:wrap to close a session, /ds-recall:status for a health check, /ds-recall:graph to open the map.

Adding it to an existing repo? Since 0.3.0 the commit-gate WARNS by default; it does not block.

If your repo has a docs/ folder that CLAUDE.md does not link to, DS-ReCall counts those notes as orphans and warns on every git commit for as long as the integrity check fails; the commit goes through. For strict mode, put "gateCommit": "block" in ds-recall.config.json; to switch the gate off, false.

History: in 0.1 and 0.2 the default was to block. Measured on 0.2: a fresh install in a repo with an unlinked docs/ folder denied every commit (orphan=1; where you had your own CLAUDE.md, the copied DECISIONS.md and TIMELINE.md were orphans too, orphan=2). That is why we changed the default. Coming from 0.2.x: for projects whose config has no gateCommit key the default moves from blocking to a warning; if you rely on blocking, write "block" (configs that already say true keep blocking). On upgrade, also re-sync the three project scripts with init.js --upgrade.

An honest note: we have not yet seen the warning's output in a live Claude Code session. It follows the documented hook format and is exercised by our own tests; scripts/live-check-gate.js proves it on your machine with a logged-in claude. We could not run its live half (headless claude reported "Not logged in").

Update note (19 October 2026): This essay was written on 1 July 2026, around the first release, and stands as it was. Two things became clearer since: the hooks make no model calls, but the judgement half of /wrap (what is a decision, what is a rule) is done by the model and is only as good as the session; and Claude Code's built-in memory no longer truncates silently once it goes over its limit, it returns an explicit error. The current install steps, figures and comparison are above.

Why I'm sharing this

At Devsoy, we run dozens of unrelated projects through a single assistant — a finance terminal, a real-estate valuation platform, client CRMs, social media operations. All of it flows through the same Claude Code sessions. At some point I had to ask myself honestly: when the assistant tells me something, how do I know whether it's an actual recorded fact or something invented on the spot?

The answer was uncomfortable: I didn't know. Built-in auto-memory is useful but uncurated — the assistant takes notes, over time those notes drift from the rules I wrote by hand, and once they drift the assistant arbitrarily picks which one to trust and starts "making things up." On client projects the cost of that is real: a wrong date, a decision that never happened, a constraint quietly forgotten.

What we built

DS-ReCall isn't an AI product — it's the ground the AI runs on. A discipline that runs on zero model calls: every session opens with a stub, you (or the assistant, explicitly, via /wrap) decide what enters the canon, an integrity check catches broken links and orphan files, and a concurrency guard prevents shared files from clobbering each other. At no step does the AI "summarize" — you always see exactly what's kept.

We've run this for close to six months, across hundreds of real sessions, on multiple projects. It isn't perfect — the /wrap step is real friction, and we're not hiding that. But we've always had a real answer to "what did the AI make up."

Why open source

Claude Code's memory space is filling up fast — automatic compression tools (including Anthropic's own Remember plugin) already do that job well, some at real scale. DS-ReCall isn't competing with them on "effortless," and won't. Our claim is narrower and more honest: use this when a shared CLAUDE.md needs to survive multiple people/sessions intact, or when you owe a client a real answer to "what did the assistant forget." If not, the automatic tools are probably the better choice for you — and we're not shy about saying so.

MIT licensed, free, on GitHub. Inspect it, fork it, tell us what you break.

E. Töre Soysal Founding Partner, Dev/Soy Consulting · github.com/toresoysal/ds-recall