antoskill
v0.2.0
Published
MCP server that auto-recommends and installs high-quality, project-matched Agent Skills into Claude Code and Codex, with human-in-the-loop confirmation.
Maintainers
Readme
English · 简体中文
AntoSkills 是一个 MCP 服务,把包管理器的那套规矩带给
Agent Skills。你对 agent 说一句*"给这个项目推荐 skills"*,它就会识别你的
技术栈、从精选索引里按匹配度排出高质量 skill、把每个 skill 连同一份静态安全扫描摆给你看,然后 ——
只有在你批准之后 —— 才把它们以钉死的 commit 同时安装进 .claude/skills/ 和 .agents/skills/。
检测技术栈 → 推荐匹配项 → 预览 + 安全扫描 → 你批准 → 钉死版本安装因为 Agent Skills 是一个开放标准,同一个 SKILL.md 在 Claude Code 和 Codex 里都能跑。AntoSkills 做的
正是标准没管的那部分:找对 skill、审核它们、并跨工具可复现地安装。
为什么需要 AntoSkills
skill 很强,但手工管理很烦:你要在一堆仓库里翻找、分不清哪个靠谱、每个工具装到的目录还不一样,而且 没有任何东西记录你到底装了什么。AntoSkills 把这一切变成一次简短的对话 —— 并把结果钉死,让你的同事 和 CI 拿到逐字节一致的 skill。
| 没有 AntoSkills | 有了 AntoSkills |
| --- | --- |
| 手工在 GitHub 仓库里翻找 | 按项目匹配、已排序的推荐 |
| 靠猜判断一个 skill 是否安全 | 每次安装前都有静态安全扫描 |
| 手动把文件复制进每个工具的目录 | 一次安装 → Claude Code 和 Codex |
| "在我机器上是好的"式的版本漂移 | skills.lock 钉死不可变的 SHA + 哈希 |
一次典型的对话
"给这个项目推荐一些 skills,然后把做测试的那几个装上。"
你 ▸ 给这个项目推荐 skills
Project tags: typescript, react, vitest
• anthropic-frontend-design (score 88) — Produce distinctive, production-grade frontend UI
matched: react, frontend; repo: anthropics/skills
• cypress-author (score 81) — Author Cypress end-to-end tests (official Cypress AI toolkit)
matched: testing, e2e; repo: cypress-io/ai-toolkit
• api-test-suite-builder (score 74) — Generate comprehensive API test suites
matched: testing, api; repo: alirezarezvani/claude-skills
你 ▸ 预览 cypress-author
cypress-author @ a1b2c3d4e5 (cypress-io/ai-toolkit)
SKILL.md: Cypress Author — Author Cypress end-to-end tests
Files (3): SKILL.md, scripts/scaffold.md, references/patterns.md
Risk score: 0 — no red flags
你 ▸ 装上它
Installed into /your/project:
✓ cypress-author @ a1b2c3d4e5 → [claude,codex] (junction)提示行
你 ▸是你用自然语言(中文也可以)发出的请求;缩进的部分是 antoskill 工具的真实输出(当前为英文)。
只读步骤(detect、recommend、preview)无需批准;安装才是你的闸门。
核心特性
- 项目精准匹配 —— 识别你的语言/框架,按相关度 + 质量信号(star、活跃度、是否维护)给 skill 排序。
- 钉死且可复现 —— 每次安装都把不可变的 commit SHA + 内容哈希写进
skills.lock;sync能为同事和 CI 重建出完全相同的 skill。 - 装前审核 —— 静态安全扫描会标出可执行载荷、外联网络、shell 调用、读取密钥、安装钩子、混淆代码等;高风险 skill 默认被拒绝,除非你明确确认。
- 跨工具 —— 以单一事实源,同时安装进 Claude Code(
.claude/skills/)和 Codex(.agents/skills/)。 - 内容寻址存储 —— 每个 skill 版本在
~/.antoskill/store/只存一份,去重、校验完整性,即使上游消失也能离线使用。 - 省 token —— 候选索引很大,但装进项目的很少:单项目安装数量有上限,agent 的 skill 列表不会撑爆上下文。
安全模型
skill 可以携带可执行脚本,所以 AntoSkills 把每次安装都当作一个要写进 lockfile 的依赖来对待:
- 安装前运行静态安全扫描并展示给你 —— 可执行载荷、外联网络、shell 调用、读取密钥/环境变量、安装 钩子、混淆、过宽权限。高风险 skill 会被拒绝,除非你明确确认风险。
- 安装内容以 SHA + 内容哈希钉死,并在每次
sync时重新校验。 - 来源走白名单(索引)—— agent 只能安装索引里的条目,绝不能装任意 URL。
扫描是启发式的:它辅助你判断,不替你判断。批准前请自行 review。
安装
需要 Node ≥ 20。下面是最短上手路径;完整的下载、配置与使用教程见 详细安装与使用教程。
[!IMPORTANT] 尚未发布到 npm。 下面的
npx -y antoskill写法是发布后的正式安装方式 —— 在包发布之前会失败。 在那之前请从源码安装(完整说明见教程第 5 节):git clone https://github.com/YforC/AntoSkills.git && cd AntoSkills npm install && npm run build claude mcp add antoskill -- node ./dist/index.js # Codex:让 config.toml 指向 dist/index.js
Claude Code
claude mcp add antoskill -- npx -y antoskill或写进 .mcp.json:
{
"mcpServers": {
"antoskill": { "command": "npx", "args": ["-y", "antoskill"] }
}
}Codex
写进 ~/.codex/config.toml:
[mcp_servers.antoskill]
command = "npx"
args = ["-y", "antoskill"]提示: 设置
GITHUB_TOKEN环境变量,避免抓取 skill 时触发 GitHub API 限速。
使用 & MCP 工具
直接对 agent 说人话:
"给这个项目推荐一些 skills,然后把做测试的那几个装上。"
底层它暴露这些 MCP 工具。只读工具可放心自动批准;写入工具就是你的确认闸门。
| 工具 | 类型 | 作用 |
| --- | :---: | --- |
| detect_project | 只读 | 识别项目的语言/框架指纹 |
| recommend_skills | 只读 | 按质量信号排出匹配的 skill,并说明为何匹配 |
| preview_skill | 只读 | 在钉死的 SHA 上展示 skill 的 SKILL.md、文件清单和安全扫描 |
| list_installed | 只读 | 列出 skills.lock 里已安装的 skill |
| doctor | 只读 | 诊断目标工具、存储、断链、lock 漂移 |
| list_profiles | 只读 | 列出已定义的配置组及当前激活的 |
| install_skills | 写入 | 钉死并安装选中的 skill(高风险未确认则拒绝) |
| remove_skill | 写入 | 移除某个 skill 及其链接 |
| sync | 写入 | 按 skills.lock 重建链接(可复现 / 可离线) |
| update_skill | 写入 | 在重新扫描后把 skill 更新到更新的 SHA |
| define_profile | 写入 | 创建/替换一个命名的 skill 组 |
| activate_profile | 写入 | 把已装集切换到某个组(装该组、移除其余) |
配置
| 环境变量 | 用途 |
| --- | --- |
| GITHUB_TOKEN | 提升抓取 skill(以及托管在 GitHub 上的索引)的 API 限速 |
| ANTOSKILL_INDEX_URL | 使用在线/自定义索引,替代内置索引 |
| ANTOSKILL_HOME | 覆盖存储位置(默认 ~/.antoskill) |
| ANTOSKILL_MAX_INSTALL | 单项目可安装的 skill 数量上限(默认 8,作为 token 预算保护) |
在线索引
索引会随包内置,但你可以让 AntoSkills 指向一个在线索引,这样它始终反映最新的精选列表、无需重装。把
skills.json 托管在任何能返回原始 JSON 的地方即可 —— 比如本仓库自己的文件:
ANTOSKILL_INDEX_URL=https://raw.githubusercontent.com/YforC/AntoSkills/main/index/skills.json注册服务时设置它,例如 Claude Code:
claude mcp add antoskill \
-e ANTOSKILL_INDEX_URL=https://raw.githubusercontent.com/YforC/AntoSkills/main/index/skills.json \
-- npx -y antoskill这样更新索引就只需 git push —— 每个用户下次调用 recommend_skills 时自动拿到新列表。(安装仍会把每个
skill 钉死到不可变的 commit SHA,所以索引变化不会改变已经装好的东西。)
为什么"装进项目的"要保持很少
Claude Code 和 Codex 在启动时会把每个已安装 skill 的名字 + 描述塞进 agent 的上下文,而这个预算有上限
(Codex 约为上下文的 2% / 8000 字符)。超过后描述会被截断、skill 会被丢弃。所以 AntoSkills 的模型是
候选索引很大、但装进项目的很少:install_skills 对单项目数量设上限(ANTOSKILL_MAX_INSTALL,默认
8),庞大的索引则藏在 MCP 工具背后 —— 永远不进入 agent 的上下文。
配置组(Profiles)—— 在组之间切换,而不是全装
当你想"拥有很多 skill 但不同时加载"时,定义 profile(配置组) —— 几个命名的组,按需切换。激活一个组 会装上它的 skill、并移除不属于它的受管 skill,所以项目里始终只有一组,agent 也只加载这一组。
> "定义一个前端组,包含 web-artifacts-builder、frontend-design 和 cypress-author。"
> "现在切换到后端组。" # 装上后端组,移除其余定义存在项目级的 antoskill.profiles.json(可提交以共享给团队):
{
"active": "frontend",
"profiles": {
"frontend": ["anthropic-frontend-design", "anthropic-web-artifacts-builder", "cypress-author"],
"backend": ["database-schema-designer", "api-test-suite-builder", "n8n-code-python"]
}
}工具:list_profiles(只读)、define_profile(写入)、activate_profile(写入)。
工作原理
╭────────────────────────────────────────────────────────────────────────────╮
│ index/skills.json · 精选指针:repo · 路径 · tags · 质量信号 │
╰────────────────────────────────────────────────────────────────────────────╯
│
═══ 发现 · 实时 ════════════════════════╪═══════════════════════════════════════
▼
detect_project ──► recommend_skills ──► preview_skill
指纹识别 排序 + 打分 解析 ref → SHA · 安全扫描
│
╭───────┴────────╮
│ 你批准 │ ◄── 人工闸门
╰───────┬────────╯
▼
═══ 安装 · 钉死 ════════════════════════╪═══════════════════════════════════════
▼
install_skills
│
╭───────────────────────────┼───────────────────────────╮
▼ ▼ ▼
skills.lock ~/.antoskill/store/<hash> .claude/skills/<name>
钉死 SHA + 哈希 内容寻址,跨项目共享 .agents/skills/<name>
提交进 git 离线可复现 junction · symlink · copy- 发现是实时的,安装是钉死的。 推荐反映上游最新;
install把 ref 解析成不可变的 commit SHA 并记录。 - 存储兼作离线韧性层。 即使上游仓库消失,
sync仍能用存储里已钉死的 SHA 重建。 - 优先链接而非复制。 Windows 上用目录 junction(无需管理员),其他平台用符号链接,无法链接时退回复制。
代码是一个纯核心库(src/core/)加一层薄薄的 MCP 适配(src/mcp/),所以未来一个独立 CLI 可以直接复用同
一套逻辑。
团队协作
提交 skills.lock。同事(或 CI)运行 sync 即可物化出完全相同的 skill。内容寻址存储和各项目内的
链接都是按需重新生成的,不进 git。
开发
npm install
npm run build
npm test # 单元测试
npm run smoke # 离线全链路 + MCP 握手检查
npm run dev # 以 stdio 本地运行服务路线图
- 托管索引 + 自动质量信号爬虫
- 发布者签名 / 验证
- 独立 CLI(核心已是纯库)
- 推荐结果的同源多样性
- 基于 AST 的扫描
贡献
欢迎贡献 —— 为索引补充高质量 skill、改进 tag 推断、增加目标工具。请先读 贡献指南;想往索引提交 skill,见 docs/INDEX.md。 当然,直接提 issue 或 PR 也行。
