DeepSeek Harness Skills: DSH plugin skill tool and merging
DeepSeek Harness skills are optional, load-on-demand instructions rather than session events: providers register local or bundled skills into ctx.skills, the registry merges directories across the host layer and scope layers, and the model-facing skill tool loads and invokes them by cwd (source). For where they live and their priority, see Where DeepSeek Harness Skills are discovered; this article covers how they are invoked and merged.
What a DeepSeek Harness skill is
A skill is an optional instruction, not a session event, so its vocabulary definitions are not in core; the model fetches it on demand instead of stuffing it into context every turn (source). Key implications:
- Loaded on demand — once providers register, whether to load is decided at call time. Expected: unused skills consume no model attention.
- Not part of session history — it travels a different channel from session events. Expected: querying session history will not show skill contents as events.
- It can come from many sources — local directories, bundled packages, and in-process providers can all contribute. Expected: one deployment may have several skill sources at once.
To find community plugins that ship skills, browse DSH Plugin Hub.
Who provides DeepSeek Harness skills: ctx.skills and its providers
The skill family has a service definition, several service providers, and one Consumer: the definition is dsh-skill (ctx.skills) and the Consumer is dsh-tool-skill (the model-facing skill tool) (source). Meet them one by one:
dsh-skill(definition) — definesctx.skillsand the related vocabulary. Expected: it is where all providers register.dsh-skill-filesystem(local provider) — contributes skills from filesystem directories. Expected: skills in your local directories are discovered by it.dsh-skill-badge,dsh-skill-office(bundled providers) — ship skills with a package. Expected: installing the package gives you its skills without writing your own.sandbox-windows-acl(diagnostic provider) — provides Windows ACL diagnostic skills. Expected: useful when troubleshooting on Windows.dsh-tool-skill(Consumer) — owns the initial and replacement directories and exposes the model-facingskilltool. Expected: the model gets skills through it.
SkillProvider registers synchronously during apply(), while remote initialization, authentication, and discovery happen asynchronously inside list(); SkillProviderObservation lets a provider declare whether a discovery pass is authoritative (complete), distinguishing a cacheable full result from a partial result from incomplete discovery.
How DeepSeek Harness skill directories merge: host and scope layers
The registry uses a host-plus-scopes overlay: reads merge the host layer with the scope's chain; the narrowest layer's entry wins a same-name skill outright, and rank order only decides priority within one layer (source). How to think about it:
- Two-layer structure — the host layer and scope layers each hold directories, merged along the scope chain on read. Expected: a layer closer to the current work overrides a same-name skill from an outer layer.
- Within a layer, rank decides — inside one layer, priority follows rank, provider order, then local order. Expected: intra-layer conflicts have a definite rule, not randomness.
- De-duplicated by name — a same-name skill resolves to the narrowest layer. Expected: to override a skill temporarily, put a same-name version in a narrower scope.
- Concrete directories and rank numbers — the six local sources (
project-dsh,project-agents,custom,user-dsh,user-agents,bundled) and their ranks are in Where DeepSeek Harness Skills are discovered.
How a DeepSeek Harness skill is invoked and refreshed
The model invokes skills through the skill tool with lookup options such as cwd; when content changes, providers emit a skills/change invalidation event carrying no diff, so consumers must re-fetch snapshot() themselves (source). Usage points:
- Call with cwd — among lookup options,
cwdselects workspace-related skills. Expected: the same skill name may resolve differently across workspaces. - The provider's
get()loads the body — for a listed candidate, the provider fetches full content withget(candidate, options); when no longer loadable it returnsundefined. Expected: candidates can go stale, so handle the not-found case. - Changes go through invalidation, not increments — the
skills/changeevent carries no diff, andinvalidate()clears the completed directory and notifies consumers. Expected: re-pull after a change; do not expect the event to carry the changed content. - Failures are isolated per provider — when a provider's
list()is rejected it is logged and that provider's results are removed from the complete observation; malformed candidates fail fast. Expected: one failing source does not pollute the whole skill list.
Notes and common questions
- A skill is not a session event: session history will not show skill contents; do not conflate the two.
- Same-name resolution is by layer, not cross-layer rank: cross-layer override follows "narrowest layer wins", and rank applies only within a layer.
- Be careful caching
complete: false: an incomplete discovery result may be only a partial candidate set. - Re-pull after edits: the invalidation event carries no diff, so the consumer re-fetches the snapshot.
- Skills are plugin-contributed capabilities: if you cannot find the one you want, look at community plugins on DSH Plugin Hub, or see What built-in tools DeepSeek Harness has.
Sources: Skills (official docs), Tool schema catalog (official docs)
FAQ
A DeepSeek Harness skill is an optional, load-on-demand instruction rather than a session event, so its type definitions are not in core. Think of it as an operating note fetched when needed, loaded by the model through the skill tool.
DeepSeek Harness skill providers register local or bundled skills into ctx.skills: the service definition is dsh-skill, the local provider is dsh-skill-filesystem, and there are bundled providers such as dsh-skill-badge and dsh-skill-office, while the Windows ACL diagnostic provider comes from sandbox-windows-acl.
The DeepSeek Harness skill registry uses a host-plus-scopes overlay: reads merge the host layer with the scope's chain, and the narrowest layer's entry wins a same-name skill outright. Rank order only decides priority within one layer.
The DeepSeek Harness skill tool is model-facing and provided by a Consumer (dsh-tool-skill), which owns the initial and replacement directories. Calls carry lookup options such as cwd, so the same skill may resolve differently across workspaces.
In DeepSeek Harness, the provider emits an unfiltered skills/change invalidation event that carries no diff; consumers should re-fetch snapshot() with their own lookup options. What is sensed is invalidation, not an incremental change.
Related Terms
- ctx.skills
- ctx.skills is the skill registry service of DeepSeek Harness; it combines local, bundled, and in-process providers and merges the skill directories they contribute across the host layer and scope layers.— DeepSeek Harness Documentation - Skills
- SkillProvider
- SkillProvider is the provider interface for one skill source (such as a local directory or a remote registry), with name, list, and get; plugins register synchronously during apply(), while remote initialization and discovery happen asynchronously inside list.— DeepSeek Harness Documentation - Skills
- SkillProviderObservation
- SkillProviderObservation lets a provider declare whether a discovery pass is authoritative (complete) while returning candidate skills, distinguishing a cacheable full result from a partial result from incomplete discovery.— DeepSeek Harness Documentation - Skills
- skill tool
- The skill tool is the model-facing Consumer tool (from dsh-tool-skill) that loads and invokes skills by lookup options; it owns the initial and replacement directories and is the model's entry point to skills.— DeepSeek Harness Documentation - Tool schema catalog
Sources
- DeepSeek Harness Documentation - Skills· deepseek-harness
- DeepSeek Harness Documentation - Tool schema catalog· deepseek-harness