The full tour · every feature, shown not told

How recall works.

The intelligence is stamped at write-time — the moment the AI already knows why. Reading it back costs zero tokens, takes microseconds, and can't drift, because the code itself is the memory.

01 — How it works

Intelligence at the
knowing moment.

Most tools try to be clever when you ask (read-time) — and guess. recall is clever when the AI writes (write-time) — when it actually knows. The reader can then be dead-dumb: zero tokens, sub-millisecond, never wrong about what was meant.

01.01 · Write-time

Stamped when the AI already knows.

The intelligence moves from the guessing moment (read-time) to the knowing moment (write-time). While the AI works, it stamps a tiny anchor onto the commit — the decision, the why, the links.

stamp() · 1 sentence · 1 SHAwrite-time
01.02 · Recall

Three levels, every query.

Ask a question and recall returns the hit, the meaning (the why), and the relation (what it links to) — via a recursive graph walk over the anchors. Not where a word appears: the decision itself.

hit · meaning · relationFTS5
01.03 · Pre-edit briefing

Before you touch a file, you’re briefed.

Ask recall about one file and — read-only, zero tokens — it bundles the open tasks wired to it (standing intent), why it is the way it is, what breaks if you change it (the blast radius), and what it leans on. So an AI never silently undoes a decision it never saw. The IDE hook injects it before every edit.

tasks · why · breaks · leans-onbriefing
01.04 · Contested spots

Where the team burns time.

recall ranks the files the team keeps rewriting — churn × entanglement (how often it changes, with how many other files at once). A load-bearing file written once is important; a tenth-rewrite is where the uncertainty lives. The places to touch with extra care.

churn × entanglementhotspots
01.05 · Zero tokens

A reader so dumb it’s free.

Recall is plain SQLite full-text search — no embedding model, no LLM in the read path. The intelligence was spent once, at write-time. Reading it back is free and instant, forever.

SQLite · FTS5 · stdlib0 tokens
01.06 · Bootstrap

Smart from minute one.

Point recall at an existing repo and it builds a base intelligence token-free — from your git history, a tree-sitter code map, and the docs you already wrote (CHANGELOG, ADRs, MEMORY). No cold start.

git · tree-sitter · docs 384 ms
01.07 · Freshness

It knows when it’s stale.

Every note is pinned to a SHA. When the code beneath it moves, recall marks the note 🟡 instead of silently serving an old answer — the exact failure mode that rots every doc.

SHA-pinned · 🟢 / 🟡freshness
01.08 · Self-sustaining

Smarter on every commit.

Each commit auto-wires new links into the graph. Human commits get wired retroactively. The system compounds: the more you ship, the sharper its memory of why you shipped it.

auto-wire · retroactivecompounds
02 — Smart code, dumb reader

Make the code smart.
Then read it for free.

The trick isn’t a clever reader — it’s the opposite. recall spends the intelligence once, at write-time, so reading it back can be dead-dumb. And a dumb reader is the fast, precise, cheap, traceable one. The ~1,400× token saving falls out of that — it isn’t the trick, it’s the receipt.

01
The move

Make the system smarter — once, at write-time.

While the AI works and already knows why, it stamps one sentence onto the commit: the decision, the why, the links. The thinking happens at the knowing moment, not the guessing moment. The codebase itself gets smarter.

02
The consequence

Now the reader can be dead-dumb.

Because the intelligence is already in the index, recall doesn’t reason at read-time at all — it’s plain SQLite full-text search. No model, no embeddings, no re-reading files. A reader so dumb it costs nothing to run.

03
The payoff

And a dumb reader is the fast, precise, cheap one.

It returns the exact decision (precise, not “where a word appears”), in sub-milliseconds (fast), for zero model tokens (cheap) — and the harder and more complex the question, the bigger the win, because a dumb lookup stays flat while grep-and-read explodes.

04
The proof

Every answer is traceable — and can’t go stale.

Each note is pinned to the commit it was written against, so you can follow any answer back to its source, and recall flags it the moment the code moves on. Nachvollziehbar by construction: the code is the memory, so the memory can’t lie.

grep-and-read · a smart reader, every time
“why do uploads vanish after the RLS cut-over?”
  • grep the codebase for the symbols
  • open + read 3 candidate files, top to bottom
  • re-derive the reasoning from scratch — every turn
~214,000 tokens
~147 ms · grows with the codebase · no trail to follow
recall · a dumb reader, same answer
recall “rls cut-over uploads gone”
  • one SQLite lookup over the stamped anchors
  • returns the decision + the why + the links
  • pinned to a commit — traceable, freshness-checked
152 tokens
~2.18 ms · 0 model tokens · flat as the repo grows

Measured cold-start on two live production repos (360, mccain-cms) — three real questions, no recall trailers planted. ~1,400× fewer tokens, ~67× faster — and the harder the question, the wider the gap, because the dumb lookup stays flat while grep-and-read keeps re-reading.

03 — The numbers

Measured on real
repos. Before we
shipped a line.

We didn't benchmark a toy. We ran the engine against two live production repos — 360 and mccain-cms — both with zero recall trailers, the honest cold-start a new customer sees. Here is what came back.

~1,400×
fewer tokens than the grep-and-read path
152 vs ~214,000 tokens · 3 questions
~67×
faster to the answer that includes the why
2.18 ms vs 147 ms
0.25 ms
median recall at 108,627 anchors
scales flat — FTS5
10/10
real questions answered, 2/2 nonsense silenced
no hallucinated hits
04 — Benchmarks

The token bill is
the whole story.

For an AI, context space is the scarce resource. grep finds where a word sits — to learn why, it must read whole files back into context, tens of thousands of tokens per question. recall returns the decision in ~56. That gap is the product.

Three knowledge questions, on 360measured · head_to_head.py
MethodTimeTokensThe why?
recall()2.18 ms~152✓ direct
git grep + read files147 ms~214,000✗ only where
jcodemunch search_text~seconds✗ 0 hits · 2d stale
recall is ~1,400× more token-frugal and ~67× faster than the real standard path (grep → read). jcodemunch's index was 2 days / ~15 commits stale — the silent-lie failure recall is built against.
Tokens per question · grep vs recalldemo
Questiongrep+readrecall
Why must RLS writers set workspace_id?48,20056
Why split the viewer from the editor?71,50061
Why render the search modal via createPortal?39,80052
Latency scales flatmeasured · FTS5
RepoAnchorsMedianMax
fixture1,2040.04 ms0.09 ms
36043,7220.41 ms0.67 ms
mccain-cms108,6270.68 ms1.0 ms
05 — A real answer

Not where a word
sits. The decision.

One query, three levels: the hit, the meaning behind it, and what it's wired to. This is the exact shape recall returns — pinned to a commit, freshness-checked, in under a millisecond.

recall “rls cutover workspace_id uploads gone”0.41 ms · 0 tokens
Level 1The hit
lessonRLS cut-over: writers must set the new scope column.
🟢 fresh · pinned to commit a1f9c20 · src/app/api/panoramas/route.ts
Level 2The meaning
When RLS moves from user_id to workspace_id, every insert path (RPCs, edge functions, triggers) must stamp the new column — not just the backfill. Otherwise new rows are NULL and become invisible to the owner after the legacy policy is dropped (NULL is never in the set).
rlsworkspace_idcut-overinsert-pathdata-loss
Level 3The relation
decided_by → ADR-43 · Phase 2.4 RLS cut-over
guarded_by → drift test “writers-set-workspace-id”
recurs_with → “new assets column → recreate compat VIEW”
06 — See it, any time

Now you can trace
everything.

The local dashboard makes the whole memory visible — any time, read-only, zero tokens. Causal chains, plans & tasks, the drift light, the wiring in your code, and the decisions behind it. Nothing leaves your machine.

recall · Wiki
Causal chains, walkable. — the Wiki tab of the recall dashboard

Causal chains, walkable.

Request → decision → consequence → the code diff → the result. Click the arrows and walk any answer back to where it came from.

recall · Tasks
Plans & tasks, wired to the code. — the Tasks tab of the recall dashboard

Plans & tasks, wired to the code.

Every plan, roadmap and standing instruction lives in the repo, linked to the files it touches — and surfaces the moment you edit them.

recall · Drift
The drift traffic-light. — the Drift tab of the recall dashboard

The drift traffic-light.

Which notes the code has moved past (🟡), which files you’re editing right now (🟠) — the honest list of what may no longer be true.

recall · Code
The wiring in your code. — the Code tab of the recall dashboard

The wiring in your code.

The token-free code map and the pre-edit briefing: what a file is, why it’s that way, and what breaks if you change it (the blast radius).

recall · Product
Every decision, in one place. — the Product tab of the recall dashboard

Every decision, in one place.

Each feature mapped to the decisions, code, commits and tasks behind it — for coders and PMs alike, derived from the repo, always current.

07 — For humans

Two views on the
same result.

The AI reads raw data — but you get a presentation. Both render from a single search result with zero tokens: dumb template code, never the model. Columns to scan, or a living map to explore. Every file path is clickable — open it and a pre-edit briefing sits above the code; a breadcrumb lets you step back through wherever you came from. Time and git make it move.

📋 Columnswhat · where · git history
What
Writers set workspace_id
RLS cut-over lesson
ADR-43
Phase 2.4 decision
Drift guard
test locks it
Where
api/panoramas/route.ts
migrations/032_rls.sql
tests/rls-writers.test.ts
Git history
a1f9c20 🟢
2 days ago · cut-over
7e02b14 🟢
4 days ago · ADR
d3c8a90 🟡
3 wks ago · check freshness
🕸 Mindmapboxes of code · typed edges · zoomable
route.tsinsert path · stamps workspace_id
RLS cut-overcore note · 🟢 a1f9c20
ADR-43decided_by
rls-writers.testguarded_by
032_rls.sqlmigration
08 — Three stages

Smart for free.
Brilliant on purpose.

You're never forced to spend a token. Bootstrap gives you a working memory for nothing. Power Mode is a deliberate upgrade — and every stamp it writes is reversible, tagged by origin (bootstrap · power · live · human). Undo anything, anytime.

1

Bootstrap

Point recall at your repo. It indexes git, code and existing docs token-free — instant base intelligence. Nothing to opt into, nothing to pay.

always free
2

Power Mode

A conscious choice. The AI reads the hotspots, understands them, and stamps richer nodes — the real why, synonyms, sharper links. Costs tokens once. Fully reversible.

opt-in · undoable
3

Living memory

From then on every commit auto-wires new links — even human commits, retroactively. The graph compounds: less effort over time, more precision. It only gets smarter.

self-sustaining
09 — Works with any AI

Even the AIs that
can't see your disk.

A browser-based AI can't read your local code or git history. So a tiny local bridge does — and only the finished 3-level answer ever leaves your machine, never the code. The website is the gatekeeper: it checks your plan and token, the bridge does the reading. Same protocol as our CMS AI-bridge. Copy-paste today, MCP connector tomorrow.

1Web AIChatGPT · Gemini · Claudeasks a question
2recall.devchecks plan + tokenthe gatekeeper
3local bridgereads index.dbonly it sees your disk
43-level answerthe why, not the code← back to the AI
10 — It heals itself

When you contradict
the record, it knows.

A memory rots because nobody notices when reality diverges from it. recall notices the instant you write. If your change contradicts a pinned note, it flags the drift and offers the fix — you approve, and the truth stays current. A sprint plan that's always up to date.

Drift detected alarm
⚠ This change contradicts ADR-43.
You're removing the workspace_id stamp from the upload path. The record says writers must set it or new rows go invisible. Proceed anyway?
- writers must set workspace_id on insert
+ uploads now scoped by team_id (ADR-43 → ADR-58)
How the heal worksyou decide · every time
1 · Detect

Your write's anchors are recalled against the record. High overlap + opposite meaning = drift. Caught at write-time, not in a review three weeks later.

2 · Offer

recall proposes the heal — update the note, or supersede it with a new one that links back (supersedes →). The old decision stays in history, never lost.

3 · Approve

Nothing changes without your OK. You approve, recall re-stamps to the new SHA, and the graph is true again. The plan is, by construction, always current.

11 — The trap, before you fall

“You've done this
before. It bit you.”

recall isn't a linter — it won't invent new bugs. But the moment you start repeating a mistake you already documented, it puts the old trap and its fix in front of you, in microseconds. The owner's first rule made mechanical: never make the same mistake twice.

Putting a modal inside a panel with overflow: hidden
Editor #38: the modal got clipped → render it with createPortal into .ed-root.
recalled in 460 µs
Changing the insert path of an RLS table
RLS cut-over: writers must set workspace_id, or new uploads go invisible to the owner.
recalled in 238 µs
Adding a new field to the assets table
The compat VIEW has a frozen column list — it must be recreated, or the column never surfaces.
recalled in 532 µs
Editing an RLS policy function (mccain-cms)
EXECUTE-grant trap: a policy-body function needs the caller's grant or the policy breaks hard.
recalled in 243 µs
— Stop documenting. Start remembering. —

The code is
its own memory.

Install recall See it work

Self-hosted · offline-capable · zero tokens to recall · 14-day free trial