Squad¶
Named specialists you keep around across repos and sessions, defined once as plain TOML instead of remembered by hand:
# ~/.config/vupai/squad.toml
[squad.sage]
role = "frontend specialist"
program = "claude" # a key from config [programs]; omit for the default pane_command
brief = """
You are sage, the frontend specialist. Favor small, reviewable diffs and
flag anything that touches shared components.
"""
The global file at ~/.config/vupai/squad.toml is always read; a repo can
add its own .vupai/squad.toml on top, and a member with the same name there
replaces the global one whole (no field-level merging). Names are single
words and can't collide with a reserved word, the broadcast word, a program
key, or another member - a bad file is warned about and the offending member
skipped, never a crash.
Starter roster¶
Don't want to write briefs from scratch? Grab the starter squad: six specialists covering a typical project.
| Member | Role |
|---|---|
| archer | architecture: system design, boundaries, trade-offs |
| forge | backend: APIs, data models, migrations, performance |
| vista | frontend: components, state, CSS, accessibility |
| scout | testing: coverage, edge cases, minimal reproductions |
| hawk | review: correctness, security, maintainability |
| scribe | docs: READMEs, changelogs, API and inline docs |
Install it (only if you don't have a roster yet - this would overwrite yours):
mkdir -p ~/.config/vupai
curl -fo ~/.config/vupai/squad.toml \
https://raw.githubusercontent.com/itsjrsa/vupai/master/examples/squad.toml
Then say "open archer" inside a session, and run vupai squad to see the
roster. The briefs are starting points, not doctrine: edit them freely. No
member pins a program, so each launches your default pane_command
(whatever agent CLI you use).
- Summon one: say "open sage" (also "start sage") and vupai splits a
pane named
sageand launches it. The pane border carries the role next to the program (sage · claude · frontend specialist), so the border says who they are, not just what tool they run. Each member has one live incarnation at a time - saying it again while sage is already up answers "sage is already up" instead of duplicating the pane. - Brief delivery depends on the tool: a
claudemember gets the brief as a real system prompt (--append-system-prompt) at launch; every other program is launched bare and has the brief pasted as its first message; a plain shell member (program = "shell") gets no brief at all - pasting one into a shell would execute it. If the paste fails, the pane is kept and vupai says "brief not delivered" so you can hand it over yourself. - No confirm popup: summoning a member is a direct order, like "open claude" - it launches immediately.
- See who's who:
vupai squadlists the effective roster (global + repo overlay) with each member's name, role, program, and whether a live pane currently carries their name. - Watch it live: say "open squad" (also "show squad",
<prefix>+v's s entry, orvupai squad --pane) to split a read-only pane, like the tasks pane, that repaints every couple of seconds with each member's name, role, program, and up/-status, plus the brief flattened to at most two lines (a longer brief trails off with "..."; the full text stays insquad.toml). One pane per session - reopening focuses the existing one. - Squad names are never handed out as auto callsigns, so a specialist's pane is never confused with an ad-hoc agent that happened to get the same name.
Triage also knows about the roster: when one exists, it proposes an
owner per task, shown as [p1, S, sage] and spoken as "for sage".