关于 dsh-baton
dsh-baton 将 Claude Code、Codex 等 MCP 客户端连接到 DeepSeek Harness,以便在 Harness 会话中委派和调整编码任务。它提供工作区与会话控制及命令行工具,并可回退到 Harness 无界面模式。
主要功能
- 01列出并创建 Harness 工作区
- 02发送任务并调整正在运行的任务
- 03查看会话、运行记录和活动
- 04等待结果或取消工作
- 05通过命令行管理工作区和会话
适用场景
- 01从 Codex 将编码任务委派给 Harness
- 02通过另一个客户端继续或调整运行中的会话
- 03检查进度并停止会话任务
MCP 相关
MCP 服务向 MCP 客户端提供 Harness 工作区、会话、任务、状态、等待和取消工具。其插件会为 Claude Code 和 Codex 注册该服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
12收录的工具列表 · 更新于 今天
此工具无需参数。
详细介绍
English | 中文
macOS · Windows(指南)· 无需 Node.js · 零依赖 · MIT
Claude Code 和 Codex 各自将一项任务交给 DeepSeek Harness,其子 Agent 用 1 小时 41 分钟(40 秒,打开声音)搭建了这条雨夜街道:
https://github.com/user-attachments/assets/72e2fdff-275e-48bc-8e5a-39ffb025a0a8
查看运行过程
一个 Codex 对话启动任务、排队发送后续请求、引导正在运行的轮次,并等待三项任务全部完成:
Codex 和 Claude 在同一个 Harness 会话中轮流发言,每条消息都会标注发送者:
快速开始
需要 DeepSeek Harness ≥ 0.2.1-rc.2(已登录)以及 Claude Code 或 Codex。除此之外不需要任何东西:无需 Node.js,也无需终端。macOS 和 Windows 的步骤相同。
1. 在 Harness 中添加插件: Plugins(插件)→ Add plugin(添加插件)→ 输入 dsh-baton-host → Install(安装)→ Enable now(立即启用)。
启用后,该插件会为所有文件夹中的 Claude Code 和 Codex 注册 dsh-baton,Harness 也会对此进行提示。
2. 检查: 在 新的 Claude Code 或 Codex 对话中,请求它调用 dsh_list_workspaces。它会列出你的 Harness 工作区。
就这么简单。如果 Harness 提示无法注册,请在终端中运行 npx -y dsh-baton-mcp setup(需要 Node.js ≥ 22.15);它会执行相同的注册操作。更新、移除和 Windows 相关详情请见下文。
工作原理
各客户端的等待方式(无需配置):
- Claude Code 会在后台等待运行结束(
dsh_send返回的wait_command),并在运行结束时被唤醒一次。 - Codex 会在
dsh_wait内等待,每次调用最长 270 s,略低于其 300 s 工具超时时间。等待尚未结束时,只会返回状态,因此 Codex 会再次调用,而不会进行总结。Codex 不会收到wait_command:它的终端无法唤醒它,因此它只能轮询。 - Codex 会要求你批准 MCP 工具调用:请批准
dsh-baton工具。对于无人值守的codex exec运行,请添加--approve-for-me。
工具
完整工具参考
| 工具 | 功能 |
|---|---|
dsh_list_workspaces | 列出 Harness 侧边栏中的工作区 |
dsh_create_workspace | 将文件夹注册为工作区(如果文件夹不存在则创建);如果已注册,则返回现有工作区 |
dsh_list_sessions | 按时间从新到旧列出会话,并显示标题、文件夹和运行状态;可按文件夹或文本筛选。不会列出已归档的会话 |
dsh_read_session | 读取某个会话最近的提示词和回复(含工具名称);对于已归档的会话,返回 archived: true |
dsh_send | 发送消息:session_id 用于继续该会话;cwd 或 workspace_id 用于启动新会话(如果 cwd 尚未注册为工作区,则会先注册)。立即返回 run_id。在 Harness 中,该消息会标记为“由 Claude / ChatGPT 从另一个聊天发送”。已归档的会话会被拒绝:请在 Harness 中取消归档,或启动新会话 |
dsh_status | 查看运行进度:状态、最近的文本和工具调用、最终回复;当轮次已结束但子 Agent 或任务仍在运行时,显示 waiting_on;有人在运行期间于 Harness UI 中输入内容时,显示 human_interjections;运行因 Harness 重启而中断时,状态为 interrupted |
dsh_wait | 等待运行结束:Codex 每次调用最长等待 270 s,其他客户端为 50 s。若仍在运行,则返回仅包含状态的 timed_out;请再次调用。可在后台等待的客户端应改用 dsh_send 的 wait_command。dsh_status 仅用于查看一次状态,不能用于等待 |
dsh_session_activity | 查看会话当前正在执行的内容:运行中的轮次、任意深度的子 Agent、后台任务;对于已归档的会话,返回 archived: true |
dsh_cancel | 通过 run_id 或 session_id 停止会话正在执行的所有内容:轮次、子 Agent、任务(已排队的消息会保留) |
dsh_rename_session | 重命名会话 |
dsh_rename_workspace | 重命名工作区(仅更改侧边栏标题;不会移动文件夹) |
dsh_list_runs | 列出最近的运行 |
CLI
dsh-baton workspaces
dsh-baton new-workspace ~/code/new-app --title "New App"
dsh-baton sessions --cwd ~/code/new-app
dsh-baton send --cwd ~/code/new-app "Scaffold the project"
dsh-baton send --session session-xxxx "Next: add tests"
dsh-baton send --session session-xxxx --mode steer "Interjection: don't change the API"
dsh-baton wait hrun-xxxx # blocks, prints the final reply; exit 0 on success
dsh-baton status hrun-xxxx
dsh-baton activity session-xxxx # running turn, sub-agents, background jobs
dsh-baton cancel --session session-xxxx
dsh-baton rename session-xxxx "New title"
dsh-baton rename-workspace ~/code/new-app "New name"
配置
| 变量 | 默认值 | 含义 |
|---|---|---|
DSH_BATON_BACKEND | auto | auto、host 或 headless |
DSH_BATON_HOME | ~/.dsh-baton | 套接字和无头模式运行记录 |
DSH_BATON_SOCKET | $DSH_BATON_HOME/host.sock | 插件套接字路径(两端必须一致);在 Windows 上映射为每用户命名管道 |
DSH_BATON_WAIT_S | Codex 为 270,否则为 50 | 一次 dsh_wait 调用的等待时长;仅在调高客户端的工具超时时设置此值,并确保该值低于超时时长 |
DSH_BIN | macOS 应用内的 dsh,否则为 PATH | 无头模式的 Harness CLI |
DSH_HOME | ~/.dsh | Harness 数据文件夹(无头会话读取此文件夹) |
DSH_BATON_ACCOUNT | 1 | 0 表示无头模式使用 API 密钥路线 |
DSH_BATON_PATCHES | 空 | 额外的无头 --patch 覆盖项,以 : 分隔 |
无头模式回退详情
当插件无法访问时,MCP 服务会回退到 Harness 的 dsh headless 命令。它只能继续由自身创建的会话(无头模式不会加载 standard 等 Agent 预设),并且新会话不会显示在桌面侧边栏中。默认情况下,patches/account.patch.yml 会复用桌面应用的 DeepSeek 账号登录,因此无需 API 密钥。
开启插件后会执行的操作。 它会将 MCP 服务复制到 ~/.dsh-baton/app,这是一个固定位置的文件夹;并直接将 MCP 条目写入 ~/.claude.json 和 ~/.codex/config.toml,同时为每个文件保留一个 *.bak-dsh-baton 备份。如果在 PATH 中找到你自己的 Node.js ≥ 22.15,就使用它启动服务;如果没有,则使用 Harness 自带的运行时(Harness 应用的 Node 模式,即 ELECTRON_RUN_AS_NODE=1),因此无需安装其他内容。无论哪种方式,只要安装了桌面应用即可使用,即使 claude / codex 不在你的 PATH 中也没问题。每次 Harness 启动时都会再次运行:如果条目已经正确,或已有可用条目且会启动另一个 dsh-baton 实例,就不会改动它。在 Harness 中,输入软件包名称后,源会自动切换为 npm 注册表(“Official npm registry”,「npm 官方源」),无需重启。如需关闭自动注册,请为 Harness 设置 DSH_BATON_AUTO_REGISTER=0。
npx -y dsh-baton-mcp setup 会在终端中执行相同的注册操作,适用于插件无法注册的情况,或你从 MCP 目录前来安装的情况。如果插件已注册,则不会进行任何更改;如果缺少插件,则会引导你安装。
更新。 Harness 只有官方插件才有更新按钮,因此请依次选择:Plugins → dsh-baton-host → Uninstall,然后选择 Add plugin → dsh-baton-host。发布后的一段时间内,Harness 可能会安装旧版本(pnpm 的 minimumReleaseAge 会暂缓安装刚发布的版本,安装对话框会说明这一点);如需立即获取新版本,请输入版本号:[email protected]。再次开启插件后,它会将 MCP 服务更新到相同版本;新对话会使用该版本。如果两者版本不一致,首次发现问题的工具调用会提示你。
移除。 依次选择 Harness → Plugins → dsh-baton-host → Uninstall,然后运行 npx -y dsh-baton-mcp setup --remove。插件无法区分卸载操作和 Harness 退出,因此会将 MCP 条目留给该命令处理;该命令也会删除 ~/.dsh-baton/app。运行记录会保留在 ~/.dsh-baton 中,直到你将其删除。
从 dsh-bridge 升级。 在 Harness 中,先卸载 dsh-bridge-host,然后添加 dsh-baton-host;开启后,它会替换旧的 dsh-bridge MCP 条目。DSH_BRIDGE_* 变量和已有的 ~/.dsh-bridge 文件夹目前仍可继续使用。工具会改用新的前缀(mcp__dsh-baton__…),因此请更新任何权限允许列表。通过粘贴 ~/.dsh-baton/app/host 添加的 0.4 之前的插件仍可运行,但不会通过 npm 更新:请卸载它,然后按名称添加 dsh-baton-host。
从源代码安装(用于跟进 main 或修改代码):运行 git clone https://github.com/JialaoLiu/dsh-baton.git,然后在 Harness 中从克隆仓库的 host 文件夹添加插件(Add plugin → 粘贴路径)。开启后,它会注册克隆仓库本身,因此代码发布前的更改即可生效。运行 git pull 即可更新。运行 node dsh-baton/src/cli.mjs setup 可在终端中注册该克隆版本。
Windows。 步骤相同;WINDOWS.md 介绍了不同之处(使用命名管道而非套接字文件),以及修复 Plugins 页面无法安装或卸载的问题的方法。
手动注册和 Claude 桌面应用
插件和 setup 会写入与以下命令相同的条目(使用 node 的绝对路径,因为桌面应用启动 MCP 服务时不会使用 shell 的 PATH):
claude mcp add dsh-baton -s user -- "$(command -v node)" "$PWD/dsh-baton/src/server.mjs"
codex mcp add dsh-baton -- "$(command -v node)" "$PWD/dsh-baton/src/server.mjs"
-s user 很重要:如果不使用它,Claude Code 只会为当前项目文件夹注册该服务。
Claude 桌面应用(可选):如需使用聊天应用的连接器(与 Claude Code 分开),请将以下内容添加到 ~/Library/Application Support/Claude/claude_desktop_config.json,然后重启应用。它会显示为“Local dev”连接器。
{ "mcpServers": { "dsh-baton": { "command": "/absolute/path/to/node", "args": ["/absolute/path/to/dsh-baton/src/server.mjs"] } } }
任何以你的操作系统用户身份运行的进程都可以通过 socket 驱动 Harness,效果与直接运行 dsh 相同。dsh-baton 依赖 Harness 0.2.1 系列的内部服务 API,因此 Harness 的主要版本更新可能需要后续发布新版本。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。