Trang chủ › Claude Code › Hook
Tổng quanCài đặttài liệu tham khảo CLIGiá và giới hạnAgent SDKKỹ năng và pluginGitHubWeb, máy tính và IDEMô hìnhLỗiCó phải mã nguồn mở?Hướng dẫn thực hànhDành cho sinh viênTự động hóa QASo với CursorSo với Codex và OpenCodeTác tử phụHookMCPHệ sinh tháiVS CodeOpenRouterGiới hạn tốc độHướng dẫn bằng tiếng Trung
Cập nhật lần cuối: ngày 11 tháng Mười, 2026

Hook của Claude Code: kiểm soát hành động của tác nhân theo quy tắc xác định

Hook là các lệnh shell mà Claude Code chạy tại những thời điểm cố định trong vòng lặp của nó — trước khi gọi công cụ, sau khi gọi công cụ, khi bạn gửi prompt và khi nó hoàn tất. Khác với hướng dẫn trong CLAUDE.md, mà mô hình có thể tuân theo hoặc không, hook luôn chạy. Đây là cách bạn tạo ra những quy tắc luôn được thực thi.

TLDR

  • Được cấu hình trong .claude/settings.json (dự án) hoặc ~/.claude/settings.json (người dùng), hoặc bằng /hooks.
  • Các sự kiện: PreToolUse, PostToolUse, UserPromptSubmit, Notification, Stop, SubagentStop, PreCompact, SessionStart.
  • Hook nhận JSON trên stdin (tên công cụ, đầu vào, phiên); mã thoát 0 cho phép tiếp tục, mã thoát 2 chặn và gửi stderr trở lại Claude.
  • Các cách dùng phổ biến: định dạng sau mỗi lần chỉnh sửa, chặn lệnh nguy hiểm, yêu cầu chạy kiểm thử trước khi dừng, thông báo trên màn hình.

Cấu trúc của một hook

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "npx prettier --write \"$(jq -r .tool_input.file_path)\"" }
        ]
      }
    ]
  }
}

Gồm ba phần: sự kiện, bộ so khớp (biểu thức chính quy áp dụng cho tên công cụ đối với sự kiện công cụ; bỏ qua để khớp với mọi thứ) và một hoặc nhiều lệnh. Lệnh nhận một đối tượng JSON trên stdin mô tả sự kiện — đối với sự kiện công cụ, đối tượng này bao gồm tool_name và tool_input, nhờ đó ví dụ ở trên tìm được tệp vừa được chỉnh sửa. Đặt cấu hình này trong .claude/settings.json để chia sẻ cùng kho mã, ~/.claude/settings.json để dùng riêng, hoặc chạy /hooks và để Claude Code ghi cấu hình.

Các sự kiện

  • PreToolUse — trước khi một công cụ chạy. Sự kiện duy nhất có thể chặn: mã thoát 2 hủy lệnh gọi và Claude đọc stderr của bạn để biết lý do.
  • PostToolUse — sau khi một công cụ thực thi thành công. Chạy trình định dạng, trình kiểm tra lint và kiểm tra kiểu trên tệp đã chỉnh sửa.
  • UserPromptSubmit — khi bạn gửi prompt; có thể bổ sung ngữ cảnh hoặc từ chối prompt.
  • Stop / SubagentStop — khi tác nhân (hoặc tác nhân phụ) sắp hoàn tất. Mã thoát 2 ở đây có nghĩa là "chưa xong" — cách dùng điển hình là không cho dừng khi kiểm thử vẫn thất bại.
  • PreCompact — trước /compact; lưu mọi nội dung bạn cần từ bản ghi hội thoại đầy đủ.
  • SessionStart — khi một phiên bắt đầu hoặc tiếp tục; nạp môi trường, in lời nhắc.
  • Notification — khi Claude Code cần bạn chú ý (yêu cầu cấp quyền, trạng thái chờ); kết nối sự kiện này với thông báo trên màn hình hoặc Slack.

Chặn lệnh nguy hiểm

#!/usr/bin/env bash
# .claude/hooks/guard.sh  -- PreToolUse, matcher: Bash
cmd=$(jq -r '.tool_input.command')
if echo "$cmd" | grep -Eq 'rm -rf|git push --force|DROP TABLE|--no-verify'; then
  echo "blocked by guard.sh: $cmd" >&2
  exit 2
fi
exit 0

Mã thoát 2 là quy ước: lệnh gọi công cụ không được thực hiện, và mọi nội dung hook in ra stderr trở thành lời giải thích mà Claude nhìn thấy, để nó có thể chọn cách tiếp cận khác thay vì thử lại cùng một cách. Mọi mã thoát khác không đều được ghi log nhưng không chặn.

"Không dừng cho đến khi các kiểm thử thành công"

#!/usr/bin/env bash
# Stop hook: refuse to finish while the suite is red
if ! npm test --silent >/tmp/claude-test.log 2>&1; then
  echo "Tests are failing; fix them before finishing:" >&2
  tail -n 40 /tmp/claude-test.log >&2
  exit 2
fi

Kết hợp với giới hạn --max-turns trong các lần chạy không có giao diện để một lỗi thực sự không thể khắc phục không gây lặp vô tận.

Hook so với CLAUDE.md và quyền

CLAUDE.md là lời hướng dẫn mà mô hình đọc; /permissions là danh sách những việc nó được phép làm mà không cần hỏi; hook là mã chạy trong mọi trường hợp. Dùng CLAUDE.md cho phong cách và ngữ cảnh, quyền để xác định khi nào được phép thực hiện và khi nào cần hỏi, còn hook cho mọi điều phải luôn được bảo đảm — định dạng, quét thông tin bí mật, điều kiện kiểm thử, nhật ký kiểm toán. Chúng kết hợp với nhau: một quyền cho phép Bash(git *) chạy, nhưng hook PreToolUse vẫn chặn git push --force.

Hook và cổng API

Hook chạy cục bộ và không bao giờ gọi API, nên không có gì thay đổi khi Claude Code trỏ đến ANTHROPIC_BASE_URL=https://aiprimetech.io. Một cách kết hợp hữu ích: hook Stop in ra /costthông tin sử dụng theo kiểu này từ nhật ký của bạn, để một nhóm dùng tín dụng trả theo mức sử dụng thấy được chi phí của từng phiên khi phiên kết thúc.

Dùng thử miễn phí trước

Tài khoản mới nhận được $5 tín dụng API miễn phí với mã CLAUDECODE — đủ cho một buổi tối dùng Claude Code với Sonnet — sau đó là tín dụng có giá trị sử dụng gấp 7.69231× mệnh giá.

export ANTHROPIC_BASE_URL=https://aiprimetech.io
export ANTHROPIC_API_KEY=your_key

Tạo tài khoản với mã CLAUDECODE

Câu hỏi thường gặp

Hook của Claude Code là gì?

Các lệnh shell mà Claude Code tự động chạy tại các sự kiện trong vòng lặp — trước/sau khi gọi công cụ, khi gửi prompt, khi dừng. Chúng có tính xác định, khác với hướng dẫn trong CLAUDE.md.

Làm cách nào để chặn một lệnh bằng hook?

Dùng hook PreToolUse có bộ so khớp Bash để kiểm tra tool_input.command từ stdin và thoát với mã 2; văn bản stderr được hiển thị cho Claude làm lý do.

Đặt hook ở đâu?

Trong .claude/settings.json của dự án (dùng chung) hoặc ~/.claude/settings.json (cá nhân), dưới khóa hooks; /hooks cho phép chỉnh sửa chúng theo cách tương tác.

Chạy Claude Code trên cổng API

Vẫn các mô hình đó, hai biến môi trường, tín dụng có giá trị sử dụng gấp 7.69231× mệnh giá — hoặc gói không giới hạn với phí cố định. Tài khoản mới: $5 tín dụng API miễn phí với mã CLAUDECODE.

Lấy khóa API Xem các gói không giới hạn

AI Prime Tech là một cổng API độc lập, không có quan hệ liên kết với Anthropic và không được Anthropic chứng thực hay tài trợ. “Claude” và “Claude Code” là các nhãn hiệu của Anthropic. Các tính năng Claude Code được mô tả ở đây dựa trên tài liệu công khai của Anthropic tại thời điểm viết và thường xuyên thay đổi; giá và danh sách mô hình trên trang này được đọc từ cấu hình hiện hành của cổng API này.

Thêm hướng dẫn về Claude Code

Claude Code: hướng dẫn đầy đủCách cài đặt Claude CodeTài liệu CLI của Claude Code: lệnh và cờGiải thích giá và giới hạn của Claude CodeClaude Code SDK, nay là Claude Agent SDKKỹ năng và plugin của Claude CodeClaude Code trong GitHub: App, Action và @claudeClaude Code có giao diện web không? Giải thích về web, ứng dụng máy tính và IDEClaude Code sử dụng mô hình nào và cách thay đổiCác lỗi Claude Code và cách khắc phụcClaude Code có phải mã nguồn mở không?Hướng dẫn thực hành Claude Code: phiên làm việc thực tế đầu tiên của bạnClaude dành cho sinh viên: Claude Code, API và những quyền lợi thực tế dành cho giáo dụcCách sử dụng Claude Code để tự động hóa QAClaude Code so với Cursor: chọn công cụ nào, khi nào — và cách sử dụng cả haiClaude Code vs Codex vs OpenCode: so sánh các tác nhân trong terminalTác nhân phụ của Claude Code: cách hoạt động, cách định nghĩa và các nhóm tác nhânMCP của Claude Code: kết nối máy chủ, phạm vi, MCP từ xa và ví dụ thực tếHệ sinh thái Claude Code: bộ định tuyến, framework, plugin và các danh sách theo dõi chúngClaude Code trong VS Code: tiện ích mở rộng, cách dùng qua terminal và các lỗiCách dùng OpenRouter trong Claude Code (và khi nào không nên dùng)Lỗi giới hạn tốc độ của Claude: "API error: rate limit reached" có nghĩa là gì và cách khắc phụcCách dùng Claude Code: từ cài đặt đến sử dụng hằng ngày