Claude Code cứ hỏi xin quyền? Khắc phục mà không cần --dangerously-skip-permissions

Phê duyệt npm test lần thứ bốn mươi chỉ là phiền nhiễu. Claude Code có đủ mọi thứ để tắt các lời nhắc nhàm chán và giữ lại những lời nhắc nguy hiểm. Chỉ có điều chúng nằm rải rác trong ba tệp và sáu chế độ.

Tác giả: Aslan, nhóm Pet Island · Cập nhật 26/10/2026 · 5 phút đọc

TRẢ LỜI NGẮN

Đưa các lệnh bạn luôn phê duyệt vào permissions.allow (ví dụ Bash(npm run *)), các lệnh luôn phải dừng lại vào ask hoặc deny, và chọn chế độ quyền phù hợp với công việc: acceptEdits khi chỉnh sửa nhiều, auto cho việc thường ngày, plan khi chỉ đọc. Quy tắc được kiểm tra theo thứ tự deny → ask → allow, nên deny không bao giờ bị ghi đè. Dùng /permissions để xem mỗi quy tắc đến từ đâu. Chỉ dùng --dangerously-skip-permissions cho container dùng một lần.

Vì sao Claude Code hỏi nhiều đến vậy

Ở chế độ mặc định (gắn nhãn Manual trong CLI), Claude Code hiện lời nhắc vào lần đầu dùng mỗi công cụ, và hỏi lại với mọi lệnh shell chưa được cho phép chạy. Lời nhắc là lúc bạn có thể chặn một lệnh rm sai hay một lệnh git push vô tình, nên đáng để giữ lại. Vấn đề là nó cũng xuất hiện cho hàng trăm việc vô hại mà agent làm trong một phiên.

Ba yếu tố quyết định bạn có thấy lời nhắc hay không: các quy tắc trong tệp cài đặt, chế độ quyền bạn đang dùng, và những câu trả lời bạn đã đưa trước đó bằng “Yes, and don’t ask again”. Muốn bớt phiền, bạn cần điều chỉnh cả ba.

Claude Code v2.1.283 trở lên khởi động các phiên terminal tương tác và VS Code ở chế độ auto, trên mọi gói và nhà cung cấp. Ở chế độ auto, một bộ phân loại chạy nền sẽ đối chiếu lệnh và yêu cầu mạng với những gì bạn đã yêu cầu, thay vì hiện lời nhắc cho các thao tác thường ngày. Nếu bạn vẫn thấy lời nhắc cho mọi thứ, hãy xem thanh trạng thái: “⏸ manual mode on” nghĩa là bạn đang ở chế độ mặc định.

Quy tắc allow, ask và deny

Quy tắc nằm dưới permissions trong một tệp cài đặt. Ví dụ này lấy nguyên từ tài liệu tham khảo cài đặt của Anthropic:

~/.claude/settings.jsonSao chép
{
"permissions": {
"allow": ["Bash(npm run *)"],
"ask": ["Bash(git push *)"],
"deny": ["Read(./.env)"],
"defaultMode": "acceptEdits"
}
}
  • allow: chạy mà không hỏi.
  • ask: luôn hỏi, kể cả ở những chế độ mà bình thường sẽ tự phê duyệt.
  • deny: không bao giờ chạy.

Thứ tự là phần quan trọng nhất: deny, rồi ask, rồi allow. Quy tắc khớp đầu tiên sẽ thắng, và mức độ cụ thể không làm thay đổi thứ tự. Quy tắc allow không thể tạo ngoại lệ cho quy tắc deny, và nếu một công cụ bị từ chối ở bất kỳ cấp nào, không cấp nào khác có thể cho phép nó. Quy tắc do chính Claude Code thực thi, không phải do mô hình, nên viết “never push” trong CLAUDE.md không có tác dụng như một quy tắc deny.

Cách viết quy tắc

Quy tắcKhớp với
Bash(npm run *)npm run build, npm run test --watch, nhưng không khớp npm install
Bash(git log *)Chỉ git log …. So sánh với Bash(git *), cho phép mọi lệnh git.
Bash(ls:*)Giống Bash(ls *): :* là một cách viết khác của ký tự đại diện ở cuối
Read(./.env)Đọc tệp đó. Quy tắc Read và Edit dùng mẫu gitignore
Edit(//Users/alice/notes/**)Một đường dẫn tuyệt đối. Một dấu / đứng đầu là tương đối so với tệp cài đặt, nên đường dẫn tuyệt đối cần //
WebFetch(domain:example.com)Chỉ example.com. Thêm WebFetch(domain:*.example.com) cho các tên miền phụ
mcp__github__*Mọi công cụ của máy chủ MCP github. Quy tắc có dấu ngoặc đơn sau mcp__ sẽ bị bỏ qua

Trên Windows, quy tắc PowerShell có cùng dạng với quy tắc Bash.

Nên dùng tệp cài đặt nào

Phạm viTệpDùng cho
Người dùng~/.claude/settings.json (Windows: %USERPROFILE%\.claude\settings.json)Thói quen riêng của bạn, trong mọi dự án
Dự án, dùng chung.claude/settings.jsonQuy tắc cả nhóm nên có (hãy commit tệp này)
Dự án, cục bộ.claude/settings.local.jsonQuy tắc cá nhân của bạn cho một repo (không commit)
Được quản lýmanaged-settings.json và các nguồn được quản lý khácChính sách công ty; không gì có thể ghi đè

Thứ tự ưu tiên, cao nhất trước: được quản lý, dòng lệnh, dự án cục bộ, dự án dùng chung, người dùng. Các khóa dạng danh sách như permissions.allow được gộp lại giữa các tệp, không bị thay thế. Có hai chi tiết dễ khiến người dùng mắc lỗi:

  • Tệp cài đặt là JSON nghiêm ngặt: một chú thích // hay dấu phẩy thừa ở cuối là lỗi cú pháp, và toàn bộ tệp sẽ bị bỏ qua.
  • Quy tắc allow trong tệp dự án dùng chung chỉ có hiệu lực sau khi từng thành viên trong nhóm tin cậy thư mục đó. Quy tắc deny và ask có hiệu lực ngay.

Hầu hết thay đổi áp dụng cho phiên đang chạy mà không cần khởi động lại, kể cả permissions và hooks. Để xem những gì thực sự được nạp, hãy chạy /status (dòng Setting sources) hoặc /permissions, lệnh này liệt kê mọi quy tắc và tệp chứa nó.

“Yes, and don’t ask again” thực sự lưu gì

Trả lời lời nhắc bằng “don’t ask again” sẽ ghi một quy tắc giúp bạn vào .claude/settings.local.json ở thư mục gốc của repository git. Quy tắc đó tồn tại bao lâu tùy vào công cụ:

Công cụĐược ghi nhớ
Lệnh BashVĩnh viễn, theo từng repository và lệnh
Chỉnh sửa tệpĐến khi phiên kết thúc
WebFetchVĩnh viễn, theo từng repository và tên miền

Vì vậy nếu Claude cứ hỏi xin chỉnh sửa tệp mỗi khi mở phiên mới, đó là do thiết kế: phê duyệt chỉnh sửa tệp chỉ có hiệu lực trong từng phiên. Thay vào đó, hãy dùng chế độ acceptEdits hoặc quy tắc allow Edit(...). Còn nếu một lệnh vẫn hỏi kể cả sau khi chọn “don’t ask again”, hãy tìm quy tắc ask trong tệp dự án hoặc tệp được quản lý. Quy tắc allow trong tệp cục bộ của bạn không được ưu tiên hơn nó.

Các chế độ quyền, và khi nào dùng chế độ nào

Chế độTác dụngPhù hợp cho
default (Manual)Hiện lời nhắc khi dùng mỗi công cụ lần đầuRepo lạ, công việc rủi ro
acceptEditsChấp nhận chỉnh sửa tệp mà không hỏiRefactor dài mà bạn sẽ xem lại trong git
planĐọc và lập kế hoạch, không thay đổi gìKhám phá codebase, thiết kế một thay đổi
autoKhông có lời nhắc thường ngày; một bộ phân loại kiểm tra lệnh và yêu cầu mạng trướcCông việc hằng ngày
dontAskKhông hiện lời nhắcScript và tự động hóa
bypassPermissionsBỏ qua lời nhắc, kể cả việc ghi vào .git và .claudeChỉ dành cho container hoặc VM cách ly

Nhấn Shift+Tab để chuyển vòng giữa các chế độ. Từ auto, lần nhấn đầu tiên chuyển sang default, sau đó default → acceptEdits → plan. Đặt chế độ khởi đầu bằng permissions.defaultMode; lưu ý rằng auto và bypassPermissions chỉ có hiệu lực từ cài đặt người dùng hoặc cài đặt được quản lý, không có hiệu lực từ tệp dự án.

Một số thứ luôn hiện lời nhắc ở mọi chế độ, kể cả bypass: các quy tắc ask tường minh, câu hỏi Claude đặt cho bạn, và rm trên các đường dẫn quan trọng, cùng một số trường hợp khác. Quản trị viên có thể tắt các chế độ rủi ro bằng cách đặt permissions.disableBypassPermissionsMode hoặc permissions.disableAutoMode thành "disable".

Về --dangerously-skip-permissions

--dangerously-skip-permissions tương đương với --permission-mode bypassPermissions. Tài liệu của Anthropic nói thẳng: chỉ dùng nó trong môi trường cách ly như container, VM hoặc dev container không có truy cập internet. Nó từ chối chạy dưới quyền root trên Linux và macOS, và khi bạn chấp nhận cảnh báo, nó đặt skipDangerousModePermissionPrompt trong cài đặt người dùng của bạn.

Nếu điều bạn thực sự muốn là “đừng hỏi về những thứ nhàm chán nữa”, chế độ auto cộng thêm vài quy tắc allow là đủ, mà không phải từ bỏ những lời nhắc quan trọng.

Sandbox: ít lời nhắc hơn mà vẫn có lưới an toàn

Claude Code có thể chạy lệnh shell trong sandbox. Tính năng này tắt theo mặc định; bật bằng /sandbox hoặc sandbox.enabled: true. Một chế độ sandbox tự động phê duyệt các lệnh chạy trong sandbox, chế độ còn lại vẫn hỏi. Sandbox chỉ bao gồm lệnh shell: công cụ tệp, máy chủ MCP và hook chạy bên ngoài nó.

Sandbox chạy trên macOS, Linux và WSL2. Trên Windows gốc, sandbox không chạy, và các lệnh chạy không có sandbox. Đó là thêm một lý do để giữ danh sách ask ngắn gọn ở đó.

Một thiết lập hiệu quả

Đây là điểm khởi đầu hợp lý cho một dự án JavaScript. Hãy điều chỉnh các lệnh cho phù hợp với stack của bạn:

~/.claude/settings.jsonSao chép
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(npx tsc *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
],
"ask": [
"Bash(git push *)",
"Bash(npm publish *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)"
]
}
}
  1. Bắt đầu với một danh sách cho phép gồm các lệnh chỉ đọc và lệnh kiểm thử.
  2. Đưa mọi thứ rời khỏi máy của bạn (push, publish, deploy) vào ask.
  3. Từ chối hoàn toàn quyền truy cập secret.
  4. Làm việc ở chế độ auto hoặc acceptEdits, và chuyển sang chế độ plan khi đang khám phá.
  5. Cứ vài ngày, mở .claude/settings.local.json và dọn bớt các quy tắc mà “don’t ask again” đã thêm vào.

Khi những lời nhắc còn lại xuất hiện sai chỗ

Sau khi điều chỉnh, bạn chỉ nên được hỏi về những việc đáng để quyết định. Vấn đề còn lại là câu hỏi xuất hiện ở đâu: trong một tab terminal nằm sau trình duyệt, nơi agent có thể chờ hai mươi phút trước khi bạn nhận ra.

Pet Island đưa những câu hỏi đó lên một island nhỏ ở phía trên màn hình. Khi Claude Code cần quyền, yêu cầu sẽ hiện ở đó kèm lệnh hoặc diff, và bạn cho phép, từ chối hoặc luôn cho phép mà không cần chuyển cửa sổ. Câu hỏi và kế hoạch của Claude Code cũng xử lý được từ island, và nếu island đã đóng, Claude Code chỉ đơn giản quay lại hỏi trong terminal.

Câu hỏi thường gặp

Làm sao để Claude Code không hỏi xin quyền cho mọi lệnh?

Thêm các lệnh bạn tin cậy vào permissions.allow trong ~/.claude/settings.json, ví dụ "Bash(npm run *)", và dùng chế độ auto hoặc acceptEdits. Giữ các lệnh rủi ro trong permissions.ask để chúng vẫn dừng lại.

Vì sao Claude Code lại hỏi về chỉnh sửa tệp sau khi tôi đã chọn don’t ask again?

Phê duyệt chỉnh sửa tệp chỉ có hiệu lực đến khi phiên kết thúc. Dùng chế độ acceptEdits hoặc quy tắc allow Edit(...) nếu bạn muốn chỉnh sửa được phê duyệt qua nhiều phiên.

Quy tắc allow có thể ghi đè quy tắc deny không?

Không. Quy tắc được kiểm tra theo thứ tự deny, rồi ask, rồi allow, và quy tắc khớp đầu tiên sẽ thắng. Công cụ bị từ chối ở bất kỳ cấp nào thì không thể được cho phép ở nơi khác.

--dangerously-skip-permissions có an toàn không?

Anthropic chỉ khuyến nghị dùng nó trong môi trường cách ly như container hoặc VM không có truy cập internet. Nó cũng bỏ qua lời nhắc khi ghi vào .git và .claude.

“Yes, and don’t ask again” lưu quy tắc ở đâu?

Trong .claude/settings.local.json ở thư mục gốc của repository git.

Sandbox của Claude Code có chạy trên Windows không?

Không chạy trên Windows gốc; ở đó các lệnh chạy không có sandbox. Sandbox chạy trên macOS, Linux và WSL2.

Nguồn

Mọi thiết lập và hành vi trên trang này đã được đối chiếu với các trang sau vào 26 tháng 10 năm 2026. Agent thay đổi rất nhanh; nếu có điều gì không còn khớp, trang chính thức là chuẩn.

ĐỌC TIẾP

Trả lời mọi agent ngay từ phía trên màn hình.

Windows và Mac · Miễn phí 7 ngày, sau đó $8.99 trả một lần · $1 từ mỗi lượt mua dùng để nuôi động vật đường phố

Dùng thử Pet Island miễn phí