☰
Claude Code 自动调用 Skill 配置指南:settings.json 与 hook 实战
2026/9/27 20:08:26 网站建设 项目流程

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.md

SKILL.md的头部是 YAML front matter,description字段决定语义匹配。写法上要包含「做什么」和「什么时候用」两部分,比如:

--- 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_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_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里返回一个 JSON,action字段告诉 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 命中 → 强制调用指定 Skill;hook 没命中 → 回退到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不要带末尾斜杠,也不要带/v1,Claude 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_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。想先验证模型对话效果,用 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。长期跑编码和 Agent 任务,看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询