1. Skill 不生效的真实场景:Agent 为什么像没看见你的技能
你写完一个 Skill,本地逻辑跑通了,脚本也能执行,结果一交给 Agent 就石沉大海。你问它为什么不调用,它回你一句「我没有这个技能」。换模型、重启会话、重装插件,折腾一圈还是不行。
我试过帮人排查这类问题,十次里有九次不是模型的问题,而是 SKILL.md 本身没写对。Agent 在决定要不要调用一个 Skill 时,不会去运行你的代码,它只会读你写在文件里的元数据和描述。描述含糊、结构不对、字段缺失,它就当这个 Skill 不存在。
这篇文章聚焦 Claude Agent Skill 加载失败排查,从 SKILL.md 的 YAML Front Matter 字段格式、目录层级、命名规范到触发条件逐项定位。你会拿到一份可复制的 SKILL.md 模板和 front matter 校验清单,并且通过 TaoToken 统一 Key/API 通道完成一次真实的 Skill 调用验证,确认配置到底有没有生效。
适合谁看:刚写完第一个 Skill 但跑不起来的新手;Skill 能触发但结果不稳定的开发者;需要在多个平台复用同一套 Skill 的人。核心检索词就三个:Skill、SKILL.md、YAML Front Matter。搞懂这三样,大部分「不生效」都能自己定位。
先说结论:Skill 不生效,90% 出在描述和结构上,不是 AI 不行。下面按五个最容易犯的错误逐个拆,每个都配可复制的写法和排查动作。
2. TaoToken 统一 Key 通道前置准备:让 Skill 调用有稳定的模型出口
在排查 Skill 之前,得先保证你的 Agent 有一个能正常工作的模型通道。很多人 Skill 写对了,但模型请求本身就不通,结果误判成 Skill 不生效。这里用 TaoToken 统一 Key 通道做前置,把模型出口先固定下来。
TaoToken 是一个统一 Key/API 通道,官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。它的作用是让你用一套 Key 就能访问多种模型,不用为每个模型单独配一套凭证。对 Skill 调试来说,这点很关键:你换模型验证 Skill 时,不用改一堆配置。
前置准备分三步。第一步,拿到 API Key。登录后进入控制台,在 API Keys 页面创建一个新 Key,复制保存。第二步,确认 Base URL。所有请求走 https://taotoken.net/api 这个入口。第三步,选定 Model ID。你要在配置里明确写清楚用哪个模型,比如 claude 系列或其它支持的模型。
这里有个新手常踩的坑:只填了 Key 没填 Base URL,或者 Base URL 填成了官网首页。官网首页是给人看的,API 请求必须打到 /api 路径。两者别混。
如果你用的是 Claude Code 这类工具,配置通常写在 settings 文件里;如果用 Cline 或带 MCP 的客户端,配置写在对应的 JSON 里;如果用 Codex 系工具,认证信息可能落在 auth.json。不管哪种,三件套必须齐全:Base URL、API Key、Model ID。缺一个,请求就失败,而失败的表现有时候会被误读成 Skill 没触发。
我建议在正式排查 Skill 前,先用一个最简单的对话请求确认通道是通的。通道不通,后面所有 Skill 排查都是白费。通道通了,再去看 SKILL.md,问题范围立刻缩小一半。
另外提醒一句:不要把生产数据库直连到 Skill 里做测试,也不要用来源不明的中转服务。统一走官方 API 入口,凭证管理清晰,排查时变量才可控。
3. 可复制配置:SKILL.md 模板与 front matter 校验清单
这一节是全文的核心,直接给你能复制粘贴的东西。先看目录结构,再看 SKILL.md 模板,最后是 front matter 校验清单。
一个规范的 Skill 是一个文件夹,结构如下:
refund-order/ ├── SKILL.md ← 核心文件,说明与执行逻辑 ├── scripts/ ← 需要执行的脚本(可选) └── references/ ← 补充参考文档(可选)初学者一个 SKILL.md 就够。但恰恰是这个文件,大部分人写错。SKILL.md 必须以 YAML Front Matter 开头,也就是两个---之间的部分。缺少这个头部,Agent 根本不认这是 Skill 文件。
下面是一份可复制的 SKILL.md 模板:
--- name: refund-order description: > 当用户明确提出要退款,且订单处于「处理中」或「未发货」状态时调用。 已完成、已评价的订单不支持退款,遇到这类订单直接返回不支持原因。 退款成功返回退款单号,失败返回具体错误原因。 触发词:退款、我要退、申请退款、退钱。 --- ## 执行流程 1. 调用订单查询接口,获取订单当前状态。 2. 判断订单状态: - 如果是「处理中」或「未发货」→ 执行退款。 - 如果是「已完成」或「已评价」→ 返回「该订单不支持退款」。 3. 退款成功后,返回退款单号。 4. 退款失败,返回具体错误原因。 ## 边界说明 - 只处理单个订单退款,不处理批量退款。 - 不修改订单其它字段,只做退款动作。注意几个细节。name字段的值必须和文件夹名称完全一致,包括大小写。上面文件夹叫refund-order,name 也必须是refund-order,写成RefundOrder或refund_order都可能识别不到。YAML 对缩进极其敏感,一律用空格,不要用 Tab。三个---一个都不能少,开头一个,结尾一个。
front matter 校验清单,逐项对照:
| 序号 | 检查项 | 怎么查 |
|---|---|---|
| 1 | YAML Front Matter 是否存在 | 打开 SKILL.md,看开头有没有--- |
| 2 | name 是否和文件夹名一致 | 对比name:后的值和文件夹名称,含大小写 |
| 3 | description 是否含触发条件与边界 | 看有没有「什么时候用」和「什么时候不能用」 |
| 4 | 一个 Skill 是否只干一件事 | 试着用一句话说清功能,说不清就拆 |
| 5 | 执行逻辑是否含判断与分支 | 看有没有「如果…就…否则…」这类逻辑 |
| 6 | 目标平台是否支持调用的工具 | 在目标平台单独测试工具调用 |
description 是最容易写废的字段。很多人写成「处理订单」四个字,Agent 看到这四个字根本不知道是退款、改地址还是查物流,只能靠猜。正确写法要覆盖三件事:什么时候用、什么时候不能用、返回什么结果。把触发词也写进去,命中率会明显提升。
还有一个高频错误:一个 Skill 塞太多功能。有人写「用户管理」,同时包含查、改、删、发通知。Agent 调用时不知道当前该走哪个分支,上下文被搞混,最后超时什么都没输出。Skill 的定位是单一职责,一件事一个 Skill。用一句话说不清,就说明该拆。
最后,别把 Skill 写成操作手册。操作手册是「第一步、第二步、第三步」,执行规范是「判断条件 + 分支处理」。前者结果不稳定,同一个输入有时对有时错;后者才可复现。写清楚判断逻辑,比写清楚步骤更重要。
4. 验证请求与成功结果:用 TaoToken 通道跑一次 Skill 调用
配置写好了,得验证。验证分两层:先确认模型通道通,再确认 Skill 被正确触发。
第一层,用 TaoToken 通道发一个最小请求。以 curl 为例:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-3-5-sonnet", "messages": [ {"role": "user", "content": "你好,请回复 ok"} ] }'把$TAOTOKEN_API_KEY换成你在控制台创建的 Key,model换成你实际选定的 Model ID。如果返回里有正常的choices字段和内容,说明通道是通的。如果返回 401,说明 Key 有问题;如果返回连接错误,说明 Base URL 或网络出口有问题。这一步过了,再进第二层。
第二层,验证 Skill 触发。在 Agent 里输入一个明确命中触发词的请求,比如「我要退款,订单号 12345」。观察 Agent 的行为:它有没有读取 SKILL.md、有没有按执行流程走、有没有返回退款单号或边界提示。
成功的结果长这样:Agent 识别到退款意图,调用 refund-order 这个 Skill,先查订单状态,判断符合条件后执行退款,最后返回一个退款单号。如果订单是「已完成」状态,它应该返回「该订单不支持退款」,而不是硬着头皮执行。
如果 Skill 没被触发,先别改逻辑,回到 front matter 检查。把 description 里的触发词再明确一遍,确认 name 和文件夹一致,确认三个---都在。很多时候改完这几处,Skill 立刻就活了。
验证时建议固定一个模型做对照。换模型排查会引入额外变量,你分不清是 Skill 的问题还是模型理解差异。通道固定、模型固定、输入固定,才能定位到底是哪一环出问题。
如果你需要长期跑编码类或 Agent 类任务,可以考虑用 Coding Plan 把调用额度固定下来,避免调试中途因为额度问题中断。验证模型本身的行为,用模型对话页面直接测更直观。接入细节和参数说明,看接入文档最准。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
排查时你会遇到几类典型报错,逐个对照。
401 Unauthorized。这是凭证问题。检查三处:API Key 是否复制完整、有没有多余空格;Base URL 是否写成 https://taotoken.net/api 而不是官网首页;请求头里Authorization: Bearer格式是否正确。Key 过期或删除了也会 401,去控制台重新生成一个。
local proxy failed。这通常出现在本地客户端配置了代理转发但目标地址不对的场景。检查你的客户端配置里 Base URL 是否指向了正确的 API 入口,端口有没有被占用,本地转发规则是否还指向已失效的地址。把配置改回官方 API 入口,重启客户端再试。
reading choices 相关报错。这类错误说明请求发出去了,但返回结构不符合预期。常见原因是 Model ID 写错,或者请求体格式不对。确认model字段的值是通道支持的模型标识,messages是标准数组结构。返回体里没有choices,多半是模型名不匹配或请求被拒。
OAuth 相关报错。如果你用的是带 OAuth 流程的客户端,认证过期会导致请求失败。重新走一遍授权,或者改用 API Key 方式认证。OAuth 和 API Key 是两套机制,别混用。用 Key 方式时,确认客户端没有强制走 OAuth。
再补一个高频问题:Skill 文件存在、目录也对,但 Agent 识别不到。回到第 3 节的校验清单,重点看 YAML Front Matter 是否存在、name 是否和文件夹一致。这两个占识别失败的大头。
还有一个隐蔽的坑:跨平台兼容性。同一个 Skill 在 Claude Code 上正常,换到别的客户端就不行。原因是不同平台支持的工具集有差异,某些工具调用在某个平台上不存在,会静默失败。解决办法是先明确目标平台,再针对性写;工具调用前先确认该平台是否支持;需要多平台复用时,每个平台都跑一遍。
排查顺序建议固定:先确认通道通(401 类问题),再确认 Skill 被识别(front matter 类问题),最后确认执行逻辑正确(分支与工具类问题)。顺序反了,你会在错误的地方浪费时间。
6. 语义一致收尾:把 Skill 当成程序来写
写 Skill 这件事,难的不是写代码,是写说明。AI 不会猜你的意图,你得把什么时候用、什么时候不能用、怎么执行、返回什么,全部写清楚,它才能正确调用。
下次 Skill 不生效,别急着怀疑模型。先打开 SKILL.md,对照第 3 节的校验清单过一遍:front matter 在不在、name 对不对、description 有没有边界、功能是不是单一、逻辑有没有分支。大部分问题都出在这几处。
通道层面,把 TaoToken 的三件套配齐:Base URL 用 https://taotoken.net/api ,Key 从控制台创建,Model ID 明确指定。需要创建和管理 Key 就去 API Keys 页面,接入参数看接入文档,验证模型行为用模型对话,长期编码任务用 Coding Plan。通道稳了,Skill 的问题才看得清。
最后留一个实用习惯:每写完一个 Skill,先用一句话向自己解释它是干嘛的。说不清,就说明还没拆干净。