
1. 为什么你的 Claude Skill 总是不触发很多人第一次写 Claude Skills 都会遇到同一个场景照着文档建了文件夹、写了 SKILL.md结果对话里问相关问题时 Claude 压根不激活这个技能或者激活了却按自己的理解乱做一通。我试过把一份自认为写得很详细的 Skill 丢进去Claude 全程无视最后发现根因是 description 写得太抽象模型扫描 frontmatter 时根本判断不出什么时候该用它。Claude Skills 本质上是给 AI 看的操作手册。它不是一个插件、不是一段提示词模板而是一个文件夹里面装着完成某类专项任务所需的说明、脚本、参考资料和素材。Claude 启动时会扫描所有已安装 Skill 的 YAML frontmatter只根据 description 决定是否激活只有被选中后SKILL.md 的正文才会被加载进上下文。这意味着两件事description 是触发的唯一开关正文写得再好没被触发就等于不存在。这套机制适合谁适合那些希望 Claude 按固定流程执行任务的开发者——比如每次代码审查都走同一套检查清单、每次生成周报都从固定几个数据源拉取、每次排查告警都按 Runbook 顺序调用工具。如果你只是偶尔问 Claude 几个问题Skill 的收益不明显但只要你有一类重复性任务Skill 就能把每次从零解释变成一次写好、次次复用。这篇会从 SKILL.md 骨架开始一路写到 settings.json 配置、MCP 工具接入以及用 TaoToken 统一 Key 和 API 通道把整条链路跑通。最后给出验证 Skill 是否真正生效的具体动作而不是只看它好像回复了。2. TaoToken 前置统一 Key 与 API 通道在写 Skill 之前先把模型调用通道理顺。Claude Skills 的执行依赖模型能力而模型请求需要 API Key 和稳定的接入地址。TaoToken 在这里扮演的角色是统一入口你可以在一个控制台里管理 Key、查看用量、切换模型不用为每个实验单独配一套环境。具体要准备三样东西第一一个可用的 API Key。进入控制台创建复制出来保存好后面 settings.json 和脚本里都要用。地址是 https://taotoken.net/api Key 管理页面在 console 里。第二确认接入文档里的请求格式。不同工具对 base_url 和鉴权头的写法略有差异接入文档里有对照说明建议先扫一遍再动手能省掉很多401 到底是 Key 错还是头写错的排查时间。第三想清楚你要用哪种模式。如果只是验证 Skill 触发和单次任务用模型对话就够了如果你要长期跑编码类 Skill、让 Agent 反复调用工具那 Coding Plan 更合适额度和调用方式都按持续使用设计。注意Key 不要硬编码进 SKILL.md 正文。Skill 正文会被加载进上下文把密钥写进去等于每次对话都把它暴露一遍。正确做法是放在 settings.json 或环境变量里Skill 正文只写从环境变量读取。这一步做完你手里应该有一个 Key、一个确认过的 base_url、一个明确的调用模式。接下来才是写 Skill 本身。3. 可复制的 SKILL.md 骨架与 settings.json 配置先给一个最小可用的目录结构。Skill 的唯一刚需文件是 SKILL.md其余按需添加code-reviewer/ ├── SKILL.md # 必需元信息 执行指令 ├── scripts/ # 可选预写好的可执行代码 ├── references/ # 可选AI 按需查阅的参考资料 └── assets/ # 可选直接用于产出的素材SKILL.md 分两部分。头部是 YAML frontmatter声明名称和用途正文是 Markdown 执行步骤。下面是一个代码审查 Skill 的骨架注意 description 写得足够具体包含触发场景关键词--- name: code-reviewer description: |- 对提交的代码进行结构化审查。当用户要求 review 代码、 检查 PR、审查 diff或提到看看这段逻辑有没有问题时激活。 不适用于纯格式调整或注释补充类请求。 --- ## 执行步骤 1. 读取用户提供的代码或 diff确认审查范围 2. 按以下清单逐项检查每项给出结论 - 边界条件空值、越界、并发写入 - 错误处理异常是否被吞掉、是否有兜底 - 资源释放文件句柄、连接、锁 - 命名与可读性是否存在误导性命名 3. 按严重等级标注阻断 / 建议 / 提示 4. 对每个阻断项给出最小修复示例 ## 输出格式 按严重等级分组每条包含位置、问题、修复建议。 不要输出与审查无关的背景介绍。这里的关键设计是写给 AI 看。对比一下人类写法本技能凝聚团队三年 review 经验秉持建设性沟通风格——AI 读到这句无法转化为具体动作每次输出都会漂移。而按清单逐项检查、按三级标注、给最小修复示例是可执行指令输出稳定。然后是 settings.json 配置片段把模型通道和 Skill 目录接上{ skills: { directory: .claude/skills, autoLoad: true }, model: { provider: taotoken, baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, model: claude-sonnet } }对应的环境变量在启动前设置export TAOTOKEN_API_KEY你的Key如果你要把 Skill 里的脚本也接上模型调用脚本里同样从环境变量读 Key不要写死。下面是一个 Python 脚本示例放在 scripts/ 目录下供 Skill 正文按需调用import os import requests API_KEY os.environ[TAOTOKEN_API_KEY] BASE_URL https://taotoken.net/api def ask(prompt: str) - str: resp requests.post( f{BASE_URL}/v1/messages, headers{ Authorization: fBearer {API_KEY}, Content-Type: application/json, }, json{ model: claude-sonnet, max_tokens: 1024, messages: [{role: user, content: prompt}], }, timeout60, ) resp.raise_for_status() return resp.json()[content][0][text] if __name__ __main__: print(ask(用一句话说明这个脚本的作用))渐进式披露是这套结构省钱的关键。frontmatter 始终加载正文只在触发后加载references/ 和 scripts/ 里的内容 Claude 按需读取。所以详细 API 文档、大段模板、历史数据都往子目录放别堆在 SKILL.md 正文里。4. 接入 MCP 工具并验证 Skill 是否生效Skill 和 MCP 是互补关系。MCP 负责连接——把 Claude 接到你的数据库、监控、工单系统提供工具调用能力Skill 负责知识——教 Claude 在什么场景下、按什么顺序、用哪些工具完成任务。没有 Skill 的 MCP用户连上了工具却不知道下一步做什么有 Skill 的 MCP工作流自动激活工具调用一致。假设你已经有一个 MCP Server 暴露了查询接口在 settings.json 里注册{ mcpServers: { internal-tools: { command: node, args: [./mcp-server/index.js], env: { TAOTOKEN_API_KEY: ${TAOTOKEN_API_KEY} } } } }然后在 SKILL.md 正文里明确写出工具调用顺序而不是笼统说使用可用工具## 执行步骤 1. 调用 internal-tools.query_metrics 获取最近 1 小时错误率 2. 若错误率 1%调用 internal-tools.fetch_logs 拉取对应时间窗日志 3. 按错误类型聚类输出 Top 3 根因假设 4. 每条假设附上对应日志片段作为证据现在到了最关键的一步验证 Skill 到底有没有生效。很多人以为 Claude 回复了相关内容就算生效其实可能只是模型自己答的Skill 根本没被加载。三个可操作的验证动作第一个动作看触发日志。在 settings.json 里开启 Skill 加载日志对话后检查日志里有没有出现该 Skill 的 name。没有出现说明 description 没匹配上回去改触发关键词。第二个动作故意问一个边界问题。比如你的 Skill 声明不适用于纯格式调整那就发一段只改缩进的代码看 Claude 是否拒绝激活。如果它还是走了审查流程说明 description 的排除条件没写清楚。第三个动作检查输出结构。Skill 正文里定义了按严重等级分组、每条含位置/问题/修复建议如果实际输出缺了某一项说明正文指令不够强或者被其他上下文覆盖了。这时候把输出格式要求写得更硬比如加上必须包含以下字段缺一不可。用模型对话快速验证单次触发用 Coding Plan 跑长期编码类 Skill 的稳定性两条路都走一遍你就能判断这个 Skill 是真生效还是看起来生效。5. 本篇常见错排查Skill 完全不触发。九成是 description 问题。检查三点有没有包含用户实际会说的关键词有没有写清楚适用和不适用场景name 和目录名是否一致。改完 description 后重启会话frontmatter 是启动时扫描的。触发了但输出每次不一样。正文里混入了人类向的模糊表述比如专业地全面地合理地。把这些换成可枚举的清单或明确的输出字段。AI 需要的是判断依据不是调性描述。脚本报 401 或 403。先确认环境变量有没有在启动 Claude 的同一个 shell 里 export子进程继承不到就会拿空值。再确认鉴权头格式和接入文档一致base_url 末尾不要多加斜杠。MCP 工具调用失败。检查 mcpServers 里的 command 路径是不是相对路径相对路径的基准目录容易搞错建议改成绝对路径或确认工作目录。env 里的变量引用语法${VAR}是否被你的运行环境支持不支持就直接写值但别提交到仓库。Skill 加载了但没调用 MCP。正文里只写了使用工具这种笼统指令。改成明确写出工具名和调用顺序Claude 才知道先调哪个、什么条件下调下一个。上下文被撑爆。把大段参考资料塞进了 SKILL.md 正文。移到 references/ 目录正文里只写需要时读取 references/xxx.md。渐进式披露的意义就在这里。6. 把 Skill 跑成长期工作流单次验证通过只是起点。真正让 Skill 产生价值的是把它变成团队可复用、可迭代的资产。几个实操建议把 Skill 目录放进 Git 仓库的.claude/skills/下团队共享个人实验放~/.claude/skills/。每次改完 SKILL.md用同一组测试问题回归一遍确认触发和输出都没退化。统计每个 Skill 的实际使用频率长期没人触发的直接删掉别让无效 Skill 占用扫描开销。如果你要让 Skill 里的脚本持续调用模型比如批量处理、定时任务用 Coding Plan 的额度模型更划算调用方式在 coding-plan 页面有说明。需要新建或轮换 Key 时去 api-keys 页面操作接入细节对照 doc 文档。Claude Code 相关的接入配置在 ClaudeCodeAnthropic 页面有专门说明。回到最开始那个问题Skill 不触发不是 AI 笨是手册没写对。description 决定它会不会被翻开正文决定翻开后干得对不对渐进式披露决定它翻得省不省。这三件事理顺了Claude 才会真正按你写的手册执行任务而不是每次自由发挥。