Configuration des autorisations OpenCode
Le système de permissions d'OpenCode contrôle quelles opérations peuvent s'exécuter automatiquement, lesquelles nécessitent votre approbation manuelle et lesquelles sont directement bloquées. Bien configurer les permissions permet à l'IA d'accomplir les tâches efficacement tout en évitant les opérations accidentelles qui pourraient endommager le code ou divulguer des fichiers sensibles.
À partir de la v1.1.1, l'ancienne
toolsconfiguration booléenne a été dépréciée et fusionnée danspermission. L'ancienne configuration est toujours prise en charge pour la compatibilité descendante, mais il est recommandé de migrer vers la nouvellepermissionsyntaxe.
Trois actions de permission
Chaque règle de permission se résout finalement en l'une des trois actions suivantes :
| Action | Effet | Scénarios applicables |
|---|---|---|
"allow" |
S'exécute automatiquement sans approbation | Opérations à faible risque et à haute fréquence, telles que la lecture de fichiers et l'exécution de tests |
"ask" |
Affiche une invite d'approbation pour que vous décidiez d'autoriser ou non | Opérations présentant un certain risque, telles que l'écriture de fichiers et l'exécution de scripts |
"deny" |
Bloquées directement, ni exécutées ni soumises à une invite | Opérations dangereuses explicitement interdites, telles que la suppression de fichiers et le push de code |
Configuration de base
La configuration des permissions est écrite sous le répertoire racine du dépôt (ou le répertoire de configuration utilisateur) dans leopencode.jsonfichier, en utilisantpermissionchamp à configurer.
1. Définir toutes les permissions globalement
La façon la plus simple : utiliser une seule chaîne pour définir les permissions de toutes les opérations en une fois. Convient pour un démarrage rapide ou un débogage temporaire :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": "allow" // Toutes les opérations s'exécutent automatiquement sans aucune invite de confirmation (convient au développement local, lorsqu'on fait entièrement confiance à l'IA)
}
2. Configurer par nom d'outil
En utilisant la syntaxe d'objet, vous pouvez spécifier les permissions pour différents outils séparément."*"est un joker, ce qui signifie qu'il correspond à toutes les opérations, généralement utilisé comme valeur par défaut de repli :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask", // Règle de repli : tous les outils non configurés individuellement affichent par défaut une invite
"bash": "allow", // bash (exécution de commandes Shell) : autoriser directement, sans invite
"edit": "deny" // edit (modification de fichiers) : bloquer directement
}
}
Règles granulaires (syntaxe d'objet)
Pour la plupart des permissions, en plus de définir une action unifiée, vous pouvez également utiliserla syntaxe d'objetpour appliquer différentes règles en fonction de l'entrée spécifique de l'outil. Par exemple, pourbashoutils, vous pouvez distinguer quelles commandes sont autorisées, lesquelles nécessitent une approbation et lesquelles sont directement rejetées :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask", // Repli : toutes les commandes bash nécessitent une approbation par défaut
"git *": "allow", // Les commandes commençant par git (par ex., git status, git log) sont autorisées directement
"npm *": "allow", // Les commandes commençant par npm (par ex., npm install, npm run build) sont autorisées directement
"grep *": "allow", // Les commandes de recherche grep sont autorisées directement
"rm *": "deny" // Les commandes de suppression rm sont directement bloquées (pour éviter la suppression accidentelle de fichiers)
},
"edit": {
"*": "deny", // Bloquer toutes les modifications de fichiers par défaut
"packages/web/src/content/docs/*.mdx": "allow" // Autoriser uniquement la modification des fichiers .mdx dans le répertoire docs
}
}
}
Ordre de correspondance des règles : la dernière règle correspondante est prioritaire.Il est recommandé de placer la règle joker
"*"règle en haut comme valeur par défaut, et de placer les règles plus spécifiques après elle pour la remplacer. Ainsi, plus une règle est spécifique, plus sa priorité est élevée, ce qui rend la logique claire et moins sujette aux erreurs.
Règles de joker
Les motifs d'autorisation prennent en charge une correspondance simple avec des jokers, selon les règles suivantes :
| Joker | Signification | Exemple |
|---|---|---|
* |
Correspond à zéro ou plusieurs caractères arbitraires (sans traverser les répertoires) | git *Correspondancesgit status、git log --onelinewait |
** |
Correspond à n'importe quel chemin à travers les répertoires | ~/projects/**Correspond à tous les fichiers et sous-répertoires sous projects |
? |
Correspond exactement à un caractère arbitraire | file?.txtCorrespondancesfile1.txt、fileA.txt |
| Autres caractères | Correspond exactement par valeur littérale | git statusCorrespond uniquementgit status, ne correspond pas aux variantes avec paramètres |
Remarque :Pour les commandes avec paramètres, veillez à l'ajouter à la fin
*. Par exemple"grep *"peut correspondregrep pattern file.txt, lorsqu'il est écrit seul"grep"ne correspond qu'aux commandes nues sans aucun paramètre, ce qui ne sera presque jamais mis en correspondance lors de l'exécution réelle.
Expansion du répertoire personnel
Au début d'un motif, vous pouvez utiliser~ou$HOMEpour faire référence au répertoire personnel de l'utilisateur actuel, et OpenCode le développera automatiquement en chemin complet :
Exemple
"~/projects/*"
"$HOME/projects/*"
"/Users/username/projects/*" // Écrire directement le chemin absolu fonctionne aussi, mais n'est pas recommandé (pas assez portable)
Autorisations des répertoires externes (external_directory)
Par défaut, OpenCode autorise uniquement les outils à accéder àle répertoire de travail au démarrageet à ses sous-répertoires. Si vous devez accéder à des chemins en dehors du répertoire du projet (par exemple, un autre projet ou un répertoire de configuration partagé), vous devez utiliserexternal_directoryune autorisation explicite.
Expansion du répertoire personnel (
~/...) n'est qu'unenotation abrégée de chemin, et n'autorise pas automatiquement l'accès à ce chemin. Les chemins en dehors du répertoire de travail doivent encore passer parexternal_directorypour être autorisés.
1. Autoriser l'accès aux répertoires externes
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow" // Autoriser l'accès à tous les fichiers et sous-répertoires sous ~/projects/personal/
// ** correspond aux sous-chemins à n'importe quel niveau
}
}
}
2. Autoriser la lecture mais interdire la modification
Enexternal_directoryLes répertoires autorisés héritent des autorisations par défaut de l’espace de travail actuel. Commereada pour valeur par défaut"allow", après autorisation, les fichiers situés sous ce répertoire peuvent être lus. Si vous devez restreindre davantage une opération donnée (par exemple, autoriser la lecture mais interdire la modification), vous pouvez ajouter des règles supplémentaires :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow" // Étape 1 : Accorder l’accès à ce répertoire externe
},
"edit": {
"~/projects/personal/**": "deny" // Étape 2 : Ajouter une règle prioritaire sur ce répertoire, autorisant la lecture mais interdisant la modification
}
}
}
Tous les éléments d’autorisation disponibles
Les autorisations d’OpenCode utilisent les noms d’outils comme clés, couvrant tous les types, y compris les opérations sur fichiers, l’exécution de commandes et l’accès réseau :
| Élément d’autorisation | Opération contrôlée | Contenu correspondant au motif | Valeur par défaut |
|---|---|---|---|
read |
Lire le contenu des fichiers | Chemin de fichier (par ex.,src/index.js) |
allow(.envfichiers exclus) |
edit |
Toutes les modifications de fichiers, incluant edit, write, patch et multiedit | Chemin du fichier | allow |
glob |
Recherche de fichiers par glob (par ex., trouver tous.tsfichiers) |
Motif glob (par ex.,**/*.ts) |
allow |
grep |
Rechercher du texte dans le contenu des fichiers | Motif d'expression régulière | allow |
list |
Lister les fichiers dans un répertoire | Chemin du répertoire | allow |
bash |
Exécuter une commande shell | Commande complète analysée (par ex.,git status --porcelain) |
allow |
task |
Démarrer un sous-agent | Nom du type de sous-agent | allow |
skill |
Charger une compétence | Nom de la compétence | allow |
lsp |
Exécuter une requête du service de langage LSP | La configuration fine n'est actuellement pas prise en charge | allow |
webfetch |
Récupérer le contenu d'une URL réseau | URL complète (par ex.,https://example.com/api) |
allow |
websearch |
Recherche Web | Chaîne de requête de recherche | allow |
codesearch |
Recherche de code | Chaîne de requête de recherche | allow |
external_directory |
Accéder aux chemins en dehors du répertoire de travail | Chemin du répertoire externe | ask |
doom_loop |
Déclenché lorsque le même outil est appelé 3 fois de suite avec la même entrée (empêche l'IA de rester bloquée dans une boucle) | — | ask |
Description de l'autorisation par défaut
Si vous n'avez configuré aucune autorisation, OpenCode utilise les valeurs par défaut intégrées suivantes :
- La plupart des autorisations d'outils sont définies par défaut sur
"allow", ce qui signifie qu'elles s'exécutent automatiquement sans demander de confirmation doom_loopetexternal_directoryEst défini par défaut sur"ask", ce qui nécessite une approbation manuellereadLa lecture de tous les fichiers est autorisée par défaut, mais.envles fichiers associés bénéficient d'une protection intégrée :
Exemple
{
"permission": {
"read": {
"*": "allow", // Autoriser la lecture de tous les fichiers par défaut
"*.env": "deny", // Bloquer la lecture des fichiers .env (empêcher la fuite des mots de passe de base de données, des clés API, etc.)
"*.env.*": "deny", // Bloquer la lecture des variantes telles que .env.local, .env.production
"*.env.example": "allow" // Autoriser la lecture de .env.example (fichier d'exemple, aucun secret réel)
}
}
}
Trois options dans l'invite d'approbation
Lorsque l'autorisation d'une opération est"ask", OpenCode affiche une invite d'approbation proposant les trois choix suivants :
| Option | Effet | Scénario d'application |
|---|---|---|
| une fois (cette fois uniquement) | Approuver uniquement cette requête ; la même opération demandera à nouveau une confirmation la prochaine fois | Autoriser temporairement une opération sans l'activer de façon permanente |
| toujours (toujours autoriser) | Ajouter le motif correspondant à l'opération à la liste blanche ; plus d'invites pour le reste de la session en cours | Confirmer qu'un type d'opération est sûr et souhaitez qu'il passe automatiquement dans cette session |
| rejeter (refuser) | Rejeter cette requête ; l'opération ne sera pas exécutée | L’opération semble risquée et vous ne voulez explicitement pas qu’elle soit exécutée |
En sélectionnantalwaysaprès, OpenCode fera en sorte que l’outil fournisse automatiquement un motif de liste blanche suggéré (par ex., après approbationgit status, il ajoutera généralementgit status*à la liste blanche).La liste blanche n’est valide que pour la session en cours et sera réinitialisée après le redémarrage d’OpenCode.
Configurer les autorisations séparément pour les agents
Si votre flux de travail utilise plusieurs agents, vous pouvez remplacer la configuration des autorisations pour chaque agent individuellement. Les autorisations des agents sont fusionnées avec la configuration globale, etles règles des agents ont priorité sur les règles globales。
1. Configurer les autorisations des agents dans opencode.json
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
// Autorisations globales : opérations git autorisées, mais commit et push interdits
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": { // Agent nommé build
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask", // Remplace le paramètre global : l'agent build autorise commit, mais nécessite une approbation
"git push *": "deny", // Hérite du paramètre global : push reste interdit
"grep *": "allow"
}
}
}
}
}
2. Configurer les autorisations des agents dans les fichiers Markdown
Les agents peuvent également être configurés via des fichiers Markdown, avec les autorisations écrites dans le YAML Front Matter en haut du fichier (---la partie située entre les deux) :
Exemple
---
description: Agent de revue de code (analyse uniquement le code, n'effectue aucune modification)
mode: subagent
permission:
edit: deny # Interdire toute modification de fichier
bash: ask # les commandes bash nécessitent une approbation
webfetch: deny # Interdire l'accès aux URL externes
---
Analyser uniquement le code et suggérer des modifications.
# Ci-dessous se trouve le prompt système de l'agent, décrivant les responsabilités et les normes comportementales de l'agent
Exemples de configuration pratiques
Exemple 1 : Mode conservateur (toutes les opérations nécessitent une approbation)
Convient à ceux qui débutent avec OpenCode ou lorsque vous travaillez sur des projets importants ; toutes les opérations nécessitent une confirmation manuelle :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask" // Toutes les opérations de tous les outils déclenchent des demandes d'approbation
}
}
Exemple 2 : Configuration de développement courante (opérations de lecture autorisées, opérations d'écriture nécessitant une approbation)
Convient au développement quotidien : permet à l'IA de lire et rechercher librement du code, mais nécessite une confirmation lors de la modification de fichiers et de l'exécution de commandes :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask", // Repli : les outils non configurés individuellement nécessitent une approbation par défaut
"read": "allow", // Lecture de fichiers : autoriser directement
"glob": "allow", // Recherche de fichiers avec glob : autoriser directement
"grep": "allow", // Recherche de contenu : autoriser directement
"list": "allow", // Lister les répertoires : autoriser directement
"bash": {
"*": "ask", // les commandes bash nécessitent une approbation par défaut
"git status *": "allow", // Voir git status : autoriser
"git log *": "allow", // Voir git log : autoriser
"git diff *": "allow", // Voir git diff : autoriser
"npm run *": "allow", // Exécuter les scripts npm : autoriser
"npm test *": "allow", // Exécuter les tests : autoriser
"rm *": "deny" // Supprimer des fichiers : bloquer directement
}
}
}
Exemple 3 : Autoriser l'accès à plusieurs répertoires de projet
Lorsque l'IA doit travailler sur plusieurs répertoires de projet, accordez l'accès aux répertoires externes :
Exemple
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow", // Autoriser l'accès aux répertoires de projet personnels
"~/projects/work/**": "allow", // Autoriser l'accès aux répertoires de projet professionnels
"~/dotfiles/**": "allow" // Autoriser l'accès au répertoire dotfiles
},
"edit": {
"~/dotfiles/**": "deny" // Même si l'accès aux dotfiles est autorisé, la modification est interdite (lecture seule)
}
}
}