DeepSeek Harness(命令 dsh)经常被称为 DeepSeek 版 Claude Code,但这个类比只适合入门。官方项目的真正命题是 Everything is a Plugin:模型、Agent、工具、Session、Web、Code Runtime 和协作能力都通过插件与 capability seam 组装。
本文以 deepseek-ai/deepseek-harness 当前 developer preview 和 dsh-v0.1.6-alpha.1 release 为参照。项目仍明确警告存在 breaking changes,且没有完成安全审计,不能把实验性接口和生产保证混为一谈。
01 先给结论:三棵树,两类事实
DeepSeek Harness 可以从三个维度理解:
插件树:Cordis Context、依赖、事件、effect、isolate
能力树:Profile、Bundle、Patch、Agent Preset、Tool、Runtime
数据树:Session Event、Projection、Subagent、Team Task、Mailbox
两类事实则是 durable facts 与 live events。前者进入 session 和任务状态,后者用于实时 UI、流式输出和控制。把两者分开,可以让浏览器断线后仍从 durable state 恢复,而不是依赖内存中的最后一条事件。
02 Cordis:插件不只是注册函数
Cordis 的 Context 是作用域服务容器,插件在 context 中声明依赖、注入服务、监听事件并安装 effect。关键概念包括 scope、inject、event、effect/Fiber 和 isolate。
这使插件拥有生命周期,而不是简单执行一次 setup。插件加载、热更新、卸载和错误传播都可以被宿主观察。
03 Profile、Bundle、Patch、Preset:新的组合模型
当前组合链路可以写成:
empty root
-> profile declares bundles
-> bundle resolves plugins and dependencies
-> home/project/CLI patches apply configuration
-> agent preset selects agent-plane capabilities
Profile 描述产品或运行模式,Bundle 是可复用能力集合,Patch 是局部配置变化,Preset 则只选择 Agent plane。把四者分开后,Web、headless、ACP 和 SDK 可以共享底层能力,又不必共享全部产品配置。
04 启动和配置来源所有权
Harness 必须明确不同配置来源能改什么。项目中的 .env、profile、用户配置、命令行和系统环境不能无条件覆盖启动方式、凭证来源或信任边界。
这是一个容易被忽略的供应链问题:当项目目录可以通过配置改变 Harness 的启动和权限时,代码仓库就不只是输入文件,而是控制面的一部分。DeepSeek Harness 的新安全说明明确提醒插件、模型生成代码、网络、凭证和文件访问都可能造成主机风险。
05 ReactLoopAgent:事件先于界面
一轮执行大致是:
inbox message
-> durable user event
-> context assembly
-> model stream
-> tool intent
-> approval / policy
-> tool execution
-> durable result + live event
Inbox 的时间语义很关键:前台消息可以立即中断或 steer 当前 Agent,后台消息可以排队到下一轮,durable event 则必须先进入可恢复存储。这样既能保持交互性,也能避免 UI 事件成为唯一真相。
06 工具与 Code Mode:能力接缝比工具数量重要
工具流水线的关键是先记录意图,再产生副作用。工具调用应拥有 ID、参数、策略决定、执行环境和结果,失败也要成为可恢复事件。
Code Mode 通过 ctx.codeRuntime 暴露执行能力,Python runtime 协议已经出现,但后端与生态仍在演进。这个 capability seam 的价值是:Agent 不需要知道代码究竟在本进程、容器还是远程解释器中运行。
但抽象不等于安全。代码 runtime 的文件、网络、进程和凭证权限必须由执行环境限制,不能把 eval 当成沙箱。
07 Session:逻辑日志稳定,物理存储可以演进
DeepSeek Harness 当前的方向是保留逻辑事件不变,在物理层加入 JSONL 压缩、packed rows、SQLite backend 和 projection checkpoint。这样可以追加写入、加速当前视图、降低长会话读取成本,并在损坏或中断后修复 torn tail。
逻辑事件和 projection 分离,是长会话系统比“把当前状态写成一个 JSON”更可靠的原因。
08 Subagent 与 Agent Teams
Subagent 由 one-shot provider 向 continuable child session 演进:可以后台运行、暂停、恢复、继续对话,并把结果作为父任务的事实或摘要回传。
Agent Teams 则进一步保存 roster、durable mailbox 和 CAS task DAG:
team identity
-> members / roles
-> task DAG with compare-and-swap
-> durable mailbox
-> result / review / retry
这不是共享一个 prompt,而是多个拥有身份和状态的执行者。CAS 能防止多个 worker 同时领取同一任务,mailbox 则让消息可恢复。
09 Web 与 Client:浏览器也是插件树
Web client、sidebar、conversation panel、terminal 和 archived session 都通过插件能力接入。最新 alpha release 已加入浏览器终端、多标签恢复、归档会话、MCP resource/template、headless stdin 和 JSON 事件输出。
这说明 Web 并非 Agent Core 的唯一 UI,而是同一 runtime 的一个宿主。其他客户端可以复用 session、事件和协议,而不必复制执行逻辑。
10 与 Pi Agent 的对比
| 维度 | DeepSeek Harness | Pi Agent |
|---|---|---|
| 核心抽象 | Cordis 插件运行时与 Profile | 最小 Agent Core 与可编程扩展 |
| 组合方式 | Profile、Bundle、Patch、Preset | package、extension、harness |
| Session | durable event、projection、SQLite | session tree、repository、durable operation |
| 多 Agent | continuable subagent、Agent Teams | 由 extension/harness 组合 |
| UI | Web、headless、ACP、SDK | TUI、RPC、SDK、client/server |
| 安全重点 | 配置所有权、插件、sandbox、MCP | 宿主自定义 policy 和 execution env |
| 设计取向 | 平台组装和能力治理 | 最小核心和用户可编程 |
两者都在把 Agent 从一次模型调用提升为可恢复 runtime,但 DeepSeek Harness 更像“插件化产品平台”,Pi 更像“可嵌入的 Agent 基础设施”。
11 当前成熟度和阅读路线
它适合研究 Profile 组合、插件生命周期、事件存储、长会话、子 Agent 和协作协议,不适合未经隔离就暴露公网或运行不可信代码。建议阅读顺序是 Cordis -> profile/bundle -> agent preset -> ReactLoopAgent -> session backend -> subagent/team -> Web client -> SAFETY。
12 最后的判断
DeepSeek Harness 最值得研究的不是“DeepSeek 接了哪些工具”,而是它把 Agent 设计成可组合的运行时:插件树负责能力,事件负责事实,projection 负责长会话,团队协议负责并行,来源所有权负责安全。