Skip to content

v0.31.0

Latest

Choose a tag to compare

@nicobailon nicobailon released this 24 Jun 03:37
· 25 commits to main since this release

[0.31.0] - 2026-06-24

Added

  • Added subagents.disableThinking so bundled builtin agents can drop thinking suffix defaults for providers that do not accept them. Thanks to Joshua Harding (@jhstatewide) for #212.
  • Discover nested grouped skills such as .pi/skills/group/name/SKILL.md so subagents match the host runtime's recursive skill lookup. Thanks to Weaxs (@Weaxs) for #262.
  • Follow Pi's configured project config directory for project-local agents, chains, skills, packages, settings, direct MCP config, and intercom package discovery instead of hardcoding .pi, while retaining .pi as the fallback for older Pi versions.

Changed

  • Hardened npm installs by tracking package-lock.json, pinning direct dependencies, and using npm ci --ignore-scripts in CI and release workflows. Thanks to Modestas Vainius (@modax) for #234.
  • List configured subagent skills by name, description, and file path instead of inlining full skill bodies, and ensure tool-restricted children can read those skill files on demand. Thanks to Ruben Paz (@Istar-Eldritch) for #183.

Fixed

  • Resolve the async result watcher directory with fs.realpathSync.native() before fs.watch() so Windows profiles with 8.3 temp paths do not crash Pi when async subagent results arrive. Thanks to kerushidao (@kerushidao) for #254.
  • Accept structured acceptance reports emitted in JSON-family fences when the fenced body has the acceptance-report shape. Thanks to Suleiman Tawil (@stawils) for #253.
  • Report field-level acceptance-report validation errors instead of a generic parse failure, and clarify array element types in the acceptance prompt. Thanks to Whisperfall (@Whisperfall) for #264 and josephkEA (@josephkEA) for the follow-up reproduction.
  • Simplified the public acceptance and chain tool schemas so Kimi/Moonshot-style parsers can load subagent, while runtime validation still rejects malformed acceptance config and dynamic fanout steps. Thanks to Sergio Agosti (@sergio-agosti) for #249.
  • Reject duplicate concurrent subagent execution calls while a prior subagent dispatch is still in progress, keeping intentional parallel mode within a single call unchanged. Thanks to desideratum (@desideratum) for #247.
  • Bound async events.jsonl growth by dropping noisy child message_update snapshots, capping persisted child diagnostics, and scanning control events in chunks during status polling. Thanks to Tri Van Pham (@pvtri96) for #246.
  • Keep crowded async subagent widgets at a stable collapsed height in short terminals, reducing destructive full-screen TUI redraws and flicker. Thanks to ssyram (@ssyram) for #186.
  • Actually wire the previously documented foreground-only timeoutMs/maxRuntimeMs aliases through single, parallel, chain, and dynamic fanout runs, including stable timedOut: true results, preserved partial output, manual-interrupt precedence, and skipped acceptance verification after timeout.
  • Apply subagents.agentOverrides.<name> to matching user-scope and project-scope custom agents, while keeping explicit agent frontmatter authoritative per field. Thanks to Jacek Juraszek (@jjuraszek) for #218.
  • Preserve compact foreground write/edit tool-call evidence in prompt-template delegation responses so convergence checks do not stop loops early. Thanks to Hans Schnedlitz (@hschne) for #207.
  • Respect each agent's defaultContext in mixed parallel and chain subagent calls when no explicit context is provided, so fresh-default scouts no longer inherit forked parent transcripts just because another agent in the same invocation defaults to fork. Thanks to Mitch Fultz (@fitchmultz) for #228.
  • Make runtime output overrides authoritative in child task and system prompts, and remove stale static filenames from bundled output-format instructions. Thanks to youngshine (@smithyyang) for #223.
  • Keep top-level parallel defaultProgress files in run-scoped artifact storage instead of the parent working directory. Thanks to youngshine (@smithyyang) for #224.