curl -fsSL https://raw.githubusercontent.com/mayberuk/recall/main/install.sh | sh Your agent forgot. You didn’t.
Every conversation you’ve had with Claude Code or Codex is still on your disk. recall finds the one you’re thinking of in 30 ms, even when you’ve forgotten the words you used.
macOS · Linux · Windows. Checksum verified. Nothing left running.
- Typical search
- 30 ms
- History it reads
- all of it
- Setup per project
- none
- Background process
- none
- Your data leaves
- never
recall find idempotency 2 sessions · 5 hits · 6 ms
| Session | Date | Project | Branch | Found |
|---|---|---|---|---|
| 6e2b8d15 | 2026-06-03 | github.com/acme/payments | hotfix/dedupe | 4 hits in 3 turns |
| human | Duplicate charges again. Two merchants hit the same idempotency key and one of them saw the other’s receipt. How do we scope these keys? | |||
| assistant | Scope the idempotency key per merchant, never globally. The key is a string the client chooses, so… | |||
| 3b8a2c94 | 2026-07-21 | github.com/acme/payments | main | 1 hit of 4 turns |
| assistant | …a retry there needs the idempotency key to be safe, and without one it must not be retried at all. | |||
The top answer is in a checkout deleted months ago. recall keys a repo on its git remote, so every clone of it is one history.
run from ~/src/payments
You won’t remember the words you used
So it doesn’t make you guess. build finds iosBuild.
retries finds retry. Case never matters.
recall find "connection pooling"
no turns carry "connection pooling" in github.com/acme/payments connection 14 turns carry it, but not together with the rest pooling no turn carries it; nearby: pool, pooled, pools found elsewhere: 5 hits in 1 other repo github.com/acme/infra 5 hits · 1 session run: recall find 'connection pooling' --all
Empty-handed, it still hands you the closest words in your own history, and points at the project the answer is actually in.
Ask when, not just where
Put any topic on a timeline across your whole history.
“rate limit” · first 12 May · last 21 July · 8 mentions
- FEB
- MAR
- APR
- MAY 6
- JUN
- JUL 2
Your agent can search it itself
recall is an MCP server too. Your agent queries your history mid-task, without you pasting anything.
recall mcp install claude-codeIt reaches for it unprompted
“Have we hit this before?” is enough. You never say the word recall.
Answers stay small
A few hundred tokens, not a transcript.
Read-only, always
Five tools. None can write, delete or alter anything.
Nothing goes anywhere
Your machine, your files. No account, no upload.
One click, seven clients
Cursor takes the server straight from the link. The rest install with a command, so their cells put the exact one on your clipboard. Either way, recall has to be installed and on your PATH first.
Built to be called, not just typed
An agent pays for every token it reads and every second it waits. recall is priced for a caller that will run it four times in a row.
- 8.5 ms
- a query against a 50 MB session storeend to end, process start to exit
- 383 B
- the whole answer, in --briefabout 96 tokens, footer included
- 37 B
- in --ids, when it only needs the handleone session id, nothing else
- 5
- MCP tools, none of which can writeno delete, no edit, no shell
Narrow in three round trips
find which session, turns for the
passage, show for the context around it. All three against a
50 MB store cost 24.0 ms together, so an agent can iterate instead of
guessing once.
Branch without parsing
exit 1 means the search ran and matched nothing, distinct from
exit 2 for bad usage and 3 for an
unreadable archive. An agent tests a status, never a string.
Cap the answer before it exists
--budget 2000 shapes the reply to roughly that many tokens.
--max-bytes refuses outright above a ceiling. Neither truncates
mid-thought; both are stated in the footer.
Machine forms, not scraped text
--json is one object, --format jsonl
is one per line for streaming, --ids is bare session ids to pipe.
The coverage footer is a record in all three.
Figures measured on AMD Ryzen 7 5700X3D 8-Core Processor, against the seeded medium corpus. Every benchmark, in full.
It tells you what it skipped
Most search narrows quietly, so “no results” reads as “never happened.” recall ends every answer, every time, with what it did and did not look at.
It read what you and your agent said to each other, not the output of every command it ran. That is most of what is on disk and almost never what you want. Ask for it and this line says so.
How current the answer is. A conversation from ten minutes ago is already findable. Nothing runs in the background waiting to notice.
What it cost your machine. Seven milliseconds, from cold, reading rather than consulting.
What the answer costs your agent to read. Checking an old decision should be cheaper than redoing it, so every answer prices itself, and you can cap it.
If a limit isn’t printed there, it wasn’t applied.
No index. Nothing to go stale.
Other tools are fast because they read a summary they built earlier, which is why they miss the conversation you had ten minutes ago. recall reads the whole store on every query and still finishes inside a blink.
- A typical searcheverything, from cold30 ms
- Command output tooroughly 20× the text93 ms
- A search that finds nothingevery byte read first113 ms
- One blink of your eyefor scale, not a measurement100 ms
143 conversations · 1.52 GB, on one developer machine. The conversation is about 3% of what an agent writes down; the rest is command output. The reproducible figures run against a generated history instead.
It never leaves the machine
Not a policy, and not a setting you have to find. There is no code in recall that uploads anything, because there is nowhere for it to go.
Read from your disk
0 B
every byte of every past conversation, on every search
Sent anywhere
0 B
the counter that does not move, and the reason there is no account
- Account required
- none
- Anything about your history, sent
- none
- Telemetry, analytics, crash reports
- none
- Background process or daemon
- none
- Cloud index of your history
- none
- Network calls during a search
- none
recall makes one kind of network request, ever: recall update
asking GitHub which version is current, and only when you type it.
What that sends, and how to switch it off.