Claude Code ขออนุญาตอยู่เรื่อย ๆ? แก้ได้โดยไม่ต้องใช้ --dangerously-skip-permissions
การกดอนุมัติ npm test เป็นครั้งที่สี่สิบเป็นแค่สิ่งรบกวน Claude Code มีทุกอย่างที่คุณต้องใช้เพื่อปิดพรอมต์น่าเบื่อและเก็บพรอมต์ที่อันตรายไว้ เพียงแต่กระจายอยู่ในสามไฟล์และหกโหมด
คำตอบสั้น ๆ
ใส่คำสั่งที่คุณอนุมัติเสมอไว้ใน permissions.allow (เช่น Bash(npm run *)) ใส่คำสั่งที่ต้องหยุดรอให้คุณยืนยันทุกครั้งไว้ใน ask หรือ deny แล้วเลือกโหมดสิทธิ์ให้เหมาะกับงาน: acceptEdits สำหรับงานแก้ไขไฟล์เยอะ ๆ, auto สำหรับงานประจำ, plan สำหรับการอ่าน กฎจะถูกตรวจตามลำดับ deny → ask → allow ดังนั้น deny จะไม่มีวันถูกแทนที่ได้ ใช้ /permissions เพื่อดูว่าแต่ละกฎมาจากไหน ส่วน --dangerously-skip-permissions ให้ใช้กับคอนเทนเนอร์ที่ใช้แล้วทิ้งเท่านั้น
ทำไม Claude Code ถึงถามบ่อย
ในโหมดเริ่มต้น (ใน CLI จะแสดงว่า Manual) Claude Code จะถามเมื่อใช้เครื่องมือแต่ละตัวเป็นครั้งแรก และถามอีกทุกครั้งสำหรับคำสั่งเชลล์ที่ยังไม่ได้รับอนุญาตให้รัน พรอมต์คือจังหวะที่คุณหยุด rm ที่ผิดพลาดหรือ git push โดยไม่ตั้งใจได้ จึงควรเก็บไว้ ปัญหาคือมันก็ขึ้นมาสำหรับอีกร้อยอย่างที่ไม่มีอันตรายซึ่งเอเจนต์ทำในหนึ่งเซสชันด้วย
มีสามอย่างที่ตัดสินว่าคุณจะเห็นพรอมต์หรือไม่: กฎ ในไฟล์การตั้งค่า, โหมดสิทธิ์ ที่คุณใช้อยู่ และคำตอบที่คุณเคยให้ไว้ด้วย “Yes, and don’t ask again” การลดสิ่งรบกวนจึงต้องปรับทั้งสามอย่าง
Claude Code v2.1.283 ขึ้นไปจะเริ่มเซสชันเทอร์มินัลแบบโต้ตอบและเซสชัน VS Code ในโหมด auto ในทุกแพ็กเกจและทุกผู้ให้บริการ ในโหมด auto ตัวจำแนก (classifier) เบื้องหลังจะตรวจคำสั่งและคำขอเครือข่ายเทียบกับสิ่งที่คุณสั่ง แทนที่จะถามสำหรับการกระทำทั่วไป หากคุณยังเห็นพรอมต์ทุกอย่าง ให้ดูแถบสถานะ: “⏸ manual mode on” หมายความว่าคุณอยู่ในโหมดเริ่มต้น
กฎ allow, ask และ deny
กฎอยู่ใต้ permissions ในไฟล์การตั้งค่า ตัวอย่างนี้นำมาจากเอกสารอ้างอิงการตั้งค่าของ Anthropic โดยตรง:
allow: รันโดยไม่ถามask: ถามทุกครั้ง แม้ในโหมดที่ปกติจะอนุมัติให้เองdeny: ไม่รันเลย
ลำดับคือส่วนสำคัญ: deny ก่อน แล้ว ask แล้วจึง allow กฎแรกที่ตรงจะชนะ และความเฉพาะเจาะจงไม่ได้เปลี่ยนลำดับนี้ กฎ allow ไม่สามารถสร้างข้อยกเว้นให้กฎ deny ได้ และถ้าเครื่องมือถูก deny ในระดับใดก็ตาม ระดับอื่นจะ allow ไม่ได้ กฎถูกบังคับใช้โดยตัว Claude Code เอง ไม่ใช่โดยโมเดล ดังนั้นการเขียนว่า “never push” ใน CLAUDE.md จึงไม่ได้ผลเหมือนกฎ deny
วิธีเขียนกฎ
| กฎ | สิ่งที่ตรงกัน |
|---|---|
Bash(npm run *) | npm run build, npm run test --watch แต่ไม่รวม npm install |
Bash(git log *) | เฉพาะ git log … เทียบกับ Bash(git *) ซึ่งอนุญาตทุกคำสั่ง git |
Bash(ls:*) | เหมือนกับ Bash(ls *): :* เป็นอีกวิธีเขียนไวลด์การ์ดต่อท้าย |
Read(./.env) | การอ่านไฟล์นั้น กฎ Read และ Edit ใช้รูปแบบแบบ gitignore |
Edit(//Users/alice/notes/**) | พาธแบบสัมบูรณ์ / ตัวเดียวนำหน้าจะเป็นพาธสัมพัทธ์กับไฟล์การตั้งค่า ดังนั้นพาธสัมบูรณ์ต้องใช้ // |
WebFetch(domain:example.com) | เฉพาะ example.com เพิ่ม WebFetch(domain:*.example.com) สำหรับโดเมนย่อย |
mcp__github__* | ทุกเครื่องมือจากเซิร์ฟเวอร์ MCP github กฎที่มีวงเล็บต่อท้าย mcp__ จะถูกข้าม |
บน Windows กฎของ PowerShell ใช้รูปแบบเดียวกับกฎของ Bash
ควรใช้ไฟล์การตั้งค่าไหน
| ขอบเขต | ไฟล์ | ใช้สำหรับ |
|---|---|---|
| ผู้ใช้ | ~/.claude/settings.json (Windows: %USERPROFILE%\.claude\settings.json) | นิสัยการทำงานของคุณเอง ในทุกโปรเจกต์ |
| โปรเจกต์ แบบแชร์ | .claude/settings.json | กฎที่ทั้งทีมควรได้รับ (คอมมิตไฟล์นี้) |
| โปรเจกต์ แบบโลคัล | .claude/settings.local.json | กฎส่วนตัวของคุณสำหรับรีโปเดียว (ไม่คอมมิต) |
| จัดการโดยองค์กร (Managed) | managed-settings.json และแหล่ง managed อื่น ๆ | นโยบายบริษัท ไม่มีอะไรแทนที่ได้ |
ลำดับความสำคัญจากสูงสุด: managed, บรรทัดคำสั่ง, โปรเจกต์โลคัล, โปรเจกต์แชร์, ผู้ใช้ คีย์ที่เป็นรายการ เช่น permissions.allow จะถูก รวมกัน ข้ามไฟล์ ไม่ใช่ถูกแทนที่ มีสองรายละเอียดที่ทำให้คนพลาดบ่อย:
- ไฟล์การตั้งค่าเป็น JSON แบบเคร่งครัด: คอมเมนต์
//หรือคอมมาต่อท้ายถือเป็นข้อผิดพลาดทางไวยากรณ์ และทั้งไฟล์จะถูกละเว้น - กฎ allow ในไฟล์โปรเจกต์แบบแชร์จะมีผลหลังจากเพื่อนร่วมทีมแต่ละคนเชื่อถือ (trust) โฟลเดอร์แล้วเท่านั้น ส่วนกฎ deny และ ask มีผลทันที
การแก้ไขส่วนใหญ่มีผลกับเซสชันที่กำลังรันอยู่โดยไม่ต้องรีสตาร์ต รวมถึง permissions และ hooks หากต้องการดูว่าอะไรถูกโหลดจริง ให้รัน /status (บรรทัด Setting sources) หรือ /permissions ซึ่งแสดงทุกกฎและไฟล์ที่กฎนั้นมาจาก
“Yes, and don’t ask again” บันทึกอะไรจริง ๆ
การตอบพรอมต์ด้วย “don’t ask again” จะเขียนกฎให้คุณใน .claude/settings.local.json ที่รูทของรีโพสิทอรี git ระยะเวลาที่มีผลขึ้นอยู่กับเครื่องมือ:
| เครื่องมือ | จำไว้นานแค่ไหน |
|---|---|
| คำสั่ง Bash | ถาวร ต่อรีโพสิทอรีและต่อคำสั่ง |
| การแก้ไขไฟล์ | จนกว่าเซสชันจะจบ |
| WebFetch | ถาวร ต่อรีโพสิทอรีและต่อโดเมน |
ดังนั้นถ้า Claude ขอแก้ไขไฟล์ทุกครั้งที่เริ่มเซสชันใหม่ นั่นเป็นไปตามการออกแบบ: การอนุมัติแก้ไขไฟล์มีผลต่อเซสชันเท่านั้น ให้ใช้โหมด acceptEdits หรือกฎ allow แบบ Edit(...) แทน และถ้าคำสั่งยังถามอยู่แม้จะตอบ “don’t ask again” แล้ว ให้มองหากฎ ask ในไฟล์โปรเจกต์หรือไฟล์ managed กฎ allow ในไฟล์โลคัลของคุณไม่ได้มีลำดับสูงกว่ากฎนั้น
โหมดสิทธิ์ และควรใช้แต่ละโหมดเมื่อไร
| โหมด | สิ่งที่ทำ | เหมาะกับ |
|---|---|---|
default (Manual) | ถามเมื่อใช้เครื่องมือแต่ละตัวครั้งแรก | รีโปที่ไม่คุ้นเคย งานที่เสี่ยง |
acceptEdits | ยอมรับการแก้ไขไฟล์โดยไม่ถาม | การรีแฟกเตอร์ยาว ๆ ที่คุณจะตรวจใน git |
plan | อ่านและวางแผน ไม่เปลี่ยนแปลงอะไร | สำรวจโค้ดเบส ออกแบบการเปลี่ยนแปลง |
auto | ไม่มีพรอมต์สำหรับงานทั่วไป ตัวจำแนกจะตรวจคำสั่งและคำขอเครือข่ายก่อน | งานประจำวัน |
dontAsk | ไม่ถาม | สคริปต์และงานอัตโนมัติ |
bypassPermissions | ข้ามพรอมต์ รวมถึงการเขียนไปที่ .git และ .claude | คอนเทนเนอร์หรือ VM ที่แยกออกมาเท่านั้น |
กด Shift+Tab เพื่อวนสลับโหมด จาก auto การกดครั้งแรกจะไปที่ default จากนั้นเป็น default → acceptEdits → plan ตั้งโหมดเริ่มต้นได้ด้วย permissions.defaultMode โปรดทราบว่า auto และ bypassPermissions จะมีผลเฉพาะเมื่อตั้งในการตั้งค่าระดับผู้ใช้หรือ managed เท่านั้น ไม่ใช่จากไฟล์โปรเจกต์
บางอย่างจะถามเสมอในทุกโหมดรวมถึง bypass เช่น กฎ ask ที่ระบุไว้ชัดเจน คำถามที่ Claude ถามคุณ และ rm บนพาธสำคัญ เป็นต้น ผู้ดูแลระบบสามารถปิดโหมดที่เสี่ยงได้ด้วย permissions.disableBypassPermissionsMode หรือ permissions.disableAutoMode ที่ตั้งเป็น "disable"
เกี่ยวกับ --dangerously-skip-permissions
--dangerously-skip-permissions เหมือนกับ --permission-mode bypassPermissions เอกสารของ Anthropic พูดไว้ตรง ๆ ว่าให้ใช้เฉพาะในสภาพแวดล้อมที่แยกออกมา เช่น คอนเทนเนอร์, VM หรือ dev container ที่ไม่มีอินเทอร์เน็ต มันจะไม่ยอมรันในฐานะ root บน Linux และ macOS และเมื่อคุณยอมรับคำเตือนแล้ว มันจะตั้งค่า skipDangerousModePermissionPrompt ในการตั้งค่าผู้ใช้ของคุณ
ถ้าสิ่งที่คุณต้องการจริง ๆ คือ “เลิกถามเรื่องน่าเบื่อ” โหมด auto กับกฎ allow อีกไม่กี่ข้อก็พาคุณไปถึงได้ โดยไม่ต้องสละพรอมต์ที่สำคัญ
แซนด์บ็อกซ์: พรอมต์น้อยลงพร้อมตาข่ายนิรภัย
Claude Code สามารถรันคำสั่งเชลล์ในแซนด์บ็อกซ์ได้ ค่าเริ่มต้นปิดอยู่ เปิดได้ด้วย /sandbox หรือ sandbox.enabled: true โหมดแซนด์บ็อกซ์แบบหนึ่งจะอนุมัติคำสั่งที่รันในแซนด์บ็อกซ์ให้อัตโนมัติ อีกแบบยังคงถาม แซนด์บ็อกซ์ครอบคลุมเฉพาะคำสั่งเชลล์: เครื่องมือไฟล์ เซิร์ฟเวอร์ MCP และ hook จะรันนอกแซนด์บ็อกซ์
ใช้งานได้บน macOS, Linux และ WSL2 บน Windows แบบเนทีฟ แซนด์บ็อกซ์ไม่ทำงาน และคำสั่งจะรันโดยไม่มีแซนด์บ็อกซ์ นี่เป็นอีกเหตุผลที่ควรเก็บรายการ ask สั้น ๆ ไว้บนนั้น
การตั้งค่าที่ใช้ได้จริง
นี่คือจุดเริ่มต้นที่สมเหตุสมผลสำหรับโปรเจกต์ JavaScript ปรับคำสั่งให้เข้ากับสแตกของคุณ:
- เริ่มจากรายการ allow ของคำสั่งแบบอ่านอย่างเดียวและคำสั่งทดสอบ
- ใส่ทุกอย่างที่ออกไปนอกเครื่องของคุณ (push, publish, deploy) ไว้ใน
ask - ใส่ไฟล์ความลับไว้ใน deny ไปเลย
- ทำงานในโหมด auto หรือ acceptEdits และเปลี่ยนเป็นโหมด plan เมื่อกำลังสำรวจ
- ทุก ๆ สองสามวัน ให้เปิด
.claude/settings.local.jsonและตัดกฎที่ “don’t ask again” เพิ่มเข้ามาออก
เมื่อพรอมต์ที่เหลืออยู่ผิดที่
หลังปรับแต่งแล้ว คุณควรถูกถามเฉพาะเรื่องที่สมควรต้องตัดสินใจ ปัญหาที่เหลือคือคำถามไปโผล่ที่ไหน: ในแท็บเทอร์มินัลที่อยู่หลังเบราว์เซอร์ ซึ่งเอเจนต์อาจรออยู่ยี่สิบนาทีกว่าคุณจะสังเกตเห็น
Pet Island ย้ายคำถามเหล่านั้นไปไว้บนเกาะเล็ก ๆ ที่ด้านบนของหน้าจอ เมื่อ Claude Code ต้องการสิทธิ์ คำขอจะปรากฏที่นั่นพร้อมคำสั่งหรือ diff และคุณกดอนุญาต ปฏิเสธ หรืออนุญาตเสมอได้โดยไม่ต้องสลับหน้าต่าง คำถามและแผนของ Claude Code ก็ใช้งานจากเกาะได้เช่นกัน และถ้าเกาะปิดอยู่ Claude Code ก็จะกลับไปถามในเทอร์มินัลตามปกติ
คำถามที่พบบ่อย
จะหยุดไม่ให้ Claude Code ขออนุญาตทุกคำสั่งได้อย่างไร?
เพิ่มคำสั่งที่คุณไว้ใจลงใน permissions.allow ใน ~/.claude/settings.json เช่น "Bash(npm run *)" และใช้โหมด auto หรือ acceptEdits เก็บคำสั่งที่เสี่ยงไว้ใน permissions.ask เพื่อให้ยังหยุดรอการยืนยันจากคุณ
ทำไม Claude Code ถึงขอแก้ไขไฟล์อีกหลังจากที่ฉันตอบ don’t ask again ไปแล้ว?
การอนุมัติแก้ไขไฟล์มีผลจนกว่าเซสชันจะจบเท่านั้น ใช้โหมด acceptEdits หรือกฎ allow แบบ Edit(...) หากต้องการให้การแก้ไขได้รับอนุมัติข้ามเซสชัน
กฎ allow แทนที่กฎ deny ได้ไหม?
ไม่ได้ กฎถูกตรวจตามลำดับ deny แล้ว ask แล้ว allow และกฎแรกที่ตรงจะชนะ เครื่องมือที่ถูก deny ในระดับใดก็ตามจะ allow จากที่อื่นไม่ได้
--dangerously-skip-permissions ปลอดภัยไหม?
Anthropic แนะนำให้ใช้เฉพาะในสภาพแวดล้อมที่แยกออกมา เช่น คอนเทนเนอร์หรือ VM ที่ไม่มีอินเทอร์เน็ต มันยังข้ามพรอมต์สำหรับการเขียนไปที่ .git และ .claude ด้วย
“Yes, and don’t ask again” บันทึกกฎไว้ที่ไหน?
ใน .claude/settings.local.json ที่รูทของรีโพสิทอรี git
แซนด์บ็อกซ์ของ Claude Code ใช้บน Windows ได้ไหม?
บน Windows แบบเนทีฟใช้ไม่ได้ คำสั่งจะรันโดยไม่มีแซนด์บ็อกซ์ ใช้งานได้บน macOS, Linux และ WSL2
แหล่งข้อมูล
การตั้งค่าและพฤติกรรมทุกอย่างในหน้านี้ได้รับการตรวจสอบกับหน้าเหล่านี้เมื่อวันที่ 26 ตุลาคม 2026 เอเจนต์เปลี่ยนแปลงเร็ว หากมีอะไรไม่ตรงกันแล้ว ให้ยึดหน้าทางการเป็นหลัก
- เอกสาร Claude Code: Configure permissions
- เอกสาร Claude Code: Permission modes
- เอกสาร Claude Code: Settings
- เอกสาร Claude Code: Settings reference
- เอกสาร Claude Code: Sandboxing