8个Claude Code自动化Hook实战

  • zodchiii
  • 发布于 9小时前
  • 阅读 26

本文详细介绍了 Claude Code 的 8 个实用自动化Hook(Hooks),涵盖了代码自动格式化、拦截危险命令、保护敏感文件、自动运行测试及提交前置检查等场景。通过配置 .claude/settings.json,开发者可以确保 AI 在编写代码时遵循项目规范并提升安全性。

Image

你是否曾要求 Claude Code 执行某项操作,但它却没有执行?

比如你让它格式化代码,它没做;你让它不要碰某个文件,它碰了;你让它在结束抢跑测试,它忘了。

这是因为 CLAUDE.md 只是一个建议。Claude 会阅读并遵循它,但成功率大约只有 80%。而 Hooks 则不同,它们是自动触发的操作,每当 Claude 编辑文件、运行命令或完成任务时都会执行。

以下是 8 个实用的 Hooks 配置,你可以直接复制到 settings.json 中,从此一劳永逸。

Image

Hooks 工作原理

Hooks 是在 Claude Code 执行特定操作(如编辑文件或运行命令)时自动运行的动作。你只需设置一次,它们就会在后台默默工作。

最常用的两种 Hook:

  • PreToolUse:在 Claude 执行操作之抢跑。你可以将其视为“保安”,负责检查并拦截不当操作(通过返回退出代码 2 来阻止)。
  • PostToolUse:在 Claude 执行操作之后运行。你可以用它来进行清理、格式化、测试或记录日志。

你可以在项目根目录的 .claude/settings.json 中进行配置。该文件会被提交到 Git,因此你的整个团队都能自动获得相同的 Hooks。

Image

1. 自动格式化 Claude 修改的文件

问题:Claude 编写的代码逻辑正确,但可能违反了你的格式规则。虽然可以在 CLAUDE.md 中要求它运行 Prettier,但它并不总是记得。

方案:设置 Hook,在每次文件写入或编辑后自动运行 Prettier。你可以根据语言更换格式化工具,如 Python 使用 black,Go 使用 gofmt,Rust 使用 rustfmt。这是每个项目都应该具备的基础配置。

2. 拦截危险命令

问题:Claude 拥有运行 rm -rfgit reset --hardDROP TABLE 或通过 curl 访问随机 URL 的权限。虽然它通常不会这么做,但在生产环境下,“通常”并不够安全。

方案:在执行前拦截破坏性命令。创建 .claude/hooks/block-dangerous.sh 并在 settings.json 中配置。使用退出代码 2 是关键,它会阻止操作并将错误信息反馈给 Claude,让它尝试更安全的方法。

3. 保护敏感文件不被修改

问题:Claude 可以读取和编辑项目中的任何文件,包括 .envpackage-lock.json 或配置文件,而你可能并不希望它触碰这些文件。

方案:通过 Hook 拦截对特定文件的编辑请求。创建 .claude/hooks/protect-files.sh 来实现这一保护层。

4. 每次修改后运行测试

问题:Claude 完成修改并告知“已完成”,但你可能在 20 分钟后准备提交时才发现测试挂了。

方案:在每次代码变更后自动运行测试套件。如果测试失败,Claude 会立即看到错误并进行修复。建议使用 tail -5 保持输出简洁,让 Claude 看到“3 个测试失败”而不是几百行的完整日志。这种反馈循环能显著提升输出质量。

5. 创建 PR 前要求通过测试

问题:Claude 完成功能后立即创建 PR,但此时测试可能还是失败的,导致 Reviewer 看到红色的 CI 状态。

方案:强制要求只有在所有测试通过时才能创建 PR。创建 .claude/hooks/require-tests-for-pr.sh。这是一个硬性门槛,如果测试不通过,Claude 必须先修复错误。

6. 自动 Lint 并报告错误

问题:Claude 写的代码能跑,但违反了 ESLint 规则、风格指南或类型检查。

方案:每次编辑后进行 Lint 检查。如果 Lint 失败,Claude 会在你看代码之前就自动修复这些问题。你可以将此与自动格式化 Hook 链式调用:先运行 Prettier,再运行 ESLint。

7. 记录 Claude 运行的每个命令

问题:Claude 在一个会话中会运行大量 Shell 命令。如果出了问题,你需要确切知道它在什么时候做了什么。

方案:将每个 Bash 命令及其时间戳追加到日志文件中。创建 .claude/hooks/log-commands.sh。这为你提供了完整的审计追踪,便于调试。记得将 .claude/command-log.txt 添加到 .gitignore 中。

8. 任务完成后自动提交

问题:Claude 完成一个任务后你忘了提交,接着它开始下一个任务,导致两个不相关的变更混在了一个提交中。

方案:当 Claude 停止处理某个任务时,自动提交所有更改。创建 .claude/hooks/auto-commit.sh。这样你的 Git 历史会保持清晰,每个任务都有原子化的提交。

完整的 settings.json 配置

你可以将以下内容整合到 .claude/settings.json 中:

Image

配置步骤:

  1. 将配置复制到 .claude/settings.json
  2. .claude/hooks/ 中创建相应的脚本。
  3. 使用 chmod +x .claude/hooks/*.sh 赋予执行权限。
  4. 将这些内容提交到 Git。

Hooks 是区分 Claude Code 配置好坏的关键。它们在你没留意时运行,捕捉那些本该在代码审查甚至生产环境中才会发现的错误。建议今天就先设置好“自动格式化”和“拦截危险命令”这两个 Hook。

Image

  • 原文链接: x.com/zodchiii/status/20...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zodchiii
zodchiii
江湖只有他的大名,没有他的介绍。