waybill 1.3.0
[1.3.0] - 2026-08-17
The open-issue batch: every UX issue filed against 1.1.1 (#6–#15),
implemented with a regression test each.
Added
- A real pause switch (#6) —
metering.enabled: falsenow stops
everything: the SessionEnd hook captures nothing,mineandmeter
(all paths,--otelincluded) exit 0 without touching the ledger, and
waybill statusreportsmetering: PAUSEDso the state is never
silent. The never-readmetering.sourcesfield is removed rather than
left as a decoy; old configs carrying it load unchanged. - First-run one-shots (#8) — the SessionStart path now speaks at the
two highest-intent moments: not-initialized (“say 'initialize my
waybill ledger' — 60s, no auth”) and metered-but-nothing-logged (“say
'sync my ledger' for a receipt from your git history”). At most one
line per session, each state at most once ever, never stacked on a
pacing notice. notices.level(#9) — one switch for everything Waybill says
first:normal(default),minimal(pacing thresholds and errors
only — the renewal reminder obeys it),off(metering runs, Waybill
never speaks unprompted). Documented in the README next to the privacy
commitments, withbudgets.renewal_reminder_dayssurfaced alongside.detaillevel (#10) —terse/standard/full, mirroring
audience:detail_defaultin config,--detailonquery, echoed
in the query envelope for the rendering layer, with rendering tables in
the spend/report skills. Floor rule:tersemay never drop
unattributed %, confidence values,low_confidencelabels,
evidence-tier labels, or ranges — shorter never means less honest.bin/waybilllauncher (#11) — a POSIX-sh launcher execs the
bundled engine, so every skill now invokes
"${CLAUDE_PLUGIN_ROOT}/bin/waybill" <command>— thenode <path>.mjs
incantation, its zsh word-splitting caveat, and the per-skill setup
block are gone. The validator rejects any reintroduction of the old
idiom.- Status is the menu (#15) —
waybill statusends with a
state-derivednext:line of skill trigger phrases (resolve the inbox
when it has items, process pending captures when they wait, sync for
the first receipt, build the pitch once entries exist), so the health
screen teaches the conversational UI, not just engine subcommands. - The exit path, documented (#7) — a README section covering pause,
quiet, export, uninstall (claude plugin uninstall waybill@waybill),
and full deletion (rm -rf ~/.waybillis the whole footprint).
Fixed
--jsonis honest everywhere (#13) —mine --jsonemits the
structured run summary (mined_new,remetered,gaps,
already_current, pluspaused/lockedstates),export --json
means--format json, and contradictory flags (--json --format csv)
are an exit-2 error instead of a silent choice.