
DeepSeek这次开源的不是一个新模型,也不只是又一层API封装,而是一套可以真正承载编码Agent的应用框架:DeepSeek Harness。它把模型连接、文件系统、Shell、LSP、子智能体、工作流、界面、权限和Agent Loop都拆成插件,再通过Cordis微内核组合起来。
更新说明:本文新增“插件”概念拆解、Pi Coding Agent对比、Cordis服务树、seam接口以及Step/Turn事件流。项目入口请使用 DeepSeek Harness站内导航。


一、先看实测:它已经能连续完成复杂生成任务
在文章记录的一次测试里,DeepSeek Harness连接DeepSeek-V4-Flash后,用三十多分钟完成了一个第一人称僵尸射击游戏。测试过程中没有人工接管,Agent自行创建项目、编写代码、调用工具并持续修正结果。

随后又用“一句话生成华强买瓜3D动画”的方式做了对比。Harness能够给出完整场景、人物、镜头和对白节奏,并继续迭代可运行结果。文章同时展示了其他Agent在相同题材上的输出,用来观察执行链路与成片差异。



二、Harness到底是什么:SDK、运行时和应用框架的组合
Harness可以连接DeepSeek及其他模型,让模型读取和修改文件、运行命令、调用开发工具,并通过任务、子智能体和工作流完成长链路执行。它同时提供Web UI、终端TUI、Headless模式以及自动化协议,因此同一套核心能力可以进入本地开发、CI任务或外部系统。

仓库并不是一个小型演示项目。代码分布在packages、apps、examples、python、native、vendor和website等目录中,核心能力与界面实现被拆成大量独立工作区。这样的组织方式说明它的目标不是做一个固定聊天窗口,而是成为可二次开发的Agent底座。


三、“一切皆插件”,甚至Agent Loop也是插件
Harness运行时本质上是一个Cordis Context。插件可以在Context中注册服务、事件和能力,其他插件再通过明确接口消费它们。核心包负责Session、System Prompt、Tools、Agent和Agent Loop;外围包再补上模型适配、Shell、文件系统、LSP、Web、Skill、Subagent和Workflow。

接口、实现、消费者分开
以Bash工具为例:上层先定义工具接口,本地进程插件负责执行,模型侧只看到整理后的工具Schema。如果团队要把本地Shell替换为容器、远程渲染节点或受控执行服务,可以保留调用接口,只替换底层实现。
用cordis.yml声明式组合
插件拥有稳定ID和参数,cordis.yml负责决定加载哪些插件、传入什么配置。相同代码可以组合成TUI、Web、Headless、ACP或JSON-RPC应用。配置覆盖采用整段替换而非深度合并,凭据建议通过DEEPSEEK_API_KEY或独立凭据文件注入,不应直接写进仓库。
四、Agent Loop如何运转:Turn、Step与完整事件流
一次任务由Turn和Step推进。模型输出的文本片段、消息、工具调用、工具结果以及结束原因都会进入事件流。工具调用还要经过前置策略、单调安全守卫、实际执行、后处理、内容清理和通知。可并行的只读工具可以同时运行,会改变状态的调用则成为屏障,避免并发写入把项目推向不可控状态。
运行中新增的用户指令可以排队到下一轮,也可以注入当前上下文或作为Steering立即改变执行方向。回执会记录模型究竟在哪一步看到了新指令,这对排查“为什么Agent没有按最新要求执行”非常重要。
五、Session Log不是聊天记录,而是权威事件源
Harness将Session Log设计为只追加的权威记录。环境信息、模型请求、内容分片、工具调用与结果、压缩、权限、取消等都会被保存,因此系统可以重建模型当时真正看见的上下文,而不是只留下整理过的对话文本。
日志支持JSONL和SQLite后端,可用于Resume和Fork;SQLite还提供全文检索。对于长时间运行的工程任务,这意味着失败后可以从边界恢复,也能从已完成节点分叉出另一条方案,而不必把全部背景重新塞给模型。
六、子智能体与工作流:把长任务拆开,但保留边界

子智能体可以从新上下文启动,也可以从已完成边界分叉,或通过ACP连接外部进程。每个子智能体能够拥有独立的上下文、工具和系统提示词,避免所有任务共享一个不断膨胀的对话。目标、计划、Todo和后台任务也被区分处理。


Workflow用于定义更稳定的多步流程,适合把调研、编码、测试和交付串成可复用管线。子智能体擅长分工,工作流负责顺序与依赖;两者结合后,Agent不再只是边聊边写代码,而是接近可观测的任务系统。
七、四种预设与多种界面

Web UI默认运行在127.0.0.1:3080,并提供Standard、PTC、Minimal和Creative四类预设。Standard覆盖常用编码工具;PTC通过Code Mode SDK和TypeScript run_code编排多步工具;Minimal只保留持久Bash与编辑器;Creative允许检查Cordis运行时并动态挂载临时插件。



终端用户可以使用TUI,CI或一次性任务可用Headless;需要与编辑器、自动化平台或Python程序整合时,则可以选择ACP、JSON-RPC或Python SDK。界面不是核心能力的唯一入口,而是同一运行时上的不同消费者。

八、Cordis微内核:让插件在时间和空间上可组合

Cordis强调服务、作用域、事件和生命周期的组合。插件可以在特定上下文中出现,也可以随着任务阶段挂载或卸载。这解释了Creative模式为何能让Agent检查运行时、生成临时插件并动态加载能力。

对开发者而言,这种设计把传统“启动时固定全部依赖”的应用,变成可以随任务上下文变化的系统。代价也很明确:生命周期、插件依赖、事件顺序和兼容性更复杂,开发者预览阶段尤其需要严格锁版本与测试。
九、安全边界:能运行命令,就必须把权限当成产品能力

默认workspace-write只允许在工作区和批准的临时目录写入,并在敏感操作前请求确认;danger-full-access则需要明确开启。文件系统、Bash和子进程共享同一沙箱边界,如果无法确认隔离有效,系统应当失败关闭,而不是悄悄退化为无保护执行。
十、对CG与后期团队意味着什么
对于CG、视效和视频后期团队,Harness最有价值的不是代替艺术家做审美决定,而是把脚本、素材检查、日志分析和重复操作纳入可审计流程。例如Agent可以检查工程目录和命名、分析转码或渲染失败日志、修改管线脚本、生成代理文件任务、整理镜头元数据,并把每次工具调用留在Session Log中。
- 把本地Shell插件替换为容器、渲染农场或受控任务队列,减少Agent直接触碰主工作站。
- 用LSP与文件系统插件维护Python、TypeScript或DCC管线代码,同时保留修改和测试记录。
- 让子智能体分别处理入库、代理文件、元数据、QC和交付检查,但把写入冲突与不可逆操作设为屏障。
- 用Session Log复盘Agent看见了什么、执行了什么,方便团队审核自动化流程,而不是只验收最终文件。
十一、快速启动与现阶段判断
官方给出的最短启动方式是先安装Node.js,然后运行npx @deepseek-ai/dsh web。启动后默认在本机3080端口打开Web UI。若从源码运行,则需要克隆仓库、安装pnpm依赖并完成构建。
补充理解:Harness就是让模型真正“上岗”的配套系统
可以把模型看成新员工:模型决定它有多聪明,Harness负责工位、电脑、文件、账号、权限、流程、历史记录与失败恢复。只有这套配套存在,模型才能从“会回答”变成“能读取资料、采取行动、观察结果并继续执行”的Agent。
因此,同一个模型放进不同Agent产品,体验可能完全不同。差别不只来自提示词,而是工具、上下文、会话、沙箱、审批和Agent Loop如何组合。


传统插件是添砖加瓦,DSH把办公室本身拆成模块
Chrome扩展建立在完整浏览器之上:插件卸载后,浏览器仍然知道怎么打开网页。很多Agent工具、MCP、Skill、Hook和Subagent也符合这种模式——它们增加能力,却不改变主循环、会话存储和沙箱的底层规则。
DeepSeek Harness更激进。模型、文件系统、Shell、Session、Prompt组装、沙箱、调度、界面甚至Agent Loop都可以由插件提供。“插件”不再只是外围功能,而是构成Harness本身的模块。

Pi与DSH:一个把核心做薄,一个把地基拆成砖
Pi Coding Agent默认只给模型read、write、edit和bash四个核心工具,子智能体、计划、Todo、MCP、权限闸门、SSH与沙箱交给TypeScript扩展。它用极小核心换取可理解性和扩展自由。
但Pi的会话树和主循环仍由核心决定。DSH进一步把Session Log、Agent Loop、提示词组装和执行世界本身也变成插件。Pi更克制、更容易稳定;DSH自由度更高,同时更容易遇到版本错配、依赖冲突和调试复杂度。


Cordis如何实现可插拔:共享ctx、依赖注入与自动回收
一个运行中的DSH,本质上是启动时组合出来的Cordis服务树。插件把能力挂到共享上下文ctx,并通过inject声明依赖。只有依赖满足时插件才激活;卸载时,它注册的工具、事件监听、Prompt片段和服务实现会被一并回收。
这种“注册可撤销”非常重要。插件不只是把代码塞进全局状态,而是拥有明确生命周期,使运行时可以按作用域加载、替换和销毁能力。

真正承担替换的seam:接口、提供方与消费者
DSH把可替换连接称为seam,由Service Definition、Service Provider和Consumer三类角色组成。Definition声明稳定接口,Provider给出具体实现,Consumer通常表现为模型可见的工具。
例如文件系统和子进程如果共享同一个执行世界,把Provider从本地环境换成远程沙箱后,Bash、PTY和LSP可以一起迁移,不必为每个工具分别复制一套代码。被插件化的不是电脑或沙箱本体,而是Harness与它们连接的方式。


Step与Turn:插件可以介入Agent决策链的内部
Step是一轮模型请求加上由它触发的工具调用;Turn从领取输入开始,到不再欠任何后续工作为止,可能包含多个Step。执行事件会经过pre-step、request、LLM流式输出、工具调用、执行前、执行与执行后等阶段。
部分事件采用瀑布式传递,监听者需要显式调用next()才能继续。这使审批、上下文注入、工具改写甚至拒绝输入都可以作为插件实现,而不是修改产品核心代码。

Session Log为何必须是仅追加的权威事件源
DSH强调“model-visible means logged”:任何模型可见内容都必须能从Session Log重建。会话不是整理后的聊天记录,而是仅追加事件流;恢复、分叉、回放、遥测和持久化都消费同一份事实。
这种约束减少了“运行时偷偷往Prompt塞内容、事后却无法解释”的问题。代价是新增模型可见输入时,必须扩展正式事件类型和投影逻辑,开发门槛更高。

配置层组合:bundle、profile与可见的最终服务树
Bundle是一批Cordis配置与代码,Profile按顺序叠加Bundle,再接用户的cordis.patch.yml。后加载层可以按ID覆盖前面的配置。开发者可以用下面的命令查看机器最终启动的组合:
dsh --profile web --dump-config当最终服务树可以被打印和审计,“可组合”才不只是宣传。团队也更容易确认当前模型、沙箱、权限、工具与界面究竟来自哪些插件。

自由度的代价:版本、权限和调试复杂度都会上升
彻底可替换不自动等于更好用。开发者预览阶段可能出现破坏兼容性改动;接口拆得越细,越容易遇到插件版本错配、生命周期顺序、依赖冲突和难定位故障。
建议锁定版本、从最小Profile开始、记录最终配置树、为高风险工具保留人工审批,并把第三方插件放进隔离工作区测试。想查看成熟插件案例,可进入DeepSeek Harness插件生态整理。

结语
DeepSeek Harness最值得关注的地方,不是它又做了一个“像Codex的界面”,而是把模型、工具、Agent Loop、会话日志、子智能体、安全策略和交互入口都变成可替换部件。对于希望把AI真正接进工程系统的团队,这种可组合、可审计的底层能力,往往比一次漂亮Demo更重要。












