Building Custom Copilot Agents with Extensions
Accuracy note (2026-07-29 audit): This post was reviewed against current official documentation in July 2026 and contains inaccuracies relative to the current state of the tools described. The post is retained for its workflow reasoning; the specific factual issues are:
GitHub Copilot Extensions were sunset in 2025 in favor of MCP-based integrations. The
copilot-extension.yamlmanifest and the Marketplace/organization deployment flow described below are not the current Copilot Extension or custom-agent surface. Treat the implementation section below as historical; current custom-agent integration uses MCP servers and current VS Code custom-agent files.Reference docs to verify against:
- VS Code MCP documentation — https://code.visualstudio.com/docs/mcp
Standard Copilot is general-purpose. It can code, debug, and suggest—but it does not know your team’s internal APIs, deployment process, or business logic.
Copilot Extensions change that. They let you build custom agents that know about your tools, processes, and conventions.
An extension is a specialized agent that can:
- Call your internal APIs
- Access your deployment pipeline
- Read your internal documentation
- Enforce your team’s coding standards
In May 2026, GitHub released the Copilot Extensions API, making it accessible for teams to build custom agents.
What extensions enable
Example 1: Infrastructure agent
Your company has internal CLI tools for AWS provisioning. A standard Copilot session does not know about them.
With an extension, you can create an infrastructure agent that:
- Understands your internal tool syntax
- Reads your infrastructure-as-code templates
- Suggests infrastructure changes based on your conventions
- Can even trigger deployments (with approval gates)
Result: “Deploy a Postgres database in us-west-2 with backups enabled” → agent handles it automatically.
Example 2: API documentation agent
Your company has a 50-endpoint REST API. Copilot does not know its schema.
With an extension, you can:
- Point the agent at your OpenAPI/Swagger spec
- Make it callable from within Copilot
- Get API code samples on demand
Result: “How do I create a subscription with trial period?” → agent shows you the endpoint, parameters, and example code.
Example 3: Code review enforcer
Your team has 20 linting rules and security checks. Copilot does not know all of them.
With an extension, you can build a review agent that:
- Knows all your linting rules
- Knows your performance budgets
- Checks PRs against all of them automatically
Result: “Review my code for our standards” → agent finds issues your CI/CD would catch, but faster.
How extensions are built
A Copilot extension is:
- A manifest file (
copilot-extension.yaml) that defines the agent - An optional backend server that handles tool calls
- Integration with Copilot’s tool-calling interface
Basic manifest example:
name: "Infrastructure Agent"
description: "Deploy and manage AWS infrastructure"
version: 1.0
tools:
- name: "provision_database"
description: "Create a new database"
parameters:
type: postgres
region: string
backup_enabled: boolean
- name: "list_deployments"
description: "List recent deployments"
When you use the agent, Copilot calls these tools and your backend handles them.
Deploying an extension to your team
Extensions are deployed via the VS Code Marketplace or internally via your GitHub organization’s Copilot admin panel.
Steps:
- Author the extension (manifest + backend server)
- Test it locally with Copilot in VS Code
- Publish to the marketplace (public) or GitHub organization (private)
- Your team installs it like any VS Code extension
- When they use Copilot, your custom agent is available
For enterprise deployments:
- GitHub provides admin controls to require, restrict, or force-deploy extensions
- You can audit which teams are using which extensions
- You can manage tool permissions (which agents can call what APIs)
Practical workflow: building an internal API agent
Let’s say you are building an agent to help developers use your internal payment API.
Step 1: Understand the API
Your API has 3 endpoints:
POST /charges— create a chargeGET /charges/:id— get charge detailsPOST /refunds— issue a refund
Step 2: Write the manifest
name: "Payments API Agent"
description: "Help developers integrate with our payments API"
tools:
- name: "create_charge"
description: "Create a new charge"
parameters:
amount: number
currency: string (USD, EUR, GBP)
customer_id: string
description: string
- name: "get_charge"
description: "Get charge status and details"
parameters:
charge_id: string
- name: "issue_refund"
description: "Refund a charge"
parameters:
charge_id: string
amount: number (optional, full refund if omitted)
Step 3: Implement the backend
When Copilot calls create_charge, your backend:
- Receives the parameters
- Calls your internal payments API
- Returns the result to Copilot
- Copilot shows it to the developer in chat
Example (pseudocode):
@app.route('/agent/create_charge', methods=['POST'])
def create_charge():
params = request.json
result = payments_api.post('/charges', {
'amount': params['amount'],
'currency': params['currency'],
'customer_id': params['customer_id'],
'description': params['description']
})
return result
Step 4: Deploy and test
In VS Code, you load the extension locally and test with Copilot:
"Create a $50 charge for customer X for monthly subscription"
→ Agent calls your create_charge tool
→ Your backend processes it
→ Copilot shows the result: "Charge created: charge_123, expires in 30 days"
Governance and safety
Custom agents can call your internal APIs, so governance matters:
Permissions:
- Who can create extensions? (Admin, team leads, anyone?)
- Which teams can use which extensions?
- What APIs can each extension call?
Audit:
- What did the agent call?
- When?
- Who asked for it?
- What was the result?
GitHub provides these controls in organization settings. Enterprise customers can enforce approval workflows.
When to build an extension vs. when not to
Build an extension if:
- Your team uses custom internal tools that Copilot does not know about
- You want to enforce team standards (linting, security, performance)
- You are onboarding new developers and want faster learning
- You have tribal knowledge (undocumented conventions) you want to codify
Do not build an extension if:
- Standard Copilot already handles your use case
- Your tools change too frequently (extensions are slower to update)
- You have fewer than 5 people on the team (overhead may not be worth it)
- The problem is better solved with documentation, not automation
The broader ecosystem
As more teams build extensions, the Copilot ecosystem becomes specialized.
What was “GitHub Copilot for code” is becoming:
- Copilot for infrastructure (via extensions)
- Copilot for security (via extensions)
- Copilot for onboarding (via extensions)
- Copilot for business logic (via extensions)
Each extension teaches Copilot about your domain.
Getting started
If you are interested in building a Copilot extension:
- Read the Copilot Extensions documentation
- Clone the extension template repo
- Build a tool for your team’s most-used internal API
- Pilot it with 5 developers
- Iterate based on feedback
Most teams find that the first extension pays for itself in developer productivity within a month.