File size: 7,121 Bytes
0dbc9de | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | ---
title: Tillatelser
description: 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.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
```
Du kan også angi alle tillatelser samtidig:
```json title="opencode.json"
{
"$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.
```json title="opencode.json"
{
"$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`](#external-directories) 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`, `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/`:
```json title="opencode.json"
{
"$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`](#defaults), 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:
```json title="opencode.json"
{
"$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 (dekker `edit`, `write`, `patch`)
- `glob` — fil-globing (tilsvarer glob-mønsteret)
- `grep` — innholdssøk (samsvarer med regex-mønsteret)
- `bash` — kjører skallkommandoer (matcher analyserte kommandoer som `git status --porcelain`)
- `task` — start av subagenter (tilsvarer subagenttypen)
- `skill` — laster en ferdighet (tilsvarer navnet på ferdigheten)
- `lsp` — kjører LSP-spørringer (for øyeblikket ikke-granulære)
- `webfetch` — henter en URL (tilsvarer URL)
- `websearch` - nettsøk (samsvarer med søket)
- `external_directory` - utløses når et verktøy berører stier utenfor prosjektets arbeidskatalog
- `doom_loop` — utløses når det samme verktøykallet gjentas 3 ganger med identisk inndata
---
## Standarder
Hvis du ikke spesifiserer noe, starter OpenCode fra tillatte standardinnstillinger:
- De fleste tillatelser er satt til `"allow"` som standard.
- `doom_loop` og `external_directory` er standard til `"ask"`.
- `read` er `"allow"`, men `.env` filer nektes som standard:
```json title="opencode.json"
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
```
---
## Hva "ask" gjør
Når OpenCode ber om godkjenning, gir brukergrensesnittet tre alternativer:
- `once` — godkjenne nettopp denne forespørselen
- `always` — 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](/docs/agents#permissions) om agenttillatelser.
:::note
Se avsnittet [Granular Rules (Object Syntax)](#granular-rules-object-syntax) ovenfor for mer detaljerte eksempler på mønstertilpasning.
:::
```json title="opencode.json"
{
"$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:
```markdown title="~/.config/opencode/agents/review.md"
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.
```
:::tip
Bruk mønstertilpasning for kommandoer med argumenter. `"grep *"` tillater `grep pattern file.txt`, mens `"grep"` alene ville blokkert den. Kommandoer som `git status` fungerer for standard oppførsel, men krever eksplisitt tillatelse (som `"git status *"`) når argumenter sendes.
:::
|