A tree-external DeepSeek Harness plugin for managing reusable Agent Skills.
It adds a Skill 管理 item to the Web Settings sidebar and a wrench control beside the composer attachment button. Skills are installed into a private Harness library, then enabled independently at two scopes:
- Global: available from every workspace.
- Project: available from one registered workspace and its child directories.
An imported skill is disabled by default. The plugin uses the official ctx.skills provider seam, so model-facing discovery and /skill loading keep the normal Harness behavior.
The bundled skills CLI requires Node.js 22.20.0 or newer. Build a tarball or install the package from a trusted source:
pnpm install
pnpm build
pnpm dsh plugin --profile web add .For source development, use the included absolute-path patch after updating the path if needed:
pnpm dsh web --patch ./cordis.dev.ymlAfter changing the bundle or installed dependencies, restart the Harness service. The browser half is discovered from the package dsh.client declaration.
- Open Web Settings, then select Skill 管理 in the sidebar.
- Choose 本机 to select a local skill folder, or 仓库 to enter a GitHub
owner/repo, HTTPS URL, SSH URL, or other Git URL. - When a source offers more than one skill, a checklist shows what it contains; untick what you do not want, then 导入所选 (N) installs only the selection. Single-skill sources install directly.
- Enable 全局 or select a workspace and enable 项目. The 仅手动 pill on a row switches model invocation off or on: a manual-only skill is kept out of the model-facing catalog and the
skilltool, and only an explicit/namereference loads it. Rows whose frontmatter setsdisable-model-invocationstart manual-only; the pill overrides that declaration in either direction and is stored instate.json, soSKILL.mdis never rewritten and an update cannot silently drop the setting. - Use the refresh icon on a row to reinstall that skill from the source recorded in
skills-lock.json. - Use 检测 to check every installed skill for upstream updates without applying them; independent sources and skill folders are checked concurrently, and rows show a badge (有更新 / 已是最新 / 上游已删除 / 无法检测). When updates are found, 全部更新 (N) applies them one by one and re-checks automatically.
- Use the wrench control beside the composer attachment button to toggle installed skills for the current session workspace only.
- Remove an installed skill with 移除. This deletes only the plugin's private library entry, not the local source or remote repository.
Repository imports and refreshes are delegated to the skills CLI. It supports GitHub owner/repo, HTTPS, SSH, Git and file URLs, and reuses the machine's existing Git credential helper or SSH configuration. Do not put credentials in repository URLs; the plugin rejects embedded credentials before invoking the CLI.
Updates preserve global and project enablement. New imports and refreshes require standard directory bundles: <name>/SKILL.md with kebab-case name and non-empty description. Flat <name>.md imports are not supported.
By default the plugin uses the actual Harness home resolved from DSH_HOME:
$DSH_HOME/skill-manager/.agents/skills/
$DSH_HOME/skill-manager/skills-lock.json
$DSH_HOME/skill-manager/state.json
skills-lock.json is the only source-of-origin record. state.json stores global and project enablement plus the per-skill model-invocation override.
Override the storage root in cordis.patch.yml:
- insert:
- id: dsh-skills-manager
name: dsh-skills-manager
config:
storageDir: /absolute/path/to/skill-managerpnpm install
pnpm test
pnpm validateThe test suite covers scope resolution, current-state validation, local and Git refreshes through the private CLI library, flat-format rejection, credential URL rejection, and removal cleanup. pnpm validate checks the DSH bundle shape.
- This plugin runs the packaged
skillsCLI with an argv array and a private storagecwd; it never modifies the active workspace's.agents/skillsdirectory. - It does not rewrite an imported
SKILL.mdor alter the source folder or repository. The 仅手动 switch lives instate.jsonand is applied when the provider resolves each skill's invocation policy. Broken or escaping source symlinks are rejected before the CLI copies anything. - Skills already present in other filesystem roots remain owned by those roots; import them into this private library when they should be managed here.
- Import and mutation controls stay disabled off-loopback because they write local files. RPC itself rides Connection's authenticated
/api. - DSH is in developer preview; bundle and Cordis APIs can change between Harness releases.
UNLICENSED until the repository owner chooses an open-source license.