--- name: "delegate-to-dsh" description: "把任务交给 DSH(DeepSeek Harness)执行:用户说「交给 dsh」「让 dsh 干」「用 DSH 跑」「dsh 那边做」「转给 dsh」时使用;也适用于希望由外部编码 harness 承接的重活(长时间编码、批量命令、仓库级改动)。" --- # 把任务交给 DSH DSH 是本机通过 ACP 接入的外部编码 harness(OpenClaw agent id = `dsh`)。它有自己的模型、工作目录和工具,适合承接写代码、跑命令、仓库级改动这类"实活"。 ## 唯一正确的调用方式 用 `sessions_spawn`,**必须显式带 ACP 运行时**: ```json { "task": "<完整、自包含的任务描述:目标 + 交付物 + 路径 + 验收标准>", "runtime": "acp", "agentId": "dsh", "mode": "run" } ``` - `runtime` 默认是 `subagent`(OpenClaw 内嵌),**省略它就会由你自己执行** —— 那等于没交给 DSH。 - `agentId` 必须是 `dsh`(在 `agents.entries` 里已配置 `runtime.type="acp"`,解析到 acpx harness `dsh`)。 - 需要跨消息延续同一份上下文时才用 `mode: "session"`(并要求 `thread: true`,微信/飞书渠道不支持线程绑定,所以日常用 `run`)。 - 任务描述要写全:DSH 看不到本会话的历史。 ## 纪律 1. **不要自己兜底执行。** 不要改用 `exec`、不要改用默认 `subagent`、不要"我先做一遍再让 dsh 看"。用户要的是 DSH 干活。 2. **不要静默降级。** ACP spawn 失败(例如 `dispatch_failed`、`Unknown agent id`、超时)时,如实把错误原文回给用户,不要假装已派发。 3. **结果原样回传。** 把 DSH 的回复贴回来(可加一句你自己的核对/摘要),并说明它的 runId 或子会话键,便于追溯。 4. **配对核验(可选)。** 涉及文件改动时,可自己只读核对(`exec` 跑 `ls`/`cat`)后说明"我独立核验过",但要标注清楚哪句是 DSH 原话。 ## 验证派发是否真的发生 只看回复文本会被骗:模型可能一边说"已交给 dsh",一边由 OpenClaw 内嵌运行时执行完了。真正的证据是: ```bash # 1) 网关日志里出现 ACP 子会话 journalctl --user -u openclaw-gateway --since "10 minutes ago" | grep "agent:dsh:acp:" # 2) DSH 侧新增会话目录 ls -lt ~/.dsh/sessions/--home-yangxuan-.openclaw-workspace-dsh--/ | head ``` 两处都没有 → 这次并没有真的走 ACP。 ## 环境事实(2026-09-16 实测,bk02) - `openclaw config get acp`:`backend=acpx`、`defaultAgent=dsh`、`allowedAgents=["dsh"]`、`stream.deliveryMode=live`。 - `openclaw config get plugins.entries.acpx.config.agents.dsh`:`command=/home/yangxuan/.nvm/versions/node/v26.8.2/bin/dsh`、`args=["--profile","acp"]`。 - 微信 / 飞书 / 钉钉渠道**不支持** ACP 会话绑定(`conversationBindings` 能力缺失),所以 `/acp spawn dsh --bind here` 在这些渠道不可用;持久 `bindings[] type="acp"` 同样依赖适配器的绑定钩子,三家都没有。**只能靠本次派发**。 - 完整文档:`~/.openclaw/docs/bk02-dsh-openclaw-ACP集成.md`。