GitHub has released the Copilot SDK —a multi-platform toolkit for embedding Copilot's production-tested agentic workflows into applications across Python, TypeScript, Go, .NET, Rust, and Java. With 9.3K stars and 1.2K forks , the SDK exposes the same engine behind Copilot CLI, handling planning, tool invocation, file edits, and autonomous agent execution without requiring developers to build custom orchestration.
The SDK supports multiple authentication methods including GitHub OAuth, environment variables, and BYOK (Bring Your Own Key) for OpenAI, Azure AI Foundry, and Anthropic—enabling developers to use Copilot's agent runtime with their own API keys and no GitHub authentication required. Billing is based on the same model as Copilot CLI, with each prompt counted toward premium request quotas, and a free tier with limited usage.
This represents GitHub's strategic play in the Agent Economy —making it trivial for any application to add AI coding agents that plan, execute, debug, and deploy code autonomously. Rather than competing with frameworks like LangChain or LlamaIndex, GitHub is offering production-grade orchestration that millions of developers already trust through Copilot CLI and Copilot Workspace.
This guide explores the SDK architecture, available languages, authentication methods, BYOK configuration, custom agent development, and real-world integration patterns for embedding Copilot agents in your applications.
Weekly digest 3.5k readers
Catch up on AI
Curated AI updates on agents, skills, and MCP — delivered to your inbox. Unsubscribe anytime.
Part I: What is the GitHub Copilot SDK?
The Problem
Building AI agents requires solving hard orchestration problems:
Traditional approach:
Planning - Break user requests into executable steps
Tool selection - Choose appropriate tools (file operations, bash, API calls)
Execution - Run tools and handle errors
Iteration - Refine based on results, retry failures
Context management - Track conversation state across long sessions
Developer pain points:
Frameworks like LangChain are powerful but complex (steep learning curve)
Production-grade error handling is non-trivial (retries, timeouts, fallbacks)
Multi-step workflows require custom state machines
Tool calling patterns vary across LLM providers (OpenAI vs Anthropic vs Azure)
The GitHub Copilot SDK Solution
GitHub's SDK provides:
✅ Production-tested orchestration - Same engine as Copilot CLI (millions of users)
✅ Multi-language support - Python, TypeScript, Go, .NET, Rust, Java
✅ Built-in tools - File operations, bash execution, git, web search, MCP servers
✅ Zero boilerplate - Define agent behavior, Copilot handles execution
✅ Flexible auth - GitHub OAuth, API keys, BYOK for OpenAI/Azure/Anthropic
✅ Streaming responses - Real-time updates as agents work
✅ Permission handlers - Approve/deny tool calls programmatically
Architecture:
Your Application
↓
SDK Client (Python/TS/Go/.NET/Rust/Java)
↓ JSON-RPC
Copilot CLI (server mode)
↓
LLM Provider (GitHub/OpenAI/Azure/Anthropic)
The SDK manages the CLI process lifecycle automatically. You can also connect to an external CLI server for distributed deployments.
Part II: Available SDKs and Installation
SDK Comparison
Language Package Installation CLI Bundled? Cookbook TypeScript @github/copilot-sdknpm install @github/copilot-sdk✅ Yes Link Python github-copilot-sdkpip install github-copilot-sdk✅ Yes Link .NET GitHub.Copilot.SDKdotnet add package GitHub.Copilot.SDK✅ Yes Link Go github.com/github/copilot-sdk/gogo get github.com/github/copilot-sdk/go❌ No (manual install) Link Rust github-copilot-sdkcargo add github-copilot-sdk❌ No (optional bundling) Link Java com.github:copilot-sdk-javaMaven/Gradle ❌ No (manual install) Link
Note: For Go, Rust, and Java, you need to install the Copilot CLI separately or ensure copilot is in your PATH. Go and Rust also offer application-level CLI bundling features.
Quick Start: Python
pip install github-copilot-sdk
from github_copilot_sdk import CopilotClient
client = CopilotClient()
response = await client.chat(
messages=[
{"role" : "user" , "content" : "Create a FastAPI app with user authentication" }
]
)
print (response.content)
Quick Start: TypeScript
npm install @github/copilot-sdk
import { CopilotClient } from '@github/copilot-sdk' ;
const client = new CopilotClient ();
const response = await client.chat ({
messages : [
{ role : 'user' , content : 'Add Stripe checkout to my Next.js app' }
]
});
console .log (response.content );
Quick Start: Go
brew install gh
gh extension install github/gh-copilot
go get github.com/github/copilot-sdk/go
package main
import (
"context"
copilot "github.com/github/copilot-sdk/go"
)
func main () {
client := copilot.NewClient()
resp, _ := client.Chat(context.Background(), &copilot.ChatRequest{
Messages: []copilot.Message{
{Role: "user" , Content: "Build a gRPC server with auth" },
},
})
println (resp.Content)
}
Part III: Authentication Methods
1. GitHub Signed-In User (Default)
If you've run gh auth login or copilot login, the SDK uses stored OAuth credentials:
from github_copilot_sdk import CopilotClient
client = CopilotClient()
How it works:
SDK checks for GitHub CLI credentials at ~/.config/gh/hosts.yml
Retrieves OAuth token
Uses token to authenticate with GitHub Copilot API
Billing: Counted against your GitHub Copilot subscription
2. OAuth GitHub App
Pass user tokens from your own GitHub OAuth app:
client = CopilotClient(
auth_token="gho_abc123xyz"
)
Use case: SaaS apps where each user has their own GitHub account
3. Environment Variables
Set COPILOT_GITHUB_TOKEN, GH_TOKEN, or GITHUB_TOKEN:
export GITHUB_TOKEN="gho_abc123xyz"
Use case: CI/CD pipelines, serverless functions
4. BYOK (Bring Your Own Key)
Use your own OpenAI, Azure AI Foundry, or Anthropic API keys:
client = CopilotClient(
byok_config={
"provider" : "openai" ,
"api_key" : "sk-abc123xyz" ,
"model" : "gpt-4o"
}
)
Supported providers:
OpenAI - gpt-4o, gpt-4-turbo, o1, o3
Azure AI Foundry - Azure OpenAI models
Anthropic - claude-3-5-sonnet, claude-3-opus
Benefits:
✅ No GitHub authentication required
✅ Use your own LLM budget
✅ Deploy in air-gapped environments
Limitations:
❌ Microsoft Entra ID (Azure AD) not supported
❌ Managed identities not supported
❌ Third-party identity providers not supported
BYOK Configuration Example:
client = CopilotClient(byok_config={
"provider" : "openai" ,
"api_key" : "sk-abc123" ,
"model" : "gpt-4o"
})
client = CopilotClient(byok_config={
"provider" : "azure" ,
"api_key" : "abc123" ,
"endpoint" : "https://myresource.openai.azure.com/" ,
"deployment_name" : "gpt-4o"
})
client = CopilotClient(byok_config={
"provider" : "anthropic" ,
"api_key" : "sk-ant-abc123" ,
"model" : "claude-3-5-sonnet-20241022"
})
Part IV: Billing and Pricing
How Billing Works
The SDK uses the same billing model as Copilot CLI:
For GitHub Copilot Subscriptions:
Free Tier:
Limited usage per month
Exact quota varies by subscription type
For BYOK:
No GitHub charges
Pay your LLM provider directly (OpenAI, Azure, Anthropic)
Pricing (GitHub Copilot Individual, as of June 2026):
$10/month or $100/year
Premium request quota: ~500-1,000 requests/month (estimated)
Pricing (GitHub Copilot Business):
$19/user/month
Higher premium request quotas
Admin controls, audit logs
Cost Optimization Tips
1. Use BYOK for high-volume applications
If you're making 10K+ requests/month, BYOK with OpenAI API is cheaper:
Usage GitHub Copilot OpenAI BYOK (GPT-4o) 1K requests $10/mo $15 10K requests $190/mo (10 users) $150 100K requests $1,900/mo (100 users) $1,500
2. Cache common requests
Cache agent responses for repeated queries:
import hashlib
import json
cache = {}
def cached_agent (query ):
key = hashlib.sha256(query.encode()).hexdigest()
if key in cache:
return cache[key]
response = client.chat(messages=[{"role" : "user" , "content" : query}])
cache[key] = response
return response
3. Use cheaper models for simple tasks
BYOK allows switching models per request:
simple_response = client.chat(
messages=[{"role" : "user" , "content" : "Format this JSON" }],
byok_config={"model" : "gpt-4o-mini" }
)
complex_response = client.chat(
messages=[{"role" : "user" , "content" : "Refactor this architecture" }],
byok_config={"model" : "gpt-4o" }
)
The SDK exposes Copilot CLI's first-party tools by default (similar to --allow-all):
File Operations
Read - Read file contents
Write - Create/overwrite files
Edit - Precise string replacements
Glob - Find files by pattern
Grep - Search file contents
Command Execution
Bash - Run shell commands
Git - Git operations (status, diff, commit, etc.)
Web & Research
WebFetch - Fetch and parse URLs
WebSearch - Search the web
Advanced
Task - Spawn sub-agents for complex workflows
MCP Servers - Connect to Model Context Protocol servers
Permission Handler:
All tool execution is governed by permission handlers—you approve, deny, or customize tool calls:
def permission_handler (tool_call ):
if tool_call.tool == "Read" :
return "approve"
if tool_call.tool == "Bash" :
print (f"Agent wants to run: {tool_call.command} " )
return input ("Approve? (y/n): " ) == "y"
if tool_call.tool == "Write" and "/etc/" in tool_call.path:
return "deny"
return "approve"
client = CopilotClient(permission_handler=permission_handler)
Part VI: Building Custom Agents
Basic Agent
from github_copilot_sdk import CopilotClient
client = CopilotClient()
async def build_feature (description ):
response = await client.chat(
messages=[
{
"role" : "system" ,
"content" : "You are an expert software engineer. Build features according to best practices."
},
{
"role" : "user" ,
"content" : f"Build this feature: {description} "
}
]
)
return response.content
result = await build_feature("Add user profile page with avatar upload" )
print (result)
Agent with Streaming
Get real-time updates as the agent works:
async def build_feature_streaming (description ):
async for chunk in client.chat_stream(
messages=[
{"role" : "user" , "content" : f"Build: {description} " }
]
):
if chunk.type == "tool_call" :
print (f"🔧 Using tool: {chunk.tool} - {chunk.description} " )
elif chunk.type == "content" :
print (f"💬 {chunk.content} " )
elif chunk.type == "error" :
print (f"❌ Error: {chunk.error} " )
await build_feature_streaming("Add Stripe subscription management" )
Output:
🔧 Using tool: Read - Reading existing payment configuration
💬 I can see you have Stripe installed. Let me add subscription management.
🔧 Using tool: Write - Creating subscription service
🔧 Using tool: Edit - Updating API routes
🔧 Using tool: Bash - Running database migration
💬 Subscription management is now implemented with webhook handling.
Add domain-specific tools:
from github_copilot_sdk import CopilotClient, Tool
def query_analytics_db (query: str ) -> dict :
"""Query the analytics database"""
return {"users" : 1523 , "conversions" : 234 }
analytics_tool = Tool(
name="query_analytics" ,
description="Query analytics database for metrics" ,
parameters={
"type" : "object" ,
"properties" : {
"query" : {"type" : "string" , "description" : "SQL query" }
},
"required" : ["query" ]
},
function=query_analytics_db
)
client = CopilotClient(tools=[analytics_tool])
response = await client.chat(
messages=[
{"role" : "user" , "content" : "What's our conversion rate this month?" }
]
)
Multi-Step Agent Workflow
Build agents that plan → execute → verify:
async def autonomous_bug_fix (bug_description ):
conversation = [
{"role" : "system" , "content" : "You are a debugging expert. Follow this workflow: 1) Understand the bug 2) Read relevant code 3) Write a fix 4) Test the fix 5) Commit if tests pass" }
]
conversation.append({
"role" : "user" ,
"content" : f"Fix this bug: {bug_description} "
})
response = await client.chat(messages=conversation)
return response.content
result = await autonomous_bug_fix("Login button returns 500 error on Safari" )
Part VII: Real-World Integration Patterns
from fastapi import FastAPI, HTTPException
from github_copilot_sdk import CopilotClient
app = FastAPI()
copilot_clients = {}
@app.post("/api/generate" )
async def generate_code (user_id: str , prompt: str , github_token: str ):
if user_id not in copilot_clients:
copilot_clients[user_id] = CopilotClient(auth_token=github_token)
client = copilot_clients[user_id]
try :
response = await client.chat(
messages=[{"role" : "user" , "content" : prompt}]
)
return {"code" : response.content}
except Exception as e:
raise HTTPException(status_code=500 , detail=str (e))
from github_copilot_sdk import CopilotClient
class DevPlatform :
def __init__ (self, byok_api_key ):
self .client = CopilotClient(byok_config={
"provider" : "anthropic" ,
"api_key" : byok_api_key,
"model" : "claude-3-5-sonnet-20241022"
})
async def scaffold_microservice (self, service_name, spec ):
return await self .client.chat(
messages=[
{"role" : "system" , "content" : "Generate microservices following our internal standards" },
{"role" : "user" , "content" : f"Create {service_name} : {spec} " }
]
)
async def refactor_legacy_code (self, file_path ):
return await self .client.chat(
messages=[
{"role" : "user" , "content" : f"Refactor {file_path} to TypeScript with tests" }
]
)
platform = DevPlatform(byok_api_key="sk-ant-..." )
await platform.scaffold_microservice("payment-service" , "Handles Stripe webhooks" )
Pattern 3: CI/CD Integration
name: Auto-fix failing tests
on:
push:
branches: [main]
jobs:
auto-fix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
id : test
run: npm test || echo "FAILED=true" >> $GITHUB_OUTPUT
- name: Auto-fix with Copilot
if : steps.test.outputs.FAILED == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python scripts/auto_fix.py
scripts/auto_fix.py:
import os
from github_copilot_sdk import CopilotClient
client = CopilotClient(auth_token=os.getenv("GITHUB_TOKEN" ))
async def fix_tests ():
response = await client.chat(
messages=[
{"role" : "user" , "content" : "Tests are failing. Read test logs, identify failures, fix the code, and verify tests pass." }
]
)
print ("Auto-fix result:" , response.content)
if __name__ == "__main__" :
import asyncio
asyncio.run(fix_tests())
Part VIII: FAQ
Do I need a GitHub Copilot subscription?
Standard usage: Yes, unless you use BYOK.
BYOK: No GitHub authentication required. Configure your own OpenAI/Azure/Anthropic keys.
Free tier: GitHub Copilot offers limited free usage. See pricing page .
How is billing calculated?
Each SDK chat request = 1 premium request, counted toward your GitHub Copilot quota.
BYOK: No GitHub charges. Pay your LLM provider directly.
What models are supported?
With GitHub Copilot subscription:
All models available via Copilot CLI
With BYOK:
OpenAI: gpt-4o, gpt-4-turbo, o1, o3-mini
Azure AI Foundry: Azure OpenAI models
Anthropic: claude-3-5-sonnet, claude-3-opus, claude-3-haiku
Call client.list_models() to see available models at runtime.
Is the SDK production-ready?
Yes. The SDK is generally available and follows semantic versioning. See CHANGELOG.md .
Yes. Define custom tools and agents. See SDK documentation for your language.
Do I need to install Copilot CLI separately?
TypeScript, Python, .NET: No, CLI is bundled automatically.
Go, Rust, Java: Yes, install CLI manually or ensure copilot is in PATH. Go and Rust offer optional bundling.
How do I report issues?
Use the GitHub Issues page .
Conclusion: GitHub's Play for the Agent Economy
The Copilot SDK represents GitHub's strategic bet on the Agent Economy —a future where autonomous AI agents handle significant portions of software development workflows.
By open-sourcing production-grade orchestration, GitHub is:
Democratizing agentic AI - Any app can add Copilot agents
Creating ecosystem lock-in - Developers build on GitHub's platform
Competing with frameworks - Alternative to LangChain, LlamaIndex, etc.
Enabling BYOK - Reduces vendor lock-in, increases adoption
For developers, the value is clear:
✅ Zero boilerplate - No custom orchestration needed
✅ Production-tested - Millions of users trust Copilot CLI
✅ Multi-language - Build in Python, TS, Go, .NET, Rust, Java
✅ Flexible auth - GitHub OAuth or BYOK
Strategic implications:
If GitHub succeeds, the default way to build AI coding agents will be through the Copilot SDK—not by writing custom agent loops with LangChain or building from scratch.
This is GitHub's bid to own the agent infrastructure layer, just as they own the code hosting layer. For developers building AI-powered applications in 2026, the Copilot SDK is worth serious evaluation.
Resources
Official:
Cookbooks:
Community:
Weekly digest 3.5k readers
Catch up on AI
Curated AI updates on agents, skills, and MCP — delivered to your inbox. Unsubscribe anytime.