Permission mode của Claude Code quyết định hành động nào được chạy mà không cần hỏi bạn. default (hiển thị là Manual) hỏi trước khi sửa file và chạy lệnh shell. acceptEdits cho phép thêm việc sửa file và các lệnh file thông dụng. plan cho Claude đọc và đề xuất kế hoạch nhưng không được sửa. auto để một classifier chạy nền duyệt hành động thay bạn. dontAsk từ chối mọi thứ cần hỏi. bypassPermissions, được bật bằng --dangerously-skip-permissions, bỏ qua gần như mọi prompt và chỉ nên dùng trong container hoặc VM cô lập. Nhấn Shift+Tab để chuyển qua các mode, hoặc khởi động bằng claude --permission-mode <mode>.
Hướng dẫn này dựa trên tài liệu về permission mode của Anthropic. Claude Code thay đổi thường xuyên, nên hãy kiểm tra ở đó cho phiên bản bạn đang dùng.
01Tổng quan sáu mode
default (Manual)Chỉ đọcDuyệt từng thao tác, công việc nhạy cảmacceptEditsĐọc, sửa file và các lệnh filesystem thông dụng như mkdir, touch, mv và cp trong thư mục làm việcChỉnh sửa code liên tục khi bạn đang theo dõiplanĐọc; việc sửa file bị chặn cho đến khi bạn duyệt kế hoạchTìm hiểu trước khi thay đổi bất cứ thứ gìautoMọi thứ, có classifier kiểm tra từng thao tác trướcTác vụ dài, ít prompt hơndontAskĐọc trong các thư mục làm việc và các tool đã được duyệt sẵn; mọi thứ khác đều bị từ chốiCI và script bị khóa chặtbypassPermissionsMọi thứ, trừ một vài ngoại lệChỉ dùng trong container và VM tách biệtdefault là tên dùng trong settings, hook và flag --permission-mode. CLI, các extension IDE và ứng dụng desktop hiển thị nó là Manual, và CLI chấp nhận manual như một alias.
02Cách chuyển mode
Trong terminal, nhấn Shift+Tab. Thứ tự chuyển là default, acceptEdits, plan, rồi đến các mode tùy chọn mà session cho phép. dontAsk không bao giờ xuất hiện trong vòng này; bạn chỉ bật được nó bằng flag.
Để bắt đầu session ở một mode:
claude --permission-mode plan
Để đặt một mode làm mặc định, khai báo nó trong ~/.claude/settings.json:
{
"permissions": {
"defaultMode": "acceptEdits"
}
}
Flag được ưu tiên hơn setting, và setting được ưu tiên hơn mặc định có sẵn. Có một hạn chế cần biết: auto và bypassPermissions không có tác dụng khi đặt trong .claude/settings.json hoặc .claude/settings.local.json của project. Một repository không thể âm thầm đưa bạn vào bypass mode. Hãy đặt hai mode này trong user settings, hoặc truyền flag.
Session mới bắt đầu ở mode nào
Các phiên bản gần đây của Claude Code (v2.1.283 trở lên) khởi động session terminal tương tác và VS Code ở auto khi auto mode khả dụng, trừ khi settings của bạn chỉ định khác. claude -p và các lần chạy Agent SDK bắt đầu ở default. Nếu bạn chưa từng chọn mode mà thắc mắc sao ít thấy prompt, thì đây là lý do.
03Chi tiết từng mode
default (Manual)
Claude có thể đọc file mà không cần hỏi. Sửa file, lệnh shell và truy cập mạng đều hiện prompt. Ở prompt Bash, chọn "Yes, and don't ask again" sẽ lưu một allow rule vào .claude/settings.local.json để lệnh đó không hỏi lại trong repository này. Việc duyệt sửa file có hiệu lực đến hết session.
acceptEdits
Sửa file và các lệnh file đơn giản (mkdir, touch, rm, rmdir, mv, cp, sed) trong thư mục làm việc sẽ chạy mà không có prompt. Các lệnh shell khác vẫn hỏi. Đây là lựa chọn cân bằng khi bạn đang theo dõi diff trực tiếp.
plan
Claude tìm hiểu bằng thao tác đọc và lệnh chỉ đọc, rồi đưa ra kế hoạch. Không có gì trong source bị sửa cho đến khi bạn duyệt. Dùng mode này cho code lạ hoặc thay đổi rủi ro.
auto
Một model riêng xem xét từng thao tác trước khi chạy và chặn những thao tác vượt quá yêu cầu của bạn, nhắm vào hạ tầng mà nó không nhận ra, hoặc có vẻ bị điều khiển bởi nội dung độc hại. Các ask rule tường minh vẫn hiện prompt. Nếu classifier chặn ba thao tác liên tiếp hoặc hai mươi thao tác trong một session, auto mode sẽ tạm dừng và prompt bình thường quay lại. Theo chính lời Anthropic, auto mode "giảm số permission prompt nhưng không đảm bảo an toàn."
dontAsk
Mọi thứ cần prompt đều bị từ chối. Chỉ các allow rule và những thao tác không bao giờ cần duyệt mới được chạy. Mode này dành cho script và CI, nơi không có ai trả lời.
bypassPermissions và --dangerously-skip-permissions
--dangerously-skip-permissions tương đương với --permission-mode bypassPermissions. Prompt bị bỏ qua, kể cả khi ghi vào các đường dẫn được bảo vệ như .git và .claude. Một vài thứ vẫn hiện prompt hoặc bị từ chối ở mọi mode, bao gồm các ask rule tường minh, AskUserQuestion và một số lệnh rm nguy hiểm. Deny rule vẫn có hiệu lực chặn.
Anthropic khuyến nghị chỉ dùng nó trong container, VM hoặc dev container không có internet. Trên Mac và Linux, Claude Code từ chối khởi động ở mode này khi chạy với quyền root hoặc qua sudo bên ngoài sandbox được nhận diện. Nếu bạn chỉ muốn có sẵn bypass chứ không bật nó, --allow-dangerously-skip-permissions sẽ thêm nó vào vòng Shift+Tab mà không chuyển sang.
04Rule nằm trên mode
Mode đặt mức cơ bản. Permission rule trong settings tinh chỉnh thêm:
{
"permissions": {
"allow": ["Bash(npm run test *)"],
"ask": ["Bash(git push *)"],
"deny": ["Read(./.env)"]
}
}
Rule được kiểm tra theo thứ tự deny, rồi ask, rồi allow, và rule khớp đầu tiên sẽ quyết định. Deny rule chặn ở mọi mode, kể cả bypassPermissions. Allow rule không có tác dụng trong bypassPermissions, vì ở đó mọi thứ đã được cho phép. Chạy /permissions để xem mọi rule và file chứa nó.
Hook cũng có thể tham gia. Một PreToolUse hook có thể chặn tool call ở bất kỳ mode nào. Một PermissionRequest hook có thể trả lời prompt thay bạn, nhưng không thể ghi đè deny rule. Hướng dẫn PermissionRequest sẽ chỉ bạn cách làm.
05Chọn mode khi bạn rời khỏi máy
Lý do thường gặp khiến mọi người dùng --dangerously-skip-permissions là muốn để Claude tự chạy mà không phải quay lại thấy session bị kẹt ở một prompt. Đó là vấn đề có thật, nhưng bypass mode giải quyết nó bằng cách loại bỏ hoàn toàn sự giám sát của bạn, ngay trên máy của bạn.
Một vài cách kết hợp an toàn hơn:
- Dùng allow rule cho các lệnh nhàm chán. Thêm các lệnh test, lint và build vào
allow, giữaskchogit pushvà deploy, và ở lạidefaulthoặcacceptEdits. - auto mode cho các tác vụ dài, khi bạn chấp nhận để một classifier tự đánh giá các thao tác thông thường.
- Đưa prompt đến nơi bạn đang ở. Giữ một mode có hỏi, và trả lời vài prompt quan trọng ngay trên điện thoại.
Cách cuối cùng chính là việc Claude Code Notifier làm. Đây là công cụ độc lập, không phải do Anthropic phát triển. Công cụ dòng lệnh của nó, ccn, chạy dưới dạng hook của Claude Code trên Mac, Windows và Linux. Khi Claude Code sắp xin quyền mà bạn không ngồi ở bàn phím, yêu cầu sẽ được gửi đến điện thoại iPhone hoặc Android đã ghép nối, nơi bạn có thể cho phép một lần, cho phép trong cả session, hoặc từ chối. Nó chỉ thấy những prompt mà Claude Code vốn sẽ hiển thị, nên mode và các rule của bạn vẫn quyết định cái gì cần hỏi. Ở mode auto bạn nhận ít yêu cầu hơn; ở bypassPermissions thì không có yêu cầu nào, dù thông báo "Claude đã xong" và các câu hỏi vẫn được gửi đến. Hướng dẫn duyệt qua điện thoại trình bày cách cài đặt, còn Duyệt từ điện thoại có an toàn không? nói về các rủi ro.
06Câu hỏi thường gặp
default và acceptEdits khác nhau thế nào?
default hỏi trước mỗi lần sửa file và mỗi lệnh shell. acceptEdits cho phép sửa file và các lệnh file thông dụng như mkdir, mv và cp trong thư mục làm việc chạy mà không cần hỏi. Các lệnh shell khác vẫn hỏi ở cả hai mode.
--dangerously-skip-permissions có giống bypassPermissions không?
Có. Flag này tương đương với --permission-mode bypassPermissions. Anthropic chỉ khuyến nghị dùng nó trong container hoặc VM cô lập, tốt nhất là không có kết nối internet.
Làm sao để Claude Code thôi xin quyền cho một lệnh?
Chọn "Yes, and don't ask again" ở prompt, hoặc thêm một allow rule như "Bash(npm test)" vào permissions.allow trong settings. Cách này an toàn hơn đổi cả mode.
Settings của một project có thể đưa tôi vào mode bypassPermissions không?
Không. bypassPermissions và auto trong .claude/settings.json hoặc .claude/settings.local.json sẽ không có hiệu lực. Chúng chỉ áp dụng từ user settings, managed settings, hoặc từ flag dòng lệnh.
Hook có còn chạy trong mode bypassPermissions không?
Có. Hook chạy ở mọi mode, và một hook PreToolUse từ chối tool call sẽ chặn nó ngay cả trong bypassPermissions. Hook PermissionRequest chỉ chạy khi có prompt cần trả lời, nên trong bypass mode nó hiếm khi được kích hoạt.