Примечание.
Второй пилот SDK в настоящее время находится в Technical Preview. Функциональность и доступность могут меняться.
Отправляйте Второй пилот CLI их в составе приложения, чтобы пользователи могли начать без дополнительной настройки.
**Лучше всего для:** Десктопные приложения, отдельные инструменты, приложения Electron и распространяемые утилиты CLI.
Принцип работы
Вместо того чтобы полагаться на глобально установленный CLI, вы включаете бинарный файл CLI в свой пакет приложений. SDK указывает на вашу комплектную копию через эту cliPath опцию. Ключевые характеристики:
- Бинарный файл CLI поставляется вместе с вашим приложением — отдельная установка не требуется.
- Вы контролируете точную версию CLI, которую использует ваше приложение.
- Пользователи аутентифицируются через ваше приложение, переменные среды или BYOK.
- Сессии управляются каждым пользователем на их машине.
Setup
Шаг 1: Включите CLI в свой проект
CLI распространяется как часть @github/copilot пакета npm.
npm install @github/copilot
Шаг 2: Направьте SDK на ваш комплектный CLI
Node.js / TypeScript
import { CopilotClient } from "@github/copilot-sdk";
import path from "path";
const client = new CopilotClient({
// Point to the CLI binary in your app bundle
cliPath: path.join(__dirname, "vendor", "copilot"),
});
const session = await client.createSession({ model: "gpt-4.1" });
const response = await session.sendAndWait({ prompt: "Hello!" });
console.log(response?.data.content);
await client.stop();
Python
from copilot import CopilotClient, PermissionHandler
from pathlib import Path
client = CopilotClient({
"cli_path": str(Path(__file__).parent / "vendor" / "copilot"),
})
await client.start()
session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model="gpt-4.1")
response = await session.send_and_wait({"prompt": "Hello!"})
print(response.data.content)
await client.stop()
Вперед
client := copilot.NewClient(&copilot.ClientOptions{
CLIPath: "./vendor/copilot",
})
if err := client.Start(ctx); err != nil {
log.Fatal(err)
}
defer client.Stop()
session, _ := client.CreateSession(ctx, &copilot.SessionConfig{Model: "gpt-4.1"})
response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: "Hello!"})
fmt.Println(*response.Data.Content)
.NET
var client = new CopilotClient(new CopilotClientOptions
{
CliPath = Path.Combine(AppContext.BaseDirectory, "vendor", "copilot"),
});
await using var session = await client.CreateSessionAsync(
new SessionConfig { Model = "gpt-4.1" });
var response = await session.SendAndWaitAsync(
new MessageOptions { Prompt = "Hello!" });
Console.WriteLine(response?.Data.Content);
Стратегии аутентификации
При объединении CLI нужно решить, как ваши пользователи будут аутентифицироваться. Следующая диаграмма иллюстрирует распространённые закономерности.

Вариант A: Авторизованные учетные данные пользователя (самое простое)
Пользователь входит в CLI один раз, и ваше приложение, входящее в комплект, использует эти учетные данные. Лишний код не требуется — это поведение по умолчанию.
const client = new CopilotClient({
cliPath: path.join(__dirname, "vendor", "copilot"),
// Default: uses signed-in user credentials
});
Вариант B: токен через переменную среды
Установите токен программно или попросите пользователей установить его перед запуском приложения:
const client = new CopilotClient({
cliPath: path.join(__dirname, "vendor", "copilot"),
env: {
COPILOT_GITHUB_TOKEN: getUserToken(),
},
});
Замените getUserToken() его логикой в вашем приложении, которая забирает токен OAuth GitHub пользователя.
Вариант C: BYOK (аутентификация не GitHub требуется)
Если вы сами управляете ключами провайдера модели, пользователям не нужны GitHub аккаунты:
const client = new CopilotClient({
cliPath: path.join(__dirname, "vendor", "copilot"),
});
const session = await client.createSession({
model: "gpt-4.1",
provider: {
type: "openai",
baseUrl: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY,
},
});
Управление сеансами
В комплектных приложениях обычно нужны именованные сессии, чтобы пользователи могли возобновлять разговоры:
const client = new CopilotClient({
cliPath: path.join(__dirname, "vendor", "copilot"),
});
// Create a session tied to the user's project
const sessionId = `project-${projectName}`;
const session = await client.createSession({
sessionId,
model: "gpt-4.1",
});
// Resume the session in a later run
const resumed = await client.resumeSession(sessionId);
Состояние сессии хранится по ~/.copilot/session-state/SESSION-ID/адресу , где SESSION-ID находится указанный вами идентификатор сессии.
Паттерны распределения
Десктопное приложение (Electron, Tauri)
Включите бинарный файл CLI в каталог ресурсов вашего приложения:
import { app } from "electron";
import path from "path";
const cliPath = path.join(
app.isPackaged ? process.resourcesPath : __dirname,
"copilot"
);
const client = new CopilotClient({ cliPath });
Инструмент CLI
Для распределяемых инструментов CLI определите путь относительно вашего бинарного файла:
import { fileURLToPath } from "url";
import path from "path";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const cliPath = path.join(__dirname, "..", "vendor", "copilot");
const client = new CopilotClient({ cliPath });
Платформенно-специфичные бинарные файлы
При распространении для нескольких платформ указывайте правильный бинар для каждой цели:
my-app/
├── vendor/
│ ├── copilot-darwin-arm64 # macOS Apple Silicon
│ ├── copilot-darwin-x64 # macOS Intel
│ ├── copilot-linux-x64 # Linux x64
│ └── copilot-win-x64.exe # Windows x64
└── src/
└── index.ts
import os from "os";
function getCLIPath(): string {
const platform = process.platform; // "darwin", "linux", "win32"
const arch = os.arch(); // "arm64", "x64"
const ext = platform === "win32" ? ".exe" : "";
const name = `copilot-${platform}-${arch}${ext}`;
return path.join(__dirname, "vendor", name);
}
const client = new CopilotClient({
cliPath: getCLIPath(),
});
Ограничения
| Ограничение | Сведения |
|---|
**Размер пучка** | Бинарный файл CLI увеличивает размер дистрибутива вашего приложения. |
| Обновления | Вы управляете обновлениями версий CLI в цикле релиза. | | Построение платформ | Для каждой ОС/архитектуры нужны отдельные бинарные файлы. | | Одиночный пользователь | Каждый комплектный экземпляр CLI обслуживает одного пользователя. |
Дальнейшие действия
- Для пользователей, входящих с GitHub учётными записями, см. Использование GitHub OAuth с Copilot SDK.
- Чтобы запустить работу на сервере вместо пользовательских машин, см. Настройка Copilot SDK для бэкенд-сервисов.
- Для установки и вашего первого сообщения смотрите Начало работы с Copilot SDK.