DeepSeek Harness Hub
← 返回列表

Claude 模型桥接daveycodez/dsh-llm-agent-bridge

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

在任意模式下把 Claude 接入为可选模型提供方

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/12 · 已提供中文文档

将 Claude 作为 DeepSeek Harness 中可选的 LLM 提供商,通过 Anthropic 官方的 Claude Agent SDK 实现。可在任何 DSH 模式下工作。

综合分
30.3
GitHub 分
30.3
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add daveycodez/dsh-llm-agent-bridge
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-telemetry-otel@deepseek-ai/dsh-typert-protocol
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-llm-agent-bridge

将厂商 agent SDK 引入 DeepSeek Harness,作为可选的 LLM 提供方。目前是 Claude,通过 Anthropic 官方的 Claude Agent SDK 提供服务。

在任何 DSH 模式——Standard、PTC、Creator、Minimal 或你自己的预设——中,从模型下拉菜单中选择它。DSH 保留其提示词、工具、审批和对话历史;Claude 负责思考。

工作原理

DSH 的 LLM 服务将调用路由到拥有 options.provider 的适配器。此插件在提供方 id claude 下注册一个适配器,该适配器:

1. 创建(或恢复)一个以 DSH 会话为键的 Claude Agent SDK 会话。
2. 将 DSH 的组装系统提示词作为 SDK 的 systemPrompt 传入,并使用 settingSources: [],这样不会在其之上加载任何 ~/.claude 设置、CLAUDE.md、技能或钩子。
3. 将 DSH 的工具作为进程内 MCP 服务器(mcp__dsh__)交给 Claude,并传入 tools: [],从而将 Claude Code 自带的内置工具从上下文中移除——仅靠 allowedTools 只能预先批准,并不能限定范围,而内置工具会胜出。toolAliases 将内置名称重定向到同名的 DSH 工具,因为 DSH 的提示词以裸名称引用其工具(“使用 read 工具”)。
4. 将工具调用交回 DSH 执行。 MCP 处理器不做任何工作:它挂起、宣告该调用,适配器将其作为带有 tool-calls finish 的 DSH tool-call 块发出。随后 DSH 自己的 agent 循环在其沙箱和审批策略下运行该工具,在其轨迹中记录 tool/call 和 tool/result,开启下一步,并带着结果回调——这会恢复同一个 Claude 查询,而不是启动一个新的查询。桥接的工具确实列在 allowedTools 中,这是有意在 SDK 层预先批准它们:它们通过 DSH 的工具运行时运行,后者根据会话的沙箱策略通过自己的审批接缝来解决“询问”决策。同时在 SDK 层进行门控会导致每次调用都提示,无论该策略如何——包括 workspace-write——这不是 DSH 对待其自身 agent 调用的方式。
5. 将 Claude 的推理和文本投射到 DSH 的原生流式块词汇表中,使对话像任何其他模型的一样渲染,并报告该轮的 token 使用量和模型的上下文窗口,以便 DSH 自己的计数器——输入、输出、缓存命中率、tokens/秒、上下文压力——对 Claude 行的工作方式与对其自身完全一致。使用量每轮到达一次,在其最后一步,因为一个 Claude 查询跨越该轮的每一步。该插件不贡献任何客户端 bundle,也没有自己的渲染器:工具工作由 DSH 从其自身轨迹中显示。

Claude 仍然决定调用什么以及何时调用;DSH 执行。每次模型调用对应一个 DSH 步骤,与 DSH 自己的模型完全一样——这正是让 Claude 的工具调用
在轨迹中,并保持提供商之间共享的对话历史。

安装

npx @deepseek-ai/dsh plugin --profile web add github:daveycodez/dsh-llm-agent-bridge
npx @deepseek-ai/dsh web

请先正常认证 Claude Code(运行 claude,然后登录)。此插件永远不会看到你的凭据——见下文。

编辑器中的套餐用量

当选中 Claude 行时,编辑器工具栏中会显示一个用量环,报告对当前模型重要的订阅限制,并打开一个包含所有已报告窗口的面板:

套餐用量限制 · Max
5 小时限制          1 小时 8 分钟后重置    10%
每周 · 所有模型      19 小时 18 分钟后重置  81%
每周 · Fable        19 小时 18 分钟后重置  100%

这些数字来自 Agent SDK 自身的用量报告——与 Claude Code 的 /usage 相同的数据源——通过此插件的 /agent-bridge 通道提供给浏览器。不会读取任何凭据,也不需要其他插件。

读取这些数据会消耗一个 Claude Code 控制会话,因此结果会缓存在主机上,并再次缓存在浏览器中,且没有空闲轮询:用量环会在你与其交互时或在一轮运行期间重新验证,绝不会按定时器进行。底层 SDK 方法被明确标记为实验性,因此读取失败时只会隐藏用量环,而不会导致任何失败。

思考

轮次请求 thinking: { type: "adaptive", display: "summarized" }。如果没有该 display,模型会流式输出文本为空的思考块——只有一个签名和一个 token 计数,没有任何可渲染的内容——这就是为什么除 Haiku 外所有模型的推理似乎都缺失。加上它之后:

| 模型 | 没有它时的推理文本 | 有它时 |
|---|---|---|
| Opus 5 | 0 字符 | 140 |
| Sonnet 5 | 0 字符 | 1,178 |
| Haiku 4.5 | ~340 | 680 |

它与 effort 选择器协同工作,而不是取代它:effort 仍然决定进行多少思考——Sonnet 在 low 时完全不思考,在 high 时会思考并输出摘要——而 display 决定你能否读到它。自适应思考确实是可变的,因此某一轮可能思考很少或完全不思考;用量计数器中的 reasoningTokens 会告诉你属于哪种情况。

在插件行上设置 thinkingSummaries: false 可保留 SDK 自身的默认行为。

会话中途切换模型

Claude 会话只知道它回答过的轮次。当它被创建时,或者当另一个模型在它被取消选中期间回答了轮次时,适配器会将这些轮次作为  块前置,这样在会话中途切换提供商就不会静默丢失上下文。

工具调用及其结果存在于 DSH 自己的消息历史中,因此之后的 DeepSeek 轮次看到的是实际工作,而不是文字摘要。

一个已知限制:DSH 侧的改写不会被重放。 如果 DSH 在 Claude 已经看到较早轮次之后对其进行压缩或编辑,Claude 会话会保留原始内容。

DSH 的会话遥测

@deepseek-ai/dsh-base 挂载了一个 OTLP 导出器,指向
harness-telemetry.deepseeksvc.com。自 dsh 0.1.5 起,它默认开启,处于
FEEDBACK_ONLY 模式(更早的版本默认为 DISABLED)。DSH 自己在该行上的说明
写道,上传携带的是会话日志记录,“没有
会话遥测/记录脱敏规则,因此导出的是原始捕获副本”——
而安装了此插件后,该副本包含 Claude 的输出。

推荐:在源头关闭导出器的情况下运行 DSH。 在启动 DSH 的 shell 中设置
DSH_TELEMETRY_MODE=DISABLED(或
DSH_TELEMETRY_DISABLED=1,后者会将该行完全关闭)。此后后端
在构造时不带任何管道,什么都不会被捕获,下面的守卫也就无事可做。

守卫按轮次运行,而非在加载时运行。 在每个 Claude 轮次开始时,
适配器读取已挂载的 sessionTelemetry 后端——这是精确的,因为它能看到
无论是什么将其开启的导出器,而扫描环境和配置层无法保证这一点——并且,
如果它正在导出,则根据 telemetry 模式采取行动:

- disable(默认)通过后端自身的 shutdown() 排空并静默管道。
一旦该操作完成,OTel 提供程序就会丢弃之后的所有
记录,并且该行会在进程剩余时间内被记为已静默,因此
后续轮次既不会拒绝,也不会再次将其关闭。若 shutdown() 被拒绝
(后端自身的截止时间),则改为使该轮次失败:disable 降级为
refuse,而不是报告一个它无法验证的成功。新的后端
实例——一次重载、另一个插件重新挂载该行——会在其轮次中被捕获并
处理。
- refuse 使该轮次失败,并给出内联错误,指明需要关闭什么,
且绝不触碰宿主配置。
- ignore 完全跳过守卫。

守卫从不卸载该行,也不处置另一个插件的 fiber。更早的
版本两者都做,且是在插件激活内部——而在 dsh 0.1.5 的
导出器默认开启的情况下,这会使启动死锁:cordis 加载器等待一个
此插件刚刚处置的 fiber,dsh web 从未打印其 URL,UI
也无法访问。现在激活只读取姿态并记录一行,说明
第一轮将做什么;无论遥测是否正在导出,它都会迅速完成。

测试套件在 FEEDBACK_ONLY 模式下针对回环收集器挂载真实的
dsh-session-telemetry-otel 后端,展示一条记录到达它,运行
守卫,并断言该行保持挂载、之后没有任何内容到达
收集器,并且后续轮次不会再次将其关闭。一个
单独的测试针对一个伪造的导出后端激活该插件,并断言
激活完成时未调用 shutdown() 或 fiber.dispose()。

这未覆盖的情况:某个其他插件添加的导出器。守卫只能触及
DSH 随附的那一行,而非任意一行——这是更倾向于
DSH_TELEMETRY_MODE=DISABLED 的另一个原因。

如果默认行为不合适,可在插件行上配置该行为:

- id: agent-bridge-llm
name: 'dsh-llm-agent-bridge'
config:
telemetry: disable   # 默认值;refuse 会改为让本轮失败,ignore 则跳过该防护

追踪卡住的一轮

交接过程跨越两次 stream() 调用,中间停驻着一个活跃的 Claude 查询,因此卡住时没有堆栈可供查看。设置 DSH_AGENT_BRIDGE_DEBUG=1 可将每个决策记录到 $DSH_HOME/plugin-data/agent-bridge-debug.log(也可以指定你自己的路径):
bash
DSH_AGENT_BRIDGE_DEBUG=1 dsh web

每一行都会列出停驻的调用 id 以及返回的工具结果 id,因此不匹配的情况可以直接看出来。恢复后仍保持静默的一轮会在五分钟后失败,而不是一直挂起;DSH_AGENT_BRIDGE_RESUME_TIMEOUT_MS 可以覆盖该超时。

Anthropic 条款合规

本插件按照 Anthropic 的法律与合规页面的要求使用你的 Claude 订阅:它绝不收集、存储或中转你的凭据。

- 通往 Anthropic 的唯一途径是 await import("@anthropic-ai/claude-agent-sdk") —— 即官方 SDK,它运行已发布的 Claude Code 二进制文件。该二进制文件自行执行身份验证和令牌刷新,与你亲自运行 claude 时完全一致。
- 没有任何源文件读取 ~/.claude/.credentials.json、macOS 钥匙串、CLAUDE_CODE_OAUTH_TOKEN 或任何 API 密钥环境变量。
- 没有任何源文件构造 Authorization 头或直接调用 api.anthropic.com。
- CLI 回退方案仅使用本进程的环境变量启动 claude,别无其他:不存在按轮次的环境变量覆盖,因此任何调用方都无法将 ANTHROPIC_BASE_URL 或 API 密钥注入到持有你登录信息的二进制文件中。

你可以自行验证:
bash
grep -rnE "credentials\.json|find-generic-password|CLAUDE_CODE_OAUTH_TOKEN|ANTHROPIC_API_KEY|Authorization|api\.anthropic\.com" .js .mjs internal src

本插件不主张的内容

在本地、使用你自己的订阅、通过 Anthropic 自己的流程登录来运行本插件,符合该页面中针对“最终用户使用自己的 Claude 订阅登录未修改的 Claude Code 二进制文件”的豁免条款。而发布一个功能是将 Agent SDK 流量通过订阅 OAuth 路由的插件,则受同一节中另一句话的约束——开发者“应通过 Claude Console 使用 API 密钥身份验证”。两者同时成立,且后者是建议性的而非禁止性的。只有 Anthropic 才能对此作出裁定;本 README 描述的是代码做了什么,而不是他们允许什么。

API 密钥可以彻底解决这个问题:在启动 DSH 的 shell 中导出 ANTHROPIC_API_KEY,二进制文件就会使用它,本插件无需任何改动。

仍由你负责的两件事:

- 让 DSH 保持绑定到 localhost。 如果其他人能访问你的 DSH 实例,就意味着你的订阅在为他们处理请求,这是条款所禁止的。DSH 会直接拒绝 --host 0.0.0.0(“这会将远程代码执行暴露到网络上”),但该防护只匹配字面字符串——一个局域网地址
或 :: 仍然会绑定,而指向 Web 端口的隧道会完全绕过它。不要为 DSH 建立隧道。
- 为无人值守的工作负载使用 API 密钥。 订阅限制假定的是
“普通的个人使用”;批处理或定时运行应使用密钥。
- 关闭 DSH 的遥测。 在启动 DSH 的 shell 中设置 DSH_TELEMETRY_MODE=DISABLED。@deepseek-ai/dsh-base 会挂载一个指向
harness-telemetry.deepseeksvc.com 的 OTLP 导出器,自
dsh 0.1.5 起在 FEEDBACK_ONLY 模式下默认开启,而 DSH 自己的说明称上传会镜像会话日志记录,“
没有会话遥测/记录脱敏规则,因此导出的是原始捕获副本。”安装了此插件后,该原始副本会包含 Claude 的输出——
而 Anthropic 的消费者条款禁止使用服务来开发或训练
竞争模型。该插件的每轮防护(见下文)会在 Claude 运行前关闭正在运行的导出器,
但完全没有间隙的版本是根本不构造它:DSH_TELEMETRY_MODE=DISABLED,或将 DSH_TELEMETRY_DISABLED
设为任意非空值,这会将该行完全修补掉。

检查你自己的状况:

bash
env | grep DSH_TELEMETRY; grep -i telemetry "${DSH_HOME:-$HOME/.dsh}/settings.yaml"

致谢

Fork 自 yangbobo2021 的 relay-dsh-plugin-claude
(MIT),该项目将 Claude Code 集成为其自己的 DSH 模式。这个
fork 采取了相反的取舍:将 Claude 作为可从所有模式使用的提供方*,
由 DSH 掌管提示词和工具。

MIT。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群