Adding memory to Zed's agent
one server id, two install paths, and one honest gap
Zed's agent keeps its threads in its own store and starts each one without the others. And unlike the terminal agents, everything you did in them is invisible to it — including the Zed thread from last week.
What Zed already has
Threads live in one SQLite database under Zed's data directory — threads/threads.db — and each thread body is a zstd frame rather than text, which is why reading them by hand needs both sqlite3 and zstd. The thread list is a list; nothing consults it while you work.
Adding recall
Zed takes memory as a context server, and there are two ways to get one:
deja install zed
writes the server into settings.json. Or install the deja extension from Zed's extension list, which brings its own copy of the binary if you have none.
Both use the same server id — deja-context-server — and Zed keys servers by id, so whichever order you install in there is exactly one server. That was not free: with two different ids, Zed ran two servers and the agent saw every tool twice.
The extension is still in review at the time of writing; until it lands, deja install zed is the path, and it needs the binary:
brew install deja-vu
What arrives, and what does not
The six tools, and a /deja slash command in the agent panel. What Zed cannot give you today is memory that arrives unasked: its extension API covers language servers, slash commands, context servers and debuggers, and there is no lifecycle hook where recall could be injected — no session-start block, nothing before a tool call. Every other harness in the matrix gets that; Zed does not, and it is a limitation of the API rather than something we chose to skip. It becomes work the day Zed ships a hook.
In practice the agent calls recall itself when the conversation implies earlier work, because the tool description tells it to. That covers most of the gap and none of the silence.
The part that is not about this harness
The index covers every agent's transcripts on the machine — twenty of them today, each in its own format — so a fix found in one tool answers a question asked in another, including sessions from before any of this was installed. That is the reason to index rather than to capture.
Nothing here writes memories, so there is nothing to hallucinate into your history; indexing and search are local, and credentials are stripped as the index is built (privacy). An injection is capped at 1,536 bytes per prompt and about 4 KB per tool call — what memory costs has the measured comparison.
Getting started · How Zed's store is read · The extension source