Bạn vừa cập nhật Claude Code, mở session mới và thấy status bar hiện ⏵⏵ auto mode on thay vì hộp thoại hỏi quyền quen thuộc?
Đừng hoảng — không phải tool “tự ý” đổi quyền của bạn. Từ phiên bản 2.1.283, Claude Code đổi chế độ khởi động mặc định sang auto, với một model classifier chạy nền duyệt hành động thay bạn. [1] Câu hỏi thực tế là: 6 chế độ quyền hiện có khác nhau thế nào, và bạn nên dùng cái nào cho từng việc?
Đây là bài thứ năm trong series Claude Code. Nếu bạn chưa cài tool, đọc Claude Code là gì? Hướng dẫn cài đặt trước. Còn nếu đã quen quy trình sửa code cơ bản, bài này sẽ giúp bạn chọn đúng permission Claude Code cho từng tình huống — từ viết code hằng ngày tới chạy CI hay container.

Tóm tắt nhanh
- Claude Code có 6 permission mode:
default(Manual),acceptEdits,plan,auto,dontAskvàbypassPermissions. - Từ v2.1.283, session tương tác khởi động ở chế độ
auto— model classifier duyệt hành động thay bạn. - Đổi mode trong session bằng
Shift+Tab; đặt mặc định bằng cờ--permission-modehoặcpermissions.defaultMode. bypassPermissionschỉ nên dùng trong container hoặc VM cách ly — không có lớp bảo vệ nào.- Deny rule chặn ở mọi mode, kể cả bypass; allow rule vô hiệu trong bypass.
Permission mode trong Claude Code là gì?
Permission mode là chế độ quyết định Claude Code được làm gì mà không cần hỏi bạn trước. Mỗi permission Claude Code mode là một điểm cân bằng giữa tiện lợi và giám sát: càng ít hỏi, càng nhanh — nhưng càng mất kiểm soát trực tiếp. [1]
- Permission prompt
- Hộp thoại hỏi quyền trước hành động nhạy cảm như sửa file, chạy lệnh shell hay truy cập mạng.
- Classifier
- Model chạy nền trong chế độ
auto, duyệt từng hành động trước khi thực thi thay cho việc hỏi bạn.
Cần phân biệt hai thứ: permission mode đặt “đường baseline” cho cả session, còn permission rules (allow/ask/deny) tinh chỉnh từng tool cụ thể bên trên baseline đó. Rule deny chặn ở mọi mode — kể cả bypassPermissions. [2]
Một chi tiết hay gây nhầm: chế độ hỏi từng hành động có tên hiển thị là Manual trong CLI và extension, nhưng giá trị cấu hình của nó là default. Claude Code chấp nhận manual làm alias ở mọi nơi bạn gõ giá trị — ví dụ claude --permission-mode manual. [1]
Permission Claude Code: 6 mode khác nhau ở điểm nào?
Sáu permission mode tạo thành một thang từ “duyệt từng hành động” tới “không hỏi gì cả”. Bảng permission Claude Code dưới đây tóm tắt theo tài liệu chính thức — cột giữa là những gì chạy được mà không cần bạn bấm duyệt. [1]
| Mode | Chạy không cần hỏi | Phù hợp khi |
|---|---|---|
default (Manual) | Chỉ đọc file | Review kỹ từng hành động, việc nhạy cảm |
acceptEdits | Đọc, sửa file, lệnh filesystem thường gặp (mkdir, touch, mv, cp…) | Iterate code, tự review diff sau |
plan | Đọc + lệnh do classifier duyệt (khi có auto) | Khám phá codebase trước khi sửa |
auto | Mọi thứ, qua kiểm tra classifier nền | Task dài, giảm mệt mỏi vì prompt |
dontAsk | Đọc trong thư mục làm việc + tool đã duyệt trước; phần còn lại bị từ chối | CI, script khóa chặt |
bypassPermissions | Mọi thứ | Chỉ container/VM cách ly |
Ba mode đáng nói thêm:
acceptEditstự duyệt cảrm,rmdir,mv,cp,sed— nhưng chỉ trong thư mục làm việc. Ghi ra ngoài phạm vi, ghi vào đường dẫn được bảo vệ, hoặc lệnhrmvào critical path vẫn bị hỏi. [1]autokhông phải “cho phép tất cả”. Classifier chặn sẵn nhóm hành động nguy hiểm:curl | bash, force push, gửi dữ liệu nhạy cảm ra ngoài,git reset --hard,terraform destroy, deploy production hay mở tunnel ra internet. [1]dontAskngược với suy nghĩ thông thường: thay vì hỏi, nó từ chối mọi thứ đáng lẽ phải hỏi. Session không bao giờ chờ input — lý tưởng cho pipeline CI với allowlist định sẵn. [1]

Bạn đang đọc bài thuộc chuyên mục Lập trình của VietnamTutor — nơi mình viết về workflow AI coding thực chiến cho dev và doanh nghiệp. Nếu đang tự vận hành AI theo kiểu vibe coding, hiểu rõ permission Claude Code chính là ranh giới an toàn đầu tiên của bạn.
Nên dùng permission mode nào cho từng việc?
Khi chọn permission Claude Code, nguyên tắc đơn giản là: dùng mức quyền thấp nhất đủ cho công việc, chỉ nâng khi thấy điểm nghẽn cụ thể. Không có mode “tốt nhất” — chỉ có mode phù hợp tình huống.
- Người mới bắt đầu / code quan trọng: Manual. Mỗi hộp thoại là một lần học xem Claude định làm gì — và là lớp chặn cuối trước khi file bị đổi. Nếu session khởi động ở
auto, nhấnShift+Tabmột lần để về Manual. - Iterate nhanh, tự review bằng diff:
acceptEdits. Claude sửa file không hỏi, bạn kiểm tra bằnggit diffhoặc review trong editor sau. Phù hợp khi working tree sạch và bạn quen đọc diff. - Refactor lớn, chưa rõ codebase:
plan. Claude chỉ đọc và phân tích rồi trình bày kế hoạch; bạn duyệt phương án xong mới cho sửa. Cách an toàn nhất để “thám thính” trước khi động dao. - Task dài, nhiều bước lặt vặt:
auto. Classifier vẫn chặn hành động vượt phạm vi yêu cầu hoặc có dấu hiệu nguy hiểm — bạn được giảm prompt mà không mất hẳn lớp soát. [1] - CI, script tự động:
dontAskkèm--allowedToolsliệt kê đúng những gì được chạy, ví dụclaude -p "run the test suite" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read". Lưu ý từ v2.1.302,claude -pvà Agent SDK mặc định ở Manual — call cần duyệt sẽ bị từ chối nếu không có allow rule. [1] - Container hoặc VM cách ly: lúc này mới tính
bypassPermissions. Chi tiết rủi ro ở phần cuối bài.

Một gợi ý từ kinh nghiệm: nếu bạn đang ở auto mà thấy Claude hay bị classifier chặn ở những việc lặp đi lặp lại, đừng nhảy thẳng lên bypass. Hãy thêm allow rule hoặc cấu hình trusted infrastructure trước — vẫn nhanh mà an toàn hơn nhiều. [3]
Cách đổi và đặt permission mode mặc định
Để đổi permission Claude Code trong session đang chạy, nhấn Shift+Tab để vòng qua các mode. Từ auto, lần nhấn đầu chuyển về Manual, rồi vòng tiếp default → acceptEdits → plan. Status bar hiển thị mode đang bật: ⏸ manual mode on, ⏵⏵ accept edits on, ⏸ plan mode on, ⏵⏵ auto mode on. [1]
Để chọn mode ngay khi khởi động, dùng cờ --permission-mode:
claude --permission-mode plan # bắt đầu ở plan mode claude --permission-mode manual # alias của default claude --permission-mode acceptEdits # tự duyệt sửa file
Đặt mặc định cho mọi session bằng permissions.defaultMode trong file settings. Ví dụ muốn máy luôn khởi động ở Manual, thêm vào ~/.claude/settings.json:
{
"permissions": {
"defaultMode": "default"
}
}Hai điểm dễ vấp khi cấu hình:
- Giá trị
autovàbypassPermissionstrong.claude/settings.jsoncủa project không có tác dụng. Đây là chặn cố ý — tránh repo chứa config độc tự động nâng quyền khi bạn clone về. Chỉ~/.claude/settings.json(user) và managed settings của tổ chức đặt được hai giá trị này. [1] - Cloud session bỏ qua
dontAskvàbypassPermissionstừ settings file. Settings check-in trong repo không thể đẩy session trên cloud vào bypass. [1]

Với team hoặc tổ chức, admin có thể ép chế độ qua managed settings: permissions.disableAutoMode đặt "disable" sẽ gỡ auto khỏi vòng chọn, còn permissions.disableBypassPermissionsMode chặn hẳn bypass. Hữu ích khi muốn chuẩn hóa mức an toàn cho cả team. [1]
Tinh chỉnh thêm bằng allow, ask và deny rules
Nếu permission Claude Code là baseline, thì allow, ask và deny rules là lớp tinh chỉnh theo từng tool. Gõ /permissions trong session để xem và sửa toàn bộ rule — thay đổi áp dụng ngay từ tool call kế tiếp. [2]
Ba loại rule được đánh giá theo thứ tự deny → ask → allow: rule deny luôn thắng, rule ask ép hỏi kể cả khi có allow trùng, và allow cho phép tool chạy không cần duyệt. [2]
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)"
],
"ask": [
"Bash(git push *)"
],
"deny": [
"Bash(rm -rf *)"
]
}
}Hai hệ quả quan trọng cần nhớ:
- Deny chặn ở mọi mode, kể cả bypassPermissions. Đây là cách duy nhất để siết tool trong môi trường tự động — rule
Bash(aws *)chặn mọi lệnh AWS dù Claude có quyền gì đi nữa. - Allow rule vô nghĩa trong bypassPermissions — vì bypass đã chạy hết, không cần ai cho phép. Deny một tool trần như
"Bash"thậm chí gỡ tool đó khỏi context của Claude luôn. [2]
Khi bạn chọn Yes, and don't ask again trên hộp thoại, rule được lưu vào .claude/settings.local.json ở gốc repo — áp dụng cho mọi session sau trong repo đó. Riêng duyệt sửa file chỉ sống đến hết session. [2] Với codebase có quy ước riêng, kết hợp rule này với file CLAUDE.md sẽ cho Claude vừa biết giới hạn vừa biết cách làm việc đúng chuẩn dự án.

Những hành động không mode nào tự duyệt
Kể cả ở bypassPermissions, vẫn có vài hành động luôn bị hỏi hoặc bị chặn. Anthropic thiết kế sẵn các “vạch đỏ” không mode nào vượt qua. [1]
- Critical path: các lệnh
rm/rmdirnhắm vào đường dẫn tối quan trọng — ví dụrm -rf /hayrm -rf ~— không allow rule hay hook nào duyệt được; chúng luôn hiện prompt riêng. - Protected path: ghi vào
.gitvà.claudeluôn bị hỏi, trừ bypassPermissions — lớp chống làm hỏng repo và cấu hình của chính Claude. - Tool cần người dùng:
AskUserQuestionvà MCP tool đánh dấurequiresUserInteractionkhông bao giờ tự chạy; trong dontAsk chúng bị từ chối luôn. - Cơ chế an toàn giữa các session: tin nhắn cross-session và peer machine vẫn cần duyệt kể cả trong bypass.
Riêng với bypassPermissions — kích hoạt bằng claude --dangerously-skip-permissions — docs cảnh báo rõ: chỉ dùng trong container, VM hoặc dev container cách ly, không truy cập internet. Mode này không có bảo vệ nào trước prompt injection hay hành động ngoài ý muốn. Claude Code còn từ chối khởi động bypass khi chạy dưới quyền root/sudo trên Linux và macOS. [1]

Nếu mục tiêu chỉ là “bớt bị hỏi”, auto gần như luôn là câu trả lời đúng hơn bypass: vẫn chạy không prompt nhưng classifier giữ lại một lớp soát. Nguyên tắc này cũng nằm trong tư duy bảo mật vibe coding — quyền càng lớn, ranh giới càng phải rõ.
3 lỗi hay mắc khi chọn permission mode
Phần lớn sự cố không đến từ tool mà từ việc chọn sai permission Claude Code cho ngữ cảnh. Ba lỗi mình thấy lặp lại nhiều nhất:
- Ở lại auto cho mọi việc vì “tiện”. Auto là mặc định mới nhưng không phải thánh gióng: classifier chặn theo luật của nó, và những việc nhạy cảm như đụng config production hay dữ liệu khách hàng vẫn đáng được bạn tự duyệt ở Manual. [1]
- Bấm “don’t ask again” mù quáng. Quyền Bash lưu vĩnh viễn vào
.claude/settings.local.jsoncủa repo — một lần duyệt sai lệch có thể “mở cửa” cho mọi session sau. Chỉ lưu rule cho lệnh bạn hiểu rõ nhưnpm test. [2] - Dùng bypassPermissions trên máy thật. Không có sandbox, không có classifier, không có prompt — một prompt injection trong file Claude đọc được là đủ để chạy lệnh độc. Nếu workflow của bạn cần tự động hóa sâu, chạy trong dev container thay vì máy chính. [1]
Thú vị nhỉ: cùng một tính năng, người cẩn thận dùng nó để kiểm soát chặt hơn, người vội dùng nó để mở toang cửa. Permission Claude Code không quyết định độ an toàn — thói quen của bạn mới quyết định.
Nguồn tham khảo
Các nguồn kiểm tra ngày 05/11/2026. Tính năng Claude Code thay đổi nhanh — bạn nên đối chiếu docs chính thức và lệnh /help trong phiên khi đọc lại bài.
- Claude Code Docs — Choose a permission mode
- Claude Code Docs — Configure permissions
- Claude Code Docs — Configure auto mode
- Claude Code Docs — Settings
- Claude Code Docs — Bash sandbox
- Claude Academy — Permission modes
Câu hỏi thường gặp về permission mode trong Claude Code
Claude Code có mấy permission mode?
Sáu mode: default (hiển thị là Manual), acceptEdits, plan, auto, dontAsk và bypassPermissions. Từ v2.1.283, session tương tác khởi động mặc định ở auto; claude -p và Agent SDK khởi động ở Manual.
Auto mode có an toàn không?
Tương đối — không phải “cho phép tất cả”. Một model classifier duyệt hành động nền và chặn sẵn nhóm nguy hiểm như curl | bash, force push, lộ secrets hay terraform destroy. Nó giảm prompt đáng kể nhưng vẫn giữ một lớp soát.
Làm sao tắt hẳn hộp thoại hỏi quyền?
Chỉ bypassPermissions hoặc cờ –dangerously-skip-permissions tắt hẳn prompt — và chỉ nên dùng trong container/VM cách ly. Nếu chỉ muốn bớt bị hỏi, dùng auto mode hoặc thêm allow rule là đủ và an toàn hơn nhiều.
Đổi permission mode trong lúc đang chạy được không?
Được. Nhấn Shift+Tab để vòng qua các mode; status bar hiển thị mode đang bật. Riêng bypassPermissions không nằm trong vòng — phải bật từ lúc khởi động bằng cờ hoặc settings.
Deny rule có chặn được trong bypassPermissions không?
Có. Deny rule áp dụng ở mọi permission mode, kể cả bypassPermissions — đây là cách siết tool trong môi trường tự động. Ngược lại, allow rule không có tác dụng trong bypass vì mọi thứ vốn đã được chạy.
Nên để defaultMode trong settings.json là gì?
Nếu chưa quen permission Claude Code, người mới nên để “default” (Manual); dev quen tool có thể để “acceptEdits” hoặc “auto”. Lưu ý giá trị “auto” và “bypassPermissions” chỉ có tác dụng khi đặt ở ~/.claude/settings.json hoặc managed settings — project settings bị bỏ qua có chủ đích.
Chọn permission Claude Code thực ra chỉ là một câu hỏi: bạn muốn đứng ở đâu trên thang kiểm soát — và câu trả lời thay đổi theo từng việc. Người mới giữ Manual để học, dev quen dùng acceptEdits hoặc auto để đi nhanh, CI khóa bằng dontAsk, và bypass chỉ dành cho container. Nắm được thang này, bạn dùng AI coding vừa nhanh vừa không mất lái.
Bạn đang để Claude Code chạy ở mode nào? Đã bao giờ bị classifier chặn oan chưa? Chia sẻ ở phần bình luận nhé — mình đọc hết.
