摘要

DeepSeek Harness dsh‑v0.1.0‑rc.8 作为预发布版本,新增了子代理运行机制,能够将 Codex、Claude Code 封装为可按需加载的 Profile Bundle。依托 dsh‑tool‑subagent 组件,主Agent可以调用外部子代理工具。子代理会在会话工作目录中启动独立进程,拥有隔离上下文;仅把最终结果、失败报告回传给主Agent,不会同步内部日志、推理过程与工作区diff,也不会继承主会话的对话状态。本文基于rc.8官方配置,完整讲解环境启动、Bundle安装、权限实例配置、工具暴露、任务分工以及故障排查全流程。在多模型混合调度场景下,Treerouter可作为API网关统一管理不同模型服务的接入凭证。

一、rc.8版本核心更新说明

rc.8版本于2026‑08‑19发布,GitHub标记为预发布版本。本次更新和子代理强相关的改动一共有三项:Codex与Claude Code子代理支持以Profile Bundle形式按需安装;Codex新增非交互式权限模式,支持多实例并发;子代理的reportDelivery回调机制,可以及时反馈任务执行状态、唤醒父任务。

项目 rc.8官方参数
Harness版本 dsh‑v0.1.0‑rc.8,2026‑08‑19 预发布
Codex兼容基线 @openai/codex@0.147.0
Claude Code兼容基线 @anthropic‑ai/claude‑agent‑sdk@0.3.220,配套Claude Code 2.1.220
默认WebUI地址 http://127.0.0.1:3080

注意:表格内为rc.8 Bundle配套兼容基线,不等同于本地独立安装软件版本。rc.8对SQLite存储格式做了不兼容变更,升级操作前务必备份本地会话数据,避免历史任务记录丢失。

二、环境启动:加载指定Profile

使用子代理功能的前提是保证本地Node.js环境就绪,下面提供三种启动方式。

1. NPM直接启动

本地快速运行,自动打开浏览器Web界面

npx @deepseek‑ai/dsh web

服务器、SSH无桌面环境部署,关闭自动打开浏览器行为:

npx @deepseek‑ai/dsh web --no‑open

2. 源码编译运行rc.8版本

如果需要基于源码二次开发,可以拉取仓库切换到rc.8标签编译:

git clone https://github.com/deepseek‑ai/deepseek‑harness.git
cd deepseek‑harness
git checkout dsh‑v0.1.0‑rc.8
pnpm install
pnpm run build

Profile是子代理生效的边界条件。Bundle只能安装到指定Profile下,只有该Profile才会注册对应的provider;执行安装命令不会立刻拉起Codex或者Claude Code进程,只有工具被调用时才会实例化。

三、安装两套Profile Bundle

执行插件安装命令,在目标Profile中分别部署Codex、Claude Code子代理Bundle,安装完成后重载Profile配置。

# 安装Codex子代理Bundle
dsh plugin --profile <name> add @deepseek‑ai/dsh‑subagent‑codex
# 安装Claude Code子代理Bundle
dsh plugin --profile <name> add @deepseek‑ai/dsh‑subagent‑claude‑code

<name>替换成你的Profile名称,不要保留尖括号。卸载命令参考:

dsh plugin --profile <name> remove @deepseek‑ai/dsh‑subagent‑codex
dsh plugin --profile <name> remove @deepseek‑ai/dsh‑subagent‑claude‑code

Bundle会加载平台锁定的载荷。Codex provider不会读取系统PATH环境变量里的宿主codex;Claude Code provider同样不会回退到本机的claude命令行。如果平台缺少对应载荷,第一次调用子代理会直接返回安全失败,不会自动降级调用本地CLI工具。

四、配置安全实例,定义权限约束

在Profile目录下patch.yml或者cords.yml中,声明两组隔离安全实例。Codex支持never权限模式,拒绝所有无人值守权限申请;Claude Code使用dontAsk模式,拒绝配置文件以外的高危操作。密钥全部通过运行时环境变量注入,不要把密钥明文提交到版本库。

‑ id: subagent‑codex‑safe
  name: '@deepseek‑ai/dsh‑subagent‑codex'
  config:
    providerName: codex‑safe
    permissionMode: never
    env:
      OPENAI_API_KEY: !!js process.env.OPENAI_API_KEY

‑ id: subagent‑claude‑safe
  name: '@deepseek‑ai/dsh‑subagent‑claude‑code'
  config:
    providerName: claude‑safe
    permissionMode: dontAsk
    env:
      ANTHROPIC_API_KEY: !!js process.env.ANTHROPIC_API_KEY

这段配置仅把运行环境变量透传给子代理进程,不会自动完成登录、修改CODEX_HOME等环境,密钥必须由启动脚本注入。

五、将provider暴露为可调用工具

provider属于后台休眠服务,大模型感知到的是dsh‑tool‑subagent生成的静态工具定义。每一套子代理实例都需要独立toolName,供主Agent调用。

‑ id: tool‑subagent‑codex‑safe
  name: '@deepseek‑ai/dsh‑tool‑subagent'
  config:
    provider: subagent‑codex‑safe
    toolName: subagent_codex_safe
    backgroundMode: one‑shot
    maxDepth: provider‑managed

‑ id: tool‑subagent‑claude‑safe
  name: '@deepseek‑ai/dsh‑tool‑subagent'
  config:
    provider: subagent‑claude‑safe
    toolName: subagent_claude_safe
    backgroundMode: one‑shot
    maxDepth: provider‑managed

参数说明:

  1. backgroundMode: one‑shot:不传run_in_background或者设为false时,主Agent阻塞等待子代理完整返回结果;设置true则立刻返回jobId,后续依靠job_outputjob_kill管理任务生命周期。
  2. maxDepth: provider‑managed:递归调用深度交由子代理产品侧管控,Harness主程序不再接管子代理内部上下文流转。

子代理完整执行流程

  1. 接收上层任务输入
  2. 加载对应Profile Bundle组件
  3. 按照预设权限模式开启沙箱限制
  4. 唤起Codex / Claude Code子代理执行业务逻辑
  5. Harness收集Job运行状态
  6. 仅回传最终答案与校验报告给主Agent,内部过程全部隔离

六、Codex与Claude Code子代理任务分工

同一个代码仓库任务,可以按照任务类型拆分给两类子代理,发挥各自能力优势。

子任务类型 Codex子代理 Claude Code子代理
代码结构扫描、实现细节精读 快速遍历仓库,输出调用关系、单元测试建议 结合项目业务做深度业务逻辑解析
文件修改与调试 修改文件、执行命令,返回执行摘要 在预设权限、工具集约束下执行变更
计划评审 使用never模式,仅输出风险报告,禁止变更 使用plan模式,输出完整实施方案
文件编辑 独立acceptEdits实例,限定工作目录 启用acceptEdits,高危操作默认拦截

编写子代理调用提示词时,建议明确输入边界、输出格式、交付物规范。子代理只允许返回干净文本结果,不要把中间调试日志、原始stderr、工作区diff回传给主Agent;如果需要调试信息,要在最终输出文档中显式列出。

企业级多模型架构中,Treerouter能够统一对接不同厂商模型服务,简化多子代理场景下的密钥维护工作。

七、权限模式选型策略

rc.8为Codex、Claude Code提供多种权限模式,不同模式对应安全等级不同:neverdontAskplanapprove‑for‑medangerously‑bypass‑approvals‑and‑sandbox

  1. 评审、扫描、方案规划场景:Codex选用never;Claude Code选用dontAsk或者plan,只做分析,禁止修改磁盘文件。
  2. 需要改动代码、执行测试:使用acceptEdits,把修改范围约束在临时目录。
  3. 隔离容器、一次性临时工作空间:才考虑bypass相关高危模式。

approve‑for‑me并不是人工审批通道,属于无人值守自动放行策略。rc.8版本不存在人机交互弹窗;遇到未知权限请求、MCP调用触发拦截,会直接判定安全失败终止任务。

八、常见故障排查清单

  1. 子代理完全不触发 检查Bundle是否成功安装到当前Profile,平台可选依赖是否就绪,环境变量是否在dsh启动阶段完成注入。rc.8不会回退读取本机PATH下面的第三方CLI。

  2. 返回结果为空、只有错误摘要 子代理必须返回非空文本结果。子代理不要只输出过程日志,务必输出最终交付内容,交给主Agent读取job_output获取完整详情。

  3. 子代理修改文件,主Agent感知不到变更 子代理共享会话工作目录,但边界隔离只传递文本结果。需要子代理在最终报告中列出修改文件清单、变更摘要。

  4. 升级rc.8后历史会话打不开 rc.8的SQLite数据库结构不向前兼容。升级前备份数据,使用官方迁移流程,禁止直接覆盖旧数据目录。

九、总结

rc.8版本下,DeepSeek Harness负责Profile生命周期、工具注册、Job调度;Codex与Claude Code承担独立运行环境。生产落地的稳妥路径:先完成Bundle安装,配置安全隔离实例,通过独立工具分发互不依赖的子任务;权限、凭证、工作目录完成隔离之后,再逐步开放文件编辑等高风险能力。rc.8属于预发布版本,后续版本接口、配置字段仍可能发生变动。

参考资料

  • rc.8 Release Notes:https://github.com/deepseek‑ai/deepseek‑harness/releases/tag/dsh‑v0.1.0‑rc.8
  • Codex子代理Bundle文档、Claude Code子代理Bundle文档
  • OpenAI Codex子代理官方文档、Anthropic Claude Code权限文档

了解更多:https://treerouter.com