Vuncloud Blog
← Back to Dev Notes

DeepSeek Harness plugins worth keeping in 2026: Agent Skills and tools that actually help

Everything is a Plugin · one of each · 127.0.0.1~12 min read

Team collaborating on laptops—configuring DeepSeek Harness plugins and Agent Skills

DeepSeek Harness (CLI: dsh) treats the agent as a composition of plugins: shell, editor, MCP, browser, memory, and skill catalogs all hang off a Cordis graph. The official repo deepseek-ai/deepseek-harness states the design plainly—Everything is a Plugin. It is still a developer preview and will break compatibility. What actually makes a daily driver is not the next model drop, but which plugins you mount, where Skills are discovered, and how far permissions go.

The community filled the dsh-plugin topic with thousands of repos in weeks. This roundup is a working shortlist: kernel capabilities, skill markets, search/vision/memory/browser, and how not to flood the tool catalog. Canonical docs: DeepSeek Harness Docs and the plugins guide.

npx
Local start: npx @deepseek-ai/dsh web, default 127.0.0.1:3080
Skill
Project .dsh/skills beats user dirs; the model sees name + description first
One
One skill finder, one market UI, one search, one vision, one memory overlay

What the harness is: plugins, profiles, Skills

Think of it as an agent runtime, not another chat website.

  • Kernel packages @deepseek-ai/* ship with the distribution: bash, editor, MCP resources, plugin_manager, and the official skill tool.
  • Community packages (npm name or github:owner/repo) go into the current profile with dsh plugin --profile web add …. Bundle installs need a restart of dsh web.
  • Skills are optional instruction files (SKILL.md), not session events. The filesystem provider scans project and user roots in rank order; the model-facing catalog usually exposes only name and description, and loads the body on demand.

Shipped local scan order (dsh-skill-filesystem): project .dsh/skills → project .agents/skills → custom dirs → user DSH skills → user .agents/skills → bundled. On a name clash, the project-closer copy wins. The project root is the nearest ancestor with .git.

Skill names are kebab-case

Layout is my-skill/SKILL.md. Frontmatter needs at least name and description. Names are lowercase letters, digits, and hyphens. Recursive **/SKILL.md discovery is not supported.

Boot it: web profile and install commands

You need Node.js (community plugins often want 22+). Local preview:

npx @deepseek-ai/dsh web

The Web UI defaults to http://127.0.0.1:3080. Docs and plugin authors agree: bind loopback and do not listen unauthenticated dsh web on 0.0.0.0. Over SSH, forward the port; do not put the plugin panel on a public IP.

Standard bundle install:

dsh plugin --profile web add skillhub-plugin
# or a git source (pin a commit in production)
dsh plugin --profile web add "github:minivv/dsh-agent-skills"
# restart
# dsh web / dsh --profile web

dsh plugin add forwards the spec to pnpm: npm, git, or link: local paths. Monorepo subpackages use the Settings repository source (github:owner/repo#ref&path:/packages/foo); plugin add does not parse &path:.

Inspect the composition with dsh web --dump-config | grep name. dsh plugin --profile web remove pkg drops the dependency but does not rewrite hand-inserted rows in $DSH_HOME/profiles/web/cordis.patch.yml—delete those yourself.

2026 starter stack (keep this)

Do not click twenty cards on a plugin radar. Freeze this set for a week, then add:

LayerPick oneJob
RuntimeOfficial dsh webKernel tools + official skill tool + plugin manager
Skill discoverydsh-agent-skills or dsh-skills-anywherePull in Claude / Codex / Cursor / OpenCode skill dirs
Install UIskillhub-plugin or official DiscoverSearch skills/plugins in chat or Settings, confirm, then install
Web searchmodsearch (or an MCP you already run)Structured retrieval when the model has no native search
VisionEither modlens or dsh-vision-toolkitPaste-image OCR/layout; do not run both
MemoryOne official MCP overlay from examplesMemorix / MCP Reference Memory / Engram

Two plugins in the same category make the model hunt through duplicate tools and fill the context with summaries. Add only HTTPS market indexes you trust.

Developer at a laptop configuring DeepSeek Harness plugins and Agent Skills
Skill bodies load on demand. Control discovery roots and toggles before chasing a complete catalog.

Agent Skills: scan order and three managers

You likely already have SKILL.md trees under ~/.claude/skills, ~/.codex/skills, or ~/.cursor/skills. DSH itself prefers .dsh/skills and .agents/skills. Community plugins register extra providers on ctx.skills.

dsh-agent-skills: Settings page over local dirs

Repo: minivv/dsh-agent-skills.

dsh plugin --profile web add dsh-agent-skills

Then Settings → Agent Skills, take over, restart. It scans ~/.agents/skills, ~/.claude/skills, ~/.codex/skills, ~/.config/opencode/skills, ~/.gemini/skills. Toggle dirs or individual skills without rewriting the original files. State lives in $DSH_HOME/agent-skills/state.json. Compatibility notes are in the README (0.1.x and 0.2.x).

dsh-skills-anywhere: zero-copy, many agents, git skill repos

Unofficial: noteflowai/dsh-skills-anywhere. It registers another provider; the official skill tool stays:

  • 60+ user- and project-level skill dirs (Claude Code, Codex, Cursor, Gemini CLI, OpenCode, and more).
  • Skills nested in Claude Code plugin marketplaces.
  • Shallow-clone any git skill repo into a cache; an edit in Cursor is visible on the next DSH load.
  • Web UI Pin / Hide / Exclude by origin. Also usable as MCP: npx dsh-skills-anywhere mcp.
dsh plugin --profile web add dsh-skills-anywhere
npx dsh-skills-anywhere list
npx dsh-skills-anywhere add anthropics/skills
npx dsh-skills-anywhere doctor

Skills you authored for DSH in the project rank higher than marketplace duplicates. Do not stack two “takeover” discovery plugins; pick one primary finder.

skillhub-plugin: search, inspect, install in chat

cocofhu/skillhub. npm name is skillhub-plugin (not the unrelated skillhub package; skip a raw git source that runs prepare):

dsh plugin --profile web add skillhub-plugin

Chat cards for skills, versions, safety flags, zip install into a discoverable dir; Settings can bump GitHub releases. A plugin plaza searches DSH plugins and installs from the card, then asks you to restart. Needs Node 22+. Bind dsh web to 127.0.0.1.

Skill markets vs the official plugin market

Two different “markets”:

  1. Skill market: drops SKILL.md bundles into ~/.dsh/skills (the user-dsh root the official tool already reads).
  2. Plugin market: one JSON index of installable DSH bundles (npm or a pinned git commit).

Community skill markets

  • dsh-skill-market (QQ-M/dsh-skill-market): search GitHub skill repos from Settings. dsh plugin --profile web add "github:QQ-M/dsh-skill-market", then restart.
  • dsh-skills-marketplace (cxdyun/dsh-skills-marketplace): git URL + ref + sparse path, flatten into ~/.dsh/skills/…, grouped toggles; uninstall only touches what it installed.

The same SKILL.md can serve DSH, Claude, and Codex. Check stars, recent commits, and install scripts before writing into the user root.

Official Custom plugin markets

Guide: Plugin markets. DSH ships no index source. Enable Custom plugin markets under experimental plugins, then add an https:// index URL on Discover. Confirm still runs normal compatibility checks. Market copy is third-party; the kernel validates JSON shape, not the truth of the blurbs.

Directories such as dshmarketplace.dev expose a search API and an optional dshmarketplace-plugin (/store). Treat them as a catalog; install from the confirmation’s npm/git spec and pin versions.

Capability plugins: search, vision, sessions, browser, memory

liustack/modsearch fills in models without native web search: ask the web or X, get structured JSON evidence. If you already run a stable Brave/Tavily MCP, skip a second layer.

Vision: modlens or dsh-vision-toolkit

For text-only models:

Enable one set. Overlapping tool schemas make the model click the wrong one.

Session search: dsh-session-search

Docs example: dsh plugin --profile web add "github:dsh-external/dsh-session-search#main". Model-facing cross-session query is opt-in and wants an exact cwd match—decide the privacy boundary first. The sqlite index can exist without exposing the query tool to the model.

Browser: official browser-use plus one provider

Mount dsh-browser-use and exactly one provider: Playwright MCP, Chrome DevTools MCP, or Stagehand. A second provider is rejected. A launched browser belongs to that Agent/Session; disposing the session drops launched state (an attached external browser stays up).

Memory: official MCP examples, all default-off

examples/mcp-memory/ ships Memorix, MCP Reference Memory, and Engram overlays. They are interoperability samples, not an endorsement. Patch only one:

dsh web --patch "$PWD/examples/mcp-memory/memorix.cordis.yml"

To keep it across runs, merge the insert into the profile cordis.patch.yml—do not overwrite an existing patch file. The stdio bridge strips credential-like env vars and DSH_*; put secrets in the overlay config.env, not in prompts.

Channels and desktop: IM, Telegram, dsh-desktop

  • dsh-im: QR or credentials for Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, WhatsApp. Largest outbound-network surface—read the source and where tokens live.
  • Standalone telegram / qqbot plugins need the same review of egress and webhook bind addresses.
  • dsh-desktop: desktop shell as a plugin host; fine on a laptop. On a cloud host prefer web + SSH forward.

Channel plugins get messages in. They do not replace your business state machine. Tickets, builds, and billing still belong in your repo and database.

How to choose, remove, and avoid a bad install

  1. Read dsh.bundle and the README; confirm the profile name is web (or yours).
  2. Pin versions: name@x.y.z or github:owner/repo#<40-char sha> in production.
  3. Watch install scripts: if git needs allowBuilds / prepare, prefer a prebuilt npm package.
  4. Tool-name clashes: do not run two vision plugins or two skill takeovers; check --dump-config.
  5. Uninstall: remove, delete the matching patch insert, restart. If Settings is empty, check the client half-package and the browser console.
  6. Market indexes: HTTPS only; an http index can swap install sources on the path.
Developer preview means breaking changes

The official README says THERE WILL BE COMPATIBILITY-BREAKING CHANGES. After a dsh upgrade, read each plugin’s engines.dsh before bulk-updating community packages. Keep useful Skills in Git (project .dsh/skills); do not treat the whole profile node_modules as a backup.

Running on a Cloud Mac

The harness fits 7×24 cron, MCP stdio, and long sessions. A Cloud Mac in a fixed region with SSH can run dsh web on loopback while you forward 3080 to a laptop browser. Commit Skills and cordis.patch.yml; keep secrets in the keychain or a KMS, not the repo.

iOS / Xcode work still uses Xcode and simulators on that Mac; DSH only orchestrates the agent and tools. Pick one browser provider so it does not fight headless CI for the same Chromium profile.

FAQ

Full Q&A is in the page JSON-LD. Short version: Skills are not plugins; Claude skill dirs work after a discovery plugin; do not stack two skill markets; one memory overlay; keep the web UI on 127.0.0.1 and SSH-forward it.

Dev Journal · Agent

Keep Harness on loopback; SSH it to your browser

dsh web · Skills · Cloud Mac

View Cloud Mac plans
Limited offer View plans