This release makes workflows easier to debug and safer to run. Failed workflows now report what kind of failure happened, large results no longer flood the parent's context, and a misspelled agent name stops a workflow before any child starts. It also adds thinking-level spinner colors, supports pi-mcp-adapter 3.0 config files, and rejects run timeouts too large for Node.js timers.
Highlights
- Failed workflows now say what kind of failure happened, such as a bad script, a failed child, or a timeout, so callers can react without parsing error text.
- Huge workflow results no longer flood the parent's context. Output is capped, every cut is marked, and the full text is saved to a file.
- A typo in a workflow's agent name now stops the workflow before any child starts, and
validatesuggests the name you probably meant. - Running subagent spinners now use the same thinking-level colors as Pi's prompt box.
mcp:tool selections work with pi-mcp-adapter 3.0'smcp-adapter.jsonfiles.
Changed
- Failed workflows now include a
failureKindin foreground details and async status:validation,script,child,return-serialization,timeout,detached-child, orruntime. Callers no longer need to parse the error text to tell these apart. Fixes #2506. - A running subagent's spinner now uses Pi's prompt-box thinking color. A spinner for one child uses that child's thinking level, or the main session's level when the child has none. A spinner for several children, such as a widget header, a parallel or chain card, or a workflow phase, uses the main session's level.
thinkinglabels still show the configured level. Thanks to @pwguler for #2512.
Fixed
mcp:direct-tool selections now read pi-mcp-adapter 3.0'smcp-adapter.jsonfiles (the global one and a project's.pi/mcp-adapter.json), so a migrated setup no longer fails to launch children withUnresolved MCP direct-tool selectors. Pi's ownmcp.jsonfiles are no longer read, because they belong to Pi's built-in MCP support. If your adapter servers are still listed there, move them tomcp-adapter.json. Thanks to @qsgy-edge for #2511.- Large workflow results no longer flood the parent's context. A foreground workflow caps its Return, Emitted, and Console sections and its failure error at 200 KB or 5000 lines (or your
maxOutput), shortens each call-trace error to 500 characters, marks each cut, and saves the full text to a file. Async completion notices andaction: "status"now end cut text in…and point to the run'sstatus.json. Before, they cut the return value without saying so and showed the full error however long it was. Fixes #2505. - A workflow script with a misspelled agent name now fails before any child starts, instead of running the earlier children first.
action: "validate"reports the same error with its line, column, and the closest agent name when there is one (for exampleDid you mean 'reviewer'?). Names built at runtime, and children with their owncwd,agentScope, orresume, are still checked when they launch. Fixes #2504. - On providers that fix the tool list for a whole prompt, such as bridges to another agent SDK,
subagentonly appears after the next user prompt. Thesubagents_enableresult now says so, which stops the model from retryingsubagentin the same prompt, and it names--exclude-tools subagents_enablefor keepingsubagentalways available. Fixes #2513. - A
timeoutMsormaxRuntimeMsabove 2,147,483,647 ms (about 24.8 days), the longest delay Node.js timers support, is now rejected before launch, andaction: "resume"checks itstimeoutMsthe same way. Node shortened such a timer to about 1 ms, so the run timed out almost immediately. Thanks to @quifox for #2517.
Full changelog: v0.72.1...v0.73.0