ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Claude Code 扩展实战:自定义钩子与配置覆盖完整指南

Claude Code 扩展实战:自定义钩子与配置覆盖完整指南 Claude Code 扩展实战自定义钩子与配置覆盖完整指南【免费下载链接】claude-codeClaude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code每次提交前重复跑同一批检查、命令被钩子拦了却看不到原因这类摩擦用 Claude Code 扩展就能消掉自定义钩子、命令与配置覆盖三种机制帮你把它改造成自己的手感。读完本文你能独立完成第一个可用的 Claude Code 自定义钩子。 三个扩展入口一分钟看懂Claude Code 处理请求走的是同一条流水线解析意图 → 调用工具 → 返回结果。三个扩展入口分别卡在这条流水线的不同位置选错位置方案就会别扭。这就是 Claude Code hooks 的全部拦截点先花一分钟建个地图Claude Code 自定义钩子hooks卡在工具调用前后。PreToolUse 拦在调用前、PostToolUse 处理调用后是改行为的主力。自定义命令commands在命令层注册你自己的斜杠命令把固定流程收敛成一个入口。自定义命令开发就是写个 Markdown门槛最低。配置覆盖settings不改逻辑只改默认值——权限策略、沙箱、模型参数启动时生效。一句话记忆钩子管过程命令管入口配置管默认值。项目里就有现成参考示例钩子 examples/hooks/、hookify 插件的钩子配置 plugins/hookify/hooks/。入口触发时机典型场景上手难度自定义钩子每次工具调用前/后拦截 grep 建议 rg、结果后处理低约 20 行脚本自定义命令你输入 /命令 时打包“提交推送”等固定流程低-中写 Markdown配置覆盖会话启动加载配置时收紧权限、切换沙箱策略低改 JSON 字段 实战给 Bash 命令装上“安全闸门”案例固定为一条你大概率真会想要的规则Claude 要跑 grep 时提示它改用 rg。rg 在大仓库里通常快一个数量级而 Claude 的默认习惯常常先想到 grep——这正是 PreToolUse 钩子配置最典型的用法在命令真正执行前插一道闸门。全程 4 步项目自带同款实现可参考examples/hooks/。第一步写验证脚本20 行核心逻辑结论先说脚本读 stdin 的 JSON不是 Bash 就放行命中 grep 就往 stderr 打提示、以退出码 2 结束——退出码 2 是钩子的拦截信号这是整个机制的开关。import json, re, sys data json.load(sys.stdin) if data.get(tool_name) ! Bash: sys.exit(0) # 不是 Bash 工具直接放行 cmd data.get(tool_input, {}).get(command, ) if re.search(r^grep\b, cmd): print(建议改用 rg更快: rg pattern path, filesys.stderr) sys.exit(2) # 拦截stderr 内容会回传给 Claude这段在干什么读一次工具调用的 JSON只拦以 grep 开头的命令提示打到 stderr 供 Claude 看到。第二步本地空跑手动喂 JSON 看输出不启动 Claude 也能验证规则手动构造两段输入一段含 grep、一段不含看退出码是否符合预期。echo {tool_name:Bash,tool_input:{command:grep -r TODO src/}} | python3 validator.py; echo exit$? echo {tool_name:Bash,tool_input:{command:ls -la}} | python3 validator.py; echo exit$?预期第一行打印提示且exit2第二行静默且exit0——命中与放行两条路径都走通了。第三步三步绑定钩子配置把脚本挂上 PreToolUse只需要最小config.json加一条注册命令。注意command字段必须写脚本绝对路径——钩子执行时的工作目录不可靠。{ hooks: { PreToolUse: [ { matcher: Bash, hooks: [ { type: command, command: python3 /abs/path/validator.py } ] } ] } }这段在干什么matcher锁定 Bash 工具command指向你的脚本把/abs/path换成真实位置即可。claude config hooks add --config ./config.json执行后配置即注册也可以把上面hooks片段直接合并进项目.claude/settings.json随仓库分发下一节展开。第四步确认 PreToolUse 钩子生效重启会话让 Claude 执行一次含 grep 的查找比如“在代码里找 TODO”。预期行为原命令被拦截不会真正执行终端出现• 建议改用 rg更快: rg pattern pathClaude 收到 stderr 提示后通常会自行改用 rg 重试。三条都对上闸门就装好了。想临时放行把sys.exit(2)改成sys.exit(0)验证完再改回。让扩展走出个人终端随仓库分发。validator.py和config.json放进项目比如hooks/目录hooks 片段提交到.claude/settings.json。同事 clone 下来即生效不必再手动注册一遍——这是钩子从个人玩具变成团队规范的关键一步。升级后回归检查。Claude Code 或脚本升级后重跑那两条空跑命令确认退出码仍是 2/0再翻 CHANGELOG.md 看 hooks 有无相关变更。钩子是静默防线静默失效比报错更危险所以升级后必须主动验证一次。共享文档三要点。每条规则写清触发条件什么命令会命中、拦截原因为什么要拦、临时放行方式怎么跳过。缺了这三样同事被拦时的第一反应一定是删配置。⚠️ 五个高频坑速查即走排查顺序先确认脚本本地能跑再看退出码最后看配置。对号入座现象原因一句话解法钩子无响应不拦也不提示脚本根本没执行路径错、python3 不在 PATH、matcher 没匹配上工具名本地直接python3 /abs/path/validator.py确认能跑路径改绝对路径命令被拦但 Claude 看不到原因退出码语义用错只有 exit 2 拦截并把 stderr 回传exit 1 会被当成脚本报错提示一律打到 stderr拦截统一sys.exit(2)自己机器正常同事机器不生效脚本路径硬编码成个人家目录脚本入库配置里写仓库内、相对项目根的路径Claude 明显变慢、像被卡住钩子阻塞主流程脚本里发了网络请求或跑重逻辑钩子控制在 1 秒内重活挪出钩子Windows / WSL 下路径报错跨平台路径差异反斜杠、盘符、换行符处理不一致统一正斜杠用pathlib做路径拼接接下来挑一个做先写一个 PostToolUse 钩子把每次工具调用结果记到本地日志再把验证规则抽成单独配置文件加规则不用改代码。做完这两个Claude Code 扩展开发就算入门了。【免费下载链接】claude-codeClaude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表