Salta ai contenuti

Permessi

Controlla quali azioni richiedono l'approvazione per essere eseguite.

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

Dalla versione v1.1.1, la vecchia configurazione booleana tools e deprecata ed e stata unita in permission. La vecchia configurazione tools e ancora supportata per compatibilita.


Azioni

Ogni regola di permesso si risolve in uno dei seguenti valori:

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

Configurazione

Puoi impostare i permessi globalmente (con *) e sostituire strumenti specifici.

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

Puoi anche impostare tutti i permessi contemporaneamente:

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

Regole granulari (Sintassi oggetto)

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

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

Le regole vengono valutate per corrispondenza di pattern, con l’ultima regola corrispondente che vince. Un pattern comune e inserire prima la regola generale "*" e poi regole piu specifiche.

Caratteri jolly

I pattern di permesso utilizzano la corrispondenza di caratteri jolly semplice:

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

Permessi disponibili

I permessi di OpenCode sono indicizzati per nome strumento, piu alcune protezioni di sicurezza:

  • read — leggere un file (corrisponde al percorso del file)
  • edit — tutte le modifiche ai file (copre edit, write, patch, multiedit)
  • glob — ricerca file glob (corrisponde al pattern glob)
  • grep — ricerca contenuto (corrisponde al pattern regex)
  • list — elencare i file in una directory (corrisponde al percorso della directory)
  • bash — eseguire comandi shell (corrisponde ai comandi analizzati come git status --porcelain)
  • task — avviare subagenti (corrisponde al tipo di subagente)
  • skill — caricare un’abilita (corrisponde al nome dell’abilita)
  • lsp — eseguire query LSP (attualmente non granulare)
  • todoread, todowrite — leggere/aggiornare l’elenco di cose da fare
  • webfetch — recuperare un URL (corrisponde all’URL)
  • websearch, codesearch — ricerca web/codice (corrisponde alla query)
  • external_directory — attivato quando uno strumento tocca percorsi fuori dalla directory di lavoro del progetto
  • doom_loop — attivato quando la stessa chiamata strumento si ripete 3 volte con input identico

Valori predefiniti

Se non specifichi nulla, OpenCode parte da permessi permissivi predefiniti:

  • La maggior parte dei permessi e predefinita su "allow".
  • doom_loop e external_directory sono predefiniti su "ask".
  • read e "allow", ma i file .env sono negati per impostazione predefinita:
opencode.json
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}

Cosa fa “Ask”

Quando OpenCode chiede l’approvazione, l’interfaccia utente offre tre risultati:

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

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


Agenti

Puoi sostituire i permessi per agente. I permessi degli agenti vengono uniti con la configurazione globale e le regole degli agenti hanno la precedenza. Ulteriori informazioni sui permessi degli agenti.

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

Puoi anche configurare i permessi degli agenti in Markdown:

~/.config/opencode/agent/review.md
---
description: Revisione del codice senza modifiche
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Solo analizzare il codice e suggerire modifiche.