Claude Code 自动调用 Skill 配置指南:settings.json 与 hook 实战

📅 发布时间:2026/9/27 20:08:40
Claude Code 自动调用 Skill 配置指南:settings.json 与 hook 实战
1. 为什么 Claude Code 的 Skill 总是要手动敲斜杠用 Claude Code 写代码久了你大概率会攒下一堆 Skill生成 PRD 的、写单元测试的、做代码审查的、按团队规范生成 commit message 的。每个 Skill 都放在.claude/skills/skill-name/SKILL.md里description字段也认真写了触发条件但真到用的时候Claude Code 并不会主动帮你调起来。我自己的体验是明明description里写了「Use when the user asks to create a PRD」我说「帮我写个需求文档」它还是老老实实跟我聊天最后我得手动补一句/product-doc-generator才触发。这不是你配置写错了而是 Claude Code 对 Skill 的自动调用策略偏保守——它宁可漏触发也不愿意在你只想随便问一句的时候乱调 Skill。问题就出在这里Skill 的价值在于「工作流连贯」如果每次都要手动敲斜杠那它跟一个普通 prompt 模板没区别。这篇就聚焦一件事——怎么通过settings.json和hook让 Skill 在指定条件下自动被调用同时把模型通道统一到 TaoToken避免 Key 到处散落。适合谁看已经在用 Claude Code、本地有至少一个 Skill、想让「写需求文档」「生成测试」这类高频动作自动触发的人。如果你还没配过 Skill也能跟着走因为下面会把目录结构和最小可用配置一起给出来。先说清楚一个前提Skill 自动调用不是「配了就百分百触发」它本质是「匹配条件 优先级」的组合。description负责语义匹配hook负责关键词/路径匹配两者叠加才能把触发率拉上来。下面按这个思路一步步配。2. 前置准备Skill 目录、settings.json 与 TaoToken 通道在动settings.json之前先把三样东西确认好否则后面报错会很难定位。第一样是 Skill 本身。Claude Code 默认从项目根目录的.claude/skills/读取每个 Skill 一个子目录里面必须有SKILL.md。以产品需求文档为例路径是your-project/ ├── .claude/ │ ├── settings.json │ └── skills/ │ └── product-doc-generator/ │ └── SKILL.mdSKILL.md的头部是 YAML front matterdescription字段决定语义匹配。写法上要包含「做什么」和「什么时候用」两部分比如--- name: product-doc-generator description: Generate standardized product requirement documents (PRD) from feature descriptions. Use when the user asks to create a PRD, product document, or requirement specification. ---第二样是.claude/settings.json。如果项目里没有这个文件直接新建一个内容先放一个空对象{}保证 JSON 合法。这个文件是 hook 的落点也是权限、环境变量的集中配置处。第三样是模型通道。Claude Code 默认走 Anthropic 官方接口但很多团队希望统一 Key、统一计费、统一审计这时候用 TaoToken 做统一入口会省事很多。TaoToken 提供兼容 Anthropic 的 API 通道你只需要把 base URL 和 Key 配到环境变量里Claude Code 就会走这条通道Skill 调用、hook 触发都不受影响。TaoToken 官网入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 这个不加 UTM。Key 在控制台的 API Keys 页面生成接入文档里有 Claude Code 的具体环境变量写法。配好之后你的 Claude Code 请求路径就变成本地 Skill 匹配 → hook 判断 → 走 TaoToken 通道 → 返回结果。整条链路里Skill 自动调用和模型通道是两件独立的事分开调别混在一起排查。3. 可复制配置settings.json 骨架与 hook 片段这一节是核心直接给能抄的配置。先说明一点Claude Code 不同版本对 hook 事件名的支持有差异下面用的是社区里比较通用的hooks结构如果你的版本不认先降级到「description 手动斜杠」方案再对照版本升级。3.1 settings.json 完整骨架在.claude/settings.json里写入{ hooks: { UserPromptSubmit: [ { matcher: (?i)(写需求|生成PRD|产品文档|需求文档|requirement spec), hooks: [ { type: command, command: echo {\action\:\skill:product-doc-generator\} } ] } ] }, env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-your-taotoken-key } }这里有几个点要拆开讲。UserPromptSubmit是「用户提交输入时」触发的事件适合做关键词匹配。matcher是正则(?i)表示忽略大小写后面用|把多个触发词串起来。只要你的输入里出现「写需求」「生成PRD」这类词hook 就会命中。hooks数组里的type: command表示执行一条命令command里返回一个 JSONaction字段告诉 Claude Code 去调哪个 Skill。注意skill:后面跟的是 Skill 的name不是目录名两者最好保持一致避免歧义。env段把 TaoToken 的 base URL 和 Key 注入到 Claude Code 的运行环境。这样你不需要在 shell 里 export项目级配置就搞定了。Key 建议不要直接写死在文件里提交到 git可以用.claude/settings.local.json覆盖或者用环境变量引用。3.2 多 Skill 分流配置如果你有多个 Skill别把所有触发词塞进一个 matcher那样会互相抢。按 Skill 拆成多个 hook 条目{ hooks: { UserPromptSubmit: [ { matcher: (?i)(写需求|生成PRD|产品文档), hooks: [ { type: command, command: echo {\action\:\skill:product-doc-generator\} } ] }, { matcher: (?i)(写测试|生成单测|unit test), hooks: [ { type: command, command: echo {\action\:\skill:unit-test-writer\} } ] }, { matcher: (?i)(代码审查|review|检查代码), hooks: [ { type: command, command: echo {\action\:\skill:code-reviewer\} } ] } ] } }顺序有讲究Claude Code 一般按数组顺序匹配命中第一个就停。所以把更具体的触发词放前面宽泛的放后面。比如「写需求文档」和「写文档」同时存在时前者要排在前面否则会被后者截胡。3.3 按路径触发的 hook除了关键词还可以按文件路径触发。比如你打开docs/prd/下的文件时自动挂载 PRD Skill{ hooks: { UserPromptSubmit: [ { matcher: docs/prd/.*\\.md$, hooks: [ { type: command, command: echo {\action\:\skill:product-doc-generator\} } ] } ] } }路径匹配适合「在特定目录下工作时自动切换上下文」的场景比关键词更精准误触发率低。缺点是它依赖你当前编辑的文件路径如果 Claude Code 拿不到路径信息就不会命中。3.4 description 与 hook 的配合策略description和hook不是二选一而是叠加。description负责语义层hook 负责规则层。我的建议是description写清楚「做什么 什么时候用」覆盖同义表达比如 PRD、需求文档、requirement specification 都写上。hook 只放最高频、最明确的触发词不要把「文档」这种泛词放进去否则你问「这个函数文档在哪」也会触发 PRD Skill。两者叠加后触发逻辑是hook 命中 → 强制调用指定 Skillhook 没命中 → 回退到description语义匹配。这样既保证了高频场景的确定性又保留了语义匹配的灵活性。4. 验证 Skill 是否被自动调用配完不验证等于没配。这一节给一套可复现的验证流程。4.1 用最小输入触发打开 Claude Code在项目根目录下输入一句包含触发词的话比如帮我写个需求文档功能是用户登录支持手机号验证码如果 hook 生效你应该看到 Claude Code 在响应前先加载了product-doc-generatorSkill输出格式会带上 Skill 里定义的模板结构而不是自由发挥。判断依据有三个一是响应开头出现 Skill 名称或模板标题二是输出结构符合SKILL.md里定义的章节三是没有出现「我不确定要不要用 Skill」这类犹豫表述。4.2 用调试日志确认 hook 命中如果看不到明显变化打开 Claude Code 的调试输出。不同版本命令不同常见的是启动时加--debug或在设置里开 verbose。日志里会打印 hook 匹配过程类似[hook] UserPromptSubmit matched: (写需求|生成PRD|产品文档) [hook] action: skill:product-doc-generator [skill] loading product-doc-generator from .claude/skills/看到这三行说明 hook 和 Skill 加载都正常。如果只有第一行没有第二行说明command返回的 JSON 格式有问题重点检查引号转义。如果三行都有但输出没变化说明 Skill 加载了但没被应用检查SKILL.md的 front matter 是否合法。4.3 验证 TaoToken 通道生效Skill 触发和模型通道是两条线分开验证。在 Claude Code 里随便问一句然后看 TaoToken 控制台的调用记录。如果能看到对应的请求说明ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY配对了。看不到就检查两点一是 Key 是否有余额二是 base URL 是否写成了https://taotoken.net/api而不是带 UTM 的官网地址。这里有个容易踩的坑ANTHROPIC_BASE_URL不要带末尾斜杠也不要带/v1Claude Code 会自己拼路径。写错了会返回 404但报错信息不一定直白容易误判成 Key 问题。4.4 反向验证不该触发时不触发自动调用最怕误触发。验证完正向再验证反向输入一句不含触发词的话比如「这个函数是干嘛的」确认 Skill 没有被加载。如果被加载了说明你的 matcher 太宽回去收窄正则。5. 本篇常见错排查配 hook 的过程里报错集中在几类逐个说。第一类settings.json解析失败。表现是 Claude Code 启动时报 JSON parse error或者 hook 完全不生效。原因通常是多了一个逗号、少了一个引号或者用了单引号。JSON 不支持单引号也不支持注释。建议用编辑器格式化一遍再保存。第二类hook 命中但 Skill 没加载。表现是日志里有 matched但没有 loading。原因通常是action里的 Skill 名和SKILL.md的name不一致或者 Skill 目录不在.claude/skills/下。检查目录层级SKILL.md必须在 Skill 子目录里不能直接放在skills/下。第三类Skill 加载了但输出不符合预期。表现是 Claude Code 调了 Skill但输出还是自由格式。原因通常是SKILL.md的 front matter 格式错误比如---没闭合、description缩进不对。YAML 对缩进敏感用两个空格别用 Tab。第四类TaoToken 通道返回 401 或 403。表现是所有请求都失败跟 Skill 无关。原因是 Key 无效或没余额。去控制台 API Keys 页面重新生成一个替换ANTHROPIC_API_KEY。注意 Key 只在生成时显示一次没存就重新生成。第五类hook 触发太频繁。表现是你随便问一句都被塞进 Skill。原因是 matcher 太宽比如只写了「文档」两个字。收窄到「写需求文档」「生成PRD」这种组合词或者改用路径匹配。第六类不同 Claude Code 版本 hook 事件名不一致。表现是配置照抄但不生效。原因是UserPromptSubmit在部分版本里叫别的名字。这种情况先去接入文档确认当前版本支持的事件名别硬套。排查顺序建议先确认settings.json能解析再确认 hook 命中再确认 Skill 加载最后确认模型通道。一层一层来别跳步。6. 把 Key 和 Skill 都收拢到一条通道配到这里你的 Claude Code 应该能做到输入「写需求文档」自动触发 PRD Skill输入「写测试」自动触发单测 Skill模型请求统一走 TaoToken 通道。剩下的事情是把这个配置固化下来别每次换项目重配一遍。我的做法是把.claude/settings.json里的env段抽出来Key 用环境变量引用项目里只留 base URL。这样团队协作时每个人用自己的 Key配置结构一致。Skill 目录跟着项目走settings.json跟着项目走换机器只需要重新配一次 Key。如果你还在手动敲斜杠触发 Skill建议先从一个高频 Skill 开始配 hook跑通验证流程再逐步加。别一上来配十个出问题不好定位。配好之后日常编码里「写需求」「写测试」「审查代码」这些动作会顺很多不用再中断思路去敲命令。需要生成 Key 或查接入细节走这两个入口API Keys 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。想先验证模型对话效果用 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。长期跑编码和 Agent 任务看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。