Bỏ qua để đến nội dung

Hooks

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Hooks cho phép bạn chạy lệnh tại các thời điểm cụ thể trong vòng đời của Claude Code. Điểm khác biệt cốt lõi giữa hooks và mọi thứ khác trong khóa học này: hooks là tất định (deterministic) - chúng luôn luôn chạy.

Bạn có thể yêu cầu Claude trong CLAUDE.md chạy Prettier sau mỗi lần chỉnh sửa file. Đa số lần nó sẽ làm đúng. Nhưng đôi khi thì không. Một hook đảm bảo điều đó xảy ra mỗi lần, không ngoại lệ.

Các trường hợp dùng phổ biến:

  • Tự động format sau khi chỉnh sửa file.
  • Ghi log mọi lệnh đã thực thi, phục vụ compliance.
  • Chặn các thao tác nguy hiểm như chỉnh sửa file production.
  • Gửi thông báo cho bạn khi Claude hoàn thành một tác vụ.

Hooks được cấu hình trong settings.json. Bạn chọn một event, tùy chọn đặt một matcher cho tool mà nó áp dụng, và cung cấp một lệnh để chạy. Một số event phổ biến nhất:

  • PreToolUse - chạy trước một lệnh gọi tool.
  • PostToolUse - chạy sau khi một lệnh gọi tool hoàn tất.
  • UserPromptSubmit - chạy khi bạn gửi một prompt, trước khi Claude xử lý nó.
  • Stop - chạy khi Claude hoàn tất phản hồi.
  • Notification - chạy khi Claude gửi một thông báo.

Đây chỉ là một vài event bạn có thể hook vào - Claude Code hỗ trợ nhiều event hơn nữa. Xem tài liệu tham chiếu hooks để có danh sách đầy đủ.

Bạn cấu hình chúng qua lệnh /hooks bên trong Claude Code, hoặc chỉnh sửa trực tiếp settings.json.

File settings.json bên trong thư mục .claude với cấu hình hooks File settings.json trong thư mục .claude với cấu hình hooks.

Hook phổ biến nhất: tự động format sau khi chỉnh sửa. Đặt một hook PostToolUse với matcher "Edit|MultiEdit|Write" để nó kích hoạt mỗi khi Claude sửa một file. Lệnh sẽ kiểm tra phần mở rộng của file và chạy formatter tương ứng - Prettier cho TypeScript, gofmt cho Go, hoặc bất kỳ công cụ nào project của bạn dùng.

Hook PreToolUse có thể chặn một lệnh gọi tool trước khi nó thực thi. Hook của bạn nhận tên tool và input dưới dạng JSON qua stdin. Exit code quyết định hành vi tiếp theo:

  • Exit code 0 - tiếp tục bình thường.
  • Exit code 2 - chặn hành động. Thông điệp stderr được đưa ngược lại cho Claude làm phản hồi, để nó biết vì sao bị chặn và có thể điều chỉnh.
  • Exit code khác - một lỗi không-chặn (non-blocking), hiển thị cho bạn nhưng không dừng bất cứ điều gì.

Đây là cách bạn thực thi các quy tắc cứng. Chặn ghi vào thư mục cấu hình production. Chặn lệnh bash chứa rm -rf. Chặn commit vào nhánh main. Bất cứ điều gì team bạn cần được đảm bảo, chứ không chỉ gợi ý.

File settings.json với hook PreToolUse và PostToolUse, kèm matcher và command Một file settings.json với hook PreToolUsePostToolUse, kèm matcher và command.

Hooks cấu hình trong .claude/settings.json thuộc cấp project và có thể được check vào repo. Nghĩa là cả team tự động nhận cùng một bộ hooks. Dùng biến môi trường CLAUDE_PROJECT_DIR trong các lệnh của bạn để tham chiếu tới script lưu trong project, để chúng hoạt động bất kể thư mục làm việc hiện tại của Claude là gì.

Hooks cho bạn quyền kiểm soát tất định với hành vi của Claude Code. Dùng PostToolUse để auto-format và ghi log. Dùng PreToolUse để chặn các thao tác nguy hiểm. Cấu hình chúng bằng /hooks hoặc trong settings.json. Check chúng vào repo để đồng đội tự động nhận được.

Nếu điều gì đó cần xảy ra mỗi lần, không được phép sai sót - đừng đặt nó trong prompt. Hãy đặt nó trong một hook.

Xem thêm: Hooks · Tài liệu tham chiếu hooks

Đây là bài giảng cuối cùng trong khóa. Làm bài quiz cuối khóa và nhận huy hiệu hoàn thành tại academy.claude.com/courses/claude-code-101/course-quiz.