dsh-movein
已验证 · 实测可装 sjh9714
功能简介
一键迁移整套 Claude Code/Codex 配置到 DSH(技能、斜杠命令、MCP、hooks、子代理、权限规则),默认 dry run 出「搬家清单」预演、写入前自动备份、一键回滚。
可用 — 实测通过,早期项目
一键迁移整套 Claude Code/Codex 配置到 DSH(技能、斜杠命令、MCP、hooks、子代理、权限规则),默认 dry run 出「搬家清单」预演、写入前自动备份、一键回滚。 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-movein
Migrate your Claude Code setup into DeepSeek Harness (DSH) without rebuilding it by hand.
Preview instructions, skills, commands, agents, hooks, permission rules, and MCP servers before DSH writes anything. Existing destinations stay untouched.

This GIF uses two screenshots from a live DSH 0.1.1-rc.2 run. The first shows the dry run and the second shows the applied result.
If this saves you setup time, star dsh-movein.
Import inside DSH
dsh plugin --profile web add dsh-movein
Restart dsh web, open Settings, then choose Move in.
- Claude Code is the primary path
- Dry run is the default
- Every category can be included or excluded
- Conflicts and unsupported entries appear before apply
- Codex and OpenCode stay available under the secondary origin panel
The same plugin also registers movein_from_claude_code and movein_from_opencode for model-driven use. Both tools stay dry until apply=true.
Use the CLI
Pick your origin
# Claude Code
npx dsh-movein
npx dsh-movein --apply
# Codex
npx dsh-movein --from codex
npx dsh-movein --from codex --apply
# OpenCode
npx dsh-movein --from opencode
npx dsh-movein --from opencode --apply
Every command is a dry run until --apply is present. Use --copy if you want copied skills instead of symlinks.
Compatibility
| Origin | What moves |
|---|---|
| Claude Code | Global and project instructions, skills, slash commands, MCP servers, supported hooks, subagents, and mapped permission rules |
| Codex | Global AGENTS.md, custom prompts, and stdio MCP servers from config.toml |
| OpenCode | Instructions, skills, commands, agents, and local or remote MCP servers from V1 or V2 JSON and JSONC config |
The full compatibility matrix names the source path, destination, preserved behavior, and unsupported parts for each origin.
OpenCode as an origin
--from opencode follows OpenCode configuration precedence across the global config, OPENCODE_CONFIG, project configs, .opencode directories, and OPENCODE_CONFIG_DIR. Direct project configs load from the Git root toward the current directory, then .opencode configs load in the same order.
It supports both opencode.json and opencode.jsonc, including comments and trailing commas.
skillandskillsdirectories move as DSH skillsagentandagentsfiles convert to DSH skillscommandandcommandsfiles convert to user-invocable DSH skills- Inline agents and commands convert the same way as file-based assets
- V1 agent
promptand V2 agentsystemboth become the DSH skill body - Local MCP command arrays split into DSH stdio command and args
- Remote MCP servers become streamable HTTP rows
- V1 MCP maps and V2
mcp.serversmaps are both supported - Disabled MCP servers stay disabled and appear in the report
{env:VAR}stays a runtimeprocess.env.VARreference{file:path}stays visible for manual review and is never read by dsh-movein
Project AGENTS.md needs no move because DSH already reads it. One global instruction file can link to ~/.dsh/AGENTS.md when that destination is free. Multiple files, globs, URLs, OpenCode permissions, and OpenCode plugins are reported instead of guessed.
If any JSONC file cannot be parsed, --apply is blocked before the first write.
Safety
- Dry run is the default
- Existing destinations are skipped
- On Windows, a permission-denied symlink falls back to a copy and is named in the report
cordis.patch.ymlis backed up before each writenpx dsh-movein restorerestores the newest patch backup~/.dsh/movein-manifest.jsonrecords moved sources and destinations- Environment placeholders remain runtime references
- Secret-looking plaintext values are reported before apply
- Sessions stay out of scope
After moving
npx dsh-movein doctor
doctor checks recorded destinations, skill frontmatter, required packages, and supported Claude Code hook mappings.
Then inspect the composed DSH profile.
dsh --profile web --dump-config | grep -E "mcp-|cc-hooks"
Open a new DSH session after moving skills because the skill catalog is captured per session.
Claude Code dual boot
DSH-born skills can return to Claude Code without copying assets that originally came from Claude Code.
npx dsh-movein --reverse
npx dsh-movein --reverse --apply
Reverse moving currently targets Claude Code only.
Claude Code to OpenCode
The compatibility command remains available for users who need the full Claude Code to OpenCode migration route.
npx claude-to-opencode
npx claude-to-opencode --apply
If you only need Claude Code command hooks in OpenCode, use the focused opencode-claude-code-hooks plugin instead.
Not moved
- Sessions
- OpenCode permissions and plugins
- Codex approval and sandbox policy
- Instruction globs, remote instruction URLs, or multiple instruction files
- Hand-written DSH MCP and hook rows during reverse moving
Conversation history belongs in dsh-chat-import.
Project status
The CLI migration paths retain their rc.6 and rc.7 regression coverage. CI also boots a packed release inside current DSH and verifies the browser client registration and settings route against DSH 0.1.1-rc.2.
Listed in awesome-dsh-plugin and awesome-deepseek-harness. The measured migration notes also appear in dsh-handbook.
Star history
License
MIT
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-movein」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
Web profile:
dsh plugin --profile web add dsh-movein Headless(CLI)profile:
dsh plugin --profile headless add dsh-movein 包信息
npm:dsh-movein · 版本 0.6.0 · 实测环境 dsh 0.1.0-rc.6
实测报告
端到端验证通过:dsh 0.1.0-rc.6 上 L1 安装 + L2 加载 + L3 运行问答。
使用场景
扩展 agent 的编码能力面——给它一个新工具、工作流或集成,让它接手以前做不了的开发任务。
适合谁
想让 dsh 在真实代码库上像队友一样干活的开发者——能改、能跑、能验证,而不只是回答问题。
二次开发建议
工具/命令面就是缝:暴露更多 SDK 能力、加更聪明的上下文接线,或收紧改代码与验证之间的循环。