การใช้งาน AI Coding Agent อย่าง OpenCode ช่วยเพิ่มความเร็วในการพัฒนาซอฟต์แวร์ได้อย่างมหาศาล แต่การปล่อยให้ AI ทำงานโดยไม่มีการกำหนดขอบเขตสิทธิ์ที่รัดกุม อาจนำไปสู่ความเสี่ยง เช่น การอ่านไฟล์ความลับ หรือการแก้ไขซอร์สโค้ดโดยไม่ได้อนุญาต บทความนี้สรุปแนวทางการจัดการ Permissions ใน OpenCode แบบถูกต้องตาม Schema และเอกสารทางการล่าสุดครับ
1. โครงสร้างและการตั้งค่า Permissions ใน opencode.json
การจำกัดสิทธิ์ใน OpenCode ทำได้โดยการกำหนดค่าใน opencode.json ซึ่งรองรับทั้งการตั้งค่าแบบครอบคลุมและการกำหนดสิทธิ์แบบเจาะจง (Granular Rules):
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*Get-Content **/.env*": "deny",
"*gc **/.env*": "deny",
"*type **/.env*": "deny",
"*cat **/.env*": "deny",
"*grep **/.env*": "deny",
"*Select-String **/.env*": "deny"
},
"read": {
"**/.env*": "deny",
"**/.env.example": "allow"
},
"grep": {
"**/.env*": "deny",
"**/.env.example": "allow"
},
"glob": {
"*": "allow"
},
"external_directory": {
"*": "deny",
"~/projects/personal/**": "allow"
}
},
"share": "manual"
}
- ผลลัพธ์ของสิทธิ์ (Actions): มี 3 ค่าหลัก คือ
"allow"(อนุญาตทันที),"ask"(ต้องถามยืนยัน), และ"deny"(ปฏิเสธเด็ดขาด) - การใช้ Wildcard Matching: รองรับ
*(ตรงกับตัวอักษรใดๆ ในชั้นเดียว),**(Recursive สแกนทะลุทุก Subdirectory) และ?(ตรงกับ 1 ตัวอักษร) - หลักการอ่านกฎ (Last-Match-Wins): ระบบจะอ่านกฎจากบนลงล่าง กฎข้อสุดท้ายที่ตรงเงื่อนไขจะเป็นกฎที่มีผลจริงเสมอ เช่น การสั่ง
"**/.env*": "deny"ไว้ก่อนเพื่อบล็อกไฟล์.envทุกรูปแบบแล้วจึงวาง"**/.env.example": "allow"ไว้ด้านล่างสุด เพื่อปลดล็อกให้ใช้เฉพาะไฟล์ตัวอย่างได้