Saltar al contenido principal
R

dsh-awesome-skills

ryasrk/dsh-awesome-skills

Instala una skill de enrutamiento que busca semánticamente en un corpus local de skills cuando se necesita, sin incluir todo el corpus en el catálogo de modelos de cada turno.

Instalar

dsh plugin --profile web add github:ryasrk/dsh-awesome-skills

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.

PathContents
lib/Compiled plugin host + search service + query.js CLI
skills/skills.jsonCorpus index: name, path, description per skill
skills/vectors.f32384-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):

PathLatency
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:

FieldDefaultMeaning
corpusDir~/.dsh/awesome-skills/skillsSkill bodies (<path>/SKILL.md)
homeOS home (os.homedir())Base home the router skill installs under (<home>/.agents)
agentsHome<home>/.agentsAgents home whose skills/ root the harness reads; overrides $DSH_AGENTS_HOME
installSkillRoutertrueInstall 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

Plugins relacionados