DeepSeek Harness plugin

dsh-claude-compat

DeepSeek Harness plugin: bridge Claude Code's .claude/ directory (skills, commands, rules) into DSH native skill registry and message-stream rules injection.

Jump to install

Source facts

Repository
biedongbin/dsh-claude-compat
Latest update
Aug 22, 2026
Category
Tools & Capabilities
GitHub stars
9
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/biedongbin/dsh-claude-compat
Plugin: dsh-claude-compat
Author: biedongbin

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource ยท read only

<p align="center"> <img src="https://img.shields.io/badge/dsh-plugin-blue?style=for-the-badge" alt="DSH Plugin"> </p>

<h1 align="center">dsh-claude-compat</h1>

<p align="center"> <a href="README.zh-CN.md"><img src="https://img.shields.io/badge/๐ŸŒ_็ฎ€ไฝ“ไธญๆ–‡-็‚นๆˆ‘้˜…่ฏปไธญๆ–‡-red?style=for-the-badge" alt="็ฎ€ไฝ“ไธญๆ–‡"></a> </p>

<p align="center"> <img src="https://img.shields.io/badge/version-0.7.0-blue?style=flat-square" alt="Version"> <img src="https://img.shields.io/npm/dm/dsh-claude-compat?style=flat-square&label=downloads/month&color=brightgreen" alt="npm downloads/month"> <img src="https://img.shields.io/npm/dt/dsh-claude-compat?style=flat-square&label=total%20downloads&color=blue" alt="npm total downloads"> <img src="https://img.shields.io/badge/node-%3E%3D20-green?style=flat-square&logo=node.js&logoColor=white" alt="Node"> <img src="https://img.shields.io/badge/license-MIT-orange?style=flat-square" alt="License"> </p>

<p align="center">DeepSeek Harness plugin that bridges Claude Code's <code>.claude/</code> directory into DSH natively โ€” reuse your skills, slash commands, rules, agents, hooks, and MCP servers with zero migration.</p>

What it does

.claude/ pathMechanismBehavior
skills/**/SKILL.mdDSH skill providerName + description in the model-visible catalog; body loads on demand via the skill tool. New skills appear on the next catalog reconcile โ€” no restart.
commands/*.mdDSH skill providerSame, plus user-invocable: /command-name works in the slash menu.
rules/*.mdMessage-stream injectionRules are concatenated, wrapped in a <system-reminder> envelope, and prepended as a user-role message at the front of the message array once per session โ€” the same channel Claude Code uses (prependUserContext), which models follow reliably.
agents/*.mdDSH skill provider (delegation shim)DSH has no markdown subagent format, so each agent file becomes a skill whose body leads with an explicit "delegate with this persona" instruction. Model- and user-invocable, so /agent-name works. Same-name agents dedupe by rank like skills.
.claude/settings.json โ†’ hooksTool/prompt hooksClaude Code hooks subset bridged onto DSH's tools/pre-execute (PreToolUse), tools/post-execute (PostToolUse) and agent/pre-step (UserPromptSubmit) waterfalls. Commands run via /bin/sh -c with a Claude-style JSON payload on stdin; exit code 2 denies/blocks, hookSpecificOutput overrides are honored, timeouts allow through with a warning.
<projectRoot>/.mcp.jsonMCP serversClaude Code-format MCP server definitions are translated to dsh-mcp-client plugin instances at DSH startup from the launch workspace: command โ†’ stdio, url โ†’ streamable-http. Malformed entries or a missing @deepseek-ai/dsh-mcp-client degrade to a warning, never a crash.
~/.claude/plugins (installed plugins)DSH skill providerInstalled Claude Code plugin-marketplace plugins contribute their skills/commands/agents (via each install's .claude-plugin/plugin.json manifest, or a directory scan when manifest-less) at rank 750 โ€” the long tail: project .claude, DSH native, and ~/.claude all win collisions. Plugin MCP servers (mcpServers in the manifest) mount only when enablePluginMcp is opted in โ€” mounting third-party MCP servers is a bigger trust step than listing skills.

The same directories are also read from the user-level ~/.claude/ (skills, commands, rules, agents, and ~/.claude/settings.json hooks). Same-name skills/commands/rules/agents are deduped with a fixed priority:

project .claude > DSH native (.dsh) > ~/.claude

  • Project .claude entries carry rank 50; DSH's own skills โ€” project .dsh roots, .agents roots, and bundled skills (ranks 100โ€“600, BUNDLED_SKILL_RANK) โ€” sit in between; ~/.claude entries rank 700. So a project skill always overrides the DSH-native and user copies, and a user skill never overrides a DSH-native one.
  • Rule files with the same basename in ~/.claude/rules are skipped when the project already provides one.

CLAUDE.md / AGENTS.md are not touched โ€” DSH's built-in dsh-agent-instructions already handles those.

Built-in commands

Installing this plugin adds three management skills to the catalog:

| Command | What it does | |---|---| | /cc-plugin | Full Claude Code plugin management: list, install <name>[@marketplace], uninstall, enable, disable, update [name], search <term>, marketplace list\|add\|remove\|update. One-shot syntax /cc-plugin <name>@<marketplace> installs directly. Engine: the claude CLI when available, otherwise a built-in fallback (direct JSON + git, with timestamped backups of every file it touches). All state stays in Claude-native locations (~/.claude/plugins, ~/.claude/settings.json enabledPlugins) so Claude Code and DSH read the same truth. | | /reload-cc-plugins | Hot-reload the skill catalog: drop cached provider lists and notify observers so newly installed/removed skills appear in the current session โ€” no restart, no new session. | | /reload-skills | Alias of /reload-cc-plugins. | | /cc-resume | List Claude Code conversation sessions for the current project (~/.claude/projects/) and import any of them into DSH with full user/assistant/tool history. Imported sessions appear in the DSH session list titled cc: <preview> and resume like native ones. list / import <sessionId> / --limit-turns N for huge sessions. |

Typical loop: /cc-plugin install ralph-loop@claude-plugins-official โ†’ /reload-cc-plugins โ†’ new skills visible immediately. Plugin-shipped MCP servers still require a DSH restart (process-lifetime mount).

Requirements

  • DSH with a profile (e.g. web)
  • A project using Claude Code conventions: .claude/skills/, .claude/commands/, .claude/rules/, .claude/agents/, .claude/settings.json, and a project-root .mcp.json (all optional; ~/.claude/ equivalents are also picked up)
  • pnpm on PATH โ€” dsh plugin is a thin pnpm forwarder

Install / Update

One command โ€” the package declares dsh.bundle, so DSH activates it automatically (no manual cordis.patch.yml editing). Install or update to the latest release:

dsh plugin --profile web add dsh-claude-compat@latest

Or from GitHub:

dsh plugin --profile web add github:biedongbin/dsh-claude-compat

Restart DSH (dsh web). Done โ€” skills show up in /, rules are injected into every new session.

Configuration

OptionDefaultDescription
enableSkillstrueRegister the .claude/skills + .claude/commands + .claude/agents provider (project and ~/.claude)
enableRulestrueInject project + ~/.claude rules/*.md into the message stream
enableMcptrueTranslate <projectRoot>/.mcp.json into mounted MCP server plugins
mcpFailOnStartupErrorfalseForward to dsh-mcp-client: fail plugin startup when an MCP server fails to connect
enableHookstrueRun .claude/settings.json hooks (Pre/PostToolUse, UserPromptSubmit)
hooksTimeoutMs60000Per-hook run timeout (UserPromptSubmit capped at 10s regardless)
enableAgentstrueSurface .claude/agents/*.md as delegation-shim skills
rulesMaxBytes65536Hard cap on total injected project rules text
userRulesMaxBytes65536Hard cap on total injected ~/.claude/rules text
projectRootMarkers[".git"]Ancestor markers for project-root discovery
skillRank50Provider rank for project .claude skills (wins every DSH-native collision)
skillSourceproject-claudeSource tag for project catalog entries
userSkillRank700Provider rank for ~/.claude skills (loses to DSH-native 600)
userSkillSourceuser-claudeSource tag for ~/.claude catalog entries
userClaudeDir~/.claudeUser-level .claude directory (~ expands to the home dir)
enablePluginstrueSurface skills/commands/agents from installed Claude Code plugins (~/.claude/plugins)
pluginSkillRank750Provider rank for plugin content (the long tail โ€” everything else wins)
pluginSkillSourceclaude-pluginSource tag for plugin catalog entries
pluginsRoot~/.claude/pluginsPlugin-marketplace root (installed_plugins.json + cache/)
enablePluginMcpfalseMount plugin-declared MCP servers (opt-in; requires enablePlugins and enableMcp)
enablePluginManagertrueRegister the /cc-plugin, /reload-cc-plugins, /reload-skills management skills
pluginManagerRank40Rank for the built-in management skills (top of the catalog)

Notes

  • Skill naming: DSH requires kebab-case skill names. Nested skill directories are flattened (gitnexus/gitnexus-guide โ†’ gitnexus-gitnexus-guide); invalid frontmatter names fall back to the directory name.
  • MCP lifecycle: .mcp.json is read once at DSH startup from the launch workspace โ€” not per session โ€” and each server mounts for the process lifetime. Restart DSH to pick up edits.
  • Hooks scope: a deliberately small subset of Claude Code hooks: PreToolUse / PostToolUse / UserPromptSubmit. Matchers support exact names, * wildcards, and | alternation; commands run with stdin carrying the Claude-style JSON payload. Exit code 2 = deny (Pre) / block (Post); other non-zero exits and timeouts allow through with a warning.
  • Rules granularity: rules are read per new session (cached per session cwd). Editing a rule mid-session takes effect in the next session.
  • Rules content: rules are injected verbatim as instructions to the model. Only commit rules you want the model to follow โ€” same trust level as CLAUDE.md.
  • Catalog snapshot timing: the skill catalog is snapshotted when a session is created. Skills installed or edited mid-session surface after /reload-cc-plugins (hot reload) or in the next session.

Troubleshooting

Known limitation: /cc-resume via the skill tool

In some DSH runtime configurations the skill tool resolves in an agent-scoped layer where globally registered providers are not visible โ€” the invocation returns skill "cc-resume" is unknown or no longer available even though the catalog lists it. This is a DSH runtime layering behavior, not a plugin bug. The skill body only instructs the model to run the CLI, which is always available:

node node_modules/dsh-claude-compat/scripts/cc-resume.mjs list
node node_modules/dsh-claude-compat/scripts/cc-resume.mjs import <sessionId>

DSH won't start back up after a restart / port 3080 stuck. Old process still holding the port (symptom: EADDRINUSE in logs). Use the bundled restart script โ€” it waits for a clean stop, falls back to SIGKILL, and verifies the port before reporting success:

npx dsh-claude-compat-restart        # bin alias (installed with the package)
bash node_modules/dsh-claude-compat/scripts/dsh-restart.sh   # direct
bash scripts/dsh-restart.sh --no-patch   # skip the prompt patch, restart only

The script also re-applies the idempotent dsh-terminal-bash prompt patch, which npx/npm updates silently revert. DSH_RESTART_PORT overrides the port (default 3080).

Installed a plugin via /cc-plugin but its skills don't show. Run /reload-cc-plugins. Still missing โ†’ restart DSH (plugin-shipped MCP servers always need a restart).

/cc-resume import fails on compression. The importer needs the zstd binary (macOS: brew install zstd; most Linux images ship it).

/cc-plugin reports "claude CLI unavailable". The fallback engine handles install/enable/disable; for marketplace add/update, install Claude Code (npm install -g @anthropic-ai/claude-code) or manage marketplaces from Claude Code directly.

Release notes

  • [Changelog](CHANGELOG.md) ([็ฎ€ไฝ“ไธญๆ–‡](CHANGELOG.zh-CN.md)) โ€” release history from 0.1.0 to the latest version.

Acknowledgments

License

[MIT](LICENSE)

๐Ÿ“ˆ NPM Downloads

![NPM Downloads](.github/assets/downloads.svg)

Data: api.npmjs.org ยท npmtrends

โญ Star History

If this project helps you, please give it a โญ โ€” it motivates us to keep improving.

<p align="center"> <img src="https://img.shields.io/github/stars/biedongbin/dsh-claude-compat?style=for-the-badge&logo=github&color=gold" alt="GitHub Stars"> <img src="https://img.shields.io/github/forks/biedongbin/dsh-claude-compat?style=for-the-badge&logo=github" alt="GitHub Forks"> <img src="https://img.shields.io/github/watchers/biedongbin/dsh-claude-compat?style=for-the-badge&logo=github" alt="GitHub Watchers"> </p>

<div align="center"> <a href="https://www.star-history.com/#biedongbin/dsh-claude-compat&Date"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=biedongbin/dsh-claude-compat&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=biedongbin/dsh-claude-compat&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=biedongbin/dsh-claude-compat&type=Date" width="760" /> </picture> </a> </div>