Aller au contenu

Permissions

Controlez les actions qui necessitent une approbation pour s'executer.

OpenCode utilise la configuration permission pour determiner si une action donnee doit s’executer automatiquement, vous demander, ou etre bloquee.

Depuis v1.1.1, l’ancienne configuration booleenne tools est deprecatee et a ete fusionnee dans permission. L’ancienne configuration tools est toujours prise en charge pour la retrocompatibilite.


Actions

Chaque regle de permission se resolu a l’une des valeurs suivantes :

  • "allow" — s’execute sans approbation
  • "ask" — demande une approbation
  • "deny" — bloque l’action

Configuration

Vous pouvez definir des autorisations globalement (avec *) et remplacer des outils specifiques.

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

Vous pouvez egalement definir toutes les autorisations a la fois :

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

Regles granulaires (Syntaxe d’objet)

Pour la plupart des autorisations, vous pouvez utiliser un objet pour appliquer differentes actions en fonction de l’entree de l’outil.

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

Les regles sont evaluees par correspondance de modele, la derniere regle correspondante l’emportant. Un modele courant consiste a placer la regle generale "*" en premier, puis des regles plus specifiques apres.

Caractères generiques

Les modeles de permission utilisent une correspondance simple avec caracteres generiques :

  • * correspond a zero ou plusieurs caracteres
  • ? correspond exactement a un caractere
  • Tous les autres caracteres correspondent litteralement

Permissions disponibles

Les autorisations OpenCode sont indexees par nom d’outil, plus quelques gardes de securite :

  • read — lecture d’un fichier (correspond au chemin du fichier)
  • edit — toutes les modifications de fichiers (couvre edit, write, patch, multiedit)
  • glob — recherche de fichiers par modele (correspond au modele glob)
  • grep — recherche de contenu (correspond au modele regex)
  • list — liste des fichiers dans un repertoire (correspond au chemin du repertoire)
  • bash — execution de commandes shell (correspond aux commandes analysees comme git status --porcelain)
  • task — lancement de sous-agents (correspond au type de sous-agent)
  • skill — chargement d’une competence (correspond au nom de la competence)
  • lsp — execution de requetes LSP (actuellement non granulaire)
  • todoread, todowrite — lecture/mise a jour de la liste de taches
  • webfetch — recuperation d’une URL (correspond a l’URL)
  • websearch, codesearch — recherche web/code (correspond a la requete)
  • external_directory — declenche lorsqu’un outil touche des chemins en dehors du repertoire de travail du projet
  • doom_loop — declenche lorsque le meme appel d’outil se repete 3 fois avec une entree identique

Valeurs par defaut

Si vous ne specifiez rien, OpenCode commence avec des autorisations permissives par defaut :

  • La plupart des autorisations sont par defaut "allow".
  • doom_loop et external_directory sont par defaut "ask".
  • read est "allow", mais les fichiers .env sont refuses par defaut :
opencode.json
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}

Ce que fait “Ask”

Lorsqu’OpenCode demande une approbation, l’interface utilisateur propose trois resultats :

  • once — approuver uniquement cette demande
  • always — approuver les demandes futures correspondant aux modeles suggeres (pour le reste de la session OpenCode actuelle)
  • reject — refuser la demande

L’ensemble des modeles que always approuverait est fourni par l’outil (par exemple, les approbations bash ajoutent generalement a la liste blanche un prefixe de commande sur comme git status*).


Agents

Vous pouvez remplacer les autorisations par agent. Les autorisations des agents sont fusionnees avec la configuration globale, et les regles des agents prennent le dessus. En savoir plus sur les autorisations des agents.

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

Vous pouvez egalement configurer les autorisations des agents en Markdown :

~/.config/opencode/agent/review.md
---
description: Revision de code sans modifications
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Analyser uniquement le code et suggerer des modifications.