8 mẫu Hook Claude Code thực chiến: Auto-format, chặn SQLi, tối ưu context
8 mẫu hook Claude Code từ format code tự động đến security scan và context tracking — giải pháp automation thực chiến cho developer Việt Nam.
Định nghĩa
Hook là "phản xạ có điều kiện" của Claude Code — đoạn script tự động kích hoạt khi AI định thực hiện hành động nào đó. Thay vì ngồi canh Claude từng bước, bạn gắn 8 mẫu hook dưới đây để biến AI từ "trợ lý chat" thành "kỹ sư DevOps tự động": code vừa được sửa xong đã tự động format đẹp, lệnh nguy hiểm bị chặn trước khi chạm vào hệ thống, và context window luôn được dọn dẹp gọn gàng để Claude không bị "ngộp" thở.
Giải thích chi tiết
Format-code Hook: Prettier chạy ngầm sau mỗi Edit
Dùng PostToolUse hook bắt sự kiện Write hoặc Edit. Ngay khi Claude ghi file xong, hook tự động chạy Prettier (cho dự án React/Vue), Black (Python), hay gofmt (Go) để chuẩn hóa code. Kết quả là diff git chỉ hiển thị logic thay đổi thực sự, không bị "noise" từ khoảng trắng hay dấu chấm phẩy lệch lạc. Cộng đồng developer Việt Nam báo cáo giảm 40-60% lượt comment "sửa format" trong code review trên GitHub, đặc biệt hữu ích khi làm việc với đội ngũ outsource đông người.
Hook nhận file_path từ stdin dưới dạng JSON, chạy formatter, và trả kết quả về stdout. Nếu formatter thay đổi file, Claude sẽ nhìn thấy thay đổi này ở turn tiếp theo, tạo feedback loop tự nhiên mà không cần bạn chạy tay.
Security-scan Hook: Chặn SQLi trước khi lưu
PreToolUse hook chạy Semgrep hoặc Bandit ngay trước khi tool Write hoặc Bash thực thi. Pattern như rm -rf /, DROP TABLE, hay hardcoded API key (kiểu như để lộ key Momo hay VietQR trong code) sẽ bị chặn tại chỗ (exit code 2) thay vì chờ đến CI/CD. Đây là "shift-left security" — phát hiện lỗi khi code còn chưa chạm disk, tránh tình huống "merge xong mới phát hiện lỗi bảo mật cơ bản".
Hook nhận tool_input qua stdin và kiểm tra nội dung bằng regex hoặc semantic analysis. Nếu phát hiện mẫu nguy hiểm, hook trả exit code 2 để veto hành động, đồng thời in ra stderr giải thích lý do chặn để Claude và bạn cùng thấy.
Context-tracker Hook: Giữ context window sạch sẽ
Dựa trên nghiên cứu gần đây về context window management (FocusVul, 2025), hook này tính điểm relevance cho file trong context window theo dependency graph. Khi token count vượt ngưỡng (~150k), hook tự động loại bỏ file không liên quan đến task hiện tại, chỉ giữ lại code ảnh hưởng trực tiếp. Phương pháp này cải thiện 164% độ chính xác trong phát hiện lỗ hổng so với việc giữ nguyên toàn bộ context râu ria.
Hook hoạt động bằng cách phân tích import, require, hoặc AST references để xác định file nào còn "sống" trong luồng công việc hiện tại, tránh tình trạng "context pollution" từ các file đã explore từ 20 turn trước nhưng không còn liên quan.
Test-runner Hook: Chạy test tự động sau khi lưu
PostToolUse hook phân tích git diff để xác định file nào bị ảnh hưởng, sau đó trigger test liên quan (affected tests) qua Jest/Pytest. Kết quả test được đưa ngược vào context window cho Claude đọc và tự fix nếu fail — tạo vòng lặp "code → test → fix" không cần người can thiệp, giống như TDD (Test-Driven Development) nhưng tự động.
Ví dụ: Khi Claude sửa paymentService.js cho tính năng VietQR, hook tự động chạy npm test paymentService.test.js. Nếu test fail, Claude nhìn thấy stack trace và tự động sửa lỗi trong turn tiếp theo, bạn chỉ việc uống cà phê chờ kết quả.
Git-semantic Hook: Commit message thông minh
Hook parse git diff --cached và lịch sử commit gần nhất để tự động sinh conventional commit message (feat:, fix:, refactor:) theo chuẩn team. Đồng thời inject quy tắc repo (ví dụ: "dùng uuidv7 thay vì auto-increment" hay "tuân thủ PCI-DSS cho module thanh toán") vào system prompt để Claude tuân thủ trong các turn tiếp theo.
Hook này thường gắn với sự kiện Stop hoặc SessionEnd, đảm bảo trước khi kết thúc session, Claude đã commit với message mô tả chính xác thay đổi và không để lại "WIP" hay "fix bug" chung chung trong lịch sử git.
Dependency-check Hook: Kiểm tra thư viện lỗi thời
PreToolUse hook quét package.json hoặc requirements.txt trước khi Claude đề xuất thay đổi version. So sánh với OSV database (Open Source Vulnerabilities), block ngay nếu phát hiện CVE đã biết. Tránh tình trạng AI vô tình bump thư viện chứa lỗ hổng nghiêm trọng — kiểu như để lại "quả bom nổ chậm" cho hệ thống production.
Khi Claude định thêm "lodash": "^4.17.0" vào dependencies, hook kiểm tra và báo "Version này chứa CVE-2021-23337, hãy dùng 4.17.21+", ngăn lỗi bảo mật ngay từ lúc code được viết, trước khi lọt vào danh sách dependencies của dự án fintech.
Observability-hook: Ghi log mọi hành động
Hook gửi structured log (JSON Lines) của mọi tool invocation, token usage, và file operation ra hệ thống telemetry như OpenTelemetry, Datadog hoặc Langfuse. Cho phép team lead ở Hà Nội hay TP.HCM phân tích hiệu quả token, phát hiện bottleneck trong workflow Claude Code mà không cần đứng sau lưng nhìn màn hình developer.
Hook này thường chạy ở chế độ async: true để không block agent loop, gửi dữ liệu qua HTTP POST đến collector. Dữ liệu bao gồm: session_id, tool_name, duration_ms, input_tokens, output_tokens, giúp tính toán chi phí thực tế của dự án và cảnh báo khi ai đó dùng bypassPermissions quá nhiều lần trong ngày.
Validation-gate Hook: Kiểm tra schema trước khi apply
Post-process output của Claude qua JSON Schema hoặc DSL (Domain Specific Language) trước khi ghi vào disk. Ví dụ: đảm bảo mọi React component phải có PropTypes, hoặc API response phải match Zod schema. Nếu fail, hook trả về lỗi cho Claude tự sửa thay vì để lỗi lan ra production.
Hook nhận nội dung file qua stdin, validate bằng schema định nghĩa sẵn trong .claude/validation-schemas/. Nếu không pass, hook trả exit code 1 kèm stderr mô tả lỗi validation, Claude sẽ thấy và tự động sửa lại code cho đúng schema mà không cần bạn chỉ tay từng dòng.
Ví dụ thực tế
Startup fintech tại Quận 1: Format + Security tự động
Một startup thanh toán tại TP.HCM (tích hợp Momo, VietQR, ZaloPay) cấu hình Claude Code với 2 hook cơ bản:
{
"hooks": {
"PostToolUse": [
{
"command`: `npx prettier --write [file_path]`,
`match": "Edit|Write",
"filePattern": "\\.(js|ts|tsx)$"
}
],
"PreToolUse": [
{
"command`: `semgrep --config=auto --error [file_path]`,
`match": "Write",
"exitCodes": [0, 2]
}
]
}
}Kết quả sau 1 tháng: Zero "nitpick" comment về formatting trong pull request, và phát hiện 3 trường hợp AI định hardcoded test key vào code trước khi commit. Developer không cần chạy lệnh thủ công, tránh mất thời gian switch context giữa việc nghĩ logic nghiệp vụ thanh toán và nhớ chạy linter.
Dự án legacy ngân hàng: Context-tracker cho 50 nghìn file
Dự án core banking với 50.000 file Java (từ năm 2010), khi làm việc với module Payment, context-tracker hook tự động:
- Tính dependency graph của
PaymentModulebằng cách parseimport - Giữ lại các file liên quan (
PaymentService,TransactionRepository) - Loại bỏ các file cũ đã load từ 20 turn trước (
CustomerControllerkhông liên quan đến task sửa VietQR)
Giúp Claude không bị "ngộp" context và hallucinate do nhìn thấy code không liên quan từ các module khác. Thời gian response giảm từ 15 giây xuống 5 giây do context window nhẹ hơn 60%, critical cho hệ thống yêu cầu độ chính xác cao như ngân hàng.
Team enterprise 20 người: Full pipeline với observability
Team sản phẩm tại Hà Nội dùng Claude Code Enterprise triển khai observability-hook gửi log mỗi hành động vào Datadog:
- Theo dõi token consumption theo dự án: phát hiện dự án A tiêu tốn gấp 3 lần dự án B do context window bị pollute bởi file legacy không liên quan
- Audit trail cho compliance ISO 27001 và PCI-DSS: biết chính xác ai đã sửa file nào, khi nào, qua Claude, hỗ trợ rollback khi cần
- Cảnh báo real-time khi ai đó dùng
bypassPermissionsquá nhiều lần trong ngày, tránh rủi ro bảo mật nội bộ
Ứng dụng
Developer cá nhân (Freelancer/Indie hacker) Dùng format-code + security-scan để code sạch và an toàn ngay từ đầu, không cần nhớ chạy linter. Giảm thiểu lỗi bảo mật cơ bản khi ship nhanh MVP cho khách hàng trên Upwork hoặc ITviec, tăng uy tín cá nhân.
Team lead/Technical lead Dùng observability-hook + validation-gate để đảm bảo team tuân thủ coding standard (conventional commits, PropTypes) và có data để optimize chi phí AI. Kiểm soát quality mà không cần review từng dòng code thủ công, giải phóng thời gian cho architecture design.
Doanh nghiệp lớn (Fintech, Bank, Telco) Triển khai full 8-hook stack để tự động hóa CI/CD nội bộ. Kết hợp PreToolUse (security) và PostToolUse (test) để tạo pipeline "zero-trust" — mọi code do AI sinh ra đều phải qua kiểm định tự động trước khi đến tay human reviewer, giảm thời gian review từ 2 ngày xuống 2 giờ, đạt chuẩn bảo mật ngân hàng.
So sánh
| Tiêu chí | Hook (Claude Code) | CI/CD truyền thống | Review thủ công |
|---|---|---|---|
| Thời điểm chạy | Real-time (trước/sau khi AI hành động) | Sau commit/push | Khi người rảnh |
| Độ trễ | dưới 3 giây (local execution) | 5-15 phút (queue + build) | Vài giờ đến vài ngày |
| Tính tự động | 100% tự động, không cần người | Cần trigger commit | Phụ thuộc người |
| Chi phí token | Thấp (chỉ chạy khi cần) | Không dùng AI | Không dùng AI |
| Khả năng sửa | Tự động fix lỗi (loop) | Chỉ báo lỗi | Gợi ý sửa |
Hook là "bộ phanh an toàn" và "máy đánh bóng" chạy song song với AI — shift-left testing đúng nghĩa, trong khi CI/CD là "kiểm định cuối dây chuyền" (shift-right). Dùng hook để bắt lỗi sớm và liên tục, dùng CI/CD cho test tổng thể và deployment. Review thủ công chỉ nên dành cho logic nghiệp vụ phức tạp, không phải để bắt lỗi format hay security cơ bản mà máy làm tốt hơn người.
Bài viết liên quan
Cùng cụm — Hiểu sâu hơn về từng loại hook:
- Hooks là gì? 25 events và 4 loại hook — Tổng quan kiến trúc hook system và 4 loại chính
- PreToolUse Hook: Chặn lệnh nguy hiểm — Chi tiết cách chặn lệnh nguy hiểm trước khi chạy
- PostToolUse Hook: Auto-format, log, notify — Xử lý sau hành động AI
- Session Hooks — Quản lý vòng đời session với SessionStart và Stop
Đọc tiếp — Tự động hóa chuyên sâu và tối ưu:
- Tự động Code Review với /loop và GitHub Actions — Tích hợp hook vào CI/CD pipeline
- Tối ưu chi phí: Token, session, khi nào dùng Sonnet vs Opus — Cách hook giúp giảm token waste bằng context-tracker
- Tích hợp Claude Code vào CI/CD pipeline — Headless mode và automation không cần người can thiệp
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.
Git Worktrees: Chạy song song nhiều Claude session trong 1 repo
Chạy song song nhiều Claude session trên các branch riêng với Git Worktrees. Tránh mất context AI khi chuyển branch, tối ưu cho vibe coding và xử lý đa nhiệm.