Build with Syntic CodeAgents and parallel workAgent teams

Agent teams

An agent team is a group of named agents led by your main session. Each teammate runs in the background, keeps its own conversation, and can be given more work later by name. The lead hands out tasks, answers questions, and pulls the results together.

Teams suit jobs where several agents need to work side by side for a while and talk to each other: one agent builds the API while another builds the client, then both adjust when one changes the contract. For a one-off side task, a plain subagent is simpler and cheaper.

Teams, subagents and workflows

SubagentAgent teamWorkflow
ShapeOne helper, one job, one reportSeveral named agents that stay availableA fixed plan of steps that may depend on each other
LivesUntil it reportsUntil the team is endedUntil the last step finishes
Can be sent more workOnly background agents, by idYes, by name, any timeNo
Talk to each otherNoYes, through messagesSteps read earlier steps’ output
Best forSearches, reviews, focused fixesParallel work that needs coordination over timeFan-out jobs you can plan up front

Start a team

You do not run a command. Ask for a team in plain words and say what each member should do:

Set up a team for the payment-retries feature: one teammate on the
backend retry queue, one on the admin UI that shows retry state, and one
writing integration tests against both. Coordinate them and tell me when
everything passes.

The lead then:

  1. creates the team with its TeamCreate tool;
  2. starts each teammate with the Agent tool and a name (lower-case letters, digits and -, such as backend, admin-ui, tests);
  3. sends instructions and follow-ups with SendMessage to those names;
  4. checks who is working with ListAgents;
  5. ends the team with TeamDelete once the work is done.

Only one team runs at a time in a session. Starting a second one is refused until the first has ended.

Pick the specialists

A teammate can be one of your custom agents, so it brings its own instructions, tool limits and model. Name the agent in your request:

Make a team: use the migration-checker agent as "db", and a
general-purpose teammate as "api". db reviews every migration api writes.

How teammates work

  • They run in the background. Your main session stays free while they work. Their progress shows in the agents view (← on an empty prompt), where team members are marked.
  • They are reached by name. A message sent to backend lands in that teammate’s inbox. A teammate that has finished its last task wakes up when a new message arrives.
  • They share a scratch folder. Each team gets a folder under ~/.syntic/teams/ with a tasks area the lead can use to hand around notes and task lists. It is removed when the team ends.
  • Their words are reports. What a teammate sends reaches the lead as an agent report, never as if you had typed it. The lead weighs it like any other tool result.

Talk to a teammate yourself

Tell the lead, and it forwards the message:

Tell admin-ui to use the existing StatusBadge component instead of a new one.

To read what a teammate has been doing, open it from the agents view with Enter.

Keep quality up with hooks

When a teammate runs out of work, the session’s TeammateIdle hooks run. A hook can:

  • send it back to work by blocking (exit code 2, or "decision": "block" with a reason). The reason becomes the teammate’s next instruction. This can happen up to three times in a row, then the idle is accepted;
  • stop it by answering "continue": false.

A hook that runs the tests before a teammate is allowed to stop:

{
  "hooks": {
    "TeammateIdle": [
      {
        "hooks": [
          { "type": "command", "command": "npm test --silent || { echo 'Tests fail. Fix them before you stop.' >&2; exit 2; }" }
        ]
      }
    ]
  }
}

Field details are on the hooks reference.

Permissions

Teammates get no more freedom than the lead. They follow the same rules as subagents (Permissions), and any permission prompt a teammate raises comes to you. To avoid a stream of prompts, allow the commands the team will need before you start (Permission rules), or run in a mode that suits the job (Permission modes).

Cost

Each teammate is a full agent with its own context, so a team of four costs roughly four times one agent doing the work alone. Teammate spend appears per agent in /cost. To cap a runaway member, give its agent definition a max-budget-usd, or set agents.defaultMaxBudgetUsd (Spend caps).

Good habits

  • Give every teammate the context it needs. Teammates do not see your conversation with the lead. Ask the lead to brief each one with the goal, the files involved and how to check the work.
  • Keep the team small. Two to four teammates is easier to coordinate than eight. More agents mean more messages and more chances to conflict.
  • Split by files, not by steps. Two teammates editing the same file will overwrite each other. Give each its own area, or run teammates in separate worktrees by using a custom agent with isolation: worktree.
  • Start with reading jobs. Research and review teams are low risk and show you how the lead coordinates before you let a team write code.
  • Wait for the finish. Ask the lead to report only once every teammate is done and the checks pass.

Troubleshooting

ProblemWhat to do
The lead used plain subagents instead of a teamAsk explicitly for “a team with named teammates”.
TeamDelete is refusedA teammate is still working. Wait for it, or stop it from the agents view (x x).
A second team will not startOnly one team runs at a time. Ask the lead to end the current one first.
Teammates stop too earlyAdd a TeammateIdle hook that checks the work, as above.
Teammates edit the same filesReassign areas, or use worktree-isolated custom agents.