Hướng dẫn viết Hook cho Claude Code
Kỹ năng thực chiến để viết, kiểm thử, đăng ký và gỡ lỗi hook PreToolUse/PostToolUse/SessionStart/Stop của Claude Code.
Lập trìnhNâng cao★ 1,323⑂ 212Điểm AI 9/10Cập nhật lần cuối: 8 thg 8, 2026
Làm được gì
Biến những quy tắc mà Claude cứ vi phạm dù đã ghi trong CLAUDE.md thành một rào chắn cứng bằng cơ chế hook.
- Giải thích rõ từng loại hook, thời điểm kích hoạt và hợp đồng exit code (0 = cho phép, 2 = chặn)
- Bộ khung PreToolUse Bash guard và các pattern chạy được (references/hook_patterns.md)
- Kỹ thuật khớp theo token bằng
shlexđể tránh chặn oan các lệnh lành tính (tuyệt đối không tách bằng awk) - Quy trình kiểm thử
bash -n+ JSON event thật trước khi đăng ký, kèm script test harness - Mô hình SSOT + symlink để cài lại
~/.claudekhông làm mất guard - Đồng bộ nhiều profile và cổng phê duyệt bắt buộc có con người (hộp thoại osascript, gõ YES vào /dev/tty)
- Phương pháp chứng minh vòng lặp Stop hook sẽ kết thúc (loop variant V)
Phù hợp với ai
- Lập trình viên muốn chặn Claude Code chạy lệnh nguy hiểm (force push, xoá file, commit secret)
- Trưởng nhóm đã nhắc quy tắc bằng prompt nhiều lần nhưng vẫn bị vi phạm lặp lại
- Người đã viết hook nhưng bị chặn oan hoặc session hỏng mà không rõ nguyên nhân
- Người vận hành cần triển khai guardrail đồng nhất trên nhiều profile/máy
Ví dụ sử dụng
- "Tạo hook chặn
git push --force" → sinh guard PreToolUse kiểm tra vị trí lệnh, đồng thời cho phép các trường hợp chỉ nhắc tên lệnh nhưgrephay trong nội dung commit. - "Hook mới của tôi chặn cả lệnh bình thường" → chẩn đoán lỗi tách chuỗi bằng awk và thay bằng walker dựa trên
shlex.shlex(punctuation_chars=True). - "Ngăn Claude tưởng là đã commit" → thiết kế hook PostToolUse đọc lại git HEAD thật và tiêm sự thật đó vào ngữ cảnh.
· · · Hướng dẫn cài đặt · · ·
Cài vào ứng dụng Claude (không cần terminal)
- Tải tệp ZIP bằng nút bên dưới.
- Trong Claude, mở Settings → Capabilities và bật 'Code execution and file creation'. (chỉ một lần)
- Vào Customize → Skills → + → 'Upload a skill' rồi tải tệp ZIP lên.
Cài vào Claude Code
Để Claude làm — dán câu dưới đây vào Claude Code
Hãy cài skill mình tìm thấy trên Claude Skill Mart. Copy thư mục daymade-claude-code/claude-code-hooks từ repo GitHub daymade/claude-code-skills vào ~/.claude/skills/claude-code-hooks/ của mình. Sau khi cài xong, cho mình biết skill này làm được gì trong một câu.
Cài bằng lệnh thủ công
git clone https://github.com/daymade/claude-code-skills.git /tmp/daymade-skills && mkdir -p ~/.claude/skills && cp -r /tmp/daymade-skills/daymade-claude-code/claude-code-hooks ~/.claude/skills/⚠ Đây là skill do người khác tạo. Hãy kiểm tra repo gốc trước khi cài.
- Mở terminal.
- Tạo thư mục skills:
mkdir -p ~/.claude/skills - Clone repo về thư mục tạm:
git clone https://github.com/daymade/claude-code-skills.git /tmp/daymade-skills - Copy đúng skill này:
cp -r /tmp/daymade-skills/daymade-claude-code/claude-code-hooks ~/.claude/skills/ - Kiểm tra:
ls ~/.claude/skills/claude-code-hooks(thấy SKILL.md, references/, scripts/ là ổn) - Mở lại Claude Code và yêu cầu ví dụ "viết hook chặn rm -rf" — skill sẽ tự được gọi.
- Quan trọng: luôn chạy
bash -n hook.shvàscripts/test_hook.shtrước khi đăng ký hook. Một hook PreToolUse sai có thể làm lỗi mọi lệnh Bash trong session. - Muốn hoàn tác, xoá mục hook tương ứng trong
~/.claude/settings.json.
Xem mã nguồn trên GitHub ↗Giấy phép: MIT