pi-agent-workflows
Pi workflow extension for orchestrating recursive subagents with inter-agent communication, write locking, cost accounting, and a workflow TUI.
Package details
Install pi-agent-workflows from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-agent-workflows- Package
pi-agent-workflows- Version
0.1.2- Published
- Jun 27, 2026
- Downloads
- 603/mo · 23/wk
- Author
- an2tha
- License
- MIT
- Types
- extension, skill
- Size
- 149.9 KB
- Dependencies
- 0 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
],
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-agent-workflows
A pi extension that lets an overseer model spawn typed workflow subagents from JSON.
What is implemented
workflow_spawntool: accepts a compactWorkflowPlanJSON string and runs subagents sequentially or in parallel.- Floating workflow window:
workflow_spawnopens a focused overlay with collapsible agent trees, tool-call overview, per-agent inspection, pricing, and controls. - Status/statusbar accounting: subagent token/cost usage is reported without replacing other extension footers by default; legacy footer replacement is opt-in.
- Overlay controls:
qcloses, Esc aborts, Tab switches views, arrows/j/k select agents, andu/dor[/]scroll on keyboards without Page Up/Down. - Individual inspection:
workflow_inspect_agent,/workflow-inspect, or the overlay Inspect tab show one subagent’s task, model, output, messages, notes, events, usage, and controls. - Prompt injection:
workflow_prompt,/workflow-prompt, orpinside the overlay can steer active subagents while they run. - Escape abort: pressing Esc in the overlay aborts the workflow and propagates cancellation to running subagents.
- Recursive spawning: agent classes can opt into
canSpawnand restrict child classes. - Per-agent model selection: use
modelon a class or spawn spec. Use@fast,@default, or@currentsentinels. - Inter-agent communication: subagents share
workflow_send,workflow_receive, andworkflow_blackboard. - Global write locks: mutating bash commands must declare
writePaths; locks prevent subagents from claiming the same file/path during a run. - Bash for every subagent: the
bashtool is mandatory for all spawned agents. - Root skill inheritance: available/loaded skills from the overseer context are carried into subagent prompts.
- TypeScript API: register custom agent classes and custom workflow tools with
createWorkflowExtension,defineAgentClass, anddefineWorkflowTool. - Main-agent skill:
skills/pi-workflows/SKILL.mdtells the agent to get an overview first, use workflows only for clearly defined substantial work, and route@fast/@defaultmodels appropriately.
Install
Install from npm:
pi install npm:pi-agent-workflows
Or install directly from GitHub:
pi install git:github.com/an2tha/pi-workflows
For local development, try a checkout without installing:
pi -e /path/to/pi-workflows/index.ts
Configure workflow model aliases, enable/disable the extension, and choose non-invasive status vs footer replacement mode:
/workflow-settings
/workflow-settings show
/workflow-settings disable
/workflow-settings enable
/workflow-settings footer status
Manually force workflows for a task when you know the extra cost is worthwhile:
/workflow-force <task>
/workflow-force-next <task>
Custom workflow ideas
Agents are encouraged to create task-specific workflow plans rather than reuse canned templates. Good custom shapes include:
- subsystem split: one agent per package/API/feature area
- risk split: compatibility, migration, concurrency, security, UX/accessibility
- ownership split: one writer per non-overlapping file group with write locks
- validation split: tests, typecheck/lint, repro scripts, docs examples, smoke checks
- release split: docs/examples, packaging, changelog/install verification
Use /workflow-classes to see registered classes, then assign custom ids, task text, dependencies, and limits for the current request.
Configure workflow behavior and fast/default model aliases in ~/.pi/agent/settings.json or .pi/settings.json:
{
"workflows": {
"enabled": true,
"footerMode": "status",
"fastModel": "openai-codex/codex-5.3-spark",
"defaultModel": "anthropic/claude-sonnet-4-5"
}
}
Environment variables are still supported as fallback:
PI_WORKFLOW_FAST_MODEL=openai-codex/codex-5.3-spark
PI_WORKFLOW_DEFAULT_MODEL=anthropic/claude-sonnet-4-5
Write locking
The subagent bash tool treats read commands as unlocked. Commands that look mutating are rejected unless they pass writePaths.
Example mutating bash call inside a custom workflow tool:
await ctx.bash("python3 scripts/update.py src/cache.ts", {
writePaths: ["src/cache.ts"],
lockTimeoutMs: 5000,
});
Locks are global to the engine and held for the workflow run. This prevents two subagents from owning the same file or a parent/child path concurrently.
TypeScript API sketch
import Type from "typebox";
import {
createWorkflowExtension,
defineAgentClass,
defineWorkflowTool,
textResult,
} from "pi-agent-workflows";
export default createWorkflowExtension({
agentClasses: [
defineAgentClass({
name: "docs-writer",
description: "Writes concise documentation from findings.",
model: "@fast",
tools: ["bash", "summarize_file"],
}),
],
tools: [
defineWorkflowTool({
name: "summarize_file",
description: "Read a file and return a short summary.",
parameters: Type.Object({ path: Type.String() }),
async execute(params, ctx) {
const quotedPath = JSON.stringify(params.path);
const result = await ctx.bash(`python3 - <<'PY'\nfrom pathlib import Path\nprint(Path(${quotedPath}).read_text()[:2000])\nPY`);
return textResult(result.stdout, result);
},
}),
],
});
Development
bun install
bun test
bunx tsc --noEmit