github nicobailon/pi-subagents v0.71.0

3 hours ago

pi-subagents 0.71.0 makes delegated work easier to follow from outside the terminal. Other extensions can now read subagent spend and follow async workflows as structured data and events instead of scraping output, and workflow status can confirm that every child process has actually exited. Child sessions keep readable names in /resume and Herdr, and the full subagent tool now loads only when a request needs it, so unrelated prompts stay smaller. The release also fixes a long list of reliability problems in background runners, the bundled reviewer, and Bun, pnpm, and symlinked installs.

Highlights

  • Other extensions can read subagent spend and follow async workflow progress as data, without scraping terminal output.
  • Workflow status can now confirm that every child process has actually exited.
  • Child sessions keep readable names such as worker: fix auth refresh in /resume and Herdr.
  • The full subagent tool loads only when a request needs it, which keeps unrelated prompts smaller.
  • Background runners, reviewers, and Bun, pnpm, and symlinked installs are more reliable.

Need to know

Who What changed
Anyone using the packaged worker agent It now starts with fresh context instead of forking your conversation. Ask for fork context per call or set it globally if you relied on it.
Anyone installing on an older Pi The optional @earendil-works/pi-ai peer now requires 0.86.1 or later.
pi-intercom users Readable child session names need a pi-intercom version that supports the intercom:session-identity claim. Older versions keep the previous naming and still route correctly.

Full changelog

Highlights

  • Other extensions can read subagent spend and follow async workflow progress as data, without scraping terminal output.
  • Workflow status can now confirm that every child process has actually exited.
  • Child sessions keep readable names such as worker: fix auth refresh in /resume and Herdr.
  • The full subagent tool loads only when a request needs it, which keeps unrelated prompts smaller.
  • Background runners, reviewers, and Bun, pnpm, and symlinked installs are more reliable.

Added

  • In-process RPC cost method. It returns the same parent-plus-child spend that /subagent-cost shows, as versioned data ({ version: 1, parent, children, childTotal, total, unresolvedAsyncChildren }). ping.capabilities.cost advertises { version: 1 }. /subagent-cost output is unchanged. Thanks to @raymondtri for #2378.
  • Async workflowScript runs and the children they launch now emit public lifecycle events, so companion UIs can follow them without scraping terminal output. Thanks to @navidemad for #2382.
  • Status for an async workflow now includes details.workflowTerminalProof. It reports observed, with each child's exit evidence, only after the workflow has stopped launching children and every async child has exited or failed to start. Otherwise it reports pending or unknown with a reason, including when the saved child list is missing. A finished workflow frees its capacity slot using the same check, so the two always agree. Thanks to @alexei-led for #2436 and #2442.

Changed

  • Packaged worker agents now start with fresh context instead of forking the parent's conversation. You can still request fork context per call or set it globally. Thanks to @eduardopicolo-cb for #2384.
  • The full subagent tool stays hidden until a request activates it through the small subagents_enable loader, which keeps unrelated prompt context smaller. Direct commands, RPC, the TUI, and nested children work as before. Thanks to @Knimoms for #2380.
  • Child sessions keep a readable name (for example worker: fix auth refresh) in session lists, /resume, and Herdr while the intercom bridge is active. Nested children now reach their supervisor through the child's intercom ID instead of its session name. This needs a pi-intercom version that supports the intercom:session-identity claim; with an older pi-intercom, children keep the previous naming so routing still works. Thanks to @Q-xuan for raising the problem in #2432.
  • The optional @earendil-works/pi-ai peer dependency now requires 0.86.1 or later, matching the oldest supported Pi host. Thanks to @samuela for #2373.
  • When a child's structured_output call is rejected, the result now includes a short summary of the validation errors. The missing-structured-output error is used only when the child never called the tool. Thanks to @rtbe for #2407.

Fixed

  • subagent is available again after switching from an inactive session branch to one where it was activated.
  • Background runners and external CLI agents no longer inherit Git's repository variables (GIT_DIR, GIT_WORK_TREE, GIT_INDEX_FILE, GIT_CONFIG_*, and the rest of git rev-parse --local-env-vars). When Pi was started from a Git hook or with git --git-dir, these made a child's Git commands act on the parent's repository instead of the child's working directory. Other variables such as GIT_AUTHOR_* still pass through, and an external agent's explicit environment allowlist is unchanged. Thanks to @alexei-led for #2437 and #2440.
  • Retained background runs no longer time out while the packaged runner is still starting. Thanks to @muermaru for #2403, and to @qsgy-edge for the independent diagnosis and timing evidence in #2415.
  • When a background runner exits without writing a result, the failure notice now includes its exit code and signal. Thanks to @grahama1970 for #2423.
  • A child that produced valid structured output keeps it as evidence when a later provider error or abort fails the run. Thanks to @grahama1970 for #2411.
  • Completion notifications are no longer sent twice when the extension is registered more than once for the same session. Thanks to @hongchu098 for #2389.
  • The bundled reviewer works in directories without Git: watchdog_diff reports that no baseline is available instead of failing the review. Thanks to @matthewmathistrellys for #2422.
  • The bundled reviewer's watchdog_diff counts as read-only, so a reviewer given a single output path returns its full report for the runtime to save, as introduced in #426, with thanks to Alexander Gerdes (@Avg8888). Thanks to @riskywhat for #2405.
  • Watchdog reviews and permission checks work again on the Pi 0.86.1 package layout. Thanks to @zieglar for the reproduction and version comparison in #2377.
  • A workflow child with no agent now fails with an error that names it (Workflow child 'r1' has no agent…) instead of the generic "Provide exactly one mode" message. Thanks to @matthewmathistrellys for raising the confusing error in #2422.
  • /prompt-workflow finds prompt files that are symlinks (as installed by dotfile managers such as GNU Stow or homeshick) and skips broken links instead of failing. Thanks to @nietaki for #2430.
  • Completed retained agents can resume even when their own list of allowed child agents excludes them. Parent authority and that restriction both still apply; older retained children without the needed recovery data fail closed. Thanks to @riskywhat for #2379, building on the allowlist work in #2338 credited to @shkrabov.
  • Guidance now says the list of retained workflow children is not complete: when you know a run's exact id, check its status and try resuming it before falling back to a labeled agent with the same role. Thanks to @riskywhat for #2406.
  • Skills marked disable-model-invocation: true are no longer shown to child agents, even when requested by name, and are no longer suggested to the model. Thanks to @toRolex for #2400.
  • Pi hosts compiled with Bun are found from Pi's package directory or its bundled share/pi-coding-agent layout, while unrelated extension dependencies still cannot turn on dynamic tools. Thanks to @fmoda3 for #2417.
  • pnpm installs follow npm-hosted peer aliases through their symlinks to the real package, so the package is not loaded twice. Thanks to @henriquebastos for #2409.
  • npm and git installs detect dynamic tool support from the running Pi installation and keep the compact subagents_enable loader instead of an always-loaded subagent tool. Thanks to @qsgy-edge for #2398.
  • MCP direct tool names now match what pi-mcp-adapter registers, including servers whose tool names already start with the server name, the adapter's mcp prefix mode, and per-server toolPrefix. Thanks to @qsgy-edge for #2395.
  • Logs from running and failed external CLI agents can be viewed in Fleet, tool status, and the TUI. Thanks to @Shujakuinkuraudo for #2375.
  • Structured delegation updates report cumulative usage and no longer count missing provider cache numbers as zero. Thanks to @bioShaun for #2374.
  • Forked sessions keep Pi 0.87 context edits, including replaced content and signed Anthropic thinking blocks.

Don't miss a new pi-subagents release

NewReleases is sending notifications on new releases.