TROISINH
Nâng cao & Tự động hoáHooks — Tự động hoá sự kiện

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 users trong 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_request tương tự WhatsApp Business API
  • Bidirectional flow: Khi CTO reply "Allow" trên Zalo, webhook trigger resume session trong Claude Code với additionalContext chứ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 ReadGlob (đọc file, liệt kê thư mục)
  • Tự động approve Edit nếu file nằm trong src/components/ và không phải file config (.env, config.json)
  • Chỉ route đến Zalo khi thao tác Write tạo file mới ngoài src/ hoặc lệnh Bash chứa sudo, 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":

  1. Claude phân tích và tạo lệnh DELETE FROM transactions WHERE created_at < '2023-01-01'

  2. PermissionRequest hook nhận diện đây là thao tác destructive trên production

  3. 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"

  4. CTO nhận tin nhắn trên điện thoại, kiểm tra context, reply "YES"

  5. Webhook nhận signal, hook return exit code 0, Claude thực thi lệnh xóa

  6. 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 Write hoặc Bash đề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 DownloadsDocuments
  • Route đến người thân (qua Zalo) nếu Claude yêu cầu quyền sửa file trong System hoặc chạy script lạ

So sánh

Tiêu chíPermissionRequest HookPreToolUse HookManual Approval (Mặc định)
Thời điểm kích hoạtKhi Claude cần xin phép người dùngTrước mọi tool callSau khi Claude đề xuất, chờ user bấm Y/N
Khả năng blockCó thể block và redirectBlock cứng (không chạy tool)User tự quyết định có chạy không
Auto-approveCó (dựa trên business logic)Không (chỉ validate)Không (luôn chờ tương tác)
Tích hợp externalTốt (Zalo, Slack, Email)Hạn chế (chỉ local script)Không có
LatencyTrung bình (chờ webhook)ThấpCao (phụ thuộc phản ứng người dùng)
Use case chínhGovernance, approval workflowSecurity guardrail, validationInteractive 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)

Đọc tiếp (Tự động hóa nâng cao)

On this page