{"meta":{"title":"Remotesitzungen","intro":"Remote-Sitzungen ermöglichen Nutzern den Zugriff auf ihre Copilot-Sitzung über GitHub im Web und auf Mobilgeräten via Mission Control. Wenn diese Option aktiviert ist, verbindet das SDK jede Sitzung mit Mission Control, wodurch eine URL erzeugt wird, die als Link oder QR-Code freigegeben werden kann.","product":"GitHub Copilot","breadcrumbs":[{"href":"/de/copilot","title":"GitHub Copilot"},{"href":"/de/copilot/how-tos","title":"Vorgehensweisen"},{"href":"/de/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/de/copilot/how-tos/copilot-sdk/features","title":"Funktionen"},{"href":"/de/copilot/how-tos/copilot-sdk/features/remote-sessions","title":"Remotesitzungen"}],"documentType":"article"},"body":"# Remotesitzungen\n\nRemote-Sitzungen ermöglichen Nutzern den Zugriff auf ihre Copilot-Sitzung über GitHub im Web und auf Mobilgeräten via Mission Control. Wenn diese Option aktiviert ist, verbindet das SDK jede Sitzung mit Mission Control, wodurch eine URL erzeugt wird, die als Link oder QR-Code freigegeben werden kann.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\nWeitere Informationen zum Ausführen von Sitzungen auf von GitHub gehosteten Compute-Ressourcen finden Sie unter [Cloud-Sitzungen](/de/copilot/how-tos/copilot-sdk/features/cloud-sessions).\n\n## Voraussetzungen\n\n* Der Benutzer muss authentifiziert werden (GitHub Token oder angemeldeter Benutzer)\n* Das Arbeitsverzeichnis der Sitzung muss ein GitHub Repository sein.\n\n## Aktivieren von Remotesitzungen\n\n### Immer aktiv (auf Clientebene)\n\nLegen Sie `enableRemoteSessions: true` beim Erstellen des Clients fest. Jede Sitzung in einem GitHub Repository erhält automatisch eine Remote-URL.\n\n<!-- tabs:start -->\n\n#### Typescript\n\n<!-- docs-validate: skip -->\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient({ enableRemoteSessions: true });\nconst session = await client.createSession({\n  workingDirectory: \"/path/to/github-repo\",\n  onPermissionRequest: async () => ({ allowed: true }),\n});\n\nsession.on(\"session.info\", (event) => {\n  if (event.data.infoType === \"remote\") {\n    console.log(\"Remote URL:\", event.data.url);\n  }\n});\n```\n\n#### Python\n\n<!-- docs-validate: skip -->\n\n```python\nfrom copilot import CopilotClient\n\nclient = CopilotClient(enable_remote_sessions=True)\nsession = await client.create_session(\n    working_directory=\"/path/to/github-repo\",\n    on_permission_request=lambda req: {\"allowed\": True},\n)\n\ndef on_event(event):\n    if event.type == \"session.info\" and event.data.info_type == \"remote\":\n        print(f\"Remote URL: {event.data.url}\")\n\nsession.on(on_event)\n```\n\n#### Go\n\n<!-- docs-validate: skip -->\n\n```golang\nclient := copilot.NewClient(&copilot.ClientOptions{EnableRemoteSessions: true})\nsession, _ := client.CreateSession(ctx, &copilot.SessionConfig{\n    WorkingDirectory: \"/path/to/github-repo\",\n    OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {\n        return &rpc.PermissionDecisionApproveOnce{}, nil\n    },\n})\n\nsession.On(func(event copilot.SessionEvent) {\n    if event.Type == \"session.info\" {\n        // Check infoType and extract URL\n    }\n})\n```\n\n#### C\\#\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar client = new CopilotClient(new CopilotClientOptions { EnableRemoteSessions = true });\nvar session = await client.CreateSessionAsync(new SessionConfig\n{\n    WorkingDirectory = \"/path/to/github-repo\",\n    OnPermissionRequest = (req, inv) =>\n        Task.FromResult(PermissionDecision.ApproveOnce()),\n});\n\nsession.On((SessionEvent e) =>\n{\n    if (e is SessionInfoEvent info && info.Data.InfoType == \"remote\")\n    {\n        Console.WriteLine($\"Remote URL: {info.Data.Url}\");\n    }\n});\n```\n\n#### Rust\n\n<!-- docs-validate: skip -->\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions, SessionConfig};\nuse github_copilot_sdk::handler::PermissionResult;\n\nlet client = Client::start(\n    ClientOptions::new().with_enable_remote_sessions(true)\n).await?;\nlet session = client.create_session(\n    SessionConfig::new(\"/path/to/github-repo\")\n        .with_permission_handler(|_req, _inv| async {\n            Ok(PermissionResult::approve_once())\n        }),\n).await?;\n\nlet mut events = session.subscribe();\nwhile let Ok(event) = events.recv().await {\n    if event.event_type == \"session.info\" {\n        // Check info_type and extract URL\n    }\n}\n```\n\n<!-- tabs:end -->\n\n### Bei Bedarf (Umschalter pro Sitzung)\n\nVerwenden Sie `session.rpc.remote.enable()`, um den Remotezugriff während der Sitzung zu starten, und `session.rpc.remote.disable()`, um ihn zu beenden. Dies entspricht den CLI-Befehlen `/remote on` und `/remote off`.\n\n<!-- tabs:start -->\n\n#### Typescript\n\n<!-- docs-validate: skip -->\n\n```typescript\nconst result = await session.rpc.remote.enable();\nconsole.log(\"Remote URL:\", result.url);\n\n// Later: stop sharing\nawait session.rpc.remote.disable();\n```\n\n#### Python\n\n<!-- docs-validate: skip -->\n\n```python\nresult = await session.rpc.remote.enable()\nprint(f\"Remote URL: {result.url}\")\n\n# Later: stop sharing\nawait session.rpc.remote.disable()\n```\n\n#### Go\n\n<!-- docs-validate: skip -->\n\n```golang\nresult, err := session.RPC.Remote.Enable(ctx)\nif result.URL != nil {\n    fmt.Println(\"Remote URL:\", *result.URL)\n}\n\n// Later: stop sharing\nerr = session.RPC.Remote.Disable(ctx)\n```\n\n#### C\\#\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar result = await session.Rpc.Remote.EnableAsync();\nConsole.WriteLine($\"Remote URL: {result.Url}\");\n\n// Later: stop sharing\nawait session.Rpc.Remote.DisableAsync();\n```\n\n#### Rust\n\n<!-- docs-validate: skip -->\n\n```rust\nlet result = session.rpc().remote().enable().await?;\nif let Some(url) = &result.url {\n    println!(\"Remote URL: {url}\");\n}\n\n// Later: stop sharing\nsession.rpc().remote().disable().await?;\n```\n\n<!-- tabs:end -->\n\n## QR-Codegenerierung\n\nDie Remote-URL kann als QR-Code für einfachen mobilen Zugriff gerendert werden. Das SDK stellt die URL bereit: Verwenden Sie Ihre bevorzugte QR-Codebibliothek:\n\n* **TypeScript**: [qrcode](https://www.npmjs.com/package/qrcode)\n* **Python**: [qrcode](https://pypi.org/project/qrcode/)\n* **Go**: [go-qrcode](https://github.com/skip2/go-qrcode)\n* **C#**: [QRCoder](https://www.nuget.org/packages/QRCoder)\n* **Rost**: [qrcode](https://crates.io/crates/qrcode)\n\n## Hinweise\n\n* Die `enableRemoteSessions` Clientoption gilt, wenn das SDK die Laufzeit startet, entweder als untergeordneter Prozess oder als In-Process-Host. Es wird ignoriert, wenn eine Verbindung mit einer bereits ausgeführten Laufzeit hergestellt wird.\n* Wenn das Arbeitsverzeichnis kein GitHub-Repository ist, wird die Remote-Konfiguration stillschweigend übersprungen (Always-on-Modus) oder es wird ein Fehler zurückgegeben (On-demand-Modus).\n* Remotesitzungen erfordern eine Authentifizierung. Stellen Sie sicher, dass `gitHubToken` oder `useLoggedInUser` konfiguriert ist."}