wimcc — What's in My Claude Code

English · 한국어
Replay what Claude Code actually did — not what it said.
What's in my cc?
wimcc replays a Claude Code session — the one that just ran, or the one running
now — as an execution you can step through. It surfaces what the chat log alone
doesn't: which tool failed and why, how much time and how many tokens a model
request cost, what a hook blocked, which edit changed which lines of which file
— all on one screen, each item traceable straight back to the raw record it
came from.
Things you can do with wimcc:
- See which tool calls failed in this session, and why.
- Track where the tokens went — usage, cost, and context efficiency.
- Trace which edit changed which lines of which file (file lineage).
- Check what a hook blocked or let through.
- Follow how model requests, tool calls, and hooks interleaved over time.
- Read all of the above in a browser UI — or pull it into another tool or agent
over the Pull API / MCP.
Everything runs locally on 127.0.0.1 and nothing is sent outward. External
access is read-only.
Quick start
Prebuilt binary
Grab the archive for your platform from
GitHub Releases
— Linux x86_64 or macOS Apple Silicon. The WebUI is embedded; the single
binary is all you need.
tar -xzf wimcc-v*-aarch64-apple-darwin.tar.gz # or …-x86_64-unknown-linux-gnu.tar.gz
./wimcc init-db # apply migrations, prepare .wimcc.sqlite
./wimcc serve --auto-migrate # http://127.0.0.1:7878 (auth off by default)
./wimcc doctor # verify collector wiring
Build from source
just build-release # build the SPA + release binary (target/release/wimcc) in one step
./target/release/wimcc init-db # apply migrations, prepare .wimcc.sqlite
./target/release/wimcc serve --auto-migrate # http://127.0.0.1:7878 (auth off by default)
./target/release/wimcc doctor # verify collector wiring
serve runs everything in one process: the read-only Pull API, the embedded
WebUI, the OTel + hook receivers, and a live tail of ~/.claude/projects
transcripts. For Claude Code to emit OTel + hook events into wimcc you set up
~/.claude/settings.json once — see Connecting Claude Code.
wimcc doctor tells you what's connected and what's missing.
wimcc ingest --all is still available for backfill (a cold-start sweep of
existing transcript JSONLs) but is not required for live operation.
CLI
wimcc [--db-path <PATH>] [--log-format pretty|json] [--verbose] <command>
Global flags apply to every subcommand. --db-path defaults to
.wimcc.sqlite (env WIMCC_DB).
| Command | Purpose |
|---|
init-db | Apply migrations and prepare the database. |
ingest --all / ingest --path <P> | Backfill: scan transcript JSONL files into raw + observed events (idempotent). |
doctor [--json] [--server <URL>] [--project <DIR>] | Read-only diagnosis of collector wiring (settings hierarchy, hooks, server probe). Never mutates anything. |
serve | Start the local service: Pull API + WebUI + OTel/hook receivers + transcript live tail. |
wimcc serve flags
wimcc serve [--bind 127.0.0.1] [--port 7878]
[--auto-migrate] # apply pending migrations on startup
[--transcripts-root <PATH>] # override ~/.claude/projects
[--no-watch-transcripts] # disable the live tail (OTel/hook only)
[--auth off|on] # bearer-token auth on /v1 + /mcp (default: off)
[--retention-profile none|default|strict] # background retention sweep (default: none)
[--print-token] [--rotate-token] # manage the bearer token, then exit
[--sse-keepalive-secs N] # WebUI live-stream keep-alive (default: 30)
[--sse-channel-capacity N] # broadcast channel capacity (default: 512)
[--shutdown-after-ms N] # test/smoke convenience
What it observes