Tools và Permission: Cách Claude Code 'ra tay' với 6 cấp độ bảo vệ
Hiểu cách Claude Code 'ra tay' qua hệ thống Tools (Read, Bash, Edit...) và cơ chế Permission 6 cấp độ bảo vệ máy tính của bạn.
Định nghĩa
Hệ thống Tools và Permission trong Claude Code là cơ chế "cầu nối an toàn" cho phép AI tương tác với máy tính của bạn — từ đọc file đến chạy lệnh terminal — bằng cách chia nhỏ mọi thao tác thành các hàm chuẩn hóa (tools) và áp dụng 6 mức độ kiểm soát (permission modes) để đảm bảo mỗi hành động đều được bạn phê duyệt hoặc được một bộ lọc an toàn tự động kiểm tra trước khi thực thi.
Giải thích chi tiết
Agent Tools: Cánh tay nối dài của AI
Thay vì chỉ "nói chuyện" như ChatGPT thông thường, Claude Code được trang bị bộ Tools (công cụ) — những hàm chức năng chuyên biệt biến AI từ trợ lý ảo thành "thực tập sinh có thể đụng chạm vào máy tính". Mỗi lần Claude muốn làm gì đó, nó không tự viết code rồi chạy lén, mà phải "xin phép" bằng cách gọi một tool cụ thể:
- Read: Đọc nội dung file — an toàn, thường được tự động cho phép
- Bash: Chạy lệnh terminal — tiềm ẩn rủi ro, cần kiểm soát chặt
- Edit/Write: Sửa hoặc tạo file — thay đổi trạng thái hệ thống
- MCP Tools: Mở rộng khả năng qua giao thức Model Context Protocol để kết nối PostgreSQL, GitHub, Slack...
Đây chính là nền tảng của Agent Loop: Claude đọc file (Read) → suy nghĩ → quyết định dùng tool tiếp theo (Bash hoặc Edit) → lặp lại cho đến khi xong việc. Không có tool, Claude chỉ là chatbot; có tool nhưng không có permission, Claude sẽ trở thành rủi ro bảo mật.
Permission Architecture: Từ kiểm soát tuyệt đối đến tự chủ
Claude Code không chỉ đơn giản là "có quyền" hay "không có quyền". Hệ thống cung cấp 6 chế độ Permission tạo thành một phổ từ bảo thủ đến tự do:
- default: Dừng lại hỏi ý kiến bạn trước mọi tool call — an toàn nhất cho người mới
- acceptEdits: Tự động đọc file, nhưng hỏi trước khi sửa — cân bằng giữa tốc độ và kiểm soát
- plan: Claude phải viết kế hoạch chi tiết trước, bạn duyệt, sau đó Claude tự chạy các bước đã duyệt — phù hợp task phức tạp
- auto: Dùng Safety Classifier (mô hình AI nhỏ chạy song song) để tự quyết định cho phép hay chặn mỗi hành động mà không làm gián đoạn bạn — dành cho refactoring lớn
- dontAsk: Bỏ qua hỏi han, nhưng vẫn ghi log — chỉ dùng khi bạn tin tưởng tuyệt đối
- bypassPermissions: Tắt hoàn toàn cơ chế bảo vệ — chỉ dùng cho CI/CD pipeline không có người
Mỗi cấp độ là một sự đánh đổi giữa tốc độ và rủi ro. Người dùng mới nên ở default, còn senior dev có thể dùng auto để tránh "approval fatigue" (mệt mỏi vì phải bấm Yes liên tục).
Safety Classifier: Người gác cổng thứ hai
Khi bật Auto Mode (auto), Claude không tự ý chạy lung tung. Thay vào đó, một mô hình phụ (thường là Haiku hoặc classifier chuyên dụng) đóng vai trò "bảo vệ proxy" đánh giá mỗi tool call theo 3 mức:
- Xanh: Thao tác chỉ đọc (Read, Grep) → Tự động cho phép
- Vàng: Thao tác nguy hiểm (Xóa file, Gửi request ra ngoài) → Chặn hoặc đưa lên người
- Xám: Không chắc chắn → Luôn hỏi người để đề phòng
Đây là sự chuyển giao chi phí: thay vì bạn mất 5-10 giây đọc và approve từng lệnh, bạn trả ~200-500ms latency cho AI nhỏ kiểm tra, đổi lại là flow không bị gián đoạn. Như quản lý giao việc cho thực tập sinh siêng năng nhưng hay quên: bạn không cần đứng cạnh chỉ từng bước, chỉ cần hệ thống cảnh báo khi nó sắp làm điều dại dột.
Allowlist vs Denylist: Triết lý bảo mật
Claude Code áp dụng nguyên tắc default-deny (mặc định từ chối) thay vì default-allow:
- Denylist (danh sách cấm): Cố gắng liệt kê mọi thứ nguy hiểm (
rm -rf,curl | bash). Thất bại vì có vô hạn cách biến thể lệnh nguy hiểm mà bạn không thể liệt kê hết (zero-day). - Allowlist (danh sách cho phép): Chỉ cho phép các mẫu lệnh an toàn đã biết (
ls,grep,find). Mọi thứ khác tự động bị chặn hoặc đưa về người.
Kết hợp với Denylist Precedence — những lệnh cực kỳ nguy hiểm như rm, wget, eval luôn yêu cầu approve người dùng bất kể chế độ permission nào — tạo thành "cầu chì" vật lý ngăn AI vô tình xóa nhầm production database.
Ví dụ thực tế
Demo một vòng agent loop với app giao hàng
Bạn yêu cầu: "Thêm tính năng thanh toán VietQR vào app đặt xe công nghệ kiểu Grab đang viết dở". Claude Code thực hiện:
- Read (Auto-approve): Đọc
package.jsonvàsrc/pages/Payment.tsxđể kiểm tra thư viện hiện có — không thay đổi gì nên được chạy ngay - Bash (Dừng đợi approve): Chạy
npm install qrcode.react— tool này thay đổi hệ thống nên Claude dừng lại hiển thị lệnh, bạn bấm Yes - Plan (Dừng đợi approve): Ở mode
plan, Claude trình bày: "Tôi sẽ sửa 3 file: (1) Thêm QRComponent vào Payment.tsx, (2) Tạo hook useVietQR, (3) Thêm API key vào .env" — bạn duyệt kế hoạch trước khi nó chạm vào code - Edit (Tự động sau khi duyệt): Sau khi bạn approve plan, các lệnh Edit được tự động thực thi không cần hỏi thêm
- Bash (Dừng đợi approve): Chạy
npm run test:paymentđể test — lại dừng vì có thể lỗi ảnh hưởng hệ thống
Chuỗi này minh họa cách permission linh hoạt: đọc thì thoải mái, cài đặt và test thì hỏi, sửa code thì tùy mode.
So sánh 6 permission modes trong thực tế
- Freelancer mới nhận dự án Shopee: Dùng
defaultkhi làm việc với codebase khách hàng lần đầu — nhìn thấy từng lệnhgit commitClaude đề xuất để học cách AI suy nghĩ, tránh xóa nhầm file config đơn hàng. - Senior refactor hệ thống ngân hàng: Dùng
autođể đổi tên biến từsnake_casesangcamelCasetrong 50 file liên tục. Safety classifier cho phép các lệnhEditan toàn nhưng sẽ chặn ngay nếu Claude cố gắng chạyrm -rfhoặc truy cập file.envchứa API key production. - Team Lead startup tại HCM: Dùng
plancho tính năng rút tiền về ví Momo. Claude phân tích xong trình bày kế hoạch sửa database schema, Lead review thấy thiếu bước backup thì bảo bổ sung trước khi chạy — tránh mất tiền thật của người dùng.
Viết CLAUDE.md để tối ưu permission
Bạn tạo file .claude/CLAUDE.md cho dự án thương mại điện tử:
# Quy tắc dự án Node.js này
- Luôn dùng TypeScript strict mode
- Không bao giờ dùng `any`
- Khi dùng tool Write tạo API mới, phải có validate input bằng Zod
- Không được tự ý chạy migration database mà chưa backupKhi Claude ở mode acceptEdits hoặc auto, nó tự áp dụng những quy tắc này khi dùng tool Write để tạo file mới. Điều này giảm thiểu việc Claude phải hỏi lại "Có nên dùng TypeScript không?" — permission không chỉ là cho phép/chặn, mà là ủy quyền có nguyên tắc.
Ứng dụng
Developer mới bắt đầu
Dùng default mode để hiểu cách Claude "nghĩ". Mỗi lần Claude đề xuất chạy npm install hoặc sửa file README.md, bạn có cơ hội xem xét và học cách AI phân tích codebase. Đây là cách an toàn nhất để làm quen với agentic coding mà không sợ xóa nhầm file hệ thống của máy tính cá nhân.
Senior Developer & DevOps
Dùng auto mode khi cần chạy batch processing — ví dụ cập nhật 100 file từ cú pháp cũ sang mới trên server staging. Safety classifier đảm nhiệm việc kiểm tra từng lệnh có phải là "xóa file hệ thống" hay không, cho phép bạn delegate task dài mà không bị "approval fatigue" sau 20 lần bấm Yes.
Team Lead & Tech Manager
Thiết lập plan mode cho toàn team. Buộc Claude phải viết technical spec trước khi chạm vào code core của sản phẩm. Điều này đảm bảo architectural decisions không bị AI tự ý thay đổi, đồng thời tận dụng tốc độ execution sau khi plan được duyệt — cân bằng giữa governance và velocity.
Non-coder (Product Manager, Designer)
Dùng acceptEdits để thoải mái yêu cầu Claude "làm đẹp lại file CSV đơn hàng Shopee" hoặc "nén ảnh banner cho đủ dưới 500KB". Claude tự đọc file (không hỏi) nhưng vẫn chờ bạn xác nhận trước khi ghi đè, tránh mất dữ liệu gốc do hiểu nhầm yêu cầu.
So sánh
| Tiêu chí | Claude Code Permission System | Terminal truyền thống (sudo) | Chatbot thông thường (ChatGPT) |
|---|---|---|---|
| Đơn vị kiểm soát | Từng tool call riêng lẻ (Read, Edit, Bash...) | Một lần sudo, quyền vĩnh viễn cho cả session | Không có execution, chỉ trả về text |
| Phổ quyền | 6 cấp độ từ ask → auto → bypass | Binary: có/không quyền root | Không áp dụng |
| Phân biệt Read/Write | Phân biệt rõ: Read có thể auto, Edit thường phải hỏi | Không phân biệt, sudo xong chạy gì cũng được | Không đọc/ghi file local |
| Auto-remediation | Safety classifier tự chặn lệnh nguy hiểm | Không có, dựa vào người dùng tự biết | Không có |
| Context awareness | Hiểu đây là thao tác đọc hay xóa | Chỉ kiểm tra UID | Không thực thi nên không cần |
Kết luận: Hệ thống Permission của Claude Code là sự tiến hóa từ "cổng kiểm soát duy nhất" (sudo) thành "hệ thống phân quyền liên tục" (continuous authorization), nơi mỗi hành động nhỏ đều được đánh giá rủi ro riêng biệt thay vì một lần cấp quyền cho toàn bộ session.
Bài viết liên quan
Cùng cụm (Core Concepts)
- Vòng lặp Agent: Claude Code hoạt động thế nào? — Hiểu sâu về chu kỳ Read → Think → Act mà Tools và Permission gắn vào
- Context Window 1 triệu token: Hiểu và tận dụng — Tại sao Claude cần đọc file liên tục (dùng tool Read) thay vì nhớ hết
- CLAUDE.md: Hướng dẫn viết project instructions hiệu quả — Cách viết quy tắc để Claude tự áp dụng khi dùng tools
- Hệ thống Settings: Global, Project, Local — Nơi cấu hình mặc định cho các chế độ permission
- 6 chế độ Permission: default, acceptEdits, plan, auto, dontAsk, bypassPermissions — Deep dive chi tiết từng mode và khi nào dùng
Đọc tiếp (Level 1: Sử dụng thực chiến)
- Daily Workflow với Slash Commands — Áp dụng permission modes vào workflow hàng ngày với
/plan,/commit - Memory System: CLAUDE.md và context persistence — Làm thế nào Claude nhớ các quy tắc permission giữa các session
- Auto Mode: Để Claude tự quyết định quyền — Kỹ thuật sâu về Safety Classifier và cách tối ưu cho refactoring lớn
Agent Loop là gì? Cách Claude Code tự động đọc file, chạy lệnh và sửa lỗi
Khám phá agent loop - vòng lặp Observe-Decide-Act giúp Claude Code tự động đọc file, chạy test và sửa lỗi. Hiểu sâu cách AI agent khác biệt so với Copilot
Context Window 200K token: Tại sao Claude hay 'quên' và cách xử lý
Context window 200K token là 'trí nhớ ngắn hạn' của Claude Code. Hiểu cơ chế compaction và phân biệt với CLAUDE.md giúp bạn làm chủ codebase lớn mà không lo AI 'quên' lệnh.