Tillatelser
Kontroller hvilke handlinger som krever godkjenning for å kjøre.
OpenCode bruker permission-konfigurasjonen for å bestemme om en gitt handling skal kjøres automatisk, spørre deg eller blokkeres.
Fra og med v1.1.1 er den eldre tools boolske konfigurasjonen avviklet og har blitt slått sammen til permission. Den gamle tools-konfigurasjonen støttes fortsatt for bakoverkompatibilitet.
Handlinger
Hver tillatelsesregel løses til en av:
"allow"— kjør uten godkjenning"ask"— be om godkjenning"deny"— blokker handlingen
Konfigurasjon
Du kan angi tillatelser globalt (med *), og overstyre spesifikke verktøy.
{ "$schema": "https://opencode.ai/config.json", "permission": { "*": "ask", "bash": "allow", "edit": "deny" }}Du kan også angi alle tillatelser samtidig:
{ "$schema": "https://opencode.ai/config.json", "permission": "allow"}Granulære regler (objektsyntaks)
For de fleste tillatelser kan du bruke et objekt til å bruke forskjellige handlinger basert på verktøyinndata.
{ "$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" } }}Regler evalueres etter mønstermatch, med siste samsvarende regel som vinner. Et vanlig mønster er å sette oppsamlingsregelen "*" først, og mer spesifikke regler etter den.
Jokertegn
Tillatelsesmønstre bruker enkel jokertegnsamsvar:
*samsvarer med null eller flere av alle tegn?samsvarer med nøyaktig ett tegn- Alle andre karakterer samsvarer bokstavelig talt
Utvidelse av hjemmekatalog
Du kan bruke ~ eller $HOME i starten av et mønster for å referere til hjemmekatalogen din. Dette er spesielt nyttig for external_directory regler.
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
Eksterne kataloger
Bruk external_directory for å tillate verktøyanrop som berører stier utenfor arbeidskatalogen der OpenCode ble startet. Dette gjelder alle verktøy som tar en bane som input (for eksempel read, edit, list, glob, grep og mange bash-kommandoer).
Hjemmeutvidelse (som ~/...) påvirker bare hvordan et mønster skrives. Den gjør ikke en ekstern bane til en del av det gjeldende arbeidsområdet, så stier utenfor arbeidskatalogen må fortsatt tillates via external_directory.
For eksempel gir dette tilgang til alt under ~/projects/personal/:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" } }}Enhver katalog som er tillatt her, arver de samme standardinnstillingene som gjeldende arbeidsområde. Siden read er standard til allow, er lesing også tillatt for oppføringer under external_directory med mindre overstyrt. Legg til eksplisitte regler når et verktøy skal begrenses i disse banene, for eksempel blokkering av redigeringer mens du beholder lesninger:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" }, "edit": { "~/projects/personal/**": "deny" } }}Hold listen fokusert på klarerte baner, og lag ekstra tillat eller avslå regler etter behov for andre verktøy (for eksempel bash).
Tilgjengelige tillatelser
OpenCode-tillatelser tastes inn etter verktøynavn, pluss et par sikkerhetsvakter:
read— lesing av en fil (tilsvarer filbanen)edit— alle filendringer (dekkeredit,write,patch,multiedit)glob— fil-globing (tilsvarer glob-mønsteret)grep— innholdssøk (samsvarer med regex-mønsteret)list— viser filer i en katalog (tilsvarer katalogbanen)bash— kjører shell-kommandoer (matcher analyserte kommandoer somgit status --porcelain)task— lansering av subagenter (tilsvarer subagenttypen)skill— laster en ferdighet (tilsvarer ferdighetsnavnet)lsp— kjører LSP-spørringer (for øyeblikket ikke-granulære)todoread,todowrite— lesing/oppdatering av gjøremålslistenwebfetch— henter en URL (tilsvarer URL)websearch,codesearch- nett-/kodesøk (samsvarer med søket)external_directory- utløses når et verktøy berører stier utenfor prosjektets arbeidskatalogdoom_loop— utløses når det samme verktøykallet gjentas 3 ganger med identisk inngang
Standard
Hvis du ikke spesifiserer noe, starter OpenCode fra tillatte standardinnstillinger:
- De fleste tillatelser er
"allow"som standard. doom_loopogexternal_directoryer standard til"ask".reader"allow", men.envfiler nektes som standard:
{ "permission": { "read": { "*": "allow", "*.env": "deny", "*.env.*": "deny", "*.env.example": "allow" } }}Hva “ask” gjør
Når OpenCode ber om godkjenning, gir UI tre utfall:
once— godkjenne nettopp denne forespørselenalways— godkjenn fremtidige forespørsler som samsvarer med de foreslåtte mønstrene (for resten av den nåværende OpenCode-økten)reject— avslå forespørselen
Settet med mønstre som always vil godkjenne, leveres av verktøyet (for eksempel, bash-godkjenninger hvitlister vanligvis et trygt kommandoprefiks som git status*).
Agenter
Du kan overstyre tillatelser per agent. Agenttillatelser slås sammen med den globale konfigurasjonen, og agentregler har forrang. Finn ut mer om agenttillatelser.
{ "$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" } } } }}Du kan også konfigurere agenttillatelser i Markdown:
---description: Code review without editsmode: subagentpermission: edit: deny bash: ask webfetch: deny---
Only analyze code and suggest changes.