ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

npx skills 与 openskills 技能管理对比:CLI 下 SKILL.md 加载机制与 TaoToken 接入实践

npx skills 与 openskills 技能管理对比:CLI 下 SKILL.md 加载机制与 TaoToken 接入实践 1. 先搞清楚 npx skills 和 openskills 到底在解决什么问题如果你最近在折腾 AI 编程代理大概率会遇到一个很具体的痛点同一个技能比如代码审查规范、提交信息生成、特定框架的脚手架约定在 Claude Code 里配好了换到 Cursor 又得重来一遍再换到 Codex 或 Windsurf 还得再抄一次。SKILL.md 这个开放格式本来是为了解决跨平台复用但真正落到 CLI 里技能怎么被发现、怎么被解析、怎么被加载进不同代理的上下文各家实现并不一样。npx skills 和 openskills 就是在这个缝隙里长出来的两个工具。前者是 Vercel 官方发布的多 Agent 技能包管理器核心命令是npx skills add package它把技能直接安装到各个 Agent 的专属目录比如.claude/skills/、.cursor/skills/并用符号链接做统一管理原生支持 17 种以上的 Agent。后者是社区开发者 Numman Ali 开源的 Claude Code 技能通用加载器核心命令是openskills install加openskills sync它生成一个AGENTS.md文件作为统一入口任何能读取这个文件的 Agent 都能调用技能专为非 Claude Code 代理设计。这篇文章面向的是已经在用 AI 编程代理、想搞清楚这两套 CLI 在技能发现和 SKILL.md 加载机制上到底差在哪的人。我会给出两套工具的安装命令、目录结构示例、技能加载验证步骤并且演示怎么把 API endpoint 统一改到 TaoToken 的通道上最后用同一个 SKILL.md 分别跑通对比输出差异。你跟着做就能复现。先说结论性的差异方便你建立预期npx skills 走的是「安装到各 Agent 专属目录 符号链接」的路线技能发现依赖 skills.sh 目录和搜索openskills 走的是「生成 AGENTS.md 统一入口 渐进式披露」的路线技能发现依赖 GitHub 仓库或本地路径。两者都遵循 SKILL.md 标准技能包本身通常兼容区别在管理和加载方式。2. 前置准备TaoToken 统一 Key 通道与 CLI 环境在对比两套工具之前得先把 API 通道统一掉。原因很实际npx skills 和 openskills 本身只是技能管理器它们不负责模型调用但技能跑起来最终要落到某个 Agent 上而 Agent 要调模型。如果你手上有多个 Agent、多个 Key验证技能加载时很容易把「技能没加载」和「Key 不通」两件事混在一起排查浪费时间。我试过的做法是先把模型通道收敛到一个 endpoint 上这样后面无论用哪个 Agent 跑 SKILL.md变量只剩技能加载这一个。TaoToken 在这里的角色就是统一 Key 通道官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 注意 API 地址不带 UTM 参数。你需要准备的东西不多一个可用的 API Key、Node.js 环境npx skills 依赖 npxopenskills 也建议 Node 18 以上、以及至少一个 AI 编程代理。Key 的获取在控制台里完成地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 创建后到 API Keys 页面复制地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。这里有个容易踩的坑很多人把 Base URL 写成https://taotoken.net/api/带尾斜杠或者写成https://taotoken.net/api/v1结果 Agent 报 404。正确的 Base URL 就是https://taotoken.net/api具体路径由各 Agent 自己拼接。Model ID 用你实际要调的模型标识比如claude-sonnet-4-5这类具体以控制台模型列表为准。环境变量建议统一命名方便后面切换export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你用的是 Claude Code 这类支持 settings 文件的工具可以写进配置文件而不是每次 export。下面这段是 Claude Code 的 settings 片段路径是~/.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key, ANTHROPIC_MODEL: claude-sonnet-4-5 } }注意这里三件套要写全Base URL、Key、Model ID。少任何一个Agent 要么连不上要么连上了但模型名不对报错。如果你用的是 Codex对应的是~/.codex/auth.json结构不同但同样是这三件套{ OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_API_KEY: sk-你的key, OPENAI_MODEL: gpt-5 }把通道统一之后后面验证技能加载时只要 Agent 能正常回话就说明通道没问题剩下的问题一定出在技能发现或 SKILL.md 解析上。这个隔离思路能帮你省掉大量排查时间。3. 可复制配置两套工具的安装与目录结构这一节是全文最需要动手的部分。我会分别给出 npx skills 和 openskills 的安装命令、目录结构以及一个可复制的 SKILL.md 示例确保你两边用的是同一个技能文件这样后面的对比才有意义。先看 npx skills。它不需要全局安装直接 npx 运行npx skills add vercel-labs/agent-skills执行后它会交互式让你选择要安装到哪些 Agent比如 Claude Code、Cursor、Codex 等。安装完成后技能会被放到各 Agent 的专属目录并用符号链接统一管理。典型的目录结构长这样项目根/ ├── .claude/ │ └── skills/ │ └── agent-skills - ../../.skills-store/agent-skills ├── .cursor/ │ └── skills/ │ └── agent-skills - ../../.skills-store/agent-skills └── .skills-store/ └── agent-skills/ └── SKILL.md符号链接的好处是更新一次、所有 Agent 同步生效。npx skills 还支持check和update这类生命周期命令用来检查技能状态和拉取更新。技能发现方面它支持 skills.sh 目录和搜索也就是说你可以按名字找技能包而不只是从 GitHub 仓库装。再看 openskills。它建议全局安装也可以 npx 直接用npm i -g openskills装完之后安装技能openskills install anthropics/skills然后关键的一步是生成统一入口openskills sync这条命令会生成AGENTS.md文件。任何能读取该文件的 Agent 都能调用技能这就是它「跨平台适配器」的核心。目录结构大致是项目根/ ├── AGENTS.md └── .openskills/ └── skills/ └── anthropics-skills/ └── SKILL.mdopenskills 强调渐进式披露按需加载技能内容不会一次性把所有技能塞进上下文。这对上下文窗口紧张的场景很友好。现在准备一个两边共用的 SKILL.md。放在项目里内容如下--- name: commit-helper description: 根据 git diff 生成符合 Conventional Commits 规范的提交信息 --- # Commit Helper 当用户要求生成提交信息时执行以下步骤 1. 运行 git diff --staged 获取暂存区改动 2. 分析改动类型feat / fix / docs / refactor / test / chore 3. 生成一行摘要不超过 72 字符 4. 如有必要补充 body 说明动机 输出格式 type(scope): subject body这个 SKILL.md 足够简单便于观察加载行为。你可以把它分别放进 npx skills 管理的目录和 openskills 管理的目录验证两边是否都能识别。如果你用的是 Cline 或带 MCP 的编辑器配置里同样要写全三件套。以 Cline 的 MCP 配置为例路径是cline_mcp_settings.json{ mcpServers: { taotoken: { command: npx, args: [-y, taotoken/mcp-server], env: { BASE_URL: https://taotoken.net/api, API_KEY: sk-你的key, MODEL_ID: claude-sonnet-4-5 } } } }注意 Base URL、API Key、Model ID 三件套一个都不能少。这段配置和前面的 settings 片段是同一个逻辑只是载体不同。4. 验证请求同一 SKILL.md 分别跑通并对比输出配置写完必须验证否则你不知道技能到底加载了没有。这一节我用同一个 commit-helper 技能分别在 npx skills 和 openskills 环境下触发观察输出差异。先验证 npx skills 环境。假设你已经用npx skills add把技能装到了 Claude Code 目录启动 Claude Code 后在项目里制造一点改动git add .然后对 Agent 说「用 commit-helper 生成提交信息」。如果技能加载成功Agent 会去跑git diff --staged然后按 Conventional Commits 格式输出。你会看到类似feat(skills): 新增 commit-helper 技能加载验证 补充 SKILL.md 示例用于对比 npx skills 与 openskills 的加载行为。如果 Agent 没有按格式输出而是泛泛地回一段话说明技能没被加载。这时候先检查.claude/skills/下的符号链接是否有效用ls -la看链接指向是否存在。再验证 openskills 环境。先确认AGENTS.md已生成cat AGENTS.md里面应该能看到对.openskills/skills/下技能的引用。然后在支持读取 AGENTS.md 的 Agent 里比如 Cursor同样说「用 commit-helper 生成提交信息」。openskills 的渐进式披露意味着它可能先加载技能元信息再按需读取正文所以第一次触发时可能多一步确认。对比下来两者的输出内容应该基本一致因为 SKILL.md 是同一个。差异体现在加载路径和时机npx skills 是「安装即就位」技能文件已经在 Agent 专属目录里Agent 启动时就能发现openskills 是「入口统一、按需加载」Agent 通过 AGENTS.md 知道有哪些技能真正用到时才读取 SKILL.md 正文。为了更直观我列个对照表维度npx skillsopenskills技能发现skills.sh 目录 搜索GitHub 仓库 / 本地路径加载入口各 Agent 专属目录AGENTS.md 统一入口加载时机启动即可发现渐进式披露按需读取更新方式check / update 生命周期重新 install sync适用场景多 Agent 统一管理非 Claude Code 代理适配验证时还有一个细节如果你把 Base URL 配错了比如写成https://taotoken.net/api/v1Agent 会在调用模型时报 404这时候技能加载其实是成功的别误判。区分方法很简单看报错内容——技能没加载是 Agent 行为不符合 SKILL.md 描述通道问题是明确的 HTTP 错误码。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节按真实报错来。你在配这两套工具加 TaoToken 通道时大概率会撞上下面几类问题我逐个给排查路径。第一类401 Unauthorized。这个最常见原因是 Key 没生效或写错位置。检查顺序先确认TAOTOKEN_API_KEY环境变量在当前 shell 里能 echo 出来再确认 Agent 的 settings 文件里 Key 字段名对不对Claude Code 用ANTHROPIC_API_KEYCodex 用OPENAI_API_KEY写混了就会 401。还有一种情况是 Key 复制时带了空格或换行肉眼看不出来建议重新从 API Keys 页面复制一次。第二类local proxy failed。这个报错通常出现在 Agent 尝试走本地代理但代理没起来的时候。如果你没有配任何本地代理检查一下环境里是不是残留了HTTP_PROXY或HTTPS_PROXY变量有的话 unset 掉。另外确认 Base URL 是https://taotoken.net/api不要带多余路径。第三类reading choices 相关报错比如Cannot read properties of undefined (reading choices)。这是响应结构不符合预期导致的根因往往是 Base URL 指向了错误的路径返回的不是标准 chat completions 结构。把 Base URL 改回https://taotoken.net/api让 Agent 自己拼/v1/chat/completions这类路径。同时确认 Model ID 是控制台里真实存在的模型模型名写错有时也会返回非预期结构。第四类OAuth 相关报错。有些 Agent 默认走 OAuth 登录流程如果你已经用 API Key 方式接入需要在配置里显式关闭 OAuth 或选择 API Key 模式。Claude Code 里如果同时存在 OAuth 凭证和 API Key可能优先走 OAuth导致请求没走你配的通道。检查~/.claude/下是否有旧的凭证文件必要时清理。第五类技能加载了但行为不对。这种不是通道问题而是 SKILL.md 解析差异。npx skills 和 openskills 对 frontmatter 的解析严格程度可能不同比如name和description字段缺失时一个可能跳过、一个可能报错。确保你的 SKILL.md frontmatter 完整--- name: commit-helper description: 根据 git diff 生成符合 Conventional Commits 规范的提交信息 ---排查时建议按「通道 → 技能发现 → SKILL.md 解析」的顺序隔离。先确认 Agent 能正常对话通道 OK再确认技能出现在 Agent 的技能列表里发现 OK最后确认触发时行为符合 SKILL.md 描述解析 OK。这个顺序能避免你在多个变量之间反复横跳。如果你在排障过程中需要对照接口文档接入文档地址是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各 Agent 的配置示例。想先验证模型通道是否通可以用模型对话页面发一条测试消息地址是 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。6. 长期编码与 Agent 场景下的通道选择把技能管理跑通之后接下来要考虑的是长期使用。如果你只是偶尔验证一下技能加载按次调用就够了但如果你打算把 AI 编程代理当成日常编码的一部分尤其是跑 Agent 类的长任务通道的稳定性就变成主要矛盾。npx skills 和 openskills 本身不消耗模型额度它们只是把 SKILL.md 放到正确的位置。真正消耗额度的是 Agent 执行技能时的模型调用。所以「用哪个技能管理器」和「用哪个通道」是两个独立决策。我的建议是技能管理器按你的 Agent 组合来选多 Agent 就用 npx skills主要用非 Claude Code 代理就用 openskills通道则统一到一个 endpoint 上避免多 Key 管理。对于长期编码和 Agent 场景Coding Plan 这类按周期计费的方式通常比按次调用更可控地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。它的好处是你不用每次调用都盯着余额适合把 Agent 挂在后台跑重构、跑测试生成这类任务。还有一个实践细节技能目录建议纳入版本控制但符号链接和AGENTS.md是否提交要看团队约定。npx skills 的符号链接指向.skills-store/如果这个目录不提交别人 clone 下来链接就是断的。openskills 的AGENTS.md是生成物通常提交但.openskills/下的技能本体是否提交取决于你是否希望团队共享同一套技能版本。最后说一个我踩过的坑在 CI 环境里跑 Agent 时环境变量不会自动带上需要在 CI 配置里显式注入TAOTOKEN_API_KEY和TAOTOKEN_BASE_URL。如果 CI 里技能加载失败但本地正常先查环境变量再查技能目录是否被.gitignore排除掉了。把这两点确认完基本就能定位问题。
返回列表