github nicobailon/pi-subagents v0.36.0

6 hours ago

[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 steer support 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 artifactDir config 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, generic outputSchema plumbing, and gateOn chain controls while keeping the current/default contract unchanged. Thanks to mapleluv (@mapleluvr) for #499.
  • Replaced the flat /subagents admin model, thinking, and agent pickers with a searchable, bounded-scroll selector docked in place of the editor, matching Pi's built-in /model picker so the current selection no longer scrolls off screen when the option list is long. Thanks to Chanyeong Lim (@asp345) for #568.
  • Added advisor as an oracle-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 action is omitted for execution. Thanks to @donwellsav for #600.
  • Required @earendil-works/pi-ai 0.80.0 or newer because watchdog reviews import its ./compat entrypoint, 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-checkpoint commit 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_output tool call, report structured_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_supervisor request so targeted subagent_wait calls 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 EPERM directory handles. Thanks to AiraNadih (@AiraNadih) for #566.
  • Pruned broad agent and chain discovery roots so package-declared . scans no longer descend into node_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 in contact_supervisor for 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 /subagents system-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.streamFunction option, preventing watchdog reviews from terminating with streamFunction is not a function. Thanks to Wang Zixiong (@XWIlluDelu) for #574.
  • Documented that relative chain output paths are chain-artifact paths under {chain_dir}, with persistent chainDir and absolute output paths 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_limit on valid read tool 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.md breadcrumbs are no longer empty. Thanks to Mattias Petter Johansson (@mpj) for #547.
  • Routed main watchdog reviews through matching provider-scoped streamSimple handlers 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 reaches needs_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.jsonl and 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 intercom fallback 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 bundled pi-subagents skill. 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 pi no longer crashes at startup with Failed to load extension … File size (N) is greater than 2 GiB in repositories that contain files ≥ 2 GiB. Files larger than a threshold (64 MiB default, overridable via PI_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.

Don't miss a new pi-subagents release

NewReleases is sending notifications on new releases.