0.7.1
A patch release. Nothing changes meaning, and the wire version stays 1.0.0-draft.4. The Claude Agent SDK now carries a subagent’s run report, the turn a background subagent woke, the CLI’s per-tool-result stamp, and the tool input exactly as the API produced it. In Google ADK Live, a barge-in’s turn now closes in order, though a real barge-in still parks the reducer (see below).
Claude Agent SDK
- A subagent’s run report reaches you. When an Agent (or legacy Task) call finishes, the subagent’s run report now rides that call’s
tool.done, verbatim, in host-only_meta["anthropic/agentOutput"]. The report covers status, agent id and type, the model it resolved to, totals, usage and tool statistics; for a background launch, it’s the launch acknowledgement instead.contentandpromptare left out, since the event already carries them. The report’s usage is the subagent’s own, so it stays out ofAgUsage, whose parent total already includes it. 0.7.0 didn’t carry the report. - A turn woken by a background subagent says so. A result’s
origin, for example{kind: "task-notification"}on the turn a background subagent’s completion woke, ridesext.anthropic.result-meta.origin. 0.7.0 dropped it. - The CLI’s stamp on a tool result rides its
tool.done. Atool_result_metaentry (for example, for a call a hook blocked or the user cancelled) now ridestool.done._meta["anthropic/toolResultMeta"], verbatim, beside any MCP_meta. 0.7.0 used it to decide the outcome but didn’t carry it. - The API’s own tool input. When the CLI rewrote a tool call’s input, the input exactly as the API produced it rides
tool.args.assembled.providerMetadata.wireInputand folds onto the tool-call block. That’s the input a replayed history must send back. It appears only when it differs from the event’s input. - Hardens how the harness writes its facts on a tool result: the
anthropic/keys on atool.done’s_metaare reserved for them, so a tool’s own keys under that prefix aren’t carried. Every other_metakey the tool returned is kept, verbatim.
Google ADK
- A Live barge-in’s turn closes in order. Only hosts on ADK’s
runLivepath see this change, sincerunAsyncnever setsinterrupted. In 0.7.0 a barge-in (interrupted: true) emittedturn.abortin the middle of its event, so that event’s own content, ADK’s full-text aggregate and the message’smessage.endall arrived after the terminal. Now the message closes first, andturn.abortwithreason: "interrupted"follows the event’s own content. The turn has one terminal, and the event’s own content precedes it. Ids are unchanged. - Known limit: a real Live barge-in still parks the reducer, as it did in 0.7.0. On the live wire, ADK sends the interrupt flag first, and then that generation’s own usage and completion events and the model’s reply, all in the same invoke. Those land after the turn’s terminal, so the reducer parks and the reply isn’t in the fold. A clean fold of a barge-in needs each generation to get its own turn.
@silverprotocol/core
StreamAssembler.toolArgsAssembled()takes an optionalproviderMetadata, for normalizer authors. Without it, the event is unchanged from 0.7.0.
Known limit, unchanged
-
Parallel handoffs (OpenAI Agents SDK). When the model requests several handoffs in one response, the SDK runs only the first, and what happens to the ignored calls depends on the
@openai/agentsversion.- From 0.8.1, nothing about them reaches the stream. The SDK drops them from the run’s history; only in a server-managed conversation (
conversationIdorpreviousResponseId) does it send the model a synthetic result for each. With notool.donefor them, the source turn ends withturn.abort(stream-truncated) at flush. - Up to 0.8.0, the SDK streams a result for each ignored call, which lands as that call’s
tool.done, and the source turn closes normally. The ignored handoff’s nested turn is closed at flush withturn.abort(stream-truncated).
The limit was disclosed in 0.7.0 and has now been measured on a live response at
@openai/agents0.18.0; the behaviour is unchanged in 0.7.1. The 0.7.0 note said the ignored calls’ results go to the model only, which holds only in a server-managed conversation from 0.8.1. This corrects it. - From 0.8.1, nothing about them reaches the stream. The SDK drops them from the run’s history; only in a server-managed conversation (
The compatibility tables on each npm page are unchanged.