permissions.mdx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. ---
  2. title: Tilladelser
  3. description: Kontroller, hvilke handlinger der kræver godkendelse for at køre.
  4. ---
  5. OpenCode bruger `permission`-konfigurationen til at bestemme, om en given handling skal køre automatisk, bede dig om eller blokeres.
  6. Fra `v1.1.1` er den ældre `tools` booleske konfiguration forældet og er blevet flettet ind i `permission`. Den gamle `tools`-konfiguration er stadig understøttet for bagudkompatibilitet.
  7. ---
  8. ## Handlinger
  9. Hver tilladelsesregel løses til en af:
  10. - `"allow"` — køre uden godkendelse
  11. - `"ask"` — prompt om godkendelse
  12. - `"deny"` — bloker handlingen
  13. ---
  14. ## Konfiguration
  15. Du kan indstille tilladelser globalt (med `*`) og tilsidesætte specifikke værktøjer.
  16. ```json title="opencode.json"
  17. {
  18. "$schema": "https://opencode.ai/config.json",
  19. "permission": {
  20. "*": "ask",
  21. "bash": "allow",
  22. "edit": "deny"
  23. }
  24. }
  25. ```
  26. Du kan også indstille alle tilladelser på én gang:
  27. ```json title="opencode.json"
  28. {
  29. "$schema": "https://opencode.ai/config.json",
  30. "permission": "allow"
  31. }
  32. ```
  33. ---
  34. ## Granulære regler (objektsyntaks)
  35. For de fleste tilladelser kan du bruge et objekt til at anvende forskellige handlinger baseret på værktøjsinputtet.
  36. ```json title="opencode.json"
  37. {
  38. "$schema": "https://opencode.ai/config.json",
  39. "permission": {
  40. "bash": {
  41. "*": "ask",
  42. "git *": "allow",
  43. "npm *": "allow",
  44. "rm *": "deny",
  45. "grep *": "allow"
  46. },
  47. "edit": {
  48. "*": "deny",
  49. "packages/web/src/content/docs/*.mdx": "allow"
  50. }
  51. }
  52. }
  53. ```
  54. Regler evalueres efter mønstermatch, hvor den **sidste matchende regel vinder**. Et almindeligt mønster er at sætte catch-all `"*"` reglen først og mere specifikke regler efter den.
  55. ### Jokertegn
  56. Tilladelsesmønstre bruger simpel jokertegn-matchning:
  57. - `*` matcher nul eller flere af et hvilket som helst tegn
  58. - `?` matcher nøjagtigt ét tegn
  59. - Alle andre karakterer matcher bogstaveligt talt
  60. ### Udvidelse af hjemmemappe
  61. Du kan bruge `~` eller `$HOME` i starten af ​​et mønster til at referere til din hjemmemappe. Dette er især nyttigt for [`external_directory`](#external-directories) regler.
  62. - `~/projects/*` -> `/Users/username/projects/*`
  63. - `$HOME/projects/*` -> `/Users/username/projects/*`
  64. - `~` -> `/Users/username`
  65. ### Eksterne mapper
  66. Brug `external_directory` til at tillade værktøjsopkald, der berører stier uden for den arbejdsmappe, hvor OpenCode blev startet. Dette gælder for ethvert værktøj, der tager en sti som input (for eksempel `read`, `edit`, `glob`, `grep` og mange `bash` kommandoer).
  67. Hjemmeudvidelse (som `~/...`) påvirker kun, hvordan et mønster skrives. Det gør ikke en ekstern sti til en del af det aktuelle arbejdsområde, så stier uden for arbejdsbiblioteket skal stadig være tilladt via `external_directory`.
  68. For eksempel giver dette adgang til alt under `~/projects/personal/`:
  69. ```json title="opencode.json"
  70. {
  71. "$schema": "https://opencode.ai/config.json",
  72. "permission": {
  73. "external_directory": {
  74. "~/projects/personal/**": "allow"
  75. }
  76. }
  77. }
  78. ```
  79. Enhver mappe, der er tilladt her, arver de samme standarder som det aktuelle arbejdsområde. Siden [`read` defaults to `allow`](#defaults), er læsninger også tilladt for poster under `external_directory`, medmindre de tilsidesættes. Tilføj eksplicitte regler, når et værktøj skal begrænses i disse stier, såsom blokering af redigeringer, mens læsninger bevares:
  80. ```json title="opencode.json"
  81. {
  82. "$schema": "https://opencode.ai/config.json",
  83. "permission": {
  84. "external_directory": {
  85. "~/projects/personal/**": "allow"
  86. },
  87. "edit": {
  88. "~/projects/personal/**": "deny"
  89. }
  90. }
  91. }
  92. ```
  93. Hold listen fokuseret på betroede stier, og lag ekstra tillad eller afvis regler efter behov for andre værktøjer (for eksempel `bash`).
  94. ---
  95. ## Tilgængelige tilladelser
  96. OpenCode tilladelser indtastes efter værktøjsnavn plus et par sikkerhedsafskærmninger:
  97. - `read` — læser en fil (matcher filstien)
  98. - `edit` — alle filændringer (dækker `edit`, `write`, `patch`, `multiedit`)
  99. - `glob` — fil-globing (matcher glob-mønsteret)
  100. - `grep` — indholdssøgning (matcher regex-mønsteret)
  101. - `bash` — kører shell-kommandoer (matcher parsede kommandoer som `git status --porcelain`)
  102. - `task` — lancering af underagenter (matcher underagenttypen)
  103. - `skill` — indlæsning af en færdighed (matcher færdighedsnavnet)
  104. - `lsp` — kører LSP forespørgsler (i øjeblikket ikke-granulære)
  105. - `webfetch` — henter en URL (matcher URL)
  106. - `websearch`, `codesearch` — web/code søgning (matcher forespørgslen)
  107. - `external_directory` — udløses, når et værktøj berører stier uden for projektets arbejdsmappe
  108. - `doom_loop` — udløses, når det samme værktøjskald gentages 3 gange med identisk input
  109. ---
  110. ## Standarder
  111. Hvis du ikke angiver noget, starter OpenCode fra tilladelige standardindstillinger:
  112. - De fleste tilladelser er som standard `"allow"`.
  113. - `doom_loop` og `external_directory` er som standard `"ask"`.
  114. - `read` er `"allow"`, men `.env` filer nægtes som standard:
  115. ```json title="opencode.json"
  116. {
  117. "permission": {
  118. "read": {
  119. "*": "allow",
  120. "*.env": "deny",
  121. "*.env.*": "deny",
  122. "*.env.example": "allow"
  123. }
  124. }
  125. }
  126. ```
  127. ---
  128. ## Hvad "Spørg" gør
  129. Når OpenCode beder om godkendelse, tilbyder brugergrænsefladen tre resultater:
  130. - `once` — godkend netop denne anmodning
  131. - `always` — godkend fremtidige anmodninger, der matcher de foreslåede mønstre (for resten af ​​den nuværende OpenCode session)
  132. - `reject` — afvis anmodningen
  133. Sættet af mønstre, som `always` ville godkende, leveres af værktøjet (f.eks. hvidlister bash-godkendelser typisk et sikkert kommandopræfiks som `git status*`).
  134. ---
  135. ## Agenter
  136. Du kan tilsidesætte tilladelser pr. agent. Agenttilladelser flettes med den globale konfiguration, og agentregler har forrang. [Learn more](/docs/agents#permissions) om agenttilladelser.
  137. :::note
  138. Se afsnittet [Granular Rules (Object Syntax)](#granular-rules-object-syntax) ovenfor for mere detaljerede mønstermatchningseksempler.
  139. :::
  140. ```json title="opencode.json"
  141. {
  142. "$schema": "https://opencode.ai/config.json",
  143. "permission": {
  144. "bash": {
  145. "*": "ask",
  146. "git *": "allow",
  147. "git commit *": "deny",
  148. "git push *": "deny",
  149. "grep *": "allow"
  150. }
  151. },
  152. "agent": {
  153. "build": {
  154. "permission": {
  155. "bash": {
  156. "*": "ask",
  157. "git *": "allow",
  158. "git commit *": "ask",
  159. "git push *": "deny",
  160. "grep *": "allow"
  161. }
  162. }
  163. }
  164. }
  165. }
  166. ```
  167. Du kan også konfigurere agenttilladelser i Markdown:
  168. ```markdown title="~/.config/opencode/agents/review.md"
  169. ---
  170. description: Code review without edits
  171. mode: subagent
  172. permission:
  173. edit: deny
  174. bash: ask
  175. webfetch: deny
  176. ---
  177. Only analyze code and suggest changes.
  178. ```
  179. :::tip
  180. Brug mønstermatchning til kommandoer med argumenter. `"grep *"` tillader `grep pattern file.txt`, mens `"grep"` alene ville blokere det. Kommandoer som `git status` fungerer for standardadfærd, men kræver eksplicit tilladelse (som `"git status *"`), når argumenter sendes.
  181. :::