Hooks trong Claude Code: Tự động hóa 25 sự kiện để format code và gửi thông báo Zalo
Tự động hóa workflow với Claude Hooks: 25 sự kiện và 4 loại hook cốt lõi giúp format code, chặn lệnh nguy hiểm và gửi thông báo Zalo mà không cần ngồi chờ
Định nghĩa
Hooks trong Claude Code là hệ thống tự động kích hoạt script khi AI thực hiện hành động cụ thể. Thay vì phải ngồi canh chừng Claude từng bước, bạn thiết lập một lần: "Khi ghi file, hãy format code ngay", "Khi chạy lệnh xóa, hãy chặn lại", hoặc "Khi session kết thúc, gửi báo cáo qua Zalo". Với 25 sự kiện và 4 loại hook cốt lõi (PreToolUse, PostToolUse, Session, PermissionRequest), bạn biến Claude từ chatbot thụ động thành senior developer có "phản xạ" tự động.
Giải thích chi tiết
Hook = "Khi X xảy ra, làm Y"
Góc nhìn cốt lõi của Hooks là tự động hóa không cần chờ đợi. Giống như cảnh báo tốc độ trên cao tốc phản ứng ngay khi bạn vượt ngưỡng, Hooks phản ứng ngay khi Claude thực hiện hành động.
Hooks hoạt động như middleware trong web framework: chúng chặn hoặc bổ sung hành vi vào các sự kiện tự nhiên của agent loop. Mỗi hook là một executable script (Python, Bash, Node.js) nhận thông tin về sự kiện qua stdin và trả về exit code để điều khiển luồng.
4 loại hook cốt lõi
PreToolUse — "Kiểm soát trước khi chạy" Hook này kích hoạt ngay trước khi Claude thực thi bất kỳ tool nào (Bash, Write, Edit). Bạn dùng để:
- Chặn lệnh nguy hiểm (
rm -rf /,DROP TABLE production) bằng cách return exit code 2 - Kiểm tra pattern bảo mật (API keys lộ ra, SQL injection) trước khi code chạm disk
- Validate input của tool trước khi AI thực thi
PostToolUse — "Dọn dẹp sau khi chạy" Kích hoạt sau khi tool hoàn thành, dù thành công hay thất bại. Dùng để:
- Auto-format code với
prettierhoặcblackngay sau khi Claude sửa file - Gửi log audit về Telegram hoặc Slack về các thay đổi
- Trigger test suite tự động sau mỗi lần lưu file
Session Hooks — "Quản lý vòng đời"
Gồm SessionStart, Stop, và StopFailure:
- SessionStart: Khởi tạo context, load thêm thông tin dự án, hoặc set environment variables khi bắt đầu session
- Stop: Kiểm tra tính hoàn thiện của task trước khi Claude báo "xong" (ví dụ: đảm bảo đã chạy test)
- StopFailure: Xử lý khi session kết thúc do lỗi API (dùng để cleanup hoặc log lỗi)
PermissionRequest — "Xử lý quyền và routing" Quản lý các yêu cầu cần sự chấp thuận. Thay vì hỏi user trong terminal, hook này có thể:
- Tự động approve các lệnh an toàn đã whitelist
- Route yêu cầu đến Zalo, Telegram, hoặc email cho manager approve
- Ghi log quyết định vào hệ thống compliance
25 events trong hệ sinh thái Claude
Claude Code hỗ trợ 25 sự kiện khác nhau, bao gồm các sự kiện về:
- Tools:
Write,Edit,Bash,Read,Grep(trước và sau khi chạy) - Session lifecycle: Start, Stop, StopFailure, Resume
- Agent delegation: Subagent spawn, complete
- File operations: File create, modify, delete
- Git operations: Pre-commit, post-merge
- Permission: Request, approve, deny
Mỗi event mang theo metadata qua stdin dạng JSON (ví dụ: {"tool_name": "Write", "file_path": "app.ts"}), cho phép script của bạn đưa ra quyết định có điều kiện.
Ví dụ thực tế
Auto-format code sau mỗi lần edit với PostToolUse
Team dev tại một startup fintech ở TP.HCM muốn đảm bảo code luôn sạch đẹp nhưng không muốn nhắc nhở Claude liên tục? Tạo file ~/.claude/hooks/posttooluse/format.py:
#!/usr/bin/env python3
import json, sys, subprocess
event = json.load(sys.stdin)
if event["tool_name"] in ["Write", "Edit"]:
file_path = event["tool_input"]["file_path"]
if file_path.endswith(".ts") or file_path.endswith(".js"):
subprocess.run(["npx", "prettier", "--write", file_path], check=False)Kết quả: Mỗi khi Claude sửa file TypeScript, Prettier chạy tự động trong chưa đầy 1 giây, code được format ngay lập tức trước khi bạn nhìn thấy. Khác với git hooks (chạy sau khi commit), điều này xảy ra ngay trong lúc coding — như có một senior dev ngồi cạnh sửa lại code ngay khi bạn vừa gõ xong.
Chặn lệnh nguy hiểm với PreToolUse
Trong team có junior developer dùng Claude Code để maintain hệ thống thanh toán VietQR, bạn muốn tránh tai nạn rm -rf hoặc DROP TABLE users? Tạo ~/.claude/hooks/pretooluse/safety.sh:
#!/bin/bash
read -r input
if echo "$input" | grep -qE '(rm\s+-rf\s+/|DROP\s+TABLE|curl.*\|.*sh|sudo\s+rm)'; then
echo "🚫 Blocked dangerous command. Vui lòng review thủ công." >&2
exit 2 # Exit 2 = block execution
fi
exit 0 # Exit 0 = allowExit code 2 đặc biệt quan trọng — nó báo hiệu cho Claude "dừng lại ngay lập tức", khác với exit code 1 (chỉ là lỗi thông thường). Điều này giống như cần gạt an toàn trên súng: khi kéo, súng không thể bắn dù có bóp cò.
Gửi thông báo Zalo khi session kết thúc
Team lead muốn biết khi nào các thành viên hoàn thành task refactor hệ thống Shopee affiliate? Dùng Session Stop hook kết hợp webhook Zalo OA:
#!/usr/bin/env python3
import json, sys, requests
event = json.load(sys.stdin)
session_id = event["session_id"]
project = event["project_path"].split("/")[-1]
# Gửi message đến Zalo khi session stop
requests.post("https://openapi.zalo.me/v2.0/oa/message",
headers={"access_token": "YOUR_ZALO_OA_TOKEN"},
json={
"recipient": {"user_id": "TEAM_LEAD_USER_ID"},
"message": {"text": f"✅ Claude session {session_id} đã kết thúc tại dự án [project]"}
})Ứng dụng
Developer cá nhân và Freelancer
- Zero-friction formatting: Code luôn đẹp mà không cần nhớ chạy linter — đặc biệt hữu ích khi làm việc với nhiều client Việt Nam yêu cầu coding style khác nhau
- Context tracking: Hook tự động ghi nhớ file nào đã được edit để tránh "lost in context" sau 20 phút làm việc — vấn đề thường gặp khi xử lý codebase legacy của doanh nghiệp Việt Nam
- Personal safety net: Chặn các lệnh có thể xóa nhầm dữ liệu cá nhân như
rm -rf ~/Documentshoặc xóa nhầm file MoMo, VietQR transaction logs
Team Lead và DevOps tại công ty Việt Nam
- Security scanning: Chạy Semgrep hoặc Bandit tự động trên code vừa được viết, block ngay nếu phát hiện lỗ hổng — tuân thủ tiêu chuẩn bảo mật ngân hàng NHNN (State Bank of Vietnam)
- Audit trail: Log toàn bộ hành động của AI vào hệ thống compliance (SOC 2, ISO 27001) — cần thiết cho các công ty fintech như MoMo, ZaloPay, VietQR
- Git semantic: Tự động generate conventional commit message dựa trên diff thực tế, giúp team offshore tại Việt Nam làm việc async hiệu quả hơn
Doanh nghiệp (Enterprise)
- Compliance gate: PermissionRequest hook đảm bảo mọi thay đổi database khách hàng đều được manager approve qua workflow đã thiết lập — tuân thủ GDPR và PDPD (Personal Data Protection Decree) của Việt Nam
- Integration với CI/CD: Session hooks trigger pipeline test tự động khi Claude báo "task xong", tích hợp với Jenkins hoặc GitLab CI thường dùng tại các công ty tech Việt Nam
- Cost control: Hook giám sát số lượng token tiêu thụ và cảnh báo khi vượt ngân sách dự án — quan trọng cho các agency Việt Nam dùng API Anthropic với ngân sách hạn chế
So sánh
| Đặc điểm | Claude Hooks | Git Hooks | Cron Jobs | IDE Extensions |
|---|---|---|---|---|
| Thời điểm kích hoạt | Real-time trong lúc AI làm việc | Trước/sau commit | Theo lịch định kỳ | Khi tương tác UI |
| Ngữ cảnh | Biết được AI đang làm gì (tool name, input) | Chỉ thấy git diff | Không có ngữ cảnh AI | Chỉ thấy file local |
| Khả năng chặn | Có thể block lệnh nguy hiểm trước khi chạy | Chỉ block commit | Không block được | Có thể block |
| Tích hợp AI | Native — nhận JSON từ Claude | Không | Không | Gián tiếp qua API |
| Ví dụ use case | Format ngay sau khi AI edit file | Chạy test trước khi push | Backup định kỳ | Highlight lỗi syntax |
Kết luận: Git hooks phù hợp cho version control, còn Claude Hooks phù hợp cho agentic workflow — nơi bạn cần tự động hóa ngay trong lúc AI đang suy nghĩ và hành động, không chờ đến khi commit. Nếu git hooks giống như kiểm tra an ninh ở cửa ra vào chung cư, thì Claude Hooks giống như camera AI trong từng căn hộ — phản ứng ngay khi có hành động bất thường, không đợi đến khi ra cửa.
Bài viết liên quan
Cùng cụm (Hooks)
- PreToolUse Hook: Chặn lệnh nguy hiểm trước khi chạy — Chi tiết cách chặn command nguy hiểm bằng exit code 2 và các bypass vector cần lưu ý khi làm việc với hệ thống production
- PostToolUse Hook: Auto-format, log, notify sau mỗi action — Hướng dẫn setup Prettier tự động và cách xử lý race condition khi chạy nhiều hook song song
- Session Hooks: SessionStart, Stop, StopFailure — Quản lý vòng đời session, ngăn Claude "báo xong" khi task chưa hoàn thành thực sự
- PermissionRequest Hook: Tự động approve hoặc route đến WhatsApp — Xây dựng approval workflow cho doanh nghiệp, tích hợp Slack, Zalo và các kênh external
- Prompt Hook và Agent Hook: LLM-powered automation — Các hook nâng cao sử dụng LLM để phân tích và đưa ra quyết định động
- 8 hook thực tế: format-code, security-scan, context-tracker... — Tuyển tập 8 ví dụ production-ready từ test-runner đến dependency check cho developer Việt Nam
Đọc tiếp
- Tự động Code Review với /loop và GitHub Actions — Kết hợp hooks vào CI/CD pipeline để review PR tự động cho team dev Việt Nam
- Tích hợp Claude Code vào CI/CD pipeline — Dùng Headless Mode (
claude -p) với hooks cho automation server-side trên VPS Việt Nam - Skills là gì? Từ slash command đến auto-invoke — Tìm hiểu cách Skills và Hooks bổ trợ nhau trong hệ sinh thái Claude
- MCP là gì? Model Context Protocol giải thích đơn giản — Giao thức kết nối Claude với external tools để mở rộng khả năng trigger hook ra bên ngoài như Zalo, Telegram, hoặc hệ thống nội bộ doanh nghiệp