Quick Start

This page takes a machine that has used Claude Code and turns its history into conversations you can read. Nothing in Claude Code changes: no plugin, no hook script, no environment variable. The collector reads files that are already on disk, so it also works on history written before it was installed.

Get the binary

Each release ships one package per platform, with the binary, LICENSE and NOTICE inside:

Platform Package
macOS, Apple silicon apache-skywalking-ai-sessionizer-<version>-bin-darwin-arm64.tgz
macOS, Intel apache-skywalking-ai-sessionizer-<version>-bin-darwin-amd64.tgz
Linux, x86-64 apache-skywalking-ai-sessionizer-<version>-bin-linux-amd64.tgz
Linux, ARM 64 apache-skywalking-ai-sessionizer-<version>-bin-linux-arm64.tgz
Windows, x86-64 apache-skywalking-ai-sessionizer-<version>-bin-windows-amd64.zip

They are on the downloads page and attached to the GitHub release. Unpack one, put asz on your path, and check it:

asz version

Or build it yourself.

Build

Go 1.25 or later. The module has one dependency, a YAML parser.

git clone https://github.com/apache/skywalking-ai-sessionizer.git
cd skywalking-ai-sessionizer
make build          # -> ./bin/asz
./bin/asz version

Every command reads asz.yaml from the working directory when no -config flag is given. The file at the repository root is the default configuration with every value written out, so the commands below work as they are. See Configuration to change where data comes from or goes.

See what is there

./bin/asz sources
source root: /Users/me/.claude/projects
filtered   : 20 session(s) excluded by config

SESSION                               DIRS  STREAMS  META  JOURNAL  MANIFEST
0438c73b-2367-4ed5-9de3-13ef9a17ed01  2     132      131   14       14
04b56e12-fae2-4413-a7c1-f18911a1463f  1     1        0     0        0

One row per session: how many directories its files are spread across, how many execution streams it has (the main transcript plus one per child agent), and how many child-agent sidecars, workflow journals and manifests were found. The source directory is resolved the way Claude Code resolves it: CLAUDE_CONFIG_DIR, then XDG_CONFIG_HOME, then ~/.claude. Sessions under /private/tmp are Claude Code’s own helper agents and are excluded by default.

Land the history

./bin/asz collect -once
[17:14:09] sessions=44 sources=5867 landed=5867 records=359292 bytes=1.0GB indexed=359292 gone=0 conflicts=0 busy=0 pending=0 errors=0 (2m39.473s)

Every source file is read from its cursor onward and written into the storage root as Session Data, then indexed. The line above is one machine’s first pass, measured on 2026-09-03: 44 sessions, 5,867 source files, 1.0 GB of records, in 2 minutes 39 seconds. Later passes read only what is new; the next pass on the same machine landed one source in 933 ms. A pass with pending or errors above zero did not collect everything, and the command exits non-zero so a script can tell. Re-running is safe: landing is idempotent by design.

Assemble

./bin/asz parse
SESSION                               ROUND  SEQ   NODES  RELS  UNRES  TALKS  RUNS  STEPS  TOOLS        CHILDREN
0438c73b-2367-4ed5-9de3-13ef9a17ed01  1      305   17249  703   0      357    445   11473  5620/5620    131/131
04b56e12-fae2-4413-a7c1-f18911a1463f  1      1     409    11    0      11     11    277    146/146      0/0
04c6e9de-3b81-4106-a08b-e75259c33ca4  1      1     5      0     0      0      0     2      0/0          0/0
44 round(s) written

Each session becomes one conversation, and each parse appends one round to its chain when something changed. TOOLS and CHILDREN show how many tool calls and child-agent launches were joined to their results, out of how many exist. A second run with nothing new writes no rounds.

Read

./bin/asz view

Open http://127.0.0.1:8787. The list page shows every conversation; a conversation page shows its talks, its execution streams, the flow on a time axis, and the evidence behind every step.

On a machine with Claude Code, asz view alone is enough. It runs the collector and the parser itself, every 5 seconds by default, and the list page shows when the data was last refreshed and when it will be next. The two steps above are worth running once to see what each does.

Check

./bin/asz verify
checked 44 session(s), 5867 stream(s), 359292 records
checked 44 conversation chain(s), 44 round(s)
all landed data is contiguous and matches its digests

Every landed file is checked against its digest and every chain against its own commit digests. This needs no source files and no collector, so it also works on a storage root copied from another machine.

Where it went

Everything is under the storage root, ./data by default. Landed files are write-once, the index is derived and disposable, and the round chain is append-only. Deleting the directory starts over. See Storage Root.