[0.32.0] - 2026-07-01
Added
- Added
subagents.defaultModelso subagents can have a global default model separate from the parent session model. Thanks to Artem Timofeev (@atimofeev) for #339. - Added
/subagent-costandtotalChildUsagerun details so parent sessions can inspect aggregate subagent child usage and cost. Thanks to Aaron Ky-Riesenbach (@aaronkyriesenbach) for #343. - Added configurable companion package recommendations for
pi-intercomandpi-prompt-template-model, surfaced in session-start transcript messages,subagent({ action: "list" }), and/subagents-doctor, with/subagents-companionshide/show/status controls. - Added detached async runner stdout and stderr log files. Thanks to Daniel Mateos Carballares (@danim47c) for #358.
- Added
totalCostrollups to foreground single, parallel, and chain run details, including nested foreground subagent costs and compact progress display. Thanks to Clark Everson (@gr3enarr0w) for #345. - Added
globalConcurrencyLimitto cap simultaneously running subagent tasks across parallel groups in a single run. Thanks to Clark Everson (@gr3enarr0w) for #349. - Added stable v1 async lifecycle artifact metadata in
status.json,events.jsonl, and result JSON so observability and workflow gates can correlate subagent runs without scraping terminal output. Thanks to Clark Everson (@gr3enarr0w) for #350. - Added
PI_SUBAGENT_PI_BINARYto let wrappers launch child agents through an explicit Pi binary instead of resolvingpifromPATH. Thanks to David Barroso (@dbarrosop) for #341. - Added
worktreeBaseDirandPI_SUBAGENTS_WORKTREE_DIRso worktree isolation can use a stable trusted base directory. Thanks to Matt Robenolt (@mattrobenolt) for #185. - Added
singleRunOutputBaseDirso single-agent relative outputs can be routed to a configured artifact directory. Thanks to Oleksii Nikiforov (@NikiforovAll) for #173. - Added
maxSubagentSpawnsPerSessionandPI_SUBAGENT_MAX_SPAWNS_PER_SESSIONto cap total subagent launches in one session. Thanks to @eightHundreds for #239. - Enforce
timeoutMsandmaxRuntimeMson async and background subagent runs. The per-launch deadline drives an AbortController that cancels acceptance verification, imported async roots, and fallback retries; direct children get SIGTERM with SIGKILL escalation on a bounded timer; nested descendants get timeout requests distinct from manual interrupt.timedOut,deadlineAt, anderrorpropagate across status, results, and nested summaries. Thanks to @pkese for #361.
Fixed
- Keep generated subagent markdown outputs, progress files, and run artifacts under the project-local
.pi-subagents/directory by default. Thanks to Carolina (@carolitascl) for #326. - Detach foreground subagent runs immediately when a child starts a blocking
contact_supervisororintercom.askcall, avoiding parent/child intercom deadlocks. Thanks to huarkiou (@huarkiou) for #335. - Made child boundary prompt editing instructions tool-agnostic so Codex-style adapters are not told to call unavailable
edit/writetools. Thanks to Artem Timofeev (@atimofeev) for #338. - Recursively interrupt active async parallel children and nested async descendants when pausing a background run. Thanks to Vicary (@vicary) for #355.
- Avoid runtime peer imports from detached async runners while still forwarding the Pi package root when available. Thanks to @aurbina83 for #352 and @huangkun3251 for #342.
- Fall back to PATH
nodefor async runners when the current Node executable path is stale or deleted. Thanks to Richard Hao (@0xRichardH) for #347. - Retry fallback models when a zero-exit subagent attempt produces no output, including background async runs, preserve structured-output-only completions, and pre-warm forked session files for parallel children. Thanks to Clark Everson (@gr3enarr0w) for #344.
- Preserve explicit empty companion suggestion surfaces and keep global companion suggestions disabled when writing package dismissal state.
- Include bounded async runner stderr tails when stale-run reconciliation marks a startup crash failed. Thanks to Salem Sayed (@salemsayed) for #340.
- Persist forked child session files when Pi returns a branch path before writing it to disk. Thanks to @trisforrestcam for #174.
- Pass explicit
thinking: offthrough to child model arguments as a:offsuffix. Thanks to Thomas Dietert (@tdietert) for #147. - Sanitize Anthropic signed
thinking/redacted_thinkingblocks out of forked child sessions and force child thinking off so fork-context subagents survive signed-thinking transcripts after branching or compaction. Thanks to Thomas Dietert (@tdietert) for #147. - Restore queued and running detached async jobs into the widget after restarting Pi. Thanks to Vicary (@vicary) for #362.
- Fix session-start freeze where restoring active async jobs did O(runs × nested-route-dirs) directory scans over stale terminal runs;
listAsyncRunsnow builds a single nested-route index and filters by state before lookup.