GitHub Copilot SDK
Overview
The GitHub Copilot SDK is a multi-platform agent runtime that embeds Copilot's agentic workflows into applications. It exposes the same engine behind Copilot CLI, enabling programmatic invocation without requiring custom orchestration development.
Status: Technical Preview (suitable for development and testing)
Supported Languages: TypeScript/Node.js, Python, Go, .NET
Primary Documentation
Language-Specific SDK Docs
CLI and Configuration Docs
Prerequisites
- GitHub Copilot Subscription - Pro, Pro+, Business, or Enterprise
- GitHub Copilot CLI - Installed and authenticated ()
- Runtime: Node.js 18+, Python 3.8+, Go 1.21+, or .NET 8.0+
Installation
| Language | Command |
|---|
| TypeScript/Node.js | npm install @github/copilot-sdk
|
| Python | pip install github-copilot-sdk
|
| Go | go get github.com/github/copilot-sdk/go
|
| .NET | dotnet add package GitHub.Copilot.SDK
|
Architecture
Application → SDK Client → JSON-RPC → Copilot CLI (server mode)
The SDK manages CLI lifecycle automatically. External server connections supported via
/
.
Quick Start (TypeScript)
typescript
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient();
await client.start();
const session = await client.createSession({ model: "gpt-5" });
// Register handler BEFORE send()
session.on((event) => {
if (event.type === "assistant.message") {
console.log(event.data.content);
}
});
await session.send({ prompt: "What is 2 + 2?" });
await session.destroy();
await client.stop();
Critical: Register event handlers
before calling
to capture all events.
For complete examples in all languages, see
references/working-examples.md
.
Core Concepts
Client
Main entry point. Manages CLI server lifecycle and session creation.
Session
Individual conversation context with message history.
Events
Key events during processing:
| Event | Purpose |
|---|
| Complete response |
| Streaming chunk |
| Ready for next prompt |
| Tool invocations |
For full event lifecycle and SessionEvent structure, see
references/event-system.md
.
Streaming
- (default) - Content arrives all at once
- - Content arrives incrementally via
Final
always fires regardless of streaming setting.
Available Models
See
Supported AI Models for full list.
| Provider | Model ID | Notes |
|---|
| OpenAI | , , | Included |
| OpenAI | , , | Premium |
| Anthropic | | Premium (CLI default) |
| Anthropic | | Premium (3× multiplier) |
| Google | | Premium |
Custom Tools
TypeScript (Zod):
typescript
const tool = defineTool("lookup_issue", {
description: "Fetch issue details",
parameters: z.object({ id: z.string() }),
handler: async ({ id }) => fetchIssue(id),
});
Python (Pydantic):
python
@define_tool(description="Fetch issue details")
async def lookup_issue(params: IssueParams) -> dict:
return fetch_issue(params.id)
For complete tool examples in all languages, see
references/working-examples.md
.
Language Conventions
| Concept | TypeScript | Python | Go | .NET |
|---|
| Create session | | | | |
| Delta content | | | | |
For full conventions table, see
references/event-system.md
.
CLI Configuration
- - General configuration
- - MCP server definitions
For custom agents and MCP setup, see
references/cli-agents-mcp.md
.
Troubleshooting
| Problem | Solution |
|---|
| Events fire but content empty | Use , not |
| Handler never fires | Register before |
| Python enum issues | Use |
| Go nil pointer | Check before dereferencing |
For debugging techniques, see
references/troubleshooting.md
.
Skill References
Detailed documentation in this skill:
references/working-examples.md
- Complete examples for all languages, custom tools
references/event-system.md
- Event lifecycle, SessionEvent structure, language conventions
references/troubleshooting.md
- Common issues, debugging techniques
references/cli-agents-mcp.md
- CLI configuration, custom agents, MCP server setup
Additional Resources