PermissionRequest Hook: Tự động phê duyệt hoặc gửi Zalo xin phép
Tự động phê duyệt lệnh an toàn hoặc gửi Zalo/Slack xin phép CTO khi Claude Code chạy thao tác nguy hiểm. Cân bằng tự động hóa và kiểm soát cho team Việt Nam.
Định nghĩa
PermissionRequest Hook là event handler trong Claude Code kích hoạt ngay khi AI xin phép thực thi thao tác nhạy cảm (ghi file, chạy bash, gọi MCP tool). Hook cho phép bạn tự động đồng ý dựa trên quy tắc lập trình sẵn, hoặc chuyển yêu cầu đến Zalo/WhatsApp để sếp hoặc đồng đội xác nhận trước khi chạy.
Giải thích chi tiết
Vị trí trong kiến trúc 4 loại Hook
Trong hệ thống 25 events của Claude Code, PermissionRequest đóng vai trò cửa ngõ bảo mật cuối cùng trước khi tác động thực sự đến hệ thống:
- PreToolUse: Chạy trước mọi tool call để validate cú pháp và chặn lệnh nguy hiểm tuyệt đối (vd:
rm -rf /) - PostToolUse: Xử lý sau khi tool chạy xong (format code, ghi log)
- Session: Quản lý vòng đời session (start/stop)
- PermissionRequest: Kích hoạt khi Claude cần xin phép người dùng — thường là thao tác destructive hoặc tác động production
Điểm khác biệt then chốt: PreToolUse không biết liệu người dùng cuối cùng có đồng ý cho chạy lệnh đó không. PermissionRequest hook bắt được sự kiện "Claude đang chờ approve" và có thể tự động giải quyết hoặc redirect request đi nơi khác.
Cơ chế đánh giá độ tin cậy và định tuyến
Hook nhận JSON payload qua stdin chứa: tool_name (Bash/Write/Edit), command hoặc file_path, risk_level (đánh giá bởi Claude), và session_context (lịch sử hội thoại).
Từ đây, hook thực hiện 2 nhánh logic:
1. Nhánh tự động phê duyệt
Nếu lệnh nằm trong whitelist (vd: ls, cat, grep trong thư mục src/, hoặc file thuộc pattern *.test.js), hook return exit code 0 ngay lập tức. Claude thực thi mà không làm gián đoạn flow của bạn.
2. Nhánh chuyển tiếp ngoài
Nếu phát hiện từ khóa nguy hiểm (DROP TABLE, DELETE FROM, docker rm, kubectl delete), hook sẽ:
- Gửi template message qua Zalo API hoặc Slack webhook
- Context đầy đủ: "Claude muốn xóa database
userstrong project X, lệnh:DROP TABLE users;" - Cung cấp interactive buttons (Approve/Deny) hoặc yêu cầu reply "YES"
- Block session (return exit code 2) cho đến khi nhận callback từ webhook
Tích hợp Zalo và MCP
Để route đến Zalo (phổ biến hơn WhatsApp ở Việt Nam), bạn kết hợp PermissionRequest Hook với MCP server hoặc webhook trực tiếp:
- Transport: HTTP webhook tới Zalo OA (Official Account) API hoặc qua MCP Slack nếu team dùng Slack
- Template: Dùng
call_permission_requesttương tự WhatsApp Business API - Bidirectional flow: Khi CTO reply "Allow" trên Zalo, webhook trigger resume session trong Claude Code với
additionalContextchứa approval token
Ví dụ thực tế
Auto-approve workflow hàng ngày
Bạn là developer làm việc với repo đã tin cậy. Cấu hình PermissionRequest hook để:
- Tự động approve mọi lệnh
ReadvàGlob(đọc file, liệt kê thư mục) - Tự động approve
Editnếu file nằm trongsrc/components/và không phải file config (.env,config.json) - Chỉ route đến Zalo khi thao tác
Writetạo file mới ngoàisrc/hoặc lệnhBashchứasudo,docker,kubectl
Kết quả: 90% thao tác hàng ngày chạy mượt trong Auto Mode không cần bấm "Yes" liên tục, nhưng vẫn có người "gác cổng" cho thao tác nguy hiểm.
Route lệnh xóa production đến Zalo của CTO
Trong doanh nghiệp fintech Việt Nam (ví dụ: team phát triển ví điện tử Momo hoặc ngân hàng số), developer dùng Claude Code maintain legacy system. Khi developer yêu cầu "xóa bảng transactions cũ để giải phóng dung lượng":
-
Claude phân tích và tạo lệnh
DELETE FROM transactions WHERE created_at < '2023-01-01' -
PermissionRequest hook nhận diện đây là thao tác destructive trên production
-
Hook gửi tin nhắn Zalo đến CTO với nội dung:
"🚨 Yêu cầu phê duyệt từ Claude Code
Người dùng: @hiep
Lệnh: DELETE FROM transactions...
DB: production_users
Trả lời YES để cho phép, NO để từ chối" -
CTO nhận tin nhắn trên điện thoại, kiểm tra context, reply "YES"
-
Webhook nhận signal, hook return exit code 0, Claude thực thi lệnh xóa
-
Nếu sau 5 phút không phản hồi, hook tự động từ chối và log lại sự kiện
Phân quyền theo thời gian và ngữ cảnh
Startup áp dụng "chính sách linh hoạt có kiểm soát":
- 9AM-6PM: Auto-approve các lệnh trong scope project (giả định team đang active)
- 6PM-9AM: Mọi lệnh
WritehoặcBashđều route đến Slack channel #on-call để engineer trực ca xác nhận - Weekend: Chặn hoàn toàn các lệnh tác động đến production database, chỉ cho phép read-only operations
Ứng dụng
Developer cá nhân (Freelancer/Indie Hacker)
Giảm "approval fatigue" khi làm việc với repo của chính mình. Bạn để Claude tự do refactor, di chuyển file, chạy test không cần bấm "Y" liên tục, nhưng vẫn được bảo vệ khi vô tình chạm vào file quan trọng như private key trong ~/.ssh/ hoặc file .env chứa API key của khách hàng.
Team Lead và Tech Lead
Thiết lập governance layer cho team: mọi thao tác nguy hiểm (migration database, deploy production, xóa branch) đều phải qua approval từ senior engineer qua Zalo hoặc Slack. Tạo audit trail tự nhiên (lịch sử tin nhắn) và đảm bảo không có junior developer (hoặc Claude trong Auto Mode) tự ý thay đổi hệ thống lúc nửa đêm.
Doanh nghiệp và Compliance Team
Đáp ứng yêu cầu SOC 2, ISO 27001 hoặc Thông tư 09/2020/TT-NHNN về "separation of duties" và "privileged access management". PermissionRequest Hook đóng vai trò như Policy Enforcement Point — đảm bảo AI agent không bao giờ thực thi thao tác privileged mà không có human-in-the-loop, kể cả khi Auto Mode được bật.
Non-coder sử dụng Claude Code
Người không biết code dùng Claude để quản lý file, phân tích dữ liệu CSV. PermissionRequest hook cấu hình để:
- Auto-approve thao tác trong thư mục
DownloadsvàDocuments - Route đến người thân (qua Zalo) nếu Claude yêu cầu quyền sửa file trong
Systemhoặc chạy script lạ
So sánh
| Tiêu chí | PermissionRequest Hook | PreToolUse Hook | Manual Approval (Mặc định) |
|---|---|---|---|
| Thời điểm kích hoạt | Khi Claude cần xin phép người dùng | Trước mọi tool call | Sau khi Claude đề xuất, chờ user bấm Y/N |
| Khả năng block | Có thể block và redirect | Block cứng (không chạy tool) | User tự quyết định có chạy không |
| Auto-approve | Có (dựa trên business logic) | Không (chỉ validate) | Không (luôn chờ tương tác) |
| Tích hợp external | Tốt (Zalo, Slack, Email) | Hạn chế (chỉ local script) | Không có |
| Latency | Trung bình (chờ webhook) | Thấp | Cao (phụ thuộc phản ứng người dùng) |
| Use case chính | Governance, approval workflow | Security guardrail, validation | Interactive development |
Kết luận: Nếu PreToolUse là "cảnh sát giao thông" chặn xe nguy hiểm trước khi vào đường, PermissionRequest Hook là "hệ thống đèn đỏ thông minh" — tự động đổi xanh cho xe ưu tiên (whitelist) hoặc gọi điện cho cảnh sát trưởng hỏi ý kiến khi xe tải nặng muốn qua cầu (destructive operations).
Bài viết liên quan
Cùng cụm (Hooks)
- Hooks là gì? 25 events và 4 loại hook — Tổng quan kiến trúc event-driven của Claude Code
- PreToolUse Hook: Chặn lệnh nguy hiểm trước khi chạy — Bảo vệ tầng trước PermissionRequest
- PostToolUse Hook: Auto-format, log, notify sau mỗi action — Xử lý sau khi đã được phép chạy
- Session Hooks: SessionStart, Stop, StopFailure — Quản lý vòng đời session
- Prompt Hook và Agent Hook: LLM-powered automation — Tự động hóa phức tạp hơn
- 8 hook thực tế: format-code, security-scan, context-tracker... — Ví dụ triển khai cụ thể
Đọc tiếp (Tự động hóa nâng cao)
- Tự động Code Review với /loop và GitHub Actions — Áp dụng hook vào CI/CD pipeline
- Auto Mode: Để Claude tự quyết định quyền, không cần approve — Hiểu sâu về cơ chế phê duyệt tự động
- MCP Slack: Đọc tin nhắn, post updates, tự động hoá — Hướng dẫn tích hợp Slack cho approval workflow
Session Hooks: Điều khiển vòng đời session - Khởi tạo, Ép hoàn thành và Ghi log lỗi
Tự động nạp context khi mở project, ép Claude chạy test trước khi nghỉ, và ghi log lỗi API với 3 Session Hooks: Start, Stop, StopFailure.
Prompt Hook và Agent Hook: Chêm lời nhắc hay Gọi chuyên gia?
Phân biệt hai loại hook quan trọng: Prompt Hook tự động chêm hướng dẫn và Agent Hook chuyển việc cho subagent chuyên biệt. Tối ưu workflow Claude Code đúng cách.