{"meta":{"title":"Configuración de la CLI local","intro":"Utilice un binario específico de la CLI en lugar de la gestión automática de la CLI por parte del SDK. Esta es una opción avanzada: proporciona la ruta de acceso de la CLI explícitamente y es responsable de garantizar la compatibilidad de versiones con el SDK.","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/how-tos","title":"Procedimientos"},{"href":"/es/copilot/how-tos/copilot-sdk","title":"SDK de Copilot"},{"href":"/es/copilot/how-tos/copilot-sdk/setup","title":"Configuración del SDK de Copilot"},{"href":"/es/copilot/how-tos/copilot-sdk/setup/local-cli","title":"CLI local"}],"documentType":"article"},"body":"# Configuración de la CLI local\n\nUtilice un binario específico de la CLI en lugar de la gestión automática de la CLI por parte del SDK. Esta es una opción avanzada: proporciona la ruta de acceso de la CLI explícitamente y es responsable de garantizar la compatibilidad de versiones con el SDK.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n**Úselo cuando:** necesite fijar una versión específica de la CLI, o trabajar con el SDK de Go (que no incluye una CLI).\n\n## Cómo funciona\n\nDe forma predeterminada, los SDK de Node.js, Python y .NET incluyen su propia dependencia de la CLI (consulte [Configuración predeterminada (CLI agrupada)](/es/copilot/how-tos/copilot-sdk/setup/bundled-cli)). Si necesita invalidar esto (por ejemplo, para usar una CLI instalada por el sistema), puede usar la `Connection` opción .\n\n![Diagrama: Diagrama de flujo que muestra el proceso descrito.](/assets/images/help/copilot/copilot-sdk/setup-local-cli-diagram-0.png)\n\n**Características principales:**\n\n* Debe indicar explícitamente la ruta del archivo binario de la CLI\n* Es responsable de la compatibilidad de la versión de la CLI con el SDK.\n* La autenticación usa las credenciales del usuario que ha iniciado sesión desde la cadena de claves del sistema (o env vars)\n* La comunicación se produce a través de stdio\n\n## Configuración\n\n### Uso de un binario local de CLI\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient({\n    cliPath: \"/usr/local/bin/copilot\",\n});\n\nconst session = await client.createSession({ model: \"gpt-4.1\" });\nconst response = await session.sendAndWait({ prompt: \"Hello!\" });\nconsole.log(response?.data.content);\n\nawait client.stop();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient\nfrom copilot.session_events import AssistantMessageData\nfrom copilot.session import PermissionHandler\n\nclient = CopilotClient({\n    \"cli_path\": \"/usr/local/bin/copilot\",\n})\nawait client.start()\n\nsession = await client.create_session(on_permission_request=PermissionHandler.approve_all, model=\"gpt-4.1\")\nresponse = await session.send_and_wait(\"Hello!\")\nif response:\n    match response.data:\n        case AssistantMessageData() as data:\n            print(data.content)\n\nawait client.stop()\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n> \\[!NOTE]\n> El SDK de Go no agrupa una CLI, por lo que siempre debe proporcionar `Connection`.\n\n```golang\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    client := copilot.NewClient(&copilot.ClientOptions{\n        Connection: copilot.StdioConnection{Path: \"/usr/local/bin/copilot\"},\n    })\n    if err := client.Start(ctx); err != nil {\n        log.Fatal(err)\n    }\n    defer client.Stop()\n\n    session, _ := client.CreateSession(ctx, &copilot.SessionConfig{Model: \"gpt-4.1\"})\n    response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: \"Hello!\"})\n    if response != nil {\n        if d, ok := response.Data.(*copilot.AssistantMessageData); ok {\n            fmt.Println(d.Content)\n        }\n    }\n}\n```\n\n```golang\nclient := copilot.NewClient(&copilot.ClientOptions{\n    Connection: copilot.StdioConnection{Path: \"/usr/local/bin/copilot\"},\n})\nif err := client.Start(ctx); err != nil {\n    log.Fatal(err)\n}\ndefer client.Stop()\n\nsession, _ := client.CreateSession(ctx, &copilot.SessionConfig{Model: \"gpt-4.1\"})\nresponse, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: \"Hello!\"})\nif response != nil {\n    if d, ok := response.Data.(*copilot.AssistantMessageData); ok {\n        fmt.Println(d.Content)\n    }\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nvar client = new CopilotClient(new CopilotClientOptions\n{\n    Connection = RuntimeConnection.ForStdio(path: \"/usr/local/bin/copilot\"),\n});\n\nawait using var session = await client.CreateSessionAsync(\n    new SessionConfig { Model = \"gpt-4.1\" });\n\nvar response = await session.SendAndWaitAsync(\n    new MessageOptions { Prompt = \"Hello!\" });\nConsole.WriteLine(response?.Data.Content);\n```\n\n</div>\n\n</div>\n\n## Opciones adicionales\n\n```typescript\nconst client = new CopilotClient({\n    cliPath: \"/usr/local/bin/copilot\",\n\n    // Set log level for debugging\n    logLevel: \"debug\",\n\n    // Pass extra CLI arguments\n    cliArgs: [\"--log-dir=/tmp/copilot-logs\"],\n\n    // Set working directory\n    cwd: \"/path/to/project\",\n});\n```\n\n## Uso de variables de entorno\n\nEn lugar de la cadena de claves, puede autenticarse a través de variables de entorno. Esto es útil para CI o cuando no desea el inicio de sesión interactivo.\n\n```bash\n# Set one of these (in priority order):\nexport COPILOT_GITHUB_TOKEN=\"gho_xxxx\"   # Recommended\nexport GH_TOKEN=\"gho_xxxx\"               # GitHub CLI compatible\nexport GITHUB_TOKEN=\"gho_xxxx\"           # GitHub Actions compatible\n```\n\nEl SDK los recoge automáticamente, sin necesidad de cambios de código.\n\n## Administración de sesiones\n\nLas sesiones se configuran de forma predeterminada como efímeras. Para crear sesiones reanudables, proporcione su propio identificador de sesión:\n\n```typescript\n// Create a named session\nconst session = await client.createSession({\n    sessionId: \"my-project-analysis\",\n    model: \"gpt-4.1\",\n});\n\n// Later, resume it\nconst resumed = await client.resumeSession(\"my-project-analysis\");\n```\n\nEl estado de sesión se almacena localmente en `~/.copilot/session-state/{sessionId}/`.\n\n## Limitaciones\n\n| Limitación                      | Detalles                                                                        |\n| ------------------------------- | ------------------------------------------------------------------------------- |\n| **Compatibilidad de versiones** | Debe asegurarse de que la versión de la CLI sea compatible con el SDK.          |\n| **Usuario único**               | Las credenciales están vinculadas a la persona que ha iniciado sesión en la CLI |\n| **Solo local**                  | La CLI se ejecuta en la misma máquina que la aplicación.                        |\n| **Sin multiinquilino**          | No se pueden atender varios usuarios desde una instancia de la CLI              |\n\n## Pasos siguientes\n\n* **[Configuración predeterminada (CLI agrupada)](/es/copilot/how-tos/copilot-sdk/setup/bundled-cli)**: use la CLI integrada del SDK (recomendado para la mayoría de los casos de uso)\n* **[Crea tu primera aplicación con tecnología Copilot](/es/copilot/how-tos/copilot-sdk/getting-started)**: Creación de una aplicación interactiva completa\n* **[Autenticación](/es/copilot/how-tos/copilot-sdk/auth/authenticate)**: todos los métodos de autenticación en detalle"}