Claude Code Hooks là gì và cách sử dụng

Rebecca Kovács

Rebecca Kovács

2 tháng 7 2025

Claude Code Hooks là gì và cách sử dụng

Đối với Vibe Coders, các công cụ như Claude Code của Anthropic đang thay đổi cách các nhà phát triển viết, gỡ lỗi và quản lý dự án của họ. Claude Code hoạt động như một "công cụ mã hóa tác nhân" nằm trong terminal của bạn, có khả năng hiểu toàn bộ cơ sở mã của bạn, tương tác với hệ thống tệp của bạn, chạy các lệnh và thậm chí duyệt web để tìm tài liệu. Nó vượt trội trong các tác vụ như viết tính năng mới, sửa lỗi và tái cấu trúc mã thông qua các lời nhắc bằng ngôn ngữ tự nhiên.

Tuy nhiên, một đặc điểm cốt lõi của các Mô hình Ngôn ngữ Lớn (LLM) là bản chất xác suất của chúng. Mặc dù điều này cho phép giải quyết vấn đề một cách sáng tạo, nhưng đôi khi nó có thể dẫn đến sự không thể đoán trước. Bạn có thể muốn một số hành động nhất định—như kiểm tra cú pháp tệp sau khi nó được thay đổi hoặc chạy thử nghiệm sau khi một hàm mới được viết—xảy ra mọi lúc mà không thất bại. Việc dựa vào LLM để nhớ thực hiện điều này trong mọi trường hợp có thể không nhất quán.

Đây là lúc Claude Code Hooks xuất hiện. Hooks là một tính năng mạnh mẽ cung cấp khả năng kiểm soát có tính xác định, theo chương trình đối với hành vi của Claude Code, đảm bảo các hành động nhất định luôn xảy ra thay vì dựa vào LLM để chọn chạy chúng.

💡
Bạn muốn một công cụ kiểm thử API tuyệt vời có thể tạo Tài liệu API đẹp mắt?

Hãy thử Apidog MCP Server, cho phép bạn tạo mã chính xác bằng cách đọc từ Thông số kỹ thuật API của bạn!
nút

Bài viết này đóng vai trò là hướng dẫn toàn diện để hiểu, cấu hình và tận dụng Claude Code Hooks nhằm tạo ra một quy trình làm việc phát triển hoàn toàn tự động và tinh gọn.

Claude Code Hooks là gì?

Về cốt lõi, Claude Code Hooks là các lệnh shell do người dùng định nghĩa, tự động thực thi tại các điểm cụ thể trong vòng đời của Claude Code. Chúng hoạt động như các trình kích hoạt mà bạn có thể cấu hình để kích hoạt trước hoặc sau các hành động nhất định, cho phép bạn chèn logic, tập lệnh và lệnh tùy chỉnh của riêng mình trực tiếp vào các hoạt động của Claude.

Hooks thu hẹp khoảng cách giữa hỗ trợ dựa trên AI và tự động hóa dựa trên quy tắc. Chúng cho phép bạn thực thi các tiêu chuẩn, tự động hóa các tác vụ lặp đi lặp lại và tích hợp các công cụ bên ngoài một cách liền mạch vào quy trình làm việc của bạn với độ tin cậy hoàn toàn.

Có bốn sự kiện vòng đời chính mà một hook có thể được kích hoạt:

  1. PreToolUse: Thực thi trước khi Claude sử dụng một công cụ cụ thể (ví dụ: trước khi ghi vào một tệp).
  2. PostToolUse: Thực thi sau khi một công cụ đã được sử dụng thành công (ví dụ: sau khi một tệp đã được sửa đổi).
  3. Notification: Thực thi bất cứ khi nào Claude gửi một thông báo (ví dụ: khi nó cần đầu vào của người dùng hoặc đã hoàn thành một tác vụ dài).
  4. Stop: Thực thi khi Claude hoàn thành việc tạo phản hồi và dừng lại.

Bằng cách nhắm mục tiêu các sự kiện này, bạn có thể tạo ra các tự động hóa mạnh mẽ phản ánh các thực hành tốt nhất của phát triển phần mềm hiện đại, chẳng hạn như kiểm tra tích hợp liên tục (CI), nhưng với tốc độ phát triển cục bộ.

Cấu trúc của Claude Code Hooks: Tìm hiểu sâu về cấu hình

Để sử dụng hooks, bạn cần định nghĩa chúng trong tệp cài đặt của Claude Code. Điều này được thực hiện bằng cách thêm một bảng [[hooks]] vào tệp settings.toml của bạn, nằm trong thư mục .claude/ bên trong dự án của bạn. Mỗi cấu hình hook có một vài thành phần chính.

# Ví dụ Hook trong .claude/settings.toml

[[hooks]]
# Sự kiện kích hoạt hook.
event = "PostToolUse" 

# (Tùy chọn) Điều kiện để hook chạy.
[hooks.matcher]
tool_name = "edit_file"
file_paths = ["*.py", "api/**/*.py"]

# Lệnh shell để thực thi.
command = "ruff check --fix $CLAUDE_FILE_PATHS && black $CLAUDE_FILE_PATHS"

# (Tùy chọn) Có chạy lệnh trong nền hay không.
run_in_background = false 

Hãy cùng phân tích chi tiết từng phần.

Trường event trong Claude Code Hooks (Bắt buộc)

Chuỗi này chỉ định sự kiện nào trong bốn sự kiện vòng đời sẽ kích hoạt hook.

Trường hooks.matcher trong Claude Code Hooks (Tùy chọn)

Matcher là thứ cho phép bạn định nghĩa chính xác khi nào một hook nên chạy. Nếu bạn bỏ qua matcher, hook sẽ chạy cho mọi trường hợp của event được chỉ định. Ví dụ, một hook PostToolUse không có matcher sẽ kích hoạt sau mọi lần gọi công cụ.

Matcher có ba trường bạn có thể sử dụng để lọc các sự kiện:

Trường command cho Claude Code Hooks (Bắt buộc)

Đây là trọng tâm của hook—lệnh shell sẽ được thực thi khi các điều kiện kích hoạt được đáp ứng. Lệnh này chạy với cùng quyền hạn như tài khoản người dùng của bạn, vì vậy nó có thể làm bất cứ điều gì bạn có thể làm trong terminal của mình.

Để làm cho các lệnh động, Claude Code cung cấp một tập hợp các biến môi trường được điền với ngữ cảnh từ sự kiện đã kích hoạt hook.

Các biến môi trường có sẵn:

Thiết lập run_in_background cho Claude Code Hooks (Tùy chọn)

Đây là một giá trị boolean (true hoặc false). Nếu được đặt thành true, lệnh của hook sẽ được thực thi trong một tiến trình riêng biệt và Claude sẽ không đợi nó hoàn thành trước khi tiếp tục. Điều này lý tưởng cho các tác vụ chạy dài như bộ kiểm thử toàn diện hoặc quy trình xây dựng mà bạn không muốn chặn các hành động tiếp theo của Claude. Giá trị mặc định là false.

Các trường hợp sử dụng thực tế và ví dụ cho Claude Code Hooks

Sức mạnh thực sự của hooks được bộc lộ khi bạn áp dụng chúng vào các quy trình làm việc phát triển thực tế. Dưới đây là một số ví dụ thực tế để bạn bắt đầu.

1. Tự động kiểm tra cú pháp và định dạng với Claude Code Hooks

Tự động thực thi một phong cách mã nhất quán trên toàn bộ dự án của bạn. Hook này chạy trình kiểm tra cú pháp ruff và trình định dạng black trên bất kỳ tệp Python nào mà Claude chỉnh sửa.

Tệp: .claude/settings.toml

[[hooks]]
event = "PostToolUse"

[hooks.matcher]
tool_name = "edit_file"
file_paths = ["*.py"]

# Lệnh để kiểm tra cú pháp, sửa lỗi và định dạng các tệp Python đã chỉnh sửa.
command = "echo 'Running auto-formatter...' && ruff check --fix $CLAUDE_FILE_PATHS && black $CLAUDE_FILE_PATHS"

2. Tự động chạy thử nghiệm với Claude Code Hooks

Một thực hành cốt lõi của phát triển hướng kiểm thử (TDD) là viết các kiểm thử và sau đó viết mã để vượt qua các kiểm thử đó, lặp lại cho đến khi mọi thứ hoạt động. Bạn có thể tự động hóa bước "chạy kiểm thử" bằng một hook. Ví dụ này chạy pytest bất cứ khi nào một tệp trong thư mục src/ hoặc tests/ được sửa đổi.

Tệp: .claude/settings.toml

[[hooks]]
event = "PostToolUse"
run_in_background = true # Kiểm thử có thể chậm, chạy trong nền.

[hooks.matcher]
tool_name = "edit_file"
file_paths = ["src/**/*.py", "tests/**/*.py"]

# Lệnh để chạy bộ kiểm thử.
command = "pytest"

3. Thông báo tùy chỉnh trên máy tính để bàn thông qua Claude Code Hooks

Nếu bạn yêu cầu Claude thực hiện một tác vụ chạy dài, bạn có thể rời khỏi máy tính của mình. Hook này sử dụng một công cụ dòng lệnh như ntfy (một dịch vụ thông báo pub-sub dựa trên HTTP đơn giản) để gửi thông báo đẩy đến điện thoại hoặc máy tính để bàn của bạn khi Claude cần sự chú ý của bạn.

Tệp: .claude/settings.toml

[[hooks]]
event = "Notification"

# Gửi nội dung thông báo đến một chủ đề ntfy.sh công khai.
# Bạn có thể tự lưu trữ để bảo mật.
command = 'ntfy publish my-claude-alerts "$CLAUDE_NOTIFICATION"'

4. Kiểm tra sơ bộ trước khi commit bằng Claude Code Hooks

Giống như Git hooks, bạn có thể sử dụng Claude Code Hooks để đảm bảo chất lượng trước khi một commit được thực hiện. Ví dụ này chạy một tập lệnh tùy chỉnh để kiểm tra khóa API hoặc thực hiện các bước xác thực khác ngay trước khi Claude được phép sử dụng công cụ git_commit.

Tệp: .claude/settings.toml

[[hooks]]
event = "PreToolUse"

[hooks.matcher]
tool_name = "git_commit"

# Lệnh để chạy tập lệnh kiểm tra trước khi commit.
# Tập lệnh nên thoát với mã khác 0 để dừng commit.
command = "sh ./.claude/pre-commit-checks.sh"

Thiết lập và gỡ lỗi Claude Code Hooks của bạn

Bắt đầu với hooks rất đơn giản, nhưng việc xác minh và gỡ lỗi là chìa khóa để đảm bảo chúng hoạt động như mong đợi.

  1. Tạo cấu hình của bạn: Đảm bảo bạn có tệp .claude/settings.toml trong thư mục gốc của dự án. Thêm cấu hình [[hooks]] của bạn vào đó.
  2. Xác minh cấu hình: Sau khi lưu tệp settings.toml của bạn, hãy chạy lệnh /hooks trong giao diện terminal của Claude Code. Lệnh đặc biệt này sẽ hiển thị các cấu hình hook hiện đang được tải của bạn, cho phép bạn ngay lập tức xem Claude đã phân tích chúng đúng cách hay chưa.
  3. Kiểm tra lỗi:

Kết luận: Sức mạnh của Claude Code Hooks

Claude Code Hooks nâng công cụ này từ một trợ lý mã hóa có năng lực cao thành một đối tác phát triển tích hợp hoàn chỉnh, có tính xác định. Bằng cách định nghĩa các quy tắc đơn giản, mạnh mẽ, bạn có thể tự động hóa các phần công việc lặp đi lặp lại nhưng quan trọng trong quy trình làm việc của mình, giải phóng bạn để tập trung vào các khía cạnh phức tạp, sáng tạo của kỹ thuật phần mềm. Cho dù đó là việc thực thi chất lượng mã, đơn giản hóa vòng lặp TDD của bạn hay tích hợp với các dịch vụ của bên thứ ba, hooks cung cấp khuôn khổ mạnh mẽ cần thiết để điều chỉnh Claude Code theo nhu cầu chính xác của bạn.

Khi bạn trở nên quen thuộc hơn với các khả năng của Claude Code, hãy bắt đầu nhỏ với một hook định dạng đơn giản và sau đó khám phá các tự động hóa phức tạp hơn. Bạn sẽ nhanh chóng nhận thấy rằng tính năng này là cần thiết để xây dựng một môi trường phát triển được hỗ trợ bởi AI có thể dự đoán được, hiệu quả và thực sự cá nhân hóa.

💡
Bạn muốn một công cụ kiểm thử API tuyệt vời có thể tạo Tài liệu API đẹp mắt?

Hãy thử Apidog MCP Server, cho phép bạn tạo mã chính xác bằng cách đọc từ Thông số kỹ thuật API của bạn!
nút

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API