1. 每天早上重教一遍 AI,问题到底出在哪
如果你同时用 Claude Code 和 Cursor 写代码,大概率经历过这个循环:早上打开新会话,先花十分钟把项目背景、代码规范、提交信息格式、测试命令重新讲一遍;中午换个工具,再讲一遍;晚上开个新窗口排查 bug,又讲一遍。AI 本身不笨,它只是没有跨会话的长期记忆,每次对话都是从零开始的上下文。
Agent Skills 要解决的就是这件事。它不是一个新模型,也不是一个插件市场,而是一套约定:把可复用的工作方式写进一个叫 SKILL.md 的 Markdown 文件,放在约定目录里,支持该标准的工具会在合适的时机按需加载它。Claude Code、Cursor 等工具已经支持这套约定,你写一次,换工具还能继续用。
这篇不聊概念史,直接给一套能落地的配置:SKILL.md 的目录骨架长什么样、settings.json 里怎么把模型通道统一到 TaoToken、重启会话后怎么验证记忆真的命中了。适合已经在用 Claude Code 或 Cursor、但每天还在重复交代背景的开发者。如果你还没配过统一 API 通道,第 2 节会先把这块补齐,因为 Skills 要稳定触发,底层请求得先稳。
2. 前置:用 TaoToken 统一 Key 与 API 通道
Skills 的触发依赖工具正常发起模型请求。如果你在 Claude Code、Cursor 里各配一套 Key,换工具就要改配置,排查问题时也分不清是 Skill 没命中还是请求本身失败了。我试过把通道统一到 TaoToken,一个 Key 覆盖多个工具,配置只写一处。
先拿到 Key:打开 https://taotoken.net/api-keys ,登录后创建一个 API Key,复制保存。注意这个 Key 只在创建时完整显示一次,丢了就重建一个。
TaoToken 的 API 入口是 https://taotoken.net/api ,兼容常见的 OpenAI 风格请求格式,所以 Claude Code、Cursor 这类工具都能直接填。它的定位是统一的模型调用通道,不是替代你的编辑器,Skills 文件仍然存在你本地项目里,TaoToken 只负责把请求稳定送出去。
配置前先确认两件事:一是你的工具版本支持自定义 Base URL,二是本地能正常访问 https://taotoken.net/api 。如果公司网络有额外限制,先让运维放行域名,不要用任何非正规的网络手段,这类操作既不合规也不稳定。
3. 可复制配置:SKILL.md 骨架 + settings.json 片段
3.1 SKILL.md 的目录骨架
Skills 的核心是目录约定。推荐在项目根目录建一个.skills/文件夹,每个技能一个子目录,目录名用英文短横线,里面放一个SKILL.md:
your-project/ ├── .skills/ │ ├── daily-context/ │ │ └── SKILL.md │ ├── commit-style/ │ │ └── SKILL.md │ └── bug-triage/ │ └── SKILL.md ├── src/ └── settings.jsondaily-context就是解决"每天早上失忆"的那个技能。它的SKILL.md内容如下:
--- name: daily-context description: | 加载本项目的每日工作上下文。当用户提到「今天做什么」「继续昨天的」 「daily context」「项目背景」时使用此 skill。 --- # 每日上下文 ## 项目背景 - 项目名:替换成你的项目 - 技术栈:替换成你的技术栈,例如 TypeScript + Node 20 - 主分支:main,功能分支命名 feat/xxx、fix/xxx ## 固定工作流 1. 开始前先读 README 和最近 5 条 git log 2. 改动前先说明影响范围,再动手 3. 提交信息格式:type(scope): 描述,type 限 feat/fix/docs/refactor 4. 跑测试命令:npm run test,失败先贴报错再改 ## 输出约束 - 代码块必须标语言 - 不要用「简单来说」「说白了」这类套话 - 单条回复不超过 40 行,超了先问要不要继续两层结构要分清:frontmatter 里的name和description决定系统什么时候加载它,正文决定加载后 AI 按什么规则干活。description里写清楚触发词,命中率会明显提高。
3.2 settings.json 里的通道配置
在项目根目录的settings.json里,把模型请求指向 TaoToken。下面是一份可直接改的片段:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "skills": { "enabled": true, "paths": [".skills"] } }几个参数说明:ANTHROPIC_BASE_URL固定填https://taotoken.net/api,不要带路径后缀;ANTHROPIC_API_KEY填第 2 节拿到的 Key;skills.paths指向你放 SKILL.md 的目录,多个目录用数组并列。Cursor 里如果走的是 OpenAI 兼容配置,把字段名换成对应的base_url和api_key即可,值不变。
注意:Key 不要提交到 git。把
settings.json加进.gitignore,或者用环境变量注入,团队协作时尤其要养成这个习惯。
4. 验证:重启会话后记忆是否命中
配置写完不算完,得验证 Skill 真的被加载了。按下面三步走。
第一步,重启会话。完全退出 Claude Code 或 Cursor,重新打开项目,确保它重新读取了settings.json和.skills/目录。热重载不一定生效,重启最稳。
第二步,发一句触发语。不要直接问技术问题,先发一句能命中description的话,比如:
今天做什么,先加载一下项目上下文第三步,看返回。命中的表现是:AI 主动复述了项目背景、技术栈、提交格式这些它"本不该知道"的信息。如果它反问"你的项目是什么",说明 Skill 没加载。
再补一个更硬的验证方式,直接让它读文件确认:
请读取 .skills/daily-context/SKILL.md 并复述其中的提交信息格式正常返回应该包含type(scope): 描述和feat/fix/docs/refactor这几个关键词。这一步能区分两种情况:是 Skill 没被加载,还是加载了但触发词没匹配上。前者查settings.json的paths,后者改description里的触发词。
实测下来,把触发词写具体(比如加上"继续昨天的"这种口语说法)比只写"项目上下文"命中率高不少。
5. 本篇常见错排查
报错一:请求 401 或 invalid api key。先确认 Key 有没有复制完整,前后有没有多余空格。再确认ANTHROPIC_BASE_URL填的是https://taotoken.net/api,多写一个斜杠或路径都会导致鉴权失败。Key 泄露或丢失就去 https://taotoken.net/api-keys 重建。
报错二:Skill 完全不触发。九成是description写得太抽象。把触发词换成用户真实会说的话,比如把"项目相关"改成"今天做什么""继续昨天的"。另外确认.skills目录在项目根目录,且settings.json里的paths路径没写错。
报错三:改了 SKILL.md 但行为没变。Skills 通常在会话启动时加载,改完要重启会话。如果重启还不行,检查文件是不是存成了SKILL.md.txt,Windows 上很容易踩这个坑。
报错四:多个 Skill 互相打架。两个 Skill 都写了提交信息格式,AI 会随机选一个。解决办法是职责拆开:commit-style只管提交格式,daily-context只管背景和工作流,别让一个 Skill 什么都管。
报错五:上下文还是被塞满。说明你把太多规则堆进了单个 Skill。Skills 的价值是按需加载,单个文件控制在 500 到 2000 字,超了就拆成多个技能。
6. 把通道和技能都固定下来
到这一步,你手上应该有两样东西:一份能稳定发起请求的 TaoToken 通道配置,和一套按需加载的 SKILL.md 技能目录。前者保证请求不出岔子,后者保证 AI 每天开工时知道你的项目背景和规矩,不用你从头再讲一遍。
接下来按你的使用场景选下一步:如果还在调通道、接入报错没解决,先去 https://taotoken.net/api-keys 确认 Key 状态,再对照 https://taotoken.net/doc 检查参数;如果只是想先验证模型返回是否正常,用 https://taotoken.net/models 里的对话入口发一条测试消息最快;如果你打算长期在 Claude Code 里跑编码和 Agent 任务,直接看 https://taotoken.net/coding-plan ,把额度和通道一次配好,省得中途换配置打断工作流。
真正省时间的不是多写几个 Skill,而是把"每天重讲一遍"这件事从流程里彻底删掉。通道固定、技能固定,早上打开工具直接干活,这才是 Agent Skills 该有的样子。