A custom multi-agent orchestration setup for GitHub Copilot coding agent.
This repo defines a 4-agent team with clear roles:
- Capybara: router/orchestrator
- Otter: implementation agent
- Owl: reviewer/QA gate
- Squirrel: general assistant for simple/non-technical requests
The goal is to separate execution and review, so technical tasks go through an implementation + review loop before final output, with different models contributing different perspectives.
When using one agent for everything, prompts often mix planning, coding, and reviewing in one pass, and the context window can fill up quickly. This setup enforces role separation:
- Technical work is done by a builder agent (
Otter) - Quality is validated by a strict reviewer (
Owl) - Implementation and review can run on different models, giving a multi-perspective quality check
- Non-technical/simple requests are handled fast by a lightweight helper (
Squirrel) - Routing and iteration control is centralized in
Capybara
Capybara.agent.md— orchestration/router profileOtter.agent.md— coding/implementation profileOwl.agent.md— review/QA profileSquirrel.agent.md— general help profile
- GitHub Copilot Chat extension with custom agents support
- VS Code
Store the agent profiles in:
.github/agents/*.agent.md
This makes them available for that repository/workspace.
Create/store agent profiles in your user data custom agents location from Configure Custom Agents... button in VS Code.
This makes them available across your workspaces.
- Open Copilot Chat in VS Code.
- Select
Capybarafrom the agents dropdown. - Ask your request naturally.
- For technical requests,
Capybaraorchestrates Otter ↔ Owl iterations automatically.
Capybara decides where to send the request:
- Technical implementation request →
Otter - Simple/non-technical request →
Squirrel - Ambiguous request → asks a clarification question first
For technical requests, Capybara runs this loop:
- Create report folder path:
.github/temp_reports/{YYYYMMDD_HHmmss}_{objective}/ - Send task to
Otterwith{iteration}and report path - Send results to
Owlfor review - If
APPROVED→ return final result - If
CHANGES REQUIRED→ send review feedback back toOtterwith incremented iteration - Repeat until approved, max 5 iterations
If still not approved after 5 iterations, Capybara stops and surfaces remaining issues.
sequenceDiagram
participant U as User
participant C as Capybara
participant S as Squirrel
participant O as Otter
participant W as Owl
U->>C: Request
alt Non-technical or simple
C->>S: Delegate request
S-->>C: Response
C-->>U: Final response
else Technical implementation
loop Until APPROVED (max 5 iterations)
C->>O: Implement task
O-->>C: Implementation result
C->>W: Request review
W-->>C: APPROVED or CHANGES REQUIRED
end
C-->>U: Final reviewed result
end
- Orchestrates and routes requests
- For technical tasks, manages iterative Otter-Owl loop
- Forwards user prompt/context verbatim (no rewriting)
- Uses
#tool:agent/runSubagentand#tool:vscode/askQuestions - Has
disable-model-invocation: true(pure router behavior)
- Handles implementation/coding tasks
- Creates TODO plan, executes changes, runs available tests
- Writes implementation summary report:
.github/temp_reports/{subfolder}/implementation_{iteration}.md
- Focuses on practical, non-over-engineered solutions
- Reviews technical output for correctness, completeness, quality
- Runs tests when available to detect regressions
- Classifies findings:
- Critical → blocks approval (
CHANGES REQUIRED) - Minor → suggestions only
- Critical → blocks approval (
- Writes review report:
.github/temp_reports/{subfolder}/review_{iteration}.md
- Handles simple/general prompts:
- explanations, brainstorming, casual Q&A, lightweight troubleshooting
- Does not modify code unless explicitly requested
- Keeps responses concise and helpful
| Role | Animal | Why it fits |
|---|---|---|
| Router | Capybara 🦫 | Calm, friendly, and sociable. Perfect energy for coordinating agents smoothly. |
| Implementer | Otter 🦦 | Curious, playful, and clever. Skilled with tools and great at solving problems efficiently. |
| Reviewer | Owl 🦉 | Classic symbol of wisdom and sharp observation. Spots sneaky issues and keeps everything in check. |
| Helper | Squirrel 🐿️ | Quick, nimble, and full of energy. Always ready for quick support and small practical tasks. |
- Start chat with
Capybara. - Ask naturally:
- Technical request example: “Add endpoint X with validation and tests.”
- Non-technical request example: “Explain this repository architecture.”
Capybararoutes automatically.- For technical tasks, reports are generated under
.github/temp_reports/per iteration.
During technical tasks, expect:
implementation_{iteration}.md(fromOtter)review_{iteration}.md(fromOwl)
inside:
.github/temp_reports/{timestamp_objective}/
This creates a lightweight audit trail of what was implemented and what was reviewed.
Common tweaks you can make:
- Change models in frontmatter (
model:) - Restrict/expand tool access (
tools:) - Adjust review strictness in
Owl - Change max loop policy in
Capybara - Adapt tone/style prompts
- https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-custom-agents
- https://docs.github.com/en/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents
- https://docs.github.com/en/copilot/reference/custom-agents-configuration
MIT (see LICENSE).