What is indexed, and where it lives
What gets indexed
| Source | Origin | Notes |
|---|---|---|
| Sessions (Claude) | ~/.claude/projects/<hash>/<uuid>.jsonl | Full transcripts, tokens, cost, files touched, models used |
| Sessions (OpenCode) | ~/.local/share/opencode/opencode.db (SQLite) | Cost, tokens, todos |
| Subagent transcripts | <session-dir>/<id>/subagents/*.jsonl | Explore, aside, and acompact-* (orphaned compacted history) |
| Plans | ~/.claude/plans/*.md | Agent planning docs, split by ## |
| Tasks | ~/.claude/tasks/<session>/*.json | Linked to parent session |
| CLAUDE.md | Auto-discovered from project hashes | Linked to sessions in same project |
| History | ~/.claude/history.jsonl | Shell history, optionally tied to a session |
| Paste | ~/.claude/paste-cache/*.txt | Large pasted blobs |
| Diary | ~/.chat-recall/index/diary/<agent>/*.json | What the agent told its future self via recall_diary_write |
Data locations
The CLI keeps almost nothing locally — just what it needs to reach the server:
| Path | What |
|---|---|
~/.chat-recall/credentials.json | Server target(s) + device token (mode 0600) |
~/.chat-recall/sync-ledger.json | Per-server sync watermark (what's already shipped) |
~/.chat-recall/hooks/ | Installed hooks (after install-hooks) |
~/.chat-recall/index/diary/ | Agent diaries written by recall_diary_write |
~/.chat-recall/shadow/ | Gzipped copy of the fullest-seen transcript per session, so an upstream --resume truncation cannot destroy history |
~/.chat-recall/cache.db | Local outcome/metadata cache for the local dashboard. Not an index, and not used in server mode |
All indexed content — chunks, FTS, vectors, knowledge graph, secret findings, diary — lives on the server (Postgres for self-host and SaaS). Reset it by wiping the server's Postgres data, not anything under ~/.chat-recall.
Privacy
Your sessions sync to a chat-recall server — either one you self-host (your own box, your own Postgres) or the SaaS. Before anything leaves the CLI it is redacted: secrets are masked client-side, so the server never receives raw credentials. Self-hosting keeps all data on infrastructure you control; the SaaS is the hosted alternative.
No telemetry. Your data lives in your server's Postgres — back that up however you like. On the SaaS it lives in the hosted Postgres; self-host if you'd rather keep it entirely on your own infrastructure.