ccx indexes every transcript in ~/.claude/projects: your prompts, the replies, every tool call and what it returned. Find the command from three weeks ago in milliseconds, then jump straight back into that session.
$ git clone https://github.com/luquitared/ccx && cd ccx && bun link && ccx index
$ ccx search "nginx reload" -t Bash 1. infra · Sep 28 14:02 · Fix TLS renewal sudo systemctl reload nginx ↳ ccx show 3f9a12c0 --line 214 2. blog · Sep 3 09:41 · Move to new VPS rsync -a conf/ vps:/etc/nginx/ ↳ ccx show 81c07e5d --line 977 $ ccx resume 3f9a12c0 cd ~/code/infra && claude -r 3f9a…
Every session is saved as JSONL on your disk, often gigabytes of it. ccx turns that pile into a SQLite full-text index you can query like grep, only ranked and fast.
Prompts, replies, thinking, tool calls with their inputs, tool results, summaries, titles, and subagent transcripts.
SQLite FTS5 with BM25 ranking. Re-indexing only touches changed files, so it's sub-second when nothing's new.
Injected reminders, hook output and resume replays are skipped, and every entry is indexed exactly once.
--json on search, show and sessions, so a Claude session can search its own past and read just the ~10 blocks it needs.
Filter by project, time window, tool or block kind. Every hit prints the command to open it.
ccx search "rate limit" -p my-api -s 2wRanked hits from one project in the last two weeksccx search "presigned url" -t BashOnly Bash tool callsccx show 3f9a12c0 --line 214 -C 8The conversation around a hit, renderedccx sessions -p my-api -s 1mSessions, newest first, with titlesccx resume 3f9a12c0Prints the cd … && claude -r line to pick it back upClaude starts every session with an empty head. Give it ccx and it can look up what you did last week the same way you would: search, read the few blocks that matter, carry on. Just say "use ccx".
www, two MX records for your mail host and a TXT record for SPF. We only re-created the A record afterwards, which is why mail stopped. Want me to add the other four back?Each one turns into a search or two and a show of the right slice. Claude never has to read a whole transcript.
"Find the session where I fine-tuned the model with LoRA. Which learning rate did we land on?"
ccx search "lora learning rate" -k assistant
ccx show <id> --line <n> -C 10Recover a decision and the reasoning behind it.
"Pull up the convo where we set up the agent on the remote machine and pick up where it left off."
ccx sessions -q "remote machine" --json
ccx show <id> --tail 30 --jsonRe-load a stalled task's last state into a fresh session.
"How did we get that CLI to authenticate last month? Do it the same way."
ccx search "cookies auth" -t Bash -s 2mRe-use a command that worked, instead of rediscovering it.
"We found a bug in #337 recently. Was it actually intentional?"
ccx search "337" -s 2w --main
ccx show <id> --line <n> -C 12Check what was known before changing behavior.
"Look at the briefings you've written me before and design a better one."
ccx sessions -q briefing --json
ccx show <id> --tail 20 --jsonLearn from its own past output.
"Go through my last three months of sessions. What have I built that I could turn into X? Rank them."
ccx sessions -s 3m -n 200 --json
ccx search "<theme>" --json -n 30Mine your whole history for patterns.
Paste this into ~/.claude/CLAUDE.md and Claude reaches for ccx on its own whenever you mention an earlier conversation.
## Past conversations
`ccx` searches every past Claude Code session on this machine. When I refer to an
earlier conversation ("the session where…", "like last time", "we already fixed
this") or you need context you don't have:
1. Run `ccx index` (sub-second), then `ccx search "<terms>" --json -n 10`.
Narrow with -p <project>, -s 2w, -k user, -t Bash, --main.
2. Read the best hits with `ccx show <session> --line <n> -C 10 --json`.
Read slices, never whole transcripts.
3. Say what you found (date and session title), or that nothing matched.
If I want to jump back in, give me the `ccx resume <session>` line.