dsh-claude-delegate:在 DSH 中按次调用宿主机 Claude Code CLI

前言

在 DeepSeek Harness(DSH)里做模型推理或复杂编码任务时,常见做法是挂官方子代理包、固定 SDK 版本,或自己拼子进程。另一条路是直接把任务交给本机已安装的 Claude Code 命令行:每次调用单独起进程,按次选模型和 effort,不绑死 SDK 版本,由用户自行 claude update 维护启动器。

本文介绍社区插件 dsh-claude-delegate(维护者 lcf2212dev,分类:模型推理)。它以独立 bundle 形式只暴露一个工具 claude_delegate,通过宿主机的 claude -p 启动无人工值守的 Claude Code 会话,不依赖 @deepseek-ai/dsh-subagent-claude-code,也不依赖固定子代理实例或钉死的 SDK。

这是什么

插件解决的是:在 DSH 会话里需要「另开一个 Claude Code 干活」时,如何用最少依赖、可调模型与 effort 的方式委派任务,且临时目录与鉴权行为可预期。

核心功能

单次调用 = 一个子进程

每次工具调用等价于在宿主机执行一次 Claude Code 打印模式,大致形态如下(实际参数由插件组装):

claude -p <task> --model <opus|sonnet|haiku> --effort <low|medium|high|xhigh|max> \
       --dangerously-skip-permissions --output-format json --no-session-persistence

要点(均来自 README):

  1. 默认放行权限:未设 readOnly 时使用 --dangerously-skip-permissions;readOnly: true 时改为 --permission-mode plan(不编辑、不跑需审批的命令)。
  2. model / effort 可按调用覆盖:未传时用 profile 行配置里的默认值。
  3. 鉴权:默认 isolateCredentials: true,会去掉环境中的 ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN、CLAUDE_CODE_OAUTH_TOKEN、CLAUDE_CODE_API_KEY,让本机 OAuth 登录优先生效;若要用 API Key,可设 isolateCredentials: false 并在 env 里传入。
  4. 独立临时目录:设置 CLAUDE_CODE_TMPDIR(默认 ~/.cache/claude-delegate),减轻多用户下 /tmp/claude-$UID 归属问题。
  5. 工作目录:默认为会话 workspace,也可在调用参数里指定绝对路径 cwd。
  6. 取消:可终止子进程树(SIGTERM,约 3 秒后 SIGKILL)。
  7. 无内置超时:timeoutMs 为 0 时不封顶;调用会阻塞直到子进程结束或被取消。

工具参数 claude_delegate

参数 说明
task 必填;自给自足的任务描述,子会话看不到父对话
model opus | sonnet | haiku
effort low | medium | high | xhigh | max(模型可能 clamp 不支持的档位)
cwd 绝对路径;省略则用会话 workspace
readOnly 默认 false;true 时只读/规划模式

明确不提供的功能

  • 单次执行:无续聊、resume、流式或父上下文带入。
  • 父智能体需等待子进程结束(可在 UI 取消)。
  • 若 claude update 改了 CLI 旗标(如 --effort、--no-session-persistence),需自行改插件源码中的参数数组(README 指向 index.js)。

安装与启用

官方 README 未提供 dsh plugin add github:... 一类命令;安装方式为在 profile 里 link 本地包路径 并加入 bundles。下面步骤照 README 原文。

  1. 在 profile 的 package.json(例如 ~/.dsh/profiles/desktop/package.json)中 link 包:
"@dsh-burn-plugins/dsh-claude-delegate": "link:/path/to/dsh-claude-delegate"

将 /path/to/dsh-claude-delegate 换成本地已有源码目录的实际路径(非 git clone 步骤;你需自行取得代码目录)。

  1. 在 dsh.profile.bundles 中加入 @dsh-burn-plugins/dsh-claude-delegate。

  2. 在该 profile 下执行 pnpm install(会在 node_modules/@local 下创建 symlink)。

  3. HMR 会重组 profile,下一次模型请求时工具才会出现。

依赖:peer 需要 @deepseek-ai/dsh-tools(>=0.2.2-rc.1)与 @deepseek-ai/schemastery(>=3.19.0 <4)。要求:宿主机已安装 claude 并已登录(订阅),或在关闭凭证隔离后通过 env 提供密钥;不要再装 @deepseek-ai 子代理包。

配置(profile 行 claude-delegate)

在 profile patch(如 ~/.dsh/profiles/desktop/cordis.patch.yml)中覆盖行配置即可,无需改插件仓库。注意:config 整块替换行配置,未写字段回落到默认。

字段 默认 含义
command claude Claude Code 启动器;若 PATH 上有 wrapper 建议写绝对路径
model opus 调用未传 model 时的别名
effort high 调用未传 effort 时的档位
tmpDir 空则 ~/.cache/claude-delegate 导出为 CLAUDE_CODE_TMPDIR
env {} 叠在宿主环境之上的额外环境变量
timeoutMs 0 声明式单次上限;0 表示不限制
isolateCredentials true 去掉环境里的 Ambient 凭证以走订阅登录

示例:

- id: claude-delegate
  name: "@dsh-burn-plugins/dsh-claude-delegate"
  config:
    command: /absolute/path/to/claude
    model: sonnet
    effort: medium

典型用法思路

DSH 模型在对话中调用 claude_delegate 时,传入完整 task 字符串;需要省 token 或只读摸底时设 readOnly: true;需要 Sonnet + 中等 effort 时在参数里写 model / effort,不必改全局配置。

子进程使用 JSON 输出格式返回,父会话据此继续编排。因无会话持久化与续聊,适合「一块独立子任务」(例如单独目录下的重构草案、只读架构扫描),不适合替代同一会话里多轮协作的 Claude Code 窗口。

适用场景与注意

适合:本机已用 Claude Code 订阅/OAuth;希望在 DSH 里按需把任务甩给 Claude,且每次可选 Opus/Sonnet/Haiku 与 effort;不想维护官方子代理 bundle 与 SDK 版本对齐。

注意:

  1. 插件以当前 DSH 进程的用户与权限运行子进程;默认跳过权限确认,启用前请阅读仓库源码与 MIT 许可证,理解 --dangerously-skip-permissions 的风险。
  2. SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系;星标与传播数据以站点为准,安装前自行核对仓库归属(lcf2212dev)。
  3. 阻塞式调用会占用父智能体等待时间;长跑任务依赖 UI 取消或自行设置 timeoutMs(若配置生效语义以插件实现为准)。
  4. 仅 link 安装时,路径与 patch 由你本地 profile 管理,团队复现需共享同一套 profile 约定。

结尾

dsh-claude-delegate 把 DSH 里的「委派给 Claude Code」收成 一个工具、一次进程、按次选模型与 effort,直连宿主 claude -p,避免钉死 SDK。若你的环境已经习惯本机 Claude Code 更新节奏,又要在 Harness 里偶发 offload 子任务,可以按 README 的 link + bundles 方式接入。

  • 目录页:https://www.skillhub.cn/plugins/lcf2212dev/dsh-claude-delegate
  • GitHub:https://github.com/lcf2212dev/dsh-claude-delegate
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜