Agents
Status: π§ͺ Beta
Agents are the core building block of Agent Teams. Each agent is a GitHub Copilot chat participant with a defined role, skills, routing rules, and optional context packs.
Creating an Agentβ
Open the dashboard and navigate to Agent Manager β Create Agent, or use the Quick Actions card on the home page.
The wizard guides you through 6 steps:
Step 0 β Identityβ
| Field | Description |
|---|---|
| Name | Display name shown in Copilot Chat |
| Role | router, orchestrator, worker, or aggregator (see Roles) |
| Description | What the agent does β shown in the chat participant list |
| Domain | Primary domain (e.g. frontend, backend, testing) |
| Subdomain | Optional specialization within the domain (hidden for router and orchestrator) |
Step 1 β Scopeβ
Note: This step is hidden for
routeragents β routers receive all@routermessages and do not need scope filters.
Defines when this agent is activated by the @router.
| Field | Description |
|---|---|
| Expertise areas | Topics the agent is proficient in (tag input) |
| Intents | Action verbs the agent responds to (e.g. write, review, fix) |
| Topics | Subject keywords that trigger routing (e.g. react, database) |
| File glob patterns | File paths that activate this agent, with a priority level per pattern |
| Exclude patterns | File paths to explicitly exclude from routing |
Step 2 β Workflow & Toolsβ
| Field | Description |
|---|---|
| Workflow steps | Ordered list of steps the agent follows when handling a task |
| Tools | Capabilities the agent can use, each with an optional when condition |
| MCP Servers | (Collapsible) MCP servers required by this agent. On sync they are merged (by id) into .vscode/mcp.json (Copilot) or .mcp.json (Claude). New entries are added; existing ones are never overwritten |
Step 3 β Skillsβ
Note: This step is hidden for
routeragents β routers use dispatch tools (agent-teams-handoff,agent-teams-dispatch-parallel) rather than domain skills.
Browse and add skills from two sources:
- Project skills β skills defined in your local
skills.registry.yml - Community registry β install skills from the shared registry directly from this step
Each skill card shows its ID, category, security level, and recommended roles. Select the skills relevant to this agent's purpose.
Step 4 β Rulesβ
Note: Permissions and Constraints are hidden for
routeragents β their behavior is governed entirely by the dispatch tools.
| Section | Description |
|---|---|
| Permissions | What the agent is allowed to do |
| Constraints β Always | Rules the agent must always follow |
| Constraints β Never | Actions the agent must never take |
| Constraints β Escalate | Situations where the agent should hand off to a human |
| Handoffs β Receives from | Which agents can delegate to this one |
| Handoffs β Delegates to | Which agents this one can hand off to |
| Handoffs β Escalates to | Which agents or roles to escalate to when stuck |
| Engram | (Worker agents only, requires Engram configured) Toggle Autonomous task context to enable direct dispatch β the worker recalls task context from Engram at session start and calls complete_subtask automatically when done |
Step 5 β Output & Contextβ
Note: Max items and Never include are hidden for
routeragents β routers produce a dispatch action, not a structured text response.
| Field | Description |
|---|---|
| Output template | Response format template |
| Output mode | short or detailed |
| Max items | Maximum number of items to include in a list response |
| Never include | Fields to omit from the agent's output |
| Context packs | Context packs to embed in the agent spec (feeds the composition engine) |
| Sync targets | Which AI tools to sync to: Claude Code, Codex, GitHub Copilot |
A live preview of the agent configuration appears in the right sidebar throughout the wizard. Click Create when done β the agent spec is written to .agent-teams/agents/<id>.yml.
Managing Agentsβ
View All Agentsβ
Dashboard β Agent Manager shows all loaded agents grouped by role (Router, Orchestrator, Worker). Click any agent to open it for editing.
Edit an Agentβ
- Dashboard β Agent Manager β select agent β Edit
- All 6 wizard steps are available for modification
- Save β changes are written back to the YAML spec file
Sync Agents to .github/agents/β
When agents are ready, sync them to generate the final markdown files used by GitHub Copilot:
- Dashboard home β Sync Status card shows pending changes
- Click the Sync button to apply all changes
- The dashboard updates the stats card to reflect the new sync state
Preview before syncing: the Sync Status card shows a breakdown of which agents will be created, updated, or skipped before you commit.
Agent Rolesβ
| Role | Purpose |
|---|---|
router | Receives all @router messages and delegates via agent-teams-handoff (single) or agent-teams-dispatch-parallel (multi-domain) |
orchestrator | Coordinates multi-step tasks across several worker agents within a domain |
worker | Handles a specific, focused domain task. Can optionally operate in autonomous mode (see engram.mode) to accept direct dispatch without a router or orchestrator |
aggregator | Collects results from parallel orchestrators, detects conflicts, and returns a unified response |
Using an Agent in Copilot Chatβ
Each loaded agent registers as a dynamic chat participant:
@my-agent What is the best way to structure this React component?
Use @router to let the extension automatically pick the most relevant agent based on your message and the current file:
@router Help me write a unit test for this function.
The router scores agents by intent keywords, file path patterns, domain vocabulary, and role β then delegates to the top match.
Reference: Agent YAML Formatβ
The dashboard writes and reads this format automatically. You can also edit the file directly in VS Code β changes are picked up on the next sync or Reload Agents.
id: my-agent
name: My Agent
description: Short description of what this agent does
role: worker # router | orchestrator | worker | aggregator
skills:
- code_analysis
- file_operations
routing:
keywords:
- component
- react
- frontend
paths:
- src/components/**
context_packs:
- frontend-conventions
Fieldsβ
| Field | Required | Description |
|---|---|---|
id | β | Unique identifier (kebab-case) |
name | β | Display name shown in Copilot Chat |
description | β | What the agent does |
role | β | router, orchestrator, worker, or aggregator |
skills | β | List of skill IDs from the registry |
routing.keywords | β | Words that trigger routing to this agent |
routing.paths | β | Glob patterns for file-based routing |
context_packs | β | Context pack IDs to embed in responses |
engram.mode | β | default or autonomous. Applies to worker agents only. See Engram Autonomous Mode |
mcpServers | β | List of MCP server definitions to merge into the project MCP config on sync. See MCP Servers |
Engram Autonomous Modeβ
Worker agents can be configured to operate in autonomous mode when Engram is set up. This allows the worker to be dispatched directly β without going through a router or orchestrator β and manage its own task lifecycle.
id: my-worker
name: My Worker
role: worker
engram:
mode: autonomous
In this mode the worker:
- Recalls task context from Engram at session start:
- If the chat contains
[Handoff:{taskId}]β retrieves the full task details written by the dispatcher. - If the chat contains
[Parallel:{taskId}]β retrieves its specific subtask instructions. - Otherwise, loads domain patterns only.
- If the chat contains
- Signals completion automatically β after persisting its result to Engram, calls
complete_subtaskto notify the aggregator. - Receives the
complete-subtasktool automatically β no manual tool configuration required.
When to use it: choose autonomous mode for workers that are dispatched directly via
agent-teams-dispatch-parallelin multi-domain flows where no intermediate orchestrator is needed. For standard router β orchestrator β worker flows, the default mode is sufficient.
To enable it in the wizard, go to Step 4 β Rules and check Engram β Autonomous task context (only visible when Engram is configured and the role is worker).
MCP Serversβ
Agents can declare the MCP servers they depend on. When a team is synced, Agent Teams merges those servers into the project MCP configuration automatically β so every collaborator gets the right tools without manual setup.
id: my-worker
role: worker
mcpServers:
- id: my-mcp-server
command: npx -y my-mcp-server
args:
- --port
- "3000"
env:
API_KEY: "${MY_API_KEY}"
Merge behaviour:
- Copilot target β merged into
.vscode/mcp.jsonunder theserverskey - Claude target β merged into
.mcp.jsonat project root under themcpServerskey - Merge key is
idβ if a server with thatidalready exists in the file it is never overwritten, so project-level overrides are always preserved
MCP Server fieldsβ
| Field | Required | Description |
|---|---|---|
id | β | Unique server identifier used as the merge key |
command | β | Command to start the server (e.g. npx -y my-mcp-server) |
args | β | List of command-line arguments |
env | β | Environment variables passed to the server process |
To configure MCP servers in the wizard, open Step 2 β Workflow & Tools and expand the MCP Servers collapsible section.