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

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 prettier hoặc black ngay 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 = allow

Exit 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 ~/Documents hoặ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ểmClaude HooksGit HooksCron JobsIDE Extensions
Thời điểm kích hoạtReal-time trong lúc AI làm việcTrước/sau commitTheo lịch định kỳKhi tương tác UI
Ngữ cảnhBiết được AI đang làm gì (tool name, input)Chỉ thấy git diffKhông có ngữ cảnh AIChỉ thấy file local
Khả năng chặnCó thể block lệnh nguy hiểm trước khi chạyChỉ block commitKhông block đượcCó thể block
Tích hợp AINative — nhận JSON từ ClaudeKhôngKhôngGián tiếp qua API
Ví dụ use caseFormat ngay sau khi AI edit fileChạy test trước khi pushBackup đị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)

Đọc tiếp

On this page