首页/新闻资讯/正文详情

Claude Code Hooks 实战:6个自动化脚本,省掉每天30分钟重复操作

发布时间:2026/9/26 3:19:10 来源:云帆数科 栏目:资讯中心
Claude Code Hooks 实战:6个自动化脚本,省掉每天30分钟重复操作
1. 为什么你的 Claude Code 每天还在重复劳动Claude Code 现在已经是很多开发者日常写代码的主力工具但绝大多数人只用了它最表层的能力对话、改文件、跑命令。真正被低估的是 Hooks——它允许你在 Claude Code 的运行周期里挂载自定义 shell 脚本让格式化、测试、通知、权限拦截这些动作自动发生。一句话解释Hooks 是在 Claude Code 特定时机自动执行的 shell 命令。比如 Claude 改完一个文件后你想自动跑 prettier正常流程是你手动敲npx prettier --write xxx.js用 Hook 的话只要在配置里写一条规则Claude 每次改完文件就自动格式化你什么都不用管。它支持的触发时机包括PreToolUse工具调用前可拦截、PostToolUse工具调用后可格式化、NotificationClaude 等你输入时可发通知、Stop一轮回答结束可跑测试、SessionStart会话启动可加载环境、PostCompact上下文压缩后可重新注入关键信息。这篇聚焦落地配置围绕settings.json骨架与 shell 脚本给你 6 个可直接复制的自动化钩子并逐条给出验证动作帮你在本地复现并确认每个 Hook 真的生效。适合已经在用 Claude Code、想进一步减少重复操作的开发者。如果你还没配好模型接入可以先用 TaoToken 的模型对话快速验证脚本逻辑再落到本地配置。2. 前置准备settings.json 骨架与 TaoToken 接入Hooks 的配置写在~/.claude/settings.json里最外层是hooks对象每个事件名对应一个数组数组里每个元素包含matcher匹配条件和hooks要执行的命令列表。骨架长这样{ hooks: { 事件名: [ { matcher: 匹配条件, hooks: [ { type: command, command: 要执行的命令 } ] } ] } }在动手之前先把两个依赖装好否则后面所有 Hook 都会静默失败# macOS brew install jq # Ubuntu / Debian sudo apt install jq # 确认版本 jq --versionjq是刚需因为 Hooks 的输入输出都走 JSONstdin 会收到一段结构化数据你需要用jq把字段提取出来。没有它命令会报错但界面不一定提示。如果你本地还没接好 Claude Code 的模型通道可以先用 TaoToken 的 API 做一次连通性验证。它的接口地址是https://taotoken.net/api在控制台生成 API Key 后用一条 curl 确认能正常返回curl https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY能列出模型列表说明通道没问题再继续配 Hooks。API Key 在控制台的 API Keys 页面生成接入文档里有完整的参数说明。这一步不是必须但能帮你排除“Hook 没生效其实是模型没连上”这类误判。3. 六个可复制的自动化 Hook 配置下面每个 Hook 都给出完整 JSON 片段和验证动作。建议先单独配一个验证通过后再合并到同一个settings.json。3.1 保存即格式化PostToolUse prettier这是用得最多的场景。Claude 改完代码文件你不想每次手动跑 prettier 或 eslint --fix。{ hooks: { PostToolUse: [ { matcher: Edit|Write, hooks: [ { type: command, command: jq -r .tool_input.file_path | xargs npx prettier --write 2/dev/null || true } ] } ] } }matcher设成Edit|Write意思是只在 Claude 用 Edit 或 Write 工具改文件时触发。stdin 收到 JSON里面有tool_input.file_path字段用jq提取后传给 prettier。末尾加|| true是因为有些文件 prettier 不认比如 .md报错也不该中断流程。验证动作让 Claude 改一个.js文件故意把缩进写乱改完后打开文件看是否被自动格式化。实测下来这个 Hook 每次执行不到 200ms基本感觉不到延迟。3.2 保护关键文件PreToolUse 拦截项目里总有些文件不能随便动.env.production、docker-compose.yml、CI 配置。用 PreToolUse Hook 拦截{ hooks: { PreToolUse: [ { matcher: Edit|Write, hooks: [ { type: command, command: jq -r .tool_input.file_path | grep -qE (\\.env\\.production|docker-compose\\.yml|\\.(github|gitlab)/|Makefile) echo {\decision\: \block\, \reason\: \受保护文件请确认后手动修改\} || echo {\decision\: \allow\} } ] } ] } }原理从 stdin 读文件路径用 grep 匹配保护列表命中就返回{decision: block}Claude 会收到拒绝信息不执行这次修改。验证动作让 Claude 尝试改.github/workflows/deploy.yml观察它是否被拦下并提示“受保护文件”。我试过在项目里加上这条之后Claude 再也没有误改过 CI 配置。3.3 任务完成桌面通知NotificationClaude 跑复杂任务要几分钟你切到别的窗口干活不知道它什么时候完事。加个通知 Hook。macOS 版{ hooks: { Notification: [ { matcher: , hooks: [ { type: command, command: osascript -e display notification \Claude Code 任务完成等你回来\ with title \Claude Code\ } ] } ] } }Linux 版把 command 换成notify-send Claude Code Claude Code 任务完成等你回来matcher设为空字符串表示所有通知都触发。验证动作让 Claude 执行一个需要等待的任务切走窗口看是否弹出系统通知。3.4 每轮结束自动跑测试StopClaude 改完代码后自动跑一遍测试挂了马上就知道{ hooks: { Stop: [ { matcher: , hooks: [ { type: command, command: cd \$(jq -r .cwd)\ npm test --silent 21 | tail -20 | jq -Rs {output_to_claude: .} } ] } ] } }Stop 事件在 Claude 完成一轮回答时触发。这里做了三件事cd 到项目目录跑npm test取最后 20 行输出把结果通过output_to_claude字段反馈给 Claude。如果测试挂了Claude 会看到失败信息你可以直接让它修复形成闭环。验证动作故意改坏一个测试用例让 Claude 跑一轮看它是否主动提到测试失败。注意如果测试超过 30 秒建议只跑受影响文件的测试不要全量跑。3.5 压缩后恢复关键信息PostCompact对话长了会压缩上下文有时压缩完会“忘记”项目约定。PostCompact Hook 可以在压缩后自动注入关键上下文{ hooks: { PostCompact: [ { matcher: , hooks: [ { type: command, command: cat .claude/project-context.txt | jq -Rs {output_to_claude: .} } ] } ] } }把项目约定写在.claude/project-context.txt里比如“本项目使用 TypeScript strict 模式所有函数必须有返回类型声明API 路由在 src/routes/ 下”。压缩后自动重新喂给 Claude。验证动作开一个长对话触发压缩后问 Claude“本项目用什么模式”看它是否答出 strict。加了这个 Hook 之后长对话中“跑偏”的频率降了不少。3.6 会话启动加载环境SessionStart每次开新会话都要交代项目背景用 SessionStart Hook 自动搞定{ hooks: { SessionStart: [ { matcher: , hooks: [ { type: command, command: echo {\output_to_claude\: \Node: $(node -v), Branch: $(git branch --show-current), 最近3条commit: $(git log --oneline -3 | tr \\n ; )\} } ] } ] } }这样 Claude 一启动就知道你在哪个分支、用什么版本、最近改了什么。验证动作新开一个会话直接问“当前在哪个分支”看它是否答对。4. 合并配置与逐条验证请求把上面 6 个 Hook 合到同一个settings.json只展示 hooks 部分{ hooks: { PostToolUse: [ { matcher: Edit|Write, hooks: [ { type: command, command: jq -r .tool_input.file_path | xargs npx prettier --write 2/dev/null || true } ] } ], PreToolUse: [ { matcher: Edit|Write, hooks: [ { type: command, command: jq -r .tool_input.file_path | grep -qE (\\.env\\.production|docker-compose\\.yml|\\.(github|gitlab)/) echo {\decision\: \block\, \reason\: \受保护文件\} || echo {\decision\: \allow\} } ] } ], Notification: [ { matcher: , hooks: [ { type: command, command: osascript -e display notification \Claude Code 等你回来\ with title \Claude Code\ } ] } ], Stop: [ { matcher: , hooks: [ { type: command, command: cd \$(jq -r .cwd)\ npm test --silent 21 | tail -20 | jq -Rs {output_to_claude: .} } ] } ], PostCompact: [ { matcher: , hooks: [ { type: command, command: cat .claude/project-context.txt | jq -Rs {output_to_claude: .} } ] } ], SessionStart: [ { matcher: , hooks: [ { type: command, command: echo {\output_to_claude\: \Node: $(node -v), Branch: $(git branch --show-current)\} } ] } ] } }合并后建议按顺序验证每条单独确认序号Hook验证动作预期结果1PostToolUse让 Claude 改乱一个 js 文件文件被自动格式化2PreToolUse让 Claude 改 CI 配置被拦截并提示3Notification跑一个等待任务并切走弹出系统通知4Stop改坏一个测试用例Claude 提到测试失败5PostCompact长对话压缩后问项目约定答出约定内容6SessionStart新会话问当前分支答对分支名如果某条没生效先看第 5 节的排查清单。想快速验证脚本本身逻辑可以先用 TaoToken 的模型对话把命令跑通再贴回配置。5. 本篇常见错排查用 Hooks 这几个月踩过一些坑按出现频率排一下。jq 没装或版本太老。Hooks 输入输出走 JSONjq是刚需。没装的话 Hook 会静默失败排查半天找不到原因。先跑jq --version确认。命令超时默认 10 秒。如果 Hook 执行时间长比如全量跑测试可能被杀掉。长任务建议用异步 Hook 或只跑增量测试。stderr 输出被吞掉。Hook 的 stderr 不会显示在 Claude 界面里。调试时把 stderr 重定向到文件your_command 2/tmp/hook-debug.log配置改完没重启。修改settings.json后当前会话不会自动加载新 Hook需要退出重新进。路径问题。Hook 里的相对路径是相对于 Claude Code 启动目录的不是settings.json的位置。跨项目用的 Hook 建议写绝对路径。matcher 写错。Edit|Write是正则别写成Edit,Write。空字符串表示匹配所有。JSON 转义踩坑。命令里嵌套 JSON 时引号容易出错建议先在终端单独跑一遍命令确认输出是合法 JSON 再贴进配置。6. 把重复操作交给 Hook把注意力留给逻辑Hooks 的思路很简单把重复的操作自动化把危险的操作拦住把重要的信息自动喂给 Claude。上面 6 个配置覆盖了最常见的场景你可以直接复制到自己的settings.json改改路径和命令就能用。如果你还在调模型接入建议先用 TaoToken 的模型对话把脚本逻辑验证一遍再落到本地 Hook长期做编码和 Agent 任务的话Coding Plan 更适合持续跑需要生成和管理 Key 就去控制台 API Keys 页面接入细节看接入文档。把配置跑通之后每天省下的那 30 分钟才是真正属于你自己的时间。

相关推荐

Developer Express .NET 下 ribbonPageGroup 获取成员控件值:TaoToken 统一 Key 配置与验证
Developer Express .NET 下 ribbonPageGroup 获取成员控件值:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:19:10

2024码支付PHP网站源码实战:部署流程与回调机制详解
2024码支付PHP网站源码实战:部署流程与回调机制详解

简介:2024码支付系统PHP网站源码,是一套全开源的在线支付解决方案,面向需要快速搭建支付平台的技术人员或站长,支持支付宝与QQ两大主流支付渠道。系统内置免挂支付机制,无需持续在线即可自动处理交易,附带监… · 2026/9/26 3:19:04

无DWM的Windows 8.1:关闭桌面合成还原Basic模式实操
无DWM的Windows 8.1:关闭桌面合成还原Basic模式实操

这次我们来看一个不算常见,但折腾过 Windows 7/8 老机器的同学一定感兴趣的话题:Windows 8.1 在没有 DWM(Desktop Window Manager)的情况下,到底会变成什么样?DWM 是 Windows 从 Vista 开始引入的桌面合成机… · 2026/9/26 3:19:04

豆包公式导出全攻略:从LaTeX到Word、图片与Markdown的完整指南
豆包公式导出全攻略:从LaTeX到Word、图片与Markdown的完整指南

上学时最怕什么?数学老师突然让交带公式排版的作业,我当年用公式编辑器一个个点,一个分式能折腾半小时。现在有了豆包这类AI助手,公式基本是“说几句话就出来”,但很多朋友卡在最后一步:公式生成之后怎么导… · 2026/9/26 3:55:41

基于微信小程序的培训咨询管理系统设计与实现
基于微信小程序的培训咨询管理系统设计与实现

从接触微信小程序开发到现在,我经手过不少面向机构内部的业务系统,“培训咨询管理系统”算是这类需求里非常典型的一个。不管是职业技能培训机构、企业内训部门,还是在线教育工作室,核心流程都绕不开“学员咨询-课程展示-报名缴费… · 2026/9/26 3:55:35

C语言子集词法分析器实验:手工状态机实现与符号表管理
C语言子集词法分析器实验:手工状态机实现与符号表管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:55:35

Nginx核心功能详解:反向代理、负载均衡与性能调优实践
Nginx核心功能详解:反向代理、负载均衡与性能调优实践

做了这么多年后端和运维,我越来越觉得Nginx就是一套行走的架构课。不管是刚入门的新人,还是带过线上集群的老手,最终都会绕回同一件事:把 Nginx 的核心功能吃透。它不只是“一个 Web 服务器”,更是静态资源托管、反向代… · 2026/9/26 3:55:29

维普能过的8款降AI率工具打分实测
维普能过的8款降AI率工具打分实测

维普系统升级后,AI生成文本检测成了论文盲审前的硬门槛。不少学生反馈"自己写的段落也被判AI",降AI率从可选项变成了必选项。花了三周时间,把市面上讨论度较高的8款降AI率工具逐个跑了一遍,用同一篇1.2万字的经管类论文… · 2026/9/26 3:55:29

Go 内存语义详解:Stack、Heap、Escape Analysis
Go 内存语义详解:Stack、Heap、Escape Analysis

Go 内存语义详解:Stack、Heap、Escape Analysis内存分配是 Go 的"暗物质"。理解 stack vs heap 与逃逸分析,能让你避开 80% 性能坑。一、栈与堆的区别 栈:函数局部变量,函数结束自动回收 堆:需要 GC 回收 fu… · 2026/9/26 3:55:29

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码