Saltearse al contenido

Permisos

Controle que acciones requieren aprobacion para ejecutarse.

OpenCode usa la configuracion permission para decidir si una accion dada debe ejecutarse automaticamente, solicitarte confirmacion o bloquearse.

Desde v1.1.1, la configuracion booleana heredada tools esta obsoleta y se ha fusionado en permission. La configuracion anterior de tools todavia es compatible por razones de compatibilidad.


Acciones

Cada regla de permiso se resuelve a uno de los siguientes valores:

  • "allow" — ejecutar sin aprobacion
  • "ask" — solicitar aprobacion
  • "deny" — bloquear la accion

Configuracion

Puedes establecer permisos globalmente (con *) y anular herramientas especificas.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}

TamBien puedes establecer todos los permisos a la vez:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}

Reglas granulares (Sintaxis de objeto)

Para la mayoria de los permisos, puedes usar un objeto para aplicar diferentes acciones basadas en la entrada de la herramienta.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}

Las reglas se evaluan por coincidencia de patrones, ganando la ultima regla coincidente. Un patron comun es colocar la regla general "*" primero, y reglas mas especificas despues.

Comodines

Los patrones de permiso usan coincidencia de comodines simple:

  • * coincide con cero o mas caracteres
  • ? coincide con exactamente un caracter
  • Todos los demas caracteres coinciden literalmente

Permisos disponibles

Los permisos de OpenCode se indexan por nombre de herramienta, mas un par de protecciones de seguridad:

  • read — leer un archivo (coincide con la ruta del archivo)
  • edit — todas las modificaciones de archivos (cubre edit, write, patch, multiedit)
  • glob — busqueda de archivos glob (coincide con el patron glob)
  • grep — busqueda de contenido (coincide con el patron regex)
  • list — listar archivos en un directorio (coincide con la ruta del directorio)
  • bash — ejecutar comandos de shell (coincide con comandos analizados como git status --porcelain)
  • task — iniciar subagentes (coincide con el tipo de subagente)
  • skill — cargar una habilidad (coincide con el nombre de la habilidad)
  • lsp — ejecutar consultas LSP (actualmente no granular)
  • todoread, todowrite — leer/actualizar la lista de tareas
  • webfetch — recuperar una URL (coincide con la URL)
  • websearch, codesearch — busqueda web/codigo (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 identica

Valores predeterminados

Si no especificas nada, OpenCode comienza con permisos permisivos predeterminados:

  • La mayoria de los permisos son "allow" de forma predeterminada.
  • doom_loop y external_directory son "ask" de forma predeterminada.
  • read es "allow", pero los archivos .env se deniegan de forma predeterminada:
opencode.json
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}

Que hace “Ask”

Cuando OpenCode solicita aprobacion, la interfaz de usuario ofrece tres resultados:

  • once — aprobar solo esta solicitud
  • always — aprobar solicitudes futuras que coincidan con los patrones sugeridos (para el resto de la sesion actual de OpenCode)
  • reject — denegar la solicitud

El conjunto de patrones que always aprobaria lo proporciona la herramienta (por ejemplo, las aprobaciones de bash suelen incluir en la lista blanca un prefijo de comando seguro como git status*).


Agentes

Puedes anular permisos por agente. Los permisos de los agentes se fusionan con la configuracion global y las reglas de los agentes tienen prioridad. Mas informacion sobre permisos de agentes.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git status": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git status": "allow",
"git push": "allow"
}
}
}
}
}

Tambien puedes configurar los permisos de los agentes en Markdown:

~/.config/opencode/agent/review.md
---
description: Revision de codigo sin ediciones
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Solo analizar codigo y sugerir cambios.