Skip to main content

Outside-in web observer for Claude Code sessions and callstack call trees

Project description

unwind

See all you Claude Code sessions, where your budget went, which subagent is stuck, and how a multi-agent run actually branched.

unwind - Inspect Claude Code sessions, callstack call trees, and subagents.

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//call invocation reports written by the callstack plugin (source of truth for nested /call trees).

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 node
  • Enter — open the selected node's details
  • Esc — 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

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unwind_labs-0.4.2.tar.gz (317.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unwind_labs-0.4.2-py3-none-any.whl (338.8 kB view details)

Uploaded Python 3

File details

Details for the file unwind_labs-0.4.2.tar.gz.

File metadata

  • Download URL: unwind_labs-0.4.2.tar.gz
  • Upload date:
  • Size: 317.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for unwind_labs-0.4.2.tar.gz
Algorithm Hash digest
SHA256 47e0c574e85b9bd65deb4d49ad8c56bbf428f3e194103b651b9b5a08b55e65e9
MD5 231509fb513e785b46fc3f92adcf9525
BLAKE2b-256 0fda6ac994ab7513671daeaa2be1a305c649d7aac3c1f779f001e44597387f19

See more details on using hashes here.

Provenance

The following attestation bundles were made for unwind_labs-0.4.2.tar.gz:

Publisher: publish.yaml on unwind-labs/unwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file unwind_labs-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: unwind_labs-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 338.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for unwind_labs-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d791d1a754e3fc3623c01442e00362146af40a219bd8efddf3e53bde30155e70
MD5 d5dfddba204260b586583247a7db7bc5
BLAKE2b-256 0b3b8edf9c271e7c486b3c211ccbdf954afef6c86e309595872cabca399dabe0

See more details on using hashes here.

Provenance

The following attestation bundles were made for unwind_labs-0.4.2-py3-none-any.whl:

Publisher: publish.yaml on unwind-labs/unwind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page