A tiny pi.dev extension that runs your subagents and shows them as a compact chip row above the editor.
You define a roster of subagents in YAML. The main pi agent can then spawn them, kill them, or check on them with three small tools. They run as isolated pi subprocesses, in parallel if you want, and a widget pinned above the editor animates each one's face while it thinks, works, finishes, or blows up.
That's the whole thing. No queues, no scheduling, no orchestration DSL.
Two agents spawned in one turn, working in parallel:
Three of them, that's it:
nano_agent_spawn(name, task?)— run a team member.taskoverrides the YAML default.nano_agent_kill(name)— abort a running agent.nano_agent_status(name?)— markdown table of everyone, or one agent's full transcript.
Issue several spawn calls in one turn and they go off in parallel. Chain them by feeding one's output into the next one's task.
Drop a YAML file at .pi/nano-team/team/<name>.yaml:
name: developer
role: developer
model: inception/mercury-2
instructions: |
You write TypeScript that meets this project's standards.
- strict mode; no `any`; functional style; immutable data
- no comments unless the WHY is non-obvious
task: |
Implement the requested change end-to-end. State the file paths touched in the summary.The required fields:
name— what you'll call them innano_agent_spawnrole— one lowercased word (developer, reviewer, analyst…)model— any model id pi knows aboutinstructions— system prompt for the subagenttask— default task; can be overridden per spawn
Run /reload after editing. A few starter agents live in examples/team/ if you want to copy from.
From npm:
pi install npm:nano-team
Or from GitHub:
pi install git:github.com/daynin/nano-team
That writes to your global pi settings (~/.pi/agent/settings.json). Pass -l to install only for the current project. Other install sources work too — local path, https URL — see the pi packages docs for the full list.
Verify with pi list. Remove with pi remove nano-team.
Each agent gets its own color, picked from a 12-color palette so they don't blur into each other on the row. Five states (idle, thinking, working, done, error), four variants per state, animating frame by frame. Errors get crossed-out eyes and a frown. It's not load-bearing — it's just nicer to look at than a status bar.
- TypeScript strict, no build step. The extension loads as
.tssource via jiti. - Deps:
@mariozechner/pi-coding-agent,yaml,typebox. Nothing else.
MIT — see LICENSE.
