| name | teams |
| description | Organize AI coding agents into teams that collaborate on a shared task. Create teams, add teammates, start them, monitor progress, and collect results. Use this skill when you need parallel agent execution. For single-agent dispatch, use `agents run` instead. |
| argument-hint | [create|add|start|status|disband] |
| allowed-tools | Bash(agents teams*), Bash(agents run*), Bash(agents feed*), Bash(agents mailboxes*), Bash(agents message*) |
| user-invocable | true |
Teams Skill
Organize AI coding agents into teams for parallel collaboration. This skill teaches you how to use the agents teams CLI.
Single Agent vs Teams
- Single agent: Use
agents run <agent> "prompt" --mode edit for one-off tasks
- Multiple agents: Use
agents teams when you need parallel execution
Quick Start
agents teams create my-feature
agents teams add my-feature claude "Implement the auth middleware" --name auth
agents teams add my-feature codex "Build the login UI" --name frontend
agents teams start my-feature --watch
Commands
| Command | Description | Example |
|---|
create | Start a new team | agents teams create my-team |
add | Add a teammate | agents teams add my-team claude "Task" --name role |
start | Launch pending teammates | agents teams start my-team --watch |
status | Check who's working | agents teams status my-team |
logs | Read teammate output | agents teams logs my-team frontend |
remove | Remove a teammate | agents teams remove my-team frontend |
disband | Stop all and remove | agents teams disband my-team |
doctor | Check installed agents | agents teams doctor |
DAG Dependencies
Use --after to create dependencies:
agents teams add my-feature claude "Build API" --name backend
agents teams add my-feature codex "Build UI" --name frontend --after backend
agents teams add my-feature claude "Run tests" --name qa --after backend,frontend
agents teams start my-feature --watch
Distributed Teams (teammates on other machines)
Place teammates on different machines across your fleet (from agents devices)
instead of all on the box running teams start. One orchestrator still drives the
DAG, polls status, and cleans up โ teammates just execute over SSH. One vocabulary โ
--device / --devices (aliases --host / --hosts); all optional (omit it and
every teammate runs local, exactly as before).
agents teams create feat
agents teams add feat claude "build the API" --name backend --device yosemite-s0
agents teams add feat claude "build the UI" --name ui
agents teams start feat --watch
agents teams create feat --devices zion,yosemite-s0 --repo https://github.com/you/repo.git
agents teams add feat claude "..." --name w1
agents teams add feat claude "..." --name w2 --device yosemite-s0
Where a teammate runs โ resolved at launch, top-down:
- teammate
--device X โ X (explicit pin, no pool required)
- else single-device pool โ that device (whole team there)
- else multi-device pool โ auto-scheduled (least-loaded)
- else โ local (today's behavior)
--devices <list> on create declares the pool; --repo <url|path> is how each
device gets the code (defaults to the local checkout's origin, reused or cloned
into ~/.agents/repos/<team>). Per-teammate worktrees work over SSH too.
status / logs show each teammate's host. POSIX hosts only in v1 (Windows
hosts are rejected with a clear message).
Placement & Repos (read before a distributed or worktree team)
The trap that turns one team into a teardown-and-rebuild โ get these right up front:
-
--remote-cwd does NOT place a teammate or set its repo. It rides the shared
--host flag family but teams add ignores it (and now rejects it with
guidance). Place a teammate with --device <host>; the code comes from the
team's --repo. There is no per-teammate repo/path override โ don't reach
for --remote-cwd to send one teammate to a different repo.
-
One team = one repo. A team's --repo is a single clone source shared by all
its remote teammates; local teammates work in the checkout you run add from.
Tasks spanning two repos โ one team per repo, not a cross-repo team:
agents teams create wave-cli --repo ~/src/.../agents-cli --enable-worktrees
agents teams create wave-mono --repo ~/src/.../monorepo --enable-worktrees
agents teams add wave-cli claude "โฆ" --name mcp --device yosemite-s0 --worktree mcp
-
Worktree fork point differs by placement โ and it bites.
- local teammate โ forks from your current local
HEAD, with no fetch.
Fast-forward the checkout first (git fetch && git merge --ff-only origin/<default>)
or every teammate forks off stale code.
- remote (
--device) teammate โ forks from the host's freshly-fetched
origin/<default> automatically โ no manual sync needed.
-
For a raw --host run (not teams), --remote-cwd resolves on the host. Pass a
single-quoted '$HOME/โฆ' path (an unquoted ~ expands locally โ /Users/you
won't exist on a Linux worker) or a valid remote absolute path.
Modes
| Mode | Use When |
|---|
plan (default) | Read-only work: research, audit, analysis |
edit | Code changes: implementation, refactoring |
Always use --mode plan for security audits, research, and analysis.
Monitoring
agents teams status my-feature
agents teams status my-feature --since 2026-04-24T09:00:00-07:00
agents teams logs my-feature frontend
Watch the fleet's comms
agents teams status tells you where each teammate is; the fleet-comms surface
tells you what they're saying. Both ride the same mailbox spool teammates use to
message each other and to page you:
agents feed
agents mailboxes
agents mailboxes --watch
agents mailboxes --graph
agents mailboxes --between <a> <b>
Reply to a teammate (or answer a feed block) with agents message <id> "โฆ" /
agents teams message <team> <teammate> "โฆ".
Best Practices
- Mix agents if available โ different agents have different blind spots
- Use
--mode plan for read-only work (audits, research)
- Give full context โ each teammate needs the big picture plus their specific task
- Demand evidence โ end prompts with:
Return file:line quotes for every claim
- Run in parallel โ most tasks don't depend on each other
- Name teammates with
--name for easy reference
Budget Guardrails
Teammates inherit the project's budget caps from agents.yaml (see
docs/06-observability.md).
Before each teammate launches, its estimated cost is projected onto current
spend; under on_exceed: block, a teammate that would breach a cap is
refused (the spawn fails with [budget] BLOCKED teammate โฆ). Caps are
cross-vendor: a Claude teammate and a Codex teammate draw down the same
per_project / per_day pool โ one budget governs the whole team.
Teammate budgeting is pre-flight only in v1 โ a teammate is estimated and
blocked before it spawns, but there is no live mid-run hard-cap kill for
teammates (that applies to local headless agents run today; teams is a planned
follow-up).
budget:
per_project: 100.00
on_exceed: block
Check spend-to-cap any time with agents budget.
Short Aliases
teams c = create teams a = add teams s = status
teams rm = remove teams d = disband teams ls = list