Releases: github/copilot-sdk
v0.2.0
This is a big update with a broad round of API refinements, new capabilities, and cross-SDK consistency improvements that have shipped incrementally through preview releases since v0.1.32.
Highlights
Fine-grained system prompt customization
A new "customize" mode for systemMessage lets you surgically edit individual sections of the Copilot system prompt — without replacing the entire thing. Ten sections are configurable: identity, tone, tool_efficiency, environment_context, code_change_rules, guidelines, safety, tool_instructions, custom_instructions, and last_instructions.
Each section supports four static actions (replace, remove, append, prepend) and a transform callback that receives the current rendered content and returns modified text — useful for regex mutations, conditional edits, or logging what the prompt contains. (#816)
const session = await client.createSession({
onPermissionRequest: approveAll,
systemMessage: {
mode: "customize",
sections: {
identity: {
action: (current) => current.replace("GitHub Copilot", "Acme Assistant"),
},
tone: { action: "replace", content: "Be concise and professional." },
code_change_rules: { action: "remove" },
},
},
});var session = await client.CreateSessionAsync(new SessionConfig {
OnPermissionRequest = PermissionHandler.ApproveAll,
SystemMessage = new SystemMessageConfig {
Mode = SystemMessageMode.Customize,
Sections = new Dictionary<string, SectionOverride> {
["identity"] = new() {
Transform = current => Task.FromResult(current.Replace("GitHub Copilot", "Acme Assistant")),
},
["tone"] = new() { Action = SectionOverrideAction.Replace, Content = "Be concise and professional." },
["code_change_rules"] = new() { Action = SectionOverrideAction.Remove },
},
},
});OpenTelemetry support across all SDKs
All four SDK languages now support distributed tracing with the Copilot CLI. Set telemetry in your client options to configure an OTLP exporter; W3C trace context is automatically propagated on session.create, session.resume, and session.send, and restored in tool handlers so tool execution is linked to the originating trace. (#785)
const client = new CopilotClient({
telemetry: {
otlpEndpoint: "http://localhost:4318",
sourceName: "my-app",
},
});var client = new CopilotClient(new CopilotClientOptions {
Telemetry = new TelemetryConfig {
OtlpEndpoint = "http://localhost:4318",
SourceName = "my-app",
},
});- Python:
CopilotClient(SubprocessConfig(telemetry={"otlp_endpoint": "http://localhost:4318", "source_name": "my-app"})) - Go:
copilot.NewClient(&copilot.ClientOptions{Telemetry: &copilot.TelemetryConfig{OTLPEndpoint: "http://localhost:4318", SourceName: "my-app"}})
Blob attachments for inline binary data
A new blob attachment type lets you send images or other binary content directly to a session without writing to disk — useful when data is already in memory (screenshots, API responses, generated images). (#731)
await session.send({
prompt: "What's in this image?",
attachments: [{ type: "blob", data: base64Str, mimeType: "image/png" }],
});await session.SendAsync(new MessageOptions {
Prompt = "What's in this image?",
Attachments = [new UserMessageDataAttachmentsItemBlob { Data = base64Str, MimeType = "image/png" }],
});Pre-select a custom agent at session creation
You can now specify which custom agent should be active when a session starts, eliminating the need for a separate session.rpc.agent.select() call. (#722)
const session = await client.createSession({
customAgents: [
{ name: "researcher", prompt: "You are a research assistant." },
{ name: "editor", prompt: "You are a code editor." },
],
agent: "researcher",
onPermissionRequest: approveAll,
});var session = await client.CreateSessionAsync(new SessionConfig {
CustomAgents = [
new CustomAgentConfig { Name = "researcher", Prompt = "You are a research assistant." },
new CustomAgentConfig { Name = "editor", Prompt = "You are a code editor." },
],
Agent = "researcher",
OnPermissionRequest = PermissionHandler.ApproveAll,
});New features
skipPermissionon tool definitions — Tools can now be registered withskipPermission: trueto bypass the confirmation prompt for low-risk operations like read-only queries. Available in all four SDKs. (#808)reasoningEffortwhen switching models — All SDKs now accept an optionalreasoningEffortparameter insetModel()for models that support it. (#712)- Custom model listing for BYOK — Applications using bring-your-own-key providers can supply
onListModelsin client options to overrideclient.listModels()with their own model list. (#730) no-resultpermission outcome — Permission handlers can now return"no-result"so extensions can attach to sessions without actively answering permission requests. (#802)SessionConfig.onEventcatch-all — A newonEventhandler on session config is registered before the RPC is issued, guaranteeing that early events likesession.startare never dropped. (#664)- Node.js CJS compatibility — The Node.js SDK now ships both ESM and CJS builds, fixing crashes in VS Code extensions and other tools bundled with esbuild's
format: "cjs". No changes needed in consumer code. (#546) - Experimental API annotations — APIs marked experimental in the schema (agent, fleet, compaction groups) are now annotated in all four SDKs:
[Experimental]in C#,/** @experimental */in TypeScript, and comments in Python and Go. (#875) - System notifications and session log APIs — Updated to match the latest CLI runtime, adding
system.notificationevents and a session log RPC API. (#737)
Improvements
- [.NET, Go] Serialize event dispatch so handlers are invoked in registration order with no concurrent calls (#791)
- [Go] Detach CLI process lifespan from the context passed to
Client.Startso cancellation no longer kills the child process (#689) - [Go] Stop RPC client logging expected EOF errors (#609)
- [.NET] Emit XML doc comments from schema descriptions in generated RPC code (#724)
- [.NET] Use lazy property initialization in generated RPC classes (#725)
- [.NET] Add
DebuggerDisplayattribute toSessionEventfor easier debugging (#726) - [.NET] Optional RPC params are now represented as optional method params for forward-compatible generated code (#733)
- [.NET] Replace
Task.WhenAny+Task.Delaytimeout pattern with.WaitAsync(TimeSpan)(#805) - [.NET] Add NuGet package icon (#688)
- [Node] Don't resolve
cliPathwhencliUrlis already set (#787)
New RPC methods
We've added low-level RPC methods to control a lot more of what's going on in the session. These are emerging APIs that don't yet have friendly wrappers, and some may be flagged as experimental or subject to change.
session.rpc.skills.list(),.enable(name),.disable(name),.reload()session.rpc.mcp.list(),.enable(name),.disable(name),.reload()session.rpc.extensions.list(),.enable(name),.disable(name),.reload()session.rpc.plugins.list()session.rpc.ui.elicitation(...)— structured user inputsession.rpc.shell.exec(command),.kill(pid)session.log(message, level, ephemeral)
In an forthcoming update, we'll add friendlier wrappers for these.
Bug fixes
- [.NET] Fix
SessionEvent.ToJson()failing for events withJsonElement-backed payloads (assistant.message,tool.execution_start, etc.) (#868) - [.NET] Add fallback
TypeInfoResolverforStreamJsonRpc.RequestIdto fix NativeAOT compatibility (#783) - [.NET] Fix codegen for discriminated unions nested within other types (#736)
- [.NET] Handle unknown session event types gracefully instead of throwing (#881)
⚠️ Breaking changes
All SDKs
autoRestartremoved — TheautoRestartoption has been deprecated across all SDKs (it was never fully implemented). The property still exists but has no effect and will be removed in a future release. Remove any references toautoRestartfrom your client options. (#803)
Python
The Pyth...
v0.1.33-preview.4
Feature: fine-grained system prompt customization
A new "customize" mode for systemMessage lets you selectively override individual sections of the Copilot system prompt — without replacing the entire prompt. This sits between "append" (add to the end) and "replace" (replace everything). (#816)
Ten sections are configurable: identity, tone, tool_efficiency, environment_context, code_change_rules, guidelines, safety, tool_instructions, custom_instructions, and last_instructions.
Each section supports four static actions (replace, remove, append, prepend) and a transform action — a callback that receives the current rendered section content and returns the modified version, enabling regex mutations, logging, or conditional edits.
const session = await client.createSession({
systemMessage: {
mode: "customize",
sections: {
identity: {
// transform: read current content and return modified content
action: (current) => current.replace("GitHub Copilot", "Acme Assistant"),
},
tone: { action: "replace", content: "Be concise and professional." },
code_change_rules: { action: "remove" },
},
},
});var session = await client.CreateSessionAsync(new SessionOptions {
SystemMessage = new SystemMessageOptions {
Mode = SystemMessageMode.Customize,
Sections = new Dictionary(string, SectionOverride) {
["identity"] = new() {
Transform = current => current.Replace("GitHub Copilot", "Acme Assistant"),
},
["tone"] = new() { Action = "replace", Content = "Be concise and professional." },
["code_change_rules"] = new() { Action = "remove" },
},
},
});Generated by Release Changelog Generator
Generated by Release Changelog Generator
v0.1.33-preview.3
Feature: OpenTelemetry support across all SDKs
All four SDK languages now support distributed tracing with the Copilot CLI. Set telemetry in your client options to configure an OTLP exporter; W3C trace context is then propagated on session.create, session.resume, and session.send, and restored in tool handlers so tool execution is linked to the originating trace. (#785)
const client = new CopilotClient({
telemetry: {
otlpEndpoint: "(localhost/redacted)
sourceName: "my-app",
},
});var client = new CopilotClient(new CopilotClientOptions {
Telemetry = new TelemetryConfig {
OtlpEndpoint = "(localhost/redacted)
SourceName = "my-app",
},
});Feature: blob attachment type for inline base64 data
A new blob attachment type lets you send images or other binary content directly to a session without writing to disk first — useful when data is already in memory (screenshots, API responses, generated images). (#731)
await session.send("What's in this image?", {
attachments: [{ type: "blob", data: base64Str, mimeType: "image/png" }],
});await session.SendAsync("What's in this image?", new MessageOptions {
Attachments = [new BlobAttachment { Data = base64Str, MimeType = "image/png" }],
});Feature: Node.js CommonJS (CJS) compatibility
The Node.js SDK now ships both ESM and CJS builds, fixing crashes in VS Code extensions and other tools bundled with esbuild's format: "cjs". No changes needed in consumer code — Node automatically selects the right format. (#546)
Feature: reasoningEffort when switching models
All SDKs now accept an optional reasoningEffort parameter in setModel() for models that support it. (#712)
await session.setModel("claude-sonnet-4.6", { reasoningEffort: "high" });await session.SetModelAsync("claude-sonnet-4.6", reasoningEffort: "high");- Python:
await session.set_model("claude-sonnet-4.6", reasoning_effort="high") - Go:
session.SetModel(ctx, "claude-sonnet-4.6", &copilot.SetModelOptions{ReasoningEffort: "high"})
Feature: skipPermission flag on tool definitions
Tools can now be registered with skipPermission: true (or SkipPermission in .NET) to bypass the permission confirmation step for low-risk tools such as read-only queries. (#808)
session.defineTool("query_db", { skipPermission: true }, async (params) => {
// read-only, no permission prompt
});session.DefineTool("query_db", new ToolOptions { SkipPermission = true }, async (params) => {
// read-only, no permission prompt
});Feature: experimental API annotations
APIs marked experimental in the schema (agent, fleet, and compaction groups) are now annotated in all four SDK languages: [Experimental] in C#, /** @experimental */ in TypeScript, and comments in Python and Go. Experimental APIs will continue to evolve. (#875)
Other changes
- feature: [Python]
CopilotClientconstructor now accepts typed config objects instead of individual keyword arguments (#793) - feature: [Python] updated
CopilotSession.send()andsend_and_wait()signatures for cleaner API surface (#814) - feature: [Python] add typed overloads for
CopilotClient.on()event registration (#589) - improvement: [.NET, Go] serialize event dispatch so handlers are invoked in registration order with no concurrent calls (#791)
- improvement: [Go] detach CLI process lifespan from the context passed to
Client.Startso cancellation no longer kills the child process (#689) - improvement: [Go]
LogOptions.Ephemeralchanged fromboolto*boolfor proper three-state semantics; usecopilot.Bool(true)(#827) - improvement: [Go] stop RPC client logging expected EOF errors (#609)
- bugfix: [C#] fix
SessionEvent.ToJson()failing for events withJsonElement-backed payloads (assistant.message,tool.execution_start, etc.) (#868) - bugfix: [.NET] add fallback
TypeInfoResolverforStreamJsonRpc.RequestIdto fix NativeAOT compatibility (#783) - improvement: [.NET] replace
Task.WhenAny+Task.Delaytimeout pattern with.WaitAsync(TimeSpan)(#805) - improvement: remove
autoRestartoption across all SDKs (was never fully implemented; APIs are now marked obsolete and will be removed soon) (#803)
New contributors
@darthmolenmade their first contribution in #546@MackinnonBuckmade their first contribution in #731@PureWeenmade their first contribution in #783@stefansedichmade their first contribution in #784@MRayermannMSFTmade their first contribution in #808@xoofxmade their first contribution in #868@jamesmontemagnomade their first contribution in #879@edburnsmade their first contribution in #889
Generated by Release Changelog Generator
Generated by Release Changelog Generator
v0.1.33-preview.0
Feature: pre-select a custom agent at session creation
You can now specify which custom agent should be active when a session starts, without needing a separate session.rpc.agent.select() call. (#722)
const session = await client.createSession({
customAgents: [
{ name: "researcher", prompt: "You are a research assistant." },
{ name: "editor", prompt: "You are a code editor." },
],
agent: "researcher", // active agent at session start
onPermissionRequest: approveAll,
});var session = await client.CreateSessionAsync(new SessionConfig {
CustomAgents = [
new CustomAgentConfig { Name = "researcher", Prompt = "You are a research assistant." },
new CustomAgentConfig { Name = "editor", Prompt = "You are a code editor." },
],
Agent = "researcher", // active agent at session start
});Feature: custom model listing for BYOK
Applications using bring-your-own-key providers can now supply onListModels in client options to override client.listModels() with their own model list, instead of forwarding the call to the CLI. (#730)
const client = new CopilotClient({ onListModels: () => myProviderModels });var client = new CopilotClient(new CopilotClientOptions {
OnListModels = () => Task.FromResult(myProviderModels)
});- Python:
on_list_models=lambda: my_provider_models - Go:
OnListModels: func(ctx context.Context) ([]copilot.ModelInfo, error) { return myModels, nil }
Feature: new events and APIs (system notifications, session log, extension support)
Updated to match the latest CLI runtime, adding: system.notification events, a session log RPC API, reasoningEffort changes after model switch, alreadyInUse flag on sessions, and the groundwork for extension-based integrations. (#737)
Other changes
- feature: add
no-resultpermission outcome so extensions can attach to sessions without actively answering permission requests (#802) - bugfix: fix race condition where events emitted during session creation (e.g.
session.start) could be dropped; also addsOnEventcatch-all handler toSessionConfig(#664) - improvement: [C#] optional RPC params are now represented as optional C# method params for forward-compatible generated code (#733)
- bugfix: [C#] fix codegen for discriminated unions nested within other types (#736)
- improvement: [C#] emit XML doc comments from schema descriptions in generated RPC code (#724)
- improvement: [C#] use lazy property initialization in generated RPC classes (#725)
- improvement: [C#] add
DebuggerDisplayattribute toSessionEventfor easier debugging (#726) - improvement: [.NET] add NuGet package icon (#688)
- bugfix: [Node] don't resolve
cliPathwhencliUrlis already set (#787)
New contributors
@sergiou87made their first contribution in #787@kirankashyapmade their first contribution in #740
Generated by Release Changelog Generator
Generated by Release Changelog Generator
v0.1.32
Feature: backward compatibility with v2 CLI servers
SDK applications written against the v3 API now also work when connected to a v2 CLI server, with no code changes required.
Generated by Release Changelog Generator
Generated by Release Changelog Generator
v0.1.31
Feature: strongly-typed PermissionRequestResultKind for .NET and Go
Rather than comparing result.Kind against undiscoverable magic strings like "approved" or "denied-interactively-by-user", .NET and Go now provide typed constants. Node and Python already had typed unions for this; this brings full parity. (#631)
session.OnPermissionCompleted += (e) => {
if (e.Result.Kind == PermissionRequestResultKind.Approved) { /* ... */ }
if (e.Result.Kind == PermissionRequestResultKind.DeniedInteractivelyByUser) { /* ... */ }
};// Go: PermissionKindApproved, PermissionKindDeniedByRules,
// PermissionKindDeniedCouldNotRequestFromUser, PermissionKindDeniedInteractivelyByUser
if result.Kind == copilot.PermissionKindApproved { /* ... */ }Other changes
- feature: [Python] [Go] add
get_last_session_id()/GetLastSessionID()for SDK-wide parity (was already available in Node and .NET) (#671) - improvement: [Python] add
timeoutparameter to generated RPC methods, allowing callers to override the default 30s timeout for long-running operations (#681) - bugfix: [Go]
PermissionRequestfields are now properly typed (ToolName,Diff,Path, etc.) instead of a genericExtra map[string]anycatch-all (#685)
Generated by Release Changelog Generator
v0.1.30
Feature: support overriding built-in tools
Applications can now override built-in tools such as grep, edit_file, or read_file. To do this, register a custom tool with the same name and set the override flag. Without the flag, the runtime will return an error if the name clashes with a built-in. (#636)
import { defineTool } from "`@github/copilot-sdk`";
const session = await client.createSession({
tools: [defineTool("grep", {
overridesBuiltInTool: true,
handler: async (params) => `CUSTOM_GREP_RESULT: \$\{params.query}`,
})],
onPermissionRequest: approveAll,
});var grep = AIFunctionFactory.Create(
([Description("Search query")] string query) => $"CUSTOM_GREP_RESULT: {query}",
"grep",
"Custom grep implementation",
new AIFunctionFactoryOptions
{
AdditionalProperties = new ReadOnlyDictionary(string, object?)(
new Dictionary(string, object?) { ["is_override"] = true })
});Feature: simpler API for changing model mid-session
While session.rpc.model.switchTo() already worked, there is now a convenience method directly on the session object. (#621)
- TypeScript:
await session.setModel("gpt-4.1") - C#:
await session.SetModelAsync("gpt-4.1") - Python:
await session.set_model("gpt-4.1") - Go:
err := session.SetModel(ctx, "gpt-4.1")
Other changes
- improvement: [C#] use event delegate for thread-safe, insertion-ordered event handler dispatch (#624)
- improvement: [C#] deduplicate
OnDisposeCalland improve implementation (#626) - improvement: [C#] remove unnecessary
SemaphoreSlimlocks for handler fields (#625) - bugfix: [Python] correct
PermissionHandler.approve_alltype annotations (#618)
New contributors
@giulio-leonemade their first contribution in #618
Generated by Release Changelog Generator
Generated by Release Changelog Generator
v0.1.29
v0.1.29 (2026-02-27)
Changes
- bugfix: [Python]
CopilotClient.stop()now raises anExceptionGroupinstead of silently returning a list of exceptions (#603)
Generated by Release Changelog Generator
v0.1.28
What's Changed
- docs: Add Azure Managed Identity guide for BYOK by @tonybaloney in #498
- Breaking change: deny all permissions by default by @SteveSandersonMS in #509
- feat: add clientName to SessionConfig across all SDKs by @devm33 in #510
- Add E2E scenario tests/examples for all SDK languages by @patniko in #512
- python: migrate to PEP 639 license-files by @brettcannon in #456
- fix(python): clean up setuptools usage and drop redundant/unnecessary lock files by @brettcannon in #449
- Bump manylinux tag to glibc 2.28 for Node 24.11 by @brettcannon in #428
- Fix timeout issue when downloading the exe file by @MikeAlhayek in #533
- fix: replace execSync with execFileSync in docs validation by @krukow in #505
- Document Microsoft Foundry Local setup and usage by @leestott in #461
- fix: correct 'GithubToken' casing to 'GitHubToken' in .NET and Go by @SteveSandersonMS in #541
- chore(nodejs): bump @github/copilot from ^0.0.411 to ^0.0.414 by @SteveSandersonMS in #542
- [dotnet] Fix SendAndWaitAsync to throw OperationCanceledException on external cancellation by @Copilot in #543
- Require permission handler on session creation by @SteveSandersonMS in #554
- docs: fix inaccuracies in skills.md by @patniko in #556
- Add SDK support for agent selection and session compaction APIs by @SteveSandersonMS in #544
- Add permission checks for SDK-registered custom tools by @SteveSandersonMS in #555
- Bump Microsoft.NET.Test.Sdk from 18.0.1 to 18.3.0 by @dependabot[bot] in #579
- Consolidate schedule for Dependabot updates by @SteveSandersonMS in #582
- Python: remove hardcoded 30s default timeout from JsonRpcClient.request() by @SteveSandersonMS in #592
- docs(go): add missing context package in sample code by @feici02 in #566
- Fix Go client data races by @chlowell in #586
- chore(python): Bump the oldest supported Python version to 3.11 by @brettcannon in #561
- chore(deps-dev): bump minimatch from 3.1.2 to 3.1.5 in /nodejs in the npm_and_yarn group across 1 directory by @dependabot[bot] in #593
- chore(deps-dev): bump hono from 4.11.9 to 4.12.3 in /test/harness in the npm_and_yarn group across 1 directory by @dependabot[bot] in #595
- chore(deps): bump minimatch from 10.1.2 to 10.2.4 in /scripts/docs-validation in the npm_and_yarn group across 1 directory by @dependabot[bot] in #594
- More e2e nodejs tests by @friggeri in #466
- fix(python): use 'is not None' check for excluded_tools in session methods by @patniko in #596
- docs: Add OpenTelemetry GenAI semantic conventions setup guide by @tonybaloney in #529
- docs: fix OpenTelemetry guide to use correct SDK APIs by @patniko in #597
- Add hidden block directive to validate partial code snippets in docs by @patniko in #600
- fix(python): restore package discovery for platform wheel builds by @SteveSandersonMS in #601
New Contributors
- @tonybaloney made their first contribution in #498
- @brettcannon made their first contribution in #456
- @MikeAlhayek made their first contribution in #533
- @krukow made their first contribution in #505
- @leestott made their first contribution in #461
- @feici02 made their first contribution in #566
- @chlowell made their first contribution in #586
Full Changelog: v0.1.25...v0.1.28
v0.1.26-preview.0
What's Changed
- Add Go submodule version tags for reproducible builds by @Copilot in #33
- Correct backtick code block formatting by @leereilly in #43
- Add minor updates to python sdk by @sugatoray in #45
- Add tests to verify forward compatibility for unknown session event types by @Copilot in #35
- fix(go): ensure reliable session event handler unsubscription by @nathfavour in #24
- Fix Go e2e tests not running in CI by @SteveSandersonMS in #47
- Fix JSON-RPC pipe reads >64KB by handling short reads by @Copilot in #31
- Update @github/copilot to 0.0.387 by @devm33 in #54
- Fix escape issue in client.ts by @doggy8088 in #56
- Allow issue triage workflow to run for all users by @Copilot in #32
- Improve abort tests across all SDKs; add Go unsubscribe tests by @SteveSandersonMS in #48
- Add config dir to session options by @devm33 in #15
- Update some snapshots; remove redundant ones by @SteveSandersonMS in #52
- feat: add skillDirectories and disabledSkills to all SDKs by @friggeri in #57
- Fix and unskip some skills E2E tests by @SteveSandersonMS in #69
- Use STJ's polymorphism support instead of custom converter by @stephentoub in #70
- Update CONTRIBUTING.md to clarify contribution types by @SteveSandersonMS in #68
- Copilot SDK Cookbook by @aaronpowell in #80
- Add getting started tutorial by @burkeholland in #63
- Update README title and add demos folder by @ashleywolf in #75
- Move docs to correct folder by @patniko in #82
- Move examples and demos docs by @patniko in #83
- Moving files into the correct locations by @aaronpowell in #84
- Update README structure and add samples folder by @ashleywolf in #85
- feat: add status, auth, and models metadata APIs to all SDKs by @friggeri in #77
- Adding FAQ section to the README by @aaronpowell in #86
- Make the .NET library NativeAOT compatible by @stephentoub in #81
- Fix code formatting by @SteveSandersonMS in #90
- fix: correct broken links in cookbook documentation by @GeekTrainer in #93
- Fix .NET SDK prerequisites in CONTRIBUTING.md by @Copilot in #87
- fix: remove temporary README.md replacement step from publish workflow by @patniko in #108
- Modify npm init command for module type by @sinedied in #132
- Document external CLI server connection by @Copilot in #103
- Add agentic workflow for cross-SDK consistency enforcement by @Copilot in #95
- Bump Python minimum version to 3.9+ by @Copilot in #151
- Add missing list_sessions() method to Python SDK client by @Copilot in #153
- Re-run uv lock and fix Python tests by @friggeri in #157
- Document image attachment support in SDK READMEs by @Copilot in #150
- Bump githubnext/gh-aw from 0.36.0 to 0.37.1 by @dependabot[bot] in #66
- Adding .NET to the devcontainer by @aaronpowell in #88
- Use Pydantic for weather parameters in get_weather by @adityagesh in #120
- Add uv sync as alternative installation option by @harupy in #146
- feat: Infinite Sessions by @jmoseley in #76
- Fix BYOK FAQ: clarify it refers to API keys, not encryption keys by @mohamedaminehamdi in #174
- Include community SDKs in README by @brunoborges in #178
- docs: add MCP server usage documentation by @AnassKartit in #98
- Add download badges to README by @Copilot in #156
- docs: add .NET example for interactive weather assistant by @vicperdana in #119
- chore: Update generated events to match schemas. by @jmoseley in #208
- Add ListSessions and DeleteSession methods to Go SDK by @Copilot in #213
- Remove samples directory, link to awesome-copilot resources by @Copilot in #210
- Hide StreamJsonRpc implementation detail behind IOException by @Copilot in #202
- Simplify Node.js example by @SteveSandersonMS in #221
- Bump actions/download-artifact from 6.0.0 to 7.0.0 by @dependabot[bot] in #65
- Bump actions/checkout from 5.0.1 to 6.0.1 by @dependabot[bot] in #67
- Fixes #227 - Premium requests consumed while running py dev test by @vivganes in #228
- Bump githubnext/gh-aw from 0.37.13 to 0.37.31 by @dependabot[bot] in #240
- Consistently use Dataclasses in Python SDK by @Copilot in #216
- Fix .NET CLI server mode code samples - add missing UseStdio = false by @Copilot in #232
- Configure Copilot agent environment to match devcontainer by @Copilot in #236
- Add provider info to docs by @patniko in #257
- Fix formatting and update README structure by @doggy8088 in #258
- Update docs to reflect you need version for Azure Foundry by @patniko in #260
- Optimize CI: Split into separate workflows with native path filtering by @Copilot in #259
- Add githubToken and useLoggedInUser options to all SDK clients by @friggeri in #237
- feat: add hooks and user input handlers to all SDKs with e2e tests by @friggeri in #269
- Add lsp config for dotnet. by @jmoseley in #234
- docs: add hooks, user input, and auth options to SDK READMEs by @friggeri in #270
- Add paths-ignore filters to SDK test workflows by @Copilot in #271
- feat(nodejs): add typed event filtering to session.on() by @friggeri in #272
- Add dependabot monitoring for npm, pip, gomod, and nuget by @Copilot in #273
- Set default vscode formatter for Go by @qmuntal in #295
- [go] Honor ClientOptions.UseStdio = false by @qmuntal in #296
- [go] Honor empty ClientOptions.Env by @qmuntal in #297
- Bump githubnext/gh-aw from 0.37.31 to 0.38.2 by @dependabot[bot] in #274
- Bump @types/node from 25.0.3 to 25.1.0 in /test/harness by @dependabot[bot] in #275
- Bump openai from 6.15.0 to 6.17.0 in /test/harness by @dependabot[bot] in #276
- Consolidate path filters in SDK test workflows per GitHub Actions spec by @Copilot in #303
- feat: add reasoning_effort support to all SDK clients by @friggeri in #302
- Cache list_models across all SDK languages to prevent rate limiting under concurrency by @Copilot in #300
- [go] rewrite interface{} to any by @qmuntal in #298
- Removing cookbook from sdk repo by @aaronpowell in #316
- Cleanup Go Client implementation by @qmuntal in #321
- Fix ask-user test snapshots by @qmuntal in #319
- Add a new line after model generating final response when tool call completes by @moonshade9 in #307
- Replace Literal model type with string in Python SessionConfig by @Copilot in #325
- Clarify FAQ: BYOK works without GitHub Copilot subscription by @lossyrob in #336
- [go] make e2e and jsonrpc internal packages by @qmuntal in #339
- Fail CI if snaps...