Hook cho AI agent là các trình xử lý (handler) do bạn tự định nghĩa, chạy tại những điểm then chốt trong vòng đời của agent (như Claude Code hay Cursor) để quan sát, ghi nhật ký, sửa đổi hoặc chặn đứng hành động của AI.
Khác với các chỉ thị prompt mang tính xác suất, hook can thiệp trước khi hành động tác động đến hệ thống thực, thông qua các cơ chế lập trình tất định. Đây là lớp kiểm soát mà bạn lập trình được, đặt ngay giữa quyết định của mô hình và việc thực thi trên máy.

Hook cho AI agent là gì?
Ở góc độ kỹ thuật hệ thống, hook là một lớp kiểm soát nằm giữa quyết định của mô hình ngôn ngữ lớn (Large Language Model, LLM) và hệ điều hành. Khi một sự kiện vòng đời được kích hoạt, agent gửi dữ liệu JSON có cấu trúc qua stdin tới trình xử lý của bạn. Hook xử lý xong rồi trả về kết quả qua stdout hoặc mã thoát (exit code) để điều phối luồng thực thi.
Việc chuẩn hóa các primitive này trên những nền tảng như Claude Code, Cursor, Codex và VS Code Copilot biến hook thành một "control plane" (lớp điều khiển) thực thụ. Bạn thực thi được chính sách bảo mật mà không cần can thiệp vào lõi mô hình hay dựng các proxy mạng phức tạp — vốn thường thất bại trước các giao thức như Model Context Protocol (MCP).
Vì sao cần hook: kiểm soát tất định cho AI bất định
Bạn không thể bảo mật một cơ sở dữ liệu bằng dòng comment "Làm ơn đừng DROP TABLE". Đó chính là nhược điểm của prompt engineering: nó chỉ mang tính xác suất. Dưới áp lực của các chuỗi suy luận phức tạp hay lỗi ảo giác (hallucination), AI hoàn toàn có thể bỏ qua các ranh giới đặt trong prompt.

Hook chuyển tư duy từ "gợi ý" sang "thực thi hệ thống". Khi dùng hook để chặn lệnh rm -rf, bạn đang áp đặt một giới hạn vật lý mà AI không thể vượt qua, bất kể kỹ thuật prompt injection nào. Đây là sự tách biệt cần thiết giữa logic sáng tạo của AI và các quy tắc an toàn cốt lõi của hạ tầng.
Hook hoạt động như thế nào?
Quy trình thực thi hook tuân theo một luồng dữ liệu nghiêm ngặt:

- Sự kiện kích hoạt (event fires): một lifecycle event (ví dụ
PreToolUse) xảy ra. - Lọc qua matcher: agent kiểm tra
matcherđể xác định hook có áp dụng cho tool hiện tại (ví dụBash) hay không. - Thực thi handler: script hoặc API được gọi với payload JSON chứa
session_id,cwdvàtool_input. - Ra quyết định (decision precedence): nếu nhiều hook cùng chạy, kết quả được hợp nhất theo thứ tự ưu tiên
deny>defer>ask>allow.
Cơ chế "fail-open" được áp dụng mặc định: nếu hook lỗi hoặc timeout, agent vẫn tiếp tục chạy để không làm gián đoạn công việc, trừ khi bạn cấu hình ngược lại.
Các loại hook: command, HTTP, MCP, prompt, agent

- Command: chạy shell script cục bộ. Tốc độ cực nhanh (dưới 10ms), hoạt động offline, hợp với các bước kiểm tra regex.
- HTTP: POST dữ liệu tới một API endpoint. Lý tưởng để quản trị tập trung, đẩy log vào SIEM (Splunk, Datadog).
- MCP: gọi công cụ từ một máy chủ MCP đã kết nối để kiểm tra trạng thái hệ thống.
- Prompt: dùng một model nhỏ (như Claude Haiku) để đánh giá đúng/sai cho các tình huống cần logic mờ.
- Agent (thử nghiệm): khởi tạo một subagent để kiểm tra sâu hơn (đọc file, chạy test suite) trước khi cho phép agent chính dừng lượt.
Các sự kiện vòng đời và khả năng hỗ trợ nền tảng
Các nền tảng khác nhau về schema: Claude Code dùng PascalCase, còn Cursor dùng camelCase. Bảng dưới đối chiếu khả năng hỗ trợ những sự kiện chính:

| Sự kiện chính | Claude Code | Cursor | Codex | Ứng dụng chính |
|---|---|---|---|---|
| UserPromptSubmit | Có | beforeSubmitPrompt | Có | Context injection / che giấu PII |
| PreToolUse | Có | preToolUse | Có | Chặn lệnh nguy hiểm (hard gate) |
| PostToolUse | Có | postToolUse | Có | Auto-formatter / ghi log kiểm toán |
| Stop | Có | stop | Có | Kiểm thử QA / xác nhận hoàn thành |
| SessionStart | Có | sessionStart | Có | Nạp biến môi trường / git status |
| ConfigChange | Có | Không | Không | Giám sát thay đổi file settings/skills |
Claude Code có bề mặt sự kiện rộng nhất, bao gồm cả WorktreeCreate và Setup cho các luồng CI/CD.
Cấu hình hook và quản trị tập trung
Hook có thể được định nghĩa tại ~/.claude/settings.json (global) hoặc .claude/settings.json (project). Trong môi trường doanh nghiệp, rủi ro lớn nhất là "shadow AI" (nhân viên dùng AI ngoài tầm kiểm soát của tổ chức) khi lập trình viên tự ý đặt "disableAllHooks": true.
Để xử lý, kỹ sư platform nên triển khai qua managed policy của MDM (Jamf, Intune) nhằm ghi đè quyền này, đảm bảo mọi phiên làm việc của AI đều nằm trong các rào chắn bảo mật của tổ chức.
Những mẫu ứng dụng thực tế
Security gate: chặn lệnh nguy hiểm
Dùng một script Bash để quét câu lệnh shell. Chú ý cách truy xuất tool_input cho chuẩn:
#!/bin/bash
# .claude/hooks/guard-rm.sh
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
if [[ "$COMMAND" == *"rm -rf"* ]]; then
echo "Blocked: Destructive command detected." >&2
exit 2 # Bắt buộc exit code 2 để chặn cứng
fi
exit 0Auto-formatter: hook PostToolUse
Tự động chạy Prettier sau khi AI chỉnh sửa file để giữ codebase nhất quán:
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "file=$(jq -r '.tool_input.file_path') && npx prettier --write $file"
}]
}
]Bảo mật, giới hạn và best practice
- Exit code 2 là bắt buộc: trong hệ thống quản trị AI,
exit 2là "hard block".exit 1chỉ được coi là cảnh báo và agent vẫn có thể tiếp tục. - Quản lý timeout: mặc định là 10 phút cho command, nhưng
UserPromptSubmitchỉ có 30 giây. Script của bạn phải tối ưu để tránh treo agent. - Ưu tiên tất định trước: luôn dùng regex hoặc blocklist trước khi gọi prompt hook để giảm độ trễ và chi phí.
- Tránh đệ quy: khi dùng agent hook, hãy đảm bảo subagent không kích hoạt lại chính hook đó, tạo thành vòng lặp vô hạn.
- Xây lớp adapter: do schema giữa Claude Code và Cursor không đồng nhất, hãy viết script hook như một lớp adapter xử lý được cả hai loại đầu vào.
Các câu hỏi thường gặp
Hook có làm chậm agent không? Script cục bộ tốn dưới 10ms. Hook qua mạng hoặc gọi LLM tốn 500ms đến 2 giây. Dùng async: true cho các tác vụ ghi log để không chặn luồng thực thi.
AI có tự tắt được hook không? Không. Hook chạy ngoài ngữ cảnh của model — trừ khi AI có quyền sửa file settings và bạn không đặt hook chặn việc sửa chính file đó.
Tôi có thể dùng hook để sửa nội dung AI viết không? Có. Dùng trường updatedInput trong PreToolUse hoặc additionalContext trong PostToolUse để điều hướng lại hành vi của agent.
Tài liệu tham khảo
- Agent Hooks Are Claude Code's Most Powerful Feature — Medium
- Intercept and Control Agent Behavior with Hooks — Claude Docs
- Automate Actions with Hooks — Claude Docs
- AI Agent Hooks: The Interface for Governing AI Agents — Speakeasy
- Claude Code Hooks — Cobus Greyling
- Completely Understand Hooks in Less Than 20 Minutes — Burke Holland (YouTube)
- Hooks in Claude Code — Anthropic (YouTube)