使命
用仓库自己的话来说,DeepSeek Harness(dsh)是:
由 DeepSeek AI 开发的开源 agent harness(智能体框架)。
所谓 agent harness(智能体框架),是包裹 LLM 代理的运行时外壳:它管理会话、向模型喂入上下文与工具 schema、执行模型调用的工具、执行沙箱与审批策略,并持久化对话记录。dsh 是 DeepSeek AI 对这一外壳的 实现,而且它的结构保证了外壳内的一切都是可替换的插件——没有特权的核心。
这句一句话概括直接来自根 README.md:
它采用一切皆插件的架构,并由 Cordis 驱动,其设计参见 论文 A Programming Paradigm for Spatiotemporal Composability。
这句话里的两个思想承载了整个设计。其一,基底是一个插件框架:框架建立在 Cordis 之上——一个内嵌的 框架,插件在其中向共享上下文注册服务、类型化的事件与可逆的效果。其二,一切都是插件:模型适配器、 工具注册表、会话日志,乃至 agent 主循环,全都只是挂载在这个上下文上的插件。 哲学一章将展开这给你带来什么。
运行它:Web UI
主要界面是一个浏览器应用。通过 npm:
npx @deepseek-ai/dsh web这会启动 Web UI,默认位于 http://127.0.0.1:3080。web 是 --profile web 的硬编码别名,它启动 web profile——启动器知道如何堆叠的、一个命名的、用户可编辑的插件组合(参见启动流程与 CLI)。 这个 profile 是 @deepseek-ai/dsh-web-app 束叠加在共享 @deepseek-ai/dsh-base 束之上,因此浏览器端 本身也只是一组插件行。
在 Web UI 中,你选择工作区、在 Settings → Models 中配置模型,然后运行任务。agent 可以读取/编辑 工作区文件、运行命令、委派工作并维护计划,在权限策略要求的操作前请求审批(参见[用户指南docs/user/guide/index.md)。
Headless 模式
除了 Web UI,dsh 还附带一个headless(无头)一次性模式——一个没有服务器、没有 Host、没有浏览器的 运行器:
dsh --profile headless "summarize this workspace"@deepseek-ai/dsh-headless 束提供编码人格与工具模式,其 headless-runner 插件从注入的 headlessStartup 提供商读取任务,通过 ctx.agents 创建一个全新持久会话,把任务作为普通用户消息提交, 等待静默,打印最后一段非空 assistant 文本并退出(turn/end 正常结束 → 0,否则 1)。它不打开任何 监听端口。在 Web profile 中,同样的基础栈被使用,但叠加了浏览器行;headless 是在同一 dsh-base 之上的 真正不同端——参见 packages/bundle/headless/README.md。
SDK 与 JSON-RPC
对于程序化用途,存在一个真实的客户端/服务端故事,而不仅仅是 CLI:
@deepseek-ai/dsh-sdk-client、@deepseek-ai/dsh-sdk-jsonrpc-server、@deepseek-ai/dsh-sdk-protocol位于packages/sdk/, 定义了一个建立在 JSON-RPC 协议之上、由外部进程驱动框架的 SDK。- 仓库附带一个 Python SDK(
deepseek-harness-sdk),其教程位于docs/user/guide/python-sdk.md; 它通过 JSON-RPC 端驱动一个远程框架。 - 一个现成的示例是 [jsonrpc-agent
examples/jsonrpc-agent/README.md,它通过 Python SDK 与 JSON-RPC 驱动一个无人值守的编码 agent。
因此,除交互式 GUI 之外,dsh 还将其 agent 能力暴露为供自动化使用的线上协议。
盒内自带的内容
三个已发布的启动器包让这些端具体化:
| 包 | 端 | 角色 |
|---|---|---|
@deepseek-ai/dsh-base | 共享核心 | 每个 profile 的第一层束:适配器、工具、持久化、策略、设置、凭据、遥测 |
@deepseek-ai/dsh-web-app | 浏览器 | 添加 webserver、API 网关、浏览器插件清单、客户端 HMR 重载链 |
@deepseek-ai/dsh-headless | 一次性 | 添加 headless 运行器;无 Host、无 HTTP 服务器、无浏览器 |
@deepseek-ai/dsh(CLI) | 启动器 | dsh 二进制;通过叠加这些束层来启动一个 profile |
这些包合在一起,正是让 npx @deepseek-ai/dsh web 与 --profile headless 都能工作的原因:启动器用 某个特定端的束来组合同一个共享核心。
示例与社区
仓库在可运行的 examples/ 目录中包含:headless-agent、jsonrpc-agent、mcp-memory、 web-cordis(一个能检查并编辑自己实时插件树的自指 agent)、web-schedule,以及 acp-agent(一个 Agent Client Protocol 自动化服务器)。每个示例都拥有自己的配置与前置条件;参见示例与演示。
README.md 记录了社区端:
- 通过 GitHub Discussions 提交反馈或 bug 报告。
- 为插件仓库打上
dsh-pluginGitHub 话题以便被发现。 - 一个 DeepSeek Harness Discord 服务器(
https://discord.gg/Ycq5dCaS4)。中文版README.zh.md额外介绍了企微群(WeCom)与微信公众号。
许可证与 Cordis 的关系
dsh 采用 MIT 许可证(LICENSE);第三方许可证披露于 THIRD_PARTY_NOTICES.md。尽管名字里有 「AI」,但该框架在核心层面并非针对特定模型:它以插件形式注册模型适配器(ctx.llm),而 DeepSeek 适配器只是其中之一。它依赖 Cordis 的方式值得注意:它并不像普通依赖那样从 npm 拉取 Cordis,而是把框架 内嵌进 monorepo 的 vendor/ 下(重命名进 @deepseek-ai 作用域,例如 @deepseek-ai/cordis),从而 完全拥有并可以修补自己的框架层。参见内嵌(Vendor)库。
延伸阅读
- 「一切皆插件」哲学 —— 架构核心思想。
- 快速上手 —— 今天就安装并运行
dsh。 - Monorepo 结构解剖 —— 一条
dsh命令背后的 49 组、约 219 个包。 README.md—— 上游的一句话概括与运行说明。docs/architecture.md—— 上游架构深入解析。packages/bundle/web-app/README.md—— web 束的角色与局限。