VI EN
1 / 7
Claude Code Feature

Hooks
>_

Tự động hóa workflow với lệnh shell — chạy đúng tại các điểm vòng đời xác định khi Claude sửa file, hoàn thành task, hoặc cần input từ bạn.

⚙️ 20+ sự kiện vòng đời
🔌 5 loại hook
🎯 Deterministic, không phụ thuộc LLM
Hooks là gì? 3 trụ cột
🎯 KIỂM SOÁT TUYỆT ĐỐI
Lệnh shell do bạn định nghĩa — chạy đúng tại các điểm vòng đời xác định, không phụ thuộc vào quyết định của LLM.
⚡ HƯỚNG SỰ KIỆN
Hooks kích hoạt theo event như PreToolUse, PostToolUse, Notification, SessionStart — hơn 20 loại.
🔌 NHIỀU LOẠI HOOK
command · http · mcp_tool · prompt · agent — chọn đúng mô hình thực thi cho từng use case.
Sự kiện vòng đời
SessionStartPhiên bắt đầu hoặc tiếp tục
UserPromptSubmitTrước khi Claude xử lý prompt
PreToolUseTrước khi tool call thực thi — có thể chặn
PostToolUseSau khi tool call thành công
NotificationKhi Claude cần input từ bạn
PermissionRequestKhi hộp thoại xin quyền xuất hiện
FileChangedFile đang theo dõi thay đổi
PreCompactTrước khi context compaction
StopKhi Claude xong hoặc xảy ra lỗi
Hook đầu tiên: Notification

Thông báo desktop khi Claude cần input — không bỏ lỡ prompt. Thêm vào ~/.claude/settings.json:

// ~/.claude/settings.json { "hooks": { "Notification": [{ "matcher": "", "hooks": [{ "type": "command", "command": "osascript -e 'display notification \"Claude can input\" with title \"Claude Code\"'" }] }] } }

→ Mở /hooks để xem event đã đăng ký. Hỏi Claude gì đó, chuyển tab — thông báo sẽ bật lên.

Pattern tự động hóa
🔔
THÔNG BÁO
Alert desktop khi cần input qua Notification
AUTO-FORMAT
Prettier/ESLint sau Edit|Write qua PostToolUse
🔒
BẢO VỆ FILE
Chặn sửa .env, .git qua PreToolUse
💾
RELOAD CONTEXT
Đẩy lại reminders sau compaction
📋
AUDIT LOG
Log mọi ConfigChange ra file
AUTO-APPROVE
Skip prompt cho tool đáng tin cậy
Hooks giao tiếp như thế nào

Claude gửi JSON qua stdin. Script trả về qua exit code + stdout/stderr:

exit 0 Hành động tiến hành bình thường
exit 2 Chặn — stderr gửi cho Claude làm phản hồi
JSON Stdout structured: allow/deny + reason
// PreToolUse — deny + reason { "hookSpecificOutput": { "hookEventName": "PreToolUse", "permissionDecision": "deny", "permissionDecisionReason": "Use rg instead of grep" } }
Lọc với matchers

Trường matcher giới hạn hook nào được chạy — càng hẹp càng tốt.

PostToolUse · "Edit|Write"
Chỉ chạy cho tool sửa file
PreToolUse · "Bash"
Chỉ kích hoạt khi Claude dùng Bash
SessionStart · "compact"
Chỉ trigger sau khi compaction
PermissionRequest · "ExitPlanMode"
Auto-approve khi hoàn thành plan
Nhớ 3 điều:
exit 2 chặn hành động · exit 0 + JSON cho phép quyết định có cấu trúc
• Dùng matcher để giới hạn phạm vi — tránh tự động hóa quá rộng
• Xác minh bằng /hooks, debug qua log, iterate nhanh