尧图网站设计 尧图网站设计YAOTU DESIGN
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 是跑在终端里的 AI 编码工具,能执行日常任务、解释复杂代码、处理 Git 工作流;而 Claude Code 扩展开发就是让它适配你习惯的方式——用钩子拦截工具调用,用自定义命令封装固定流程。读完这篇 Claude Code 钩子教程,你能写出第一个 PreToolUse 钩子脚本,并把它和自定义命令组合成「提交前自动检查」这类工作流。 认识钩子机制:四种钩子类型与触发时机钩子(Hook)本质上是一段你自己的脚本,Claude Code 会在关键时刻自动把它拉起来执行。脚本从标准输入读到一个 JSON,里面写着工具名、工具参数这些上下文;处理完之后,用退出码告诉宿主自己的决定。整个过程不改动 Claude Code 本体,等于在工具执行前后插进了你自己的逻辑。四种钩子类型与触发时机如下:钩子类型触发时机典型用途PreToolUse工具调用前命令验证、危险操作拦截PostToolUse工具调用后结果处理、日志记录PreCommand命令解析前参数改写、上下文注入PostCommand命令执行后输出整理、状态同步四种类型里,PreToolUse 是最常用的,后面的教程就围绕它展开。第一步:Claude Code 扩展开发环境准备安装或更新 Claude Code,一条命令:npm install -g anthropic-ai/claude-code然后建一个独立目录放你的扩展,最小结构长这样:my-first-hook/ ├── validator.py └── config.json脚本可以放任意位置,但config.json里要能引用到它的绝对路径。更多安装选项见项目 README.md。第二步:写出第一个 PreToolUse 钩子脚本以「把 grep 命令自动换成更快的 rg」为例。钩子脚本干三件事:读 stdin 的 JSON、按规则判断、用退出码表态。最小骨架如下:#!/usr/bin/env python3 import json, sys def main(): data json.load(sys.stdin) # 钩子输入:JSON 从 stdin 读 if data.get(tool_name) ! Bash: sys.exit(0) # 不是 Bash,直接放行 command data[tool_input].get(command, ) if command.startswith(grep): print(建议用 rg 替代 grep, filesys.stderr) sys.exit(2) # 退出码 2 拦截,原命令不执行 sys.exit(0) # 退出码 0 放行 main()退出码是钩子机制里最重要的约定:0 放行,2 拦截;拦截时原命令不会执行,你打到 stderr 的信息会反馈给 Claude。接着把脚本挂到 PreToolUse 上,config.json长这样:{ hooks: { PreToolUse: [ { matcher: Bash, hooks: [ { type: command, command: python3 /abs/path/validator.py } ] } ] } }三个字段:matcher 匹配工具名,Bash 表示只拦 bash 调用;type 固定为 command;command 写脚本的绝对路径。最后注册配置:claude config hooks add --config ./config.json两个习惯值得养成:给 JSON 解析加上异常捕获,避免脚本自己崩掉把主流程卡死;钩子执行要快,别在里面做耗时的事。第三步:自定义命令与工作流组合自定义命令和钩子的分工不同:钩子被动触发,命令主动调用,适合统一入口触发一整段流程。一个最小示例:import { ClaudeCommand } from anthropic-ai/claude-code; export const formatCheck: ClaudeCommand { name: format-check, description: 提交前格式化检查, arguments: [{ name: file, description: 目标文件, required: true }], async execute(args) { return 检查并格式化: ${args.file}; } };两者搭起来,三种组合最常用:提交前让 PostToolUse 钩子跑格式化检查,发现没格式化的文件直接拦截;用一个命令解析本次改动,自动生成符合规范的提交信息;推送前用另一个命令串起测试套件,全绿才允许推。记住这个分工:钩子管拦截,命令管编排。排错与发布:钩子不生效时怎么查钩子不生效、或者行为不对时,先开调试模式看完整输出:claude --debug再往脚本开头加一行调试日志,确认钩子真的被调用了:print(fHook input: {data}, filesys.stderr)⚠️ 日志没出现,基本就两个原因:config.json 里写成了相对路径,或 matcher 和工具名对不上。本地跑通后再考虑分享:把脚本放进仓库的 examples/hooks/ 目录,风格对齐现有示例;写一份简短文档,说明配置字段和退出码约定;然后发到社区讨论区,让更多人看到你的 Claude Code 自定义命令方案。成熟后还可以做成插件,放进 plugins/ 目录。到这里,你已经能给 Claude Code 加上自己的规则:钩子在关键时刻拦一刀,命令把流程串起来。后续可以往三个方向深入:解析更复杂的命令参数、让多个钩子按顺序协同、对接外部 API 把检查结果写回 CI。【免费下载链接】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),仅供参考
返回列表