Scroll back far enough and you will find it. The session where you worked this exact thing out. Three weeks ago, in a different directory, quite possibly in a different client.
You remember solving it. You do not remember enough of it to search for it.
So you explain it again to a fresh agent, and pay for the same reasoning twice.
What is actually sitting on your disk
Every agent CLI you use keeps a complete transcript of everything you ever asked it. The conversation itself, every tool call, every file it touched, written to disk as it happened.
On this machine, Claude Code alone holds 833 of them. 729 MB, split across 50 directories, one for every project I have ever opened it in. Counting the other clients I have installed, it comes to 264 sessions across six tools.
That is the largest pile of context I own, and the only one nothing indexes.
The picker stops where the client does
Claude Code can search its own history. On 2.1.241, claude --resume takes an optional search term and opens a picker, and it is genuinely useful.
It sees Claude Code sessions.
This site gets built by three of us: me, Claude Code, and agy. The 99 sessions agy has on this machine are invisible to that picker, and the 102 Claude Code sessions are invisible to agy. Every client keeps its own store, in its own format, under its own directory, and none of them has ever heard of the others.
The lock-in was never the model. You can move to a different model over lunch. Three months of context does not come with you.
Memory is where all the effort went
The industry's answer to this has been memory. CLAUDE.md, memory tools, notes you curate so the next session starts with something in its hands.
Memory is an artefact you maintain. It records what you decided at the moment you decided it, and then it ages badly against code that keeps moving.
Transcripts are the other kind of thing entirely. Nobody curates them, which is exactly why they are complete. The session where a decision actually happened still holds the reasoning, the approach you tried first that fell over, and the file you touched at 23:40 and forgot by Monday.
A memory file keeps the conclusion. The session kept the argument.
Keeping one live session clean is a discipline of its own. This is the problem that starts after that one: what becomes of the sessions you already finished.
So I built the thing that reads them
Nekyia indexes the stores that are already on the disk and searches across all of them at once.
It runs in two phases, because re-reading 729 MB on every invocation would be its own problem. Discovery reads a cheap fingerprint per session. Hydration only touches what changed, and commits metadata and search facets to SQLite atomically. Search is FTS5. Titles score eight, my own prompts four, the model's prose one, because what I asked is a better handle on a session than what came back. Relevance then blends against a fourteen-day recency half-life, since Tuesday's session usually beats an equally relevant one from March.
The index across those 264 sessions is 33 MB. Everything runs locally, against files you already have.
Resume, or a brief that admits it is a brief
Here is the part I think is worth arguing about.
Three of those six are resume-tier: Claude Code, Codex and Antigravity, where the exact resume command was verified rather than assumed. The other three are not, and each for its own reason. opencode and Codebuff took real local IDs and started something, and nothing in the result proved it had attached to the context I asked for. Kilo shares opencode's store format, but its executable was not installed when I did the command verification, so I have no business calling it resumable either.
So Nekyia does not tell you it resumed them. It builds a handover out of the indexed prompts, the touched files and the branch context, starts a fresh session with that, and says in the first line that this is a brief rather than a recovered state.
That honesty costs me a feature bullet, and I would rather pay it. A tool that claims to restore state it cannot restore is making the same mistake as an agent that is confidently wrong about a function signature. The output looks right up until the moment you lean on it.
What it deliberately will not do
Tool output is not indexed. Command results and file dumps are large, they are noisy, and they are the likeliest place for something private to be sitting. They are also not how anyone remembers a session. You remember what you asked.
There is no network service, no API key and no telemetry. The handover is deterministic, so building one costs no tokens and calls no model.
What the index does hold is a copy of text that was already on your disk, and that copy outlives the transcript it came from. So forget removes one session and every searchable facet of it, prune --missing clears out sessions whose source files are gone, and exclude takes a glob that keeps a directory out of the index for good. It promises neither redacted secrets nor an encrypted index, and its README says so in as many words.
It is pre-release, v0.0.5, and not on npm yet. You install it from the repository, and the first run shows you what it intends to read before it opens anything.
The data was always there
Five days ago I wrote about a plugin that puts a clock into a Claude Code session, because the transcript carries no time and neither you nor the model can tell how long anything took. This is the same shape of problem one floor up. The information was on the disk the whole time, and nothing was reading it.
The context you need for the thing you are about to start is, more often than is comfortable, sitting in a session you had in July.
Nekyia is on GitHub, MIT, and needs Bun.