项目详情

DeepSeek Harness

DeepSeek 官方开源 Agent Harness——万物皆插件,基于 Cordis 时空可组合性框架

GitHub 地址 MIT Node.js 22.19+Cordis

更新于 2026-08-14 · 开发者预览阶段

← 返回汇总
项目速览

一句话定位

万物皆插件的开源 Agent 运行框架

DeepSeek AI 官方出品的 agent harness(dsh)。核心是「一切皆插件」架构——模型适配器、工具注册表、会话日志、甚至 agent loop 本身,全是可从配置替换的插件。底层基于 Cordis 框架(论文:《时空可组合性的编程范式》)。适合想深度定制 agent 内部机制、或研究「插件化 agent 架构」范式的开发者,目前是开发者预览版。

项目速览

核心数据

69k
GitHub Stars
5.8k
Forks
12k+
Commits
全插件
无特权内核

官方出品 + Cordis 学术背书。仓库活跃度极高(1.2 万提交),但明确标注开发者预览:会有破坏性变更。

为什么存在

Agent harness 的两个老问题

❌ 特权内核难改

多数 agent 框架有「核心 + 外围插件」之分。想换掉 agent loop、模型适配层、或会话存储,得 fork 改源码,无法从配置层替换。

❌ 插件副作用难撤销

插件注册了事件监听、工具、prompt 段落后,热重载/卸载时副作用残留——状态泄漏、监听器悬挂、行为不一致。

DeepSeek Harness 的答案:没有特权内核,每个注册都是可逆副作用。

🔥 核心页

Cordis:时空可组合性

底层框架 Cordis 来自论文《A Programming Paradigm for Spatiotemporal Composability》。它把「动态组合」拆成两个正交维度——时间与空间。

时间可组合性(Temporal) revertible effects · 可逆副作用 问题:插件卸载时副作用残留 解法:每次上下文变换都携带一个逆操作(inverse),运行时追踪它 ctx.effect(注册) → 返回 disposer(逆) 卸载/重载时:按序调用 disposer → prompt 段 / 工具 schema / 监听器全干净撤销 空间可组合性(Spatial) reactive coeffects · 响应式协效应 问题:插件间依赖硬编码、加载顺序难管 解法:每个上下文变化,按协效应规格通知相关组件 inject 声明依赖 → 等待服务存在 服务用 ctx.key 注册 → 按 key 查找非导入 → 加载顺序 = 服务需求,非手动编排 统一
时间维度(可逆)
空间维度(响应式)
两者统一进单一 context 类型 = 一种编程范式
🔥 核心页

万物皆插件:没有特权内核

产品每个部分都是插件——包括模型适配器、工具注册表、会话日志、agent loop 本身。扩展 dsh 不是 patch 内核,而是在其他插件旁挂一个自己的。

空 entry 列表(boot 起点) Layer 1 · dsh-base(首个 layer) 模型适配器 · 工具 · 持久化 · 沙箱 · 审批策略 · 设置 · 凭证 · 遥测 Layer 2 · dsh-web-app 浏览器应用(Web UI) Layer 2' · dsh-headless 一次性 runner(无服务器) Layer 3 · profile 的 cordis.patch.yml 用户自己打的补丁(替换整行 config 或插入新行) Layer 4 · home 级 patch Harness home 目录的全局覆盖 Layer 5 · --patch 命令行叠加(最高优先级)
base 层(必经)
profile 模板(web)
profile 模板(headless)
用户补丁层(可替换任何行)

Profile = 命名组合(列 bundle 栈 + out-of-tree 插件 + 自己的 patch)。dsh --profile web --dump-config 可看你机器实际启动的整棵树——任何行都能被你自己的 patch 替换。

核心包

核心子系统:每个都是 ctx 上的服务

插件通过声明 ctx.<key> 占位,其他插件按 key 查找而非导入具体实现。

包职责ctx 键
core/sessionappend-only SessionEvent 日志 + 内存存储ctx.sessions
core/system-promptprompt 段 + 工具 schema 装配ctx.systemPrompt
core/tools带作用域的工具注册表 + 守卫执行管线ctx.tools
core/agentAgent 接口 + 活动注册表 + agent/* 事件ctx.agents
core/agent-loop实现该接口的默认驱动ctx.agentLoop
llm/llm消息 + 流词汇 + 适配器接缝ctx.llm

注意:core/agent-loop 也是插件——你想换一套驱动逻辑,挂个新插件即可,无需 fork。

🔥 核心页

Turn 流程:一个 turn = 多个 step

step = 一次模型请求 + 它调用的工具。turn = 零或多个 step:在首次输入被领取前打开,直到不欠任何东西时关闭。

turn(一个回合) turn/start step(一次模型请求 + 工具) claim next-step input assemble prompt + tool schemas agent/request → llm/stream → assistant/chunk* tool/call* → pre-execute → execute → post → result* step/end → 工具还欠请求?→ 领取下一 input 循环:欠请求 或新 input 到 agent/turn-stopping turn/end 持久化会话事件(append-only 日志): turn/* · step/* · user/message · assistant/* · tool/* 实时扩展点(非持久,跨三域): agent/pre-step · agent/request · llm/stream · tools/*(waterfall)
持久化会话事件
实时扩展点
工具执行管线
事件系统

四种事件分派模式

事件是扩展点。分派模式是事件公共契约的一部分,用 @mode 标签标注,生成器会校验声明与调用点一致。

模式是否 await分派顺序有返回值用途
emit否注册顺序观察否纯观察,副作用通知
waterfall否注册顺序是around-中间件,next() 委托
parallel是所有监听器并行否扇出广播
serial是注册顺序是有序链式(如 turn-stopping 无 next)

waterfall 是 around-中间件:监听器收到 (...args, next),调 next() 委托可能被包装的结果;不调 next 则短路。策略监听器可拥有决策(return 不 next),只标注/观察的监听器必须委托。

会话日志

Session log:一切的真相之源

模型看到的上下文,全部派生自 append-only 会话日志。

append SessionEvent → session/event 广播 → deriveMessages() 投影 → 模型历史
能力全景

插件覆盖的能力子系统

🤖 模型与循环
  • llm/ Service Definition + DeepSeek provider
  • core/agent-loop 默认驱动
  • compaction/ 上下文压缩
  • subagent/ 委派 + delegation
  • self-modification/ agent 自检/挂载自己的插件
🛠️ 工具与执行
  • core/tools 守卫执行管线
  • fs/ 文件系统 + 策略
  • shell/ bash + pwsh provider
  • subprocess/ 进程树
  • e2b/ 沙箱 + FS/子进程适配
  • terminal/ 持久会话
📋 协调与治理
  • web/ 搜索/fetch provider + tool
  • skill/ skill 注册表 + catalog
  • plan/ plan 模式(日志状态)
  • todo/ todo_write 工具
  • guard/ 循环卫生 + 工具超时
  • interaction/ 审批/权限/ask-user

还有 native/(landlock-run node addon,Linux 沙箱)、python/(Python SDK + 运行时)、acp/(Agent Client Protocol 自动化服务器)、hooks/(Claude Code/Codex hook 桥)。

快速上手

两条启动路径

# 路径 1:npx 直接跑 Web UI(推荐试用)
npx @deepseek-ai/dsh web
# → http://127.0.0.1:3080 开浏览器应用

# 路径 2:从源码构建(开发/定制)
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install          # node ^22.19 || >=24,corepack pin pnpm@11.7.0
pnpm run build
pnpm dsh web

# 查看你机器实际启动的插件树(任何行都能被 patch 替换)
dsh --profile web --dump-config

# headless 模式:一次性 runner,无服务器
pnpm dsh --profile headless "你的任务"

开发参考:docs/architecture.md(改 packages/ 前必读)、docs/development.md(TS Host/Client 双聚合布局)、docs/cordis-primer.md(Cordis 五大思想)。

适用场景

适合谁用

  • Agent 架构研究者——研究「插件化、无特权内核」范式的标杆样本,Cordis 论文配套实现
  • 深度定制 Agent 的开发者——想换 agent loop / 模型层 / 会话存储,从配置层替换而非 fork
  • 企业 Agent 平台团队——需要热重载、副作用干净撤销的插件生态,profile/bundle 分层管理多套配置
⚠️ 注意
  • 开发者预览——明确警告「会有破坏性变更」,生产慎用
  • 学习曲线陡——需懂 Cordis 的 effect/coeffect 概念
  • 绑定 DeepSeek——官方主推自家模型,多 provider 是后话
风险提示

需要权衡

潜力评估

未来空间

DeepSeek 官方背书 + 69k stars + 学术级架构设计,是 2026 年 agent harness 赛道的架构派标杆。Cordis 的「时空可组合性」理论把「插件热重载无副作用残留」这个工程难题给出了形式化解法——如果这套范式跑通,会重新定义 agent harness 该怎么造。风险在于预览期 + 复杂度可能劝退普通用户,更适合作为研究 + 深度定制而非即装即用工具。


上一个
Diagram Design
下一个
Pi-Mono
1 / 15