dsh-skills-anywhere(Skills Anywhere)把分散在各个 AI 编码工具目录里的 Agent Skills(SKILL.md)汇成一个统一目录,再通过两种方式提供出去:作为 DeepSeek Harness(dsh)的一个技能 provider,或者作为本地 stdio MCP 服务器。它还提供了一组核对手段:检查技能文件是否完整,在加载时校验内容哈希,并记录某份指令是否真的送到了 agent 手里。
要解决的问题
Claude Code、Codex、Cursor、Gemini CLI、Windsurf、Kiro、Goose 等客户端各自在不同的项目级、用户级目录里读取技能,同一个技能往往要复制好几份。Skills Anywhere 原地读取这些目录,不做复制,汇总的来源有:
- 各 agent 的预定义目录:项目级和用户级路径,完整列表见
src/agents.ts;本机实际存在哪些目录,可以用npx dsh-skills-anywhere agents查看。 - Claude Code 插件市场:
~/.claude/plugins/marketplaces/*/plugins/*/skills/*。 - Git 源:可以指定仓库、子目录、分支、tag 或 commit;本地维护一份 checkout,解析到的 commit 记录在
lock.json,默认每 6 小时在后台同步一次。
重名处理是确定性的:先按来源优先级排序(项目级 250、用户级 550、Claude 插件 580、Git 源 700,数值小者优先);指向同一文件的符号链接和内容逐字节相同的条目会被合并;名字相同但内容不同的条目加前缀改名,比如 discord-access 和 telegram-access。doctor 命令会列出所有修复、跳过和改名,并给出原因。
在 dsh 里和在 MCP 里
在 dsh 里,它在内置的 ctx.skills 注册表上多挂一个 provider,模型原有的 skill 工具和 /name 调用就能看到更多技能。技能一多,每次请求都附带全部技能摘要会占用大量上下文,所以它设了一个“目录预算”:默认只把排名前 50 的技能列入模型可见目录。其余技能不进目录,但仍可以用 /name 调用,也可以通过 find_skills(关键词搜索)和 open_skill(按名加载)找到。作者在 frontmatter 里设了 disable-model-invocation: true 的技能,open_skill 照样拒绝加载,行为和内置 skill 工具一致。
在 dsh 之外,dsh-skills-anywhere mcp 启动一个本地 stdio MCP 服务器,提供 list_skills、find_skills、open_skill 三个工具,每个技能同时暴露为 skill://<name> 资源。它同时支持旧版初始化流程和 2026-07-28 协议版本的开场握手,仓库在真实子进程连接上测试了四种 SDK 配置和已安装的 npm 包。
加载前先核对
- 文件检查:
check用与 provider 相同的解析器检查SKILL.md,报告自动修复项和隐藏字符(不可见字符或改变文字方向的字符),输出带文件哈希的 JSON。--resources检查本地 Markdown 链接指向的文件是否存在。仓库还提供了 GitHub Action,可以把检查结果作为 PR 注释。 - 按哈希加载:MCP
open_skill返回原始文件的 SHA-256。调用时传入审核过的expected_sha256,如果文件在审核后被改过,服务器会拒绝返回指令。bundle命令生成整个技能目录的文件清单,对应的expected_bundle_sha256可以发现“SKILL.md没变、脚本变了”的情况。 - 加载回执:每次成功的
open_skill都返回一张回执,标明实际交付的指令正文、原始文件和可选的目录包,可以挂到 tool span 上,和任务结果一起复核。 - 技能选择复核(0.16.0 新增):
route prepare为一个任务生成最多 8 个可打开的候选技能,每个候选附来源、路径和内容哈希;由分类器、LLM 或人写出选择后,route apply把这份选择当作不可信输入核对,只输出selected、no_match、abstain、stale、invalid_input中的一种结果。整个过程不加载、不执行、不联网。
怎么试
需要 Node.js 22.19+ 或 24+,Git 源另需 git。先看本机能发现哪些技能:
npx dsh-skills-anywhere list
npx dsh-skills-anywhere add anthropics/skills # 添加一个 Git 源
npx dsh-skills-anywhere@0.16.0 check path/to/SKILL.md --resources --json
装进 DeepSeek Harness(要求 0.1.5-rc.1 或更新版本):
dsh plugin --profile web add dsh-skills-anywhere
作为 MCP 服务器接入 Claude Code,Cursor 和 Codex 的配置写法见 README:
claude mcp add skills-anywhere -- npx -y dsh-skills-anywhere mcp
不想安装的话,Hugging Face 上的交互演示可以在示例工作区里查看重名处理、调整目录预算、比较目录清单,上传的文件只在浏览器本地处理。
局限 / 注意
- 回执只证明指令“送到了”,不证明 agent 照做了,也不涉及权限控制。
compatibility、allowed-tools只是作者声明,实际的运行要求和工具权限由客户端决定。 check只检查本地 Markdown 链接,不分析正文里描述的依赖,也不执行技能。目录包的摘要只覆盖该目录内的文件,外部依赖需要另行审查,文件也可能在加载之后被改动。route apply默认的 0.7 置信度阈值没有经过校准,需要用自己决策器的 held-out 结果来定。- 从未同步成功的 Git 源不会贡献任何技能;同步失败时保留已有的 checkout。
- 作者公开的小规模实验并不支持“加载技能就能提升效果”:作者用 Qwen3-8B 做了 27 次尝试,在三组工程配置下比较不加载技能、直接交付和 MCP 交付:直接交付和 MCP 交付没有一次完全解决任务;在最后一组配置里,反倒是不加载技能的条件 3 次尝试中有 2 次完全解决。
- 当前版本 0.16.0(2026-09-28),MIT 许可,npm 包名
dsh-skills-anywhere,GitHub Releases 附同一份 tarball。



