recall

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.

curl -fsSL https://raw.githubusercontent.com/mayberuk/recall/main/install.sh | sh

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

SessionDateProjectBranchFound
6e2b8d152026-06-03github.com/acme/paymentshotfix/dedupe4 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…
3b8a2c942026-07-21github.com/acme/paymentsmain1 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.

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

  1. FEB
  2. MAR
  3. APR
  4. MAY 6
  5. JUN
  6. 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-code

It 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

  • CursorAdd to Cursor

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.

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.

  1. A typical searcheverything, from cold30 ms
  2. Command output tooroughly 20× the text93 ms
  3. A search that finds nothingevery byte read first113 ms
  4. 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.