Where each coding agent stores its conversation history
twenty agents, twenty formats, one table
Every coding agent writes what you said and what it did to a file on your machine. The formats differ, the locations differ, and none of them is documented in one place — so here is that place, generated from the same registry deja's parsers are written against.
Where each one writes
| Agent | Where the sessions live | Format |
|---|---|---|
| aider | ~/.aider.chat.history.md | one Markdown log |
| Antigravity | ~/.gemini/antigravity*/brain/*/.system_generated/logs/transcript.jsonl | JSONL, one record per line |
| Claude Code | ${CLAUDE_CONFIG_DIR:-~/.claude}/projects/**/*.jsonl | JSONL, one record per line |
| Cline | ${CLINE_SESSION_DATA_DIR:-${CLINE_DATA_DIR:-${CLINE_DIR:-~/.cline}/data}/sessions}/*/*.messages.json | JSON files |
| Codex CLI | ${CODEX_HOME:-~/.codex}/sessions/**/rollout-*.jsonl | JSONL rollouts plus a history file |
| Copilot CLI | ${DEJA_COPILOT_ROOT:-~/.copilot/session-state}/*/events.jsonl | JSONL, one record per line |
| Cursor | ~/Library/Application Support/Cursor/User/{globalStorage,workspaceStorage/*}/state.vscdb | SQLite key-value store, or JSONL |
| DeepSeek Harness | ${DSH_HOME:-~/.dsh}/sessions/*/session-*/session.jsonl.zstd | JSONL, one record per line |
| Gemini CLI | ${GEMINI_CLI_HOME:-~}/.gemini/tmp/*/chats/**/*.{json,jsonl} | JSON or JSONL |
| Goose | ${GOOSE_PATH_ROOT}/data/sessions/sessions.db | JSONL, with a SQLite index |
| Grok Build | ${GROK_HOME:-~/.grok}/sessions/**/updates.jsonl | JSONL events with JSON metadata |
| Hermes | ~/.hermes/profiles/*/state.db | SQLite database |
| Kimi Code | ${KIMI_CODE_HOME:-~/.kimi-code}/sessions/*/*/agents/main/wire.jsonl | JSONL, one record per line |
| omp (Oh My Pi) | ~/.omp/profiles/*/agent/sessions/**/*.jsonl | JSONL, one record per line |
| OpenClaw | ${OPENCLAW_STATE_DIR:-~/.openclaw}/agents/*/sessions/*.jsonl | JSONL, one record per line |
| opencode | ~/.local/share/opencode/opencode.db | SQLite database |
| pi | ${DEJA_PI_ROOT:-~/.pi/agent/sessions}/**/*.jsonl | JSONL, one record per line |
| Qwen Code | ${DEJA_QWEN_ROOT:-~/.qwen}/projects/*/chats/*.jsonl | JSONL, one record per line |
| Roo Code | | JSON files |
| Zed | ~/Library/Application Support/Zed/threads/threads.db | SQLite database |
Each row links to that harness's page in the session format registry, which documents the record schema, how roles map, the override variables, and what deja could not verify. Every entry carries the date it was last checked against a real store.
Reading them yourself
Most are JSONL — one JSON object per line, appended as the session runs:
ls -t ~/.claude/projects/*/*.jsonl | head -1 | xargs tail -5 | jq -r '.message.content'
Three are databases rather than files. opencode keeps opencode.db, Hermes a state.db per profile, and Zed one SQLite store for every thread with each body compressed as a zstd frame — so sqlite3 alone will show you rows of binary, and you need zstd to read a thread. Cursor is the awkward one: older versions keep a key-value blob inside state.vscdb, newer builds write JSONL transcripts per project.
Two practical notes. Paths move: Claude Code honours CLAUDE_CONFIG_DIR, Codex CODEX_HOME, Kimi KIMI_CODE_HOME, Goose and opencode follow XDG_DATA_HOME. And these files hold whatever your session held, including any secret that was pasted or printed — treat them like the logs they are.
What to do with them
Reading one file answers "what did I do in that session". The useful question is usually the other one — "which session was it" — and that needs an index across all of them. That is what deja builds: one local index over every store above, searchable from the command line and readable by the agents themselves over MCP.
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh deja "connection pool exhausted"
No capture step and nothing to switch on first: the files are already there, including the months before you installed anything. Indexing and search stay local, and credentials are stripped as the index is built.
The full registry · Why agents forget in the first place · Getting started