Đố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.
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!
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:
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).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).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).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.
"PreToolUse"
"PostToolUse"
"Notification"
"Stop"
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:
tool_name
: Một chuỗi khớp với tên của công cụ đang được sử dụng. Điều này hoàn hảo để nhắm mục tiêu các hành động cụ thể nhưedit_file
,git_commit
, hoặcrun_command
.file_paths
: Một mảng các chuỗi chứa các mẫu glob. Hook sẽ chỉ chạy nếu các tệp liên quan đến việc sử dụng công cụ khớp với một trong các mẫu này. Ví dụ,["*.py"]
nhắm mục tiêu tất cả các tệp Python, trong khi["src/components/**/*.jsx"]
nhắm mục tiêu các tệp JSX trong một thư mục cụ thể.query
: Một chuỗi khớp với đầu vào được cung cấp cho một công cụ. Điều này hữu ích cho các trình kích hoạt cụ thể hơn, như chỉ chạy một hook khi công cụrun_command
được sử dụng với một lệnh bao gồmnpm
.
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:
$CLAUDE_EVENT_TYPE
: Loại sự kiện (PreToolUse
,PostToolUse
, v.v.).$CLAUDE_TOOL_NAME
: Tên của công cụ đã được sử dụng (ví dụ:edit_file
).$CLAUDE_TOOL_INPUT
: Các tham số đầu vào thô được truyền cho công cụ ở định dạng JSON.$CLAUDE_FILE_PATHS
: Một danh sách các đường dẫn tệp được phân tách bằng dấu cách liên quan đến lệnh gọi công cụ. Điều này cực kỳ hữu ích để truyền tệp cho các trình định dạng, trình kiểm tra cú pháp hoặc trình chạy thử nghiệm.$CLAUDE_NOTIFICATION
: Nội dung của thông báo (chỉ dành cho sự kiệnNotification
).$CLAUDE_TOOL_OUTPUT
: Đầu ra từ việc thực thi công cụ (chỉ dành cho sự kiệnPostToolUse
).
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.
- 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 đó. - 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. - Kiểm tra lỗi:
- TOML không hợp lệ: Đảm bảo tệp
settings.toml
của bạn có cú pháp hợp lệ. Một dấu ngoặc hoặc dấu nháy sai vị trí có thể ngăn nó được tải. - Sự cố lệnh: Kiểm tra
command
của bạn trực tiếp trong shell để đảm bảo nó hoạt động như mong đợi. Kiểm tra lỗi chính tả và đảm bảo các tệp thực thi cần thiết (black
,pytest
,ntfy
, v.v.) nằm trongPATH
của hệ thống bạn. - Gỡ lỗi biến: Để xem các biến môi trường chứa giá trị gì, hãy sử dụng
echo
để ghi chúng vào tệp nhật ký. Ví dụ:command = "echo 'Tool: $CLAUDE_TOOL_NAME, Files: $CLAUDE_FILE_PATHS' >> /tmp/claude_hook.log"
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.
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!