Define a multi-agent team for ANY task on ANY system as an explicit deployment topology - pick the shape from the task's dominant risk, specify the runtime/communication/trust layers, place model capability by lane, present it as a diagram + table + trust-boundary note + open choices, and deploy ONLY after the user agrees to the proposed shape. Use when the user asks to "define/design/lay out the team", "what topology are we deploying", "how should the agents be arranged", "design the team for <task>", "what formation for <task>", or wants a team expressed as a topology (nodes, edges, models, trust boundaries) rather than spawned ad hoc. Substrate-agnostic - Cotal mesh, harness subagents, Workflow stages, containers, or any orchestration system.
npx skills add https://github.com/Cotal-AI/Cotal --skill team-topology
A method for defining a multi-agent team for a task as an explicit topology: not "spawn some agents" but a legible deployment you can draw, hand off, and reason about. Who runs where, who talks to whom, what each node can touch, which model sits in which seat. Substrate-agnostic: the same method applies to a Cotal mesh, harness subagents, workflow stages, or plain processes.
A topology is a defense against the way the task fails by default. Name the task's dominant risk, then pick the shape that structurally prevents it:
| Task type | Dominant risk | Shape |
|---|---|---|
| audit / review / research | missed findings, groupthink | hub-and-spoke fan-out: independent finder lanes, an adversarial verify tier, coordinator synthesizes |
| fix / implementation | write races, unverified changes | writer lanes + merge authority: 1-2 writers in isolated workspaces, everyone else fenced read-only, a proof gate before merge |
| staged transform (migration, ETL, generation) | loss at handoffs | pipeline: stages connected by explicit artifacts, each stage validates its input |
| open design question | anchoring on the first idea | panel + judge: N proposals produced blind, then scored and synthesized |
| long-running ops / monitoring | drift, silent death | operator + watchdog: one active node, one that only checks liveness and invariants |
This catalog is a starting set, not a menu. Hybrids are normal (an audit's repro tier is a small pipeline), and inventing a shape for the task at hand is expected. The number of channels, tiers, and agents is a free parameter: derive it from the task's size, risk, and budget (a quick check might be 1 channel / 2 agents; a deep audit 4 channels / 10). Never copy a previous deployment's headcount out of habit.
Every shape keeps one coordinator: the single node that spans the whole topology, holds the consolidated state, and owns final decisions. Usually that is you, the main session.
Survey the live substrate state first - topologies rarely deploy onto a blank slate:
Then specify the three layers:
<purpose>.<task> (review.control-surface, fix.billing). State which nodes sit on which edge, and that no one else does.First, enumerate what actually exists - never fill a seat from memory. Before naming any model, look up the harnesses, providers, model IDs, and variant/effort levels available in the current environment, and cite where each came from. A seat naming a model that does not exist (a misremembered ID, a variant the provider doesn't offer, a "default" left unspecified) invalidates the proposal. Sources to check, in order:
.cotal/agents/*.md model:/variant: frontmatter, .claude/agents/*.md) - ground truth for IDs that work on this machine.~/.config/opencode/opencode.json provider blocks with model IDs, limits, and their exact variants; connector configs) for what is wired up.opencode models).Every seat gets an explicit model + variant; "default" is not a placement. If the user names a preference pool or per-provider caps (e.g. "at most N of provider X"), treat those as hard constraints and show the resulting counts.
Models are not uniform, and no vendor is assumed. Fill each seat by strength class, with whatever vendor/model best provides it in the current environment: adversarial-strong on attack/verify lanes, code-strong on implementation and deep review, research-capable on spec/fidelity lanes, fast-and-cheap on mechanical or high-fan-out runs. Two deliberate reasons to mix vendors across lanes: independent lanes on different vendors have less-correlated blind spots (a diversity mechanism, especially for verify tiers), and no single provider outage or rate limit stalls the whole team. Present placement as a table so it is auditable, and note any per-node override of a persona/stage default:
| Node | Edge | Model | Lane |
|---|---|---|---|
| (name) | (channel/stage) | (vendor/model, by strength class) | one line: what this node does and does not do |
Every definition or status report produces all four:
The lifecycle is design → present → agree → deploy, and agreement is a hard gate:
allowSubscribe/allowPublish frontmatter; author the .cotal/agents/<name>.md first, then (re)spawn so the credential is minted with the ACL. Spawn with an explicit cwd (the default roots peers in the manager's workspace). Verify your own subscriptions after joining every channel. Survey before spawning: roster + manager liveness (a dead manager inside up needs supervise; a stale long-lived manager pins pre-merge code and split-brains spawns), never reuse a dead agent's name, set channel replay deliberately (a joiner with replay ON back-reads history; a channel's durable backstop only activates on leave+rejoin, a bare re-join no-ops). Never disturb a live shared broker: kill by PID, no broad pkill. mesh-teams runs the review/implement/test loop; this skill specifies the shape it runs in.An audit of a security-critical feature, run hub-and-spoke on a Cotal mesh: three channels (review.* finders, audit.* verifiers, test.* testers); four finder lanes split by lens (security, distributed-systems, architecture, fact/spec), each on a different vendor's strongest fitting model; two adversarial verifiers on two further vendors, prompted to refute, not confirm; two read+run-only testers reproducing the HIGHs live; the coordinator subscribed to all three channels, reconciling severities across tiers. Sized at 3 channels / 8 agents because the surface was large and the risk was missed findings. The same method on a small fix task might instead produce 1 channel, 1 writer, 1 reviewer; on a migration, a 3-stage pipeline with no channels at all. The shape, the headcount, and the vendor mix are all outputs of Steps 1-3, never constants.
Take cotal-ai/team-topology from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.