dshbase

博客 · 架构

今年最有野心的 Agent 开源:能自我改造的 Agent

2026 年 8 月 14 日 · dshbase

DeepSeek 不是在交付一个成品——它交付的是一个能让 Agent 重建自身的框架。这句话听起来像营销,直到你真的跑起来。我们在 dsh 0.1.0-rc.6 上实测过,这套架构在很多方面确实和 Claude Code、Codex 根本不同。下面是完整拆解——包括那些没有 README 里说得那么顺的部分。

Agent = Model + Harness

每个 AI 编程 Agent 都是两个东西拼在一起:模型(推理大脑)和 harness(把大脑接到文件、终端、工具、网络上的那一整层)。DeepSeek Harness 的不同之处在于它把这条分界线划在了哪里。Claude Code 和 Codex 里,harness 是一个固定外壳,你只能通过 MCP 或 API 扩展,但永远换不掉。而在 DSH 里,harness 本身由插件组成——「产品」和「扩展」之间的界线根本不存在。关于这套命名的论点,见为什么它叫 harness。

一切皆插件

Harness 的每个部分都是插件——工具、技能、会话、沙箱、Agent 循环、子 Agent、工作流,甚至 UI。唯一真正的核心是 Cordis:一个只干一件事的最小内核——加载插件、卸载插件、解析依赖。它对模型、工具、甚至「Agent 是什么」都不带任何观点。所有你以为的核心行为,都是坐在内核之上的插件。

为什么内核重要:自进化 Agent

Cordis 给了你两个普通应用永远给不了的保证:

  • 时间可组合性——卸载插件时完整撤销其副作用。移除一个能力,系统回到添加它之前的状态。
  • 空间可组合性——插件在兄弟插件变化时重新解析依赖。换一个工具,所有用到它的地方无需重启就生效。

这两个特性让 Agent 能在运行中扩展自己:发现自己缺一个能力,现场造出插件,热挂载到自己身上,还不污染状态。我们直接验证过这条「顺路」——跑 dsh plugin add dsh-memory 会装好包、写进 profile 的 package.json,下次启动插件已经在配置树里。不用重新构建,不用手动接线,内核自己发现并加载它。

让这一切成立的契约:dsh.bundle

这种魔法背后是一份清单契约,而它正是大多数实战翻车的地方。插件必须带 dsh.bundle 清单(一个 cordis.patch.yml,加上 package.json 里的 dsh.bundle.patch 声明)。没有它,dsh plugin add 会把包静默地当成普通依赖装进去——永远不激活。我们在审计插件时反复撞上这个:包装上了、目录里也列出来了,Agent 就是不加载它。

这种细节只有真正跑过才知道。我们在 dsh 0.1.0-rc.6 上实测了 101 个社区插件,结果和这套架构直接对应:

  • 11 个从 npm 干净装好,开箱即用。
  • 4 个需要 Web/TUI 运行时,得在 Agent 旁边另起一个进程。
  • 3 个直接装不上——通常是清单缺失或损坏,或依赖了还没发布的包。
  • 81 个压根没发到 npm——只活在 GitHub 上,用 dsh plugin add github:owner/repo 装。

这个「81」是最说明问题的数字:它意味着「一切皆插件」不是理论,而是一条活的分发渠道。但那 3 个装不上、以及那些静默不激活的情况,就是无门槛生态的代价。完整结果见插件目录,每种翻车方式都记录在排错指南里。

创造模式:「现场造扳手」

这套架构的回报是创造模式。告诉它「做一个只读、只能审计不能改文件的安全模式」,或「做一个接公司搜索、固定模型、带三种专属 Skills 的研究 Agent」——或者让它检查自己已加载的插件,发现缺哪个,现场造一个并热挂载。因为卸载是干净的(时间可组合性),Agent 可以反复试验而不永久污染自己的状态。比喻就是:它发现自己没有扳手,现场造一把,插到自己手上,继续干活。

这里有个值得一提的安全护栏。当一个从 GitHub 装的插件带了 prepare 构建脚本,pnpm 会拦住它、要你确认 allowBuilds。这感觉像摩擦,但对一个自进化 Agent 来说,它正是「Agent 扩展了自己」和「Agent 拿着你的权限跑了任意代码」之间的分界线。把那个提示当功能,别当 bug。

连 UI 都是插件

社区成员没碰核心能力就换上了自定义皮肤——一条命令安装,一键恢复。这是件小事,但它最干净地证明了「一切皆插件」不是一句口号。当连 UI 都是可换的插件时,这个说法就是承重的,而不是装饰性的。

FAQ

用 DSH 需要懂 Cordis 吗?不需要。你可以当普通编码 Agent 用,永远不用想内核。只有写插件、替换核心部件、或调试「插件为什么不激活」时,才需要关心 Cordis。

为什么这么多插件只发在 GitHub 而不发 npm?发 npm 是多一道大多数周末作者会跳过的步骤。DSH 用 dsh plugin add github:owner/repo 兜住了这一点,所以 GitHub 仓库也算一个合法分发目标——但 GitHub 源码插件也正是我们见到最多安装失败的地方。

自我改造安全吗?只在你留的护栏之内安全。allowBuilds 提示和干净卸载保证能帮忙,但请把自我改造当成一个收窄的、留痕的实验,而不是放任。

资源

全部文章 →