Transcripts older than 30 days are deleted by default, and nothing tells you it is happening.
Where this tool keeps its history
~/.claude/projects/<project>/<session>.jsonlTranscripts older than 30 days are deleted by default, and nothing tells you it is happening.
~/.claude/projects/<project>/<session>.jsonlRun this before anything else. It tells you whether the deletion has already run on your machine:
find ~/.claude/projects -name '*.jsonl' -mtime +30 | wc -lIf that returns 0 and you have been using Claude Code for more than a month, everything past the thirty-day mark is already gone. There is no trash folder and no undo.
Set the retention period explicitly. This is worth doing whether or not you install anything else:
// ~/.claude/settings.json
{ "cleanupPeriodDays": 3650 }That stops the clock on this machine, for this user, from today. What it does not do is bring back what is already gone, cover the other machines your team works on, or make the record readable by anyone but you.
A local daemon reads the JSONL transcripts Claude Code already writes — it does not wrap the CLI, intercept traffic, or need an API key. Each user turn becomes one record: the prompt, the response, and the diff of every file the assistant edited in that turn, with token usage attached.
Two details matter for accuracy, and both took real work. Claude Code writes one JSONL line per content block, all carrying the same message id and the same usage figures — summing per line inflates token counts by more than double, so we deduplicate by message id. And subagent transcripts are excluded from session counts, which otherwise report several times more sessions than you actually have.
# see what is at risk right now — no account, writes nothing
npx promptwake doctor
# start capturing a project
npx promptwake init .The local tier is free and works offline; nothing leaves the machine unless you sign in. Cloud sync and a shared team timeline are the paid tiers, and they are what turns a per-laptop archive into something a team can search.