[0.36.0] - 2026-07-24
Added
- Added versioned aggregate handoff manifests for worktree-isolated parallel runs, including per-child status and output references, durable patch metadata, explicit cleanup outcomes, async status/result projection, and completion-delivery paths.
- Added delegation v2 for extension-owned concurrent foreground leaves, with logical run/node ownership, exact per-attempt cancellation, explicit duplicate-node outcomes, literal or structured values, effective model/thinking metadata, detailed usage, and an exact zero-tool budget while preserving delegation v1 and the model-facing single-dispatch guard. Thanks to Jakub Neumann (@neumie) for #610.
- Added acknowledged
steersupport to the extension RPC for exact-child async orchestration without recovery replacement. Thanks to Daan Bosch (@daanbosch) for #607. - Added a persistent below-editor FleetView with safe empty-editor navigation and a structured inspector for Markdown, code, tool calls, and compact or expanded tool results. Thanks to Rui Pu (@Zeppelinpp) for #587.
- Added
artifactDirconfig to store subagent artifacts in the project, Pi session, or temp artifact directory while keeping project-local artifacts as the default. Thanks to WeZZard (@WeZZard) for #582. - Added opt-in
agentContract: { version: 1 }runs with explicit execution, acceptance, review, and effects projections, report-optional acceptance, observational file-mutation effects, genericoutputSchemaplumbing, andgateOnchain controls while keeping the current/default contract unchanged. Thanks to mapleluv (@mapleluvr) for #499. - Replaced the flat
/subagentsadmin model, thinking, and agent pickers with a searchable, bounded-scroll selector docked in place of the editor, matching Pi's built-in/modelpicker so the current selection no longer scrolls off screen when the option list is long. Thanks to Chanyeong Lim (@asp345) for #568. - Added
advisoras anoracle-compatible bundled agent alias for users switching between Claude Code and Pi naming. Thanks to Serhii Chernenko (@serhii-chernenko) for #552. - Show each subagent child’s resolved
[fresh]or[fork]launch context in foreground results, async status, fleet, and widget surfaces, with[mixed]on aggregate headers when a run uses both modes.
Fixed
- Kept explicit empty and MCP-only child tool allowlists from falling back to Pi's default builtin tools. Thanks to @jstokke for #628.
- Kept completed Fleet inspector durations stable when legacy terminal status lacks an explicit end timestamp, preventing time-sensitive redraws from changing rendered snapshots.
- Deferred strict child tool availability diagnostics until after child extension startup hooks, so tools registered asynchronously by child-only extensions no longer falsely fail as unavailable. Thanks to ConjugativeIndicator (@CovetingEpiphany2152) for #567.
- Made parent-facing subagent tool descriptions lead with delegation and clarified that
actionis omitted for execution. Thanks to @donwellsav for #600. - Required
@earendil-works/pi-ai0.80.0 or newer because watchdog reviews import its./compatentrypoint, preventing background runs from loading on older hosts. Thanks to @donwellsav for #599. - Removed evicted nested async status event files after the bounded cursor is written so old records are not rediscovered and replayed after the retention cap. Thanks to @mhbzhy-lost for #579.
- Counted provider-native
pi-checkpointcommit changes as mutation evidence so CompletionGuard does not falsely fail Cursor SDK writer runs that already edited files. Thanks to Matias Gigena (@MatiasGigena) for #615. - Re-derived foreground delegation structured-output hardening on current main: schema-bound runs now require the runtime-owned
structured_outputtool call, reportstructured_output_failed, preserve strict versioned hard-turn boundaries, and clean temporary protocol files when artifacts are disabled. Thanks to @dimahike for #571. - Kept foreground slash execution commands responsive while their live result finalization continues asynchronously. Thanks to Eli Stark (@white-hat) for #594.
- Re-armed remembered detached foreground children on every blocking
contact_supervisorrequest so targetedsubagent_waitcalls wake for repeated supervisor decisions. - Suspended the persistent FleetView while its inspector overlay is open, preventing live status redraws from leaving repeated inspector frames in terminal scrollback.
- Kept simultaneous foreground parallel children independently visible with stable descriptions, metrics, lifecycle state, and transcripts.
- Avoided scanning and reconciling every historical async run when
subagent_wait({ id })targets an exact run, preventing supervisor-attention waits from being delayed until the child completes. - Routed independent strict v1 extension delegation requests through a correlated concurrent-safe executor while preserving the one-foreground-call-per-turn guard for the ordinary model-facing tool and non-versioned prompt-template requests. Thanks to Nova (@bianyeyu) for #565.
- Mapped sparse parallel slash progress updates by child index so one child’s live tool/output state no longer appears on another chain placeholder. Thanks to Eli Stark (@white-hat) for #595.
- Retried transient Windows filesystem locks while creating async result directories and stopped destructively recreating shared async directories during startup access checks, so concurrent Pi instances are less likely to lose completed async results to
EPERMdirectory handles. Thanks to AiraNadih (@AiraNadih) for #566. - Pruned broad agent and chain discovery roots so package-declared
.scans no longer descend intonode_modules,.git, Git submodules, or nested project roots during startup. Thanks to tupe12334 (@tupe12334) for #570 and shoehn (@shoehn) for narrowing the startup trace. - Made
subagent_wait({ id })wake when an async child is blocked incontact_supervisorfor a supervisor decision, instead of waiting for completion or timeout. Thanks to @DrunkenDonkey80 for #581. - Scoped async result delivery to the active session lease so stale watchers and recovered result files cannot wake or redeliver completions after reload, while retaining unaccepted result files for retry. Thanks to KawaiiNahida (@KawaiiNahida) for #588.
- Namespaced inherited relative agent output paths for foreground top-level parallel tasks so repeated builtin agents no longer collide before launch. Thanks to Artem Timofeev (@atimofeev) for #580.
- Use Pi's native editor for
/subagentssystem-prompt editing so terminal editors receive terminal ownership and cannot leave a stale waiting status. Thanks to Prodipta Guha (@proguha) for #576. - Bundled TypeBox as a production dependency so detached runners can always load
typebox/compile, including managed extension installs where Pi's host package is not visible from the child process. Thanks to Matteo Collina (@mcollina) for #583. - Updated the Pi development SDK to 0.81.0 and passed the watchdog stream through the renamed
Agent.streamFunctionoption, preventing watchdog reviews from terminating withstreamFunction is not a function. Thanks to Wang Zixiong (@XWIlluDelu) for #574. - Documented that relative chain
outputpaths are chain-artifact paths under{chain_dir}, with persistentchainDirand absoluteoutputpaths as the supported ways to keep artifacts outside the temp run directory. Thanks to @dougEfresh for #529. - Bounded main-watchdog repository signatures so startup and agent-end checks no longer recurse through nested Git worktrees or generated dependency trees, reducing slow starts in large repos. Thanks to @pompanonb for #551 and @markg85 for #555.
- Raised the child stdout line limit above Pi’s resized-image payload range so image OCR subagents no longer fail with
protocol_output_limiton validreadtool image events. Thanks to @zmarty for #538. - Wrote an explanatory failure stub to output artifacts when a child run ends before producing output, so advertised
_output.mdbreadcrumbs are no longer empty. Thanks to Mattias Petter Johansson (@mpj) for #547. - Routed main watchdog reviews through matching provider-scoped
streamSimplehandlers before falling back to the compat dispatcher, restoring custom-provider watchdog models on newer Pi runtimes. Thanks to @alexei-led for #527. - Kept async resume recovery descriptors from rejecting acceptance metadata written by earlier async runs, and now persist only the public acceptance input needed for safe revival. Thanks to Phil (@philliugithub) for #537.
- Made
subagent_wait({ id })wake when a remembered detached foreground child reachesneeds_attention, so headless parents can answer pending supervisor requests instead of waiting until timeout. Thanks to Mattias Petter Johansson (@mpj) for #554. - Made
run-history.jsonland its agent directory owner-only where supported, redacted stored task prompts, and retained only a SHA-256 task hash for history correlation. Thanks to @avishkandi for #534. - Registered the native child
intercomfallback before strict tool-allowlist diagnostics run and stopped treating Pi core tools as missing extension tools, preventing read-only scouts and workers from failing before execution when strict child tool allowlists are active. - Kept async oracle review tasks with implementation vocabulary from triggering write-evidence acceptance contracts or the no-mutation implementation guard.
- Added the missing
context: "fork"field to the fork-context example in the bundledpi-subagentsskill. Thanks to Kier (@kierr) for #540. - Resolved host-provided TypeBox compiler lookup for detached async runners and structured-output validation. Thanks to @nistaux for #526, 96tommykim (@96tommykim) for #545, and @git-geeky and @lukechen526 for reproduction and validation details.
- Recognize Cursor edit/write thinking traces and replay tool calls as mutation evidence, so Cursor-provider workers that actually edit files no longer false-fail with
completed-without-making-edits. Thanks to Mikhail Wijanarko (@mwijanarko1) for #539. - Skip repository change signatures while the watchdog is disabled and inspect modified nested Git worktrees through Git, preventing startup from recursively hashing ignored submodule dependencies. Thanks to 傅洋 (@4ier) for #531/#532, tlhc (@tlhc) for #528, and 小旭 (@BigSharkLx) for #548.
- Stream detached foreground child tool and transcript activity through
subagent_wait({ id })pending updates while waiting after supervisor handoff. Thanks to Dominic (@DevDominic) for #544. - Stopped hashing the full content of very large changed/untracked files when computing the watchdog repo change signature, and made signature computation non-fatal, so
pino longer crashes at startup withFailed to load extension … File size (N) is greater than 2 GiBin repositories that contain files ≥ 2 GiB. Files larger than a threshold (64 MiB default, overridable viaPI_SUBAGENTS_MAX_HASH_FILE_BYTES) are now fingerprinted by size and mtime instead of being read into memory. Thanks to Alexander Prilipko (@axelbaumlisto) for #553, @astarktc for #535, @restrolla for #536, and @pompanonb for #551.