Cursor stores every chat but only shows them per workspace, and the search only looks at titles. I kept losing the chat where I’d already solved something, so I wrote a tool for it.
It reads the chat files directly (state.vscdb on older builds, the jsonl transcripts in ~/.cursor/projects/ on newer ones) and builds a local index, so you can grep-style search everything:
brew install deja-vu (or npm i -g @vshulcz/deja-vu)
deja "connection pool exhausted"
deja last --harness cursor
deja view (opens everything as one local html page)
Some notes since people usually ask:
Works on history from before you installed it, there’s no capture step.
Nothing leaves your machine, it’s plain BM25 over a local index, no model, no api key. Tokens and keys get stripped when indexing.
It also reads Claude Code, Codex, Gemini CLI and a bunch of other agents’ logs into the same index. I switch tools a lot so for me this is the main point, “did I already deal with this” gets answered no matter where it happened.
You can also hook it up as an mcp server with deja install cursor, then the agent itself can check if you’ve hit an error before.
Single Go binary, MIT. If your build keeps chats somewhere else, tell me the path and I’ll add it.
