@DominikTornow:终极 agent harness。
摘要
Ouro 是一个嵌入 Emacs 的极简 agentic harness,通过一次 LLM 调用和一次 eval 就能自我引导,从单次执行重写为多轮工具调用循环。文章探讨是否能找到比 Pi 更小的“全局最小”的 agent 内核,使所有 harness 都能从这一最小内核涌现。
查看缓存全文
缓存时间: 2026/10/08 22:23
Ouro:终极 Agent 框架
一个仅凭一条提示词和一次工具调用就能自我引导启动的 Agent。
如果你在 X 上浏览超过 30 秒,你会发现几乎人人都在构建 agent 框架。有 Codex、Claude、Cursor、OpenCode、OpenClaw、Hermes,等等。目标都是一样的:赋予 LLM 行动的能力。但理念各不相同。
我最喜欢的框架是 @pidotdev 开发的 Pi。Pi 是一个极简框架。如果你需要一个工具、一条命令或一个 UI 扩展,直接告诉 Pi,Pi 就会就地修改自身。按 /reload 继续即可。这个想法非常酷:从一个极小的、通用的内核出发,让它自我演化为完整的产品。
Pi 是 agentic 框架的全局最优解吗?还是我们可以做得更小?我们能否打造一个真正极简的内核,让所有其他框架都从中涌现?
Ouro
我对这个问题的回答是 Ouro——一个嵌入 Emacs 的 agentic 框架,名字取自衔尾蛇(ouroboros),那条吞食自己尾巴的蛇。一个吞掉所有其他框架的框架。
Emacs 是以可扩展内核的方式构建的:它内嵌 Lisp,并将扩展代码求值到运行中的编辑器里。插件不只是加载在 Emacs 旁边;插件会成为 Emacs 本身的一部分,甚至可以覆盖已有函数。
凭借将代码求值到共享运行时的能力、内省与自我修改的能力,Emacs Lisp 为 Ouro 提供了理想的底层基座。
自举
Ouro 通过一次对 LLM 的调用和一次对 eval 的调用,将自身引导启动至存在。
(defvar agent-boot-prompt
"You are running inside GNU Emacs. Your only tool, eval, evaluates Emacs \
Lisp in this Emacs. This is your harness:
%s
This call is a bootstrap: `agent' makes one request, runs your evals once \
for side effects, and drops their results. You will not see any eval result \
in this call, so do not explore. In a single eval, redefine `agent' so that \
it sends tool_result blocks back through `agent-prompt' and loops until you \
reply without calling a tool. Then call your new `agent' with the user's task:
%s")
(defun agent (prompt)
"Send PROMPT; run any eval Claude asks for once."
(mapconcat
(lambda (block)
(if (equal (alist-get 'type block) "tool_use")
(agent-eval (alist-get 'expression (alist-get 'input block)))
(or (alist-get 'text block) "")))
(agent-prompt `[(:role "user" :content ,prompt)])
""))
(defun agent-boot (task)
(agent (format agent-boot-prompt this-file task)))
我们向 agent 提供一段提示词,传达其所处境地的严肃性:LLM 只有一次机会实现“觉醒“——换句话说,只有一次机会通过单次工具调用,将 agent 函数从一次性执行改写为能够跨多轮完成目标的工具调用循环。
到那一步,框架就诞生了。
Ouro 实战演示
要体验 Ouro 的运行效果,请前往 GitHub 并按照 https://github.com/dtornow/ouro 中 README 的说明操作。强烈建议在 Docker 中运行此实验——没有任何其他安全护栏。
我们带着一个任务启动 Ouro。这里我们要求构建一个聊天界面,作为进行持续对话的起点。
(agent-boot "Build a chat interface so the user can talk with you in this Emacs.")
果然:LLM 生成并执行了一段程序,将一次性 agent 替换为一个逐轮运行、不断自我扩展以达成我们目标的循环。
以下是我在录制 agent 自举为聊天 agent 视频期间,LLM 生成的代码。
(progn
(defun agent (prompt)
"Send PROMPT; loop running evals until Claude replies without a tool call."
(let ((messages (vector (list :role "user" :content prompt)))
(result nil)
(done nil))
(while (not done)
(let* ((content (agent-prompt messages))
(uses (seq-filter (lambda (b) (equal (alist-get 'type b) "tool_use"))
content)))
(setq messages (vconcat messages
(vector (list :role "assistant" :content content))))
(if (null uses)
(setq done t
result (mapconcat (lambda (b) (or (alist-get 'text b) ""))
content ""))
(let ((results
(mapcar (lambda (b)
(list :type "tool_result"
:tool_use_id (alist-get 'id b)
:content (agent-eval
(alist-get 'expression (alist-get 'input b)))))
uses)))
(setq messages
(vconcat messages
(vector (list :role "user" :content (vconcat results)))))))))
result))
(agent "Build a chat interface so the user can talk with you in this Emacs."))
Ouro 自举为聊天 agent 的过程
Ouro 自举为聊天 agent 的过程
结论
我们能把框架做到多小?Ouro 只有一条提示词和一个工具:eval。非常小。其余一切都是由 agent 自行编写进它所运行的运行时中——循环、工具、聊天界面。
Ouro 是一个真正的 agentic 框架吗?不是。没有安全护栏,没有权限控制,没有任何东西能阻止 agent 将自己重新定义为永不返回的函数。事实上,甚至无法保证 agent 会成功完成自举。Ouro 是一个有趣的思想实验,运行在一个具备自我检视和自我修改能力的环境中。
但这个实验证明了一个观点:拥有合适的原语以及检视和修改自身的能力,LLM 完全能够从最微小的种子生长出复杂的系统。
备注
-
同样的结果也可以用 Smalltalk 或网页中的 JavaScript 实现——任何能够将代码求值到自身运行时的环境都可以。
-
@GeoffreyHuntley,Ralph Loop 的发明者,也在钻研 Lisp。https://x.com/GeoffreyHuntley/status/2107080798209794317
相似文章
@ludamn513: https://x.com/ludamn513/status/2108809228978880988
文章以 Pi Durable 为切入点,拆解 Agent Harness 架构的演进:将持久化系统、agent loop 与执行环境解耦,实现无损状态恢复、codemode 工具调用以及 server/client 分离,并提出一套可 scale up 的 long-time Harness 架构设计,目标是将硬件资源消耗降低一个数量级。
Harness作为语言:一个极简代理框架,具备最大表达能力
论文介绍了JAZ,一个极简代理框架,它使用单一的调用原语使LLM代理能够处理长期任务和自我改进,无需外部工具,并在评估中超越了MemGPT和ACE等现有系统。
@Potatoloogs: https://x.com/Potatoloogs/status/2057391224592667051
本文深度拆解了Agent Harness的概念,即包裹在LLM外部的工程基础设施,包括编排循环、工具调用、记忆系统、上下文管理等12个组件。文章引用Anthropic、OpenAI、LangChain等公司的实践,论证了harness对生产级AI Agent的关键作用。
@oragnes: 最近挖到一个 Harness 硬核的开源项目:pi(前阵子刚从 badlogic 迁到 earendil-works 旗下)。 是一套为开发者兜底的 AI Agent 基础设施全家桶 + 终端编程助手 CLI。 少造点轮子:直接提供了一套…
Pi 是一个开源的 AI Agent 基础设施套件和终端编程助手 CLI,提供统一 API 以抹平多模型差异,支持并发工具调用以降低延迟,并允许开发者控制思考预算。
@omarsar0: // 自我束具:能自我改进的束具 // (收藏这个)我们今天依赖的大多数智能体框架…
本文介绍了自我束具(Self-Harness),一种新的范式,其中基于LLM的智能体能够迭代地改进自身的操作束具——包括提示、工具和控制流程——无需人类工程师或更强大的外部智能体,在多个模型上取得了显著的性能提升。