Salta ai contenuti

Permessi

Controlla quali azioni richiedono approvazione prima di essere eseguite.

OpenCode usa la configurazione permission per decidere se una determinata azione deve essere eseguita automaticamente, se deve chiederti conferma o se deve essere bloccata.

A partire da v1.1.1, la vecchia configurazione booleana tools e’ deprecata ed e’ stata incorporata in permission. La vecchia configurazione tools e’ ancora supportata per retrocompatibilita’.


Azioni

Ogni regola di permesso si risolve in uno tra:

  • "allow" — esegui senza approvazione
  • "ask" — chiedi approvazione
  • "deny" — blocca l’azione

Configurazione

Puoi impostare i permessi globalmente (con *) e sovrascrivere quelli di strumenti specifici.

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

Puoi anche impostare tutti i permessi in una sola volta:

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

Regole granulari (sintassi a oggetto)

Per la maggior parte dei permessi, puoi usare un oggetto per applicare azioni diverse in base all’input dello strumento.

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"
}
}
}

Le regole vengono valutate per corrispondenza di pattern e vince l’ultima regola che corrisponde. Un pattern comune e’ mettere prima la regola jolly "*" e poi regole piu’ specifiche.

Wildcard

I pattern dei permessi usano un semplice matching con wildcard:

  • * corrisponde a zero o piu’ caratteri qualsiasi
  • ? corrisponde esattamente a un carattere
  • Tutti gli altri caratteri corrispondono letteralmente

Espansione della home directory

Puoi usare ~ o $HOME all’inizio di un pattern per riferirti alla tua home directory. Questo e’ particolarmente utile per le regole external_directory.

  • ~/projects/* -> /Users/username/projects/*
  • $HOME/projects/* -> /Users/username/projects/*
  • ~ -> /Users/username

Directory esterne

Usa external_directory per consentire chiamate a strumenti che toccano percorsi al di fuori della directory di lavoro da cui e’ stato avviato OpenCode. Si applica a qualsiasi strumento che accetta un path come input (ad esempio read, edit, list, glob, grep e molti comandi bash).

L’espansione della home (come ~/...) influisce solo su come viene scritto un pattern. Non rende un percorso esterno parte della workspace corrente, quindi i path fuori dalla directory di lavoro devono comunque essere consentiti tramite external_directory.

Per esempio, questo consente l’accesso a tutto sotto ~/projects/personal/:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}

Qualsiasi directory consentita qui eredita gli stessi default della workspace corrente. Dato che read di default e’ allow, anche le letture sono consentite per le voci sotto external_directory a meno di sovrascritture. Aggiungi regole esplicite quando uno strumento deve essere limitato su questi path, ad esempio bloccando le modifiche ma lasciando consentite le letture:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}

Mantieni l’elenco limitato a percorsi fidati e aggiungi regole extra di allow/deny quando serve per altri strumenti (ad esempio bash).


Permessi disponibili

I permessi di OpenCode sono indicizzati per nome dello strumento, piu’ un paio di guardrail di sicurezza:

  • read — lettura di un file (corrisponde al percorso del file)
  • edit — tutte le modifiche ai file (include edit, write, patch, multiedit)
  • glob — ricerca file tramite glob (corrisponde al pattern glob)
  • grep — ricerca nel contenuto (corrisponde al pattern regex)
  • list — elenco file in una directory (corrisponde al path della directory)
  • bash — esecuzione comandi di shell (corrisponde a comandi parsati come git status --porcelain)
  • task — avvio subagenti (corrisponde al tipo di subagente)
  • skill — caricamento di una skill (corrisponde al nome della skill)
  • lsp — esecuzione query LSP (attualmente non granulare)
  • todoread, todowrite — lettura/aggiornamento della todo list
  • webfetch — fetch di un URL (corrisponde all’URL)
  • websearch, codesearch — ricerca web/codice (corrisponde alla query)
  • external_directory — si attiva quando uno strumento tocca percorsi fuori dalla working directory del progetto
  • doom_loop — si attiva quando la stessa chiamata a uno strumento si ripete 3 volte con input identico

Default

Se non specifichi nulla, OpenCode parte da default permissivi:

  • La maggior parte dei permessi di default e’ "allow".
  • doom_loop ed external_directory di default sono "ask".
  • read e’ "allow", ma i file .env sono negati di default:
opencode.json
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}

Cosa fa “Ask”

Quando OpenCode chiede approvazione, la UI offre tre esiti:

  • once — approva solo questa richiesta
  • always — approva richieste future che corrispondono ai pattern suggeriti (per il resto della sessione corrente di OpenCode)
  • reject — nega la richiesta

L’insieme di pattern che always approverebbe e’ fornito dallo strumento (ad esempio, le approvazioni per bash in genere mettono in whitelist un prefisso di comando sicuro come git status*).


Agenti

Puoi sovrascrivere i permessi per agente. I permessi dell’agente vengono uniti alla configurazione globale e le regole dell’agente hanno precedenza. Scopri di piu’ sui permessi degli agenti.

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"
}
}
}
}
}

Puoi anche configurare i permessi dell’agente in Markdown:

~/.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.