前言¶
DeepSeek Harness (DSH) 的会话在创建时 cwd(当前工作目录)会被冻结,它是会话身份的一部分,决定了会话存储位置、沙箱根目录以及 AGENTS.md 和 skills 的发现根。当工作重心长期移出原目录时,文件工具需要写完整绝对路径,且项目指令和技能发现可能还停留在旧位置。dsh-cd 插件为此提供了两种操作粒度。
是什么¶
dsh-cd 是一个为 DeepSeek Harness (DSH) 提供的插件,由 johnnren 维护。它为模型增加了一个 cd 工具,并为用户增加了 /cd 命令。核心价值在于解决“只换基准”和“真切搬迁”两种场景。
安装¶
安装插件无需额外配置,安装命令如下:
dsh plugin --profile web add dsh-cd
安装后,插件自带的 cordis.patch.yml 会自动挂载,模型即可使用 cd 工具,输入框可用 /cd 命令。
核心功能¶
插件提供两种粒度的切换模式:
- 工作基准覆盖(轻量)
- 入口:
cd {"path": "..."} - 效果:只改变“相对路径解析基准”。文件工具(read/write/edit/glob/grep 等)和 bash 工具的默认 workdir 会跟随新目录,但会话身份不变(存储位置、沙箱根等不变)。这是一种可逆的快速切换。
- 入口:
- 真切工作区搬迁(重量)
- 入口:
cd {"path": "...", "workspace": true, "confirmed": true} - 效果:真正改变会话身份。会话的存储位置、沙箱根、AGENTS.md、skills 发现、侧边栏分组全部跟随新目录。这需要会话处于空闲状态,且用户明确同意(
confirmed: true)。
- 入口:
典型用法¶
模型调用¶
模型可以使用以下方式调用 cd 工具:
cd {"path": "/tmp/some-dir"}
请求真切搬迁时,需带上 workspace: true 和 confirmed: true:
cd {"path": "/path/to/other-project", "workspace": true, "confirmed": true}
其他用法:
* 回到上一个目录:cd {"path": "-"}
* 查看当前目录与排队状态:cd {}
用户命令¶
用户在输入框输入以下命令(不消耗模型回合):
* /cd <directory>:真正搬迁会话到该目录。
* /cd:查看当前目录、所属工作区、覆盖状态与排队中的真切切换。
技术细节与注意事项¶
- 状态持久化:覆盖状态会写入
$DSH_HOME/dsh-cd/state.json,实例重启后该会话的覆盖设置会自动恢复。 - 子代理继承:从当前会话派生的子代理会继承父会话的覆盖目录。
- 真切搬迁限制:
- 必须由用户明确同意(
confirmed: true),模型不得自行补全。 - 会话必须在回合空闲时执行,否则本轮仍按工作基准工作,回合结束后才完成搬迁。
- 搬迁会重写会话日志,任何一步失败都会回滚。
- 必须由用户明确同意(
- 环境要求:
- 需 Node.js >= 22.5。
- 依赖宿主的
@deepseek-ai/dsh-tools和@deepseek-ai/dsh-home-paths。
- 侧边栏同步:真切搬迁后,会话本身立即可用,但侧边栏分组通常需要刷新页面(F5)才能更新。
总结¶
dsh-cd 通过插件化的方式解决了 DSH 会话工作目录冻结的问题,既提供了轻量的路径基准覆盖,也提供了重量的工作区搬迁能力。适合需要在同一会话内频繁切换上下文,或需要将工作重心永久转移至其他项目的场景。
- 插件目录: https://www.skillhub.cn/plugins/john-walks-slow/dsh-cd
- GitHub 仓库: https://github.com/john-walks-slow/dsh-cd