Skills
dsh-find-skill
moximxxx/dsh-find-skill · ★ 3
dsh plugin bridging the vercel-labs/skills ecosystem: LLM-driven skill search, install, and lifecycle for temp
安装
dsh plugin --profile web add github:moximxxx/dsh-find-skillGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
English | 中文
Bridge the vercel-labs/skills open agent-skills ecosystem into DeepSeek Harness (dsh).
The plugin lets the LLM decide when a task needs a skill no existing tool or loaded skill covers: the model searches the ecosystem (skill_find), asks the user which candidate and scope to install (ask_user_question, built into dsh), and loads it as temp (default, current session), project (shared with the workspace), or global (all sessions). Installs land in plugin-owned roots, isolated from hand-written .dsh/skills and shared .agents/skills.
Features
skill_find— remote search over the official skills.sh API (the same source the CLIfindcommand queries). Candidates carry install counts, sources, browse URLs, and a local "installed" marker. Low-priority description: the model is told to use it only when no existing tool or loaded skill fits.skill_install— fetch through the official CLI (npx -y skills@latest, auto-latest per project decision) inside an isolated throwaway work/home pair, then adopt only the requested skill into a managed scope. Temp installs register as runtime skills; project/global installs are written to managed roots and exposed through a self-ownedctx.skillsprovider (rank 350, configurable).skill_remove— remove from temp / project / global; temp is tried first when no scope is given./skillcommand — human-facingfind | install | update | sync | remove | list;updatere-fetches the recorded source and replaces the bundle;syncscans projectnode_modulesskills via the official CLI'sexperimental_syncand adopts them into the managed root.- Lifecycle — temp skills register through the installing agent's scoped context: visible only to that session (other sessions cannot read them), the registration unwinds when the agent/session is disposed, and materialized directories are cleaned on
session/disposed;compactDisposePolicy: keep | dispose | askcontrols compaction behavior. - Web UI cards — the
dsh-find-skill-clientpackage renders dedicated, replayable, read-only conversation cards forskill_find/skill_install/skill_removetool calls.;compactDisposePolicy: keep | disposecontrols behavior at compaction.
Install / Load
From source
git clone https://github.com/Moximxxx/dsh-find-skill.git
cd dsh-find-skill
git checkout develop # full develop branch (includes AGENTS.md, .dsh/)
pnpm install --config.minimumReleaseAge=0 # rc.6 packages need the release-age policy bypass
pnpm build # tsc → lib/
pnpm test # unit + snapshot tests
Load it into dsh — development overlay (hot source):
- insert:
- id: dsh-find-skill
name: '/abs/path/to/dsh-find-skill/src/index.ts'
Or install the local checkout as a bundle (build first, then):
dsh plugin --profile web add /abs/path/to/dsh-find-skill
dsh --profile web --dump-config # confirm the dsh-find-skill row is in the plugin tree
From npm
dsh plugin --profile web add dsh-find-skill
Published to npm; install directly.
Configuration
All fields are optional; defaults shown.
| Field | Default | Meaning |
|---|---|---|
searchApiBase |
https://skills.sh |
Search API base (same source as CLI find). |
searchLimit |
20 |
Max candidates per search. |
prioritySources |
official list | Source owners boosted to the front of search results (priority first, then install count). |
cliCommand |
npx -y skills@latest |
Command running the official CLI; swap in a local binary path if desired. |
installDefaultScope |
temp |
Scope used when the model omits scope. |
projectSkillRoot |
.dsh/skills-bridge |
Project-managed root, relative to the git root. |
globalSkillRoot |
<dshHome>/skills-bridge/global |
User-global managed root. |
tempSkillRoot |
<dshHome>/skills-bridge/tmp |
Temp materialization root. |
providerRank |
350 |
Rank of provider candidates (lower wins duplicates). |
compactDisposePolicy |
keep |
keep / dispose / ask for temporary skills at compaction. |
registerFindTool / registerInstallTool / registerRemoveTool |
true |
Model tool switches. |
registerCommand |
true |
/skill command switch (looked up opportunistically). |
Usage flow (model-driven)
- User asks for something; the model finds no existing tool or loaded skill fits.
- Model calls
skill_find→ reviews candidates (installs, source, URL). - Model asks the user via the built-in
ask_user_question(which candidate? temp/project/global?). - Model calls
skill_install→ the skill appears in the session skill catalog on the next step; load it with theskilltool or the user can type/<skill-name>. - Cleanup: temp skills disappear at session end or via
skill_remove; project/global persist until removed.
Model Experience
- The three tools are registered with low-priority descriptions and can be disabled per tool; catalog noise is bounded by
searchLimitand by installing only selected skills. - Tool calls and results flow through the standard
tool/call/tool/resultsession events; nothing is injected outside the session log. - CLI installs can take tens of seconds on first use (npx downloads the latest
skillspackage into the shared npm cache; the fetch itself runs in a throwaway HOME so no agent directories are touched). - Project/global skills are durable files; temp skills are in-memory registrations with materialized directories under
tempSkillRoot.
Known Limitations and Deferred Work
- Search candidates carry no description: the skills.sh search API returns id/name/installs/source only; descriptions arrive after install.
- Version compatibility: development and loading tests target npm
@deepseek-ai/*@0.1.0-rc.6; the source checkout (rc.5) was verified in an isolated instance (probe-confirmed apply execution and healthy boot). - CLI stdout is advisory: outcomes are judged from the filesystem (the adopted skill directory), never from CLI prose.
- Real-session model-driven flow verified (headless with a real model: skill_find → skill_install temp → skill load); the full loop passed, including temp-skill session isolation (visible to the installing agent, invisible to a subagent).
- node_modules-synced skills have no remote source:
updateis unavailable for/skill syncadoptions; re-sync or install manually. - Web cards are read-only: no install/remove buttons yet; labels are fixed English, i18n deferred.
License
MIT