wip(docs): i18n (#12681)

This commit is contained in:
Adam
2026-02-09 11:34:35 -06:00
committed by GitHub
parent f74c0339cc
commit dc53086c1e
642 changed files with 192745 additions and 509 deletions

View File

@@ -0,0 +1,67 @@
---
title: Migrando a 1.0
description: Novedades de OpenCode 1.0.
---
OpenCode 1.0 es una reescritura completa de TUI.
Pasamos del TUI basado en go+bubbletea que tenía problemas de rendimiento y capacidad a un marco interno (OpenTUI) escrito en zig+solidjs.
El nuevo TUI funciona como el anterior ya que se conecta al mismo servidor opencode.
---
## Actualización
No deberías realizar la actualización automática a 1.0 si actualmente estás utilizando una versión anterior.
versión. Sin embargo, algunas versiones anteriores de OpenCode siempre obtienen la última versión.
Para actualizar manualmente, ejecute
```bash
$ opencode upgrade 1.0.0
```
Para volver a bajar a 0.x, ejecute
```bash
$ opencode upgrade 0.15.31
```
---
## cambios de experiencia de usuario
El historial de sesiones está más comprimido y solo muestra detalles completos de la herramienta de edición y bash.
Agregamos una barra de comandos por la que fluye casi todo. Presione Ctrl+p para que aparezca en cualquier contexto y vea todo lo que puede hacer.
Se agregó una barra lateral de sesión (se puede alternar) con información útil.
Eliminamos algunas funciones que no estábamos seguros de que alguien realmente usara. Si falta algo importante, abra un problema y lo volveremos a agregar rápidamente.
---
## Cambios importantes
### Combinaciones de teclas renombradas
- mensajes_revertir -> mensajes_undo
- switch_agent -> agente_ciclo
- switch_agent_reverse -> agente_cycle_reverse
- switch_mode -> agente_ciclo
- switch_mode_reverse -> agente_cycle_reverse
### Combinaciones de teclas eliminadas
- mensajes_layout_toggle
- mensajes_siguiente
- mensajes_anteriores
- file_diff_toggle
- búsqueda_archivo
- archivo_cerrar
- lista_archivo
- aplicación_ayuda
- proyecto_init
- detalles_herramienta
- bloques_pensamiento

View File

@@ -0,0 +1,156 @@
---
title: ACP Soporte
description: Utilice OpenCode en cualquier editor compatible con ACP.
---
OpenCode admite el [Protocolo de cliente de agente](https://agentclientprotocol.com) o (ACP), lo que le permite usarlo directamente en editores e IDE compatibles.
:::consejo
Para obtener una lista de editores y herramientas compatibles con ACP, consulte el [informe de progreso de ACP](https://zed.dev/blog/acp-progress-report#available-now).
:::
ACP es un protocolo abierto que estandariza la comunicación entre editores de código y agentes de codificación de IA.
---
## Configurar
Para usar OpenCode a través de ACP, configure su editor para ejecutar el comando `opencode acp`.
El comando inicia OpenCode como un subproceso compatible con ACP que se comunica con su editor a través de JSON-RPC a través de stdio.
A continuación se muestran ejemplos de editores populares que admiten ACP.
---
### Zed
Agregue a su configuración [Zed](https://zed.dev) (`~/.config/zed/settings.json`):
```json title="~/.config/zed/settings.json"
{
"agent_servers": {
"OpenCode": {
"command": "opencode",
"args": ["acp"]
}
}
}
```
Para abrirlo, use la acción `agent: new thread` en la **Paleta de comandos**.
También puedes vincular un atajo de teclado editando tu `keymap.json`:
```json title="keymap.json"
[
{
"bindings": {
"cmd-alt-o": [
"agent::NewExternalAgentThread",
{
"agent": {
"custom": {
"name": "OpenCode",
"command": {
"command": "opencode",
"args": ["acp"]
}
}
}
}
]
}
}
]
```
---
### IDE de JetBrains
Agregue a su [JetBrains IDE](https://www.jetbrains.com/) acp.json de acuerdo con la [documentación](https://www.jetbrains.com/help/ai-assistant/acp.html):
```json title="acp.json"
{
"agent_servers": {
"OpenCode": {
"command": "/absolute/path/bin/opencode",
"args": ["acp"]
}
}
}
```
Para abrirlo, use el nuevo agente 'OpenCode' en el selector de agentes de AI Chat.
---
### Avante.nvim
Agregue a su configuración [Avante.nvim](https://github.com/yetone/avante.nvim):
```lua
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" }
}
}
}
```
Si necesita pasar variables de entorno:
```lua {6-8}
{
acp_providers = {
["opencode"] = {
command = "opencode",
args = { "acp" },
env = {
OPENCODE_API_KEY = os.getenv("OPENCODE_API_KEY")
}
}
}
}
```
---
### CódigoCompanion.nvim
Para usar OpenCode como agente ACP en [CodeCompanion.nvim](https://github.com/olimorris/codecompanion.nvim), agregue lo siguiente a su configuración de Neovim:
```lua
require("codecompanion").setup({
interactions = {
chat = {
adapter = {
name = "opencode",
model = "claude-sonnet-4",
},
},
},
})
```
Esta configuración configura CodeCompanion para usar OpenCode como agente ACP para el chat.
Si necesita pasar variables de entorno (como `OPENCODE_API_KEY`), consulte [Configuración de adaptadores: variables de entorno](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) en la documentación de CodeCompanion.nvim para obtener detalles completos.
## Apoyo
OpenCode funciona igual a través de ACP que en la terminal. Todas las funciones son compatibles:
:::nota
Algunos comandos de barra integrados como `/undo` y `/redo` no son compatibles actualmente.
:::
- Herramientas integradas (operaciones de archivos, comandos de terminal, etc.)
- Herramientas personalizadas y comandos de barra
- Servidores MCP configurados en su configuración OpenCode
- Reglas específicas del proyecto de `AGENTS.md`
- Formateadores y linters personalizados
- Sistema de agentes y permisos.

View File

@@ -0,0 +1,747 @@
---
title: Agentes
description: Configurar y utilizar agentes especializados.
---
Los agentes son asistentes de IA especializados que se pueden configurar para tareas y flujos de trabajo específicos. Le permiten crear herramientas enfocadas con indicaciones, modelos y acceso a herramientas personalizados.
:::consejo
Utilice el agente del plan para analizar el código y revisar sugerencias sin realizar ningún cambio en el código.
:::
Puede cambiar entre agentes durante una sesión o invocarlos con la mención `@`.
---
## Tipos
Hay dos tipos de agentes en OpenCode; agentes primarios y subagentes.
---
### Agentes primarios
Los agentes primarios son los asistentes principales con los que interactúas directamente. Puede recorrerlos usando la tecla **Tab** o la combinación de teclas `switch_agent` configurada. Estos agentes manejan su conversación principal. El acceso a las herramientas se configura mediante permisos; por ejemplo, Build tiene todas las herramientas habilitadas mientras que Plan está restringido.
:::consejo
Puede utilizar la tecla **Tab** para cambiar entre agentes principales durante una sesión.
:::
OpenCode viene con dos agentes principales integrados, **Construir** y **Planificar**. Bien
mira estos a continuación.
---
### Subagentes
Los subagentes son asistentes especializados que los agentes principales pueden invocar para tareas específicas. También puedes invocarlos manualmente **@ mencionándolos** en tus mensajes.
OpenCode viene con dos subagentes integrados, **General** y **Explorar**. Veremos esto a continuación.
---
## Incorporado
OpenCode viene con dos agentes primarios integrados y dos subagentes integrados.
---
### Usar compilación
_Modo_: `primary`
Build es el agente principal **predeterminado** con todas las herramientas habilitadas. Este es el agente estándar para trabajos de desarrollo en los que necesita acceso completo a las operaciones de archivos y comandos del sistema.
---
### Plan de uso
_Modo_: `primary`
Un agente restringido diseñado para la planificación y el análisis. Utilizamos un sistema de permisos para brindarle más control y evitar cambios no deseados.
De forma predeterminada, todo lo siguiente está configurado en `ask`:
- `file edits`: todas las escrituras, parches y ediciones.
- `bash`: Todos los comandos bash
Este agente es útil cuando desea que LLM analice código, sugiera cambios o cree planes sin realizar modificaciones reales a su base de código.
---
### Uso general
_Modo_: `subagent`
Un agente de uso general para investigar preguntas complejas y ejecutar tareas de varios pasos. Tiene acceso completo a las herramientas (excepto tareas pendientes), por lo que puede realizar cambios en los archivos cuando sea necesario. Utilícelo para ejecutar varias unidades de trabajo en paralelo.
---
### Usar explorar
_Modo_: `subagent`
Un agente rápido y de solo lectura para explorar bases de código. No se pueden modificar archivos. Úselo cuando necesite buscar rápidamente archivos por patrones, buscar palabras clave en el código o responder preguntas sobre el código base.
---
### Utilice compactación
_Modo_: `primary`
Agente de sistema oculto que compacta un contexto largo en un resumen más pequeño. Se ejecuta automáticamente cuando es necesario y no se puede seleccionar en la interfaz de usuario.
---
### Usar título
_Modo_: `primary`
Agente del sistema oculto que genera títulos de sesión cortos. Se ejecuta automáticamente y no se puede seleccionar en la interfaz de usuario.
---
### Usar resumen
_Modo_: `primary`
Agente del sistema oculto que crea resúmenes de sesiones. Se ejecuta automáticamente y no se puede seleccionar en la interfaz de usuario.
---
## Uso
1. Para los agentes principales, use la tecla **Tab** para recorrerlos durante una sesión. También puede utilizar su combinación de teclas `switch_agent` configurada.
2. Se pueden invocar subagentes:
- **Automáticamente** por agentes principales para tareas especializadas según sus descripciones.
- Manualmente **@ mencionando** un subagente en tu mensaje. Por ejemplo.
```txt frame="none"
@general help me search for this function
```
3. **Navegación entre sesiones**: cuando los subagentes crean sus propias sesiones secundarias, puede navegar entre la sesión principal y todas las sesiones secundarias usando:
- **\<Líder>+Derecha** (o su combinación de teclas `session_child_cycle` configurada) para avanzar a través de padre → hijo1 → hijo2 → ... → padre
- **\<Líder>+Izquierda** (o su combinación de teclas `session_child_cycle_reverse` configurada) para retroceder entre padre ← hijo1 ← hijo2 ← ... ← padre
Esto le permite cambiar sin problemas entre la conversación principal y el trabajo de subagente especializado.
---
## Configurar
Puede personalizar los agentes integrados o crear los suyos propios mediante la configuración. Los agentes se pueden configurar de dos maneras:
---
### JSON
Configure agentes en su archivo de configuración `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"mode": "primary",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"mode": "primary",
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
},
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"mode": "subagent",
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
"write": false,
"edit": false
}
}
}
}
```
---
### Rebaja
También puede definir agentes utilizando archivos de rebajas. Colócalos en:
- Global: `~/.config/opencode/agents/`
- Por proyecto: `.opencode/agents/`
```markdown title="~/.config/opencode/agents/review.md"
---
description: Reviews code for quality and best practices
mode: subagent
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
tools:
write: false
edit: false
bash: false
---
You are in code review mode. Focus on:
- Code quality and best practices
- Potential bugs and edge cases
- Performance implications
- Security considerations
Provide constructive feedback without making direct changes.
```
El nombre del archivo de rebajas se convierte en el nombre del agente. Por ejemplo, `review.md` crea un agente `review`.
---
## Opciones
Veamos estas opciones de configuración en detalle.
---
### Descripción
Utilice la opción `description` para proporcionar una breve descripción de lo que hace el agente y cuándo usarlo.
```json title="opencode.json"
{
"agent": {
"review": {
"description": "Reviews code for best practices and potential issues"
}
}
}
```
Esta es una opción de configuración **obligatoria**.
---
### Temperatura
Controle la aleatoriedad y la creatividad de las respuestas de LLM con la configuración `temperature`.
Los valores más bajos hacen que las respuestas sean más centradas y deterministas, mientras que los valores más altos aumentan la creatividad y la variabilidad.
```json title="opencode.json"
{
"agent": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Los valores de temperatura suelen oscilar entre 0,0 y 1,0:
- **0.0-0.2**: Respuestas muy enfocadas y deterministas, ideales para análisis y planificación de código.
- **0,3-0,5**: respuestas equilibradas con algo de creatividad, buenas para tareas de desarrollo general.
- **0.6-1.0**: respuestas más creativas y variadas, útiles para la lluvia de ideas y la exploración.
```json title="opencode.json"
{
"agent": {
"analyze": {
"temperature": 0.1,
"prompt": "{file:./prompts/analysis.txt}"
},
"build": {
"temperature": 0.3
},
"brainstorm": {
"temperature": 0.7,
"prompt": "{file:./prompts/creative.txt}"
}
}
}
```
Si no se especifica ninguna temperatura, OpenCode utiliza valores predeterminados específicos del modelo; normalmente 0 para la mayoría de los modelos, 0,55 para los modelos Qwen.
---
### Pasos máximos
Controle la cantidad máxima de iteraciones agentes que un agente puede realizar antes de verse obligado a responder solo con texto. Esto permite a los usuarios que desean controlar los costos establecer un límite a las acciones de agencia.
Si no se establece esto, el agente continuará iterando hasta que el modelo decida detenerse o el usuario interrumpa la sesión.
```json title="opencode.json"
{
"agent": {
"quick-thinker": {
"description": "Fast reasoning with limited iterations",
"prompt": "You are a quick thinker. Solve problems with minimal steps.",
"steps": 5
}
}
}
```
Cuando se alcanza el límite, el agente recibe un mensaje especial del sistema que le indica que responda con un resumen de su trabajo y las tareas restantes recomendadas.
:::precaución
El campo heredado `maxSteps` está en desuso. Utilice `steps` en su lugar.
:::
---
### Desactivar
Establezca en `true` para deshabilitar el agente.
```json title="opencode.json"
{
"agent": {
"review": {
"disable": true
}
}
}
```
---
### Inmediato
Especifique un archivo de aviso del sistema personalizado para este agente con la configuración `prompt`. El archivo de aviso debe contener instrucciones específicas para el propósito del agente.
```json title="opencode.json"
{
"agent": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Esta ruta es relativa a donde se encuentra el archivo de configuración. Entonces esto funciona tanto para la configuración global OpenCode como para la configuración específica del proyecto.
---
### Modelo
Utilice la configuración `model` para anular el modelo de este agente. Útil para utilizar diferentes modelos optimizados para diferentes tareas. Por ejemplo, un modelo más rápido de planificación, un modelo más capaz de implementación.
:::consejo
Si no especifica un modelo, los agentes primarios usarán el [modelo configurado globalmente](/docs/config#models), mientras que los subagentes usarán el modelo del agente primario que invocó al subagente.
:::
```json title="opencode.json"
{
"agent": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
El ID del modelo en su configuración OpenCode usa el formato `provider/model-id`. Por ejemplo, si usa [OpenCode Zen](/docs/zen), usaría `opencode/gpt-5.1-codex` para GPT 5.1 Codex.
---
### Herramientas
Controle qué herramientas están disponibles en este agente con la configuración `tools`. Puede habilitar o deshabilitar herramientas específicas configurándolas en `true` o `false`.
```json title="opencode.json" {3-6,9-12}
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": true,
"bash": true
},
"agent": {
"plan": {
"tools": {
"write": false,
"bash": false
}
}
}
}
```
:::nota
La configuración específica del agente anula la configuración global.
:::
También puedes utilizar comodines para controlar varias herramientas a la vez. Por ejemplo, para desactivar todas las herramientas de un servidor MCP:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"readonly": {
"tools": {
"mymcp_*": false,
"write": false,
"edit": false
}
}
}
}
```
[Más información sobre herramientas](/docs/tools).
---
### Permisos
Puede configurar permisos para administrar qué acciones puede realizar un agente. Actualmente, los permisos para las herramientas `edit`, `bash` y `webfetch` se pueden configurar para:
- `"ask"`: solicitar aprobación antes de ejecutar la herramienta
- `"allow"` — Permitir todas las operaciones sin aprobación
- `"deny"` — Desactiva la herramienta
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
}
}
```
Puede anular estos permisos por agente.
```json title="opencode.json" {3-5,8-10}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny"
},
"agent": {
"build": {
"permission": {
"edit": "ask"
}
}
}
}
```
También puede establecer permisos en los agentes de Markdown.
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash:
"*": ask
"git diff": allow
"git log*": allow
"grep *": allow
webfetch: deny
---
Only analyze code and suggest changes.
```
Puede establecer permisos para comandos bash específicos.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git push": "ask",
"grep *": "allow"
}
}
}
}
}
```
Esto puede tomar un patrón global.
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"git *": "ask"
}
}
}
}
}
```
Y también puedes usar el comodín `*` para administrar los permisos de todos los comandos.
Dado que la última regla de coincidencia tiene prioridad, coloque el comodín `*` primero y las reglas específicas después.
```json title="opencode.json" {8}
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status *": "allow"
}
}
}
}
}
```
[Más información sobre permisos](/docs/permissions).
---
### Modo
Controle el modo del agente con la configuración `mode`. La opción `mode` se utiliza para determinar cómo se puede utilizar el agente.
```json title="opencode.json"
{
"agent": {
"review": {
"mode": "subagent"
}
}
}
```
La opción `mode` se puede configurar en `primary`, `subagent` o `all`. Si no se especifica `mode`, el valor predeterminado es `all`.
---
### Oculto
Oculte un subagente del menú de autocompletar `@` con `hidden: true`. Útil para subagentes internos que solo deben ser invocados mediante programación por otros agentes a través de la herramienta Tarea.
```json title="opencode.json"
{
"agent": {
"internal-helper": {
"mode": "subagent",
"hidden": true
}
}
}
```
Esto sólo afecta la visibilidad del usuario en el menú de autocompletar. El modelo aún puede invocar agentes ocultos a través de la herramienta Tarea si los permisos lo permiten.
:::nota
Sólo aplica para agentes `mode: subagent`.
:::
---
### Permisos de tareas
Controle qué subagentes puede invocar un agente a través de la herramienta Tarea con `permission.task`. Utiliza patrones globales para una combinación flexible.
```json title="opencode.json"
{
"agent": {
"orchestrator": {
"mode": "primary",
"permission": {
"task": {
"*": "deny",
"orchestrator-*": "allow",
"code-reviewer": "ask"
}
}
}
}
}
```
Cuando se establece en `deny`, el subagente se elimina por completo de la descripción de la herramienta Tarea, por lo que el modelo no intentará invocarlo.
:::consejo
Las reglas se evalúan en orden y la **última regla coincidente gana**. En el ejemplo anterior, `orchestrator-planner` coincide con `*` (denegar) y `orchestrator-*` (permitir), pero como `orchestrator-*` viene después de `*`, el resultado es `allow`.
:::
:::consejo
Los usuarios siempre pueden invocar cualquier subagente directamente a través del menú de autocompletar `@`, incluso si los permisos de tarea del agente lo niegan.
:::
---
### Color
Personalice la apariencia visual del agente en la interfaz de usuario con la opción `color`. Esto afecta la forma en que aparece el agente en la interfaz.
Utilice un color hexadecimal válido (por ejemplo, `#FF5733`) o un color de tema: `primary`, `secondary`, `accent`, `success`, `warning`, `error`, `info`.
```json title="opencode.json"
{
"agent": {
"creative": {
"color": "#ff6b6b"
},
"code-reviewer": {
"color": "accent"
}
}
}
```
---
### P superior
Controle la diversidad de respuestas con la opción `top_p`. Alternativa a la temperatura para controlar la aleatoriedad.
```json title="opencode.json"
{
"agent": {
"brainstorm": {
"top_p": 0.9
}
}
}
```
Los valores oscilan entre 0,0 y 1,0. Los valores más bajos están más enfocados, los valores más altos son más diversos.
---
### Adicional
Cualquier otra opción que especifique en la configuración de su agente se **pasará directamente** al proveedor como opciones de modelo. Esto le permite utilizar funciones y parámetros específicos del proveedor.
Por ejemplo, con los modelos de razonamiento de OpenAI, puedes controlar el esfuerzo de razonamiento:
```json title="opencode.json" {6,7}
{
"agent": {
"deep-thinker": {
"description": "Agent that uses high reasoning effort for complex problems",
"model": "openai/gpt-5",
"reasoningEffort": "high",
"textVerbosity": "low"
}
}
}
```
Estas opciones adicionales son específicas del modelo y del proveedor. Consulte la documentación de su proveedor para conocer los parámetros disponibles.
:::consejo
Ejecute `opencode models` para ver una lista de los modelos disponibles.
:::
---
## Crear agentes
Puede crear nuevos agentes usando el siguiente comando:
```bash
opencode agent create
```
Este comando interactivo:
1. Preguntar dónde guardar al agente; global o específico del proyecto.
2. Descripción de lo que debe hacer el agente.
3. Genere un indicador y un identificador del sistema adecuados.
4. Le permite seleccionar a qué herramientas puede acceder el agente.
5. Finalmente, cree un archivo Markdown con la configuración del agente.
---
## Casos de uso
A continuación se muestran algunos casos de uso comunes para diferentes agentes.
- **Agente de compilación**: trabajo de desarrollo completo con todas las herramientas habilitadas
- **Plan agente**: Análisis y planificación sin realizar cambios
- **Agente de revisión**: revisión de código con acceso de solo lectura más herramientas de documentación
- **Agente de depuración**: centrado en la investigación con bash y herramientas de lectura habilitadas
- **Agente de documentos**: escritura de documentación con operaciones de archivos pero sin comandos del sistema.
---
## Ejemplos
A continuación se muestran algunos agentes de ejemplo que pueden resultarle útiles.
:::consejo
¿Tiene un agente que le gustaría compartir? [Enviar un PR](https://github.com/anomalyco/opencode).
:::
---
### Agente de documentación
```markdown title="~/.config/opencode/agents/docs-writer.md"
---
description: Writes and maintains project documentation
mode: subagent
tools:
bash: false
---
You are a technical writer. Create clear, comprehensive documentation.
Focus on:
- Clear explanations
- Proper structure
- Code examples
- User-friendly language
```
---
### Auditor de seguridad
```markdown title="~/.config/opencode/agents/security-auditor.md"
---
description: Performs security audits and identifies vulnerabilities
mode: subagent
tools:
write: false
edit: false
---
You are a security expert. Focus on identifying potential security issues.
Look for:
- Input validation vulnerabilities
- Authentication and authorization flaws
- Data exposure risks
- Dependency vulnerabilities
- Configuration security issues
```

View File

@@ -0,0 +1,601 @@
---
title: CLI
description: OpenCode CLI opciones y comandos.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
El OpenCode CLI de forma predeterminada inicia el [TUI](/docs/tui) cuando se ejecuta sin ningún argumento.
```bash
opencode
```
Pero también acepta comandos como se documenta en esta página. Esto le permite interactuar con OpenCode mediante programación.
```bash
opencode run "Explain how closures work in JavaScript"
```
---
### tui
Inicie la interfaz de usuario del terminal OpenCode.
```bash
opencode [project]
```
#### Banderas
| Bandera | Corto | Descripción |
| ------------ | ----- | ------------------------------------------ |
| `--continue` | `-c` | Continuar la última sesión |
| `--session` | `-s` | ID de sesión para continuar |
| `--prompt` | | Aviso de uso |
| `--model` | `-m` | Modelo a utilizar en forma de proveedor/modelo |
| `--agent` | | Agente a utilizar |
| `--port` | | Puerto para escuchar |
| `--hostname` | | Nombre de host para escuchar |
---
## Comandos
El OpenCode CLI también tiene los siguientes comandos.
---
### agente
Administrar agentes para OpenCode.
```bash
opencode agent [command]
```
---
### adjuntar
Conecte una terminal a un servidor backend OpenCode que ya se esté ejecutando y iniciado mediante los comandos `serve` o `web`.
```bash
opencode attach [url]
```
Esto permite usar TUI con un backend remoto OpenCode. Por ejemplo:
```bash
# Start the backend server for web/mobile access
opencode web --port 4096 --hostname 0.0.0.0
# In another terminal, attach the TUI to the running backend
opencode attach http://10.20.30.40:4096
```
#### Banderas
| Bandera | Corto | Descripción |
| ----------- | ----- | --------------------------------- |
| `--dir` | | Directorio de trabajo para iniciar TUI en |
| `--session` | `-s` | ID de sesión para continuar |
---
#### crear
Cree un nuevo agente con configuración personalizada.
```bash
opencode agent create
```
Este comando lo guiará en la creación de un nuevo agente con un mensaje del sistema personalizado y una configuración de herramientas.
---
#### lista
Enumere todos los agentes disponibles.
```bash
opencode agent list
```
---
### autenticación
Comando para administrar credenciales e iniciar sesión para proveedores.
```bash
opencode auth [command]
```
---
#### acceso
OpenCode funciona con la lista de proveedores en [Models.dev](https://models.dev), por lo que puede usar `opencode auth login` para configurar las claves API para cualquier proveedor que desee utilizar. Esto se almacena en `~/.local/share/opencode/auth.json`.
```bash
opencode auth login
```
Cuando se inicia OpenCode, carga los proveedores desde el archivo de credenciales. Y si hay claves definidas en sus entornos o un archivo `.env` en su proyecto.
---
#### lista
Enumera todos los proveedores autenticados tal como están almacenados en el archivo de credenciales.
```bash
opencode auth list
```
O la versión corta.
```bash
opencode auth ls
```
---
#### cerrar sesión
Cierra tu sesión de un proveedor eliminándolo del archivo de credenciales.
```bash
opencode auth logout
```
---
### github
Administre el agente GitHub para la automatización del repositorio.
```bash
opencode github [command]
```
---
#### instalar
Instale el agente GitHub en su repositorio.
```bash
opencode github install
```
Esto configura el flujo de trabajo de acciones GitHub necesario y lo guía a través del proceso de configuración. [Más información](/docs/github).
---
#### correr
Ejecute el agente GitHub. Esto se usa normalmente en acciones GitHub.
```bash
opencode github run
```
##### Banderas
| Bandera | Descripción |
| --------- | -------------------------------------- |
| `--event` | GitHub evento simulado para ejecutar el agente |
| `--token` | GitHub token de acceso personal |
---
### mcp
Administrar servidores de protocolo de contexto modelo.
```bash
opencode mcp [command]
```
---
#### agregar
Agregue un servidor MCP a su configuración.
```bash
opencode mcp add
```
Este comando lo guiará para agregar un servidor MCP local o remoto.
---
#### lista
Enumere todos los servidores MCP configurados y su estado de conexión.
```bash
opencode mcp list
```
O utilice la versión corta.
```bash
opencode mcp ls
```
---
#### autenticación
Autentíquese con un servidor MCP habilitado para OAuth.
```bash
opencode mcp auth [name]
```
Si no proporciona un nombre de servidor, se le pedirá que seleccione entre los servidores compatibles con OAuth disponibles.
También puede enumerar los servidores compatibles con OAuth y su estado de autenticación.
```bash
opencode mcp auth list
```
O utilice la versión corta.
```bash
opencode mcp auth ls
```
---
#### cerrar sesión
Elimine las credenciales OAuth para un servidor MCP.
```bash
opencode mcp logout [name]
```
---
#### depurar
Depurar problemas de conexión OAuth para un servidor MCP.
```bash
opencode mcp debug <name>
```
---
### modelos
Enumere todos los modelos disponibles de los proveedores configurados.
```bash
opencode models [provider]
```
Este comando muestra todos los modelos disponibles en sus proveedores configurados en el formato `provider/model`.
Esto es útil para determinar el nombre exacto del modelo que se usará en [su configuración](/docs/config/).
Opcionalmente, puede pasar un ID de proveedor para filtrar modelos por ese proveedor.
```bash
opencode models anthropic
```
#### Banderas
| Bandera | Descripción |
| ----------- | ------------------------------------------------------------ |
| `--refresh` | Actualizar la caché de modelos desde models.dev |
| `--verbose` | Utilice una salida del modelo más detallada (incluye metadatos como costos) |
Utilice el indicador `--refresh` para actualizar la lista de modelos almacenados en caché. Esto es útil cuando se han agregado nuevos modelos a un proveedor y desea verlos en OpenCode.
```bash
opencode models --refresh
```
---
### correr
Ejecute opencode en modo no interactivo pasando un mensaje directamente.
```bash
opencode run [message..]
```
Esto es útil para secuencias de comandos, automatización o cuando desea una respuesta rápida sin iniciar el TUI completo. Por ejemplo.
```bash "opencode run"
opencode run Explain the use of context in Go
```
También puede conectarse a una instancia `opencode serve` en ejecución para evitar tiempos de arranque en frío del servidor MCP en cada ejecución:
```bash
# Start a headless server in one terminal
opencode serve
# In another terminal, run commands that attach to it
opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
```
#### Banderas
| Bandera | Corto | Descripción |
| ------------ | ----- | ------------------------------------------------------------------ |
| `--command` | | El comando a ejecutar, use mensaje para args |
| `--continue` | `-c` | Continuar la última sesión |
| `--session` | `-s` | ID de sesión para continuar |
| `--share` | | Comparte la sesión |
| `--model` | `-m` | Modelo a utilizar en forma de proveedor/modelo |
| `--agent` | | Agente a utilizar |
| `--file` | `-f` | Archivo(s) para adjuntar al mensaje |
| `--format` | | Formato: predeterminado (formateado) o json (eventos JSON sin formato) |
| `--title` | | Título de la sesión (utiliza un mensaje truncado si no se proporciona ningún valor) |
| `--attach` | | Adjuntar a un servidor opencode en ejecución (por ejemplo, http://localhost:4096) |
| `--port` | | Puerto para el servidor local (el puerto predeterminado es aleatorio) |
---
### atender
Inicie un servidor OpenCode sin cabeza para acceso API. Consulte los [documentos del servidor](/docs/server) para conocer la interfaz HTTP completa.
```bash
opencode serve
```
Esto inicia un servidor HTTP que proporciona acceso API a la funcionalidad opencode sin la interfaz TUI. Configure `OPENCODE_SERVER_PASSWORD` para habilitar la autenticación básica HTTP (el nombre de usuario predeterminado es `opencode`).
#### Banderas
| Bandera | Descripción |
| ------------ | ------------------------------------------ |
| `--port` | Puerto para escuchar |
| `--hostname` | Nombre de host para escuchar |
| `--mdns` | Habilitar el descubrimiento de mDNS |
| `--cors` | Orígenes de navegador adicionales para permitir CORS |
---
### sesión
Administrar OpenCode sesiones.
```bash
opencode session [command]
```
---
#### lista
Enumere todas las sesiones OpenCode.
```bash
opencode session list
```
##### Banderas
| Bandera | Corto | Descripción |
| ------------- | ----- | ------------------------------------ |
| `--max-count` | `-n` | Limitar a N sesiones más recientes |
| `--format` | | Formato de salida: tabla o json (tabla) |
---
### estadísticas
Muestre el uso de tokens y las estadísticas de costos para sus sesiones OpenCode.
```bash
opencode stats
```
#### Banderas
| Bandera | Descripción |
| ----------- | --------------------------------------------------------------------------- |
| `--days` | Mostrar estadísticas de los últimos N días (todo el tiempo) |
| `--tools` | Número de herramientas para mostrar (todas) |
| `--models` | Mostrar el desglose del uso del modelo (oculto de forma predeterminada). Pase un número para mostrar la parte superior N |
| `--project` | Filtrar por proyecto (todos los proyectos, cadena vacía: proyecto actual) |
---
### exportar
Exportar datos de la sesión como JSON.
```bash
opencode export [sessionID]
```
Si no proporciona una ID de sesión, se le pedirá que seleccione entre las sesiones disponibles.
---
### importar
Importe datos de sesión desde un archivo JSON o una URL compartida OpenCode.
```bash
opencode import <file>
```
Puede importar desde un archivo local o una URL compartida OpenCode.
```bash
opencode import session.json
opencode import https://opncd.ai/s/abc123
```
---
### web
Inicie un servidor OpenCode sin cabeza con una interfaz web.
```bash
opencode web
```
Esto inicia un servidor HTTP y abre un navegador web para acceder a OpenCode a través de una interfaz web. Configure `OPENCODE_SERVER_PASSWORD` para habilitar la autenticación básica HTTP (el nombre de usuario predeterminado es `opencode`).
#### Banderas
| Bandera | Descripción |
| ------------ | ------------------------------------------ |
| `--port` | Puerto para escuchar |
| `--hostname` | Nombre de host para escuchar |
| `--mdns` | Habilitar el descubrimiento de mDNS |
| `--cors` | Orígenes de navegador adicionales para permitir CORS |
---
### acp
Inicie un servidor ACP (Protocolo de cliente de agente).
```bash
opencode acp
```
Este comando inicia un servidor ACP que se comunica a través de stdin/stdout usando nd-JSON.
#### Banderas
| Bandera | Descripción |
| ------------ | --------------------- |
| `--cwd` | Directorio de trabajo |
| `--port` | Puerto para escuchar |
| `--hostname` | Nombre de host para escuchar |
---
### desinstalar
Desinstale OpenCode y elimine todos los archivos relacionados.
```bash
opencode uninstall
```
#### Banderas
| Bandera | Corto | Descripción |
| --------------- | ----- | ------------------------------------------- |
| `--keep-config` | `-c` | Mantener archivos de configuración |
| `--keep-data` | `-d` | Conservar datos de sesión e instantáneas |
| `--dry-run` | | Mostrar lo que se eliminaría sin eliminar |
| `--force` | `-f` | Saltar mensajes de confirmación |
---
### mejora
Actualiza opencode a la última versión o a una versión específica.
```bash
opencode upgrade [target]
```
Para actualizar a la última versión.
```bash
opencode upgrade
```
Para actualizar a una versión específica.
```bash
opencode upgrade v0.1.48
```
#### Banderas
| Bandera | Corto | Descripción |
| ---------- | ----- | ----------------------------------------------------------------- |
| `--method` | `-m` | El método de instalación que se utilizó; rizo, npm, pnpm, bollo, preparación |
---
## Banderas globales
El opencode CLI toma las siguientes banderas globales.
| Bandera | Corto | Descripción |
| -------------- | ----- | ------------------------------------ |
| `--help` | `-h` | Mostrar ayuda |
| `--version` | `-v` | Número de versión de impresión |
| `--print-logs` | | Imprimir registros en stderr |
| `--log-level` | | Nivel de registro (DEPURACIÓN, INFORMACIÓN, ADVERTENCIA, ERROR) |
---
## Variables de entorno
OpenCode se puede configurar mediante variables de entorno.
| Variables | Tipo | Descripción |
| ------------------------------------- | ------- | ------------------------------------------------- |
| `OPENCODE_AUTO_SHARE` | booleano | Compartir sesiones automáticamente |
| `OPENCODE_GIT_BASH_PATH` | cadena | Ruta al ejecutable de Git Bash en Windows |
| `OPENCODE_CONFIG` | cadena | Ruta al archivo de configuración |
| `OPENCODE_CONFIG_DIR` | cadena | Ruta al directorio de configuración |
| `OPENCODE_CONFIG_CONTENT` | cadena | Contenido de configuración json en línea |
| `OPENCODE_DISABLE_AUTOUPDATE` | booleano | Deshabilitar las comprobaciones automáticas de actualizaciones |
| `OPENCODE_DISABLE_PRUNE` | booleano | Deshabilitar la poda de datos antiguos |
| `OPENCODE_DISABLE_TERMINAL_TITLE` | booleano | Deshabilitar las actualizaciones automáticas de títulos de terminal |
| `OPENCODE_PERMISSION` | cadena | Configuración de permisos json incorporados |
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | booleano | Deshabilitar complementos predeterminados |
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | booleano | Deshabilitar las descargas automáticas del servidor LSP |
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | booleano | Habilitar modelos experimentales |
| `OPENCODE_DISABLE_AUTOCOMPACT` | booleano | Deshabilitar la compactación automática de contexto |
| `OPENCODE_DISABLE_CLAUDE_CODE` | booleano | Deshabilitar la lectura desde `.claude` (mensaje + habilidades) |
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | booleano | Desactivar lectura `~/.claude/CLAUDE.md` |
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | booleano | Deshabilitar la carga `.claude/skills` |
| `OPENCODE_DISABLE_MODELS_FETCH` | booleano | Deshabilitar la recuperación de modelos desde fuentes remotas |
| `OPENCODE_FAKE_VCS` | cadena | Proveedor de VCS falso para fines de prueba |
| `OPENCODE_DISABLE_FILETIME_CHECK` | booleano | Deshabilite la verificación del tiempo del archivo para optimizarlo |
| `OPENCODE_CLIENT` | cadena | Identificador de cliente (por defecto `cli`) |
| `OPENCODE_ENABLE_EXA` | booleano | Habilitar las herramientas de búsqueda web de Exa |
| `OPENCODE_SERVER_PASSWORD` | cadena | Habilite la autenticación básica para `serve`/`web` |
| `OPENCODE_SERVER_USERNAME` | cadena | Anular el nombre de usuario de autenticación básica (predeterminado `opencode`) |
| `OPENCODE_MODELS_URL` | cadena | URL personalizada para buscar la configuración de modelos |
---
### Experimental
Estas variables de entorno habilitan funciones experimentales que pueden cambiar o eliminarse.
| Variables | Tipo | Descripción |
| ----------------------------------------------- | ------- | --------------------------------------- |
| `OPENCODE_EXPERIMENTAL` | booleano | Habilitar todas las funciones experimentales |
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | booleano | Habilitar descubrimiento de íconos |
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | booleano | Deshabilitar copia al seleccionar en TUI |
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | número | Tiempo de espera predeterminado para comandos bash en ms |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | número | Tokens de salida máximos para respuestas LLM |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | booleano | Habilite el observador de archivos para todo el directorio |
| `OPENCODE_EXPERIMENTAL_OXFMT` | booleano | Habilitar el formateador oxfmt |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | booleano | Habilitar herramienta experimental LSP |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | booleano | Deshabilitar el observador de archivos |
| `OPENCODE_EXPERIMENTAL_EXA` | booleano | Habilitar funciones experimentales de Exa |
| `OPENCODE_EXPERIMENTAL_LSP_TY` | booleano | Habilitar la verificación de tipo experimental LSP |
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | booleano | Habilitar funciones de rebajas experimentales |
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | booleano | Habilitar modo de plan |

View File

@@ -0,0 +1,323 @@
---
title: Comandos
description: Cree comandos personalizados para tareas repetitivas.
---
Los comandos personalizados le permiten especificar un mensaje que desea ejecutar cuando ese comando se ejecuta en TUI.
```bash frame="none"
/my-command
```
Los comandos personalizados se suman a los comandos integrados como `/init`, `/undo`, `/redo`, `/share`, `/help`. [Más información](/docs/tui#commands).
---
## Crear archivos de comando
Cree archivos de rebajas en el directorio `commands/` para definir comandos personalizados.
Crear `.opencode/commands/test.md`:
```md title=".opencode/commands/test.md"
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---
Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
```
El frontmatter define las propiedades del comando. El contenido se convierte en la plantilla.
Utilice el comando escribiendo `/` seguido del nombre del comando.
```bash frame="none"
"/test"
```
---
## Configurar
Puede agregar comandos personalizados a través de la configuración OpenCode o creando archivos de rebajas en el directorio `commands/`.
---
### JSON
Utilice la opción `command` en su OpenCode [config](/docs/config):
```json title="opencode.jsonc" {4-12}
{
"$schema": "https://opencode.ai/config.json",
"command": {
// This becomes the name of the command
"test": {
// This is the prompt that will be sent to the LLM
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
// This is shown as the description in the TUI
"description": "Run tests with coverage",
"agent": "build",
"model": "anthropic/claude-3-5-sonnet-20241022"
}
}
}
```
Ahora puedes ejecutar este comando en TUI:
```bash frame="none"
/test
```
---
### Rebaja
También puede definir comandos utilizando archivos de rebajas. Colócalos en:
- Global: `~/.config/opencode/commands/`
- Por proyecto: `.opencode/commands/`
```markdown title="~/.config/opencode/commands/test.md"
---
description: Run tests with coverage
agent: build
model: anthropic/claude-3-5-sonnet-20241022
---
Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
```
El nombre del archivo de rebajas se convierte en el nombre del comando. Por ejemplo, `test.md` permite
tu corres:
```bash frame="none"
/test
```
---
## Configuración rápida
Las indicaciones para los comandos personalizados admiten varios marcadores de posición y sintaxis especiales.
---
### Argumentos
Pase argumentos a comandos usando el marcador de posición `$ARGUMENTS`.
```md title=".opencode/commands/component.md"
---
description: Create a new component
---
Create a new React component named $ARGUMENTS with TypeScript support.
Include proper typing and basic structure.
```
Ejecute el comando con argumentos:
```bash frame="none"
/component Button
```
Y `$ARGUMENTS` será reemplazado por `Button`.
También puede acceder a argumentos individuales utilizando parámetros posicionales:
- `$1` - Primer argumento
- `$2` - Segundo argumento
- `$3` - Tercer argumento
- Etcétera...
Por ejemplo:
```md title=".opencode/commands/create-file.md"
---
description: Create a new file with content
---
Create a file named $1 in the directory $2
with the following content: $3
```
Ejecute el comando:
```bash frame="none"
/create-file config.json src "{ \"key\": \"value\" }"
```
Esto reemplaza:
- `$1` con `config.json`
- `$2` con `src`
- `$3` con `{ "key": "value" }`
---
### Salida del shell
Utilice _!`command`_ para inyectar la salida de [comando bash](/docs/tui#bash-commands) en su mensaje.
Por ejemplo, para crear un comando personalizado que analice la cobertura de la prueba:
```md title=".opencode/commands/analyze-coverage.md"
---
description: Analyze test coverage
---
Here are the current test results:
!`npm test`
Based on these results, suggest improvements to increase coverage.
```
O para revisar cambios recientes:
```md title=".opencode/commands/review-changes.md"
---
description: Review recent changes
---
Recent git commits:
!`git log --oneline -10`
Review these changes and suggest any improvements.
```
Los comandos se ejecutan en el directorio raíz de su proyecto y su salida pasa a formar parte del mensaje.
---
### Referencias de archivos
Incluya archivos en su comando usando `@` seguido del nombre del archivo.
```md title=".opencode/commands/review-component.md"
---
description: Review component
---
Review the component in @src/components/Button.tsx.
Check for performance issues and suggest improvements.
```
El contenido del archivo se incluye automáticamente en el mensaje.
---
## Opciones
Veamos las opciones de configuración en detalle.
---
### Plantilla
La opción `template` define el mensaje que se enviará al LLM cuando se ejecute el comando.
```json title="opencode.json"
{
"command": {
"test": {
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
}
}
}
```
Esta es una opción de configuración **obligatoria**.
---
### Descripción
Utilice la opción `description` para proporcionar una breve descripción de lo que hace el comando.
```json title="opencode.json"
{
"command": {
"test": {
"description": "Run tests with coverage"
}
}
}
```
Esto se muestra como descripción en TUI cuando escribe el comando.
---
### Agente
Utilice la configuración `agent` para especificar opcionalmente qué [agente](/docs/agents) debe ejecutar este comando.
Si se trata de un [subagente](/docs/agents/#subagents), el comando activará una invocación de subagente de forma predeterminada.
Para desactivar este comportamiento, establezca `subtask` en `false`.
```json title="opencode.json"
{
"command": {
"review": {
"agent": "plan"
}
}
}
```
Esta es una opción de configuración **opcional**. Si no se especifica, el valor predeterminado es su agente actual.
---
### Subtarea
Utilice el booleano `subtask` para forzar que el comando active una invocación de [subagente](/docs/agents/#subagents).
Esto es útil si desea que el comando no contamine su contexto principal y **obligue** al agente a actuar como subagente.
incluso si `mode` está configurado en `primary` en la configuración de [agente](/docs/agents).
```json title="opencode.json"
{
"command": {
"analyze": {
"subtask": true
}
}
}
```
Esta es una opción de configuración **opcional**.
---
### Modelo
Utilice la configuración `model` para anular el modelo predeterminado para este comando.
```json title="opencode.json"
{
"command": {
"analyze": {
"model": "anthropic/claude-3-5-sonnet-20241022"
}
}
}
```
Esta es una opción de configuración **opcional**.
---
## Incorporado
opencode incluye varios comandos integrados como `/init`, `/undo`, `/redo`, `/share`, `/help`; [más información](/docs/tui#commands).
:::nota
Los comandos personalizados pueden anular los comandos integrados.
:::
Si define un comando personalizado con el mismo nombre, anulará el comando integrado.

View File

@@ -0,0 +1,685 @@
---
title: configuración
description: Usando la configuración OpenCode JSON.
---
Puede configurar OpenCode usando un archivo de configuración JSON.
---
## Formato
OpenCode admite los formatos **JSON** y **JSONC** (JSON con comentarios).
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
// Theme configuration
"theme": "opencode",
"model": "anthropic/claude-sonnet-4-5",
"autoupdate": true,
}
```
---
## Ubicaciones
Puedes colocar tu configuración en un par de ubicaciones diferentes y tienen un
diferente orden de precedencia.
:::nota
Los archivos de configuración se **fusionan**, no se reemplazan.
:::
Los archivos de configuración se fusionan, no se reemplazan. Se combinan las configuraciones de las siguientes ubicaciones de configuración. Las configuraciones posteriores anulan las anteriores solo para claves en conflicto. Se conservan las configuraciones no conflictivas de todas las configuraciones.
Por ejemplo, si su configuración global establece `theme: "opencode"` y `autoupdate: true`, y la configuración de su proyecto establece `model: "anthropic/claude-sonnet-4-5"`, la configuración final incluirá las tres configuraciones.
---
### Orden de precedencia
Las fuentes de configuración se cargan en este orden (las fuentes posteriores anulan las anteriores):
1. **Configuración remota** (de `.well-known/opencode`): valores predeterminados de la organización
2. **Configuración global** (`~/.config/opencode/opencode.json`) - preferencias del usuario
3. **Configuración personalizada** (`OPENCODE_CONFIG` env var): anulaciones personalizadas
4. **Configuración del proyecto** (`opencode.json` en el proyecto): configuración específica del proyecto
5. Directorios **`.opencode`** - agentes, comandos, complementos
6. **Configuración en línea** (`OPENCODE_CONFIG_CONTENT` env var): anulaciones del tiempo de ejecución
Esto significa que las configuraciones del proyecto pueden anular los valores predeterminados globales y las configuraciones globales pueden anular los valores predeterminados de la organización remota.
:::nota
Los directorios `.opencode` y `~/.config/opencode` usan **nombres en plural** para los subdirectorios: `agents/`, `commands/`, `modes/`, `plugins/`, `skills/`, `tools/` y `themes/`. También se admiten nombres singulares (por ejemplo, `agent/`) para compatibilidad con versiones anteriores.
:::
---
### Remoto
Las organizaciones pueden proporcionar una configuración predeterminada a través del punto final `.well-known/opencode`. Esto se obtiene automáticamente cuando se autentica con un proveedor que lo admita.
La configuración remota se carga primero y sirve como capa base. Todas las demás fuentes de configuración (global, proyecto) pueden anular estos valores predeterminados.
Por ejemplo, si su organización proporciona servidores MCP que están deshabilitados de forma predeterminada:
```json title="Remote config from .well-known/opencode"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}
```
Puede habilitar servidores específicos en su configuración local:
```json title="opencode.json"
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
---
### Global
Coloque su configuración global OpenCode en `~/.config/opencode/opencode.json`. Utilice la configuración global para las preferencias de todo el usuario, como temas, proveedores o combinaciones de teclas.
La configuración global anula los valores predeterminados de la organización remota.
---
### Por proyecto
Agregue `opencode.json` en la raíz de su proyecto. La configuración del proyecto tiene la mayor prioridad entre los archivos de configuración estándar: anula las configuraciones globales y remotas.
:::consejo
Coloque la configuración específica del proyecto en la raíz de su proyecto.
:::
Cuando se inicia OpenCode, busca un archivo de configuración en el directorio actual o recorre hasta el directorio Git más cercano.
Esto también es seguro para registrarlo en Git y utiliza el mismo esquema que el global.
---
### Ruta personalizada
Especifique una ruta de archivo de configuración personalizada utilizando la variable de entorno `OPENCODE_CONFIG`.
```bash
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"
```
La configuración personalizada se carga entre las configuraciones globales y del proyecto en orden de prioridad.
---
### Directorio personalizado
Especifique un directorio de configuración personalizado usando `OPENCODE_CONFIG_DIR`
variable de entorno. En este directorio se buscarán agentes, comandos,
modos y complementos como el directorio estándar `.opencode`, y debería
Sigue la misma estructura.
```bash
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"
```
El directorio personalizado se carga después de los directorios global config y `.opencode`, por lo que **puede anular** su configuración.
---
## Esquema
El archivo de configuración tiene un esquema definido en [**`opencode.ai/config.json`**](https://opencode.ai/config.json).
Su editor debería poder validar y autocompletar según el esquema.
---
### TUI
Puede configurar ajustes específicos de TUI a través de la opción `tui`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}
}
```
Opciones disponibles:
- `scroll_acceleration.enabled` - Habilita la aceleración de desplazamiento estilo macOS. **Tiene prioridad sobre `scroll_speed`.**
- `scroll_speed` - Multiplicador de velocidad de desplazamiento personalizado (predeterminado: `3`, mínimo: `1`). Se ignora si `scroll_acceleration.enabled` es `true`.
- `diff_style` - Controla la representación de diferencias. `"auto"` se adapta al ancho del terminal, `"stacked"` siempre muestra una sola columna.
[Obtenga más información sobre el uso de TUI aquí](/docs/tui).
---
### Servidor
Puede configurar los ajustes del servidor para los comandos `opencode serve` y `opencode web` a través de la opción `server`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"mdnsDomain": "myproject.local",
"cors": ["http://localhost:5173"]
}
}
```
Opciones disponibles:
- `port` - Puerto para escuchar.
- `hostname`: nombre de host para escuchar. Cuando `mdns` está habilitado y no se establece ningún nombre de host, el valor predeterminado es `0.0.0.0`.
- `mdns`: habilita el descubrimiento de servicios mDNS. Esto permite que otros dispositivos en la red descubran su servidor OpenCode.
- `mdnsDomain` - Nombre de dominio personalizado para el servicio mDNS. El valor predeterminado es `opencode.local`. Útil para ejecutar múltiples instancias en la misma red.
- `cors`: orígenes adicionales para permitir CORS cuando se utiliza el servidor HTTP desde un cliente basado en navegador. Los valores deben ser orígenes completos (esquema + host + puerto opcional), por ejemplo, `https://app.example.com`.
[Obtenga más información sobre el servidor aquí](/docs/server).
---
### Herramientas
Puede administrar las herramientas que un LLM puede usar a través de la opción `tools`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}
```
[Obtenga más información sobre las herramientas aquí](/docs/tools).
---
### Modelos
Puede configurar los proveedores y modelos que desea utilizar en su configuración OpenCode a través de las opciones `provider`, `model` y `small_model`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {},
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5"
}
```
La opción `small_model` configura un modelo separado para tareas livianas como la generación de títulos. De forma predeterminada, OpenCode intenta utilizar un modelo más económico si su proveedor tiene uno disponible; de lo contrario, recurre a su modelo principal.
Las opciones de proveedores pueden incluir `timeout` y `setCacheKey`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"setCacheKey": true
}
}
}
}
```
- `timeout`: tiempo de espera de solicitud en milisegundos (predeterminado: 300000). Establezca en `false` para desactivar.
- `setCacheKey`: asegúrese de que siempre haya una clave de caché configurada para el proveedor designado.
También puede configurar [modelos locales](/docs/models#local). [Más información](/docs/models).
---
#### Opciones específicas del proveedor
Algunos proveedores admiten opciones de configuración adicionales más allá de las configuraciones genéricas `timeout` y `apiKey`.
##### Amazon Bedrock
Amazon Bedrock admite la configuración específica de AWS:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"amazon-bedrock": {
"options": {
"region": "us-east-1",
"profile": "my-aws-profile",
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
}
}
}
}
```
- `region` - AWS región para Bedrock (el valor predeterminado es `AWS_REGION` env var o `us-east-1`)
- `profile` - AWS perfil con nombre de `~/.aws/credentials` (el valor predeterminado es `AWS_PROFILE` var env)
- `endpoint`: URL de punto de enlace personalizada para puntos de enlace de VPC. Este es un alias para la opción genérica `baseURL` que utiliza terminología específica de AWS. Si se especifican ambos, `endpoint` tiene prioridad.
:::nota
Los tokens de portador (`AWS_BEARER_TOKEN_BEDROCK` o `/connect`) tienen prioridad sobre la autenticación basada en perfil. Consulte [precedencia de autenticación](/docs/providers#authentication-precedence) para obtener más detalles.
:::
[Obtenga más información sobre la configuración de Amazon Bedrock](/docs/providers#amazon-bedrock).
---
### Temas
Puede configurar el tema que desea usar en su configuración OpenCode a través de la opción `theme`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"theme": ""
}
```
[Más información aquí](/docs/themes).
---
### Agentes
Puedes configurar agentes especializados para tareas específicas a través de la opción `agent`.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"tools": {
// Disable file modification tools for review-only agent
"write": false,
"edit": false,
},
},
},
}
```
También puede definir agentes utilizando archivos de rebajas en `~/.config/opencode/agents/` o `.opencode/agents/`. [Más información aquí](/docs/agents).
---
### Agente predeterminado
Puede configurar el agente predeterminado usando la opción `default_agent`. Esto determina qué agente se utiliza cuando no se especifica ninguno explícitamente.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}
```
El agente predeterminado debe ser un agente principal (no un subagente). Puede ser un agente integrado como `"build"` o `"plan"`, o un [agente personalizado](/docs/agents) que haya definido. Si el agente especificado no existe o es un subagente, OpenCode recurrirá a `"build"` con una advertencia.
Esta configuración se aplica en todas las interfaces: TUI, CLI (`opencode run`), aplicación de escritorio y GitHub Acción.
---
### Intercambio
Puede configurar la función [compartir](/docs/share) a través de la opción `share`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}
```
Esto requiere:
- `"manual"` - Permitir compartir manualmente mediante comandos (predeterminado)
- `"auto"` - Comparte automáticamente nuevas conversaciones
- `"disabled"` - Deshabilitar el uso compartido por completo
De forma predeterminada, el uso compartido está configurado en modo manual, donde debe compartir conversaciones explícitamente usando el comando `/share`.
---
### Comandos
Puede configurar comandos personalizados para tareas repetitivas a través de la opción `command`.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"command": {
"test": {
"template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
"description": "Run tests with coverage",
"agent": "build",
"model": "anthropic/claude-haiku-4-5",
},
"component": {
"template": "Create a new React component named $ARGUMENTS with TypeScript support.\nInclude proper typing and basic structure.",
"description": "Create a new component",
},
},
}
```
También puede definir comandos utilizando archivos de rebajas en `~/.config/opencode/commands/` o `.opencode/commands/`. [Más información aquí](/docs/commands).
---
### combinaciones de teclas
Puede personalizar sus combinaciones de teclas a través de la opción `keybinds`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {}
}
```
[Más información aquí](/docs/keybinds).
---
### Actualización automática
OpenCode descargará automáticamente cualquier actualización nueva cuando se inicie. Puede desactivar esto con la opción `autoupdate`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}
```
Si no desea actualizaciones pero desea recibir una notificación cuando haya una nueva versión disponible, configure `autoupdate` en `"notify"`.
Tenga en cuenta que esto sólo funciona si no se instaló mediante un administrador de paquetes como Homebrew.
---
### Formateadores
Puede configurar formateadores de código a través de la opción `formatter`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
},
"custom-prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
}
}
}
```
[Obtenga más información sobre los formateadores aquí](/docs/formatters).
---
### Permisos
De forma predeterminada, opencode **permite todas las operaciones** sin requerir aprobación explícita. Puede cambiar esto usando la opción `permission`.
Por ejemplo, para garantizar que las herramientas `edit` y `bash` requieran la aprobación del usuario:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}
```
[Obtenga más información sobre los permisos aquí](/docs/permissions).
---
### Compactación
Puede controlar el comportamiento de compactación del contexto a través de la opción `compaction`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true
}
}
```
- `auto`: compacta automáticamente la sesión cuando el contexto está lleno (predeterminado: `true`).
- `prune`: elimina las salidas de herramientas antiguas para guardar tokens (predeterminado: `true`).
---
### Vigilante
Puede configurar patrones de ignorancia del observador de archivos a través de la opción `watcher`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}
```
Los patrones siguen la sintaxis global. Utilice esto para excluir directorios ruidosos de la visualización de archivos.
---
### MCP servidores
Puede configurar los servidores MCP que desee utilizar a través de la opción `mcp`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}
```
[Más información aquí](/docs/mcp-servers).
---
### Complementos
Los [complementos](/docs/plugins) amplían OpenCode con herramientas, enlaces e integraciones personalizados.
Coloque los archivos de complemento en `.opencode/plugins/` o `~/.config/opencode/plugins/`. También puedes cargar complementos desde npm a través de la opción `plugin`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}
```
[Más información aquí](/docs/plugins).
---
### Instrucciones
Puedes configurar las instrucciones para el modelo que estás usando a través de la opción `instructions`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
Esto requiere una variedad de rutas y patrones globales para archivos de instrucciones. [Más información
sobre las reglas aquí](/docs/rules).
---
### Proveedores deshabilitados
Puede deshabilitar proveedores que se cargan automáticamente a través de la opción `disabled_providers`. Esto es útil cuando desea evitar que se carguen ciertos proveedores incluso si sus credenciales están disponibles.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}
```
:::nota
El `disabled_providers` tiene prioridad sobre `enabled_providers`.
:::
La opción `disabled_providers` acepta una variedad de ID de proveedores. Cuando un proveedor está deshabilitado:
- No se cargará incluso si se establecen variables de entorno.
- No se cargará incluso si las teclas API están configuradas mediante el comando `/connect`.
- Los modelos del proveedor no aparecerán en la lista de selección de modelos.
---
### Proveedores habilitados
Puede especificar una lista de proveedores permitidos a través de la opción `enabled_providers`. Cuando se establece, solo se habilitarán los proveedores especificados y se ignorarán todos los demás.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}
```
Esto es útil cuando desea restringir OpenCode para que utilice únicamente proveedores específicos en lugar de deshabilitarlos uno por uno.
:::nota
El `disabled_providers` tiene prioridad sobre `enabled_providers`.
:::
Si un proveedor aparece tanto en `enabled_providers` como en `disabled_providers`, el `disabled_providers` tiene prioridad para la compatibilidad con versiones anteriores.
---
### Experimental
La clave `experimental` contiene opciones que se encuentran en desarrollo activo.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}
```
:::precaución
Las opciones experimentales no son estables. Pueden cambiar o eliminarse sin previo aviso.
:::
---
##Variables
Puede utilizar la sustitución de variables en sus archivos de configuración para hacer referencia a variables de entorno y contenidos de archivos.
---
### Variables ambientales
Utilice `{env:VARIABLE_NAME}` para sustituir variables de entorno:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "{env:OPENCODE_MODEL}",
"provider": {
"anthropic": {
"models": {},
"options": {
"apiKey": "{env:ANTHROPIC_API_KEY}"
}
}
}
}
```
Si la variable de entorno no está configurada, se reemplazará con una cadena vacía.
---
### Archivos
Utilice `{file:path/to/file}` para sustituir el contenido de un archivo:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}
```
Las rutas de los archivos pueden ser:
- Relativo al directorio del archivo de configuración
- O rutas absolutas que comienzan con `/` o `~`
Estos son útiles para:
- Mantener datos confidenciales como claves API en archivos separados.
- Incluye archivos de instrucciones grandes sin saturar tu configuración.
- Compartir fragmentos de configuración comunes en múltiples archivos de configuración.

View File

@@ -0,0 +1,170 @@
---
title: Herramientas personalizadas
description: Cree herramientas que LLM pueda llamar en opencode.
---
Las herramientas personalizadas son funciones que usted crea y que el LLM puede llamar durante las conversaciones. Trabajan junto con las [herramientas integradas] (./tools) de opencode como `read`, `write` y `bash`.
---
## Creando una herramienta
Las herramientas se definen como archivos **TypeScript** o **JavaScript**. Sin embargo, la definición de la herramienta puede invocar secuencias de comandos escritas en **cualquier idioma**: TypeScript o JavaScript solo se utilizan para la definición de la herramienta en sí.
---
### Ubicación
Se pueden definir:
- Localmente colocándolos en el directorio `.opencode/tools/` de tu proyecto.
- O de forma global, colocándolos en `~/.config/opencode/tools/`.
---
### Estructura
La forma más sencilla de crear herramientas es utilizar el asistente `tool()` que proporciona seguridad de tipos y validación.
```ts title=".opencode/tools/database.ts" {1}
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Query the project database",
args: {
query: tool.schema.string().describe("SQL query to execute"),
},
async execute(args) {
// Your database logic here
return `Executed query: ${args.query}`
},
})
```
El **nombre de archivo** se convierte en el **nombre de la herramienta**. Lo anterior crea una herramienta `database`.
---
#### Múltiples herramientas por archivo
También puede exportar varias herramientas desde un solo archivo. Cada exportación se convierte en **una herramienta independiente** con el nombre **`<filename>_<exportname>`**:
```ts title=".opencode/tools/math.ts"
import { tool } from "@opencode-ai/plugin"
export const add = tool({
description: "Add two numbers",
args: {
a: tool.schema.number().describe("First number"),
b: tool.schema.number().describe("Second number"),
},
async execute(args) {
return args.a + args.b
},
})
export const multiply = tool({
description: "Multiply two numbers",
args: {
a: tool.schema.number().describe("First number"),
b: tool.schema.number().describe("Second number"),
},
async execute(args) {
return args.a * args.b
},
})
```
Esto crea dos herramientas: `math_add` y `math_multiply`.
---
### Argumentos
Puedes usar `tool.schema`, que es simplemente [Zod](/docs/tools), para definir tipos de argumentos.
```ts "tool.schema"
args: {
query: tool.schema.string().describe("SQL query to execute")
}
```
También puedes importar [Zod](https://zod.dev) directamente y devolver un objeto simple:
```ts {6}
import { z } from "zod"
export default {
description: "Tool description",
args: {
param: z.string().describe("Parameter description"),
},
async execute(args, context) {
// Tool implementation
return "result"
},
}
```
---
### Contexto
Las herramientas reciben contexto sobre la sesión actual:
```ts title=".opencode/tools/project.ts" {8}
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Get project information",
args: {},
async execute(args, context) {
// Access context information
const { agent, sessionID, messageID, directory, worktree } = context
return `Agent: ${agent}, Session: ${sessionID}, Message: ${messageID}, Directory: ${directory}, Worktree: ${worktree}`
},
})
```
Utilice `context.directory` para el directorio de trabajo de la sesión.
Utilice `context.worktree` para la raíz del árbol de trabajo de git.
---
## Ejemplos
### Escribir una herramienta en Python
Puede escribir sus herramientas en cualquier idioma que desee. Aquí hay un ejemplo que suma dos números usando Python.
Primero, cree la herramienta como un script de Python:
```python title=".opencode/tools/add.py"
import sys
a = int(sys.argv[1])
b = int(sys.argv[2])
print(a + b)
```
Luego cree la definición de herramienta que la invoca:
```ts title=".opencode/tools/python-add.ts" {10}
import { tool } from "@opencode-ai/plugin"
import path from "path"
export default tool({
description: "Add two numbers using Python",
args: {
a: tool.schema.number().describe("First number"),
b: tool.schema.number().describe("Second number"),
},
async execute(args, context) {
const script = path.join(context.worktree, ".opencode/tools/add.py")
const result = await Bun.$`python3 ${script} ${args.a} ${args.b}`.text()
return result.trim()
},
})
```
Aquí estamos usando la utilidad [`Bun.$`](https://zod.dev) para ejecutar el script Python.

View File

@@ -0,0 +1,76 @@
---
title: Ecosistema
description: Proyectos e integraciones construidas con OpenCode.
---
Una colección de proyectos comunitarios construidos en OpenCode.
:::nota
¿Quieres agregar tu proyecto relacionado con OpenCode a esta lista? Envíe un PR.
:::
También puedes consultar [awesome-opencode](https://github.com/awesome-opencode/awesome-opencode) y [opencode.cafe](https://opencode.cafe), una comunidad que agrega el ecosistema y la comunidad.
---
## Complementos
| Nombre | Descripción |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| [opencode-daytona](https://github.com/jamesmurdza/daytona/blob/main/guides/typescript/opencode/README.md) | Ejecute automáticamente sesiones OpenCode en entornos sandbox aislados de Daytona con git sync y vistas previas en vivo |
| [opencode-sesión-helicona](https://github.com/H2Shami/opencode-helicone-session) | Inyecte automáticamente encabezados de sesión de Helicone para agrupación de solicitudes |
| [opencode-tipo-inyección](https://github.com/nick-vi/opencode-type-inject) | Inyecte automáticamente tipos TypeScript/Svelte en lecturas de archivos con herramientas de búsqueda |
| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth) | Utilice su suscripción ChatGPT Plus/Pro en lugar de créditos API |
| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth) | Utilice su plan Gemini existente en lugar de la facturación API |
| [opencode-autenticación antigravedad](https://github.com/NoeFabris/opencode-antigravity-auth) | Utilice los modelos gratuitos de Antigravity en lugar de la facturación API |
| [opencode-devcontainers](https://github.com/athal7/opencode-devcontainers) | Aislamiento de contenedores de desarrollo de múltiples ramas con clones superficiales y puertos asignados automáticamente |
| [opencode-google-antigravity-auth](https://github.com/shekohex/opencode-google-antigravity-auth) | Complemento Google Antigravity OAuth, compatible con la Búsqueda de Google y manejo más sólido de API |
| [opencode-poda-de-contexto-dinámico](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimice el uso de tokens eliminando los resultados de herramientas obsoletas |
| [opencode-búsqueda web-citada](https://github.com/ghoulr/opencode-websearch-cited.git) | Agregue soporte de búsqueda web nativa para proveedores compatibles con el estilo basado en Google |
| [opencode-pty](https://github.com/shekohex/opencode-pty.git) | Permite a los agentes de IA ejecutar procesos en segundo plano en un PTY y enviarles información interactiva. |
| [opencode-estrategia-shell](https://github.com/JRedeker/opencode-shell-strategy) | Instrucciones para comandos de shell no interactivos: evita bloqueos de operaciones dependientes de TTY |
| [opencode-wakatime](https://github.com/angristan/opencode-wakatime) | Seguimiento del uso de OpenCode con Wakatime |
| [opencode-md-formateador de tabla](https://github.com/franlol/opencode-md-table-formatter/tree/main) | Limpiar tablas de rebajas producidas por LLMs |
| [opencode-morph-fast-apply](https://github.com/JRedeker/opencode-morph-fast-apply) | Edición de código 10 veces más rápida con Morph Fast Apply API y marcadores de edición diferidos |
| [oh-mi-opencode](https://github.com/code-yeongyu/oh-my-opencode) | Agentes en segundo plano, herramientas LSP/AST/MCP prediseñadas, agentes seleccionados, compatible con Claude Code |
| [opencode-notificador](https://github.com/panta82/opencode-notificator) | Notificaciones de escritorio y alertas sonoras para sesiones OpenCode |
| [opencode-notificador](https://github.com/mohak34/opencode-notifier) | Notificaciones de escritorio y alertas sonoras para eventos de permiso, finalización y error |
| [opencode-zellij-namer](https://github.com/24601/opencode-zellij-namer) | Nomenclatura automática de sesiones Zellij impulsada por IA basada en el contexto OpenCode |
| [opencode-hábil](https://github.com/zenobi-us/opencode-skillful) | Permitir que los agentes OpenCode carguen mensajes de forma diferida a pedido con descubrimiento e inyección de habilidades |
| [opencode-supermemoria](https://github.com/supermemoryai/opencode-supermemory) | Memoria persistente entre sesiones utilizando Supermemoria |
| [@plannotator/opencode](https://github.com/backnotprop/plannotator/tree/main/apps/opencode-plugin) | Revisión interactiva del plan con anotaciones visuales y uso compartido privado/sin conexión |
| [@openspoon/subtarea2](https://github.com/spoons-and-mirrors/subtask2) | Amplíe opencode /commands a un potente sistema de orquestación con control de flujo granular |
| [opencode-programador](https://github.com/different-ai/opencode-scheduler) | Programe trabajos recurrentes usando launchd (Mac) o systemd (Linux) con sintaxis cron |
| [micocódigo](https://github.com/vtemian/micode) | Lluvia de ideas estructurada → Planificar → Implementar flujo de trabajo con continuidad de sesión |
| [octto](https://github.com/vtemian/octto) | Interfaz de usuario interactiva del navegador para lluvia de ideas de IA con formularios de preguntas múltiples |
| [opencode-agentes-de-fondo](https://github.com/kdcokenny/opencode-background-agents) | Agentes en segundo plano estilo Claude Code con delegación asíncrona y persistencia de contexto |
| [opencode-notificar](https://github.com/kdcokenny/opencode-notify) | Notificaciones nativas del sistema operativo para OpenCode: sepa cuándo se completan las tareas |
| [opencode-espacio de trabajo](https://github.com/kdcokenny/opencode-workspace) | Arnés de orquestación multiagente incluido: 16 componentes, una instalación |
| [opencode-árbol de trabajo](https://github.com/kdcokenny/opencode-worktree) | Árboles de trabajo de Git de fricción cero para OpenCode |
---
## Proyectos
| Nombre | Descripción |
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| [kimaki](https://github.com/remorses/kimaki) | Bot de Discord para controlar sesiones OpenCode, basado en el SDK |
| [opencode.nvim](https://github.com/NickvanDyke/opencode.nvim) | Complemento Neovim para avisos compatibles con el editor, creado en API |
| [portal](https://github.com/hosenur/portal) | Interfaz de usuario web móvil para OpenCode a través de Tailscale/VPN |
| [Plantilla de complemento opencode](https://github.com/zenobi-us/opencode-plugin-template/) | Plantilla para crear complementos OpenCode |
| [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Interfaz de Neovim para opencode: un agente de codificación de IA basado en terminal |
| [ai-sdk-proveedor-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Proveedor Vercel AI SDK para usar OpenCode a través de @opencode-ai/sdk |
| [Cámara Abierta](https://github.com/btriapitsyn/openchamber) | Aplicación web/de escritorio y extensión VS Code para OpenCode |
| [OpenCode-Obsidiana](https://github.com/mtymek/opencode-obsidian) | Complemento de Obsidian que incorpora OpenCode en la interfaz de usuario de Obsidian |
| [OpenWork](https://github.com/different-ai/openwork) | Una alternativa de código abierto a Claude Cowork, impulsada por OpenCode |
| [ocx](https://github.com/kdcokenny/ocx) | Administrador de extensiones OpenCode con perfiles portátiles y aislados. |
| [CódigoNomad](https://github.com/NeuralNomadsAI/CodeNomad) | Aplicación de escritorio, web, móvil y de cliente remoto para OpenCode |
---
## Agentes
| Nombre | Descripción |
| ----------------------------------------------------------------- | ------------------------------------------------------------ |
| [Agente](https://github.com/Cluster444/agentic) | Agentes y comandos modulares de IA para un desarrollo estructurado |
| [opencode-agentes](https://github.com/darrenhinde/opencode-agents) | Configuraciones, avisos, agentes y complementos para flujos de trabajo mejorados |

View File

@@ -0,0 +1,170 @@
---
title: Empresa
description: Usar OpenCode de forma segura en su organización.
---
import config from "../../../../config.mjs"
export const email = `mailto:${config.email}`
OpenCode Enterprise es para organizaciones que desean garantizar que su código y sus datos nunca abandonen su infraestructura. Puede hacerlo mediante el uso de una configuración centralizada que se integra con su SSO y su puerta de enlace AI interna.
:::nota
OpenCode no almacena ningún código ni datos de contexto.
:::
Para comenzar con OpenCode Enterprise:
1. Haz una prueba interna con tu equipo.
2. **<a href={email}>Contáctenos</a>** para analizar los precios y las opciones de implementación.
---
## Ensayo
OpenCode es de código abierto y no almacena ningún código ni datos de contexto, por lo que sus desarrolladores pueden simplemente [comenzar](/docs/) y realizar una prueba.
---
### Manejo de datos
**OpenCode no almacena su código ni datos de contexto.** Todo el procesamiento se realiza localmente o mediante llamadas directas API a su proveedor de IA.
Esto significa que siempre que utilice un proveedor de confianza o un proveedor interno
Puerta de enlace AI, puede usar OpenCode de forma segura.
La única advertencia aquí es la característica opcional `/share`.
---
#### Compartir conversaciones
Si un usuario habilita la función `/share`, la conversación y los datos asociados con ella se envían al servicio que utilizamos para alojar estas páginas compartidas en opencode.ai.
Actualmente, los datos se entregan a través de la red perimetral de nuestra CDN y se almacenan en caché en el perímetro cerca de sus usuarios.
Le recomendamos que desactive esto para su prueba.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled"
}
```
[Más información sobre cómo compartir](/docs/share).
---
### Propiedad del código
**Eres propietario de todo el código producido por OpenCode.** No existen restricciones de licencia ni reclamaciones de propiedad.
---
## Precios
Usamos un modelo por puesto para OpenCode Enterprise. Si tiene su propia puerta de enlace LLM, no cobramos por los tokens utilizados. Para obtener más detalles sobre precios y opciones de implementación, **<a href={email}>contáctenos</a>**.
---
## Implementación
Una vez que haya completado su prueba y esté listo para usar OpenCode en
su organización, puede **<a href={email}>contáctenos</a>** para discutir
opciones de fijación de precios y de implementación.
---
### Configuración central
Podemos configurar OpenCode para usar una única configuración central para toda su organización.
Esta configuración centralizada puede integrarse con su proveedor de SSO y garantiza que todos los usuarios accedan únicamente a su puerta de enlace de IA interna.
---
### Integración SSO
A través de la configuración central, OpenCode puede integrarse con el proveedor de SSO de su organización para la autenticación.
Esto permite a OpenCode obtener credenciales para su puerta de enlace interna de IA a través de su sistema de gestión de identidad existente.
---
### Puerta de enlace interna de IA
Con la configuración central, OpenCode también se puede configurar para usar solo su puerta de enlace AI interna.
También puede desactivar todos los demás proveedores de IA, asegurándose de que todas las solicitudes pasen por la infraestructura aprobada de su organización.
---
### Autohospedaje
Si bien recomendamos desactivar las páginas para compartir para garantizar que sus datos nunca abandonen
su organización, también podemos ayudarle a autohospedarlos en su infraestructura.
Esto se encuentra actualmente en nuestra hoja de ruta. Si está interesado, **<a href={email}>háganoslo saber</a>**.
---
## Preguntas frecuentes
<details>
<summary>¿Qué es OpenCode Enterprise?</summary>
OpenCode Enterprise es para organizaciones que desean garantizar que su código y sus datos nunca abandonen su infraestructura. Puede hacerlo mediante el uso de una configuración centralizada que se integra con su SSO y su puerta de enlace AI interna.
</details>
<details>
<summary>¿Cómo empiezo con OpenCode Enterprise?</summary>
Simplemente comience con una prueba interna con su equipo. OpenCode de forma predeterminada no almacena su código ni datos de contexto, lo que facilita el inicio.
Luego **<a href={email}>contáctenos</a>** para analizar los precios y las opciones de implementación.
</details>
<details>
<summary>¿Cómo funcionan los precios empresariales?</summary>
Ofrecemos precios empresariales por asiento. Si tiene su propia puerta de enlace LLM, no cobramos por los tokens utilizados. Para obtener más detalles, **<a href={email}>contáctenos</a>** para obtener una cotización personalizada basada en las necesidades de su organización.
</details>
<details>
<summary>¿Están mis datos seguros con OpenCode Enterprise?</summary>
Sí. OpenCode no almacena su código ni datos de contexto. Todo el procesamiento se realiza localmente o mediante llamadas directas API a su proveedor de IA. Con la configuración central y la integración de SSO, sus datos permanecen seguros dentro de la infraestructura de su organización.
</details>
<details>
<summary>¿Podemos utilizar nuestro propio registro privado de NPM?</summary>
OpenCode admite registros privados npm a través del soporte de archivos `.npmrc` nativo de Bun. Si su organización utiliza un registro privado, como JFrog Artifactory, Nexus o similar, asegúrese de que los desarrolladores estén autenticados antes de ejecutar OpenCode.
Para configurar la autenticación con su registro privado:
```bash
npm login --registry=https://your-company.jfrog.io/api/npm/npm-virtual/
```
Esto crea `~/.npmrc` con detalles de autenticación. OpenCode automáticamente
recoge esto.
:::precaución
Debe iniciar sesión en el registro privado antes de ejecutar OpenCode.
:::
Alternativamente, puede configurar manualmente un archivo `.npmrc`:
```bash title="~/.npmrc"
registry=https://your-company.jfrog.io/api/npm/npm-virtual/
//your-company.jfrog.io/api/npm/npm-virtual/:_authToken=${NPM_AUTH_TOKEN}
```
Los desarrolladores deben iniciar sesión en el registro privado antes de ejecutar OpenCode para garantizar que los paquetes se puedan instalar desde su registro empresarial.
</details>

View File

@@ -0,0 +1,130 @@
---
title: Formateadores
description: OpenCode utiliza formateadores específicos del idioma.
---
OpenCode formatea automáticamente los archivos después de escribirlos o editarlos utilizando formateadores específicos del idioma. Esto garantiza que el código generado siga los estilos de código de su proyecto.
---
## Incorporado
OpenCode viene con varios formateadores integrados para lenguajes y marcos populares. A continuación se muestra una lista de los formateadores, las extensiones de archivo compatibles y los comandos u opciones de configuración que necesita.
| Formateador | Extensiones | Requisitos |
| -------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| gobierno | .ir | Comando `gofmt` disponible |
| mezclar | .ex, .exs, .eex, .heex, .leex, .neex, .sface | Comando `mix` disponible |
| más bonita | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml y [más](https://prettier.io/docs/en/index.html) | dependencia `prettier` en `package.json` |
| bioma | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml y [más](https://biomejs.dev/) | `biome.json(c)` archivo de configuración |
| zigzag | .zig, .zon | Comando `zig` disponible |
| formato clang | .c, .cpp, .h, .hpp, .ino y [más](https://clang.llvm.org/docs/ClangFormat.html) | `.clang-format` archivo de configuración |
| klint | .kt, .kts | Comando `ktlint` disponible |
| gorguera | .py, .pyi | Comando `ruff` disponible con configuración |
| óxido | .rs | Comando `rustfmt` disponible |
| cargafmt | .rs | Comando `cargo fmt` disponible |
| ultravioleta | .py, .pyi | Comando `uv` disponible |
| rubocop | .rb, .rake, .gemspec, .ru | Comando `rubocop` disponible |
| estándarrb | .rb, .rake, .gemspec, .ru | Comando `standardrb` disponible |
| embellecedor html | .erb, .html.erb | Comando `htmlbeautifier` disponible |
| aire | .R | Comando `air` disponible |
| dardo | .dardo | Comando `dart` disponible |
| formato ocaml | .ml, .mli | Comando `ocamlformat` disponible y archivo de configuración `.ocamlformat` |
| terraformar | .tf, .tfvars | Comando `terraform` disponible |
| brillo | .brillo | Comando `gleam` disponible |
| nixfmt | .nix | Comando `nixfmt` disponible |
| shfmt | .sh, .bash | Comando `shfmt` disponible |
| pinta | .php | dependencia `laravel/pint` en `composer.json` |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | Dependencia de `oxfmt` en `package.json` y un [indicador de variable de entorno experimental](/docs/cli/#experimental) |
| ormolu | .hs | Comando `ormolu` disponible |
Entonces, si su proyecto tiene `prettier` en su `package.json`, OpenCode lo usará automáticamente.
---
## Cómo funciona
Cuando OpenCode escribe o edita un archivo,:
1. Comprueba la extensión del archivo con todos los formateadores habilitados.
2. Ejecuta el comando de formateo apropiado en el archivo.
3. Aplica los cambios de formato automáticamente.
Este proceso ocurre en segundo plano, lo que garantiza que los estilos de su código se mantengan sin ningún paso manual.
---
## Configurar
Puede personalizar los formateadores a través de la sección `formatter` en su configuración OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}
```
Cada configuración del formateador admite lo siguiente:
| Propiedad | Tipo | Descripción |
| ------------- | -------- | ------------------------------------------------------- |
| `disabled` | booleano | Establezca esto en `true` para deshabilitar el formateador |
| `command` | cadena[] | El comando a ejecutar para formatear |
| `environment` | objeto | Variables de entorno para configurar al ejecutar el formateador |
| `extensions` | cadena[] | Extensiones de archivo que este formateador debería manejar |
Veamos algunos ejemplos.
---
### Deshabilitar formateadores
Para deshabilitar **todos** los formateadores globalmente, configure `formatter` en `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}
```
Para deshabilitar un formateador **específico**, establezca `disabled` en `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}
```
---
### Formateadores personalizados
Puede anular los formateadores integrados o agregar otros nuevos especificando el comando, las variables de entorno y las extensiones de archivo:
```json title="opencode.json" {4-14}
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}
```
El marcador de posición **`$FILE`** en el comando se reemplazará con la ruta al archivo que se está formateando.

View File

@@ -0,0 +1,321 @@
---
title: GitHub
description: Utilice OpenCode en problemas y solicitudes de extracción de GitHub.
---
OpenCode se integra con su flujo de trabajo GitHub. Mencione `/opencode` o `/oc` en su comentario y OpenCode ejecutará tareas dentro de su corredor de acciones GitHub.
---
## Características
- **Problemas de clasificación**: Pídele a OpenCode que investigue un problema y te lo explique.
- **Reparar e implementar**: pídale a OpenCode que solucione un problema o implemente una función. Y funcionará en una nueva sucursal y enviará un PR con todos los cambios.
- **Seguro**: OpenCode se ejecuta dentro de los corredores de tu GitHub.
---
## Instalación
Ejecute el siguiente comando en un proyecto que se encuentra en un repositorio GitHub:
```bash
opencode github install
```
Esto lo guiará a través de la instalación de la aplicación GitHub, la creación del flujo de trabajo y la configuración de secretos.
---
### Configuración manual
O puede configurarlo manualmente.
1. **Instale la aplicación GitHub**
Dirígete a [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Asegúrese de que esté instalado en el repositorio de destino.
2. **Agregar el flujo de trabajo**
Agregue el siguiente archivo de flujo de trabajo a `.github/workflows/opencode.yml` en su repositorio. Asegúrese de configurar las claves `model` apropiadas y API requeridas en `env`.
```yml title=".github/workflows/opencode.yml" {24,26}
name: opencode
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
opencode:
if: |
contains(github.event.comment.body, '/oc') ||
contains(github.event.comment.body, '/opencode')
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
- name: Run OpenCode
uses: anomalyco/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
# share: true
# github_token: xxxx
```
3. **Guarda las claves API en secretos**
En la **configuración** de tu organización o proyecto, expande **Secretos y variables** a la izquierda y selecciona **Acciones**. Y agregue las claves API requeridas.
---
## Configuración
- `model`: El modelo a usar con OpenCode. Toma el formato de `provider/model`. Esto es **obligatorio**.
- `agent`: El agente a utilizar. Debe ser un agente primario. Vuelve a `default_agent` desde la configuración o `"build"` si no se encuentra.
- `share`: si se comparte la sesión OpenCode. El valor predeterminado es **verdadero** para repositorios públicos.
- `prompt`: mensaje personalizado opcional para anular el comportamiento predeterminado. Utilice esto para personalizar cómo OpenCode procesa las solicitudes.
- `token`: token de acceso GitHub opcional para realizar operaciones como crear comentarios, confirmar cambios y abrir solicitudes de extracción. De forma predeterminada, OpenCode usa el token de acceso a la instalación de la aplicación OpenCode GitHub, por lo que las confirmaciones, los comentarios y las solicitudes de extracción aparecen como provenientes de la aplicación.
Alternativamente, puede usar el GitHub Action Runner [`GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) incorporado sin instalar la aplicación OpenCode GitHub. Solo asegúrese de otorgar los permisos necesarios en su flujo de trabajo:
```yaml
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
```
También puede utilizar [tokens de acceso personal](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) si lo prefiere.
---
## Eventos admitidos
OpenCode puede desencadenarse por los siguientes eventos GitHub:
| Tipo de evento | Activado por | Detalles |
| ----------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `issue_comment` | Comentar sobre un tema o PR | Mencione `/opencode` o `/oc` en su comentario. OpenCode lee el contexto y puede crear ramas, abrir relaciones públicas o responder. |
| `pull_request_review_comment` | Comente líneas de código específicas en un PR | Mencione `/opencode` o `/oc` mientras revisa el código. OpenCode recibe la ruta del archivo, los números de línea y el contexto de diferencias. |
| `issues` | Número abierto o editado | Activa automáticamente OpenCode cuando se crean o modifican problemas. Requiere entrada `prompt`. |
| `pull_request` | PR abierto o actualizado | Activa automáticamente OpenCode cuando los PR se abren, sincronizan o vuelven a abrir. Útil para revisiones automatizadas. |
| `schedule` | Programación basada en cron | Ejecute OpenCode según una programación. Requiere entrada `prompt`. La salida va a registros y relaciones públicas (no hay temas que comentar). |
| `workflow_dispatch` | Activador manual desde GitHub UI | Active OpenCode a pedido a través de la pestaña Acciones. Requiere entrada `prompt`. La salida va a registros y relaciones públicas. |
### Ejemplo de programación
Ejecute OpenCode según una programación para realizar tareas automatizadas:
```yaml title=".github/workflows/opencode-scheduled.yml"
name: Scheduled OpenCode Task
on:
schedule:
- cron: "0 9 * * 1" # Every Monday at 9am UTC
jobs:
opencode:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Run OpenCode
uses: anomalyco/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
prompt: |
Review the codebase for any TODO comments and create a summary.
If you find issues worth addressing, open an issue to track them.
```
Para eventos programados, la entrada `prompt` es **obligatoria** ya que no hay comentarios del que extraer instrucciones. Los flujos de trabajo programados se ejecutan sin un contexto de usuario para verificar los permisos, por lo que el flujo de trabajo debe otorgar `contents: write` y `pull-requests: write` si espera que OpenCode cree ramas o PR.
---
### Ejemplo de solicitud de extracción
Revisar automáticamente los PR cuando se abren o actualizan:
```yaml title=".github/workflows/opencode-review.yml"
name: opencode-review
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
jobs:
review:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
pull-requests: read
issues: read
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: anomalyco/opencode/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
model: anthropic/claude-sonnet-4-20250514
use_github_token: true
prompt: |
Review this pull request:
- Check for code quality issues
- Look for potential bugs
- Suggest improvements
```
Para los eventos `pull_request`, si no se proporciona `prompt`, OpenCode revisa de forma predeterminada la solicitud de extracción.
---
### Ejemplo de clasificación de problemas
Clasifique automáticamente nuevos problemas. Este ejemplo filtra cuentas con más de 30 días para reducir el spam:
```yaml title=".github/workflows/opencode-triage.yml"
name: Issue Triage
on:
issues:
types: [opened]
jobs:
triage:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
steps:
- name: Check account age
id: check
uses: actions/github-script@v7
with:
script: |
const user = await github.rest.users.getByUsername({
username: context.payload.issue.user.login
});
const created = new Date(user.data.created_at);
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
return days >= 30;
result-encoding: string
- uses: actions/checkout@v6
if: steps.check.outputs.result == 'true'
with:
persist-credentials: false
- uses: anomalyco/opencode/github@latest
if: steps.check.outputs.result == 'true'
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
with:
model: anthropic/claude-sonnet-4-20250514
prompt: |
Review this issue. If there's a clear fix or relevant docs:
- Provide documentation links
- Add error handling guidance for code examples
Otherwise, do not comment.
```
Para eventos `issues`, la entrada `prompt` es **obligatoria** ya que no hay ningún comentario del que extraer instrucciones.
---
## Avisos personalizados
Anule el mensaje predeterminado para personalizar el comportamiento de OpenCode para su flujo de trabajo.
```yaml title=".github/workflows/opencode.yml"
- uses: anomalyco/opencode/github@latest
with:
model: anthropic/claude-sonnet-4-5
prompt: |
Review this pull request:
- Check for code quality issues
- Look for potential bugs
- Suggest improvements
```
Esto es útil para hacer cumplir criterios de revisión específicos, estándares de codificación o áreas de enfoque relevantes para su proyecto.
---
## Ejemplos
A continuación se muestran algunos ejemplos de cómo puede utilizar OpenCode en GitHub.
- **Explica un problema**
Agregue este comentario en una edición GitHub.
```
/opencode explain this issue
```
OpenCode leerá el hilo completo, incluidos todos los comentarios, y responderá con una explicación clara.
- **Solucionar un problema**
En un problema GitHub, diga:
```
/opencode fix this
```
Y OpenCode creará una nueva rama, implementará los cambios y abrirá un PR con los cambios.
- **Revisar relaciones públicas y realizar cambios**
Deja el siguiente comentario en un GitHub PR.
```
Delete the attachment from S3 when the note is removed /oc
```
OpenCode implementará el cambio solicitado y lo comprometerá con el mismo PR.
- **Revisar líneas de código específicas**
Deje un comentario directamente en las líneas de código en la pestaña "Archivos" del PR. OpenCode detecta automáticamente el archivo, los números de línea y el contexto de diferencias para proporcionar respuestas precisas.
```
[Comment on specific lines in Files tab]
/oc add error handling here
```
Al comentar líneas específicas, OpenCode recibe:
- El archivo exacto que se está revisando.
- Las líneas de código específicas.
- El contexto diferencial circundante.
- Información del número de línea
Esto permite solicitudes más específicas sin necesidad de especificar rutas de archivo o números de línea manualmente.

View File

@@ -0,0 +1,195 @@
---
title: GitLab
description: Utilice OpenCode en problemas GitLab y solicitudes de fusión.
---
OpenCode se integra con su flujo de trabajo GitLab a través de su canal de CI/CD GitLab o con GitLab Duo.
En ambos casos, OpenCode se ejecutará en tus corredores GitLab.
---
## GitLab CI
OpenCode funciona en una tubería GitLab normal. Puede integrarlo en una canalización como un [componente de CI](https://docs.gitlab.com/ee/ci/components/)
Aquí estamos utilizando un componente CI/CD creado por la comunidad para OpenCode — [nagyv/gitlab-opencode](https://gitlab.com/nagyv/gitlab-opencode).
---
### Características
- **Usar configuración personalizada por trabajo**: configure OpenCode con un directorio de configuración personalizado, por ejemplo `./config/#custom-directory` para habilitar o deshabilitar la funcionalidad por invocación de OpenCode.
- **Configuración mínima**: el componente CI configura OpenCode en segundo plano, solo necesita crear la configuración OpenCode y el mensaje inicial.
- **Flexible**: el componente CI admite varias entradas para personalizar su comportamiento
---
### Configuración
1. Guarde su OpenCode autenticación JSON como variables de entorno de CI de tipo de archivo en **Configuración** > **CI/CD** > **Variables**. Asegúrate de marcarlos como "Enmascarados y ocultos".
2. Agregue lo siguiente a su archivo `.gitlab-ci.yml`.
```yaml title=".gitlab-ci.yml"
include:
- component: $CI_SERVER_FQDN/nagyv/gitlab-opencode/opencode@2
inputs:
config_dir: ${CI_PROJECT_DIR}/opencode-config
auth_json: $OPENCODE_AUTH_JSON # The variable name for your OpenCode authentication JSON
command: optional-custom-command
message: "Your prompt here"
```
Para obtener más entradas y casos de uso, [consulte los documentos](https://gitlab.com/explore/catalog/nagyv/gitlab-opencode) de este componente.
---
## GitLab Dúo
OpenCode se integra con su flujo de trabajo GitLab.
Mencione `@opencode` en un comentario y OpenCode ejecutará tareas dentro de su canal de CI GitLab.
---
### Características
- **Problemas de clasificación**: Pídele a OpenCode que investigue un problema y te lo explique.
- **Reparar e implementar**: pídale a OpenCode que solucione un problema o implemente una función.
Creará una nueva rama y generará una solicitud de fusión con los cambios.
- **Seguro**: OpenCode se ejecuta en tus corredores GitLab.
---
### Configuración
OpenCode se ejecuta en su canalización de CI/CD GitLab. Esto es lo que necesitará para configurarlo:
:::consejo
Consulte los [**GitLab documentos**](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) para obtener instrucciones actualizadas.
:::
1. Configure su entorno GitLab
2. Configurar CI/CD
3. Obtenga una clave API de proveedor de modelo de IA
4. Crea una cuenta de servicio
5. Configurar variables CI/CD
6. Cree un archivo de configuración de flujo, aquí hay un ejemplo:
<details>
<summary>Configuración de flujo</summary>
```yaml
image: node:22-slim
commands:
- echo "Installing opencode"
- npm install --global opencode-ai
- echo "Installing glab"
- export GITLAB_TOKEN=$GITLAB_TOKEN_OPENCODE
- apt-get update --quiet && apt-get install --yes curl wget gpg git && rm --recursive --force /var/lib/apt/lists/*
- curl --silent --show-error --location "https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository" | bash
- apt-get install --yes glab
- echo "Configuring glab"
- echo $GITLAB_HOST
- echo "Creating OpenCode auth configuration"
- mkdir --parents ~/.local/share/opencode
- |
cat > ~/.local/share/opencode/auth.json << EOF
{
"anthropic": {
"type": "api",
"key": "$ANTHROPIC_API_KEY"
}
}
EOF
- echo "Configuring git"
- git config --global user.email "opencode@gitlab.com"
- git config --global user.name "OpenCode"
- echo "Testing glab"
- glab issue list
- echo "Running OpenCode"
- |
opencode run "
You are an AI assistant helping with GitLab operations.
Context: $AI_FLOW_CONTEXT
Task: $AI_FLOW_INPUT
Event: $AI_FLOW_EVENT
Please execute the requested task using the available GitLab tools.
Be thorough in your analysis and provide clear explanations.
<important>
Please use the glab CLI to access data from GitLab. The glab CLI has already been authenticated. You can run the corresponding commands.
If you are asked to summarize an MR or issue or asked to provide more information then please post back a note to the MR/Issue so that the user can see it.
You don't need to commit or push up changes, those will be done automatically based on the file changes you make.
</important>
"
- git checkout --branch $CI_WORKLOAD_REF origin/$CI_WORKLOAD_REF
- echo "Checking for git changes and pushing if any exist"
- |
if ! git diff --quiet || ! git diff --cached --quiet || [ --not --zero "$(git ls-files --others --exclude-standard)" ]; then
echo "Git changes detected, adding and pushing..."
git add .
if git diff --cached --quiet; then
echo "No staged changes to commit"
else
echo "Committing changes to branch: $CI_WORKLOAD_REF"
git commit --message "Codex changes"
echo "Pushing changes up to $CI_WORKLOAD_REF"
git push https://gitlab-ci-token:$GITLAB_TOKEN@$GITLAB_HOST/gl-demo-ultimate-dev-ai-epic-17570/test-java-project.git $CI_WORKLOAD_REF
echo "Changes successfully pushed"
fi
else
echo "No git changes detected, skipping push"
fi
variables:
- ANTHROPIC_API_KEY
- GITLAB_TOKEN_OPENCODE
- GITLAB_HOST
```
</details>
Puede consultar los [GitLab CLI documentos de los agentes](https://docs.gitlab.com/user/duo_agent_platform/agent_assistant/) para obtener instrucciones detalladas.
---
### Ejemplos
A continuación se muestran algunos ejemplos de cómo puede utilizar OpenCode en GitLab.
:::consejo
Puede configurarlo para utilizar una frase de activación diferente a `@opencode`.
:::
- **Explica un problema**
Agregue este comentario en una edición GitLab.
```
@opencode explain this issue
```
OpenCode leerá el problema y responderá con una explicación clara.
- **Solucionar un problema**
En un problema GitLab, diga:
```
@opencode fix this
```
OpenCode creará una nueva rama, implementará los cambios y abrirá una solicitud de fusión con los cambios.
- **Revisar solicitudes de fusión**
Deje el siguiente comentario sobre una solicitud de fusión GitLab.
```
@opencode review this merge request
```
OpenCode revisará la solicitud de fusión y brindará comentarios.

View File

@@ -0,0 +1,48 @@
---
title: IDE
description: La extensión OpenCode para VS Code, Cursor y otros IDE
---
OpenCode se integra con VS Code, Cursor o cualquier IDE que admita un terminal. Simplemente ejecute `opencode` en la terminal para comenzar.
---
## Uso
- **Inicio rápido**: use `Cmd+Esc` (Mac) o `Ctrl+Esc` (Windows/Linux) para abrir OpenCode en una vista de terminal dividida, o enfoque una sesión de terminal existente si ya se está ejecutando una.
- **Nueva sesión**: use `Cmd+Shift+Esc` (Mac) o `Ctrl+Shift+Esc` (Windows/Linux) para iniciar una nueva sesión de terminal OpenCode, incluso si ya hay una abierta. También puede hacer clic en el botón OpenCode en la interfaz de usuario.
- **Conciencia del contexto**: comparte automáticamente tu selección o pestaña actual con OpenCode.
- **Atajos de referencia de archivos**: utilice `Cmd+Option+K` (Mac) o `Alt+Ctrl+K` (Linux/Windows) para insertar referencias de archivos. Por ejemplo, `@File#L37-42`.
---
## Instalación
Para instalar OpenCode en VS Code y bifurcaciones populares como Cursor, Windsurf, VSCodium:
1. Abra VS Code
2. Abra el terminal integrado
3. Ejecute `opencode`: la extensión se instala automáticamente
Si, por otro lado, desea utilizar su propio IDE cuando ejecuta `/editor` o `/export` desde TUI, deberá configurar `export EDITOR="code --wait"`. [Más información](/docs/tui/#editor-setup).
---
### Instalación manual
Busque **OpenCode** en Extension Marketplace y haga clic en **Instalar**.
---
### Solución de problemas
Si la extensión no se instala automáticamente:
- Asegúrese de estar ejecutando `opencode` en el terminal integrado.
- Confirme que el CLI para su IDE esté instalado:
- Para VS Code: comando `code`
- Para cursor: comando `cursor`
- Para Windsurf: comando `windsurf`
- Para VSCodium: comando `codium`
- Si no, ejecute `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux) y busque "Comando Shell: Instalar comando 'código' en RUTA" (o el equivalente para su IDE)
- Asegúrese de que VS Code tenga permiso para instalar extensiones.

View File

@@ -0,0 +1,359 @@
---
title: Introducción
description: Comience con OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
import config from "../../../../config.mjs"
export const console = config.console
[**OpenCode**](/) es un agente de codificación de IA de código abierto. Está disponible como interfaz basada en terminal, aplicación de escritorio o extensión IDE.
![OpenCode TUI con el tema opencode](../../../assets/lander/screenshot.png)
Empecemos.
---
#### Requisitos previos
Para usar OpenCode en su terminal, necesitará:
1. Un emulador de terminal moderno como:
- [WezTerm](https://wezterm.org), multiplataforma
- [Alacritty](https://alacritty.org), multiplataforma
- [Fantasmal](https://ghostty.org), Linux y macOS
- [Gatito](https://sw.kovidgoyal.net/kitty/), Linux y macOS
2. API claves para los LLM proveedores que desea utilizar.
---
## Instalar
La forma más sencilla de instalar OpenCode es mediante el script de instalación.
```bash
curl -fsSL https://opencode.ai/install | bash
```
También puedes instalarlo con los siguientes comandos:
- **Usando Node.js**
<Tabs>
<TabItem label="npm">
```bash
npm install -g opencode-ai
```
</TabItem>
<TabItem label="Bun">
```bash
bun install -g opencode-ai
```
</TabItem>
<TabItem label="pnpm">
```bash
pnpm install -g opencode-ai
```
</TabItem>
<TabItem label="Yarn">
```bash
yarn global add opencode-ai
```
</TabItem>
</Tabs>
- **Usando Homebrew en macOS y Linux**
```bash
brew install anomalyco/tap/opencode
```
> Recomendamos utilizar el grifo OpenCode para las versiones más actualizadas. La fórmula oficial `brew install opencode` la mantiene el equipo Homebrew y se actualiza con menos frecuencia.
- **Usando Paru en Arch Linux**
```bash
paru -S opencode-bin
```
#### Windows
:::tip[Recomendado: Usar WSL]
Para obtener la mejor experiencia en Windows, recomendamos utilizar [Subsistema Windows para Linux (WSL)](/docs/windows-wsl). Proporciona un mejor rendimiento y compatibilidad total con las funciones de OpenCode.
:::
- **Usando Chocolatey**
```bash
choco install opencode
```
- **Usando Scoop**
```bash
scoop install opencode
```
- **Usando NPM**
```bash
npm install -g opencode-ai
```
- **Usando Mise**
```bash
mise use -g github:anomalyco/opencode
```
- **Usando Docker**
```bash
docker run -it --rm ghcr.io/anomalyco/opencode
```
Actualmente se encuentra en progreso el soporte para instalar OpenCode en Windows usando Bun.
También puede obtener el binario de [Versiones](https://github.com/anomalyco/opencode/releases).
---
## Configurar
Con OpenCode puedes usar cualquier proveedor LLM configurando sus claves API.
Si es nuevo en el uso de proveedores LLM, le recomendamos usar [OpenCode Zen](/docs/zen).
Es una lista seleccionada de modelos que han sido probados y verificados por OpenCode
equipo.
1. Ejecute el comando `/connect` en TUI, seleccione opencode y diríjase a [opencode.ai/auth](https://opencode.ai/auth).
```txt
/connect
```
2. Inicie sesión, agregue sus datos de facturación y copie su clave API.
3. Pega tu clave API.
```txt
┌ API key
└ enter
```
Alternativamente, puede seleccionar uno de los otros proveedores. [Más información](/docs/providers#directory).
---
## Inicializar
Ahora que ha configurado un proveedor, puede navegar a un proyecto que
quieres trabajar.
```bash
cd /path/to/project
```
Y ejecute OpenCode.
```bash
opencode
```
A continuación, inicialice OpenCode para el proyecto ejecutando el siguiente comando.
```bash frame="none"
/init
```
Esto hará que OpenCode analice su proyecto y cree un archivo `AGENTS.md` en
la raíz del proyecto.
:::consejo
Debes enviar el archivo `AGENTS.md` de tu proyecto a Git.
:::
Esto ayuda a OpenCode a comprender la estructura del proyecto y los patrones de codificación.
usado.
---
## Uso
Ahora está listo para usar OpenCode para trabajar en su proyecto. No dudes en preguntarlo
¡cualquier cosa!
Si es nuevo en el uso de un agente de codificación de IA, aquí hay algunos ejemplos que podrían
ayuda.
---
### Hacer preguntas
Puede pedirle a OpenCode que le explique el código base.
:::consejo
Utilice la tecla `@` para realizar una búsqueda aproximada de archivos en el proyecto.
:::
```txt frame="none" "@packages/functions/src/api/index.ts"
How is authentication handled in @packages/functions/src/api/index.ts
```
Esto es útil si hay una parte del código base en la que no trabajaste.
---
### Agregar funciones
Puede pedirle a OpenCode que agregue nuevas funciones a su proyecto. Aunque primero recomendamos pedirle que cree un plan.
1. **Crea un plan**
OpenCode tiene un _modo Plan_ que desactiva su capacidad para realizar cambios y
en su lugar, sugiera _cómo_ implementará la función.
Cambie a él usando la tecla **Tab**. Verás un indicador para esto en la esquina inferior derecha.
```bash frame="none" title="Switch to Plan mode"
<TAB>
```
Ahora describamos lo que queremos que haga.
```txt frame="none"
When a user deletes a note, we'd like to flag it as deleted in the database.
Then create a screen that shows all the recently deleted notes.
From this screen, the user can undelete a note or permanently delete it.
```
Quiere darle a OpenCode suficientes detalles para entender lo que quiere. ayuda
hablar con él como si estuviera hablando con un desarrollador junior de su equipo.
:::consejo
Dale a OpenCode mucho contexto y ejemplos para ayudarlo a comprender lo que
desear.
:::
2. **Repetir el plan**
Una vez que le proporcione un plan, puede enviarle comentarios o agregar más detalles.
```txt frame="none"
We'd like to design this new screen using a design I've used before.
[Image #1] Take a look at this image and use it as a reference.
```
:::consejo
Arrastre y suelte imágenes en la terminal para agregarlas al mensaje.
:::
OpenCode puede escanear cualquier imagen que le proporcione y agregarla al mensaje. Puede
Haga esto arrastrando y soltando una imagen en la terminal.
3. **Crea la función**
Una vez que se sienta cómodo con el plan, vuelva al _modo de construcción_
presionando la tecla **Tab** nuevamente.
```bash frame="none"
<TAB>
```
Y pidiéndole que haga los cambios.
```bash frame="none"
Sounds good! Go ahead and make the changes.
```
---
### Realizar cambios
Para cambios más sencillos, puede pedirle a OpenCode que lo construya directamente.
sin tener que revisar el plan primero.
```txt frame="none" "@packages/functions/src/settings.ts" "@packages/functions/src/notes.ts"
We need to add authentication to the /settings route. Take a look at how this is
handled in the /notes route in @packages/functions/src/notes.ts and implement
the same logic in @packages/functions/src/settings.ts
```
Desea asegurarse de proporcionar una buena cantidad de detalles para que OpenCode tome la decisión correcta.
cambios.
---
### Deshacer cambios
Digamos que le pides a OpenCode que haga algunos cambios.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Pero te das cuenta de que no es lo que querías. Puedes **deshacer** los cambios
usando el comando `/undo`.
```bash frame="none"
/undo
```
OpenCode ahora revertirá los cambios que realizó y mostrará su mensaje original
de nuevo.
```txt frame="none" "@packages/functions/src/api/index.ts"
Can you refactor the function in @packages/functions/src/api/index.ts?
```
Desde aquí puedes modificar el mensaje y pedirle a OpenCode que vuelva a intentarlo.
:::consejo
Puede ejecutar `/undo` varias veces para deshacer varios cambios.
:::
O **puedes rehacer** los cambios usando el comando `/redo`.
```bash frame="none"
/redo
```
---
## Compartir
Las conversaciones que tengas con OpenCode pueden ser [compartidas con tu
equipo](/docs/compartir).
```bash frame="none"
/share
```
Esto creará un enlace a la conversación actual y lo copiará en su portapapeles.
:::nota
Las conversaciones no se comparten de forma predeterminada.
:::
Aquí hay una [conversación de ejemplo](https://opencode.ai/s/4XP1fce5) con OpenCode.
---
## Personalizar
¡Y eso es todo! Ahora eres un profesional en el uso de OpenCode.
Para personalizarlo, recomendamos [elegir un tema](/docs/themes), [personalizar las combinaciones de teclas](/docs/keybinds), [configurar formateadores de código](/docs/formatters), [crear comandos personalizados](/docs/commands) o jugar con la [configuración OpenCode](/docs/config).

View File

@@ -0,0 +1,192 @@
---
title: combinaciones de teclas
description: Personaliza tus combinaciones de teclas.
---
OpenCode tiene una lista de combinaciones de teclas que puede personalizar a través de la configuración OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {
"leader": "ctrl+x",
"app_exit": "ctrl+c,ctrl+d,<leader>q",
"editor_open": "<leader>e",
"theme_list": "<leader>t",
"sidebar_toggle": "<leader>b",
"scrollbar_toggle": "none",
"username_toggle": "none",
"status_view": "<leader>s",
"tool_details": "none",
"session_export": "<leader>x",
"session_new": "<leader>n",
"session_list": "<leader>l",
"session_timeline": "<leader>g",
"session_fork": "none",
"session_rename": "none",
"session_share": "none",
"session_unshare": "none",
"session_interrupt": "escape",
"session_compact": "<leader>c",
"session_child_cycle": "<leader>right",
"session_child_cycle_reverse": "<leader>left",
"session_parent": "<leader>up",
"messages_page_up": "pageup,ctrl+alt+b",
"messages_page_down": "pagedown,ctrl+alt+f",
"messages_line_up": "ctrl+alt+y",
"messages_line_down": "ctrl+alt+e",
"messages_half_page_up": "ctrl+alt+u",
"messages_half_page_down": "ctrl+alt+d",
"messages_first": "ctrl+g,home",
"messages_last": "ctrl+alt+g,end",
"messages_next": "none",
"messages_previous": "none",
"messages_copy": "<leader>y",
"messages_undo": "<leader>u",
"messages_redo": "<leader>r",
"messages_last_user": "none",
"messages_toggle_conceal": "<leader>h",
"model_list": "<leader>m",
"model_cycle_recent": "f2",
"model_cycle_recent_reverse": "shift+f2",
"model_cycle_favorite": "none",
"model_cycle_favorite_reverse": "none",
"variant_cycle": "ctrl+t",
"command_list": "ctrl+p",
"agent_list": "<leader>a",
"agent_cycle": "tab",
"agent_cycle_reverse": "shift+tab",
"input_clear": "ctrl+c",
"input_paste": "ctrl+v",
"input_submit": "return",
"input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
"input_move_left": "left,ctrl+b",
"input_move_right": "right,ctrl+f",
"input_move_up": "up",
"input_move_down": "down",
"input_select_left": "shift+left",
"input_select_right": "shift+right",
"input_select_up": "shift+up",
"input_select_down": "shift+down",
"input_line_home": "ctrl+a",
"input_line_end": "ctrl+e",
"input_select_line_home": "ctrl+shift+a",
"input_select_line_end": "ctrl+shift+e",
"input_visual_line_home": "alt+a",
"input_visual_line_end": "alt+e",
"input_select_visual_line_home": "alt+shift+a",
"input_select_visual_line_end": "alt+shift+e",
"input_buffer_home": "home",
"input_buffer_end": "end",
"input_select_buffer_home": "shift+home",
"input_select_buffer_end": "shift+end",
"input_delete_line": "ctrl+shift+d",
"input_delete_to_line_end": "ctrl+k",
"input_delete_to_line_start": "ctrl+u",
"input_backspace": "backspace,shift+backspace",
"input_delete": "ctrl+d,delete,shift+delete",
"input_undo": "ctrl+-,super+z",
"input_redo": "ctrl+.,super+shift+z",
"input_word_forward": "alt+f,alt+right,ctrl+right",
"input_word_backward": "alt+b,alt+left,ctrl+left",
"input_select_word_forward": "alt+shift+f,alt+shift+right",
"input_select_word_backward": "alt+shift+b,alt+shift+left",
"input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
"input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
"history_previous": "up",
"history_next": "down",
"terminal_suspend": "ctrl+z",
"terminal_title_toggle": "none",
"tips_toggle": "<leader>h",
"display_thinking": "none"
}
}
```
---
## Tecla de líder
OpenCode usa una tecla `leader` para la mayoría de las combinaciones de teclas. Esto evita conflictos en tu terminal.
De forma predeterminada, `ctrl+x` es la tecla principal y la mayoría de las acciones requieren que primero presione la tecla principal y luego el acceso directo. Por ejemplo, para iniciar una nueva sesión, primero presione `ctrl+x` y luego presione `n`.
No es necesario utilizar una tecla líder para las combinaciones de teclas, pero le recomendamos que lo haga.
---
## Desactivar combinación de teclas
Puede deshabilitar una combinación de teclas agregando la clave a su configuración con un valor de "ninguno".
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"keybinds": {
"session_compact": "none"
}
}
```
---
## Atajos de mensajes de escritorio
La entrada de solicitud de la aplicación de escritorio OpenCode admite atajos comunes de estilo Readline/Emacs para editar texto. Estos están integrados y actualmente no se pueden configurar a través de `opencode.json`.
| Atajo | Acción |
| -------- | ---------------------------------------- |
| `ctrl+a` | Mover al inicio de la línea actual |
| `ctrl+e` | Mover al final de la línea actual |
| `ctrl+b` | Mover el cursor hacia atrás un carácter |
| `ctrl+f` | Mover el cursor hacia adelante un carácter |
| `alt+b` | Mover el cursor hacia atrás una palabra |
| `alt+f` | Mover el cursor hacia adelante una palabra |
| `ctrl+d` | Eliminar carácter debajo del cursor |
| `ctrl+k` | Matar hasta el final de la línea |
| `ctrl+u` | Matar al inicio de la línea |
| `ctrl+w` | Matar palabra anterior |
| `alt+d` | Mata la siguiente palabra |
| `ctrl+t` | Transponer caracteres |
| `ctrl+g` | Cancelar ventanas emergentes/abortar la respuesta en ejecución |
---
## Mayús+Entrar
Algunos terminales no envían teclas modificadoras con Enter de forma predeterminada. Es posible que necesite configurar su terminal para enviar `Shift+Enter` como secuencia de escape.
### Windows Terminal
Abra su `settings.json` en:
```
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
```
Agregue esto a la matriz `actions` de nivel raíz:
```json
"actions": [
{
"command": {
"action": "sendInput",
"input": "\u001b[13;2u"
},
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Agregue esto a la matriz `keybindings` de nivel raíz:
```json
"keybindings": [
{
"keys": "shift+enter",
"id": "User.sendInput.ShiftEnterCustom"
}
]
```
Guarde el archivo y reinicie Windows Terminal o abra una nueva pestaña.

View File

@@ -0,0 +1,188 @@
---
title: LSP Servidores
description: OpenCode se integra con sus servidores LSP.
---
OpenCode se integra con su protocolo de servidor de idiomas (LSP) para ayudar a LLM a interactuar con su código base. Utiliza diagnósticos para proporcionar retroalimentación al LLM.
---
## Incorporado
OpenCode viene con varios servidores LSP integrados para idiomas populares:
| LSP Servidor | Extensiones | Requisitos |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------ |
| astro | .astro | Autoinstalaciones para proyectos Astro |
| fiesta | .sh, .bash, .zsh, .ksh | Autoinstala el servidor en lenguaje bash |
| sonido metálico | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Instalaciones automáticas para proyectos C/C++ |
| csostenido | .cs | `.NET SDK` instalado |
| clojure-lsp | .clj, .cljs, .cljc, .edn | Comando `clojure-lsp` disponible |
| dardo | .dardo | Comando `dart` disponible |
| deno | .ts, .tsx, .js, .jsx, .mjs | Comando `deno` disponible (detecta automáticamente deno.json/deno.jsonc) |
| elixir-ls | .ex, .exs | Comando `elixir` disponible |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | `eslint` dependencia en proyecto |
| f sostenido | .fs, .fsi, .fsx, .fsscript | `.NET SDK` instalado |
| brillo | .brillo | Comando `gleam` disponible |
| gopls | .ir | Comando `go` disponible |
| hls | .hs, .lhs | Comando `haskell-language-server-wrapper` disponible |
| jdtls | .java | `Java SDK (version 21+)` instalado |
| kotlin-ls | .kt, .kts | Autoinstalaciones para proyectos Kotlin |
| lua-ls | .lua | Autoinstalaciones para proyectos Lua |
| nada | .nix | Comando `nixd` disponible |
| ocaml-lsp | .ml, .mli | Comando `ocamllsp` disponible |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` dependencia en proyecto |
| php intelefense | .php | Autoinstalaciones para proyectos PHP |
| prisma | .prisma | Comando `prisma` disponible |
| derechos de autor | .py, .pyi | Dependencia `pyright` instalada |
| rubí-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Comandos `ruby` y `gem` disponibles |
| óxido | .rs | Comando `rust-analyzer` disponible |
| kit de fuente-lsp | .swift, .objc, .objcpp | `swift` instalado (`xcode` en macOS) |
| esbelto | .esbelto | Autoinstalaciones para proyectos Svelte |
| terraformar | .tf, .tfvars | Instalaciones automáticas desde versiones GitHub |
| diminuto | .tipo, .tipo | Instalaciones automáticas desde versiones GitHub |
| mecanografiado | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | `typescript` dependencia en proyecto |
| vista | .vue | Autoinstalaciones para proyectos Vue |
| yaml-ls | .yaml, .yml | Autoinstala Red Hat yaml-language-server |
| zls | .zig, .zon | Comando `zig` disponible |
Los servidores LSP se habilitan automáticamente cuando se detecta una de las extensiones de archivo anteriores y se cumplen los requisitos.
:::nota
Puede deshabilitar las descargas automáticas del servidor LSP configurando la variable de entorno `OPENCODE_DISABLE_LSP_DOWNLOAD` en `true`.
:::
---
## Cómo funciona
Cuando opencode abre un archivo,:
1. Comprueba la extensión del archivo con todos los servidores LSP habilitados.
2. Inicia el servidor LSP apropiado si aún no se está ejecutando.
---
## Configurar
Puede personalizar los servidores LSP a través de la sección `lsp` en su configuración opencode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
Cada servidor LSP admite lo siguiente:
| Propiedad | Tipo | Descripción |
| ---------------- | -------- | ------------------------------------------------- |
| `disabled` | booleano | Establezca esto en `true` para deshabilitar el servidor LSP |
| `command` | cadena[] | El comando para iniciar el servidor LSP |
| `extensions` | cadena[] | Extensiones de archivo que este servidor LSP debería manejar |
| `env` | objeto | Variables de entorno para configurar al iniciar el servidor |
| `initialization` | objeto | Opciones de inicialización para enviar al servidor LSP |
Veamos algunos ejemplos.
---
### Variables de entorno
Utilice la propiedad `env` para establecer variables de entorno al iniciar el servidor LSP:
```json title="opencode.json" {5-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}
```
---
### Opciones de inicialización
Utilice la propiedad `initialization` para pasar opciones de inicialización al servidor LSP. Estas son configuraciones específicas del servidor enviadas durante la solicitud LSP `initialize`:
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::nota
Las opciones de inicialización varían según el servidor LSP. Consulte la documentación de su servidor LSP para conocer las opciones disponibles.
:::
---
### Deshabilitar servidores LSP
Para deshabilitar **todos** los servidores LSP globalmente, configure `lsp` en `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
Para deshabilitar un servidor LSP **específico**, configure `disabled` en `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
### Servidores LSP personalizados
Puede agregar servidores LSP personalizados especificando el comando y las extensiones de archivo:
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## Información adicional
### PHP Intelefense
PHP Intelephense ofrece funciones premium a través de una clave de licencia. Puede proporcionar una clave de licencia colocando (únicamente) la clave en un archivo de texto en:
- El macOS/Linux: `$HOME/intelephense/licence.txt`
- El Windows: `%USERPROFILE%/intelephense/licence.txt`
El archivo debe contener sólo la clave de licencia sin contenido adicional.

View File

@@ -0,0 +1,511 @@
---
title: MCP servidores
description: Agregue herramientas MCP locales y remotas.
---
Puede agregar herramientas externas a OpenCode utilizando el _Model Context Protocol_ o MCP. OpenCode admite servidores locales y remotos.
Una vez agregadas, las herramientas MCP están disponibles automáticamente para LLM junto con las herramientas integradas.
---
#### Advertencias
Cuando utiliza un servidor MCP, se suma al contexto. Esto puede acumularse rápidamente si tiene muchas herramientas. Por lo que recomendamos tener cuidado con qué servidores MCP utiliza.
:::consejo
Los servidores MCP se agregan a su contexto, por lo que debe tener cuidado con cuáles habilita.
:::
Ciertos servidores MCP, como el servidor GitHub MCP, tienden a agregar muchos tokens y pueden exceder fácilmente el límite de contexto.
---
## Permitir
Puede definir servidores MCP en su [OpenCode Config](https://opencode.ai/docs/config/) en `mcp`. Agregue cada MCP con un nombre único. Puede referirse a ese MCP por su nombre cuando solicite el LLM.
```jsonc title="opencode.jsonc" {6}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"name-of-mcp-server": {
// ...
"enabled": true,
},
"name-of-other-mcp-server": {
// ...
},
},
}
```
También puede desactivar un servidor configurando `enabled` en `false`. Esto es útil si desea desactivar temporalmente un servidor sin eliminarlo de su configuración.
---
### Anulación de los valores predeterminados remotos
Las organizaciones pueden proporcionar servidores MCP predeterminados a través de su punto final `.well-known/opencode`. Estos servidores pueden estar deshabilitados de forma predeterminada, lo que permite a los usuarios optar por los que necesitan.
Para habilitar un servidor específico desde la configuración remota de su organización, agréguelo a su configuración local con `enabled: true`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
Los valores de configuración local anulan los valores predeterminados remotos. Consulte [precedencia de configuración](/docs/config#precedence-order) para obtener más detalles.
---
## Local
Agregue servidores MCP locales usando `type` a `"local"` dentro del objeto MCP.
```jsonc title="opencode.jsonc" {15}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-local-mcp-server": {
"type": "local",
// Or ["bun", "x", "my-mcp-command"]
"command": ["npx", "-y", "my-mcp-command"],
"enabled": true,
"environment": {
"MY_ENV_VAR": "my_env_var_value",
},
},
},
}
```
El comando es cómo se inicia el servidor MCP local. También puede pasar una lista de variables de entorno.
Por ejemplo, así es como puede agregar el servidor de prueba [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
},
},
}
```
Y para usarlo puedo agregar `use the mcp_everything tool` a mis indicaciones.
```txt "mcp_everything"
use the mcp_everything tool to add the number 3 and 4
```
---
#### Opciones
Aquí están todas las opciones para configurar un servidor MCP local.
| Opción | Tipo | Requerido | Descripción |
| ------------- | ------- | -------- | ----------------------------------------------------------------------------------- |
| `type` | Cadena | Y | El tipo de conexión del servidor MCP debe ser `"local"`. |
| `command` | Matriz | Y | Comando y argumentos para ejecutar el servidor MCP. |
| `environment` | Objeto | | Variables de entorno para configurar al ejecutar el servidor. |
| `enabled` | booleano | | Habilite o deshabilite el servidor MCP al inicio. |
| `timeout` | Número | | Tiempo de espera en ms para recuperar herramientas del servidor MCP. El valor predeterminado es 5000 (5 segundos). |
---
## Remoto
Agregue servidores MCP remotos configurando `type` en `"remote"`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote",
"url": "https://my-mcp-server.com",
"enabled": true,
"headers": {
"Authorization": "Bearer MY_API_KEY"
}
}
}
}
```
`url` es la URL del servidor MCP remoto y con la opción `headers` puede pasar una lista de encabezados.
---
#### Opciones
| Opción | Tipo | Requerido | Descripción |
| --------- | ------- | -------- | ----------------------------------------------------------------------------------- |
| `type` | Cadena | Y | El tipo de conexión del servidor MCP debe ser `"remote"`. |
| `url` | Cadena | Y | URL del servidor MCP remoto. |
| `enabled` | booleano | | Habilite o deshabilite el servidor MCP al inicio. |
| `headers` | Objeto | | Encabezados para enviar con la solicitud. |
| `oauth` | Objeto | | OAuth configuración de autenticación. Consulte la sección [OAuth](#oauth) a continuación. |
| `timeout` | Número | | Tiempo de espera en ms para recuperar herramientas del servidor MCP. El valor predeterminado es 5000 (5 segundos). |
---
## OAuth
OpenCode maneja automáticamente la autenticación OAuth para servidores MCP remotos. Cuando un servidor requiere autenticación, OpenCode:
1. Detectar la respuesta 401 e iniciar el flujo OAuth
2. Utilice **Registro dinámico de cliente (RFC 7591)** si el servidor lo admite.
3. Almacene tokens de forma segura para futuras solicitudes
---
### Automático
Para la mayoría de los servidores MCP habilitados para OAuth, no se necesita ninguna configuración especial. Simplemente configure el servidor remoto:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}
```
Si el servidor requiere autenticación, OpenCode le pedirá que se autentique cuando intente usarlo por primera vez. De lo contrario, puede [activar manualmente el flujo](#authenticating) con `opencode mcp auth <server-name>`.
---
### Preinscrito
Si tiene credenciales de cliente del proveedor del servidor MCP, puede configurarlas:
```json title="opencode.json" {7-11}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": {
"clientId": "{env:MY_MCP_CLIENT_ID}",
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
"scope": "tools:read tools:execute"
}
}
}
}
```
---
### Autenticación
Puede activar manualmente la autenticación o administrar las credenciales.
Autenticar con un servidor MCP específico:
```bash
opencode mcp auth my-oauth-server
```
Enumere todos los servidores MCP y su estado de autenticación:
```bash
opencode mcp list
```
Eliminar las credenciales almacenadas:
```bash
opencode mcp logout my-oauth-server
```
El comando `mcp auth` abrirá su navegador para obtener autorización. Después de su autorización, OpenCode almacenará los tokens de forma segura en `~/.local/share/opencode/mcp-auth.json`.
---
#### Deshabilitando OAuth
Si desea deshabilitar el OAuth automático para un servidor (por ejemplo, para servidores que usan claves API), configure `oauth` en `false`:
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}"
}
}
}
}
```
---
#### OAuth Opciones
| Opción | Tipo | Descripción |
| -------------- | --------------- | -------------------------------------------------------------------------------- |
| `oauth` | Objeto \| falso | OAuth objeto de configuración, o `false` para deshabilitar la detección automática de OAuth. |
| `clientId` | Cadena | OAuth ID de cliente. Si no se proporciona, se intentará el registro dinámico del cliente. |
| `clientSecret` | Cadena | OAuth secreto del cliente, si lo requiere el servidor de autorización. |
| `scope` | Cadena | OAuth alcances para solicitar durante la autorización. |
#### Depuración
Si un servidor MCP remoto no puede autenticarse, puede diagnosticar problemas con:
```bash
# View auth status for all OAuth-capable servers
opencode mcp auth list
# Debug connection and OAuth flow for a specific server
opencode mcp debug my-oauth-server
```
El comando `mcp debug` muestra el estado de autenticación actual, prueba la conectividad HTTP e intenta el flujo de descubrimiento OAuth.
---
## Administrar
Sus MCP están disponibles como herramientas en OpenCode, junto con herramientas integradas. Para que puedas administrarlos a través de la configuración OpenCode como cualquier otra herramienta.
---
### Global
Esto significa que puede habilitarlos o deshabilitarlos globalmente.
```json title="opencode.json" {14}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp-foo": false
}
}
```
También podemos usar un patrón global para deshabilitar todos los MCP coincidentes.
```json title="opencode.json" {14}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp*": false
}
}
```
Aquí estamos usando el patrón global `my-mcp*` para deshabilitar todos los MCP.
---
### Por agente
Si tiene una gran cantidad de servidores MCP, es posible que desee habilitarlos solo por agente y deshabilitarlos globalmente. Para hacer esto:
1. Desactívelo como herramienta a nivel global.
2. En su [configuración del agente](/docs/agents#tools), habilite el servidor MCP como herramienta.
```json title="opencode.json" {11, 14-18}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"enabled": true
}
},
"tools": {
"my-mcp*": false
},
"agent": {
"my-agent": {
"tools": {
"my-mcp*": true
}
}
}
}
```
---
#### Patrones globales
El patrón global utiliza patrones globales simples de expresiones regulares:
- `*` coincide con cero o más de cualquier carácter (por ejemplo, `"my-mcp*"` coincide con `my-mcp_search`, `my-mcp_list`, etc.)
- `?` coincide exactamente con un carácter
- Todos los demás caracteres coinciden literalmente
:::nota
Las herramientas del servidor MCP están registradas con el nombre del servidor como prefijo, por lo que para deshabilitar todas las herramientas para un servidor simplemente use:
```
"mymcpservername_*": false
```
:::
---
## Ejemplos
A continuación se muestran ejemplos de algunos servidores MCP comunes. Puede enviar un PR si desea documentar otros servidores.
---
### centinela
Agregue el [servidor Sentry MCP](https://mcp.sentry.dev) para interactuar con sus proyectos y problemas Sentry.
```json title="opencode.json" {4-8}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
```
Después de agregar la configuración, autentíquese con Sentry:
```bash
opencode mcp auth sentry
```
Esto abrirá una ventana del navegador para completar el flujo OAuth y conectar OpenCode a su cuenta Sentry.
Una vez autenticado, puede utilizar las herramientas Sentry en sus indicaciones para consultar problemas, proyectos y datos de errores.
```txt "use sentry"
Show me the latest unresolved issues in my project. use sentry
```
---
### Contexto7
Agregue el [servidor Context7 MCP](https://github.com/upstash/context7) para buscar en los documentos.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
```
Si se ha registrado para obtener una cuenta gratuita, puede usar su clave API y obtener límites de tarifas más altos.
```json title="opencode.json" {7-9}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
}
}
}
}
```
Aquí asumimos que tiene configurada la variable de entorno `CONTEXT7_API_KEY`.
Agregue `use context7` a sus indicaciones para usar el servidor Context7 MCP.
```txt "use context7"
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
```
Alternativamente, puede agregar algo como esto a su [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
When you need to search docs, use `context7` tools.
```
---
### Grep de Vercel
Agregue el servidor [Grep by Vercel](https://grep.app) MCP para buscar fragmentos de código en GitHub.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
```
Dado que llamamos a nuestro servidor MCP `gh_grep`, puede agregar `use the gh_grep tool` a sus indicaciones para que el agente lo use.
```txt "use the gh_grep tool"
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
```
Alternativamente, puede agregar algo como esto a su [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
```

View File

@@ -0,0 +1,223 @@
---
title: Modelos
description: Configuración de un proveedor y modelo LLM.
---
OpenCode usa el [AI SDK](https://ai-sdk.dev/) y [Models.dev](https://models.dev) para admitir **75+ proveedores LLM** y admite la ejecución de modelos locales.
---
## Proveedores
Los proveedores más populares están precargados de forma predeterminada. Si agregó las credenciales de un proveedor mediante el comando `/connect`, estarán disponibles cuando inicie OpenCode.
Obtenga más información sobre [proveedores](/docs/providers).
---
## Selecciona un modelo
Una vez que hayas configurado tu proveedor podrás seleccionar el modelo que desees escribiendo:
```bash frame="none"
/models
```
---
## Modelos recomendados
Hay muchos modelos disponibles y cada semana salen nuevos modelos.
:::consejo
Considere utilizar uno de los modelos que recomendamos.
:::
Sin embargo, sólo unos pocos de ellos son buenos tanto para generar código como para llamar a herramientas.
Aquí hay varios modelos que funcionan bien con OpenCode, sin ningún orden en particular. (Esta no es una lista exhaustiva ni necesariamente actualizada):
-GPT 5.2
- Códice GPT 5.1
- Claude Opus 4.5
- Claude Soneto 4.5
-Minimax M2.1
- Géminis 3 Pro
---
## Establecer un valor predeterminado
Para configurar uno de estos como modelo predeterminado, puede configurar la tecla `model` en su
OpenCode configuración.
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"model": "lmstudio/google/gemma-3n-e4b"
}
```
Aquí el ID completo es `provider_id/model_id`. Por ejemplo, si usa [OpenCode Zen](/docs/zen), usaría `opencode/gpt-5.1-codex` para GPT 5.1 Codex.
Si ha configurado un [proveedor personalizado](/docs/providers#custom), `provider_id` es la clave de la parte `provider` de su configuración y `model_id` es la clave de `provider.models`.
---
## Configurar modelos
Puede configurar globalmente las opciones de un modelo a través de la configuración.
```jsonc title="opencode.jsonc" {7-12,19-24}
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"openai": {
"models": {
"gpt-5": {
"options": {
"reasoningEffort": "high",
"textVerbosity": "low",
"reasoningSummary": "auto",
"include": ["reasoning.encrypted_content"],
},
},
},
},
"anthropic": {
"models": {
"claude-sonnet-4-5-20250929": {
"options": {
"thinking": {
"type": "enabled",
"budgetTokens": 16000,
},
},
},
},
},
},
}
```
Aquí estamos configurando ajustes globales para dos modelos integrados: `gpt-5` cuando se accede a través del proveedor `openai` y `claude-sonnet-4-20250514` cuando se accede a través del proveedor `anthropic`.
Los nombres de modelo y proveedor integrados se pueden encontrar en [Models.dev](https://models.dev).
También puede configurar estas opciones para cualquier agente que esté utilizando. La configuración del agente anula cualquier opción global aquí. [Más información](/docs/agents/#additional).
También puede definir variantes personalizadas que amplíen las integradas. Las variantes le permiten configurar diferentes ajustes para el mismo modelo sin crear entradas duplicadas:
```jsonc title="opencode.jsonc" {6-21}
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"opencode": {
"models": {
"gpt-5": {
"variants": {
"high": {
"reasoningEffort": "high",
"textVerbosity": "low",
"reasoningSummary": "auto",
},
"low": {
"reasoningEffort": "low",
"textVerbosity": "low",
"reasoningSummary": "auto",
},
},
},
},
},
},
}
```
---
## Variantes
Muchos modelos admiten múltiples variantes con diferentes configuraciones. OpenCode se envía con variantes predeterminadas integradas para proveedores populares.
### Variantes integradas
OpenCode se envía con variantes predeterminadas para muchos proveedores:
**Anthropic**:
- `high` - Presupuesto de pensamiento alto (predeterminado)
- `max` - Presupuesto de pensamiento máximo
**OpenAI**:
Varía según el modelo, pero aproximadamente:
- `none` - Sin razonamiento
- `minimal` - Mínimo esfuerzo de razonamiento
- `low` - Bajo esfuerzo de razonamiento
- `medium` - Esfuerzo de razonamiento medio
- `high` - Alto esfuerzo de razonamiento
- `xhigh` - Esfuerzo de razonamiento extra alto
**Google**:
- `low` - Menor esfuerzo/presupuesto simbólico
- `high` - Mayor esfuerzo/presupuesto simbólico
:::consejo
Esta lista no es exhaustiva. Muchos otros proveedores también tienen valores predeterminados integrados.
:::
### Variantes personalizadas
Puede anular las variantes existentes o agregar las suyas propias:
```jsonc title="opencode.jsonc" {7-18}
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"openai": {
"models": {
"gpt-5": {
"variants": {
"thinking": {
"reasoningEffort": "high",
"textVerbosity": "low",
},
"fast": {
"disabled": true,
},
},
},
},
},
},
}
```
### Variantes de ciclo
Utilice la combinación de teclas `variant_cycle` para cambiar rápidamente entre variantes. [Más información](/docs/keybinds).
---
## Cargando modelos
Cuando se inicia OpenCode, busca modelos en el siguiente orden de prioridad:
1. El indicador de línea de comando `--model` o `-m`. El formato es el mismo que en el archivo de configuración: `provider_id/model_id`.
2. La lista de modelos en la configuración OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-20250514"
}
```
El formato aquí es `provider/model`.
3. El último modelo utilizado.
4. El primer modelo que utiliza una prioridad interna.

View File

@@ -0,0 +1,331 @@
---
title: Modos
description: Diferentes modos para diferentes casos de uso.
---
:::precaución
Los modos ahora se configuran a través de la opción `agent` en la configuración opencode. El
La opción `mode` ahora está en desuso. [Más información](/docs/agents).
:::
Los modos en opencode le permiten personalizar el comportamiento, las herramientas y las indicaciones para diferentes casos de uso.
Viene con dos modos integrados: **construir** y **planificar**. Puedes personalizar
estos o configure el suyo propio a través de la configuración opencode.
Puede cambiar entre modos durante una sesión o configurarlos en su archivo de configuración.
---
## Incorporado
opencode viene con dos modos integrados.
---
### Construir
Build es el modo **predeterminado** con todas las herramientas habilitadas. Este es el modo estándar para el trabajo de desarrollo en el que necesita acceso completo a las operaciones de archivos y a los comandos del sistema.
---
### Plan
Un modo restringido diseñado para la planificación y el análisis. En el modo de plan, las siguientes herramientas están deshabilitadas de forma predeterminada:
- `write` - No se pueden crear archivos nuevos
- `edit` - No se pueden modificar archivos existentes, excepto los archivos ubicados en `.opencode/plans/*.md` para detallar el plan en sí.
- `patch` - No se pueden aplicar parches
- `bash` - No se pueden ejecutar comandos de shell
Este modo es útil cuando desea que la IA analice código, sugiera cambios o cree planes sin realizar modificaciones reales en su base de código.
---
## Cambio
Puede cambiar entre modos durante una sesión usando la tecla _Tab_. O su combinación de teclas `switch_mode` configurada.
Consulte también: [Formateadores](/docs/formatters) para obtener información sobre la configuración de formato de código.
---
## Configurar
Puede personalizar los modos integrados o crear los suyos propios mediante la configuración. Los modos se pueden configurar de dos maneras:
### JSON Configuración
Configure los modos en su archivo de configuración `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mode": {
"build": {
"model": "anthropic/claude-sonnet-4-20250514",
"prompt": "{file:./prompts/build.txt}",
"tools": {
"write": true,
"edit": true,
"bash": true
}
},
"plan": {
"model": "anthropic/claude-haiku-4-20250514",
"tools": {
"write": false,
"edit": false,
"bash": false
}
}
}
}
```
### Configuración de rebajas
También puede definir modos utilizando archivos de rebajas. Colócalos en:
- Global: `~/.config/opencode/modes/`
- Proyecto: `.opencode/modes/`
```markdown title="~/.config/opencode/modes/review.md"
---
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
tools:
write: false
edit: false
bash: false
---
You are in code review mode. Focus on:
- Code quality and best practices
- Potential bugs and edge cases
- Performance implications
- Security considerations
Provide constructive feedback without making direct changes.
```
El nombre del archivo de rebajas se convierte en el nombre del modo (por ejemplo, `review.md` crea un modo `review`).
Veamos estas opciones de configuración en detalle.
---
### Modelo
Utilice la configuración `model` para anular el modelo predeterminado para este modo. Útil para utilizar diferentes modelos optimizados para diferentes tareas. Por ejemplo, un modelo más rápido de planificación, un modelo más capaz de implementación.
```json title="opencode.json"
{
"mode": {
"plan": {
"model": "anthropic/claude-haiku-4-20250514"
}
}
}
```
---
### Temperatura
Controle la aleatoriedad y la creatividad de las respuestas de la IA con la configuración `temperature`. Los valores más bajos hacen que las respuestas sean más centradas y deterministas, mientras que los valores más altos aumentan la creatividad y la variabilidad.
```json title="opencode.json"
{
"mode": {
"plan": {
"temperature": 0.1
},
"creative": {
"temperature": 0.8
}
}
}
```
Los valores de temperatura suelen oscilar entre 0,0 y 1,0:
- **0.0-0.2**: Respuestas muy enfocadas y deterministas, ideales para análisis y planificación de código.
- **0,3-0,5**: respuestas equilibradas con algo de creatividad, buenas para tareas de desarrollo general.
- **0.6-1.0**: respuestas más creativas y variadas, útiles para la lluvia de ideas y la exploración.
```json title="opencode.json"
{
"mode": {
"analyze": {
"temperature": 0.1,
"prompt": "{file:./prompts/analysis.txt}"
},
"build": {
"temperature": 0.3
},
"brainstorm": {
"temperature": 0.7,
"prompt": "{file:./prompts/creative.txt}"
}
}
}
```
Si no se especifica ninguna temperatura, opencode utiliza valores predeterminados específicos del modelo (normalmente 0 para la mayoría de los modelos, 0,55 para los modelos Qwen).
---
### Inmediato
Especifique un archivo de aviso del sistema personalizado para este modo con la configuración `prompt`. El archivo de aviso debe contener instrucciones específicas para el propósito del modo.
```json title="opencode.json"
{
"mode": {
"review": {
"prompt": "{file:./prompts/code-review.txt}"
}
}
}
```
Esta ruta es relativa a donde se encuentra el archivo de configuración. Entonces esto funciona para
tanto la configuración global opencode como la configuración específica del proyecto.
---
### Herramientas
Controle qué herramientas están disponibles en este modo con la configuración `tools`. Puede habilitar o deshabilitar herramientas específicas configurándolas en `true` o `false`.
```json
{
"mode": {
"readonly": {
"tools": {
"write": false,
"edit": false,
"bash": false,
"read": true,
"grep": true,
"glob": true
}
}
}
}
```
Si no se especifica ninguna herramienta, todas las herramientas están habilitadas de forma predeterminada.
---
#### Herramientas disponibles
Aquí están todas las herramientas que se pueden controlar a través del modo de configuración.
| Herramienta | Descripción |
| ----------- | ----------------------- |
| `bash` | Ejecutar comandos de shell |
| `edit` | Modificar archivos existentes |
| `write` | Crear nuevos archivos |
| `read` | Leer el contenido del archivo |
| `grep` | Buscar contenido del archivo |
| `glob` | Buscar archivos por patrón |
| `list` | Listar el contenido del directorio |
| `patch` | Aplicar parches a archivos |
| `todowrite` | Administrar listas de tareas pendientes |
| `todoread` | Leer listas de tareas pendientes |
| `webfetch` | Obtener contenido web |
---
## Modos personalizados
Puede crear sus propios modos personalizados agregándolos a la configuración. A continuación se muestran ejemplos que utilizan ambos enfoques:
### Usando la configuración JSON
```json title="opencode.json" {4-14}
{
"$schema": "https://opencode.ai/config.json",
"mode": {
"docs": {
"prompt": "{file:./prompts/documentation.txt}",
"tools": {
"write": true,
"edit": true,
"bash": false,
"read": true,
"grep": true,
"glob": true
}
}
}
}
```
### Usando archivos de rebajas
Cree archivos de modo en `.opencode/modes/` para modos específicos del proyecto o `~/.config/opencode/modes/` para modos globales:
```markdown title=".opencode/modes/debug.md"
---
temperature: 0.1
tools:
bash: true
read: true
grep: true
write: false
edit: false
---
You are in debug mode. Your primary goal is to help investigate and diagnose issues.
Focus on:
- Understanding the problem through careful analysis
- Using bash commands to inspect system state
- Reading relevant files and logs
- Searching for patterns and anomalies
- Providing clear explanations of findings
Do not make any changes to files. Only investigate and report.
```
```markdown title="~/.config/opencode/modes/refactor.md"
---
model: anthropic/claude-sonnet-4-20250514
temperature: 0.2
tools:
edit: true
read: true
grep: true
glob: true
---
You are in refactoring mode. Focus on improving code quality without changing functionality.
Priorities:
- Improve code readability and maintainability
- Apply consistent naming conventions
- Reduce code duplication
- Optimize performance where appropriate
- Ensure all tests continue to pass
```
---
### Casos de uso
A continuación se muestran algunos casos de uso comunes para diferentes modos.
- **Modo de compilación**: trabajo de desarrollo completo con todas las herramientas habilitadas
- **Modo Planificación**: Análisis y planificación sin realizar cambios
- **Modo de revisión**: revisión de código con acceso de solo lectura más herramientas de documentación
- **Modo de depuración**: centrado en la investigación con bash y herramientas de lectura habilitadas
- **Modo Documentos**: escritura de documentación con operaciones de archivos pero sin comandos del sistema
También puede encontrar que diferentes modelos son buenos para diferentes casos de uso.

View File

@@ -0,0 +1,57 @@
---
title: Red
description: Configure proxies y certificados personalizados.
---
OpenCode admite variables de entorno de proxy estándar y certificados personalizados para entornos de red empresarial.
---
## apoderado
OpenCode respeta las variables de entorno de proxy estándar.
```bash
# HTTPS proxy (recommended)
export HTTPS_PROXY=https://proxy.example.com:8080
# HTTP proxy (if HTTPS not available)
export HTTP_PROXY=http://proxy.example.com:8080
# Bypass proxy for local server (required)
export NO_PROXY=localhost,127.0.0.1
```
:::precaución
El TUI se comunica con un servidor HTTP local. Debe omitir el proxy para esta conexión para evitar bucles de enrutamiento.
:::
Puede configurar el puerto y el nombre de host del servidor usando [CLI flags](/docs/cli#run).
---
### Autenticar
Si su proxy requiere autenticación básica, incluya las credenciales en la URL.
```bash
export HTTPS_PROXY=http://username:password@proxy.example.com:8080
```
:::precaución
Evite codificar contraseñas. Utilice variables de entorno o almacenamiento seguro de credenciales.
:::
Para servidores proxy que requieren autenticación avanzada como NTLM o Kerberos, considere usar una puerta de enlace LLM que admita su método de autenticación.
---
## Certificados personalizados
Si su empresa utiliza CA personalizadas para conexiones HTTPS, configure OpenCode para confiar en ellas.
```bash
export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem
```
Esto funciona tanto para conexiones proxy como para acceso directo a API.

View File

@@ -0,0 +1,237 @@
---
title: Permisos
description: Controle qué acciones requieren aprobación para ejecutarse.
---
OpenCode usa la configuración `permission` para decidir si una acción determinada debe ejecutarse automáticamente, avisarle o bloquearse.
A partir de `v1.1.1`, la configuración booleana heredada `tools` está obsoleta y se ha fusionado en `permission`. La antigua configuración `tools` todavía se admite por compatibilidad con versiones anteriores.
---
## Acciones
Cada regla de permiso se resuelve en una de:
- `"allow"` — ejecutar sin aprobación
- `"ask"` — solicitar aprobación
- `"deny"` — bloquea la acción
---
## Configuración
Puede establecer permisos globalmente (con `*`) y anular herramientas específicas.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
También puedes configurar todos los permisos a la vez:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}
```
---
## Reglas granulares (sintaxis de objeto)
Para la mayoría de los permisos, puede utilizar un objeto para aplicar diferentes acciones según la entrada de la herramienta.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}
```
Las reglas se evalúan según la coincidencia de patrones, y la **última regla coincidente gana**. Un patrón común es poner primero la regla general `"*"` y después reglas más específicas.
### Comodines
Los patrones de permisos utilizan una simple coincidencia de comodines:
- `*` coincide con cero o más de cualquier carácter
- `?` coincide exactamente con un carácter
- Todos los demás caracteres coinciden literalmente
### Expansión del directorio de inicio
Puede usar `~` o `$HOME` al comienzo de un patrón para hacer referencia a su directorio de inicio. Esto es particularmente útil para las reglas [`external_directory`](#external-directories).
- `~/projects/*` -> `/Users/username/projects/*`
- `$HOME/projects/*` -> `/Users/username/projects/*`
- `~` -> `/Users/username`
### Directorios externos
Utilice `external_directory` para permitir llamadas a herramientas que toquen rutas fuera del directorio de trabajo donde se inició OpenCode. Esto se aplica a cualquier herramienta que tome una ruta como entrada (por ejemplo, `read`, `edit`, `list`, `glob`, `grep` y muchos comandos `bash`).
La expansión del hogar (como `~/...`) solo afecta la forma en que se escribe un patrón. No hace que una ruta externa forme parte del espacio de trabajo actual, por lo que las rutas fuera del directorio de trabajo aún deben permitirse a través de `external_directory`.
Por ejemplo, esto permite el acceso a todo lo que se encuentra en `~/projects/personal/`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
```
Cualquier directorio permitido aquí hereda los mismos valores predeterminados que el espacio de trabajo actual. Dado que [`read` tiene por defecto `allow`](#defaults), también se permiten lecturas para entradas bajo `external_directory` a menos que se anulen. Agregue reglas explícitas cuando una herramienta deba restringirse en estas rutas, como bloquear ediciones mientras se mantienen las lecturas:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
```
Mantenga la lista centrada en rutas confiables y aplique reglas adicionales de permitir o denegar según sea necesario para otras herramientas (por ejemplo, `bash`).
---
## Permisos disponibles
Los permisos OpenCode están codificados por el nombre de la herramienta, además de un par de medidas de seguridad:
- `read` — leer un archivo (coincide con la ruta del archivo)
- `edit` — todas las modificaciones de archivos (cubre `edit`, `write`, `patch`, `multiedit`)
- `glob` — globalización de archivos (coincide con el patrón global)
- `grep` — búsqueda de contenido (coincide con el patrón de expresiones regulares)
- `list` — enumerar archivos en un directorio (coincide con la ruta del directorio)
- `bash`: ejecuta comandos de shell (coincide con comandos analizados como `git status --porcelain`)
- `task` — lanzamiento de subagentes (coincide con el tipo de subagente)
- `skill` — cargar una habilidad (coincide con el nombre de la habilidad)
- `lsp`: ejecución de consultas LSP (actualmente no granulares)
- `todoread`, `todowrite` — leer/actualizar la lista de tareas pendientes
- `webfetch` — obteniendo una URL (coincide con la URL)
- `websearch`, `codesearch` — búsqueda web/código (coincide con la consulta)
- `external_directory`: se activa cuando una herramienta toca rutas fuera del directorio de trabajo del proyecto.
- `doom_loop`: se activa cuando la misma llamada de herramienta se repite 3 veces con entrada idéntica
---
## Valores predeterminados
Si no especifica nada, OpenCode comienza desde valores predeterminados permisivos:
- La mayoría de los permisos están predeterminados en `"allow"`.
- `doom_loop` y `external_directory` por defecto son `"ask"`.
- `read` es `"allow"`, pero los archivos `.env` están denegados de forma predeterminada:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## ¿Qué significa "preguntar"?
Cuando OpenCode solicita aprobación, la interfaz de usuario ofrece tres resultados:
- `once` — aprobar solo esta solicitud
- `always`: aprueba solicitudes futuras que coincidan con los patrones sugeridos (para el resto de la sesión actual OpenCode)
- `reject` — rechazar la solicitud
La herramienta proporciona el conjunto de patrones que `always` aprobaría (por ejemplo, las aprobaciones de bash generalmente incluyen en la lista blanca un prefijo de comando seguro como `git status*`).
---
## Agentes
Puede anular los permisos por agente. Los permisos del agente se combinan con la configuración global y las reglas del agente tienen prioridad. [Más información](/docs/agents#permissions) sobre los permisos de los agentes.
:::nota
Consulte la sección [Reglas granulares (sintaxis de objeto)](#granular-rules-object-syntax) anterior para obtener ejemplos de coincidencia de patrones más detallados.
:::
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}
```
También puede configurar los permisos del agente en Markdown:
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.
```
:::consejo
Utilice la coincidencia de patrones para comandos con argumentos. `"grep *"` permite `grep pattern file.txt`, mientras que `"grep"` solo lo bloquearía. Los comandos como `git status` funcionan para el comportamiento predeterminado pero requieren permiso explícito (como `"git status *"`) cuando se pasan argumentos.
:::

View File

@@ -0,0 +1,385 @@
---
title: Complementos
description: Escriba sus propios complementos para extender OpenCode.
---
Los complementos le permiten extender OpenCode al conectarse a varios eventos y personalizar el comportamiento. Puede crear complementos para agregar nuevas funciones, integrarlos con servicios externos o modificar el comportamiento predeterminado de OpenCode.
Para ver ejemplos, consulte los [complementos](/docs/ecosystem#plugins) creados por la comunidad.
---
## Usa un complemento
Hay dos formas de cargar complementos.
---
### De archivos locales
Coloque los archivos JavaScript o TypeScript en el directorio del complemento.
- `.opencode/plugins/` - Complementos a nivel de proyecto
- `~/.config/opencode/plugins/` - Complementos globales
Los archivos en estos directorios se cargan automáticamente al inicio.
---
### De npm
Especifique paquetes npm en su archivo de configuración.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "opencode-wakatime", "@my-org/custom-plugin"]
}
```
Se admiten paquetes npm regulares y de alcance.
Explore los complementos disponibles en el [ecosistema](/docs/ecosystem#plugins).
---
### Cómo se instalan los complementos
Los **complementos npm** se instalan automáticamente usando Bun al inicio. Los paquetes y sus dependencias se almacenan en caché en `~/.cache/opencode/node_modules/`.
**Los complementos locales** se cargan directamente desde el directorio de complementos. Para usar paquetes externos, debe crear un `package.json` dentro de su directorio de configuración (consulte [Dependencias](#dependencies)), o publicar el complemento en npm y [agregarlo a su configuración](/docs/config#plugins).
---
### Cargar orden
Los complementos se cargan desde todas las fuentes y todos los enlaces se ejecutan en secuencia. El orden de carga es:
1. Configuración global (`~/.config/opencode/opencode.json`)
2. Configuración del proyecto (`opencode.json`)
3. Directorio global de complementos (`~/.config/opencode/plugins/`)
4. Directorio de complementos del proyecto (`.opencode/plugins/`)
Los paquetes npm duplicados con el mismo nombre y versión se cargan una vez. Sin embargo, un complemento local y un complemento npm con nombres similares se cargan por separado.
---
## Crear un complemento
Un complemento es un módulo **JavaScript/TypeScript** que exporta uno o más complementos.
funciones. Cada función recibe un objeto de contexto y devuelve un objeto de enlace.
---
### Dependencias
Los complementos locales y las herramientas personalizadas pueden utilizar paquetes npm externos. Agregue un `package.json` a su directorio de configuración con las dependencias que necesita.
```json title=".opencode/package.json"
{
"dependencies": {
"shescape": "^2.1.0"
}
}
```
OpenCode ejecuta `bun install` al inicio para instalarlos. Luego, sus complementos y herramientas pueden importarlos.
```ts title=".opencode/plugins/my-plugin.ts"
import { escape } from "shescape"
export const MyPlugin = async (ctx) => {
return {
"tool.execute.before": async (input, output) => {
if (input.tool === "bash") {
output.args.command = escape(output.args.command)
}
},
}
}
```
---
### Estructura básica
```js title=".opencode/plugins/example.js"
export const MyPlugin = async ({ project, client, $, directory, worktree }) => {
console.log("Plugin initialized!")
return {
// Hook implementations go here
}
}
```
La función del complemento recibe:
- `project`: La información actual del proyecto.
- `directory`: El directorio de trabajo actual.
- `worktree`: La ruta del árbol de trabajo de git.
- `client`: Un cliente SDK opencode para interactuar con la IA.
- `$`: [shell API](https://bun.com/docs/runtime/shell) de Bun para ejecutar comandos.
---
### TypeScript soporte
Para los complementos TypeScript, puede importar tipos desde el paquete de complementos:
```ts title="my-plugin.ts" {1}
import type { Plugin } from "@opencode-ai/plugin"
export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => {
return {
// Type-safe hook implementations
}
}
```
---
### Eventos
Los complementos pueden suscribirse a eventos como se ve a continuación en la sección Ejemplos. Aquí hay una lista de los diferentes eventos disponibles.
#### Eventos de comando
- `command.executed`
#### Eventos de archivo
- `file.edited`
- `file.watcher.updated`
#### Eventos de instalación
- `installation.updated`
#### LSP Eventos
- `lsp.client.diagnostics`
- `lsp.updated`
#### Eventos de mensajes
- `message.part.removed`
- `message.part.updated`
- `message.removed`
- `message.updated`
#### Eventos de permiso
- `permission.asked`
- `permission.replied`
#### Eventos del servidor
- `server.connected`
#### Eventos de sesión
- `session.created`
- `session.compacted`
- `session.deleted`
- `session.diff`
- `session.error`
- `session.idle`
- `session.status`
- `session.updated`
#### Todo Eventos
- `todo.updated`
#### Eventos Shell
- `shell.env`
#### Eventos de herramientas
- `tool.execute.after`
- `tool.execute.before`
#### TUI Eventos
- `tui.prompt.append`
- `tui.command.execute`
- `tui.toast.show`
---
## Ejemplos
A continuación se muestran algunos ejemplos de complementos que puede utilizar para ampliar opencode.
---
### Enviar notificaciones
Enviar notificaciones cuando ocurran ciertos eventos:
```js title=".opencode/plugins/notification.js"
export const NotificationPlugin = async ({ project, client, $, directory, worktree }) => {
return {
event: async ({ event }) => {
// Send notification on session completion
if (event.type === "session.idle") {
await $`osascript -e 'display notification "Session completed!" with title "opencode"'`
}
},
}
}
```
Estamos usando `osascript` para ejecutar AppleScript en macOS. Aquí lo estamos usando para enviar notificaciones.
:::nota
Si está utilizando la aplicación de escritorio OpenCode, puede enviar notificaciones del sistema automáticamente cuando una respuesta esté lista o cuando se produzca un error en una sesión.
:::
---
### protección .env
Evite que opencode lea archivos `.env`:
```javascript title=".opencode/plugins/env-protection.js"
export const EnvProtection = async ({ project, client, $, directory, worktree }) => {
return {
"tool.execute.before": async (input, output) => {
if (input.tool === "read" && output.args.filePath.includes(".env")) {
throw new Error("Do not read .env files")
}
},
}
}
```
---
### Inyectar variables de entorno
Inyecte variables de entorno en toda la ejecución del shell (herramientas de inteligencia artificial y terminales de usuario):
```javascript title=".opencode/plugins/inject-env.js"
export const InjectEnvPlugin = async () => {
return {
"shell.env": async (input, output) => {
output.env.MY_API_KEY = "secret"
output.env.PROJECT_ROOT = input.cwd
},
}
}
```
---
### Herramientas personalizadas
Los complementos también pueden agregar herramientas personalizadas a opencode:
```ts title=".opencode/plugins/custom-tools.ts"
import { type Plugin, tool } from "@opencode-ai/plugin"
export const CustomToolsPlugin: Plugin = async (ctx) => {
return {
tool: {
mytool: tool({
description: "This is a custom tool",
args: {
foo: tool.schema.string(),
},
async execute(args, context) {
const { directory, worktree } = context
return `Hello ${args.foo} from ${directory} (worktree: ${worktree})`
},
}),
},
}
}
```
El ayudante `tool` crea una herramienta personalizada a la que opencode puede llamar. Toma una función de esquema Zod y devuelve una definición de herramienta con:
- `description`: Qué hace la herramienta
- `args`: Esquema Zod para los argumentos de la herramienta.
- `execute`: Función que se ejecuta cuando se llama a la herramienta
Sus herramientas personalizadas estarán disponibles para opencode junto con las herramientas integradas.
---
### Registro
Utilice `client.app.log()` en lugar de `console.log` para el registro estructurado:
```ts title=".opencode/plugins/my-plugin.ts"
export const MyPlugin = async ({ client }) => {
await client.app.log({
body: {
service: "my-plugin",
level: "info",
message: "Plugin initialized",
extra: { foo: "bar" },
},
})
}
```
Niveles: `debug`, `info`, `warn`, `error`. Consulte la [documentación del SDK](https://opencode.ai/docs/sdk) para obtener más detalles.
---
### Ganchos de compactación
Personalice el contexto incluido cuando se compacta una sesión:
```ts title=".opencode/plugins/compaction.ts"
import type { Plugin } from "@opencode-ai/plugin"
export const CompactionPlugin: Plugin = async (ctx) => {
return {
"experimental.session.compacting": async (input, output) => {
// Inject additional context into the compaction prompt
output.context.push(`
## Custom Context
Include any state that should persist across compaction:
- Current task status
- Important decisions made
- Files being actively worked on
`)
},
}
}
```
El gancho `experimental.session.compacting` se activa antes de que LLM genere un resumen de continuación. Úselo para inyectar contexto específico del dominio que el mensaje de compactación predeterminado omitiría.
También puede reemplazar completamente el mensaje de compactación configurando `output.prompt`:
```ts title=".opencode/plugins/custom-compaction.ts"
import type { Plugin } from "@opencode-ai/plugin"
export const CustomCompactionPlugin: Plugin = async (ctx) => {
return {
"experimental.session.compacting": async (input, output) => {
// Replace the entire compaction prompt
output.prompt = `
You are generating a continuation prompt for a multi-agent swarm session.
Summarize:
1. The current task and its status
2. Which files are being modified and by whom
3. Any blockers or dependencies between agents
4. The next steps to complete the work
Format as a structured prompt that a new agent can use to resume work.
`
},
}
}
```
Cuando se configura `output.prompt`, reemplaza completamente el mensaje de compactación predeterminado. En este caso, se ignora la matriz `output.context`.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,180 @@
---
title: Normas
description: Establezca instrucciones personalizadas para opencode.
---
Puede proporcionar instrucciones personalizadas a opencode creando un archivo `AGENTS.md`. Esto es similar a las reglas del Cursor. Contiene instrucciones que se incluirán en el contexto de LLM para personalizar su comportamiento para su proyecto específico.
---
## Inicializar
Para crear un nuevo archivo `AGENTS.md`, puede ejecutar el comando `/init` en opencode.
:::consejo
Debes enviar el archivo `AGENTS.md` de tu proyecto a Git.
:::
Esto escaneará su proyecto y todo su contenido para comprender de qué se trata y generar un archivo `AGENTS.md` con él. Esto ayuda a opencode a navegar mejor por el proyecto.
Si tiene un archivo `AGENTS.md` existente, intentará agregarlo.
---
## Ejemplo
También puedes crear este archivo manualmente. A continuación se muestra un ejemplo de algunas cosas que puede colocar en un archivo `AGENTS.md`.
```markdown title="AGENTS.md"
# SST v3 Monorepo Project
This is an SST v3 monorepo with TypeScript. The project uses bun workspaces for package management.
## Project Structure
- `packages/` - Contains all workspace packages (functions, core, web, etc.)
- `infra/` - Infrastructure definitions split by service (storage.ts, api.ts, web.ts)
- `sst.config.ts` - Main SST configuration with dynamic imports
## Code Standards
- Use TypeScript with strict mode enabled
- Shared code goes in `packages/core/` with proper exports configuration
- Functions go in `packages/functions/`
- Infrastructure should be split into logical files in `infra/`
## Monorepo Conventions
- Import shared modules using workspace names: `@my-app/core/example`
```
Estamos agregando instrucciones específicas del proyecto aquí y esto se compartirá con todo su equipo.
---
## Tipos
opencode también admite la lectura del archivo `AGENTS.md` desde múltiples ubicaciones. Y esto tiene diferentes propósitos.
### Proyecto
Coloque un `AGENTS.md` en la raíz de su proyecto para reglas específicas del proyecto. Estos solo se aplican cuando trabaja en este directorio o sus subdirectorios.
### Global
También puedes tener reglas globales en un archivo `~/.config/opencode/AGENTS.md`. Esto se aplica en todas las sesiones opencode.
Dado que esto no está comprometido con Git ni se comparte con su equipo, recomendamos usarlo para especificar las reglas personales que debe seguir LLM.
### Compatibilidad del código Claude
Para los usuarios que migran desde Claude Code, OpenCode admite las convenciones de archivos de Claude Code como alternativas:
- **Reglas del proyecto**: `CLAUDE.md` en el directorio de tu proyecto (se usa si no existe `AGENTS.md`)
- **Reglas globales**: `~/.claude/CLAUDE.md` (se usa si no existe `~/.config/opencode/AGENTS.md`)
- **Habilidades**: `~/.claude/skills/`; consulte [Habilidades del agente](/docs/skills/) para obtener más detalles.
Para deshabilitar la compatibilidad de Claude Code, configure una de estas variables de entorno:
```bash
export OPENCODE_DISABLE_CLAUDE_CODE=1 # Disable all .claude support
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # Disable only ~/.claude/CLAUDE.md
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # Disable only .claude/skills
```
---
## Prioridad
Cuando se inicia opencode, busca archivos de reglas en este orden:
1. **Archivos locales** atravesando desde el directorio actual (`AGENTS.md`, `CLAUDE.md`)
2. **Archivo global** en `~/.config/opencode/AGENTS.md`
3. **Archivo de Código Claude** en `~/.claude/CLAUDE.md` (a menos que esté deshabilitado)
El primer archivo coincidente gana en cada categoría. Por ejemplo, si tiene `AGENTS.md` y `CLAUDE.md`, solo se usa `AGENTS.md`. De manera similar, `~/.config/opencode/AGENTS.md` tiene prioridad sobre `~/.claude/CLAUDE.md`.
---
## Instrucciones personalizadas
Puede especificar archivos de instrucciones personalizados en su `opencode.json` o el `~/.config/opencode/opencode.json` global. Esto le permite a usted y a su equipo reutilizar las reglas existentes en lugar de tener que duplicarlas en AGENTS.md.
Ejemplo:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}
```
También puede utilizar URL remotas para cargar instrucciones desde la web.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"]
}
```
Las instrucciones remotas se recuperan con un tiempo de espera de 5 segundos.
Todos los archivos de instrucciones se combinan con sus archivos `AGENTS.md`.
---
## Hacer referencia a archivos externos
Si bien opencode no analiza automáticamente las referencias de archivos en `AGENTS.md`, puedes lograr una funcionalidad similar de dos maneras:
### Usando opencode.json
El enfoque recomendado es utilizar el campo `instructions` en `opencode.json`:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["docs/development-standards.md", "test/testing-guidelines.md", "packages/*/AGENTS.md"]
}
```
### Instrucciones manuales en AGENTS.md
Puede enseñarle a opencode a leer archivos externos proporcionando instrucciones explícitas en su `AGENTS.md`. He aquí un ejemplo práctico:
```markdown title="AGENTS.md"
# TypeScript Project Rules
## External File Loading
CRITICAL: When you encounter a file reference (e.g., @rules/general.md), use your Read tool to load it on a need-to-know basis. They're relevant to the SPECIFIC task at hand.
Instructions:
- Do NOT preemptively load all references - use lazy loading based on actual need
- When loaded, treat content as mandatory instructions that override defaults
- Follow references recursively when needed
## Development Guidelines
For TypeScript code style and best practices: @docs/typescript-guidelines.md
For React component architecture and hooks patterns: @docs/react-patterns.md
For REST API design and error handling: @docs/api-standards.md
For testing strategies and coverage requirements: @test/testing-guidelines.md
## General Guidelines
Read the following file immediately as it's relevant to all workflows: @rules/general-guidelines.md.
```
Este enfoque le permite:
- Crear archivos de reglas modulares y reutilizables
- Compartir reglas entre proyectos a través de enlaces simbólicos o submódulos de git
- Mantenga AGENTS.md conciso mientras hace referencia a pautas detalladas
- Asegúrese de que opencode cargue archivos solo cuando sea necesario para la tarea específica
:::consejo
Para monorepos o proyectos con estándares compartidos, usar `opencode.json` con patrones globales (como `packages/*/AGENTS.md`) es más fácil de mantener que las instrucciones manuales.
:::

View File

@@ -0,0 +1,391 @@
---
title: SDK
description: Cliente JS con seguridad de tipos para el servidor opencode.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
El SDK opencode JS/TS proporciona un cliente con seguridad de tipos para interactuar con el servidor.
Úselo para crear integraciones y controlar opencode mediante programación.
[Más información](/docs/server) sobre cómo funciona el servidor. Para ver ejemplos, consulte los [proyectos](/docs/ecosystem#projects) creados por la comunidad.
---
## Instalar
Instale el SDK desde npm:
```bash
npm install @opencode-ai/sdk
```
---
## Crear cliente
Cree una instancia de opencode:
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const { client } = await createOpencode()
```
Esto inicia tanto un servidor como un cliente.
#### Opciones
| Opción | Tipo | Descripción | Predeterminado |
| ---------- | ------------- | ------------------------------ | ----------- |
| `hostname` | `string` | Nombre de host del servidor | `127.0.0.1` |
| `port` | `number` | Puerto del servidor | `4096` |
| `signal` | `AbortSignal` | Señal de aborto para cancelación | `undefined` |
| `timeout` | `number` | Tiempo de espera en ms para inicio del servidor | `5000` |
| `config` | `Config` | Objeto de configuración | `{}` |
---
## Configuración
Puede pasar un objeto de configuración para personalizar el comportamiento. La instancia aún recoge su `opencode.json`, pero puede anular o agregar configuración en línea:
```javascript
import { createOpencode } from "@opencode-ai/sdk"
const opencode = await createOpencode({
hostname: "127.0.0.1",
port: 4096,
config: {
model: "anthropic/claude-3-5-sonnet-20241022",
},
})
console.log(`Server running at ${opencode.server.url}`)
opencode.server.close()
```
## Solo cliente
Si ya tiene una instancia en ejecución de opencode, puede crear una instancia de cliente para conectarse a ella:
```javascript
import { createOpencodeClient } from "@opencode-ai/sdk"
const client = createOpencodeClient({
baseUrl: "http://localhost:4096",
})
```
#### Opciones
| Opción | Tipo | Descripción | Predeterminado |
| --------------- | ---------- | -------------------------------- | ----------------------- |
| `baseUrl` | `string` | URL del servidor | `http://localhost:4096` |
| `fetch` | `function` | Implementación de recuperación personalizada | `globalThis.fetch` |
| `parseAs` | `string` | Método de análisis de respuesta | `auto` |
| `responseStyle` | `string` | Estilo de devolución: `data` o `fields` | `fields` |
| `throwOnError` | `boolean` | Lanzar errores en lugar de devolver | `false` |
---
## Tipos
El SDK incluye definiciones TypeScript para todos los tipos API. Importarlos directamente:
```typescript
import type { Session, Message, Part } from "@opencode-ai/sdk"
```
Todos los tipos se generan a partir de la especificación OpenAPI del servidor y están disponibles en el <a href={typesUrl}>archivo de tipos</a>.
---
## Errores
El SDK puede generar errores que puedes detectar y manejar:
```typescript
try {
await client.session.get({ path: { id: "invalid-id" } })
} catch (error) {
console.error("Failed to get session:", (error as Error).message)
}
```
---
## API
El SDK expone todas las API del servidor a través de un cliente con seguridad de tipos.
---
### Global
| Método | Descripción | Respuesta |
| ----------------- | ------------------------------- | ------------------------------------ |
| `global.health()` | Verificar el estado y la versión del servidor | `{ healthy: true, version: string }` |
---
#### Ejemplos
```javascript
const health = await client.global.health()
console.log(health.data.version)
```
---
### Aplicación
| Método | Descripción | Respuesta |
| -------------- | ------------------------- | ------------------------------------------- |
| `app.log()` | Escribe una entrada de registro | `boolean` |
| `app.agents()` | Listar todos los agentes disponibles | <a href={typesUrl}><code>Agente[]</code></a> |
---
#### Ejemplos
```javascript
// Write a log entry
await client.app.log({
body: {
service: "my-app",
level: "info",
message: "Operation completed",
},
})
// List available agents
const agents = await client.app.agents()
```
---
### Proyecto
| Método | Descripción | Respuesta |
| ------------------- | ------------------- | --------------------------------------------- |
| `project.list()` | Listar todos los proyectos | <a href={typesUrl}><code>Proyecto[]</code></a> |
| `project.current()` | Obtener proyecto actual | <a href={typesUrl}><code>Proyecto</code></a> |
---
#### Ejemplos
```javascript
// List all projects
const projects = await client.project.list()
// Get current project
const currentProject = await client.project.current()
```
---
### Camino
| Método | Descripción | Respuesta |
| ------------ | ---------------- | ---------------------------------------- |
| `path.get()` | Obtener ruta actual | <a href={typesUrl}><code>Ruta</code></a> |
---
#### Ejemplos
```javascript
// Get current path information
const pathInfo = await client.path.get()
```
---
### Configuración
| Método | Descripción | Respuesta |
| -------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `config.get()` | Obtener información de configuración | <a href={typesUrl}><code>Configuración</code></a> |
| `config.providers()` | Lista de proveedores y modelos predeterminados | `{ providers: `<a href={typesUrl}><code>Proveedor[]</code></a>`, default: { [key: string]: string } }` |
---
#### Ejemplos
```javascript
const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()
```
---
### Sesiones
| Método | Descripción | Notas |
| ---------------------------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `session.list()` | Listar sesiones | Devuelve <a href={typesUrl}><code>Sesión[]</code></a> |
| `session.get({ path })` | Obtener sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `session.children({ path })` | Listar sesiones infantiles | Devuelve <a href={typesUrl}><code>Sesión[]</code></a> |
| `session.create({ body })` | Crear sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `session.delete({ path })` | Eliminar sesión | Devuelve `boolean` |
| `session.update({ path, body })` | Actualizar propiedades de sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `session.init({ path, body })` | Analizar aplicación y crear `AGENTS.md` | Devuelve `boolean` |
| `session.abort({ path })` | Cancelar una sesión en ejecución | Devuelve `boolean` |
| `session.share({ path })` | Compartir sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `session.unshare({ path })` | Dejar de compartir sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `session.summarize({ path, body })` | Resumir sesión | Devuelve `boolean` |
| `session.messages({ path })` | Listar mensajes en una sesión | Devuelve `{ info: `<a href={typesUrl}><code>Mensaje</code></a>`, parts: `<a href={typesUrl}><code>Parte[]</code></a>`}[]` |
| `session.message({ path })` | Obtener detalles del mensaje | Devuelve `{ info: `<a href={typesUrl}><code>Mensaje</code></a>`, parts: `<a href={typesUrl}><code>Parte[]</code></a>`}` |
| `session.prompt({ path, body })` | Enviar mensaje rápido | `body.noReply: true` devuelve UserMessage (solo contexto). El valor predeterminado devuelve <a href={typesUrl}><code>AssistantMessage</code></a> con respuesta de IA |
| `session.command({ path, body })` | Enviar comando a la sesión | Devuelve `{ info: `<a href={typesUrl}><code>AssistantMessage</code></a>`, parts: `<a href={typesUrl}><code>Parte[]</code></a>`}` |
| `session.shell({ path, body })` | Ejecute un comando de shell | Devuelve <a href={typesUrl}><code>AssistantMessage</code></a> |
| `session.revert({ path, body })` | Revertir un mensaje | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `session.unrevert({ path })` | Restaurar mensajes revertidos | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `postSessionByIdPermissionsByPermissionId({ path, body })` | Responder a una solicitud de permiso | Devuelve `boolean` |
---
#### Ejemplos
```javascript
// Create and manage sessions
const session = await client.session.create({
body: { title: "My session" },
})
const sessions = await client.session.list()
// Send a prompt message
const result = await client.session.prompt({
path: { id: session.id },
body: {
model: { providerID: "anthropic", modelID: "claude-3-5-sonnet-20241022" },
parts: [{ type: "text", text: "Hello!" }],
},
})
// Inject context without triggering AI response (useful for plugins)
await client.session.prompt({
path: { id: session.id },
body: {
noReply: true,
parts: [{ type: "text", text: "You are a helpful assistant." }],
},
})
```
---
### Archivos
| Método | Descripción | Respuesta |
| ------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------- |
| `find.text({ query })` | Buscar texto en archivos | Matriz de objetos coincidentes con `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `find.files({ query })` | Buscar archivos y directorios por nombre | `string[]` (rutas) |
| `find.symbols({ query })` | Buscar símbolos del espacio de trabajo | <a href={typesUrl}><code>Símbolo[]</code></a> |
| `file.read({ query })` | Leer un archivo | `{ type: "raw" \| "patch", content: string }` |
| `file.status({ query? })` | Obtener el estado de los archivos rastreados | <a href={typesUrl}><code>Archivo[]</code></a> |
`find.files` admite algunos campos de consulta opcionales:
- `type`: `"file"` o `"directory"`
- `directory`: anula la raíz del proyecto para la búsqueda.
- `limit`: resultados máximos (1200)
---
#### Ejemplos
```javascript
// Search and read files
const textResults = await client.find.text({
query: { pattern: "function.*opencode" },
})
const files = await client.find.files({
query: { query: "*.ts", type: "file" },
})
const directories = await client.find.files({
query: { query: "packages", type: "directory", limit: 20 },
})
const content = await client.file.read({
query: { path: "src/index.ts" },
})
```
---
### TUI
| Método | Descripción | Respuesta |
| ------------------------------ | ------------------------- | --------- |
| `tui.appendPrompt({ body })` | Agregar texto al mensaje | `boolean` |
| `tui.openHelp()` | Abra el cuadro de diálogo de ayuda | `boolean` |
| `tui.openSessions()` | Abrir el selector de sesiones | `boolean` |
| `tui.openThemes()` | Abra el selector de temas | `boolean` |
| `tui.openModels()` | Abrir el selector de modelo | `boolean` |
| `tui.submitPrompt()` | Enviar el mensaje actual | `boolean` |
| `tui.clearPrompt()` | Borrar el mensaje | `boolean` |
| `tui.executeCommand({ body })` | Ejecutar un comando | `boolean` |
| `tui.showToast({ body })` | Mostrar notificación del brindis | `boolean` |
---
#### Ejemplos
```javascript
// Control TUI interface
await client.tui.appendPrompt({
body: { text: "Add this to prompt" },
})
await client.tui.showToast({
body: { message: "Task completed", variant: "success" },
})
```
---
### Autenticación
| Método | Descripción | Respuesta |
| ------------------- | ------------------------------ | --------- |
| `auth.set({ ... })` | Establecer credenciales de autenticación | `boolean` |
---
#### Ejemplos
```javascript
await client.auth.set({
path: { id: "anthropic" },
body: { type: "api", key: "your-api-key" },
})
```
---
### Eventos
| Método | Descripción | Respuesta |
| ------------------- | ------------------------- | ------------------------- |
| `event.subscribe()` | Transmisión de eventos enviados por el servidor | Transmisión de eventos enviados por el servidor |
---
#### Ejemplos
```javascript
// Listen to real-time events
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}
```

View File

@@ -0,0 +1,287 @@
---
title: Servidor
description: Interactuar con el servidor opencode a través de HTTP.
---
import config from "../../../../config.mjs"
export const typesUrl = `${config.github}/blob/dev/packages/sdk/js/src/gen/types.gen.ts`
El comando `opencode serve` ejecuta un servidor HTTP sin cabeza que expone un punto final OpenAPI que un cliente opencode puede usar.
---
### Uso
```bash
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
```
#### Opciones
| Bandera | Descripción | Predeterminado |
| --------------- | ----------------------------------- | ---------------- |
| `--port` | Puerto para escuchar | `4096` |
| `--hostname` | Nombre de host para escuchar | `127.0.0.1` |
| `--mdns` | Habilitar el descubrimiento de mDNS | `false` |
| `--mdns-domain` | Nombre de dominio personalizado para el servicio mDNS | `opencode.local` |
| `--cors` | Orígenes de navegador adicionales para permitir | `[]` |
`--cors` se puede pasar varias veces:
```bash
opencode serve --cors http://localhost:5173 --cors https://app.example.com
```
---
### Autenticación
Configure `OPENCODE_SERVER_PASSWORD` para proteger el servidor con autenticación básica HTTP. El nombre de usuario predeterminado es `opencode`, o configure `OPENCODE_SERVER_USERNAME` para anularlo. Esto se aplica tanto a `opencode serve` como a `opencode web`.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve
```
---
### Cómo funciona
Cuando ejecuta `opencode`, inicia un TUI y un servidor. Donde el TUI es el
Cliente que habla con el servidor. El servidor expone una especificación OpenAPI 3.1
punto final. Este punto final también se utiliza para generar un [SDK](/docs/sdk).
:::consejo
Utilice el servidor opencode para interactuar con opencode mediante programación.
:::
Esta arquitectura permite que opencode admita múltiples clientes y le permite interactuar con opencode mediante programación.
Puede ejecutar `opencode serve` para iniciar un servidor independiente. Si tienes el
opencode TUI ejecutándose, `opencode serve` iniciará un nuevo servidor.
---
#### Conectarse a un servidor existente
Cuando inicia el TUI, asigna aleatoriamente un puerto y un nombre de host. En su lugar, puede pasar `--hostname` y `--port` [banderas](/docs/cli). Luego use esto para conectarse a su servidor.
El punto final [`/tui`](#tui) se puede utilizar para conducir el TUI a través del servidor. Por ejemplo, puede completar previamente o ejecutar un mensaje. Esta configuración es utilizada por los complementos OpenCode [IDE](/docs/ide).
---
## Especificaciones
El servidor publica una especificación OpenAPI 3.1 que se puede ver en:
```
http://<hostname>:<port>/doc
```
Por ejemplo, `http://localhost:4096/doc`. Utilice la especificación para generar clientes o inspeccionar tipos de solicitudes y respuestas. O verlo en un explorador Swagger.
---
## API
El servidor opencode expone las siguientes API.
---
### Global
| Método | Camino | Descripción | Respuesta |
| ------ | ---------------- | ------------------------------ | ------------------------------------ |
| `GET` | `/global/health` | Obtener el estado y la versión del servidor | `{ healthy: true, version: string }` |
| `GET` | `/global/event` | Obtenga eventos globales (transmisión SSE) | Flujo de eventos |
---
### Proyecto
| Método | Camino | Descripción | Respuesta |
| ------ | ------------------ | ----------------------- | --------------------------------------------- |
| `GET` | `/project` | Listar todos los proyectos | <a href={typesUrl}><code>Proyecto[]</code></a> |
| `GET` | `/project/current` | Obtener el proyecto actual | <a href={typesUrl}><code>Proyecto</code></a> |
---
### Ruta y VCS
| Método | Camino | Descripción | Respuesta |
| ------ | ------- | ------------------------------------ | ------------------------------------------- |
| `GET` | `/path` | Obtener la ruta actual | <a href={typesUrl}><code>Ruta</code></a> |
| `GET` | `/vcs` | Obtenga información de VCS para el proyecto actual | <a href={typesUrl}><code>VcsInfo</code></a> |
---
### Instancia
| Método | Camino | Descripción | Respuesta |
| ------ | ------------------- | ---------------------------- | --------- |
| `POST` | `/instance/dispose` | Eliminar la instancia actual | `boolean` |
---
### Configuración
| Método | Camino | Descripción | Respuesta |
| ------- | ------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- |
| `GET` | `/config` | Obtener información de configuración | <a href={typesUrl}><code>Configuración</code></a> |
| `PATCH` | `/config` | Actualizar configuración | <a href={typesUrl}><code>Configuración</code></a> |
| `GET` | `/config/providers` | Lista de proveedores y modelos predeterminados | `{ providers: `<a href={typesUrl}>Proveedor[]</a>`, default: { [key: string]: string } }` |
---
### Proveedor
| Método | Camino | Descripción | Respuesta |
| ------ | -------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------- |
| `GET` | `/provider` | Listar todos los proveedores | `{ all: `<a href={typesUrl}>Proveedor[]</a>`, default: {...}, connected: string[] }` |
| `GET` | `/provider/auth` | Obtener métodos de autenticación de proveedores | `{ [providerID: string]: `<a href={typesUrl}>ProviderAuthMethod[]</a>` }` |
| `POST` | `/provider/{id}/oauth/authorize` | Autorizar a un proveedor usando OAuth | <a href={typesUrl}><code>ProviderAuthAuthorization</code></a> |
| `POST` | `/provider/{id}/oauth/callback` | Manejar la devolución de llamada OAuth para un proveedor | `boolean` |
---
### Sesiones
| Método | Camino | Descripción | Notas |
| -------- | ---------------------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
| `GET` | `/session` | Listar todas las sesiones | Devuelve <a href={typesUrl}><code>Sesión[]</code></a> |
| `POST` | `/session` | Crear una nueva sesión | cuerpo: `{ parentID?, title? }`, devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `GET` | `/session/status` | Obtener el estado de la sesión para todas las sesiones | Devuelve `{ [sessionID: string]: `<a href={typesUrl}>Estado de sesión</a>` }` |
| `GET` | `/session/:id` | Obtener detalles de la sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `DELETE` | `/session/:id` | Eliminar una sesión y todos sus datos | Devuelve `boolean` |
| `PATCH` | `/session/:id` | Actualizar propiedades de sesión | cuerpo: `{ title? }`, devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `GET` | `/session/:id/children` | Obtener las sesiones secundarias de una sesión | Devuelve <a href={typesUrl}><code>Sesión[]</code></a> |
| `GET` | `/session/:id/todo` | Obtener la lista de tareas pendientes para una sesión | Devuelve <a href={typesUrl}><code>Todo[]</code></a> |
| `POST` | `/session/:id/init` | Analizar aplicación y crear `AGENTS.md` | cuerpo: `{ messageID, providerID, modelID }`, devuelve `boolean` |
| `POST` | `/session/:id/fork` | Bifurca una sesión existente en un mensaje | cuerpo: `{ messageID? }`, devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `POST` | `/session/:id/abort` | Cancelar una sesión en ejecución | Devuelve `boolean` |
| `POST` | `/session/:id/share` | Compartir una sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `DELETE` | `/session/:id/share` | Dejar de compartir una sesión | Devuelve <a href={typesUrl}><code>Sesión</code></a> |
| `GET` | `/session/:id/diff` | Obtenga la diferencia para esta sesión | consulta: `messageID?`, devuelve <a href={typesUrl}><code>FileDiff[]</code></a> |
| `POST` | `/session/:id/summarize` | Resumir la sesión | cuerpo: `{ providerID, modelID }`, devuelve `boolean` |
| `POST` | `/session/:id/revert` | Revertir un mensaje | cuerpo: `{ messageID, partID? }`, devuelve `boolean` |
| `POST` | `/session/:id/unrevert` | Restaurar todos los mensajes revertidos | Devuelve `boolean` |
| `POST` | `/session/:id/permissions/:permissionID` | Responder a una solicitud de permiso | cuerpo: `{ response, remember? }`, devuelve `boolean` |
---
### Mensajes
| Método | Camino | Descripción | Notas |
| ------ | --------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GET` | `/session/:id/message` | Listar mensajes en una sesión | consulta: `limit?`, devuelve `{ info: `<a href={typesUrl}>Mensaje</a>`, parts: `<a href={typesUrl}>Parte[]</a>`}[]` |
| `POST` | `/session/:id/message` | Envía un mensaje y espera respuesta | cuerpo: `{ messageID?, model?, agent?, noReply?, system?, tools?, parts }`, devuelve `{ info: `<a href={typesUrl}>Mensaje</a>`, parts: `<a href={typesUrl}>Parte[]</a>`}` |
| `GET` | `/session/:id/message/:messageID` | Obtener detalles del mensaje | Devuelve `{ info: `<a href={typesUrl}>Mensaje</a>`, parts: `<a href={typesUrl}>Parte[]</a>`}` |
| `POST` | `/session/:id/prompt_async` | Enviar un mensaje de forma asincrónica (sin espera) | cuerpo: igual que `/session/:id/message`, devuelve `204 No Content` |
| `POST` | `/session/:id/command` | Ejecutar un comando de barra diagonal | cuerpo: `{ messageID?, agent?, model?, command, arguments }`, devuelve `{ info: `<a href={typesUrl}>Mensaje</a>`, parts: `<a href={typesUrl}>Parte[]</a>`}` |
| `POST` | `/session/:id/shell` | Ejecute un comando de shell | cuerpo: `{ agent, model?, command }`, devuelve `{ info: `<a href={typesUrl}>Mensaje</a>`, parts: `<a href={typesUrl}>Parte[]</a>`}` |
---
### Comandos
| Método | Camino | Descripción | Respuesta |
| ------ | ---------- | ----------------- | --------------------------------------------- |
| `GET` | `/command` | Listar todos los comandos | <a href={typesUrl}><code>Comando[]</code></a> |
---
### Archivos
| Método | Camino | Descripción | Respuesta |
| ------ | ------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------- |
| `GET` | `/find?pattern=<pat>` | Buscar texto en archivos | Matriz de objetos coincidentes con `path`, `lines`, `line_number`, `absolute_offset`, `submatches` |
| `GET` | `/find/file?query=<q>` | Buscar archivos y directorios por nombre | `string[]` (caminos) |
| `GET` | `/find/symbol?query=<q>` | Buscar símbolos del espacio de trabajo | <a href={typesUrl}><code>Símbolo[]</code></a> |
| `GET` | `/file?path=<path>` | Listar archivos y directorios | <a href={typesUrl}><code>FileNode[]</code></a> |
| `GET` | `/file/content?path=<p>` | Leer un archivo | <a href={typesUrl}><code>Contenido del archivo</code></a> |
| `GET` | `/file/status` | Obtener el estado de los archivos rastreados | <a href={typesUrl}><code>Archivo[]</code></a> |
#### `/find/file` parámetros de consulta
- `query` (obligatorio) — cadena de búsqueda (coincidencia aproximada)
- `type` (opcional): limita los resultados a `"file"` o `"directory"`
- `directory` (opcional): anula la raíz del proyecto para la búsqueda.
- `limit` (opcional) — resultados máximos (1200)
- `dirs` (opcional): indicador heredado (`"false"` devuelve solo archivos)
---
### Herramientas (experimentales)
| Método | Camino | Descripción | Respuesta |
| ------ | ------------------------------------------- | ---------------------------------------- | -------------------------------------------- |
| `GET` | `/experimental/tool/ids` | Listar todos los ID de herramientas | <a href={typesUrl}><code>ID de herramientas</code></a> |
| `GET` | `/experimental/tool?provider=<p>&model=<m>` | Listar herramientas con esquemas JSON para un modelo | <a href={typesUrl}><code>Lista de herramientas</code></a> |
---
### LSP, formateadores y MCP
| Método | Camino | Descripción | Respuesta |
| ------ | ------------ | -------------------------- | -------------------------------------------------------- |
| `GET` | `/lsp` | Obtener el estado del servidor LSP | <a href={typesUrl}><code>LSPStatus[]</code></a> |
| `GET` | `/formatter` | Obtener estado del formateador | <a href={typesUrl}><code>FormatterStatus[]</code></a> |
| `GET` | `/mcp` | Obtener el estado del servidor MCP | `{ [name: string]: `<a href={typesUrl}>MCPStatus</a>` }` |
| `POST` | `/mcp` | Agregue el servidor MCP dinámicamente | cuerpo: `{ name, config }`, devuelve MCP objeto de estado |
---
### Agentes
| Método | Camino | Descripción | Respuesta |
| ------ | -------- | ------------------------- | ------------------------------------------- |
| `GET` | `/agent` | Listar todos los agentes disponibles | <a href={typesUrl}><code>Agente[]</code></a> |
---
### Registro
| Método | Camino | Descripción | Respuesta |
| ------ | ------ | ------------------------------------------------------------ | --------- |
| `POST` | `/log` | Escribir entrada de registro. Cuerpo: `{ service, level, message, extra? }` | `boolean` |
---
### TUI
| Método | Camino | Descripción | Respuesta |
| ------ | ----------------------- | ------------------------------------------- | ---------------------- |
| `POST` | `/tui/append-prompt` | Agregar texto al mensaje | `boolean` |
| `POST` | `/tui/open-help` | Abra el cuadro de diálogo de ayuda | `boolean` |
| `POST` | `/tui/open-sessions` | Abrir el selector de sesiones | `boolean` |
| `POST` | `/tui/open-themes` | Abra el selector de temas | `boolean` |
| `POST` | `/tui/open-models` | Abrir el selector de modelo | `boolean` |
| `POST` | `/tui/submit-prompt` | Enviar el mensaje actual | `boolean` |
| `POST` | `/tui/clear-prompt` | Borrar el mensaje | `boolean` |
| `POST` | `/tui/execute-command` | Ejecutar un comando (`{ command }`) | `boolean` |
| `POST` | `/tui/show-toast` | Mostrar brindis (`{ title?, message, variant }`) | `boolean` |
| `GET` | `/tui/control/next` | Espere la próxima solicitud de control | Objeto de solicitud de control |
| `POST` | `/tui/control/response` | Responder a una solicitud de control (`{ body }`) | `boolean` |
---
### Autenticación
| Método | Camino | Descripción | Respuesta |
| ------ | ----------- | --------------------------------------------------------------- | --------- |
| `PUT` | `/auth/:id` | Establecer credenciales de autenticación. El cuerpo debe coincidir con el esquema del proveedor | `boolean` |
---
### Eventos
| Método | Camino | Descripción | Respuesta |
| ------ | -------- | ----------------------------------------------------------------------------- | ------------------------- |
| `GET` | `/event` | Transmisión de eventos enviados por el servidor. El primer evento es `server.connected`, luego eventos de bus | Transmisión de eventos enviados por el servidor |
---
### Documentos
| Método | Camino | Descripción | Respuesta |
| ------ | ------ | ------------------------- | --------------------------- |
| `GET` | `/doc` | Especificación OpenAPI 3.1 | Página HTML con especificación OpenAPI |

View File

@@ -0,0 +1,128 @@
---
title: Compartir
description: Comparte tus conversaciones OpenCode.
---
La función para compartir de OpenCode te permite crear enlaces públicos a tus conversaciones de OpenCode, para que puedas colaborar con compañeros de equipo u obtener ayuda de otros.
:::nota
Las conversaciones compartidas son de acceso público para cualquier persona que tenga el enlace.
:::
---
## Cómo funciona
Cuando compartes una conversación, OpenCode:
1. Crea una URL pública única para su sesión.
2. Sincroniza tu historial de conversaciones con nuestros servidores
3. Hace que la conversación sea accesible a través del enlace para compartir: `opncd.ai/s/<share-id>`
---
## Intercambio
OpenCode admite tres modos de compartir que controlan cómo se comparten las conversaciones:
---
### Manual (predeterminado)
De forma predeterminada, OpenCode usa el modo de compartir manual. Las sesiones no se comparten automáticamente, pero puedes compartirlas manualmente usando el comando `/share`:
```
/share
```
Esto generará una URL única que se copiará en su portapapeles.
Para configurar explícitamente el modo manual en su [archivo de configuración](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "manual"
}
```
---
### Compartir automáticamente
Puede habilitar el uso compartido automático para todas las conversaciones nuevas configurando la opción `share` en `"auto"` en su [archivo de configuración](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "auto"
}
```
Con el uso compartido automático habilitado, cada nueva conversación se compartirá automáticamente y se generará un enlace.
---
### Desactivado
Puede desactivar el uso compartido por completo configurando la opción `share` en `"disabled"` en su [archivo de configuración](/docs/config):
```json title="opencode.json"
{
"$schema": "https://opncd.ai/config.json",
"share": "disabled"
}
```
Para aplicar esto en todo su equipo para un proyecto determinado, agréguelo al `opencode.json` en su proyecto y regístrelo en Git.
---
## Dejar de compartir
Para dejar de compartir una conversación y eliminarla del acceso público:
```
/unshare
```
Esto eliminará el enlace para compartir y eliminará los datos relacionados con la conversación.
---
## Privacidad
Hay algunas cosas a tener en cuenta al compartir una conversación.
---
### Retención de datos
Las conversaciones compartidas permanecen accesibles hasta que las dejes de compartir explícitamente. Este
incluye:
- Historial de conversaciones completo
- Todos los mensajes y respuestas.
- Metadatos de la sesión
---
### Recomendaciones
- Comparta únicamente conversaciones que no contengan información confidencial.
- Revisar el contenido de la conversación antes de compartir.
- Dejar de compartir conversaciones cuando se complete la colaboración.
- Evite compartir conversaciones con código propietario o datos confidenciales.
- Para proyectos confidenciales, deshabilite el uso compartido por completo.
---
## Para empresas
Para implementaciones empresariales, la función de compartir puede ser:
- **Desactivado** completamente por motivos de seguridad.
- **Restringido** solo a usuarios autenticados a través de SSO
- **Autohospedado** en tu propia infraestructura
[Obtenga más información](/docs/enterprise) sobre el uso de opencode en su organización.

View File

@@ -0,0 +1,222 @@
---
title: "Habilidades del agente"
description: "Defina el comportamiento reutilizable mediante definiciones de SKILL.md"
---
Las habilidades del agente permiten a OpenCode descubrir instrucciones reutilizables de su repositorio o directorio de inicio.
Las habilidades se cargan bajo demanda a través de la herramienta nativa `skill`: los agentes ven las habilidades disponibles y pueden cargar el contenido completo cuando sea necesario.
---
## Colocar archivos
Cree una carpeta por nombre de habilidad y coloque un `SKILL.md` dentro de ella.
OpenCode busca estas ubicaciones:
- Configuración del proyecto: `.opencode/skills/<name>/SKILL.md`
- Configuración global: `~/.config/opencode/skills/<name>/SKILL.md`
- Compatible con Proyecto Claude: `.claude/skills/<name>/SKILL.md`
- Compatible con Claude global: `~/.claude/skills/<name>/SKILL.md`
- Compatible con agente de proyecto: `.agents/skills/<name>/SKILL.md`
- Compatible con agentes globales: `~/.agents/skills/<name>/SKILL.md`
---
## Entender el descubrimiento
Para las rutas locales del proyecto, OpenCode sube desde su directorio de trabajo actual hasta llegar al árbol de trabajo de git.
Carga cualquier `skills/*/SKILL.md` coincidente en `.opencode/` y cualquier `.claude/skills/*/SKILL.md` o `.agents/skills/*/SKILL.md` coincidente a lo largo del camino.
Las definiciones globales también se cargan desde `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` y `~/.agents/skills/*/SKILL.md`.
---
## Escribe la introducción
Cada `SKILL.md` debe comenzar con el frontmatter de YAML.
Sólo se reconocen estos campos:
- `name` (obligatorio)
- `description` (obligatorio)
- `license` (opcional)
- `compatibility` (opcional)
- `metadata` (opcional, mapa de cadena a cadena)
Los campos desconocidos se ignoran.
---
## Validar nombres
`name` debe:
- Tener entre 1 y 64 caracteres.
- Ser alfanuméricos en minúsculas con separadores de guión simple
- No comienza ni termina con `-`
- No contener `--` consecutivos
- Coincide con el nombre del directorio que contiene `SKILL.md`
expresión regular equivalente:
```text
^[a-z0-9]+(-[a-z0-9]+)*$
```
---
## Siga las reglas de longitud
`description` debe tener entre 1 y 1024 caracteres.
Manténgalo lo suficientemente específico para que el agente elija correctamente.
---
## Usa un ejemplo
Crea `.opencode/skills/git-release/SKILL.md` así:
```markdown
---
name: git-release
description: Create consistent releases and changelogs
license: MIT
compatibility: opencode
metadata:
audience: maintainers
workflow: github
---
## What I do
- Draft release notes from merged PRs
- Propose a version bump
- Provide a copy-pasteable `gh release create` command
## When to use me
Use this when you are preparing a tagged release.
Ask clarifying questions if the target versioning scheme is unclear.
```
---
## Reconocer la descripción de la herramienta
OpenCode enumera las habilidades disponibles en la descripción de la herramienta `skill`.
Cada entrada incluye el nombre y la descripción de la habilidad:
```xml
<available_skills>
<skill>
<name>git-release</name>
<description>Create consistent releases and changelogs</description>
</skill>
</available_skills>
```
El agente carga una habilidad llamando a la herramienta:
```
skill({ name: "git-release" })
```
---
## Configurar permisos
Controle a qué agentes de habilidades pueden acceder utilizando permisos basados en patrones en `opencode.json`:
```json
{
"permission": {
"skill": {
"*": "allow",
"pr-review": "allow",
"internal-*": "deny",
"experimental-*": "ask"
}
}
}
```
| Permiso | Comportamiento |
| ---------- | ----------------------------------------- |
| `allow` | La habilidad se carga inmediatamente |
| `deny` | Habilidad oculta al agente, acceso rechazado |
| `ask` | Se solicita al usuario aprobación antes de cargar |
Los patrones admiten comodines: `internal-*` coincide con `internal-docs`, `internal-tools`, etc.
---
## Anulación por agente
Otorgue a agentes específicos permisos diferentes a los predeterminados globales.
**Para agentes personalizados** (en el frente del agente):
```yaml
---
permission:
skill:
"documents-*": "allow"
---
```
**Para agentes integrados** (en `opencode.json`):
```json
{
"agent": {
"plan": {
"permission": {
"skill": {
"internal-*": "allow"
}
}
}
}
}
```
---
## Deshabilitar la herramienta de habilidades
Deshabilite completamente las habilidades para los agentes que no deberían usarlas:
**Para agentes personalizados**:
```yaml
---
tools:
skill: false
---
```
**Para agentes integrados**:
```json
{
"agent": {
"plan": {
"tools": {
"skill": false
}
}
}
}
```
Cuando está deshabilitada, la sección `<available_skills>` se omite por completo.
---
## Solucionar problemas de carga
Si una habilidad no aparece:
1. Verifique que `SKILL.md` esté escrito en mayúsculas.
2. Verifique que el frontmatter incluya `name` y `description`
3. Asegúrese de que los nombres de las habilidades sean únicos en todas las ubicaciones
4. Verifique los permisos: las habilidades con `deny` están ocultas para los agentes

View File

@@ -0,0 +1,369 @@
---
title: Temas
description: Seleccione un tema integrado o defina el suyo propio.
---
Con OpenCode puede seleccionar uno de varios temas integrados, usar un tema que se adapte al tema de su terminal o definir su propio tema personalizado.
De forma predeterminada, OpenCode usa nuestro propio tema `opencode`.
---
## Requisitos del terminal
Para que los temas se muestren correctamente con su paleta de colores completa, su terminal debe admitir **truecolor** (color de 24 bits). La mayoría de los terminales modernos admiten esto de forma predeterminada, pero es posible que debas habilitarlo:
- **Verificar soporte**: Ejecute `echo $COLORTERM` - debería generar `truecolor` o `24bit`
- **Habilitar color verdadero**: establezca la variable de entorno `COLORTERM=truecolor` en su perfil de shell
- **Compatibilidad de terminal**: asegúrese de que su emulador de terminal admita colores de 24 bits (la mayoría de los terminales modernos como iTerm2, Alacritty, Kitty, Windows Terminal y las versiones recientes de GNOME Terminal lo hacen)
Sin soporte de color verdadero, los temas pueden aparecer con una precisión de color reducida o retroceder a la aproximación de 256 colores más cercana.
---
## Temas integrados
OpenCode viene con varios temas integrados.
| Nombre | Descripción |
| ---------------------- | ---------------------------------------------------------------------------- |
| `system` | Se adapta al color de fondo de tu terminal |
| `tokyonight` | Basado en el tema [Tokyonight](https://github.com/folke/tokyonight.nvim) |
| `everforest` | Basado en el tema [Everforest](https://github.com/sainnhe/everforest) |
| `ayu` | Basado en el tema oscuro de [Ayu](https://github.com/ayu-theme) |
| `catppuccin` | Basado en el tema [Catppuccin](https://github.com/catppuccin) |
| `catppuccin-macchiato` | Basado en el tema [Catppuccin](https://github.com/catppuccin) |
| `gruvbox` | Basado en el tema [Gruvbox](https://github.com/morhetz/gruvbox) |
| `kanagawa` | Basado en el tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
| `nord` | Basado en el tema [Nord](https://github.com/nordtheme/nord) |
| `matrix` | Verde estilo hacker sobre el tema negro |
| `one-dark` | Basado en el tema oscuro [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
Y más, constantemente agregamos nuevos temas.
---
## Tema del sistema
El tema `system` está diseñado para adaptarse automáticamente a la combinación de colores de su terminal. A diferencia de los temas tradicionales que utilizan colores fijos, el tema _system_:
- **Genera escala de grises**: Crea una escala de grises personalizada basada en el color de fondo de tu terminal, asegurando un contraste óptimo.
- **Utiliza colores ANSI**: aprovecha los colores ANSI estándar (0-15) para resaltar la sintaxis y los elementos de la interfaz de usuario, que respetan la paleta de colores de su terminal.
- **Conserva los valores predeterminados del terminal**: utiliza `none` para el texto y los colores de fondo para mantener la apariencia nativa de su terminal.
El tema del sistema es para usuarios que:
- Quiere que OpenCode coincida con la apariencia de su terminal
- Utilice esquemas de color de terminal personalizados
- Prefiere una apariencia consistente en todas las aplicaciones de terminal
---
## Usando un tema
Puede seleccionar un tema abriendo la selección de tema con el comando `/theme`. O puede especificarlo en su [config](/docs/config).
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"theme": "tokyonight"
}
```
---
## Temas personalizados
OpenCode admite un sistema de temas flexible basado en JSON que permite a los usuarios crear y personalizar temas fácilmente.
---
### Jerarquía
Los temas se cargan desde varios directorios en el siguiente orden, donde los directorios posteriores anulan los anteriores:
1. **Temas integrados**: están integrados en el binario
2. **Directorio de configuración de usuario**: definido en `~/.config/opencode/themes/*.json` o `$XDG_CONFIG_HOME/opencode/themes/*.json`
3. **Directorio raíz del proyecto**: definido en `<project-root>/.opencode/themes/*.json`
4. **Directorio de trabajo actual** - Definido en `./.opencode/themes/*.json`
Si varios directorios contienen un tema con el mismo nombre, se utilizará el tema del directorio con mayor prioridad.
---
### Creando un tema
Para crear un tema personalizado, cree un archivo JSON en uno de los directorios de temas.
Para temas para todo el usuario:
```bash no-frame
mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json
```
Y para temas específicos del proyecto.
```bash no-frame
mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json
```
---
### formato JSON
Los temas utilizan un formato JSON flexible compatible con:
- **Colores hexadecimales**: `"#ffffff"`
- **Colores ANSI**: `3` (0-255)
- **Referencias de color**: `"primary"` o definiciones personalizadas
- **Variantes oscuras/claras**: `{"dark": "#000", "light": "#fff"}`
- **Sin color**: `"none"` - Utiliza el color predeterminado del terminal o transparente
---
### Definiciones de colores
La sección `defs` es opcional y le permite definir colores reutilizables a los que se puede hacer referencia en el tema.
---
### Valores predeterminados del terminal
El valor especial `"none"` se puede utilizar para que cualquier color herede el color predeterminado del terminal. Esto es particularmente útil para crear temas que combinen perfectamente con la combinación de colores de su terminal:
- `"text": "none"` - Utiliza el color de primer plano predeterminado del terminal
- `"background": "none"` - Utiliza el color de fondo predeterminado del terminal
---
### Ejemplo
A continuación se muestra un ejemplo de un tema personalizado:
```json title="my-theme.json"
{
"$schema": "https://opencode.ai/theme.json",
"defs": {
"nord0": "#2E3440",
"nord1": "#3B4252",
"nord2": "#434C5E",
"nord3": "#4C566A",
"nord4": "#D8DEE9",
"nord5": "#E5E9F0",
"nord6": "#ECEFF4",
"nord7": "#8FBCBB",
"nord8": "#88C0D0",
"nord9": "#81A1C1",
"nord10": "#5E81AC",
"nord11": "#BF616A",
"nord12": "#D08770",
"nord13": "#EBCB8B",
"nord14": "#A3BE8C",
"nord15": "#B48EAD"
},
"theme": {
"primary": {
"dark": "nord8",
"light": "nord10"
},
"secondary": {
"dark": "nord9",
"light": "nord9"
},
"accent": {
"dark": "nord7",
"light": "nord7"
},
"error": {
"dark": "nord11",
"light": "nord11"
},
"warning": {
"dark": "nord12",
"light": "nord12"
},
"success": {
"dark": "nord14",
"light": "nord14"
},
"info": {
"dark": "nord8",
"light": "nord10"
},
"text": {
"dark": "nord4",
"light": "nord0"
},
"textMuted": {
"dark": "nord3",
"light": "nord1"
},
"background": {
"dark": "nord0",
"light": "nord6"
},
"backgroundPanel": {
"dark": "nord1",
"light": "nord5"
},
"backgroundElement": {
"dark": "nord1",
"light": "nord4"
},
"border": {
"dark": "nord2",
"light": "nord3"
},
"borderActive": {
"dark": "nord3",
"light": "nord2"
},
"borderSubtle": {
"dark": "nord2",
"light": "nord3"
},
"diffAdded": {
"dark": "nord14",
"light": "nord14"
},
"diffRemoved": {
"dark": "nord11",
"light": "nord11"
},
"diffContext": {
"dark": "nord3",
"light": "nord3"
},
"diffHunkHeader": {
"dark": "nord3",
"light": "nord3"
},
"diffHighlightAdded": {
"dark": "nord14",
"light": "nord14"
},
"diffHighlightRemoved": {
"dark": "nord11",
"light": "nord11"
},
"diffAddedBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffRemovedBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffContextBg": {
"dark": "nord1",
"light": "nord5"
},
"diffLineNumber": {
"dark": "nord2",
"light": "nord4"
},
"diffAddedLineNumberBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"diffRemovedLineNumberBg": {
"dark": "#3B4252",
"light": "#E5E9F0"
},
"markdownText": {
"dark": "nord4",
"light": "nord0"
},
"markdownHeading": {
"dark": "nord8",
"light": "nord10"
},
"markdownLink": {
"dark": "nord9",
"light": "nord9"
},
"markdownLinkText": {
"dark": "nord7",
"light": "nord7"
},
"markdownCode": {
"dark": "nord14",
"light": "nord14"
},
"markdownBlockQuote": {
"dark": "nord3",
"light": "nord3"
},
"markdownEmph": {
"dark": "nord12",
"light": "nord12"
},
"markdownStrong": {
"dark": "nord13",
"light": "nord13"
},
"markdownHorizontalRule": {
"dark": "nord3",
"light": "nord3"
},
"markdownListItem": {
"dark": "nord8",
"light": "nord10"
},
"markdownListEnumeration": {
"dark": "nord7",
"light": "nord7"
},
"markdownImage": {
"dark": "nord9",
"light": "nord9"
},
"markdownImageText": {
"dark": "nord7",
"light": "nord7"
},
"markdownCodeBlock": {
"dark": "nord4",
"light": "nord0"
},
"syntaxComment": {
"dark": "nord3",
"light": "nord3"
},
"syntaxKeyword": {
"dark": "nord9",
"light": "nord9"
},
"syntaxFunction": {
"dark": "nord8",
"light": "nord8"
},
"syntaxVariable": {
"dark": "nord7",
"light": "nord7"
},
"syntaxString": {
"dark": "nord14",
"light": "nord14"
},
"syntaxNumber": {
"dark": "nord15",
"light": "nord15"
},
"syntaxType": {
"dark": "nord7",
"light": "nord7"
},
"syntaxOperator": {
"dark": "nord9",
"light": "nord9"
},
"syntaxPunctuation": {
"dark": "nord4",
"light": "nord0"
}
}
}
```

View File

@@ -0,0 +1,379 @@
---
title: Herramientas
description: Administre las herramientas que puede usar un LLM.
---
Las herramientas permiten que LLM realice acciones en su código base. OpenCode viene con un conjunto de herramientas integradas, pero puede ampliarlo con [herramientas personalizadas](/docs/custom-tools) o [servidores MCP](/docs/mcp-servers).
De forma predeterminada, todas las herramientas están **habilitadas** y no necesitan permiso para ejecutarse. Puede controlar el comportamiento de la herramienta a través de [permisos](/docs/permissions).
---
## Configurar
Utilice el campo `permission` para controlar el comportamiento de la herramienta. Puede permitir, denegar o exigir aprobación para cada herramienta.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}
```
También puedes utilizar comodines para controlar varias herramientas a la vez. Por ejemplo, para solicitar aprobación para todas las herramientas de un servidor MCP:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mymcp_*": "ask"
}
}
```
[Más información](/docs/permissions) sobre la configuración de permisos.
---
## Incorporado
Aquí están todas las herramientas integradas disponibles en OpenCode.
---
### fiesta
Ejecute comandos de shell en el entorno de su proyecto.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
}
```
Esta herramienta permite que LLM ejecute comandos de terminal como `npm install`, `git status` o cualquier otro comando de shell.
---
### editar
Modifique archivos existentes utilizando reemplazos de cadenas exactas.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Esta herramienta realiza ediciones precisas de archivos reemplazando coincidencias de texto exactas. Es la forma principal en que LLM modifica el código.
---
### escribir
Cree nuevos archivos o sobrescriba los existentes.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Utilice esto para permitir que LLM cree nuevos archivos. Sobrescribirá los archivos existentes si ya existen.
:::nota
La herramienta `write` está controlada por el permiso `edit`, que cubre todas las modificaciones de archivos (`edit`, `write`, `patch`, `multiedit`).
:::
---
### leer
Lea el contenido del archivo desde su base de código.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"read": "allow"
}
}
```
Esta herramienta lee archivos y devuelve su contenido. Admite la lectura de rangos de líneas específicos para archivos grandes.
---
### grep
Busque contenidos de archivos utilizando expresiones regulares.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"grep": "allow"
}
}
```
Búsqueda rápida de contenido en su base de código. Admite sintaxis de expresiones regulares completa y filtrado de patrones de archivos.
---
### globo
Encuentre archivos por coincidencia de patrones.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"glob": "allow"
}
}
```
Busque archivos usando patrones globales como `**/*.js` o `src/**/*.ts`. Devuelve rutas de archivos coincidentes ordenadas por hora de modificación.
---
### lista
Enumere archivos y directorios en una ruta determinada.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"list": "allow"
}
}
```
Esta herramienta enumera el contenido del directorio. Acepta patrones globales para filtrar resultados.
---
### lsp (experimental)
Interactúe con sus servidores LSP configurados para obtener funciones de inteligencia de código como definiciones, referencias, información de desplazamiento y jerarquía de llamadas.
:::nota
Esta herramienta solo está disponible cuando `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` (o `OPENCODE_EXPERIMENTAL=true`).
:::
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
}
```
Las operaciones admitidas incluyen `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls` y `outgoingCalls`.
Para configurar qué servidores LSP están disponibles para su proyecto, consulte [Servidores LSP](/docs/lsp).
---
### parche
Aplicar parches a los archivos.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}
```
Esta herramienta aplica archivos de parche a su código base. Útil para aplicar diferencias y parches de diversas fuentes.
:::nota
La herramienta `patch` está controlada por el permiso `edit`, que cubre todas las modificaciones de archivos (`edit`, `write`, `patch`, `multiedit`).
:::
---
### habilidad
Cargue una [habilidad](/docs/skills) (un archivo `SKILL.md`) y devuelva su contenido en la conversación.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"skill": "allow"
}
}
```
---
### todo escribir
Administre listas de tareas pendientes durante las sesiones de codificación.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todowrite": "allow"
}
}
```
Crea y actualiza listas de tareas para realizar un seguimiento del progreso durante operaciones complejas. El LLM usa esto para organizar tareas de varios pasos.
:::nota
Esta herramienta está deshabilitada para los subagentes de forma predeterminada, pero puede habilitarla manualmente. [Más información](/docs/agents/#permissions)
:::
---
### todo leer
Leer listas de tareas pendientes existentes.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todoread": "allow"
}
}
```
Lee el estado actual de la lista de tareas pendientes. Utilizado por LLM para rastrear qué tareas están pendientes o completadas.
:::nota
Esta herramienta está deshabilitada para los subagentes de forma predeterminada, pero puede habilitarla manualmente. [Más información](/docs/agents/#permissions)
:::
---
### búsqueda web
Obtener contenido web.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"webfetch": "allow"
}
}
```
Permite que LLM busque y lea páginas web. Útil para buscar documentación o investigar recursos en línea.
---
### búsqueda web
Busque información en la web.
:::nota
Esta herramienta solo está disponible cuando se utiliza el proveedor OpenCode o cuando la variable de entorno `OPENCODE_ENABLE_EXA` está configurada en cualquier valor verdadero (por ejemplo, `true` o `1`).
Para habilitar al iniciar OpenCode:
```bash
OPENCODE_ENABLE_EXA=1 opencode
```
:::
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}
```
Realiza búsquedas web utilizando Exa AI para encontrar información relevante en línea. Útil para investigar temas, encontrar eventos actuales o recopilar información más allá del límite de datos de entrenamiento.
No se requiere ninguna clave API: la herramienta se conecta directamente al servicio MCP alojado de Exa AI sin autenticación.
:::consejo
Utilice `websearch` cuando necesite encontrar información (descubrimiento) y `webfetch` cuando necesite recuperar contenido de una URL específica (recuperación).
:::
---
### pregunta
Haga preguntas al usuario durante la ejecución.
```json title="opencode.json" {4}
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"question": "allow"
}
}
```
Esta herramienta permite que LLM haga preguntas al usuario durante una tarea. Es útil para:
- Recopilar preferencias o requisitos del usuario.
- Aclarar instrucciones ambiguas
- Tomar decisiones sobre las opciones de implementación.
- Ofrecer opciones sobre qué dirección tomar.
Cada pregunta incluye un encabezado, el texto de la pregunta y una lista de opciones. Los usuarios pueden seleccionar entre las opciones proporcionadas o escribir una respuesta personalizada. Cuando hay varias preguntas, los usuarios pueden navegar entre ellas antes de enviar todas las respuestas.
---
## Herramientas personalizadas
Las herramientas personalizadas le permiten definir sus propias funciones a las que LLM puede llamar. Estos están definidos en su archivo de configuración y pueden ejecutar código arbitrario.
[Más información](/docs/custom-tools) sobre la creación de herramientas personalizadas.
---
## MCP servidores
Los servidores MCP (Protocolo de contexto modelo) le permiten integrar herramientas y servicios externos. Esto incluye acceso a bases de datos, integraciones API y servicios de terceros.
[Más información](/docs/mcp-servers) sobre la configuración de servidores MCP.
---
## Internos
Internamente, herramientas como `grep`, `glob` y `list` usan [ripgrep](https://github.com/BurntSushi/ripgrep) bajo el capó. De forma predeterminada, ripgrep respeta los patrones `.gitignore`, lo que significa que los archivos y directorios enumerados en su `.gitignore` se excluirán de las búsquedas y listados.
---
### Ignorar patrones
Para incluir archivos que normalmente se ignorarían, cree un archivo `.ignore` en la raíz de su proyecto. Este archivo puede permitir explícitamente ciertas rutas.
```text title=".ignore"
!node_modules/
!dist/
!build/
```
Por ejemplo, este archivo `.ignore` permite que ripgrep busque dentro de los directorios `node_modules/`, `dist/` y `build/` incluso si figuran en `.gitignore`.

View File

@@ -0,0 +1,300 @@
---
title: Solución de problemas
description: Problemas comunes y cómo resolverlos.
---
Para depurar problemas con OpenCode, comience verificando los registros y los datos locales que almacena en el disco.
---
## Registros
Los archivos de registro se escriben en:
- **macOS/Linux**: `~/.local/share/opencode/log/`
- **Windows**: Presione `WIN+R` y pegue `%USERPROFILE%\.local\share\opencode\log`
Los archivos de registro reciben nombres con marcas de tiempo (por ejemplo, `2025-01-09T123456.log`) y se conservan los 10 archivos de registro más recientes.
Puede configurar el nivel de registro con la opción de línea de comandos `--log-level` para obtener información de depuración más detallada. Por ejemplo, `opencode --log-level DEBUG`.
---
## Almacenamiento
opencode almacena datos de sesión y otros datos de aplicaciones en el disco en:
- **macOS/Linux**: `~/.local/share/opencode/`
- **Windows**: Presione `WIN+R` y pegue `%USERPROFILE%\.local\share\opencode`
Este directorio contiene:
- `auth.json` - Datos de autenticación como API claves, OAuth tokens
- `log/` - Registros de aplicaciones
- `project/` - Datos específicos del proyecto, como datos de sesión y mensajes.
- Si el proyecto está dentro de un repositorio de Git, se almacena en `./<project-slug>/storage/`
- Si no es un repositorio de Git, se almacena en `./global/storage/`
---
## Aplicación de escritorio
OpenCode Desktop ejecuta un servidor OpenCode local (el sidecar `opencode-cli`) en segundo plano. La mayoría de los problemas se deben a un complemento que no funciona correctamente, una memoria caché dañada o una mala configuración del servidor.
### Comprobaciones rápidas
- Salga por completo y reinicie la aplicación.
- Si la aplicación muestra una pantalla de error, haga clic en **Reiniciar** y copie los detalles del error.
- Solo macOS: menú `OpenCode` -> **Recargar vista web** (ayuda si la interfaz de usuario está en blanco/congelada).
---
### Deshabilitar complementos
Si la aplicación de escritorio falla al iniciarse, se bloquea o se comporta de manera extraña, comience por deshabilitar los complementos.
#### Verifique la configuración global
Abra su archivo de configuración global y busque una clave `plugin`.
- **macOS/Linux**: `~/.config/opencode/opencode.jsonc` (o `~/.config/opencode/opencode.json`)
- **macOS/Linux** (instalaciones anteriores): `~/.local/share/opencode/opencode.jsonc`
- **Windows**: Presione `WIN+R` y pegue `%USERPROFILE%\.config\opencode\opencode.jsonc`
Si tiene complementos configurados, desactívelos temporalmente eliminando la clave o configurándola en una matriz vacía:
```jsonc
{
"$schema": "https://opencode.ai/config.json",
"plugin": [],
}
```
#### Verificar directorios de complementos
OpenCode también puede cargar complementos locales desde el disco. Quítelos temporalmente del camino (o cambie el nombre de la carpeta) y reinicie la aplicación de escritorio:
- **Complementos globales**
- **macOS/Linux**: `~/.config/opencode/plugins/`
- **Windows**: Presione `WIN+R` y pegue `%USERPROFILE%\.config\opencode\plugins`
- **Complementos de proyecto** (solo si usas la configuración por proyecto)
- `<your-project>/.opencode/plugins/`
Si la aplicación comienza a funcionar nuevamente, vuelva a habilitar los complementos uno a la vez para encontrar cuál está causando el problema.
---
### Borrar el caché
Si deshabilitar los complementos no ayuda (o la instalación de un complemento está bloqueada), borre el caché para que OpenCode pueda reconstruirlo.
1. Salga de OpenCode Desktop por completo.
2. Elimine el directorio de caché:
- **macOS**: Buscador -> `Cmd+Shift+G` -> pegar `~/.cache/opencode`
- **Linux**: eliminar `~/.cache/opencode` (o ejecutar `rm -rf ~/.cache/opencode`)
- **Windows**: Presione `WIN+R` y pegue `%USERPROFILE%\.cache\opencode`
3. Reinicie el escritorio OpenCode.
---
### Solucionar problemas de conexión del servidor
OpenCode Desktop puede iniciar su propio servidor local (predeterminado) o conectarse a la URL de un servidor que haya configurado.
Si ve un cuadro de diálogo **"Error de conexión"** (o la aplicación nunca pasa de la pantalla de inicio), busque una URL de servidor personalizada.
#### Borrar la URL del servidor predeterminado del escritorio
Desde la pantalla de inicio, haga clic en el nombre del servidor (con el punto de estado) para abrir el selector de servidor. En la sección **Servidor predeterminado**, haga clic en **Borrar**.
#### Elimina `server.port` / `server.hostname` de tu configuración
Si su `opencode.json(c)` contiene una sección `server`, elimínela temporalmente y reinicie la aplicación de escritorio.
#### Verificar variables de entorno
Si tiene `OPENCODE_PORT` configurado en su entorno, la aplicación de escritorio intentará usar ese puerto para el servidor local.
- Desarme `OPENCODE_PORT` (o elija un puerto libre) y reinicie.
---
### Linux: Problemas con Wayland/X11
En Linux, algunas configuraciones de Wayland pueden causar ventanas en blanco o errores de compositor.
- Si estás en Wayland y la aplicación está en blanco o falla, intenta iniciarla con `OC_ALLOW_WAYLAND=1`.
- Si eso empeora las cosas, elimínelo e intente iniciarlo en una sesión X11.
---
### Windows: tiempo de ejecución de WebView2
En Windows, el escritorio OpenCode requiere Microsoft Edge **WebView2 Runtime**. Si la aplicación se abre en una ventana en blanco o no se inicia, instale/actualice WebView2 e inténtelo nuevamente.
---
### Windows: Problemas generales de rendimiento
Si tiene un rendimiento lento, problemas de acceso a archivos o problemas de terminal en Windows, intente usar [WSL (Windows Subsistema para Linux)](/docs/windows-wsl). WSL proporciona un entorno Linux que funciona de manera más fluida con las funciones de OpenCode.
---
### Notificaciones que no se muestran
OpenCode Desktop solo muestra notificaciones del sistema cuando:
- las notificaciones están habilitadas para OpenCode en la configuración de su sistema operativo, y
- la ventana de la aplicación no está enfocada.
---
### Restablecer el almacenamiento de la aplicación de escritorio (último recurso)
Si la aplicación no se inicia y no puede borrar la configuración desde la interfaz de usuario, restablezca el estado guardado de la aplicación de escritorio.
1. Salga del escritorio OpenCode.
2. Busque y elimine estos archivos (se encuentran en el directorio de datos de la aplicación de escritorio OpenCode):
- `opencode.settings.dat` (URL del servidor predeterminado de escritorio)
- `opencode.global.dat` y `opencode.workspace.*.dat` (estado de la interfaz de usuario como servidores/proyectos recientes)
Para encontrar el directorio rápidamente:
- **macOS**: Finder -> `Cmd+Shift+G` -> `~/Library/Application Support` (luego busque los nombres de archivo arriba)
- **Linux**: busque en `~/.local/share` los nombres de archivo anteriores
- **Windows**: Presione `WIN+R` -> `%APPDATA%` (luego busque los nombres de archivo arriba)
---
## Obteniendo ayuda
Si tiene problemas con OpenCode:
1. **Informar problemas el GitHub**
La mejor manera de informar errores o solicitar funciones es a través de nuestro repositorio GitHub:
[**github.com/anomalyco/opencode/issues**](https://github.com/anomalyco/opencode/issues)
Antes de crear un nuevo problema, busque los problemas existentes para ver si su problema ya ha sido informado.
2. **Únete a nuestro Discord**
Para obtener ayuda en tiempo real y debates comunitarios, únase a nuestro servidor de Discord:
[**opencode.ai/discord**](https://opencode.ai/discord)
---
## Problemas comunes
A continuación se detallan algunos problemas comunes y cómo resolverlos.
---
### OpenCode no se inicia
1. Verifique los registros en busca de mensajes de error.
2. Intente ejecutar con `--print-logs` para ver el resultado en la terminal.
3. Asegúrese de tener la última versión con `opencode upgrade`
---
### Problemas de autenticación
1. Intente volver a autenticarse con el comando `/connect` en TUI
2. Verifique que sus claves API sean válidas
3. Asegúrese de que su red permita conexiones al API del proveedor.
---
### Modelo no disponible
1. Comprueba que te has autenticado con el proveedor.
2. Verifique que el nombre del modelo en su configuración sea correcto
3. Algunos modelos pueden requerir acceso o suscripciones específicas
Si encuentra `ProviderModelNotFoundError`, lo más probable es que esté equivocado.
haciendo referencia a un modelo en alguna parte.
Se debe hacer referencia a los modelos así: `<providerId>/<modelId>`
Ejemplos:
- `openai/gpt-4.1`
- `openrouter/google/gemini-2.5-flash`
- `opencode/kimi-k2`
Para saber a qué modelos tiene acceso, ejecute `opencode models`
---
### Error de inicio del proveedor
Si encuentra un ProviderInitError, es probable que tenga una configuración no válida o dañada.
Para resolver esto:
1. Primero, verifique que su proveedor esté configurado correctamente siguiendo la [guía de proveedores](/docs/providers)
2. Si el problema persiste, intente borrar la configuración almacenada:
```bash
rm -rf ~/.local/share/opencode
```
En Windows, presione `WIN+R` y elimine: `%USERPROFILE%\.local\share\opencode`
3. Vuelva a autenticarse con su proveedor utilizando el comando `/connect` en TUI.
---
### AI_APICallError y problemas con el paquete del proveedor
Si encuentra errores de llamada API, esto puede deberse a paquetes de proveedores obsoletos. opencode instala dinámicamente paquetes de proveedores (OpenAI, Anthropic, Google, etc.) según sea necesario y los almacena en caché localmente.
Para resolver problemas con el paquete del proveedor:
1. Borre la caché del paquete del proveedor:
```bash
rm -rf ~/.cache/opencode
```
En Windows, presione `WIN+R` y elimine: `%USERPROFILE%\.cache\opencode`
2. Reinicie opencode para reinstalar los paquetes del proveedor más recientes.
Esto obligará a opencode a descargar las versiones más recientes de los paquetes del proveedor, lo que a menudo resuelve problemas de compatibilidad con los parámetros del modelo y los cambios de API.
---
### Copiar/pegar no funciona en Linux
Los usuarios de Linux deben tener instalada una de las siguientes utilidades del portapapeles para que funcione la función copiar/pegar:
**Para sistemas X11:**
```bash
apt install -y xclip
# or
apt install -y xsel
```
**Para sistemas Wayland:**
```bash
apt install -y wl-clipboard
```
**Para entornos sin cabeza:**
```bash
apt install -y xvfb
# and run:
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
export DISPLAY=:99.0
```
opencode detectará si estás usando Wayland y prefieres `wl-clipboard`; de lo contrario, intentará encontrar herramientas del portapapeles en el orden de: `xclip` y `xsel`.

View File

@@ -0,0 +1,390 @@
---
title: TUI
description: Usando la interfaz de usuario del terminal OpenCode.
---
import { Tabs, TabItem } from "@astrojs/starlight/components"
OpenCode proporciona una interfaz de terminal interactiva o TUI para trabajar en sus proyectos con un LLM.
Al ejecutar OpenCode se inicia TUI para el directorio actual.
```bash
opencode
```
O puede iniciarlo para un directorio de trabajo específico.
```bash
opencode /path/to/project
```
Una vez que esté en TUI, puede indicarlo con un mensaje.
```text
Give me a quick summary of the codebase.
```
---
## Referencias de archivos
Puede hacer referencia a archivos en sus mensajes usando `@`. Esto realiza una búsqueda difusa de archivos en el directorio de trabajo actual.
:::consejo
También puede utilizar `@` para hacer referencia a archivos en sus mensajes.
:::
```text "@packages/functions/src/api/index.ts"
How is auth handled in @packages/functions/src/api/index.ts?
```
El contenido del archivo se agrega a la conversación automáticamente.
---
## Comandos bash
Inicie un mensaje con `!` para ejecutar un comando de shell.
```bash frame="none"
!ls -la
```
El resultado del comando se agrega a la conversación como resultado de la herramienta.
---
## Comandos
Cuando utilice OpenCode TUI, puede escribir `/` seguido de un nombre de comando para ejecutar acciones rápidamente. Por ejemplo:
```bash frame="none"
/help
```
La mayoría de los comandos también tienen una combinación de teclas que utiliza `ctrl+x` como tecla principal, donde `ctrl+x` es la tecla principal predeterminada. [Más información](/docs/keybinds).
Aquí están todos los comandos de barra diagonal disponibles:
---
### conectar
Agregue un proveedor a OpenCode. Le permite seleccionar entre proveedores disponibles y agregar sus claves API.
```bash frame="none"
/connect
```
---
### compacto
Compacta la sesión actual. _Alias_: `/summarize`
```bash frame="none"
/compact
```
**Combinación de teclas:** `ctrl+x c`
---
### detalles
Alternar detalles de ejecución de la herramienta.
```bash frame="none"
/details
```
**Combinación de teclas:** `ctrl+x d`
---
### editor
Abra un editor externo para redactar mensajes. Utiliza el editor configurado en su variable de entorno `EDITOR`. [Más información](#editor-setup).
```bash frame="none"
/editor
```
**Combinación de teclas:** `ctrl+x e`
---
### salida
Salga de OpenCode. _Alias_: `/quit`, `/q`
```bash frame="none"
/exit
```
**Combinación de teclas:** `ctrl+x q`
---
### exportar
Exporte la conversación actual a Markdown y ábrala en su editor predeterminado. Utiliza el editor configurado en su variable de entorno `EDITOR`. [Más información](#editor-setup).
```bash frame="none"
/export
```
**Combinación de teclas:** `ctrl+x x`
---
### ayuda
Muestra el cuadro de diálogo de ayuda.
```bash frame="none"
/help
```
**Combinación de teclas:** `ctrl+x h`
---
### inicio
Cree o actualice el archivo `AGENTS.md`. [Más información](/docs/rules).
```bash frame="none"
/init
```
**Combinación de teclas:** `ctrl+x i`
---
### modelos
Listar modelos disponibles.
```bash frame="none"
/models
```
**Combinación de teclas:** `ctrl+x m`
---
### nuevo
Iniciar una nueva sesión. _Alias_: `/clear`
```bash frame="none"
/new
```
**Combinación de teclas:** `ctrl+x n`
---
### rehacer
Rehacer un mensaje previamente deshecho. Solo disponible después de usar `/undo`.
:::consejo
También se restaurarán todos los cambios en el archivo.
:::
Internamente, esto utiliza Git para gestionar los cambios de archivos. Entonces tu proyecto **necesita
ser un repositorio Git**.
```bash frame="none"
/redo
```
**Combinación de teclas:** `ctrl+x r`
---
### sesiones
Enumere y cambie entre sesiones. _Alias_: `/resume`, `/continue`
```bash frame="none"
/sessions
```
**Combinación de teclas:** `ctrl+x l`
---
### compartir
Compartir la sesión actual. [Más información](/docs/share).
```bash frame="none"
/share
```
**Combinación de teclas:** `ctrl+x s`
---
### temas
Listar temas disponibles.
```bash frame="none"
/theme
```
**Combinación de teclas:** `ctrl+x t`
---
### pensamiento
Alterna la visibilidad de los bloques de pensamiento/razonamiento en la conversación. Cuando está habilitado, puede ver el proceso de razonamiento del modelo para los modelos que admiten el pensamiento extendido.
:::nota
Este comando solo controla si se **muestran** los bloques de pensamiento; no habilita ni deshabilita las capacidades de razonamiento del modelo. Para alternar las capacidades de razonamiento reales, use `ctrl+t` para recorrer las variantes del modelo.
:::
```bash frame="none"
/thinking
```
---
### deshacer
Deshacer el último mensaje de la conversación. Elimina el mensaje de usuario más reciente, todas las respuestas posteriores y cualquier cambio de archivo.
:::consejo
Cualquier cambio de archivo realizado también se revertirá.
:::
Internamente, esto utiliza Git para gestionar los cambios de archivos. Entonces tu proyecto **necesita
ser un repositorio Git**.
```bash frame="none"
/undo
```
**Combinación de teclas:** `ctrl+x u`
---
### dejar de compartir
Dejar de compartir la sesión actual. [Más información](/docs/share#un-sharing).
```bash frame="none"
/unshare
```
---
## Configuración del editor
Tanto el comando `/editor` como el `/export` usan el editor especificado en su variable de entorno `EDITOR`.
<Tabs>
<TabItem label="Linux/macOS">
```bash
# Example for nano or vim
export EDITOR=nano
export EDITOR=vim
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
# include --wait
export EDITOR="code --wait"
```
Para hacerlo permanente, agréguelo a su perfil de shell;
`~/.bashrc`, `~/.zshrc`, etc.
</TabItem>
<TabItem label="Windows (CMD)">
```bash
set EDITOR=notepad
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
# include --wait
set EDITOR=code --wait
```
Para hacerlo permanente, use **Propiedades del sistema** > **Entorno
Variables**.
</TabItem>
<TabItem label="Windows (PowerShell)">
```powershell
$env:EDITOR = "notepad"
# For GUI editors, VS Code, Cursor, VSCodium, Windsurf, Zed, etc.
# include --wait
$env:EDITOR = "code --wait"
```
Para hacerlo permanente, agréguelo a su perfil de PowerShell.
</TabItem>
</Tabs>
Las opciones de editor populares incluyen:
- `code` - Código de Visual Studio
- `cursor` - Cursor
- `windsurf` - Windsurf
- `nvim` - Editor Neovim
- `vim` - Editor Vim
- `nano` - Nanoeditor
- `notepad` - Windows Bloc de notas
- `subl` - Texto sublime
:::nota
Algunos editores como VS Code deben iniciarse con el indicador `--wait`.
:::
Algunos editores necesitan argumentos de línea de comandos para ejecutarse en modo de bloqueo. El indicador `--wait` hace que el proceso del editor se bloquee hasta que se cierre.
---
## Configurar
Puede personalizar el comportamiento de TUI a través de su archivo de configuración OpenCode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"tui": {
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
}
}
}
```
### Opciones
- `scroll_acceleration`: habilite la aceleración de desplazamiento estilo macOS para un desplazamiento suave y natural. Cuando está habilitado, la velocidad de desplazamiento aumenta con gestos de desplazamiento rápido y se mantiene precisa para movimientos más lentos. **Esta configuración tiene prioridad sobre `scroll_speed` y la anula cuando está habilitada.**
- `scroll_speed`: controla la rapidez con la que se desplaza el TUI cuando se utilizan comandos de desplazamiento (mínimo: `1`). El valor predeterminado es `3`. **Nota: Esto se ignora si `scroll_acceleration.enabled` está configurado en `true`.**
---
## Personalización
Puede personalizar varios aspectos de la vista TUI usando la paleta de comandos (`ctrl+x h` o `/help`). Estas configuraciones persisten después de los reinicios.
---
#### Visualización del nombre de usuario
Alterna si tu nombre de usuario aparece en los mensajes de chat. Accede a este a través de:
- Paleta de comandos: busque "nombre de usuario" u "ocultar nombre de usuario"
- La configuración persiste automáticamente y se recordará en TUI sesiones

View File

@@ -0,0 +1,142 @@
---
title: Web
description: Usando OpenCode en su navegador.
---
OpenCode puede ejecutarse como una aplicación web en su navegador, brindando la misma poderosa experiencia de codificación de IA sin necesidad de una terminal.
![OpenCode Web - Nueva sesión](../../../assets/web/web-homepage-new-session.png)
## Empezando
Inicie la interfaz web ejecutando:
```bash
opencode web
```
Esto inicia un servidor local en `127.0.0.1` con un puerto disponible aleatorio y abre automáticamente OpenCode en su navegador predeterminado.
:::precaución
Si no se establece `OPENCODE_SERVER_PASSWORD`, el servidor no será seguro. Esto está bien para uso local, pero debe configurarse para acceso a la red.
:::
:::tip[Windows Usuarios]
Para obtener la mejor experiencia, ejecute `opencode web` desde [WSL](/docs/windows-wsl) en lugar de PowerShell. Esto garantiza el acceso adecuado al sistema de archivos y la integración del terminal.
:::
---
## Configuración
Puede configurar el servidor web usando indicadores de línea de comando o en su [archivo de configuración](/docs/config).
### Puerto
De forma predeterminada, OpenCode elige un puerto disponible. Puede especificar un puerto:
```bash
opencode web --port 4096
```
### Nombre de host
De forma predeterminada, el servidor se vincula a `127.0.0.1` (solo localhost). Para hacer que OpenCode sea accesible en su red:
```bash
opencode web --hostname 0.0.0.0
```
Al usar `0.0.0.0`, OpenCode mostrará direcciones locales y de red:
```
Local access: http://localhost:4096
Network access: http://192.168.1.100:4096
```
### Descubrimiento de mDNS
Habilite mDNS para que su servidor sea reconocible en la red local:
```bash
opencode web --mdns
```
Esto establece automáticamente el nombre de host en `0.0.0.0` y anuncia el servidor como `opencode.local`.
Puede personalizar el nombre de dominio mDNS para ejecutar varias instancias en la misma red:
```bash
opencode web --mdns --mdns-domain myproject.local
```
### CORS
Para permitir dominios adicionales para CORS (útil para interfaces personalizadas):
```bash
opencode web --cors https://example.com
```
### Autenticación
Para proteger el acceso, establezca una contraseña utilizando la variable de entorno `OPENCODE_SERVER_PASSWORD`:
```bash
OPENCODE_SERVER_PASSWORD=secret opencode web
```
El nombre de usuario predeterminado es `opencode` pero se puede cambiar con `OPENCODE_SERVER_USERNAME`.
---
## Uso de la interfaz web
Una vez iniciada, la interfaz web proporciona acceso a sus sesiones OpenCode.
### Sesiones
Vea y administre sus sesiones desde la página de inicio. Puedes ver sesiones activas e iniciar otras nuevas.
![OpenCode Web - Sesión activa](../../../assets/web/web-homepage-active-session.png)
### Estado del servidor
Haga clic en "Ver servidores" para ver los servidores conectados y su estado.
![OpenCode Web - Ver Servidores](../../../assets/web/web-homepage-see-servers.png)
---
## Adjuntar una terminal
Puede conectar un terminal TUI a un servidor web en ejecución:
```bash
# Start the web server
opencode web --port 4096
# In another terminal, attach the TUI
opencode attach http://localhost:4096
```
Esto le permite utilizar la interfaz web y el terminal simultáneamente, compartiendo las mismas sesiones y estados.
---
## Archivo de configuración
También puede configurar los ajustes del servidor en su archivo de configuración `opencode.json`:
```json
{
"server": {
"port": 4096,
"hostname": "0.0.0.0",
"mdns": true,
"cors": ["https://example.com"]
}
}
```
Los indicadores de la línea de comando tienen prioridad sobre la configuración del archivo de configuración.

View File

@@ -0,0 +1,113 @@
---
title: Windows (WSL)
description: Ejecuta OpenCode en Windows con WSL para una mejor experiencia.
---
import { Steps } from "@astrojs/starlight/components"
Aunque OpenCode puede ejecutarse directamente en Windows, recomendamos usar [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) para obtener la mejor experiencia. WSL ofrece un entorno Linux que funciona perfectamente con las funciones de OpenCode.
:::tip[Por que WSL?]
WSL ofrece mejor rendimiento del sistema de archivos, soporte completo de terminal y compatibilidad con las herramientas de desarrollo de las que depende OpenCode.
:::
---
## Configuracion
<Steps>
1. **Instala WSL**
Si aun no lo hiciste, [instala WSL](https://learn.microsoft.com/en-us/windows/wsl/install) usando la guia oficial de Microsoft.
2. **Instala OpenCode en WSL**
Cuando WSL este listo, abre tu terminal de WSL e instala OpenCode con uno de los [metodos de instalacion](/docs/).
```bash
curl -fsSL https://opencode.ai/install | bash
```
3. **Usa OpenCode desde WSL**
Ve al directorio de tu proyecto (accede a los archivos de Windows desde `/mnt/c/`, `/mnt/d/`, etc.) y ejecuta OpenCode.
```bash
cd /mnt/c/Users/YourName/project
opencode
```
</Steps>
---
## Aplicacion de escritorio + servidor WSL
Si prefieres usar la app de escritorio de OpenCode pero quieres ejecutar el servidor en WSL:
1. **Inicia el servidor en WSL** con `--hostname 0.0.0.0` para permitir conexiones externas:
```bash
opencode serve --hostname 0.0.0.0 --port 4096
```
2. **Conecta la app de escritorio** a `http://localhost:4096`
:::note
Si `localhost` no funciona en tu configuracion, conectate usando la direccion IP de WSL (desde WSL: `hostname -I`) y usa `http://<wsl-ip>:4096`.
:::
:::caution
Cuando uses `--hostname 0.0.0.0`, define `OPENCODE_SERVER_PASSWORD` para proteger el servidor.
```bash
OPENCODE_SERVER_PASSWORD=your-password opencode serve --hostname 0.0.0.0
```
:::
---
## Cliente web + WSL
Para obtener la mejor experiencia web en Windows:
1. **Ejecuta `opencode web` en la terminal de WSL** en lugar de PowerShell:
```bash
opencode web --hostname 0.0.0.0
```
2. **Accede desde tu navegador de Windows** en `http://localhost:<port>` (OpenCode muestra la URL)
Ejecutar `opencode web` desde WSL garantiza acceso correcto al sistema de archivos e integracion con la terminal, manteniendolo accesible desde tu navegador de Windows.
---
## Acceso a archivos de Windows
WSL puede acceder a todos tus archivos de Windows mediante el directorio `/mnt/`:
- Unidad `C:` → `/mnt/c/`
- Unidad `D:` → `/mnt/d/`
- Y asi sucesivamente...
Ejemplo:
```bash
cd /mnt/c/Users/YourName/Documents/project
opencode
```
:::tip
Para una experiencia mas fluida, considera clonar o copiar tu repo al sistema de archivos de WSL (por ejemplo en `~/code/`) y ejecutar OpenCode ahi.
:::
---
## Consejos
- Ejecuta OpenCode en WSL para proyectos guardados en unidades de Windows: el acceso a archivos es transparente
- Usa la [extension WSL de VS Code](https://code.visualstudio.com/docs/remote/wsl) junto con OpenCode para un flujo de desarrollo integrado
- Tu configuracion y tus sesiones de OpenCode se guardan dentro del entorno WSL en `~/.local/share/opencode/`

View File

@@ -0,0 +1,254 @@
---
title: zen
description: Lista seleccionada de modelos proporcionada por OpenCode.
---
import config from "../../../../config.mjs"
export const console = config.console
export const email = `mailto:${config.email}`
OpenCode Zen es una lista de modelos probados y verificados proporcionada por el equipo OpenCode.
:::nota
OpenCode Zen se encuentra actualmente en versión beta.
:::
Zen funciona como cualquier otro proveedor en OpenCode. Inicia sesión en OpenCode Zen y obtiene
su clave API. Es **completamente opcional** y no necesitas usarlo para usarlo.
OpenCode.
---
## Fondo
Hay una gran cantidad de modelos, pero solo unos pocos.
Estos modelos funcionan bien como agentes codificadores. Además, la mayoría de los proveedores son
configurado de manera muy diferente; por lo que obtienes un rendimiento y una calidad muy diferentes.
:::consejo
Probamos un grupo selecto de modelos y proveedores que funcionan bien con OpenCode.
:::
Entonces, si estás usando un modelo a través de algo como OpenRouter, nunca podrás ser
Asegúrese de obtener la mejor versión del modelo que desea.
Para solucionar este problema, hicimos un par de cosas:
1. Probamos un grupo selecto de modelos y hablamos con sus equipos sobre cómo
mejor ejecutarlos.
2. Luego trabajamos con algunos proveedores para asegurarnos de que estuvieran siendo atendidos.
correctamente.
3. Finalmente, comparamos la combinación modelo/proveedor y llegamos
con una lista que nos sentimos bien recomendando.
OpenCode Zen es una puerta de enlace de IA que le brinda acceso a estos modelos.
---
## Cómo funciona
OpenCode Zen funciona como cualquier otro proveedor en OpenCode.
1. Inicias sesión en **<a href={console}>OpenCode Zen</a>**, agregas tu facturación
detalles y copie su clave API.
2. Ejecuta el comando `/connect` en TUI, selecciona OpenCode Zen y pega tu clave API.
3. Ejecute `/models` en TUI para ver la lista de modelos que recomendamos.
Se le cobra por solicitud y puede agregar créditos a su cuenta.
---
## Puntos finales
También puede acceder a nuestros modelos a través de los siguientes puntos finales API.
| Modelo | Identificación del modelo | Punto final | Paquete SDK de IA |
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| Códice GPT 5.2 | gpt-5.2-códice | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 | gpt-5.1 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| Códice GPT 5.1 | gpt-5.1-códice | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 Códice Máximo | gpt-5.1-codex-max | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5.1 Códice Mini | gpt-5.1-codex-mini | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT 5 | gpt-5 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| Códice GPT 5 | gpt-5-códice | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| GPT5Nano | gpt-5-nano | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
| Claude Soneto 4.5 | soneto-claude-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Soneto 4 | claude-soneto-4 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Haiku 4.5 | claude-haiku-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Haiku 3.5 | claude-3-5-haiku | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Opus 4.6 | claude-opus-4-6 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Opus 4.5 | claude-opus-4-5 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Claude Opus 4.1 | claude-opus-4-1 | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| Géminis 3 Pro | geminis-3-pro | `https://opencode.ai/zen/v1/models/gemini-3-pro` | `@ai-sdk/google` |
| Géminis 3 Flash | geminis-3-flash | `https://opencode.ai/zen/v1/models/gemini-3-flash` | `@ai-sdk/google` |
| MiniMax M2.1 | minimax-m2.1 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| MiniMax M2.1 Gratis | minimax-m2.1-libre | `https://opencode.ai/zen/v1/messages` | `@ai-sdk/anthropic` |
| GLM 4.7 | glm-4.7 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| GLM 4.7 Gratis | glm-4.7-libre | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| GLM 4.6 | glm-4.6 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2.5 | kimi-k2.5 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2.5 Gratis | kimi-k2.5-libre | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Pensamiento Kimi K2 | kimi-k2-pensando | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Kimi K2 | kimi-k2 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Codificador Qwen3 480B | codificador qwen3 | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
| Gran pepinillo | gran pepinillo | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
El [ID del modelo](/docs/config/#models) en su configuración OpenCode
utiliza el formato `opencode/<model-id>`. Por ejemplo, para el Codex GPT 5.2, deberías
use `opencode/gpt-5.2-codex` en su configuración.
---
### Modelos
Puede obtener la lista completa de modelos disponibles y sus metadatos en:
```
https://opencode.ai/zen/v1/models
```
---
## Precios
Apoyamos un modelo de pago por uso. A continuación se muestran los precios **por 1 millón de tokens**.
| Modelo | Entrada | Salida | Lectura en caché | Escritura en caché |
| --------------------------------- | ------ | ------ | ----------- | ------------ |
| Gran pepinillo | Gratis | Gratis | Gratis | - |
| MiniMax M2.1 Gratis | Gratis | Gratis | Gratis | - |
| MiniMax M2.1 | $0,30 | $1,20 | $0,10 | - |
| GLM 4.7 Gratis | Gratis | Gratis | Gratis | - |
| GLM 4.7 | $0,60 | $2.20 | $0,10 | - |
| GLM 4.6 | $0,60 | $2.20 | $0,10 | - |
| Kimi K2.5 Gratis | Gratis | Gratis | Gratis | - |
| Kimi K2.5 | $0,60 | $3.00 | $0,08 | - |
| Pensamiento Kimi K2 | $0,40 | $2.50 | - | - |
| Kimi K2 | $0,40 | $2.50 | - | - |
| Codificador Qwen3 480B | $0,45 | $1,50 | - | - |
| Claude Sonnet 4.5 (≤ 200.000 tokens) | $3.00 | $15.00 | $0,30 | $3,75 |
| Claude Sonnet 4.5 (> 200.000 tokens) | $6.00 | $22,50 | $0,60 | $7.50 |
| Claude Soneto 4 (≤ 200.000 fichas) | $3.00 | $15.00 | $0,30 | $3,75 |
| Claude Sonnet 4 (> 200.000 fichas) | $6.00 | $22,50 | $0,60 | $7.50 |
| Claude Haiku 4.5 | $1.00 | $5.00 | $0,10 | $1,25 |
| Claude Haiku 3.5 | $0,80 | $4.00 | $0,08 | $1.00 |
| Claude Opus 4.6 (≤ 200.000 tokens) | $5.00 | $25.00 | $0,50 | $6.25 |
| Claude Opus 4.6 (> 200K fichas) | $10.00 | $37,50 | $1.00 | $12,50 |
| Claude Opus 4.5 | $5.00 | $25.00 | $0,50 | $6.25 |
| Claude Opus 4.1 | $15.00 | $75.00 | $1,50 | $18,75 |
| Géminis 3 Pro (≤ 200.000 tokens) | $2.00 | $12.00 | $0,20 | - |
| Géminis 3 Pro (> 200.000 tokens) | $4.00 | $18.00 | $0,40 | - |
| Géminis 3 Flash | $0,50 | $3.00 | $0,05 | - |
| GPT 5.2 | $1,75 | $14.00 | $0,175 | - |
| Códice GPT 5.2 | $1,75 | $14.00 | $0,175 | - |
| GPT 5.1 | $1.07 | $8,50 | $0,107 | - |
| Códice GPT 5.1 | $1.07 | $8,50 | $0,107 | - |
| GPT 5.1 Códice Máximo | $1,25 | $10.00 | $0,125 | - |
| GPT 5.1 Códice Mini | $0,25 | $2.00 | $0,025 | - |
| GPT 5 | $1.07 | $8,50 | $0,107 | - |
| Códice GPT 5 | $1.07 | $8,50 | $0,107 | - |
| GPT5Nano | Gratis | Gratis | Gratis | - |
Es posible que notes _Claude Haiku 3.5_ en tu historial de uso. Este es un [modelo de bajo costo](/docs/config/#models) que se utiliza para generar los títulos de tus sesiones.
:::nota
Las tarifas de las tarjetas de crédito se trasladan al costo (4,4% + 0,30 dólares por transacción); No cobramos nada más allá de eso.
:::
Los modelos gratuitos:
- GLM 4.7 Free está disponible en OpenCode por tiempo limitado. El equipo está aprovechando este tiempo para recopilar comentarios y mejorar el modelo.
- Kimi K2.5 Free está disponible en OpenCode por tiempo limitado. El equipo está aprovechando este tiempo para recopilar comentarios y mejorar el modelo.
- MiniMax M2.1 Free está disponible en OpenCode por tiempo limitado. El equipo está aprovechando este tiempo para recopilar comentarios y mejorar el modelo.
- Big Pickle es un modelo sigiloso gratuito en OpenCode por tiempo limitado. El equipo está aprovechando este tiempo para recopilar comentarios y mejorar el modelo.
<a href={email}>Contáctenos</a> si tiene alguna pregunta.
---
### Recarga automática
Si su saldo es inferior a $5, Zen recargará automáticamente $20.
Puedes cambiar el monto de la recarga automática. También puedes desactivar la recarga automática por completo.
---
### Límites mensuales
También puede establecer un límite de uso mensual para todo el espacio de trabajo y para cada
miembro de tu equipo.
Por ejemplo, digamos que establece un límite de uso mensual de $20, Zen no usará
más de $20 en un mes. Pero si tienes habilitada la recarga automática, Zen podría terminar
cobrarle más de $20 si su saldo es inferior a $5.
---
## Privacidad
Todos nuestros modelos están alojados en los EE. UU. Nuestros proveedores siguen una política de retención cero y no utilizan sus datos para la capacitación de modelos, con las siguientes excepciones:
- Big Pickle: Durante su periodo gratuito, los datos recopilados podrán utilizarse para mejorar el modelo.
- GLM 4.7 Gratis: Durante su periodo gratuito, los datos recopilados podrán utilizarse para mejorar el modelo.
- Kimi K2.5 Free: Durante su periodo gratuito, los datos recopilados podrán utilizarse para mejorar el modelo.
- MiniMax M2.1 Free: Durante su período gratuito, los datos recopilados podrán utilizarse para mejorar el modelo.
- API de OpenAI: las solicitudes se conservan durante 30 días de acuerdo con las [Políticas de datos de OpenAI](https://platform.openai.com/docs/guides/your-data).
- API de Anthropic: las solicitudes se conservan durante 30 días de acuerdo con las [Políticas de datos de Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage).
---
## Para equipos
Zen también funciona muy bien para equipos. Puedes invitar a compañeros de equipo, asignar roles, seleccionar
los modelos que utiliza su equipo y más.
:::nota
Actualmente, los espacios de trabajo son gratuitos para los equipos como parte de la versión beta.
:::
Actualmente, administrar su espacio de trabajo es gratuito para equipos como parte de la versión beta. estaremos
compartiremos más detalles sobre los precios pronto.
---
### Roles
Puedes invitar a compañeros de equipo a tu espacio de trabajo y asignar roles:
- **Administrador**: administra modelos, miembros, claves API y facturación
- **Miembro**: administra solo sus propias claves API
Los administradores también pueden establecer límites de gastos mensuales para cada miembro para mantener los costos bajo control.
---
### Acceso al modelo
Los administradores pueden habilitar o deshabilitar modelos específicos para el espacio de trabajo. Las solicitudes realizadas a un modelo deshabilitado devolverán un error.
Esto es útil para los casos en los que desea desactivar el uso de un modelo que
recopila datos.
---
### Trae tu propia llave
Puede utilizar sus propias teclas OpenAI o Anthropic API mientras accede a otros modelos en Zen.
Cuando utiliza sus propias claves, los tokens los factura directamente el proveedor, no Zen.
Por ejemplo, es posible que su organización ya tenga una clave para OpenAI o Anthropic.
y quieres usar ese en lugar del que proporciona Zen.
---
## Objetivos
Creamos OpenCode Zen para:
1. **Evaluar** los mejores modelos/proveedores de agentes de codificación.
2. Tener acceso a las opciones de **más alta calidad** y no degradar el rendimiento ni recurrir a proveedores más baratos.
3. Transmitir cualquier **bajada de precio** vendiendo al costo; por lo que el único margen de beneficio es para cubrir nuestras tarifas de procesamiento.
4. **No tener ningún bloqueo** al permitirle usarlo con cualquier otro agente de codificación. Y siempre le permitirá utilizar cualquier otro proveedor con OpenCode también.