Repository navigation
chore(deps): update pi-subagents to 0.80.0 - #330
Merged
Merged
Conversation
patchmill-release-please-bot
Bot
force-pushed
the
automation/pi-subagents-upgrade
branch
from
October 20, 2026 07:33
c440650 to
51a4243
Compare
patchmill-release-please-bot
Bot
force-pushed
the
automation/pi-subagents-upgrade
branch
from
October 21, 2026 07:32
51a4243 to
06c220d
Compare
rochecompaan
force-pushed
the
automation/pi-subagents-upgrade
branch
from
October 31, 2026 20:29
06c220d to
852d921
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
pi-subagents dependency upgrade
Updates
pi-subagentsfrom0.78.0to0.80.0.Release notes
v0.79.0
This release is about not losing work. When one session hands off to another in the same Pi process, the new session now owns the old one's background runs: it can see them, wait on them, steer, stop and resume them, and answer their questions. Coordinators can give a finished worker another round instead of starting over with a fresh child and a re-sent brief. Forked subagents and long sessions also spend fewer tokens, and updating pi-subagents mid-session no longer switches
subagentoff.Highlights
options: { reuseFrom: "<run id>" }without running its finished children again./subagent-costand other view-only reports no longer ride along in every request, and codemode no longer breaks the cache on every resume.subagentsurvives updates. Updating or reloading pi-subagents mid-session no longer leavessubagentorbg_waitturned off.Need to know
Changelog
Highlights
reuseFromwithout running its finished children again./subagent-costand other view-only reports no longer ride along in every request, and codemode no longer breaks the cache on every resume.subagentsurvives updates. Updating or reloading pi-subagents mid-session no longer leavessubagentorbg_waitturned off.Added
/subagents-inspect-rpc) now includeresolvedModel: { provider, model }, the provider and model of the inspected child's latest reply. Before, a host could only see the requested model. The field is missing until the child replies, for a whole workflow or multi-step run, and for runs from before this release. A forked child's inherited history never counts. Thanks to @koenvg for reporting #2922.subagent-asyncstatus snapshot now includes each background step'smodel,thinkinglevel andagent. A workflow lane's label names the lane, not the agent, so hosts could not name a running child until it finished. Thanks to @agustinsacco for #2893 (#2892) and @kevinsleegerslameco for #2912 (#2911).workflowChildrenrow now carries itsagentandrunIdfrom launch, and thatrunIdmatches the child's run in thesubagent-asyncsnapshot. Before, the row had only{ childId, state }until the child finished. Thanks to @kevinsleegerslameco for reporting #2911.options: { reuseFrom: "<run id>" }. Finished children are reused and running ones are awaited, even from another session, as long as the run ran the same script in the same cwd. Before, relaunching ran every child again, so two writers could share one output. The stop notice names the option and the run id. Thanks to @wireknight for reporting #2909.statusshowsOwner: inherited from session '…' (replaced in this process).for these runs. A fresh start,pi --continue, or another Pi process inherits nothing. Thanks to @wireknight for reporting #2909.Changed
subagent,subagents_enable,subagent_supervisor,contact_supervisorandstructured_outputcan't be called from codemode scripts. With codemode on, models used to trytools.subagent_supervisor(...)and get a "does not exist" error. Thanks to @CovetingEpiphany2152 for the report. (#2887)pendingcall. Thanks to @agustinsacco for #2895. (#2894)Fixed
resumefailed with "session file is not under that nested run's session directory", so it had to start a new child and send the brief again. The same happened for forked children (context: "fork") and for a child that had already been resumed once. All three now resume, with the same ownership checks as before. Background and forked children now keep their session in a folder named by their run id. Children launched before this update still can't be resumed. Thanks to @mannainsect for reporting #2924 and @GeorgeLautenschlager for showing it outside workflows. (#2932)bg_waitwhen one of its children asked it a question withcontact_supervisor, so the questions expired unanswered. Itsbg_waitnow returns as soon as a question is waiting, as the parent's already does. Thanks to @mannainsect for reporting #2923.contact_supervisorquestion could expire before the parent saw it when the parent was busy in a long tool call, so the child gave up and asked again and the parent's late reply failed. The question's deadline now moves forward until the parent's model sees it. Thanks to @agustinsacco for the report. (#2894)stopped, its notice didn't say that reusing finished children works only from the same session, andstatusoffered aRevive:command to sessions that can't use it. The children now show asrunning, the notice explains how the same session and another session can reuse them, andstatusoffers resume only to the session that launched the run. Thanks to @wireknight for reporting #2909.subagentstayed off once the session started again (/reloadorpi --continue), andsubagents_enablewasn't offered either, so nothing could turn it back on. Pi records the unload as a removal of the extension's tools, and that was replayed as if you had turnedsubagentoff. An unload is now recognized and the tools come back as you had them. Thanks to @bkdinoop for reporting #2910.pi --continue) also keptbg_waitoff, and a second update in that session lostsubagentagain. The tools the update removed now come back when the session starts, unless they are excluded for this process. (#2916)<subagent_instructions>block at the start of its task. A fork also sees the parent's project context and skills even when its agent turns them off. On Claude with a 60k-token parent, a fork's first request went from 9.6k cached and 52k written tokens to 60.8k cached and 1.7k written. See tool-reference.md for the forks that still miss the cache. Fresh children are unchanged. Thanks to @gabsn for #2879./subagent-costand other view-only slash reports no longer go into every later model request. They are still saved, shown in the TUI and sent to RPC callers./runresults stay in context because the model needs them. Reports saved before this update stay until compaction, so updating doesn't break a session's prompt cache. Thanks to @isjiajia01 for #2927 and @summer-tt for the report. (#2925)bg_waitdescription, so the provider re-read the conversation without its prompt cache. The note now appears once and a resumed session keeps its tool declaration. Thanks to @SamuelBadr for the report. (#2889)Reply text: …(up to 500 characters), so a refusal can be told apart from an outage. In a failed workflow, each failed child's line also starts with its own error instead of theRun fan-out: N/64 usedline. Thanks to @stanleytelehealth for #2913.grep … 2>/dev/nullcould be flaggedneeds_attention: the redirect counted as a file change, and output containing words like "error" counted as a failure. Redirects to/dev/nullno longer count as changes, and a tool call counts as failed only when its result saysisError: true. Calls blocked by a hardtoolBudgetdon't count either. Thanks to @Liaokc for the fix and @builtroller for the report. (#2878, #2884)bashcall in a child suggestedcommand.status,command.yieldandcommand.canceleven when the child had no command controller, so following it failed with "No command controller is available for this child." The notice now suggests them only when they work. Thanks to @G0-0000 for #2882. (#2880)triggerTurn: true) as your prompt and showed it to its reviewer model as a real requirement. These runs no longer add to the watchdog's scope, and their edits are still reviewed against your earlier prompts. Thanks to @isjiajia01 for #2928 and @sternnick for reporting #2926.PI_SUBAGENT_RUNNER_PIDto its own pid, so an extension can compare it withprocess.pidand leave the runner alone. Processes spawned from a child inherit the value but have their own pid. See extension-api.md. Thanks to @hughy for #2885. (#2883)Failed to acknowledge the mission observer ... Timed out waiting for another process to finish updatingwith a stack trace and stalled for 200 ms. It now retries quietly a moment later. Thanks to @RainbowXie for the report. (#2896)v0.79.1
pi-subagents 0.79.1 makes everyday sessions lighter and a few rough spots less fragile. Until you turn on
subagent, a session no longer sends two background-work tools with every request, which saves about 1,500 characters per request. Apps that embed Pi, such as pi-web, now launch children with their own Pi instead of a copy bundled with the extension. When a workflow's main process dies, children that already finished keep their real results.Highlights
subagentno longer sends thebg_waitandsubagent_supervisortool definitions. Sessions that already had them keep them, so upgrading doesn't break their prompt cache.doctorandstatuskeep working.statusnow show each background workflow child's model and thinking level.Full changelog
Highlights
subagentno longer sends thebg_waitandsubagent_supervisortool definitions, about 1,500 characters on every request.statusnow show each child's model.Changed
subagent_supervisorwith every request, saving about 420 characters each time. It turns on withsubagent, or when a child's question reaches a session that doesn't have it yet, for example from a scheduled run. Thanks to @armchairfuturist-code for reporting #2936.bg_waitwith every request, saving about 1,100 characters each time. It turns on withsubagent(aftersubagents_enable), or once another extension registers background work for it to wait on. Sessions that already hadbg_waitorsubagent_supervisorkeep them, so upgrading doesn't change their tools or break their prompt cache. Thanks to @armchairfuturist-code for reporting #2935.Fixed
PI_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOTstill takes priority, including when Pi is started throughnode_modules/.bin/pi. If the chosen Pi install is broken, launching a child fails and says why, whiledoctorandstatuskeep working. Thanks to @CompN3rd for #2947.complete,failed,stopped,partialorrejected) now keeps it. Children that hadn't finished, or whose status can't be read, are still marked failed. Thanks to @isjiajia01 for #2940 (#2938).status. Lanes now show the model and thinking level the child reports. Thanks to @bottfish for #2941.bashcall could name&1;as the file being written, because2>&1was read as a file. The notice now names the first real file the command writes, and names none when the command only redirects to another output or/dev/null. (#2943)v0.79.2
This release makes delegation more dependable in the situations where it used to quietly go wrong. A child that finishes while you're busy now gets its result to you even if Pi restarts in between. Steering a child is less fragile: a steer that times out no longer locks the run, and a steer that arrives too late tells you what state the run is in and what to do instead. Children also stop picking up instructions you wrote only for your main session, and a few long-running and provider-specific failures are gone.
Highlights
APPEND_SYSTEM.mdstays with you. Children no longer receive it, on this machine or on a saved Herdr machine.subagentback instead of losing it for good.Need to know
If you relied on children reading your
APPEND_SYSTEM.md, move those instructions into the agent's prompt or anagentOverridessystemPrompt.Changelog
Highlights
APPEND_SYSTEM.md, on this machine or on a saved Herdr machine. It was meant for your main session.subagentfor good.Fixed
pi --continue, resends it and wakes the parent. A notice already in the session is not sent twice, notices on another branch of the session tree don't count, and/reloadis unchanged. Thanks to @advaitpaliwal for #2968.steeron a running child that didn't pause within the recovery wait left the run locked, so every later steer failed with "Another steering recovery is already committed". A timed-out attempt now unlocks the run, still starts no replacement, and its error gives the real wait, the run's last state, that the message wasn't applied, and thataction: "resume"continues the run. Thanks to @tglunde for reporting #2956.steeron a run that had already finished said only that it "is not running or queued". It now names the run's state and the next step: a completed retained child points atmode: "follow_up"orresume, and other runs point atresumeonly when resume would accept them, otherwise giving resume's own reason (for example, a stopped run has to be started again). Thanks to @armchairfuturist-code for #2955 (#2954).systemPromptMode: replace(every builtin exceptdelegate) received the operator'sAPPEND_SYSTEM.md, because Pi fills an empty append-prompt slot from that file. They now start without it, likedelegatechildren and like the operator's globalAGENTS.md. Children on a saved Herdr machine no longer get the remote operator's file either. To give a child those instructions, put them in the agent's prompt or anagentOverridessystemPrompt. Thanks to @scnbln for #2961 (#2960, #2969).maxActiveAsyncRunsPerSessionforever when it reused finished children, re-attached to running ones, or had a child stopped before it started, so a long-lived session could run out of capacity. The slot is now released once the reused runs have ended. Slots already held by earlier versions are not reclaimed. Thanks to @peterdsharpe for reporting #2958 and the fix it describes.status.jsonstill keeps the full id. Thanks to @mxr576 for reporting #2962.subagentfor good: on resume the surviving messages read as a deliberate choice to turn it off, and inautomode nothing could turn it back on, not even/reload. Such a session now gets the tools a new session would, the same way on resume,/reloadand tree navigation, and sessions already left without them recover. A choice to turn tools off made after the compaction is still kept. Thanks to @jbachorik for #2963.v0.80.0
pi-subagents 0.80.0 moves to Pi 1.2.0 and uses it to make background work quieter. When a subagent finishes while you're idle, its own notice now starts the parent's turn, so your transcript no longer gets an extra "Inspect subagent updates above" line every time. Workflows got more flexible:
parallel,tasksandchainchildren can each run in their own directory or on their own model without a workflow script. You can also turn off all pi-subagents slash commands while keeping thesubagenttool, and the install is about half the size.Highlights
cwdandmodelinparallel,tasksandchain, so one call can fan out across repositories or worktrees, or mix models.enableSlashCommands: falsekeeps thesubagenttool and drops every pi-subagents slash command.subagents (1/1 running 13s).git, and DeepSeek and other providers that reuse the Codex Responses wire no longer fail on a child's second tool call.Need to know
pi-subagents now needs Pi 1.2.0 or newer. If you're on Pi 0.86.1 or 1.0.0, update Pi first, or stay on pi-subagents 0.79.2. The supported standalone target is now the official Pi 1.2.0 Linux x64 release.
Changelog
Highlights
parallel,tasksandchainchildren can each set their owncwdandmodel, so one call can fan out across repositories or worktrees, or mix models, without writing a workflow script.enableSlashCommands: falsekeeps thesubagenttool and drops every pi-subagents slash command, for setups that delegate only through the model.subagents (1/1 running 13s).git. DeepSeek and other providers that reuse the Codex Responses wire no longer fail on a child's second tool call.Added
parallelworkflow (args.tasks), andtasksitems andchainsteps and group members when workflow scripts are disabled, accept optionalcwdandmodel. One call can now fan out across several repositories or worktrees, or mix models, without writing a script. Before, these fields were rejected with "accepts only agent and task". Thanks to @andresutre for #2985.subagents (1/1 running 13s). It counts from the oldest running job, so it stays right after a session resume, and it disappears once nothing is running. Thanks to @summer-tt for #2979.enableSlashCommands: falsein the extension config keeps thesubagenttool and drops every pi-subagents slash command and the foreground-detach shortcut, for setups that delegate only through the model or want fewer global commands. Prompt shortcuts such as/parallel-revieware Pi prompt templates, and Pi's package filter ("prompts": []) already removes them. See configuration. Thanks to @khavronin-artem for requesting it in #2977.Changed
Fixed
git(spawn EPERM). The watchdog now starts without its diff baseline in that case, as it already did whengitwas missing. Thanks to @advaitpaliwal for reporting #2978.pi-cliproxyapi'scliproxyapi-codex-responses, had their tool-call ids rewritten, and DeepSeek rejected the second tool turn with a misleading "reasoning_text... must be passed back" error. Any*-codex-responsesapi now keeps its ids the wayopenai-codex-responsesdoes. Thanks to @xspeed1989 for reporting #2981.ctrl+oby default). They now say "Press the expand key for live detail", and in RPC mode the status line of slash-command launches such as/runno longer shows an empty key (3 tools | live detail). Thanks to @JohannesBertens for #2983 (#2982).completedinsubagent_commandstatus. It now shows asfailed.Changed files
package.jsonpackage-lock.jsonnpm-shrinkwrap.jsonnix/package.nixValidation
node --test src/pi/pi-subagents-dependency-contract.test.tsbun scripts/verify-pi-subagents-bun-workflow.mjsnpm testnode scripts/smoke-packed-artifact.mjsnpm run lintscripts/update-npm-deps-hash.shnix build .#patchmill --print-build-logs(cd result/share/patchmill && node --test --test-name-pattern='pi loads the resolved pi-subagents extension package without model execution' src/pi/pi-subagents-dependency-contract.test.ts)nix flake check --accept-flake-config --print-build-logsThis pull request is review-gated and does not auto-merge or publish.