Permission mode trong Claude Code: chọn mức quyền an toàn

Nội dung

Bài giải thích 6 permission mode của Claude Code, cách đổi chế độ bằng Shift+Tab và cờ khởi động, cùng nguyên tắc chọn mức quyền an toàn cho dev, CI và container.

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.

Permission mode trong Claude Code với 6 mức quyền từ Manual đến bypassPermissions
6 permission mode của Claude Code xếp theo mức kiểm soát giảm dần.

Tóm tắt nhanh

  • Claude Code có 6 permission mode: default (Manual), acceptEdits, plan, auto, dontAsk và 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-mode hoặc permissions.defaultMode.
  • bypassPermissions chỉ 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]

ModeChạy không cần hỏiPhù hợp khi
default (Manual)Chỉ đọc fileReview 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
autoMọi thứ, qua kiểm tra classifier nềnTask 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ốiCI, script khóa chặt
bypassPermissionsMọi thứChỉ container/VM cách ly

Ba mode đáng nói thêm:

  • acceptEdits tự 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ệnh rm vào critical path vẫn bị hỏi. [1]
  • auto khô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]
  • dontAsk ngượ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]
Thang so sánh 6 permission Claude Code từ Manual tới bypassPermissions
Thang 6 permission mode: càng về phải càng ít hỏi — và càng rủi ro.

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ấn Shift+Tab mộ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ằng git diff hoặ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: dontAsk kèm --allowedTools liệ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 -p và 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.
Sơ đồ quyết định chọn permission Claude Code theo loại công việc
Chọn permission mode theo công việc — không theo thói quen.

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ị auto và bypassPermissions trong .claude/settings.json củ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 dontAsk và bypassPermissions từ settings file. Settings check-in trong repo không thể đẩy session trên cloud vào bypass. [1]
Vòng lặp đổi permission mode bằng phím Shift+Tab trong Claude Code
Shift+Tab vòng qua các permission mode ngay trong session.

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.

Cấu hình allow ask deny rules trong file settings.json của Claude Code
Thứ tự đánh giá rule: deny → ask → allow — deny luôn thắng.

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/rmdir nhắm vào đường dẫn tối quan trọng — ví dụ rm -rf / hay rm -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 .git và .claude luô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: AskUserQuestion và MCP tool đánh dấu requiresUserInteraction khô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]

Cảnh báo bypassPermissions trong Claude Code chỉ dùng trong container cách ly
bypassPermissions: không có lớp chốt nào — chỉ container cách ly.

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.json củ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.

  1. Claude Code Docs — Choose a permission mode
  2. Claude Code Docs — Configure permissions
  3. Claude Code Docs — Configure auto mode
  4. Claude Code Docs — Settings
  5. Claude Code Docs — Bash sandbox
  6. 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.

Tú Anh

Cây bút chính tại VietnamTutor

Bài viết cùng chuyên mục

Checkpoint trong Claude Code: quay lại khi AI sửa hỏng code

Bài giải thích cơ chế checkpoint của Claude Code, cách dùng /rewind để khôi phục code và hội thoại, những trường hợp checkpoint không cứu được,

Sửa code bằng Claude Code: quy trình an toàn cho người mới

Bài hướng dẫn quy trình sửa code bằng Claude Code an toàn cho người mới: cách viết yêu cầu, duyệt quyền, kiểm tra thay đổi, kiểm

CLAUDE.md là gì? Cách ghi quy tắc dự án để Claude Code làm đúng

Bài giải thích CLAUDE.md là gì, file này load từ đâu, nên ghi nội dung nào và cách bảo trì để Claude Code làm đúng quy

7 lệnh Claude Code cần biết: /help, /clear, /compact và cách dùng

Bài hướng dẫn 7 lệnh Claude Code quan trọng nhất cho người mới bắt đầu, kèm ví dụ thực tế và thời điểm nên dùng từng

Claude Code là gì? Hướng dẫn cài đặt và chạy dự án đầu tiên

Bài giải thích Claude Code là gì, cách cài đặt đúng trên macOS, Windows và Linux, cùng quy trình chạy dự án đầu tiên an toàn

Prompt vibe coding: mẫu brief để AI hiểu rõ sản phẩm

Prompt vibe coding hiệu quả bắt đầu từ một brief rõ, không phải một câu lệnh dài. Mẫu này giúp bạn mô tả sản phẩm, giới

WordPress cho developer 2026: những thay đổi cần kiểm tra

Bài viết tóm tắt các thay đổi WordPress cho developer 2026 đáng chú ý trong tháng 5: Gutenberg, REST API, block editor, theme và kiểm thử

@wordpress/build là gì? Tooling mới cho plugin WordPress

@wordpress/build là hướng tooling mới cho plugin WordPress: build nhanh hơn, convention-based, hỗ trợ script modules và tự tạo file PHP registration.

Docker sandbox AI coding agent: cấu hình an toàn

Bài viết hướng dẫn lập trình viên cấu hình Docker sandbox AI coding agent để giảm rủi ro khi agent đọc repo, sửa file và chạy

Vibe coding và nợ kỹ thuật thầm lặng: kiểm soát bằng kỹ thuật ngữ cảnh

Vibe coding tăng tốc nhưng âm thầm tích lũy nợ kỹ thuật. Bài này giải thích vì sao và cách context engineering giúp bạn giữ codebase

Git stash: lưu tạm công việc dở và khôi phục đúng lúc

Git stash cho phép lưu tạm các thay đổi chưa commit để chuyển sang task khác, rồi khôi phục lại đúng lúc — tránh commit dở

Git rebase bị conflict: cách sửa hoặc abort an toàn

Hướng dẫn xử lý git rebase bị conflict: cách kiểm tra file lỗi, sửa conflict marker, tiếp tục rebase, abort an toàn và khi nào không