前言¶
DSH(DeepSeek Harness)里,模型选择、会话历史、权限、停止控制和 token 统计通常由 DSH 统一管理。若想把某些回合交给 Claude Code、Codex 或 Kimi Code 执行,常见麻烦是:额外维护一套 CLI 会话和模型配置,或者把外部 CLI 的活动混进 DSH 工具流,导致统计口径不一致、工具被重复执行。
dsh-harness-ally 的做法是把这几类执行入口放进同一个 DSH 会话生命周期:模型仍由 DSH 原生模型选择器决定,Harness 则按回合切换。
这是什么¶
dsh-harness-ally 是 BaronCyrus 维护的 DSH Agent Preset,许可证为 MIT。
它解决的问题是:让 DeepSeek Harness、Claude Code、Codex 和 Kimi Code 共享同一个 DSH 会话生命周期,并与 DSH 原生模型选择器自由组合。
它不替换 DSH 的 composer/model selector。模型目录仍跟随现有 DSH 配置,Harness 由独立的「选择Harness」控件决定。
核心能力¶
模型选择与 Harness 选择分离¶
- 继续使用 DSH 原生模型选择器选择
provider/model。 - 自动使用当前已配置的全部
provider/model。 - 每个回合可切换 DeepSeek Harness、Claude Code、Codex 或 Kimi Code。
- Harness 选择器只在「Harness联盟模式」出现,Standard 模式完全不显示。
- 选择 Claude Code、Codex 或 Kimi Code 后,由对应 CLI 实际执行。
外部执行过程可见¶
- 外部回合立即显示
Harness · 正在执行。 - 可公开的 thinking/reasoning summary、
Bash、文件修改、WebSearch、MCP 等活动实时显示在只读 Think 过程区。 - Claude Code 使用 partial messages,Codex 使用 app-server,Kimi Code 使用 ACP
session/update。
不把外部活动伪装成 DSH tool call¶
外部活动绝不伪装成 DSH tool call,避免 Standard Agent 重复执行同一命令。
CLI 自动检测与托管安装¶
- 优先使用
PATH中的全局 CLI。 - 缺失时在 Harness 菜单内显示「安装」。
- 安装到 DSH 自有目录,不使用 sudo。
- preset 同时提供
subagent_claude_code、subagent_codex与subagent_kimi_code。
token 统计与会话停泊¶
- 外部 Harness 的 uncached/cache-read/cache-write/reasoning token 会回到 DSH 原生 token meter。
- 有条件的原生会话停泊与续接:连续使用只发送本轮请求,跨 Harness 切回只补交离开期间的已完成 canonical history。
- 干净完成且未取消的外部 run 会把结构化 activity 收敛为有界、版本化的工作台账,并对常见凭据形态脱敏。
环境要求¶
- DSH(DeepSeek Harness)Web 部署
- Node.js 与 pnpm(DSH Web Profile 已使用 pnpm)
- macOS、Linux、Windows
- Claude Code、Codex、Kimi Code CLI 均为可选:可预先全局安装,也可以在「选择Harness」菜单中按需安装
安装¶
先克隆到固定 preset 路径,再执行安装脚本:
git clone https://github.com/BaronCyrus/dsh-harness-ally.git ~/.dsh/.agent-presets/harness-ally
node ~/.dsh/.agent-presets/harness-ally/setup/install.mjs
如果设置了 DSH_HOME,需要将命令中的 ~/.dsh 替换为对应目录。
安装后重启现有 dsh web 进程,然后新建「Harness联盟模式」会话。不要另起替代 Web server;已经打开的 GUI 只会连接原来的 DSH 进程。
典型用法¶
- 继续使用 DSH 原生模型选择器选择
provider/model。 - 打开「选择Harness」,选择 DeepSeek Harness、Claude Code、Codex 或 Kimi Code。
- 正常发送消息。回合进行中 Harness 会锁定,停止仍由原生 composer 控制。
- 外部回合会先出现
Think · Harness · 正在执行,后续 thinking 和工具活动实时更新。 - 最终消息下方显示
Harness · model徽标。 - 缺失的 Claude Code、Codex 或 Kimi Code 不可直接选择,只会显示「安装」按钮;安装完成后即可选择。
CLI 解析顺序是“全局 PATH 优先,DSH 托管目录兜底”。
适用场景与注意¶
适合希望在 DSH 中保留统一模型选择、会话历史和统计口径,同时按回合借用外部 CLI 执行能力的开发者。
需要注意:
- 插件会加入现有
dsh web进程运行,受当前 DSH 配置、DSH_HOME、sandbox 和权限策略约束。 - 非
danger-full-access模式由 DSH 外层sandbox.confine()包裹。 - 安装前建议检查源码和 MIT 许可证,并确认当前 DSH 构建是否支持所需行为。
- 双口径上下文修复需要 DSH 的
TokenUsage与 token-meter 支持contextInputTokens/contextOutputTokens;较旧的 DSH 构建会忽略新增字段。 - 当前前台外部 Harness 只接受文本请求;最新顶层用户消息含图片时会在 dispatch 前明确提示切回。
- prompt 通过 stdin、app-server RPC 或 ACP JSON-RPC 传输,不出现在 argv。
- bridge 仅监听
127.0.0.1,每个 route 使用随机 bearer token。 - 错误诊断不会回传 CLI 原始 stderr、route token 或环境变量。
- 原生会话 lane 按
DSH session × Harness × provider × model隔离。 - vendor session 是可丢弃缓存,DSH Session 日志始终是唯一 canonical history。
- Codex 的 reasoning 封装使用持久 AES-256-GCM key,key 以
0600位于 DSH state;该机制不构成能抵御同时读取 key 与托管状态的独立安全边界。
参考¶
- GitHub:https://github.com/BaronCyrus/dsh-harness-ally
- 目录页:未提供可确认链接,可按仓库名在插件目录中检索。