Notable changes to tapesctl. The project is pre-1.0: minor releases may
break, and every breaking change is recorded here plainly.
-
tapes-client0.6.0, the release that follows tapes v0.49.0's paging of the composite, trace and raw-turn reads.sessions traces,sessions raw-turnsandtraces getnow print one page of the server's document — the whole document withnext_cursoron every page but the last — and take--limitand--cursorto page;traces get's record view names the command that fetches the next page.spans listkeeps printing the whole trace: it walks every page before it prints. -
Every read command has a human view, and every human view is laid out for the terminal it prints on.
sessions list,traces list, andspans listare borderless tables that drop their least important columns before they would wrap;sessions get,traces get, andspans getare record views that end by naming the command to run next;searchis a ranked list with the matched snippet under each hit. Colour marks status words only, and is applied only on a terminal withoutNO_COLOR. Ids are always printed whole. Piped output keeps the alignment, prints the full cursor, and writes-for absent values.searchhits carry their session, trace, and span ids;spans getprints input and output documents unelided. Decoded API error text is sanitized before it reaches the terminal.--jsonon any of them prints the server's document;sessions get,traces *,spans *, andsearchgain the flag, and the JSON they print under it is byte-for-byte what they printed by default before. Thecomfy-tabledependency is gone. -
Costs in a list are cents (
$41.62,<$0.01, or—for none); times in a list are relative (2d ago) and in a record areSep 24 05:01in the offset the server sent. A session the deriver has not titled readsuntitled (<harness id group>)instead of the truncated hash the server stores. -
Status lines lost their
tapesctl:prefix:✓ captured session <id>with the console link or the--web-urlnote on the next line;syncprintsSwept <n> sessions (<m> files)and a✓ <new> new · <k> unchangedline;sync -vper-file lines lead with the outcome, and the outcomes are nownew,unchanged,failed,unknown. Errors and warnings keep the prefix. -
Default logging is
warn;-visinfoplus tapesctl's own debug,-vvis trace. TheINFO sweeping transcriptslinesyncprinted on every run is gone unless asked for. -
API refusals read
tapes API at <host> answered <status> <reason>: <message> (<code>), taken from the server's error document, with ahint:line for a missing cassette, an auth failure, or a 503. The full URL and raw body are no longer printed. A refused connection prints the OS reason once and a hint namingtapes serve,--api-url, andTAPES_API_URL; the doubledcould not reach the tapes API: could not reach the tapes APIand reqwest's wrapper lines are gone.
tapesctl sync --harness-id <ID>(defaultclaude) sets the harness id stamped on every uploaded transcript. It changes only the label the server files sessions under: the sweep still reads the~/.claude/projectslayout and the server still derives Claude-shaped records, so a Codex or pi tree pointed at--projects-rootstill finds zero sessions. The flag exists for history rewritten into that layout and shape ahead of time.SyncArgsandSyncConfiggain aharness_id: Stringfield; code that builds either by struct literal must supply it.
tapesctl cassettes <name> <method>no longer fails withcould not decode the tapes API responsewhen the cassette answers with something other than JSON. The response is now read by itsContent-Type: JSON is pretty-printed as before, anything else is printed byte-for-byte.skills get-skill-markdown(text/markdown) was unusable before this.
- Breaking: the top-level cassette spelling
tapesctl <cassette> <method>no longer parses. It shipped as a hidden alias for one release (v0.4.0) aftertapesctl cassettes <cassette> <method>became the canonical form, and is now an ordinary unknown-command error. The fix is mechanical: insertcassettesbefore the cassette name.
- Cassette discovery — the surface cache read and any revalidation request —
now runs only for the command lines that can reach the generated surface:
tapesctl cassettes …,tapesctl help …, and bare or flags-only invocations. Every other command builds its CLI with zero discovery I/O. Retiring the top-level aliases is what made this possible: while any first token could have been a cassette, every invocation had to discover before it could parse.