安装一个 skill 路由技能:按需对本地技能库做语义检索,让庞大的技能库不占每轮的模型目录。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:ryasrk/dsh-awesome-skills
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
该插件的 README 只有英文版本。
description: "Semantic vector search over a 6,097-skill local corpus (skills.sh top 100 + the a5c-ai/babysitter library), installed as a DeepSeek Harness bundle" kind: "package-reference"
dsh-awesome-skills
A DeepSeek Harness bundle that gives agents semantic access to a curated local skill corpus — the skills.sh top 100 (83 GitHub-hosted skills) plus the full a5c-ai/babysitter library (~2,100 skills) — 6,097 skills total — without ever putting that corpus into the per-turn model catalog.
Why
A skill directory that DeepSeek Harness discovers becomes a catalog entry, and every catalog entry is injected into the model's context on every turn. A large corpus there is a very large per-turn token bill for something almost never needed on a given turn.
This plugin inverts that. The corpus stays out of the catalog; a single small
skill-router skill is installed instead, and it teaches the agent to search
the corpus on demand.
The corpus
The corpus is organized by source, one directory per owner/repo, with each
skill directory carrying its complete content — SKILL.md plus every
reference file it points at (examples, templates, scripts):
skills/
├── a5c-ai/babysitter/ # ~2,100 skills (specializations + methodologies incl. the domains tree)
├── mattpocock/skills/ # 17 skills (tdd, grilling, code-review, ...)
├── microsoft/azure-skills/ # 20 skills (incl. microsoft-foundry: 191 files)
├── anthropics/skills/frontend-design/
├── vercel-labs/agent-skills/ # vercel-react-best-practices (62 rules)
├── obra/superpowers/ # brainstorming, systematic-debugging, ...
└── ... # 157 owner/repo groups, 6,097 skills, 17,600+ files
The 17 site-only entries on the skills.sh leaderboard (the open.feishu.cn lark suite and similar, which have no public repository) are excluded — there is nothing to fetch from.
| Path | Contents |
|---|---|
lib/ |
Compiled plugin host + search service + query.js CLI |
skills/skills.json |
Corpus index: name, path, description per skill |
skills/vectors.f32 |
384-dim L2-normalized embeddings, one row per skill |
model/ |
all-MiniLM-L6-v2, quantized ONNX + tokenizer |
The index ships prebuilt and is committed. Skill bodies live in the
canonical corpus directory (~/.dsh/awesome-skills/skills), referenced — not
copied — by the package: search results return paths into it, so there is
exactly one copy of the corpus on disk.
Install
dsh plugin --profile web add github:ryasrk/dsh-awesome-skills
The plugin mounts as a cordis bundle (see cordis.patch.yml) and, on apply,
installs the bundled skill-router skill into ~/.agents/skills/skill-router.
The bundled skill-router is refreshed on every apply — the shipped copy is
the source of truth for its behaviour.
Model-facing tools
On hosts that expose the tools service, the plugin registers two tools that
run in-process with host authority — the standard-permission-mode path to the
corpus, since the agent needs no Bash or out-of-workspace Read:
skills_search(query, k?)— the calibrated hybrid search; settings knobs (prio/blacklist/whitelist) apply.skills_read(path, file?)— one file from a hit's directory, guarded to the corpus root (no traversal), text extensions only, 64 KiB cap.
The skill-router skill teaches the tool-first flow and keeps the node lib/query.js CLI (JSON on stdin → JSON on stdout) as a shell-agnostic
one-paragraph fallback for hosts without the tools service — it reads stdin and
writes stdout, so no bash-specific syntax is required on any shell (bash,
PowerShell, cmd).
Ranking
Three lanes are fused, then re-ranked over a candidate pool:
score = (1 - WEIGHT) * semantic + WEIGHT * lexical + GRAM_WEIGHT * char-3-gram
- Semantic — MiniLM cosine, brute force over all rows. Exact; no quantization drift.
- Lexical — IDF-weighted token overlap.
- Char 3-gram — script-agnostic, so CJK/Cyrillic queries and technical identifiers still discriminate.
WEIGHT 0.55, GRAM_WEIGHT 0.5, pool 1200. Re-checked on the shipped
corpus with a 150-label canonical set: R@1 80%, R@3 93%.
Speed
Measured on the shipped 6,097-skill corpus (brute force still scores every row; the per-process model load dominates):
| Path | Latency |
|---|---|
| Cold (model load) | ~0.7s |
| Warm (query cache hit) | ~0.6s |
Derived caches (per-skill char grams, query embeddings) live next to the corpus and are keyed by a corpus fingerprint, so a corpus change invalidates them automatically.
Service surface
Other plugins and tools can use the search service directly:
const search = ctx.get('skills-search')
const hits = await search.search('set up end-to-end browser tests', 5)
const dir = search.skillDir(hits[0].path) // e.g. .../skills/mattpocock/skills/tdd
A hit's path is the subpath under the corpus root (owner/repo/skill), and
every consumer joins corpusDir + path + /SKILL.md — the priority loader, the
skill-router template, and the settings UI all share that one convention.
Reference files live beside the SKILL.md, so a hit's directory is the whole
playbook.
Configuration
All fields optional, via a cordis.patch.yml row:
| Field | Default | Meaning |
|---|---|---|
corpusDir |
~/.dsh/awesome-skills/skills |
Skill bodies (<path>/SKILL.md) |
home |
OS home (os.homedir()) |
Base home the router skill installs under (<home>/.agents) |
agentsHome |
<home>/.agents |
Agents home whose skills/ root the harness reads; overrides $DSH_AGENTS_HOME |
installSkillRouter |
true |
Install the router skill on apply |
Environment: DSH_AWESOME_SKILLS_CORPUS (corpus), DSH_AWESOME_SKILLS_INDEX
(index directory for the CLI), DSH_AGENTS_HOME (agents home; resolved the same
way the harness skill provider does, so a relocated agents home still receives
the router skill).
Rebuilding the index
The index ships prebuilt in skills/skills.json and skills/vectors.f32; a
user never needs to rebuild it. Rebuilding after changing the corpus is a
maintainer step done in the separate corpus-ingestion workspace (the walker
lives there, not in this package) — it reads the corpus recursively and rewrites
skills.json and vectors.f32, which are then copied back into this repo's
skills/. If a deployed profile carries a stale index, re-sync this repo's
lib/ and skills/ directories into the profile's installed copy.
A skill directory is any directory holding a SKILL.md; directories nested
inside one (a sub-skill shipped as reference material) are not indexed
separately. Regenerate the client bundle after pulling source changes:
npx tsdown -c tsdown.client.ts, then run node scripts/preflight.mjs.
License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-skill-explorer★ 8978
技能中心:按来源分级浏览已加载的全部 skill,启用/禁用模型调用、创建新技能、删除进可恢复回收站。
QingYunA/answer-me-with-html★ 3705
把回答做成一页可视化 HTML:模型只写简短的 Markdown 草稿,随包附带的 `am` 命令行生成页面,支持流程图、时序图、树、时间线、ER 图、表格和提示框。
GanyuanRan/Aegis★ 1359
面向编码 Agent 的软件工程方法包,提供基线优先规划、系统化调试、提示词卫生、完成前验证,以及修复/退役双轨跟踪技能。
superdesigndev/superdesign-skill★ 841
在 Superdesign 画布上做 UI 与营销图的设计技能:先读代码库拿上下文、抽取现有设计系统,再通过 Superdesign CLI 生成并迭代可分支的设计稿、流程页与可复用组件。
linhay/harmony-next.skills★ 362
为 DeepSeek Harness 提供 HarmonyOS NEXT 技能包、离线 API 参考及 DevEco、HDC 与模拟器自动化指南。
dhicoc/dsh-reverse-skill★ 264
完整 reverse-skill(85 个 SKILL.md)的 DeepSeek Harness 插件:逆向工程、授权渗透测试与安全研究的技能路由包。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。