Skip to main content

Lokale CLI-Einrichtung

Verwenden Sie eine bestimmte CLI-Binärdatei anstelle der gebündelten CLI des SDK. Dies ist eine erweiterte Option– Sie geben den CLI-Pfad explizit an, und Sie sind dafür verantwortlich, die Versionskompatibilität mit dem SDK sicherzustellen.

Verwenden Sie dies, wenn: Sie eine bestimmte CLI-Version festlegen müssen oder mit dem Go SDK arbeiten (das keine CLI enthält).

So funktioniert es

Standardmäßig enthalten die Node.js, Python und .NET SDKs ihre eigene CLI-Abhängigkeit (siehe Standardsetup (gebündelte CLI)). Wenn Sie dies außer Kraft setzen müssen , z. B. um eine vom System installierte CLI zu verwenden, können Sie die Connection Option verwenden.

Diagramm: Flussdiagramm mit dem beschriebenen Prozess.

Wichtige Merkmale:

  • Sie geben explizit den binären CLI-Pfad an.
  • Sie sind für die CLI-Versionskompatibilität mit dem SDK verantwortlich.
  • Die Authentifizierung verwendet die Anmeldeinformationen des angemeldeten Benutzers aus dem System-Schlüsselbund (oder Umgebungsvariablen)
  • Die Kommunikation erfolgt über stdio

Konfiguration

Verwenden einer lokalen CLI-Binärdatei

TypeScript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
    cliPath: "/usr/local/bin/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
from copilot.generated.session_events import AssistantMessageData
from copilot.session import PermissionHandler

client = CopilotClient({
    "cli_path": "/usr/local/bin/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("Hello!")
if response:
    match response.data:
        case AssistantMessageData() as data:
            print(data.content)

await client.stop()
Go

Hinweis

Das Go SDK bündelt keine CLI, daher müssen Sie immer bereitstellen Connection.

package main

import (
    "context"
    "fmt"
    "log"
    copilot "github.com/github/copilot-sdk/go"
)

func main() {
    ctx := context.Background()

    client := copilot.NewClient(&copilot.ClientOptions{
        Connection: copilot.StdioConnection{Path: "/usr/local/bin/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!"})
    if response != nil {
        if d, ok := response.Data.(*copilot.AssistantMessageData); ok {
            fmt.Println(d.Content)
        }
    }
}
client := copilot.NewClient(&copilot.ClientOptions{
    Connection: copilot.StdioConnection{Path: "/usr/local/bin/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!"})
if response != nil {
    if d, ok := response.Data.(*copilot.AssistantMessageData); ok {
        fmt.Println(d.Content)
    }
}
.NET
var client = new CopilotClient(new CopilotClientOptions
{
    Connection = RuntimeConnection.ForStdio(path: "/usr/local/bin/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);

Zusätzliche Optionen

const client = new CopilotClient({
    cliPath: "/usr/local/bin/copilot",

    // Set log level for debugging
    logLevel: "debug",

    // Pass extra CLI arguments
    cliArgs: ["--log-dir=/tmp/copilot-logs"],

    // Set working directory
    cwd: "/path/to/project",
});

Verwenden von Umgebungsvariablen

Statt der Schlüsselkette können Sie sich über Umgebungsvariablen authentifizieren. Dies ist nützlich für CI oder wenn Sie keine interaktive Anmeldung wünschen.

# Set one of these (in priority order):
export COPILOT_GITHUB_TOKEN="gho_xxxx"   # Recommended
export GH_TOKEN="gho_xxxx"               # GitHub CLI compatible
export GITHUB_TOKEN="gho_xxxx"           # GitHub Actions compatible

Das SDK nimmt diese automatisch auf – es sind keine Codeänderungen erforderlich.

Verwalten von Sitzungen

Sitzungen sind standardmäßig temporär. Um reaktivierbare Sitzungen zu erstellen, geben Sie Ihre eigene Sitzungs-ID an:

// Create a named session
const session = await client.createSession({
    sessionId: "my-project-analysis",
    model: "gpt-4.1",
});

// Later, resume it
const resumed = await client.resumeSession("my-project-analysis");

Der Sitzungszustand wird lokal unter ~/.copilot/session-state/{sessionId}/ gespeichert.

Einschränkungen

EinschränkungEinzelheiten
VersionskompatibilitätSie müssen sicherstellen, dass Ihre CLI-Version mit dem SDK kompatibel ist.
Einzelner BenutzerAnmeldeinformationen sind an die Person gebunden, die sich bei der CLI angemeldet hat.
Nur lokalDie CLI wird auf demselben Computer wie Ihre App ausgeführt.
Kein MehrinstanzenmandantMehrere Benutzer können nicht aus einer CLI-Instanz bedient werden

Nächste Schritte