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.
{ "$schema": "https://opencode.ai/config.json", "permission": { "*": "ask", "bash": "allow", "edit": "deny" }}Vous pouvez egalement definir toutes les autorisations a la fois :
{ "$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.
{ "$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 (couvreedit,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 commegit 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 tacheswebfetch— 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 projetdoom_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_loopetexternal_directorysont par defaut"ask".readest"allow", mais les fichiers.envsont refuses par defaut :
{ "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 demandealways— 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.
{ "$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 :
---description: Revision de code sans modificationsmode: subagentpermission: edit: deny bash: ask webfetch: deny---
Analyser uniquement le code et suggerer des modifications.