asz is one binary with one subcommand per step. Every command reads asz.yaml from the working directory unless -config FILE names another file. Commands that take a SESSION accept a Claude Code session id; a conversation ID is the same value, because the adapter maps one session to one conversation.
asz sources [-config FILE] list discovered sessions and their sources asz collect [-config FILE] [-once] land new source data into the storage root asz index [-config FILE] [SESSION] report what the derived index holds asz show [-config FILE] SESSION ID resolve a record id or tool-use id to its payload asz parse [-config FILE] [SESSION] assemble conversation structure into a round chain asz repack [-config FILE] DEST [SESSION] re-cut landed files into DEST under the configured budget and build its chains asz conversation [-config FILE] [-json|-yaml] ID fold a conversation's rounds and show the structure, or print the asz.view document asz view [-config FILE] [ADDR] serve the conversations as a page asz push [-config FILE] [-once] send landed files and rounds to an OpenTelemetry logs receiver asz glossary what the runtime calls the things the model names asz verify [-config FILE] [SESSION] check landed data and round chains are intact asz version print the version
| Flag | Meaning |
|---|---|
-config FILE | Configuration file. Default: ./asz.yaml when present, else the compiled defaults. |
-once | Single pass, then exit. Overrides collector.mode. |
-terms MODE | Name things in the model‘s words (unified, the default), the runtime’s (native), or both. |
Discovers sessions under the source root and counts their files without landing anything. One row per session: directories, execution streams, child-agent sidecars, workflow journals and manifests. Sessions removed by the include and exclude filters are counted on the filtered line.
Lands what is new from every source into the storage root and updates the index. In watch mode it repeats every interval; with -once or mode: once it makes one pass and exits. One line per pass:
[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)
| Field | Meaning |
|---|---|
sources | source files seen this pass |
landed | sources that produced new data |
records | source records landed |
indexed | index entries across every session touched |
gone | a source deleted since the last pass. Normal: Claude Code prunes transcripts, and the landed copy outlives them. |
conflicts | a source was rotated, truncated or rewritten behind its cursor. Collection stopped for it. |
busy | a session skipped because another collector holds its lock |
pending | a source still had data when the per-pass limit was reached |
errors | listed on standard error after the line |
pending or errors above zero means the pass did not collect everything, and the command exits non-zero. A clean pass is pending=0 errors=0.
Reports the derived index of one session, or of every session: entries, joinable content blocks, streams and interned strings, plus a count of records by kind. The index holds identifiers and roles only, never text, and can be deleted; the next collect or parse rebuilds it from the landed files.
Resolves one record id, or one tool-use id, to the landed record that carries it and prints the record. This is the way to see exactly what a step in a conversation is backed by.
Assembles every session, or one, and appends a round to each conversation's chain when something changed. One row per session:
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
ROUND is the round written, or - when nothing changed. SEQ is the landed sequence the conversation now covers. UNRES counts references that could not be resolved. TOOLS and CHILDREN are joined out of total. The command exits non-zero when any session failed to parse, so a loop or a CI step can read the status instead of the log.
Re-cuts every landed file of the storage root, or of one session, into DEST so that no file exceeds the configured max_delta_bytes, then assembles DEST's chains. Every record keeps its bytes and its order; the cursors come along so collection can continue into DEST; the index and the chains are rebuilt there, because a round addresses records by file and line and the old references name positions that no longer exist. DEST must be a different directory: a landed file is never rewritten in place. One row per session:
SESSION FILES IN FILES OUT RECORDS BYTES 0438c73b-2367-4ed5-9de3-13ef9a17ed01 305 312 21119 42.1MB
This is how an existing root is brought under a new budget after max_delta_bytes changes, and it needs no source files.
Folds a conversation's chain and prints the structure: rounds and head digest, the landed range, entity counts, and a count of nodes by kind.
conversation 0438c73b-2367-4ed5-9de3-13ef9a17ed01 rounds 1, head 9a29d5acdd73… landed through seq 305 entities 17249 nodes, 703 relations, 0 unresolved (0 still open)
With -json or -yaml it prints the conversation's asz.view document instead, the same document asz view serves at /api/c/{id}/view, for a pipeline or a diff. The YAML is a rendering of the JSON with the same keys in the same order, not a second format.
asz conversation -json 0438c73b-2367-4ed5-9de3-13ef9a17ed01 > conversation.json asz conversation -yaml 0438c73b-2367-4ed5-9de3-13ef9a17ed01 | head
Serves the conversations as a page on ADDR, 127.0.0.1:8787 by default. The list is at / and one conversation at /c/{id}. The page reads the folded chain on demand and caches nothing beyond the process.
With the claude-code-local adapter, when its source directory exists on the machine, the same process also runs the collector and the parser: once with -once, or on the collector interval otherwise. /api/status reports the mode, the source, the last and the next refresh and the counts of the last pass, and the list page shows the same. On a storage root copied from another machine there is no source, so the page serves what is there and shows no refresh.
asz scenario build FILE --format {claude-code|sd} --out DIR [--at TIME] [--scale FACTOR] [--repeat N] [--through CHECKPOINT] asz scenario check FILE [--format {claude-code|sd|all}] [--out DIR] [--at TIME] [--scale FACTOR]
build turns a scenario file into the input a session leaves behind, under DIR, with a DIR/asz.yaml for the ordinary commands to collect and parse it. check runs the scenario as a test against its expectation file, in every format, at every checkpoint. See Scenarios.
Sends every landed file and every round not yet sent to the OpenTelemetry logs receiver at export.otlp.endpoint, one log record per file, then exits with -once or repeats every export.otlp.interval. One line per pass:
[10:12:03] files=306 bytes=47.9MB requests=5 errors=0 (1.1s)
A pass with errors exits non-zero with -once; the files whose requests failed are not recorded as sent and go again on the next pass. See Export over OpenTelemetry.
Prints every name the model uses, what the runtime calls it, where in the runtime‘s records it is found, and a note. A — in the runtime column means the model derives the concept and the runtime has no word for it. Every command that prints names accepts -terms native to use the runtime’s words instead.
Checks every landed file against its digest and every round against its commit digest, for one session or all of them. It reads the storage root only, so it works without the source files and without a collector.
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
Prints the version the binary was built with, the Go version, and the platform. A release build says its version; a plain go build says dev.