สิทธิ์
ควบคุมการดำเนินการที่ต้องได้รับการอนุมัติจึงจะรันได้
OpenCode ใช้การกำหนดค่า permission เพื่อตัดสินใจว่าการดำเนินการที่กำหนดควรทำงานโดยอัตโนมัติ แจ้งให้คุณทราบ หรือถูกบล็อก
ตั้งแต่ v1.1.1 การกำหนดค่าบูลีนแบบเดิม tools เลิกใช้แล้วและได้รวมเข้ากับ permission แล้ว การกำหนดค่า tools แบบเก่ายังคงรองรับความเข้ากันได้แบบย้อนหลัง
การดำเนินการ
กฎการอนุญาตแต่ละข้อจะแก้ไขเป็นข้อใดข้อหนึ่งต่อไปนี้
"allow"— ทำงานโดยไม่ได้รับการอนุมัติ"ask"— พร้อมท์สำหรับการอนุมัติ"deny"— บล็อกการกระทำ
การกำหนดค่า
คุณสามารถตั้งค่าการอนุญาตทั่วโลก (ด้วย *) และแทนที่เครื่องมือเฉพาะ
{ "$schema": "https://opencode.ai/config.json", "permission": { "*": "ask", "bash": "allow", "edit": "deny" }}คุณยังสามารถตั้งค่าการอนุญาตทั้งหมดพร้อมกันได้:
{ "$schema": "https://opencode.ai/config.json", "permission": "allow"}กฎแบบละเอียด (ไวยากรณ์ของวัตถุ)
สำหรับการอนุญาตส่วนใหญ่ คุณสามารถใช้ออบเจ็กต์เพื่อปรับใช้การดำเนินการต่างๆ ตามอินพุตของเครื่องมือได้
{ "$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" } }}กฎจะได้รับการประเมินโดยการจับคู่รูปแบบ โดย กฎการจับคู่สุดท้ายจะชนะ รูปแบบทั่วไปคือการใส่กฎ catch-all "*" ก่อน และใส่กฎที่เฉพาะเจาะจงมากขึ้นหลังจากนั้น
สัญลักษณ์แทน
รูปแบบการอนุญาตใช้การจับคู่ไวด์การ์ดแบบง่าย:
*จับคู่อักขระใดๆ ตั้งแต่ศูนย์ขึ้นไป?ตรงกับอักขระหนึ่งตัวเท่านั้น- อักขระอื่นๆ ทั้งหมดตรงกันอย่างแท้จริง
การขยายโฮมไดเร็กทอรี
คุณสามารถใช้ ~ หรือ $HOME ที่จุดเริ่มต้นของรูปแบบเพื่ออ้างอิงโฮมไดเร็กตอรี่ของคุณ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับกฎของ external_directory
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
ไดเรกทอรีภายนอก
ใช้ external_directory เพื่ออนุญาตการเรียกใช้เครื่องมือที่สัมผัสเส้นทางนอกไดเร็กทอรีการทำงานที่ OpenCode เริ่มทำงาน สิ่งนี้ใช้ได้กับเครื่องมือใดๆ ที่ใช้เส้นทางเป็นอินพุต (เช่น read, edit, list, glob, grep และคำสั่ง bash จำนวนมาก)
การขยายบ้าน (เช่น ~/...) ส่งผลต่อวิธีการเขียนรูปแบบเท่านั้น ไม่ได้ทำให้เส้นทางภายนอกเป็นส่วนหนึ่งของพื้นที่ทำงานปัจจุบัน ดังนั้นเส้นทางภายนอกไดเรกทอรีการทำงานยังต้องได้รับอนุญาตผ่าน external_directory
ตัวอย่างเช่น อนุญาตให้เข้าถึงทุกสิ่งภายใต้ ~/projects/personal/:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" } }}ไดเร็กทอรีใดๆ ที่ได้รับอนุญาตที่นี่จะสืบทอดค่าเริ่มต้นเดียวกันกับพื้นที่ทำงานปัจจุบัน เนื่องจาก read มีค่าเริ่มต้นเป็น allow การอ่านจึงได้รับอนุญาตสำหรับรายการภายใต้ external_directory เว้นแต่จะถูกแทนที่ เพิ่มกฎที่ชัดเจนเมื่อควรจำกัดเครื่องมือในเส้นทางเหล่านี้ เช่น การบล็อกการแก้ไขในขณะที่ยังคงอ่านอยู่:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" }, "edit": { "~/projects/personal/**": "deny" } }}ให้รายการมุ่งเน้นไปที่เส้นทางที่เชื่อถือได้ และเลเยอร์อนุญาตหรือปฏิเสธกฎเพิ่มเติมตามที่จำเป็นสำหรับเครื่องมืออื่นๆ (เช่น bash)
สิทธิ์ที่มีอยู่
สิทธิ์ของ OpenCode จะกำหนดไว้ตามชื่อเครื่องมือ พร้อมด้วย guardrails อีก 2-3 คน:
read— อ่านไฟล์ (ตรงกับเส้นทางของไฟล์)edit— การแก้ไขไฟล์ทั้งหมด (ครอบคลุมถึงedit,write,patch,multiedit)glob— ไฟล์ globbing (ตรงกับรูปแบบ glob)grep— การค้นหาเนื้อหา (ตรงกับรูปแบบ regex)list— แสดงรายการไฟล์ในไดเร็กทอรี (ตรงกับเส้นทางไดเร็กทอรี)bash— การรันคำสั่ง shell (ตรงกับคำสั่งที่แยกวิเคราะห์เช่นgit status --porcelain)task— การเปิดตัวตัวแทนย่อย (ตรงกับประเภทตัวแทนย่อย)skill— กำลังโหลดทักษะ (ตรงกับชื่อทักษะ)lsp— กำลังเรียกใช้คำสั่ง LSP (ปัจจุบันยังไม่ละเอียด)todoread,todowrite— กำลังอ่าน/updating รายการสิ่งที่ต้องทำwebfetch— กำลังดึง URL (ตรงกับ URL)websearch,codesearch— การค้นหาเว็บ/code (ตรงกับข้อความค้นหา)external_directory— ทริกเกอร์เมื่อเครื่องมือแตะเส้นทางนอกไดเร็กทอรีการทำงานของโปรเจ็กต์doom_loop— ทริกเกอร์เมื่อมีการเรียกใช้เครื่องมือเดียวกันซ้ำ 3 ครั้งโดยมีอินพุตเหมือนกัน
ค่าเริ่มต้น
หากคุณไม่ได้ระบุสิ่งใด OpenCode จะเริ่มต้นจากค่าเริ่มต้นที่อนุญาต:
- การอนุญาตส่วนใหญ่มีค่าเริ่มต้นเป็น
"allow" doom_loopและexternal_directoryมีค่าเริ่มต้นเป็น"ask"readคือ"allow"แต่ไฟล์.envถูกปฏิเสธโดยค่าเริ่มต้น:
{ "permission": { "read": { "*": "allow", "*.env": "deny", "*.env.*": "deny", "*.env.example": "allow" } }}สิ่งที่ “ถาม” ทำ
เมื่อ OpenCode แจ้งให้อนุมัติ UI จะเสนอผลลัพธ์สามประการ:
once— อนุมัติเพียงคำขอนี้always— อนุมัติคำขอในอนาคตที่ตรงกับรูปแบบที่แนะนำ (สำหรับส่วนที่เหลือของเซสชัน OpenCode ปัจจุบัน)reject— ปฏิเสธคำขอ
ชุดรูปแบบที่ always จะอนุมัตินั้นมาจากเครื่องมือ (เช่น โดยทั่วไปการอนุมัติ bash จะกำหนดไวท์ลิสต์คำนำหน้าคำสั่งที่ปลอดภัย เช่น git status*)
ตัวแทน
คุณสามารถแทนที่สิทธิ์ต่อตัวแทนได้ สิทธิ์ของตัวแทนจะผสานเข้ากับการกำหนดค่าส่วนกลาง และกฎของตัวแทนจะมีความสำคัญกว่า เรียนรู้เพิ่มเติม เกี่ยวกับการอนุญาตของตัวแทน
{ "$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" } } } }}คุณยังสามารถกำหนดค่าการอนุญาตตัวแทนใน Markdown ได้:
---description: Code review without editsmode: subagentpermission: edit: deny bash: ask webfetch: deny---
Only analyze code and suggest changes.