v0.161.0
[0.161.0] - 2026-09-08
Added
- A durable delegation ledger — the record of who handed what work to whom (#3378).
Three systems already described the fleet and none recorded the edge that carried the
work: orgChart draws the capability graph and persists nothing, turn telemetry has no
actor column and no edge (attribution is only "which instance's DB the row landed in"),
and the in-flight delegation registry is an in-memory dict of cancel handles. So an
operator could see how much an agent spent and who it could have delegated to, but
never what actually flowed along which edge. A new per-instanceledger.dbrecords one
row per delegation — from-agent, target kind/name/instance, what was asked, outcome,
duration, and cost where it is genuinely known — joinable toturnson
task_id/session_id. - Written through one seam, wired to every dispatch funnel (#3378).
graph/ledger.py::record_delegationis the single writer, mirroring
record_turn: a new dispatch surface routes through it or its edge goes unrecorded.
All three existing funnels are wired — in-process subagents (task,task_batch, SDK),
every external delegate (and thereforedelegate_to, the coder ladder and the board
loop), and background subagent jobs. That third one matters: a background job never
passes through the in-process funnel — it is fired as a self-directed A2A turn — which
is the same shape of blind spot that made CLI coding-agent runs invisible to turn
telemetry for months (#3015). Plugins reach the same seam viasdk.record_delegation. - An unknown cost is stored as NULL, never as zero (#3378).
Only some paths carry a real number. A confident0would make an unmeasured coder look
free and silently understate every rollup built on the column, so the aggregate also
reports how many rows were actually priced. Subagent edges deliberately record no cost
at all: that spend is already billed to the parent turn's telemetry, and storing it here
too would double-count the same work against itself.
Full Changelog: v0.160.0...v0.161.0