ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

下一代智能代理架构:Agent Skills 与 AGENTS.md 的深度技术解析与生态演进报告

下一代智能代理架构:Agent Skills 与 AGENTS.md 的深度技术解析与生态演进报告 1. 从提示词堆叠到代理架构AGENTS.md 与 Agent Skills 到底解决什么问题如果你最近在折腾 Claude Code、Cursor、Cline 或者 Codex 这类编码代理大概率会遇到两个绕不开的词AGENTS.md 和 Agent Skills。前者被叫做“给机器人看的 README”后者被 Anthropic 那套体系推成了“可执行技能包”。它们不是同一个层面的东西但经常被混在一起聊导致很多人在配置时把该写进 AGENTS.md 的规则塞进了 Skill或者反过来把该做成脚本的能力硬写成一段提示词。先说清楚这两个概念是什么、能做什么、适合谁。AGENTS.md 是一个放在仓库里的 Markdown 文件用自然语言描述这个项目的角色、技术栈、构建命令、禁止事项和目录约定。它的作用是上下文治理——让代理在动手之前就知道“这个项目是什么规矩”。适合所有需要让 AI 参与编码的团队成本极低收益直接。Agent Skills 是一组带 SKILL.md 的文件夹里面可以放脚本、模板和参考文档。它的作用是能力执行——把高频、高确定性、需要多步操作的任务封装成代理可以按需加载的模块。适合有重复性复杂流程的团队比如报表生成、数据清洗、API 编排。我试过在一个中型前端仓库里同时用这两套东西AGENTS.md 管住“别乱改 core 目录、必须用 pnpm、禁止 any 类型”Skill 负责“把 Figma 导出的 JSON 转成组件骨架”。结果就是代理不再每次重新猜项目规范也不再临时写一堆一次性脚本。下面按可跟做的顺序把配置、注册、验证和排障完整走一遍。2. TaoToken 统一通道前置一把 Key 打通多工具代理编排多工具代理编排最烦的事情之一是每个工具都要单独配一套凭证和 Base URL。Claude Code 一套、Cline 一套、Codex 又一套换模型还得改配置。TaoToken 在这里的角色是统一 Key/API 通道你拿到一个 Key把 Base URL 指向https://taotoken.net/api就能在多个代理工具里复用同一套接入信息。这一步不是可选项。因为后面验证 Agent Skills 加载和调用链路时你需要一个稳定的模型入口来观察代理是否真的读到了 SKILL.md、是否真的执行了脚本。如果每个工具各配各的排障时根本分不清是 Skill 没加载还是 Key 配错了。具体操作打开https://taotoken.net/api-keys创建一个 API Key。建议按用途命名比如agent-skills-test方便后面在多个工具里区分。创建后复制出来只显示一次。然后确认你要用的模型 ID。在模型对话页面https://taotoken.net/model-chat可以先手动发一条消息确认 Key 和模型都通。这一步别跳过很多人后面报 401 其实是 Key 复制时带了空格。接入文档在https://taotoken.net/doc里面有各工具的 Base URL 填法。核心就三件套配置项值Base URLhttps://taotoken.net/apiAPI Key你在 api-keys 页面创建的那串Model ID按工具要求填比如claude-sonnet-4-20250514或对应模型标识如果你用的是 Claude Code 这类需要 Anthropic 兼容入口的工具参考https://taotoken.net/claude-code-anthropic的说明配置。长期跑编码和 Agent 任务的话Coding Plan 页面https://taotoken.net/coding-plan有更划算的额度方案适合把 Skill 调用链跑在稳定通道上。注意Base URL 末尾不要多加/v1或斜杠不同工具对路径拼接的处理不一样多写反而容易 404。以接入文档里的写法为准。3. 可复制配置AGENTS.md 模板 Agent Skills 注册示例这一节给两份可以直接抄的东西。第一份是 AGENTS.md 模板第二份是 Skill 的目录结构和 SKILL.md 注册示例。两份都按真实项目改过不是示意。3.1 AGENTS.md 配置模板放在仓库根目录文件名就是AGENTS.md。内容按模块写代理读起来更稳。# AGENTS.md ## 角色定义 你是一个专注于 TypeScript 5.x 和 React 18 的前端工程师。 项目使用 Next.js 14 App Router包管理器为 pnpm。 ## 技术栈版本 - Node.js: 20.x - TypeScript: 5.4 - React: 18.3 - Tailwind CSS: 3.4 ## 操作指令 - 安装依赖: pnpm install - 构建: pnpm build - 单元测试: pnpm test:unit - 格式化: pnpm lint --fix ## 行为边界 - 绝不要在代码中硬编码 API Key始终使用环境变量。 - 绝不要修改 src/core 目录下的文件除非用户显式授权。 - 绝不要使用 any 类型必须定义完整接口。 - 绝不要引入新的状态管理库项目统一使用 Zustand。 ## 目录约定 - src/app: 路由与页面 - src/components: 可复用组件 - src/core: 底层逻辑禁止随意改动 - src/skills: 代理技能目录这份模板的关键在于“否定约束”写得具体。代理在生成代码时会做概率剪枝你写“不要用 any”比写“注意类型安全”有效得多。3.2 Agent Skills 目录结构与注册Skill 放在src/skills/下每个技能一个文件夹。以“把 JSON 数据转成 Markdown 报表”为例src/skills/json-to-report/ ├── SKILL.md ├── scripts/ │ └── convert.py ├── templates/ │ └── report_template.md └── references/ └── field_mapping.mdSKILL.md 的 Frontmatter 是发现层代理只读这里就知道有这个能力--- name: json-to-report description: 将结构化 JSON 数据转换为 Markdown 格式的报表支持字段映射和模板渲染。当用户需要生成数据报表时使用此技能。 --- ## 使用步骤 1. 确认输入 JSON 的字段结构。 2. 参考 references/field_mapping.md 做字段映射。 3. 运行 scripts/convert.py 生成报表。 4. 使用 templates/report_template.md 渲染最终输出。 ## 脚本调用 python scripts/convert.py --input data.json --output report.md这里体现的是渐进式披露代理先只看到 name 和 description决定要用之后才加载正文执行时才跑脚本。这样不会一上来就把所有技能内容塞进上下文。3.3 工具侧配置片段如果你用 Cline 或类似支持 MCP 的工具配置里需要同时写清 Base URL、Key 和 Model ID。以 settings JSON 为例{ apiProvider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的Key, modelId: claude-sonnet-4-20250514, agentSkillsPath: ./src/skills, agentsMdPath: ./AGENTS.md }Codex 用户如果走auth.json结构类似{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: claude-sonnet-4-20250514 }三件套缺一不可。只填 Base URL 不填 Model ID代理会回落到默认模型Skill 调用可能因为模型能力差异失败。4. 验证请求确认技能加载与调用链路真的通了配置写完不代表生效。这一节给可执行的验证步骤从“代理是否读到 AGENTS.md”到“Skill 脚本是否真的被执行”逐层确认。第一步验证 AGENTS.md 被加载。在代理对话里问一个只有读了 AGENTS.md 才能答对的问题这个项目用什么包管理器core 目录能不能改如果代理回答 pnpm 且明确说 core 目录不能随意改说明 AGENTS.md 注入成功。如果它开始猜或者答 npm说明文件没被读到检查路径和文件名大小写。第二步验证 Skill 被发现。问你有哪些可用的技能代理应该列出json-to-report及其 description。如果没列出来检查 SKILL.md 的 Frontmatter 格式name和description必须存在且 description 要写清触发场景。第三步验证 Skill 被调用。给一段测试 JSON{month: 2025-01, revenue: 120000, cost: 45000}然后说“用 json-to-report 技能生成报表”。观察代理是否按 SKILL.md 的步骤走先读 field_mapping再跑 convert.py最后用模板渲染。第四步验证脚本执行结果。检查输出目录是否真的生成了report.md内容是否包含映射后的字段。这一步是硬验证代理说“已完成”不算数文件存在才算。如果脚本没跑常见原因是沙箱权限或路径问题。确认scripts/convert.py有可执行权限且 SKILL.md 里的调用路径是相对技能目录的。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth排障部分按真实报错来。这些是我在配多工具代理时实际撞过的。401 Unauthorized最常见。九成是 Key 复制时带了首尾空格或者用了已删除的 Key。去https://taotoken.net/api-keys重新生成一个粘贴时注意别多选空格。另一个可能是 Base URL 写成了https://taotoken.net/api/带尾斜杠某些工具拼接后变成双斜杠导致鉴权失败。local proxy failed这个报错通常出现在工具试图走本地代理但配置不完整时。检查你的工具配置里是否误开了本地代理选项或者 Base URL 被写成了localhost相关地址。正确做法是 Base URL 直接指向https://taotoken.net/api不要经过任何本地转发层。reading choices 报错一般是响应格式和工具预期不匹配。比如工具按 OpenAI 格式解析但返回结构里没有choices字段。确认你选的 Model ID 和工具的 API 协议一致。如果工具要求 Anthropic 协议参考https://taotoken.net/claude-code-anthropic的配置方式。OAuth 相关报错有些工具默认走 OAuth 登录流程但你用的是 API Key 模式。需要在工具设置里把认证方式从 OAuth 切换为 API Key然后填入三件套。切换后重启工具让配置重新加载。Skill 加载了但脚本不执行检查 SKILL.md 里脚本路径是否相对于技能目录。如果写成了绝对路径换到另一台机器就失效。另外确认脚本依赖已安装比如 Python 的第三方库。AGENTS.md 和 Skill 冲突如果 AGENTS.md 里写了“禁止运行外部脚本”而 Skill 需要跑脚本代理会卡住。解决办法是在 AGENTS.md 里加例外说明比如“src/skills 目录下的脚本允许执行”。6. 语义一致收尾把统一通道用成代理编排的底座回到开头那个判断AGENTS.md 管软约束Agent Skills 管硬能力两者不是替代关系。AGENTS.md 让代理知道规矩Skill 让代理有确定性的执行手段。多工具编排时真正省事的是把模型入口统一到一套 Key/API 通道上这样换工具不用换凭证排障时也能快速定位是配置问题还是技能问题。如果你还在逐个工具配 Key建议先去https://taotoken.net/api-keys建一个专用 Key把 Base URL 统一成https://taotoken.net/api。验证模型通不通可以直接在https://taotoken.net/model-chat发一条消息。接入细节看https://taotoken.net/doc。长期跑编码和 Agent 任务的话https://taotoken.net/coding-plan的额度方案比按次调用更稳。最后给一个实用技巧把 AGENTS.md 里“操作指令”那一段和 Skill 的脚本调用命令保持一致。比如 AGENTS.md 写pnpm test:unitSkill 里就别写npm run test。代理在自我纠正时会交叉引用这两处命令不一致会让它反复试错。这个坑我踩过改一致之后调用链一次就通。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进