Config
Usando la configuración JSON de OpenCode.
Puedes configurar OpenCode usando un archivo de configuración JSON.
Formato
OpenCode admite los formatos JSON y JSONC (JSON con comentarios).
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"autoupdate": true,
"server": {
"port": 4096,
},
}Ubicaciones
Puedes colocar tu configuración en distintas ubicaciones y tienen un orden de precedencia diferente.
Nota: Los archivos de configuración se fusionan entre sí, no se reemplazan.
Los archivos de configuración se fusionan entre sí, no se reemplazan. La configuración de las siguientes ubicaciones se combina. Las configuraciones posteriores anulan a las anteriores solo en las claves en conflicto. La configuración no conflictiva de todas las fuentes se conserva.
Por ejemplo, si tu configuración global establece autoupdate: true y tu configuración del proyecto establece model: "anthropic/claude-sonnet-4-5", la configuración final incluirá ambos ajustes.
Orden de precedencia
Las fuentes de configuración se cargan en este orden (las fuentes posteriores anulan a las anteriores):
- Configuración remota (desde
.well-known/opencode) - valores predeterminados de la organización - Configuración global (
~/.config/opencode/opencode.json) - preferencias del usuario - Configuración personalizada (variable de entorno
OPENCODE_CONFIG) - anulaciones personalizadas - Configuración del proyecto (
opencode.jsonen el proyecto) - ajustes específicos del proyecto - Directorios
.opencode- agentes, comandos, plugins - Configuración en línea (variable de entorno
OPENCODE_CONFIG_CONTENT) - anulaciones en tiempo de ejecución - Archivos de configuración administrados (
/Library/Application Support/opencode/en macOS) - controlados por el administrador - Preferencias administradas de macOS (
.mobileconfigvía MDM) - máxima prioridad, no anulable por el usuario
Esto significa que las configuraciones del proyecto pueden anular los valores predeterminados globales, y las configuraciones globales pueden anular los valores predeterminados remotos de la organización. Los ajustes administrados anulan todo.
Nota: Los directorios
.opencodey~/.config/opencodeusan nombres en plural para los subdirectorios:agents/,commands/,modes/,plugins/,skills/,tools/ythemes/. Los nombres en singular (p. ej.,agent/) también son compatibles por retrocompatibilidad.
Remota
Las organizaciones pueden proporcionar una configuración predeterminada mediante el endpoint .well-known/opencode. Esto se obtiene automáticamente cuando te autenticas con un proveedor que lo admite.
La configuración remota se carga primero, sirviendo como capa base. Todas las demás fuentes de configuración (global, proyecto) pueden anular estos valores predeterminados.
Por ejemplo, si tu organización proporciona servidores MCP que están deshabilitados de forma predeterminada:
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": false
}
}
}Puedes habilitar servidores específicos en tu configuración local:
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}Global
Coloca tu configuración global de OpenCode en ~/.config/opencode/opencode.json. Usa la configuración global para las preferencias de servidor/runtime a nivel de usuario, como proveedores, modelos y permisos.
Para los ajustes específicos de la TUI, usa ~/.config/opencode/tui.json.
La configuración global anula los valores predeterminados remotos de la organización.
Por proyecto
Agrega opencode.json en la raíz de tu proyecto. La configuración del proyecto tiene la mayor precedencia entre los archivos de configuración estándar: anula tanto las configuraciones globales como las remotas.
Para los ajustes de TUI específicos del proyecto, agrega tui.json junto a él.
Consejo: Coloca la configuración específica del proyecto en la raíz de tu proyecto.
Cuando OpenCode se inicia, busca un archivo de configuración en el directorio actual o recorre hacia arriba hasta el directorio Git más cercano.
Esto también es seguro de incluir en Git y usa el mismo esquema que la configuración global.
Ruta personalizada
Especifica una ruta de archivo de configuración personalizada usando la variable de entorno OPENCODE_CONFIG.
export OPENCODE_CONFIG=/path/to/my/custom-config.json
opencode run "Hello world"La configuración personalizada se carga entre las configuraciones global y del proyecto en el orden de precedencia.
Directorio personalizado
Especifica un directorio de configuración personalizado usando la variable de entorno
OPENCODE_CONFIG_DIR. Este directorio se examinará en busca de agentes, comandos,
modos y plugins igual que el directorio estándar .opencode, y debe
seguir la misma estructura.
export OPENCODE_CONFIG_DIR=/path/to/my/config-directory
opencode run "Hello world"El directorio personalizado se carga después de la configuración global y los directorios .opencode, por lo que puede anular sus ajustes.
Ajustes administrados
Las organizaciones pueden imponer una configuración que los usuarios no pueden anular. Los ajustes administrados se cargan en el nivel de máxima prioridad.
Basados en archivos
Coloca un archivo opencode.json u opencode.jsonc en el directorio de configuración administrada del sistema:
| Plataforma | Ruta |
|---|---|
| macOS | /Library/Application Support/opencode/ |
| Linux | /etc/opencode/ |
| Windows | %ProgramData%\opencode |
Estos directorios requieren acceso de administrador/root para escribir, por lo que los usuarios no pueden modificarlos.
Preferencias administradas de macOS
En macOS, OpenCode lee las preferencias administradas del dominio de preferencias ai.opencode.managed. Despliega un .mobileconfig vía MDM (Jamf, Kandji, FleetDM) y los ajustes se aplican automáticamente.
OpenCode comprueba estas rutas:
/Library/Managed Preferences/<user>/ai.opencode.managed.plist/Library/Managed Preferences/ai.opencode.managed.plist
Las claves del plist se mapean directamente a los campos de opencode.json. Las claves de metadatos de MDM (PayloadUUID, PayloadType, etc.) se eliminan automáticamente.
Crear un .mobileconfig
Usa el PayloadType ai.opencode.managed. Las claves de configuración de OpenCode van directamente en el dict del payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>ai.opencode.managed</string>
<key>PayloadIdentifier</key>
<string>com.example.opencode.config</string>
<key>PayloadUUID</key>
<string>GENERATE-YOUR-OWN-UUID</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>share</key>
<string>disabled</string>
<key>server</key>
<dict>
<key>hostname</key>
<string>127.0.0.1</string>
</dict>
<key>permission</key>
<dict>
<key>*</key>
<string>ask</string>
<key>bash</key>
<dict>
<key>*</key>
<string>ask</string>
<key>rm -rf *</key>
<string>deny</string>
</dict>
</dict>
</dict>
</array>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadIdentifier</key>
<string>com.example.opencode</string>
<key>PayloadUUID</key>
<string>GENERATE-YOUR-OWN-UUID</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>Genera UUID únicos con uuidgen. Personaliza los ajustes para que coincidan con los requisitos de tu organización.
Desplegar vía MDM
- Jamf Pro: Computers > Configuration Profiles > Upload > delimita el alcance a los dispositivos objetivo o grupos inteligentes
- FleetDM: agrega el
.mobileconfiga tu repositorio gitops bajomdm.macos_settings.custom_settingsy ejecutafleetctl apply
Verificar en un dispositivo
Haz doble clic en el .mobileconfig para instalarlo localmente y probarlo (aparece en System Settings > Privacy & Security > Profiles), luego ejecuta:
opencode debug configTodas las claves de preferencias administradas aparecen en la configuración resuelta y no pueden ser anuladas por la configuración del usuario o del proyecto.
Esquema
El esquema de configuración de servidor/runtime se define en opencode.ai/config.json (opens in a new tab).
La configuración de la TUI usa opencode.ai/tui.json (opens in a new tab).
Tu editor debería poder validar y autocompletar según el esquema.
TUI
Usa un archivo tui.json (o tui.jsonc) dedicado para los ajustes específicos de la TUI.
{
"$schema": "https://opencode.ai/tui.json",
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto",
"mouse": true,
"attention": {
"enabled": true,
"notifications": true,
"sound": true,
"volume": 0.4
}
}Usa OPENCODE_TUI_CONFIG para apuntar a un archivo de configuración de TUI personalizado.
Establece attention.enabled para activar las notificaciones de escritorio y los sonidos de la TUI. Consulta atención de la TUI.
Las claves heredadas theme, keybinds y tui en opencode.json están obsoletas y se migran automáticamente cuando es posible.
Servidor
Puedes configurar los ajustes del servidor para los comandos opencode serve y opencode web mediante la opción server.
{
"$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 en el que escuchar.hostname- Hostname en el que escuchar. Cuandomdnsestá habilitado y no se establece ningún hostname, su valor predeterminado es0.0.0.0.mdns- Habilita el descubrimiento de servicios mDNS. Esto permite que otros dispositivos de la red descubran tu servidor de OpenCode.mdnsDomain- Nombre de dominio personalizado para el servicio mDNS. Su valor predeterminado esopencode.local. Útil para ejecutar múltiples instancias en la misma red.cors- Orígenes adicionales que se permiten para CORS al usar el servidor HTTP desde un cliente basado en navegador. Los valores deben ser orígenes completos (esquema + host + puerto opcional), p. ej.https://app.example.com.
Más información sobre el servidor aquí.
Shell
Puedes configurar la shell usada para el terminal interactivo mediante la opción shell. Las shells compatibles también se usan para las llamadas a herramientas del agente.
{
"$schema": "https://opencode.ai/config.json",
"shell": "pwsh"
}Si no se especifica, OpenCode descubrirá y usará automáticamente un valor predeterminado sensato según tu sistema operativo (p. ej. pwsh o cmd.exe en Windows, /bin/zsh o /bin/bash en macOS/Linux). Puedes proporcionar una ruta absoluta o un nombre corto.
Herramientas
Puedes administrar las herramientas que un LLM puede usar mediante la opción tools.
{
"$schema": "https://opencode.ai/config.json",
"tools": {
"write": false,
"bash": false
}
}Más información sobre las herramientas aquí.
Modelos
Puedes configurar los proveedores y modelos que quieras usar en tu configuración de OpenCode mediante las opciones provider, model y small_model.
{
"$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 ligeras como la generación de títulos. De forma predeterminada, OpenCode intenta usar un modelo más económico si hay uno disponible de tu proveedor; de lo contrario, recurre a tu modelo principal.
Las opciones del proveedor pueden incluir timeout, chunkTimeout y setCacheKey:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"timeout": 600000,
"chunkTimeout": 30000,
"setCacheKey": true
}
}
}
}timeout- Tiempo de espera de la solicitud en milisegundos (predeterminado: 300000). Establécelo enfalsepara deshabilitarlo.chunkTimeout- Tiempo de espera en milisegundos entre los fragmentos de respuesta en streaming. Si no llega ningún fragmento a tiempo, la solicitud se aborta.setCacheKey- Garantiza que siempre se establezca una clave de caché para el proveedor designado.
También puedes configurar modelos locales. Más información.
Adjuntos de imagen
OpenCode normaliza los adjuntos de imagen antes de enviarlos al modelo. De forma predeterminada, las imágenes se redimensionan cuando superan los 2000x2000 píxeles o los 5242880 bytes en base64.
Configura los límites de adjuntos de imagen con la opción attachment.image:
{
"$schema": "https://opencode.ai/config.json",
"attachment": {
"image": {
"auto_resize": true,
"max_width": 2000,
"max_height": 2000,
"max_base64_bytes": 5242880
}
}
}auto_resize- Redimensiona las imágenes que superan los límites configurados antes de las solicitudes al proveedor. Establécelo enfalsepara rechazar las imágenes de gran tamaño en su lugar.max_width- Ancho máximo de la imagen en píxeles antes de redimensionar o rechazar.max_height- Alto máximo de la imagen en píxeles antes de redimensionar o rechazar.max_base64_bytes- Tamaño máximo del payload de imagen codificado. Este es el tamaño del payload en base64, no el tamaño del archivo original.
Si una imagen aún no cabe después de redimensionarla, OpenCode omite las imágenes de resultado de herramienta de gran tamaño o falla con un error de tamaño de imagen para las imágenes de gran tamaño proporcionadas por el usuario.
Opciones específicas del proveedor
Algunos proveedores admiten opciones de configuración adicionales más allá de los ajustes genéricos timeout y apiKey.
Amazon Bedrock
Amazon Bedrock admite configuración específica de AWS:
{
"$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- Región de AWS para Bedrock (predeterminado: la variable de entornoAWS_REGIONous-east-1)profile- Perfil de AWS con nombre de~/.aws/credentials(predeterminado: la variable de entornoAWS_PROFILE)endpoint- URL de endpoint personalizada para endpoints de VPC. Es un alias de la opción genéricabaseURLusando terminología específica de AWS. Si se especifican ambos,endpointtiene prioridad.
Nota: Los tokens de portador (
AWS_BEARER_TOKEN_BEDROCKo/connect) tienen prioridad sobre la autenticación basada en perfil. Consulta precedencia de autenticación para más detalles.
Más información sobre la configuración de Amazon Bedrock.
Temas
Establece el tema de tu interfaz en tui.json.
{
"$schema": "https://opencode.ai/tui.json",
"theme": "tokyonight"
}Agentes
Puedes configurar agentes especializados para tareas específicas mediante la opción agent.
{
"$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 puedes definir agentes usando archivos markdown en ~/.config/opencode/agents/ o .opencode/agents/. Más información aquí.
Agente predeterminado
Puedes establecer el agente predeterminado mediante la opción default_agent. Esto determina qué agente se usa cuando no se especifica ninguno explícitamente.
{
"$schema": "https://opencode.ai/config.json",
"default_agent": "plan"
}El agente predeterminado debe ser un agente primario (no un subagente). Puede ser un agente integrado como "build" o "plan", o un agente personalizado que hayas definido. Si el agente especificado no existe o es un subagente, OpenCode recurrirá a "build" con una advertencia.
Este ajuste se aplica en todas las interfaces: TUI, CLI (opencode run), aplicación de escritorio y GitHub Action.
Compartir
Puedes configurar la función compartir mediante la opción share.
{
"$schema": "https://opencode.ai/config.json",
"share": "manual"
}Esto recibe:
"manual"- Permite compartir manualmente mediante comandos (predeterminado)"auto"- Comparte automáticamente las nuevas conversaciones"disabled"- Deshabilita completamente la función de compartir
De forma predeterminada, la función de compartir está en modo manual, donde necesitas compartir las conversaciones explícitamente usando el comando /share.
Comandos
Puedes configurar comandos personalizados para tareas repetitivas mediante la opción command.
{
"$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 puedes definir comandos usando archivos markdown en ~/.config/opencode/commands/ o .opencode/commands/. Más información aquí.
Atajos de teclado
Personaliza los atajos de teclado de la TUI en tui.json con keybinds.
{
"$schema": "https://opencode.ai/tui.json",
"keybinds": {
"command_list": "ctrl+p"
}
}keybinds se fusiona con los valores predeterminados integrados, por lo que solo necesitas configurar los atajos que quieras cambiar.
Snapshot
OpenCode usa snapshots para rastrear los cambios en archivos durante las operaciones del agente, lo que te permite deshacer y revertir cambios dentro de una sesión. Los snapshots están habilitados de forma predeterminada.
Para repositorios grandes o proyectos con muchos submódulos, el sistema de snapshots puede causar una indexación lenta y un uso de disco significativo, ya que rastrea todos los cambios usando un repositorio git interno. Puedes deshabilitar los snapshots usando la opción snapshot.
{
"$schema": "https://opencode.ai/config.json",
"snapshot": false
}Ten en cuenta que deshabilitar los snapshots significa que los cambios realizados por el agente no se pueden revertir desde la interfaz.
Autoupdate
OpenCode descargará automáticamente cualquier nueva actualización al iniciarse. Puedes deshabilitar esto con la opción autoupdate.
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}Si no quieres actualizaciones pero quieres recibir una notificación cuando haya una nueva versión disponible, establece autoupdate en "notify".
Ten en cuenta que esto solo funciona si no se instaló usando un gestor de paquetes como Homebrew.
Formateadores
Puedes habilitar y configurar formateadores de código mediante la opción formatter. Omítela para mantener los formateadores deshabilitados.
{
"$schema": "https://opencode.ai/config.json",
"formatter": true
}Usa un objeto para mantener los integrados habilitados mientras configuras anulaciones o formateadores personalizados.
{
"$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"]
}
}
}Más información sobre los formateadores aquí.
Servidores LSP
Puedes habilitar y configurar servidores LSP mediante la opción lsp. Omítela para mantener LSP deshabilitado.
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}Usa un objeto para mantener los integrados habilitados mientras configuras anulaciones o servidores LSP personalizados.
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}Más información sobre los servidores LSP aquí.
Permisos
De forma predeterminada, opencode permite todas las operaciones sin requerir aprobación explícita. Puedes cambiar esto usando la opción permission.
Por ejemplo, para asegurarte de que las herramientas edit y bash requieran la aprobación del usuario:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "ask",
"bash": "ask"
}
}Más información sobre los permisos aquí.
Compaction
Puedes controlar el comportamiento de la compactación de contexto mediante la opción compaction.
{
"$schema": "https://opencode.ai/config.json",
"compaction": {
"auto": true,
"prune": true,
"reserved": 10000
}
}auto- Compacta automáticamente la sesión cuando el contexto está lleno (predeterminado:true).prune- Elimina las salidas de herramientas antiguas para ahorrar tokens (predeterminado:true).reserved- Búfer de tokens para la compactación. Deja suficiente ventana para evitar el desbordamiento durante la compactación.
Watcher
Puedes configurar los patrones de ignorado del observador de archivos mediante la opción watcher.
{
"$schema": "https://opencode.ai/config.json",
"watcher": {
"ignore": ["node_modules/**", "dist/**", ".git/**"]
}
}Los patrones siguen la sintaxis glob. Úsalo para excluir directorios ruidosos del seguimiento de archivos.
Servidores MCP
Puedes configurar los servidores MCP que quieras usar mediante la opción mcp.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {}
}Plugins
Los plugins extienden OpenCode con herramientas, hooks e integraciones personalizadas.
Coloca los archivos de plugins en .opencode/plugins/ o ~/.config/opencode/plugins/. También puedes cargar plugins desde npm mediante la opción plugin.
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-helicone-session", "@my-org/custom-plugin"]
}Instrucciones
Puedes configurar las instrucciones para el modelo que estás usando mediante la opción instructions.
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["CONTRIBUTING.md", "docs/guidelines.md", ".cursor/rules/*.md"]
}Esto recibe un array de rutas y patrones glob a archivos de instrucciones. Más información sobre las reglas aquí.
Proveedores deshabilitados
Puedes deshabilitar los proveedores que se cargan automáticamente mediante la opción disabled_providers. Esto es útil cuando quieres evitar que ciertos proveedores se carguen incluso si sus credenciales están disponibles.
{
"$schema": "https://opencode.ai/config.json",
"disabled_providers": ["openai", "gemini"]
}Nota:
disabled_providerstiene prioridad sobreenabled_providers.
La opción disabled_providers acepta un array de IDs de proveedor. Cuando un proveedor está deshabilitado:
- No se cargará incluso si hay variables de entorno establecidas.
- No se cargará incluso si hay claves de API configuradas mediante el comando
/connect. - Los modelos del proveedor no aparecerán en la lista de selección de modelos.
Proveedores habilitados
Puedes especificar una lista de permitidos de proveedores mediante la opción enabled_providers. Cuando se establece, solo se habilitarán los proveedores especificados y todos los demás se ignorarán.
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "openai"]
}Esto es útil cuando quieres restringir OpenCode para que use solo proveedores específicos en lugar de deshabilitarlos uno por uno.
Nota:
disabled_providerstiene prioridad sobreenabled_providers.
Si un proveedor aparece tanto en enabled_providers como en disabled_providers, disabled_providers tiene prioridad por retrocompatibilidad.
Experimental
La clave experimental contiene opciones que están en desarrollo activo.
{
"$schema": "https://opencode.ai/config.json",
"experimental": {}
}Precaución: Las opciones experimentales no son estables. Pueden cambiar o eliminarse sin previo aviso.
Variables
Puedes usar la sustitución de variables en tus archivos de configuración para hacer referencia a variables de entorno y al contenido de archivos.
Variables de entorno
Usa {env:VARIABLE_NAME} para sustituir variables de entorno:
{
"$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á establecida, se reemplazará por una cadena vacía.
Archivos
Usa {file:path/to/file} para sustituir el contenido de un archivo:
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./custom-instructions.md"],
"provider": {
"openai": {
"options": {
"apiKey": "{file:~/.secrets/openai-key}"
}
}
}
}Las rutas de archivo pueden ser:
- Relativas al directorio del archivo de configuración
- O rutas absolutas que comienzan con
/o~
Estas son útiles para:
- Mantener datos sensibles como claves de API en archivos separados.
- Incluir archivos de instrucciones grandes sin saturar tu configuración.
- Compartir fragmentos de configuración comunes entre múltiples archivos de configuración.