2026 年 8 月,Hacker News 上线了一个仅约 150 行的开源项目 Seed,拿到 59 分,GitHub 109 颗星。Seed 的设计哲学与过去两年所有 Agent 框架都不一样:它不提供框架,不预设工具集,不规定记忆结构,不预设 Agent 性格,而是给一个最小种子——一个 `seed.py` 文件调用 LLM,只携带一个工具 `exec`(执行 shell 命令),系统提示从 `self/SELF.md` 读取。Agent 启动后必须自己在 `self/` 目录里长出工具、记忆、技能、行为模式——每开一次会话都要继续把上次没写下的内容写到磁盘上,会话本身不保留任何状态。项目作者 Vivek Haldar 在 DESIGN.md 里把这一设计追溯到 McCarthy 1960 年的 Lisp 论文——Lisp 的七个原语加上 `eval` 就能展开整个语言,Seed 想要的也是同样的「种子可以长成一切」的能力。这一选择的工程价值不在于「更简洁的代码」,而在于把 Agent 时代最危险的两个隐性失败模式——框架膨胀到无法审计、Agent 永远在同一个最小能力区间重复——用一个最小的可审计种子前置解决。
一、为什么「最小可审计种子」是 Agent 时代的关键工程决策
过去两年,Claude Code、Codex、Cursor、Continue、Cline 等编码 Agent 框架的代码体量都在快速膨胀。一个 Claude Code 子项目动辄数 MB 的代码,内部包含 MCP 集成、Subagent 委派、SSH 远程连接、IDE 集成、权限系统、会话恢复、跨设备同步等几十个模块。这些模块让 Agent 的能力越来越强,但也带来一个工程问题:没有人能完整审计整个框架。代码 review 只能针对局部变更,安全审计需要假设「框架其余部分行为正常」,而这种假设在 Agent 时代越来越危险——Agent 持有的凭据、Tool 调用的 API 范围、会话状态的恢复行为都依赖框架的正确实现。
Seed 把这个问题前置到种子层。一个 ~150 行的 `seed.py` 是 Agent 运行时唯一无法被 Agent 自身修改的部分,也是项目里唯一需要完整审计的代码。它做的事只包括:调用 LLM、维持多轮会话状态、转发 tool call。一旦审计通过这个 ~150 行,后续任何代码(包括 Agent 自身长出来的工具、记忆、技能)都是在审计过的循环上运行,新代码的安全责任由 Agent 自身的成长过程承担,而不是框架。
Seed 的设计文档把这一哲学追溯到四个工程传统。McCarthy 1960 年的 Lisp 论文用七个原语加上 `eval` 写出了整个语言,Alan Kay 称之为「软件界的麦克斯韦方程组」——证明语言/系统可以自举。Smalltalk-80 取消了源码与运行程序的区分,活的 image 本身就是系统,可从内部修改。Forth 用几十个原语搭出语言本身,逐字把语言长在自身里。可自举构建(stage0 / live-bootstrap / GNU Mes)从 357 字节的种子二进制开始,长出完整的编译器工具链——每一层之上的代码都是可读的源,种子是不可审计的信任锚点。Thompson 在 1984 年的「Reflections on Trusting Trust」进一步警告:自指系统会累积你看不到的东西,种子必须可被完整理解,否则信任无从谈起。
二、设计文档里的关键工程决策
Seed 的 DESIGN.md 把项目里的每一项关键设计决策都给了清晰的工程理由。第一项决策是「唯一不可约的工具是 exec」。任何 Agent 想从零开始长出工具,必然需要先执行某段代码;工具集的设计必须包含一个可以运行任意代码的原语,这一原语就是 exec。它是 bash 子命令的执行入口,可以读写文件、调用 API、搜索网络、修改自身——所有其他工具都能通过 exec 长出来。McCarthy 需要 `eval` 把数据转成行为,Seed 需要 `exec` 把模型文本转成世界效应。这一原语不可再压缩。
第二项决策是「循环留在种子层」。Agent 与工具的对话天然是一个循环(模型请求调用 → 工具执行 → 结果返回给模型),无法消除,只能放置。Seed 把这个循环放在 `seed.py` 里,与网络通信、状态管理放在一起,保持足够小以便一次 review 完成。Agent 是否能修改 `seed.py` 取决于种子如何种植——这是一个工程决策而非 prompt 禁令,后者在关键约束下不可靠。
第三项决策是「系统提示与 Agent 自描述是同一个文件」。早期设计里系统提示是冻结的,SELF.md 是 Agent 维护的可变文件;但顺着逻辑推演后,这两个文件应该合并——既然系统提示是可变的,它必须存放在 Agent 能编辑的磁盘上,而 boot ritual 已经要求「先读 SELF.md」,所以它们本质上是同一份文件。循环里唯一硬编码的上下文决策是 `system_prompt = read("self/SELF.md")`,每次 turn 都重读,Agent 对 SELF.md 的编辑立即生效。「种子提示」只是那份文件的初始内容,作为 commit #0 留存——种子在发芽后仍然作为历史存在,但不再是受保护的只读内核。
第四项决策是「会话过期,连续性只能通过外化」。进程退出时对话消失,只有 Agent 写到 `self/` 的内容能保留。这一选择是刻意的:它强制 Agent 发展「外化能力」(任何值得保留的东西都必须写下来),同时保证 boot 契约的诚实——SELF.md 真的就是 Agent 醒来时唯一知道的东西。
第五项决策是「flight recorder 而非 memory」。循环把每次会话的逐字 transcript 写到 `self/sessions/
三、与相关项目的工程定位差异
DESIGN.md 把 Seed 与四个相关项目做了精确的工程定位对比。Thorsten Ball 在 2025 年发表的「How to Build an Agent」用约 300 行 Go 代码写了一个能工作的代码编辑 Agent——一个对话循环加三个工具,证明 Agent 内核可以很小。但 Ball 的 Agent 是一个「静态端点」:工具是手工写的,没有任何持久化,Agent 永远不会修改自己的脚手架——他停在 Seed 开始的地方。
Hugging Face 的 smolagents 是另一个最小框架,其 `CodeAgent` 用 Python 代码而非 JSON 来表达 action,这一设计是「同像性」(homoiconicity)思路的近亲——代码即数据,所以 exec 可以替代所有其他工具。但 smolagents 仍然是一个人类编写的框架,Agent 不会长出自己的脚手架。
2023 年 Zelikman 等人提出的 STOP(Self-Taught Optimizer)是「Seed Improver」学术祖先:用冻结的 LLM 来改进程序,指向自身。但 STOP 的成长由数值化的效用函数在批处理模式下驱动,没有对话、没有累积的 image、没有最终的「个人 Agent」。
Wang 等人 2023 年的 Voyager 在 Minecraft 中用 GPT-4 玩游戏,每个解决的任务变成可检索的可执行 skill。这是当前最接近「长出你自己的 Agent」的工作,但局限于 Minecraft 领域、控制循环是固定的人工代码、课程是自主而非对话式。Voyager 长出一个工具箱,Seed 长出整个有机体。
Sakana AI 联合 UBC 在 2025 年提出的 Darwin Gödel Machine 是最强的现有证据,证明冻结的模型可以有意义地改进自己的脚手架——它在 SWE-bench 上把自己从 20% 提升到 50%。但它从一个大幅手工构建的 Agent 起步(对最小化没兴趣),适应性是基准驱动的(没有对话),且是种群搜索(每次迭代都要花钱)。
2026 年的 Self-Harness and Hierarchical Self-Improvement 把单冻结 LLM 重写自己的 harness 形式化,提出两个安全发明:固定 seam(Agent 无法修改的不可变接口)与非回滚接受(只有不导致回归的编辑才能提交)。研究社区在「Agent 应该长出自己的 harness」这一方向上正在收敛,但他们的视角都是优化机器,不是从最小种子启动的对话式 boot。
Seed 占据的精确位置是「unoccupied square」:从一个可审计的种子开始,长出一个个人的 Agent,以对话形式成长,整个 Agent 的 body 都是文本(Agent 自己能读写),选择压力是「这对人类是否有用」而非「基准分数」。研究路线证明了可行性,系统路线提供了框架,之前没有人构建对话式、McCarthy 风格的版本。
四、企业级 Agent 运行时自演进的新基线
把 Seed 的设计与它所归属的工程传统合并,可以提炼出企业级 Agent 运行时自演进的五项关键基线。
第一项基线是种子必须可审计。任何「Agent 可以修改自己的脚手架」的设计,都必须先把不可修改的种子做得足够小,小到一次 review 就能完成。Seed 的 ~150 行是工程现实里可审计的最小阈值——再小就难以完成「LLM 调用 + 对话状态 + 工具转发」,再大就回到「框架膨胀到无法审计」的旧问题。
第二项基线是 Agent 的 body 必须是同像性数据。在 Lisp 里代码即数据,在 Seed 里 Agent 的整个 body(提示、工具、记忆、约定)都是文本,Agent 自己能读写。这一性质让「Agent 改自己」在工程上变得可控——任何修改都是对文本文件的写入,可以走 git diff、code review、回滚。
第三项基线是连续性必须通过外化实现。Session 内部状态(包括对话历史、思考过程、临时变量)天然会过期,跨会话的连续性必须通过显式写入磁盘实现。这一约束强制 Agent 发展「外化能力」,也保证 boot 契约的诚实——SELF.md 真的就是 Agent 醒来时唯一知道的东西。
第四项基线是 flight recorder 是审计而非记忆。每次会话的逐字 transcript 应该被保留,但 Agent 在 boot 时从不加载它。transcript 是给人类和未来 Agent 研究自身历史用的,不是给当前 Agent 用作 working memory。这一区分避免了「把 transcript 当 memory」带来的上下文污染——transcript 通常太长、噪声太多,不适合作为当前决策依据。
第五项基线是不可变接口(seam)作为安全锚点。即使 Agent 能修改自己的脚手架,某些核心接口必须永远不变——例如对 LLM 的调用契约、对工具调用的循环结构、对 self/ 目录的写入协议。这些 seam 类似于 Thompson 反思里「编译器永远会包含后门」的问题——只要某些层永远是审计者能够锚定的参考点,自修改系统的累积漂移就能被约束。
五、链路视角下的最终结论
Seed 项目在 README 里有一段话最能体现「链路 > 模型」立场:「Everything an agent normally gets from a framework — tools, memory, skills, conventions — must instead be grown by the agent, session by session, into its `self/` directory」。框架是模型运行时的脚手架,Seed 选择不在脚手架里预埋任何能力,而是让 Agent 在每次会话中自己长出来。这一选择的工程价值不在于「更小更快」,而在于:模型可以迭代,Fable 5 之后会有新模型,但 Agent 长出来的工具集、记忆、约定都是该项目独有的资产,不会因为模型升级而失效。
把视角拉到企业 AI 落地的长周期,可以看到 Seed 给出的三个必然迁移。第一,框架从「预置一切能力」迁移到「提供最小种子」,让 Agent 在运行时自演进——这一迁移与 Darwin Gödel Machine 等学术路线同向,但 Seed 选择以对话、人类实用性而非基准分数作为选择压力。第二,Agent 的状态从「会话内」迁移到「跨会话可外化」,任何有价值的成果必须写到磁盘、进入 git、接受 review——这一迁移让 Agent 的工作产物能被工程治理流程覆盖。第三,审计从「框架整体」迁移到「种子层 + seam 层」,审计者不再需要审查整个 Agent 运行时,只需要审查最小种子与不可变 seam 即可——这一迁移让 Agent 系统的合规审计成为可执行的工作。
模型可以迭代——Claude Sonnet 5 之后会有新模型,GPT-5.6 Sol 之后会有新模型——但 Agent 运行时自演进的五项基线(可审计种子 / 同像性 body / 显式外化连续性 / flight recorder 而非 memory / 不可变 seam 安全锚点)不会因为模型升级而失效。把资源投到这些不散的链路层要素上,是企业 AI 落地性价比最高的工程方向。Seed 给出的不是「一个更好的 Agent 框架」,而是「一个让框架不再需要的最小起点」。