共计 7779 个字符,预计需要花费 20 分钟才能阅读完成。
介绍
DeepSeek Harness(DSH)可以把一个独立任务交给原生 Codex 或 Claude Code 执行,再把最终结果交回当前对话。对应的真实工具名是 subagent_codex 和 subagent_claude_code。有些人会把后者写成 subagent_claude_codex,这是笔误,后文统一使用正确名称 subagent_claude_code。
这篇教程以 Windows 的 web Profile 为例,讲清楚 Provider 安装、Preset 工具暴露、权限、重启、前后台调用和常见故障。命令里的 web 可以替换为你实际使用的 <profile>。本文已按本机 DSH 0.1.5-rc.2、已安装 Bundle 文档和 DeepSeek Harness 官方仓库核对。

先理解两层配置
安装 Bundle 和让模型看到工具是两件事,缺一不可:
| 层级 | 作用 | 对应配置 |
|---|---|---|
| Profile / Host | 注册 codex、claude-code Provider,提供实际运行能力 |
安装两个 Bundle,并在需要时设置 permissionMode、env |
| Agent Preset | 决定某个会话的模型能否调用 Provider | 暴露 subagent_codex、subagent_claude_code 两个工具 |
只安装 Provider 时,Host 已经具备能力,但普通 Agent 仍看不到工具;只在 Preset 里启用工具而未安装 Provider,工具也找不到实际后端。
这两个 Bundle 使用包内锁定的原生 CLI/SDK 载荷,不会因为系统 PATH 中恰好有 codex 或 claude 就自动启用,也不会回退到全局 CLI。不过,Codex 和 Claude Code 的原生登录、用户配置、项目配置仍然是权威来源,DSH Provider 不会替你创建账号、登录或改写原生设置。
安装前建议先确认原生产品能够正常认证。Codex 可使用 codex login;Claude Code 可先运行 claude,再在交互界面执行 /login。如果已经登录并能正常使用,一般不需要重复操作。
安装两个Provider Bundle
打开 PowerShell,执行:
dsh plugin --profile web add @deepseek-ai/dsh-subagent-codex
dsh plugin --profile web add @deepseek-ai/dsh-subagent-claude-code
官方命令会把包安装到目标 Profile,同时把 Bundle 加入 Profile 清单。不要只在目录中运行普通 pnpm add,否则可能只装了依赖,却没有完成 Bundle 注册。
检查安装结果:
$ProfileDir = "$env:USERPROFILE.dshprofilesweb"
$Profile = Get-Content "$ProfileDirpackage.json" -Raw | ConvertFrom-Json
$Profile.dependencies.PSObject.Properties.Name |
Where-Object { $_ -like '@deepseek-ai/dsh-subagent-*' }
$Profile.dsh.profile.bundles |
Where-Object { $_ -like '@deepseek-ai/dsh-subagent-*' }
依赖和 dsh.profile.bundles 中都应出现:
@deepseek-ai/dsh-subagent-codex
@deepseek-ai/dsh-subagent-claude-code
还可以先检查合成配置是否有效:
dsh --profile web --dump-config > $null
if ($LASTEXITCODE -eq 0) { 'Profile 配置合成成功' }
配置Provider权限
Profile 的用户补丁文件位于:
%USERPROFILE%.dshprofileswebcordis.patch.yml
下面是追加片段,不是完整文件。保留文件中所有现有内容,把两段追加到顶层 YAML 数组;如果已经存在相同 id,就在原有 config 中修改,不要再写一份重复项。
普通用户日常编码可先采用下面的折中方案:Claude Code 允许文件编辑但拒绝其他无人值守权限请求,Codex 自动评审权限请求。
- id: subagent-claude-code
config:
permissionMode: acceptEdits
- id: subagent-codex
config:
permissionMode: approve-for-me
Claude Code权限模式
| 值 | 行为 | 建议 |
|---|---|---|
dontAsk |
不弹出提示,未提前授权的操作直接拒绝 | 默认值,适合只读分析 |
acceptEdits |
自动接受文件编辑,其余权限请求拒绝 | 普通编码用户优先考虑 |
auto |
交给 Claude Code 原生分类器自动允许或拒绝 | 熟悉原生自动权限后再用 |
plan |
只做规划,不执行需要审批的操作,完整计划作为最终答案返回 | 适合先审方案 |
bypassPermissions |
跳过权限检查 | 高风险,仅限隔离且可信的环境 |
Codex权限模式
| 值 | 行为 | 建议 |
|---|---|---|
never |
永不申请审批,在原生 sandbox 中执行;不允许的操作会失败 | 默认值,适合审查和只读任务 |
approve-for-me |
使用 workspace-write,由 Codex 自动评审权限请求,不等人工确认 |
普通编码用户优先考虑 |
dangerously-bypass-approvals-and-sandbox |
跳过审批和 sandbox,获得 danger-full-access |
极高风险,只能显式启用 |
本机当前为了无人值守执行,实际使用的是下面这组全权限配置:
- id: subagent-claude-code
config:
permissionMode: bypassPermissions
- id: subagent-codex
config:
permissionMode: dangerously-bypass-approvals-and-sandbox
这会允许子代理在父会话工作区中运行命令、修改甚至删除文件,并绕过常规审批或 sandbox。普通用户不要直接照抄;确需使用时,应在可信仓库、虚拟机或容器中运行,并提前提交代码或做好备份。
使用环境变量凭据
两个 Provider 会先清理父进程环境中具有凭证特征的变量,再叠加 Provider 的 env。因此,如果你不是使用原生登录文件,而是依赖 OPENAI_API_KEY、ANTHROPIC_API_KEY 等环境变量,就要在相应 Provider 的 config 中显式传入。
下面仍是追加到现有 Provider 的 config 内的可选字段,不要重复创建相同 id,也不要把真实密钥直接写进 YAML:
- id: subagent-claude-code
config:
permissionMode: acceptEdits
env:
ANTHROPIC_API_KEY: !!js process.env.ANTHROPIC_API_KEY
- id: subagent-codex
config:
permissionMode: approve-for-me
env:
OPENAI_API_KEY: !!js process.env.OPENAI_API_KEY
先在 Windows 用户环境中安全保存变量,再从新开的 PowerShell 启动 DSH。使用原生网页登录状态时通常不需要这两个 env 字段。
暴露两个委派工具
不要直接修改 DSH 安装目录中的内置 standard Preset,升级后可能被覆盖。推荐复制内置标准模式,创建一个用户 Preset,例如:
ID:standard-native-subagents
名称:标准模式 + 原生子代理
最稳妥的做法是在 DSH 中新建“创造模式”会话,把下面这段发给它:
请复制内置 standard Agent Preset,创建一个用户预设:
ID:standard-native-subagents
显示名称:标准模式 + 原生子代理
保留标准模式的所有配置,只修改以下两项:
1. 启用 tool-subagent-codex
2. 启用 tool-subagent-claude-code
两个工具使用:
- provider: codex / claude-code
- toolName: subagent_codex / subagent_claude_code
- backgroundMode: one-shot
- maxDepth: provider-managed
不要修改内置 standard 预设。创建后执行 standingKeyFor 挂载校验。
用户 Preset 通常位于:
%USERPROFILE%.dsh.agent-presetsstandard-native-subagents
复制后的 agent.cordis.yml 已经有这两行,只要删除各自的 disabled: true。下面是启用后的局部片段,位置在 delegation 组的 config 列表中,不是完整文件,也不要在已有行之外重复追加:
- id: tool-subagent-codex
name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: codex
toolName: subagent_codex
backgroundMode: one-shot
maxDepth: provider-managed
- id: tool-subagent-claude-code
name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: claude-code
toolName: subagent_claude_code
backgroundMode: one-shot
maxDepth: provider-managed
preset.yml 是这个目录中的完整小文件,可以写成:
name: 标准模式 + 原生子代理
description: 标准模式的用户副本,额外启用 Codex 与 Claude Code 原生子代理。
懒人版:让Agent自动安装配置
不想一步步手装的话,把下面整段交给具有本机文件和 PowerShell 权限的 DSH“创造模式”Agent 或其他可信编码 Agent。不要在提示词里粘贴任何密钥:
请直接在 Windows 上安装、配置并验证 DeepSeek Harness 的 Codex 与 Claude Code 原生子代理,做完告诉我结果,不要反问。
目标 Profile 是 web;若实际不存在,先报告并停止。操作前读取并备份 %USERPROFILE%.dshprofileswebpackage.json 和 cordis.patch.yml,不得覆盖现有配置。
1. 执行:
dsh plugin --profile web add @deepseek-ai/dsh-subagent-codex
dsh plugin --profile web add @deepseek-ai/dsh-subagent-claude-code
2. 确认 web Profile 的 dependencies 和 dsh.profile.bundles 都包含上述两个包,并运行 dsh --profile web --dump-config 做合成校验。
3. 在 cordis.patch.yml 的既有顶层数组中配置 Claude Code permissionMode 为 acceptEdits、Codex permissionMode 为 approve-for-me。已有相同 id 就合并 config,禁止重复和整文件覆盖。
4. 不要索取、读取或输出 API Key。原生登录是权威来源;若用户明确依赖环境变量,只用 !!js process.env.ANTHROPIC_API_KEY / OPENAI_API_KEY 映射到 Provider env,绝不把真实值写入文件。
5. 复制内置 standard Preset 为用户 Preset standard-native-subagents,显示名称“标准模式 + 原生子代理”;只删除 tool-subagent-codex 和 tool-subagent-claude-code 两行的 disabled: true,保持 provider、toolName、backgroundMode: one-shot、maxDepth: provider-managed 不变。不得修改内置 standard。
6. 执行 standingKeyFor 挂载校验。不要擅自终止正在运行的 DSH;告诉我完整停止 dsh web、打开新 PowerShell并重新运行 dsh web。
7. 我回复“已重启”后,使用该 Preset 新建会话,确认工具目录中有 subagent_codex 和 subagent_claude_code,并分别进行一次只读真实调用:只检查当前工作区并返回一句概述,不修改文件。
8. 最后报告 Bundle 版本、Profile 校验、Preset 路径、两个工具是否暴露、两次真实调用结果和安全配置,不显示任何凭据。
完整重启并验证
安装 Bundle 或修改 Profile 后必须完整重启 DSH Web Profile,仅刷新浏览器不够:
- 在运行
dsh web的 PowerShell 中按Ctrl+C; - 等进程完全退出;
- 如果刚设置了 Windows 用户环境变量,关闭并重新打开 PowerShell;
- 回到平时使用的工作目录,运行:
dsh web
然后刷新页面,使用“标准模式 + 原生子代理”新建会话。已有内容的旧会话不会动态获得新工具,也通常不能中途切换 Preset。
先做两次只读冒烟测试:
请调用 subagent_codex,只读检查当前项目,不要修改文件。返回是否成功启动,并用一句话概述项目。
请调用 subagent_claude_code,只读检查当前项目,不要修改文件。返回是否成功启动,并用一句话概述项目。
两者都会继承父 DSH 会话的当前工作目录。每次调用都是一个全新的、一次性的原生线程或 query,不会续接上一次子代理会话;父 Agent 只收到最终答案或安全错误,不会收到完整推理、工具过程、stderr 或工作区 diff。
工具参数和后台任务
模型调用两个工具时常用三个参数:
| 参数 | 作用 |
|---|---|
description |
给父 Agent 和任务列表看的简短说明,例如“审查登录模块” |
prompt |
发给子代理的完整、自包含任务,写清范围、限制、输出和是否允许改文件 |
run_in_background |
false 或省略时前台等待;true 时立即返回 Job ID |
两个工具都配置为 backgroundMode: one-shot。前台调用时,父 Agent 会等待子代理执行完再继续回复;项目较大或网络较慢时,界面可能长时间没有新输出,看起来像“卡住”。这不一定是 DSH 死锁。
耗时任务建议直接这样说:
请调用 subagent_codex 在后台只读审查当前项目的权限边界。description 写“Codex 权限审查”,prompt 中要求列出高、中、低风险并附文件位置,run_in_background 设为 true。启动后把 Job ID 告诉我,完成时用 job_output 取回结果。
请调用 subagent_claude_code 在后台检查测试覆盖缺口。description 写“Claude Code 测试审查”,prompt 中要求只读、不修改文件、按优先级给出建议,run_in_background 设为 true。任务完成后用 job_output 获取最终结果。
后台启动后会先得到 Job ID。任务仍在运行时,可以让父 Agent 稍后用 job_output 查询;收到完成通知后,再用 job_output 获取最终答案或失败状态。确定不再需要时可用 job_kill 取消。Provider 没有按实际经过时间自动触发的总超时,长任务不要一直放在前台等。
常见问题
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
| 提示工具不存在 | 当前会话使用的 Preset 没暴露工具,或是安装前创建的旧会话 | 选择启用两个工具的用户 Preset,新建会话 |
| Provider 已安装,模型仍看不到工具 | 只完成了 Profile 层,Preset 中两行仍有 disabled: true |
检查自定义 Preset,启用两条工具行 |
| 工具存在,但调用时报 Provider 不可用 | Bundle 未进入 dsh.profile.bundles,或 Profile 未完整重启 |
用 dsh plugin 重装、检查 package.json,完整重启 |
| 写文件或运行命令被拒绝 | 无人值守权限模式较保守,子代理不会停下来等人工批准 | 选择合适的 permissionMode;不要为省事直接上全权限 |
| 登录、模型或联网工具失败 | 原生 Codex/Claude Code 登录、配置、代理、MCP 或网络不可用 | 先在原生产品中验证;DSH Provider 不代替登录和原生配置 |
| 用环境变量登录却提示无凭据 | 凭证特征变量被清理,未通过 Provider env 显式传入 |
用 !!js process.env... 映射,并从新终端重启 DSH |
| 后台调用只返回 Job ID | 这是正常行为,最终结果不会直接附在启动响应中 | 等完成通知或稍后使用 job_output |
| 修改 YAML 后行为没变化 | Host 仍在使用旧 Profile,或当前会话工具目录已固定 | 完整停止并重启 dsh web,然后新建会话 |
| 前台调用像卡死 | 子代理仍在运行,且 Provider 没有总运行超时 | 优先使用 run_in_background: true,必要时 job_kill |
如果 DSH 自带联网搜索可以使用,但 Codex 或 Claude Code 子代理的联网/MCP 工具失败,也应优先检查对应原生产品的设置与权限。它们是独立运行环境,不会自动继承父 Agent 的所有工具。
安全建议
- 第一次验证只做只读任务,确认登录、工作目录和结果回传都正常后再允许写入;
- 普通编码优先使用 Claude Code 的
acceptEdits和 Codex 的approve-for-me,按任务逐步放宽; bypassPermissions与dangerously-bypass-approvals-and-sandbox只适合可信、隔离、可回滚的环境;prompt要自包含,明确允许修改的目录、禁止触碰的文件和验收方式;- 子代理取消前已经产生的文件或外部副作用不会自动回滚,重要项目先提交 Git;
- 不要在聊天、YAML、截图或日志中暴露 API Key、Token、Cookie、代理地址等敏感信息。
小结
在 DSH 中调用原生 Codex 和 Claude Code,需要先给 Profile 安装两个 Provider Bundle,再通过自定义 Agent Preset 暴露 subagent_codex 与 subagent_claude_code。配置完成后必须完整重启 dsh web,并使用该 Preset 新建会话。短任务可前台等待,长任务用 run_in_background: true 启动,再通过 job_output 收取结果。
官方资料:








