unwind
See all you Claude Code sessions, where your budget went, which subagent is stuck, and how a multi-agent run actually branched.
unwind reads Claude Code's own session logs and renders every session as a call tree — including subagents and forked/fresh /call invocations from the callstack plugin. No instrumentation, no plugin, no startup hook. Point it at a project that's been running for months and the whole history is there.
Try it
pip install unwind-labs
cd /path/to/your/claude-project
unwind serve # opens a browser at http://127.0.0.1:<port>
Ctrl-C to stop. unwind serve --help for flags (custom port, --all project picker, --no-browser).
What unwind is not
- Not a profiler or APM. No live instrumentation, no hooks.
- Everything stays local. Does not send data anywhere.
- Doesn't modify Claude Code.
How it works
unwind reads two sources, both already on your machine:
~/.claude/projects/<slug>/*.jsonl— Claude Code's own session logs (source of truth for conversations, tool calls, and token usage).<project>/.claude/callstack/log/—/callinvocation reports written by the callstack plugin (source of truth for nested/calltrees).
It joins these into a unified call tree, prices each turn at the model that produced it, and serves the result over a local HTTP port.
The whole multi-agent run as one tree. Subagents, /call with forked context, and /call with fresh context — nested to any depth. Click any node to read the conversation it had, including thinking blocks. |
|
| Live status across the tree. Session cards light up on the agent currently working; anything paused waiting on you turns amber back to the root. Glance to know if it's stuck or just busy. | |
| Cost on every session card. USD spent on each session and on its whole subtree, priced per turn at the model that produced it. When a run blows the budget, point at the branch that did it. | |
Cross-project monthly rollup. unwind usage report --month 2026-05 (or the Reports view) totals tokens + USD across every project. Answer "am I going to overshoot my month?" in one command. |
|
| Zoom into every session. Investigate any agent session quickly, including those stuck or errored out. |
CLI
The same data the web UI shows is also available from the CLI. Run any of them with --help for full options; most accept --json for scripting.
| Command | Subcommands |
|---|---|
unwind project |
list, show, current, path — discover known projects and resolve slugs |
unwind session |
list, show, tree — list sessions in a project, inspect one, or render its call/subagent tree |
unwind messages |
dump, grep — dump a session's normalized messages (text/json/markdown) or grep them |
unwind task |
tree, list, roots, forks — explore the unified call+subagent tree, top-level roots, and in-flight forks |
Let Claude Code introspect its own runs
Because every command speaks --json, Claude Code can call unwind as a tool against its own logs. Ask it things like "use unwind CLI to summarize what the last subagent did," "which branch of yesterday's session cost the most, use unwind CLI" or "find the earlier turn where we solved this same bug" — and let it unwind messages grep / unwind task tree --json its way to the answer instead of replaying from memory.
Keyboard shortcuts
←/→— switch between panes↑/↓— select a session or call-tree nodeEnter— open the selected node's detailsEsc— close details
Optional dependencies
Canvas PNG export uses ImageMagick to stitch large trees. If magick isn't on PATH, single-tile exports still work; only oversized trees (a single dimension above ~16k px) require it. Install with brew install imagemagick (macOS) or apt-get install imagemagick (Debian/Ubuntu).
License
Metadata
Release files for unwind-labs 0.4.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unwind_labs-0.4.5.tar.gz | 337.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unwind_labs-0.4.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 695.6 kB
Release files / unwind_labs-0.4.5.tar.gz
| Download URL | unwind_labs-0.4.5.tar.gz |
|---|---|
| Size | 337.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4d84fbcab414c780dca65fb328426e78c40aefea39117e3c619bb836a6cd176e
|
|
BLAKE2b-256 checksum How to use checksums |
f2634ba3bee28dc2701364db2730ea739d2a4edd2a0dd3ee9b551de0bf881086
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 6, 2026.
Transparency logRelease files / unwind_labs-0.4.5-py3-none-any.whl
| Download URL | unwind_labs-0.4.5-py3-none-any.whl |
|---|---|
| Size | 358.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f9c0f2ec874d6261f9717a212383f26a26b97890abe1a87b78b8bb9c264600d2
|
|
BLAKE2b-256 checksum How to use checksums |
d3e6a7738bc3e2959700bd6454f2959c4fd0b4c6b9ddbbda1c18b502d40f3c1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 6, 2026.
Transparency log