Your agents aren’t a collection of prompts.
They’re a team.
Build the team your code deserves.
One agent is easy.
Five agents are five configurations.
And suddenly you’re the orchestrator.
Stop configuring agents.
Start designing the team.
Add your people
Start with responsibilities.
Not prompts. Not providers. Not config files.
Jobs that need doing.
Give every job the right brain
The best model isn’t always the same model.
Give every role the intelligence it needs.
Make responsibilities explicit
Everyone knows what they own.
Fewer overlapping agents. Fewer conflicting changes. Less “who was supposed to do this?”
Give them tools
Give agents capabilities.
Not carte blanche.
Decide what every agent can see, change, run and ship.
Turn agents into a team
Agents become a team when relationships become explicit.
Who leads. Who builds. Who reviews. Who asks whom for help.
- reports_to
- delegates_to
- reviews
- consults
- coordinates_with
One team.
Every harness.
version: 1 team: name: product agents: - id: cto name: CTO model: { provider: anthropic, model: claude-opus-4-1 } - id: backend name: Backend model: { provider: openai, model: gpt-5.3-codex } - id: frontend name: Frontend model: { provider: anthropic, model: claude-sonnet-4-5 } - id: reviewer name: Reviewer model: { provider: openai, model: gpt-5.3 } relationships: - { from: cto, to: backend, type: delegates_to } - { from: cto, to: frontend, type: delegates_to } - { from: reviewer, to: backend, type: reviews } - { from: reviewer, to: frontend, type: reviews }
- Claude Code.claude/agents/*.md.claude/settings.jsonCLAUDE.md
- Codex.codex/config.tomlAGENTS.md
- OpenCodeopencode.json
Your team stays the same.
The harness becomes an implementation detail.
version: 1 team: name: product agents: - id: cto name: CTO model: { provider: anthropic, model: claude-opus-4-1 } - id: backend name: Backend model: { provider: openai, model: gpt-5.3-codex } - id: frontend name: Frontend model: { provider: anthropic, model: claude-sonnet-4-5 } - id: reviewer name: Reviewer model: { provider: openai, model: gpt-5.3 } relationships: - { from: cto, to: backend, type: delegates_to } …
- .claude/agents/backend.md
- .claude/agents/frontend.md
- .claude/agents/researcher.md
- .claude/agents/reviewer.md
- .claude/settings.json
- CLAUDE.md
--- name: backend description: 'Backend Engineer. Use for: API architecture; database changes; migrations; backend tests.' tools: Read, Grep, Glob, Edit, Write, Bash model: inherit --- You are a backend engineer. Implement services, APIs and data access. Validate inputs, handle errors explicitly and cover behaviour with tests. ## Responsibilities - API architecture - database changes - migrations - backend tests ## Team context …
- .codex/config.toml
- AGENTS.md
# Generated by agent-team from the portable team definition. Edit agent-team.yaml and re-export instead of editing this file. # Default session: Backend (`backend`). Run another agent with `codex --profile <id>`. model = "gpt-5.3-codex" model_provider = "openai" approval_policy = "on-request" sandbox_mode = "workspace-write" [sandbox_workspace_write] network_access = false [profiles.backend] model = "gpt-5.3-codex" model_provider = "openai" approval_policy = "on-request" sandbox_mode = "workspace-write" [profiles.reviewer] model = "gpt-5.3" model_provider = "openai" …
- opencode.json
{ "$schema": "https://opencode.ai/config.json", "model": "anthropic/claude-opus-4-1", "agent": { "cto": { "description": "CTO", "mode": "primary", "model": "anthropic/claude-opus-4-1", "prompt": "You are the technical lead of this team.\n\nOwn technical direction. Break work into well-scoped tasks and delegate implementation to the engineering agents.\n\n## Responsibilities\n\n- technical direction\n- task breakdown\n- final sign-off\n\n## Team context\n\n- Backend (`backend`) reports to you.\n- Frontend (`frontend`) reports to you.\n- Reviewer (`reviewer`) reports to you.\n- You delegate work to Backend (`backend`).\n- You delegate work to Frontend (`frontend`).\n- Researcher (`researcher`) reports to you.\n- You may delegate only to: Backend, Frontend (max delegation depth 2). Delegated work must return a result summary.", "tools": { "webfetch": false }, "permission": { "edit": "allow", "bash": { "*": "ask", "git push*": "deny" }, "webfetch": "ask" } …
Tools change.
Your team shouldn’t have to.
Define the team. Not the harness.
- CTOclaude-opus-4-1
- Backendgpt-5.3-codex
- Frontendclaude-sonnet-4-5
- Reviewergpt-5.3
- Researchergemini-2.5-pro
Keep one portable definition of how your agents work together.
Validation
Know before you run.
Catch broken relationships, missing models and unsupported capabilities before your agents touch the repository.
This is configuration.
This is intent.
Humans think in teams.
Harnesses think in configuration.
Agent Team Maker translates between them.
Think of it as Terraform for agent teams.
- 01DefineAgent teamRoles, models, tools, permissions and relationships in the editor.
- 02ValidatePortable IRagent-team.yaml is checked for cycles, missing agents and bad models.
- 03CompileHarness adapterEach target translates the team and reports what it can’t represent.
- 04RunGenerated configurationUse it in Claude Code, Codex or OpenCode.
Your team definition is the source of truth. Harness configurations are compilation targets.
Built where the work happens.
Keyboard-first. Fast enough to become part of the workflow.
- aAdd agent
- mChoose model
- tConfigure tools
- rRelationships
- eExport
- Ctrl+SSave
Visual when you want it.
Scriptable when you don’t.
Open format
Your team belongs to you.
Plain text. Version controlled. Portable. Reviewable.
version: 1 team: name: product agents: - id: cto name: CTO model: { provider: anthropic, model: claude-opus-4-1 } - id: backend name: Backend model: { provider: openai, model: gpt-5.3-codex } - id: frontend name: Frontend …
diff --git a/agent-team.yaml b/agent-team.yaml @@ agents @@ - id: reviewer name: Reviewer role: Reviewer - model: { provider: openai, model: gpt-5.3 } + model: { provider: openai, model: gpt-5.3-codex } responsibilities: [correctness, architecture, regressions] @@ relationships @@ - { from: cto, to: frontend, type: delegates_to } + - { from: reviewer, to: backend, type: reviews } + - { from: reviewer, to: frontend, type: reviews }
More agents don’t create a team.
Structure does.
Build the team.
Get Agent Team Maker
A Rust terminal app. Build it from source with Cargo.
$ git clone <repository-url> agent-team $ cd agent-team && cargo install --path . $ agent-team