You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Added optional toolBudget limits for child subagent tool calls. Runs, steps, and agents can set { soft?, hard, block? }; the child runtime nudges at the soft limit and blocks configured tools after the hard limit so runaway browsing can still finish with final text.
Added a stable v1 in-process event-bus RPC for other Pi extensions, with ping, status, async-only spawn, interrupt, and async stop over versioned request/reply envelopes.
Added toolDescriptionMode with full, compact, and custom modes for the parent-facing subagent tool description. Compact mode reduces prompt bloat while keeping safety-critical orchestration guidance, and invalid custom descriptions fall back to full mode.
Added an optional read-only subagent fleet/status view with /subagents-fleet and subagent({ action: "status", view: "fleet" }), plus view: "transcript" to tail active async child output/session artifacts.
Added uniform per-child transcript artifacts (<run>_<agent>_transcript.jsonl) for foreground and async subagent runs, gated by subagents.artifacts.includeTranscript (default on). Each transcript is a versioned JSONL stream of child messages, tool starts/ends, and stdout/stderr lines with a byte cap and truncation marker.
Added subagent({ action: "steer", id, message, index? }) for non-terminal guidance to live async Pi child sessions, with file-backed control requests, per-child steering inboxes, status/event visibility, and queued delivery for pending indexed async children when the runtime supports mid-run steering.
Added an optional turnBudget (maxTurns with graceTurns) for foreground and async/background subagent runs. At the soft maxTurns limit the child is warned via its system prompt to wrap up; after graceTurns additional assistant turns the run is aborted and partial output is returned. turnBudget, turnBudgetExceeded, and wrapUpRequested propagate through results, async status, and nested summaries.
Added optional scheduled subagent runs so callers can defer a subagent launch until a future time. subagent({ action: "schedule", agent, task?, schedule: "+10m" | "2030-01-01T09:00:00Z", scheduleName? }) arms a one-shot timer that launches the run as a normal tracked async run once it fires, with schedule-list, schedule-status, and schedule-cancel management actions. Schedules are persisted per session and restored after a Pi restart; jobs missed by more than the configured lateness window are marked missed instead of firing late. The feature is opt-in and requires { "scheduledRuns": { "enabled": true } } in ~/.pi/agent/extensions/subagent/config.json. Only schedule explicit delayed runs the user asked for. Thanks to @tintinweb for the concept.
Added a real Pi-session E2E test lane with faux provider routing to verify parent-child subagent result delivery without network model calls.
Hardened the wait tool's wake path so an event wake cancels its poll-interval fallback timer instead of letting both run, and so an already-aborted turn resolves immediately. Added a test that verifies an event wakes wait before the poll interval elapses.
Added smart completion batching for async subagent notifications. Successful sibling completions that finish within a short window now arrive as a single grouped message instead of separate notifications; a hard max-wait cap prevents holding them indefinitely, and late-finishing siblings join a shorter straggler group. Failed and paused completions bypass batching and fire immediately so failure and attention signals are never delayed. The debounce window, max-wait cap, and straggler windows are configurable via completionBatch in config.json.
Added subagent({ action: "eject" }), disable, enable, and reset management actions for bundled and custom agents. eject copies a builtin or package agent to user/project scope as an editable custom file that shadows the original; disable/enable toggle a reversible agentOverrides.<name>.disabled settings override without deleting the agent; reset removes the scope's custom agent file and/or settings override to restore the bundled default. All four accept agentScope: "user" | "project" (default user) and are blocked from child-safe fanout mode alongside create/update/delete.
Added fuzzy model resolution so callers can specify models with provider separator variations, optional date-stamp parts, and case differences instead of exact provider/modelId strings. When subagents.modelScope: { enforce: true, allow: [...] } is configured, explicit caller-supplied out-of-scope models error while frontmatter/parent-inherited/fallback models warn. Inspired by @tintinweb's pi-subagents.
Added a parent-side wait tool for detached async subagent runs. wait() returns when the next active run finishes or needs attention, wait({ all: true }) drains all active runs, wait({ id }) targets one run, and wait({ timeoutMs }) caps the block. This lets background-launching skills and non-interactive pi -p runs keep going without sleep/status-polling loops or abandoned children. Thanks to RoboBryce (@robobryce) for #365.
Added an opt-in memory frontmatter field for agent definitions so recurring custom agents can maintain role-specific durable memory (e.g. a security reviewer accumulating threat-model notes). memory: { scope: "project" | "user", path: "<name>" } resolves a safe agent-memory/ directory, injects the first 200 lines of a MEMORY.md into the child system prompt, and falls back to a read-only memory block for agents without write tools. Memory lives under a dedicated namespace that does not conflict with Pi's parent/session/project memory system. Inspired by @tintinweb's pi-subagents.
Added native supervisor coordination for child subagents. Children can use contact_supervisor without installing pi-intercom, and parent-side requests are scoped to the exact session id that spawned the child.
Added native prompt workflow commands: /prompt-workflow runs a prompt template through a subagent, and /chain-prompts turns prompt templates into native subagent chain steps.
Fixed
Let foreground sequential chain tool calls launch directly when clarify is omitted; use clarify: true to opt into the clarify UI. Addresses #385.
Tolerate execution-mode action aliases such as single, parallel, PARALLEL, and tasks when the matching execution fields are present, while preserving clear runtime errors for unknown management actions, addressing #382.
Removed companion-package recommendation messages from session start, subagent({ action: "list" }), and /subagents-doctor, addressing #381.
Scope async subagent completion notifications to the exact owning Pi session so another session in the same repo no longer receives result notices.
Harden scheduled-run timestamp parsing and persisted store validation so ambiguous absolute times and corrupted job records fail clearly instead of being normalized or dropped.
Derive live-detail and full-notification hints from Pi's configured expand key instead of hard-coding Ctrl+O. Thanks to Kylegl (@kylegl) for #364.
Tolerate transient Windows EPERM/EBUSY/EACCES locks when atomically replacing async JSON files. Thanks to ThanhNT29Jacky (@ThanhNT29Jacky) for #380.
Hardened the async timeout integration test to wait for the mock child to spawn before asserting the timeout result, fixing a race where the timeout could fire before the child existed.