TROISINH
Nền tảngKhái niệm cốt lõi

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:

  1. 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
  2. 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
  3. 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
  4. 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
  5. dontAsk: Bỏ qua hỏi han, nhưng vẫn ghi log — chỉ dùng khi bạn tin tưởng tuyệt đối
  6. 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 độ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:

  1. Read (Auto-approve): Đọc package.jsonsrc/pages/Payment.tsx để kiểm tra thư viện hiện có — không thay đổi gì nên được chạy ngay
  2. 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
  3. 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
  4. 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
  5. 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 default khi làm việc với codebase khách hàng lần đầu — nhìn thấy từng lệnh git commit Claude đề 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_case sang camelCase trong 50 file liên tục. Safety classifier cho phép các lệnh Edit an toàn nhưng sẽ chặn ngay nếu Claude cố gắng chạy rm -rf hoặc truy cập file .env chứa API key production.
  • Team Lead startup tại HCM: Dùng plan cho 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 backup

Khi 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 SystemTerminal truyền thống (sudo)Chatbot thông thường (ChatGPT)
Đơn vị kiểm soátTừng tool call riêng lẻ (Read, Edit, Bash...)Một lần sudo, quyền vĩnh viễn cho cả sessionKhông có execution, chỉ trả về text
Phổ quyền6 cấp độ từ ask → auto → bypassBinary: có/không quyền rootKhông áp dụng
Phân biệt Read/WritePhân biệt rõ: Read có thể auto, Edit thường phải hỏiKhông phân biệt, sudo xong chạy gì cũng đượcKhông đọc/ghi file local
Auto-remediationSafety classifier tự chặn lệnh nguy hiểmKhông có, dựa vào người dùng tự biếtKhông có
Context awarenessHiểu đây là thao tác đọc hay xóaChỉ kiểm tra UIDKhô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)

Đọc tiếp (Level 1: Sử dụng thực chiến)

On this page