Adding memory to Crush

history per project, and every other project invisible from here

Crush is the only agent here that keeps its history beside the work: .crush/crush.db inside the project, with ~/.local/share/crush/projects.json listing where those stores are. So a Crush session forgets what the last one did, the way they all do — and also cannot see the work in the repository next door, or any of the sessions the other agents on this machine wrote.

Adding recall

deja install crush-auto

Four things, in the three places Crush reads:

  • A PreToolUse hook in ~/.config/crush/crush.json, matching bash, edit, write and multiedit. Before the agent runs a command or changes a file, deja answers with what this machine already knows about that command or that file — and says nothing when it knows nothing.
  • The MCP server, under mcp in the same file, so history is a tool the agent can also reach for by name.
  • The deja-history skill in ~/.agents/skills, which Crush scans by default. It appears in the system prompt's <available_skills> list, so the reason to look at history is in front of the model rather than only when someone asks.
  • A /user:deja command in ~/.config/crush/commands.

Crush's own crush_info reports all of it back: deja = connected (1 tools, 0 resources) under MCP, deja-history = user under skills, and the hook with its matcher and timeout.

What the hook actually says

Measured against a recording endpoint on crush v0.92.0, with a store holding four earlier sessions that ran go build ./.... The agent went to run it again, and the request Crush sent next carried the recall alongside the command's own output:

<deja-recall>
Last time this machine ran go build ./... it ended with:
./queue.go:31:2: undefined: zibblexEnqueue (in 4 sessions)
</deja-recall>

PreToolUse is the only event Crush fires, so this is the whole of automatic recall here — there is no session-start digest and no per-prompt channel. It is also the moment that matters most: the answer arrives where the mistake would be made, not at the top of a session where it scrolls away.

What it costs

From the recorded requests on that version: deja's tool schema is 3,138 bytes of the 29,754-byte tool block Crush sends with every request, the skill's catalogue entry adds 384 bytes to the 22,487-byte system prompt, and a recall that answers adds 269 bytes to the turn that asked. A recall with no answer adds nothing. With the binary moved aside and the wiring left in place, the turn still completed — the hook's failure is logged and ignored, and Crush is one tool lighter.

The part that is not about this harness

The index covers every agent's transcripts on the machine — twenty-five of them, each in its own format — so a fix found in Claude Code answers a question asked in Crush, including sessions from before any of this was installed. 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).

Getting started · Switching between agents · The Crush session format