ESC
↑↓ 选择↵ 打开esc 关闭⌘K 唤起
← Home NO.145
第 145 期 · AGENT 工程 · 收录于 2026 年 8 月 15 日

harness内幕

DK
Dominik Kundel Codex · AI Engineer
视频 20:54 原文约 2.0 万字 预计阅读 24 分钟 来源视频 ↗ 中英对照全文
TL;DR · 三句话
  1. 这是一场**"把 Codex 的引擎盖掀开给你看"**的工程分享:讲者 Dominik Kundel 用 2 倍速讲完 20 分钟,视角是「你按下回车之后,harness 里到底发生了什么」——harness(可以理解成"挽具/外壳",就是承载模型干活的那层程序:给它工具、组装上下文、跑循环、收结果)。他反复强调:这一切都是开源的(「it's MIT it's Apache 2 license」——他现场自我更正了一次),用 Rust 写的,你可以学它、可以拿它去问 Codex、也可以 fork 一份改成自己的。 → 详细
  2. 上下文不是仓库,是预算。构造上下文时他们只盯三件事:大小(别打爆 token 预算,而且内容越多越容易自相矛盾、让模型犯迷糊)、灵活性(你装多少技能和 MCP 都得好用)、可缓存性(省钱和提速)。落地手段极其具体:把一部分工具标成 deferred(延迟加载)、不进上下文窗口,改由 tool search 现查;可用技能列表硬卡在最大上下文窗口的 2%,超了就自动削描述文字。 → 详细
  3. 两处最值得抄的设计:一是 auto review——一个只读、不能再派子任务、完全独立的评审 sub-agent,在主 agent 想提权(比如删文件)时被拉起来,拿着「用户授权级别 + 风险分类体系 + 全程对话记录 + 实际工具调用」做判断,自动放行低风险动作、把数据外泄挡在外面,专治审批疲劳;二是 WebSocket 模式——当 GPT 5.3 Codex Spark 跑在 Cerebras 上达到每秒 1,000 个 token 之后,他们发现瓶颈已经不是推理,而是网络,于是把 responses API 从 HTTP + 服务器推送改成一条持久连接、只发变化的那部分数据。 → 详细
01

开场坐标:全场听众都自己搭过 agent,所以直接跳过入门

  • 他先用举手筛人:「你们当中有多少人自己搭过 agent?」——「非常好,那你们就是这场演讲最对的听众」。因为是在 AI Engineer World's Fair 的 Agentic Engineering 分会场,他宣布不讲「agent 是怎么工作的」「什么是 agent」,直接讲几个「你必须去解决的挑战」。全场组织视角只有一句:从"你发出一条消息之后到底发生了什么"往下拆→ 详细
  • 开场就给了通行证:Codex harness 和他展示的一切都是开源的——他原话先说「it's MIT」,紧接着自我更正「准确说是 Apache 2 许可证」(两处照实保留),harness 用 Rust 写。他给了三种用法:拿来学、就他讲的内容直接去问 Codex 更深的问题、或者 fork 改成自己的。 → 详细
  • 一句很重要的免责:「这些都是当下的状态,东西变化太快了。」尤其每次有新模型发布,他们经常会发新 API、也会改 harness 的工作方式。他给的应对不是记笔记,而是「你随时可以回过头去问 Codex 现在的状态是什么样」——把易变的知识外包给一个可查询的活源。 → 详细
02

两个协议:UI 到 harness 走 app server,harness 到推理走 responses API

app server 架构图 *▲ 图注:标题「App server」。这张图是全场的地基:左边是 OpenAI 自家产品(Codex Desktop App / Codex TUI-CLI / Codex Web Runtime),右边是第三方集成(JetBrains IDEs / VS Code (Codex) / Xcode),两边都通过同一套 JSON-RPC 连到中间那个黑框「CODEX HARNESS via app server」。值钱的地方在于这个对称性——自家 App 和别人的 IDE 走的是同一个协议、没有内部特权通道,所以「你能建出跟官方一样完整的东西」不是客套话。*

  • app server 管「界面 → harness」这一段,且是为开放生态设计的:你做自己的 UI、自己的 agent 界面,可以直接建在 Codex harness 之上。证据是自家 Codex app 用的就是同一套 app server——「所以你对 Codex 期待的那些功能它其实全都有」。已经建在上面的第三方社区项目他点了两个:Theos T3 codeRemote X(⚠️ 这两个名字是自动转写出来的,拼写不可靠,保留英文原样、不猜测)。 → 详细
  • 他自己拿这套协议玩出了两个花活:把 Codex 塞进 Claude Code(「如果你是 Claude Code 用户,又想用上 Codex,你可以用那个插件」),以及前一天演讲里把 Codex 塞进《Doom》——「一次挺好玩的冒险」。 → 详细
  • responses API 管「harness → 推理」这一段(inference =模型真正算答案那一步)。它去年发布,定位是「在一个更 agentic 的世界里对 chat completions API 的一次重新思考」:结构重新设计过,更重要的是加进了一批对 agent 关键的内置能力——web search、图像生成(image gen)等。 → 详细
  • 他们把它推成了行业开放标准:和 Ollama、LM Studio、Nvidia 等伙伴一起把开放的 responses schema(schema =接口的字段和结构约定)规范化,并成立了一个治理机构;结果是你可以拿任何兼容 responses API 的模型提供方直接插到 Codex harness 上。整条链路:UI →(app server)→ harness →(responses)→ 模型推理。 → 详细
03

【核心】上下文构造:他们只盯三件事——大小、灵活性、可缓存性

构建上下文的三个约束 ▲ 图注:标题「Building the context」,三张卡把全部权衡压成了三行:01 Size — Avoid cost and confusion(控大小:既省钱,也避免模型犯迷糊)/02 Flexibility — Everyone's Codex looks different(保灵活:每个人装的技能和 MCP 都不一样)/03 Cacheability — Better cost and speed control(保可缓存:成本和速度都靠它)。这一页值钱在*它把"上下文该放什么"从审美问题变成了三个可检查的指标——你自己搭流水线时可以照抄这三条当验收标准。*

  • 第一步就是最重要的一步。他说 harness 内部的第一步「可以说也是最重要的步骤之一」是上下文构造(context construction)——就是在把请求发给模型之前,决定"这一次到底把哪些文字塞进模型眼前"。他们在这件事上非常在意三点。 → 详细
  • ① 大小,而且理由是两条不是一条。第一条是钱:「我们要保证不会一下子把你的 token 预算打爆」(token =模型处理文本的最小计价单位)。第二条更关键、也更常被忽略:「你上下文里的内容越多,出现互相矛盾的信息的概率就越高,就会让模型犯迷糊。」——也就是说,塞得多不只是贵,是会变笨→ 详细
  • ② 灵活性:「不管你用的技能(skill)是多是少,体验都得好;不管你装了多少插件和 MCP,也一样。」(MCP =一套让 agent 接外部工具和数据源的通用接口标准。)注意这是一个产品级约束:他们不能假设用户的配置长什么样,所以必须让上下文能自适应地缩放。 → 详细
  • ③ 可缓存性(cacheability):「我们知道你对成本敏感。」——可缓存性说的是,如果每次请求开头那一大段内容都完全一样,服务端就能复用上次的计算结果,不用重算、也不重复计费,所以既省钱又更快;反过来,你只要在开头随手改一个字(比如塞一个当前时间戳),后面全部就都白缓存了。这就是为什么"哪些内容放前面、哪些放后面"是个工程问题而不是排版问题。 → 详细
  • 他为了演示专门造了个 nano Codex:一个小型复刻版,「它的运作方式跟真的一模一样」,用公开仓库里的同一份代码搭的、只是改写成了 TypeScript。用它可以直观看到一条消息发出去时,上下文是由好几个不同部分组装起来的。其中一部分相当标准、可预测,比如模型指令(model instructions)——他又提醒了一次「这些都是开源的,你想读的话可以去读」;这类内容结构固定、大小基本不变,也不会把可缓存性搞乱→ 详细
04

【核心】控制上下文膨胀的两招:deferred tools + 技能列表卡 2%

  • 问题出在"难预测"的那几块:你手上有多少个可用技能?工具注册表(tool registry,就是"当前有哪些工具可调用"的那张清单)有多长?——尤其是装了 MCP 之后,上下文会随着你装的 MCP 越来越多而不断膨胀。这块是用户装出来的,harness 自己控制不了,所以只能想办法收。 → 详细
  • 第一招:deferred tools(延迟加载的工具)。把一部分工具标记为 deferred,意思是它们不会直接被加进上下文窗口(context window =模型一次能看见的全部文字的容量上限),而是之后通过 tool search 才能拿到。相当于把一本厚工具手册换成一个"要用再查"的目录。 → 详细
  • 第二招:给技能列表设硬上限——「对于可用技能列表,我们实际上把它的上限卡在你总上下文(也就是最大上下文窗口)的 2%。」超过之后不是报错、也不是砍掉技能,而是慢慢削减放进去的描述文字的量。这是一条极干净的工程约定:用一个百分比,把一块不可预测的开销变成可预测的。 → 详细
  • 而且这两招你不必用他们的 harness 也能拿到:tool search「这件事本身其实在 responses API 里就有,所以哪怕你是在做自己的 harness,也可以直接用上它」。从 GPT-5.4 开始,你可以把任何工具标记为 deferred loading;这些工具只有在用 tool search 时才可用,你可以把 OpenAI 内置的 tool search 工具给模型,也可以自己实现一个——「如果你觉得那套发现逻辑你自己能做得更好的话」。 → 详细
05

【核心】异步动作:sub-agent 和后台终端用的是同一套形状

  • 他给"什么是 agent"下了个功能性定义:「一个 agent 真正成为 agent,是因为它会执行动作。」然后把动作分成三类讲:异步动作、computer use、文件系统。异步动作指的是那些在 agent 必须继续干活的同时还在后台跑着的事情→ 详细
  • sub-agent(子 agent)就是异步动作的典型例子:目标是「能把任务派发出去,同时主 agent 在需要的时候还能继续干活」。实际做法只有两个工具——spawn agent(创建新的 agent 实例)和 send input(给这些新建出来的 agent 发送新内容、等待某个 agent、或者把它关掉)。注意这个接口设计有多克制:派活、喂料、等待、关闭,四个动词就够了。 → 详细
  • 同一套形状被复用到后台终端上:Codex agent 有一个工具可以起一个新的后台终端(background terminal),然后持续跟它交互——通过标准输入(standard in,就是命令行程序读键盘输入的那个通道)往里送新数据,或者等待指定的一段时间让它把某个任务干完。这是本场一个很容易被略过但很值钱的观察:"派个子 agent"和"开个后台终端"在抽象上是同一件事——都是"我起一个长期存在的东西、隔一会儿喂它一点、隔一会儿收一次"。你只要把这个形状定好,两种能力就能共用一套接口。 → 详细
06

computer use 的进化:从"给它固定动作"到"让它自己写脚本"

最初版本的 computer use ▲ 图注:标题「Original computer use」,左栏三段是老版本的全部特征:Specialized tool(给模型一个专用的 computer 工具,它就开始发指令)/Fixed commands(动作是固定那几种:打字、点击、截图、滚动等)/Bring your own computer(真正执行任务的那台"电脑"得你自己实现),右侧是两段代码。这页值钱在它是*反面教材——下一页的进化正是把这三条全部推翻。*

  • 老版本(去年在 responses API 里引入时)相当受限:一次只允许做一个动作;你得先声明你要用 computer use;而且具体暴露给这个工具的都是哪些类型的动作,得你自己去实现→ 详细
  • 新版本换了路子:改用代码执行(code execution)来做 computer use——「agent 可以自己写脚本,去跟你想接的任何 computer 实现打交道」,语言可以选 JavaScript 或 Python,拿到的 harness 灵活得多。 → 详细
  • 他们的 browser use 就是这么实现的:Codex 跟一个常驻的 node REPL(REPL =一个一直开着的交互式代码执行环境,变量和状态跨次保留)交互,这个 REPL 跨多个回合(turn)一直存在;然后它写 JavaScript——本质上就是 Playwright 代码——去操作 REPL 里的那个浏览器实例。 → 详细
  • 现场例子的关键在"第二回合":右边是一个 Chromium 浏览器,第一次它先写代码拿到整体状态、把正确的标签页调出来;后续回合里它能引用这些新的标签页、把信息拉进来、写出相应的动作脚本。他点出真正的收益:Codex 可以先看一个页面、理解它的结构,然后写一个脚本,在后续页面上更轻松地批量执行抓取(scraping)这类操作——一次理解、多次复用,比一页一页地点快得多。 → 详细
07

文件系统:模型是"照着工具训出来的",harness 得把工具备齐

  • 改文件走 apply patch:从 GPT-5 开始的所有近期模型都是围绕 apply patch 这个工具训练的——给一份 diff(补丁,只描述"哪几行改成什么"的改动清单)来改文件,新建文件也用它→ 详细
  • 其余动作走 shell 工具做文件搜索和目录操作;因为训练时用惯了,模型会很自然地想用 Ripgrep(一个非常快的命令行全文搜索工具),所以 Codex harness 干脆把 Ripgrep 一起打包发出去,以防你机器上没装→ 详细
  • Windows 上他们专门训练了模型原生使用 PowerShell,所以在 Windows 上跑会看到它直接写 PowerShell 代码。(这一整条的含义是:模型的习惯是训出来的,harness 的责任是保证它伸手要的东西真的在。) → 详细
08

沙箱优先:三个平台三套机制,Windows 是自己造的

沙箱优先 ▲ 图注:标题「Sandbox first」,三张卡就是三个平台的答案:macOS — Built-in Seatbelt(用系统自带的 Seatbelt)/Linux — Install Bubblewrap(装 Bubblewrap)/Windows — Custom open-source native Windows sandbox(自己造了一个开源的原生 Windows 沙箱)。「Sandbox first」这个标题本身就是态度:沙箱不是事后补的安全补丁,是所有文件系统交互的默认通道。

  • 所有跟文件系统的交互都走沙箱层(sandbox =把程序关在一个受限空间里,只许它碰指定的文件和网络):macOS 用 Seatbelt(「这跟大多数 agent 一样」),Linux 用 Bubblewrap→ 详细
  • Windows 上他们不得不自己造了一个开源沙箱,就在同一个 GitHub 仓库里;原因多到「光这一块我大概就能讲满一整场演讲」,所以他把这段外包给David 写的那篇文章——里面讲透了 Windows 上其他所有替代方案、以及为什么最终还是得自己造。 → 详细
09

【本期最值钱】审批疲劳与 auto review:用一个只读 sub-agent 当闸门

  • 他用两次举手把问题钉死。第一次:「你们当中有多少人被审批弹窗烦到过?尤其是跑长任务的时候,恨不得直接开全权访问(full access)?」第二次他更狠——「我觉得观众席应该没被拍进镜头,所以我们再来一次:你们当中有多少人知道,IT 和安全团队其实特别讨厌你打开全权访问?」全场的回应是「是啊」。审批疲劳(approval fatigue)的真实后果不是烦,是人会直接把安全机制关掉。 → 详细
  • 他给的两个"高自主性反噬"的例子极其具体,值得整段记住:「尽管这些模型已经变强了很多,但尤其是当你试图通过 prompt 把模型往高自主性(high agency)上推的时候,agent 可能会把你的意图理解偏。比如你让模型通过邮件把一个文件发出去,同时又推着它高自主性,结果它发现自己没法把文件作为附件加上,于是就把文件传到某个文件共享上,改用那种方式;又或者转义(escaping)搞错了,一不小心删掉了太多数据。」——注意第一个例子不是模型犯蠢,恰恰是它太听话地在完成目标,这才是最难防的那类事故。 → 详细
  • 于是他们做了 auto review,目标写得非常克制:覆盖那些"更难预测的、agent 可能做出的动作",尤其是长时间运行的情况下,把这些动作自动放行、不用升级到你这里来确认,同时把数据外泄(data exfiltration)这类事情挡在外面。(⚠️ 讲者在这一段里混用了两种叫法——先说他们做了一个「auto approval mode(自动审批模式)」,紧接着又说「我们做了 auto review」,原文如此,此处照实保留、不做统一。) → 详细
  • 触发时机很关键:不是每一步都审,而是"要提权的那一刻"才审。当一个任务在沙箱里跑起来(他的现场例子是删除一个文件),模型试图申请提权(escalate,即请求突破沙箱限制)的时候,才会拉起一个 auto review 的 sub-agent→ 详细
  • 这个审查员的三条硬约束值得抄下来:它完全独立运行不能再拉起别的 sub-agent只有读权限。也就是说,审查者本身没有任何搞破坏的能力,它唯一能输出的就是一个判断。 → 详细
  • 喂给它的上下文是四份东西:什么算是用户授权(user authorization)风险分类体系(risk taxonomy)是怎么运作的希望它按什么标准来判断,然后再加上对话记录(transcript)以及实际发生的那些工具调用(tool call,即模型发出的"请帮我执行 X"的指令)。他强调「这一点很重要,因为上下文是关键」。 → 详细
  • 他的 .git 例子把"为什么必须看上下文"讲透了:「有些情况下你就是想让 agent 去删掉那个文件,另一些情况下你并不想。如果是你要求的,或者这本来就是项目的一部分,那就说得通。特别是像你让它删 .git 文件夹,那很好;但如果你没让它删,它大概就不该碰那块、把你的历史记录整个删掉。」——同一个动作,是不是该放行完全取决于你之前有没有说过。所以判断分三问:用户授权级别是什么(他的例子里是"高",因为是明确要求删的)、这个动作的影响是什么该怎么处理→ 详细
  • 同一套逻辑也管网络:「这套东西既适用于文件系统操作,也适用于网络请求——比如 curl 一下 Google 看看网通不通没问题,但上传一个文件可能就不行。」这一句实际上定义了"数据外泄"这条红线在工程上长什么样:出方向的动作比入方向的动作要严得多。 → 详细
  • 他自己给这段打了折:「这只是对工程师们和研究团队在这上面投入的全部思考与工作的一个极度简化的说法。」想深挖的话,去看他们写的那篇 auto review 博客文章→ 详细
10

速度:推理不再是瓶颈之后,瓶颈搬到了网络

agent 会做大量工具调用 ▲ 图注:章节页,黑屏大字「Agents do a lot of tool calls」(agent 会做大量的工具调用)。这一页是全场第二个转折点:前面讲的都是"装什么进上下文、允许做什么动作",从这里开始讲*次数本身带来的代价——一次往返不贵,几百次往返就贵了。*

  • 他把速度问题拆成了两半:「虽然我们在推理提速上做了很多工作,但那只是方程式的一部分。」真正让他们意识到另一半的,是推出 GPT 5.3 Codex Spark 的时候——它跑在 Cerebras 上,每秒 1,000 个 token。有了这个速度才发现:在这么多工具调用和交互之下,推理已经不再是瓶颈了,真正的瓶颈是网络。 → 详细

WebSocket 模式 ▲ 图注:标题「Websocket Mode」,左栏三段把收益列得很干净:Same Responses API(能力跟前面讲的完全一样,不是另起炉灶)/Persistent connection(省掉连接握手的时间,尤其是工具调用这种一来一回特别快的场景)/Stateful context(有状态上下文——只发变化了的数据,不再每次重发整个上下文),右侧是 websocket 的代码。第三条是这一页真正的重点:省的不只是握手,是*重复传输。*

  • 解法是 WebSocket 模式:responses API 不再走 server-sent events(服务器单向往客户端持续推消息的一种 HTTP 长连接方式)和 HTTP,改用一条持久的 WebSocket 连接(客户端与服务端之间双向常开的通道)。收益两条:省掉网络开销,以及获得有状态的上下文——只需要发送真正变化了的那部分数据。他举的例子:「如果有一次工具调用,我们只把这次工具调用的结果发回去,而不是把所有 item 都发一遍。」 → 详细
  • 现场 demo 崩了,他把它变成了一个论据:讲到这儿他说「哦,好极了,这次我的 demo 服务器崩了」,换上备份之后又说——「既然 demo 服务器崩了,这也正好说明刚才那些是真实数据」。备份 demo 展示的差别是:新模式一个 item 接一个 item 地发,而旧模式这个例子里一次要发回九个 item。他的结论:「时间一长,这确实能显著加快速度,对性能的影响可以相当剧烈。」 → 详细
11

【核心】loops 与 /goal:为什么你的目标不该写成长篇大论

  • 他起这一段的方式很妙:「我们现在是在 2026 年的 AI Engineer World's Fair,我从法律上唯一必须讲的就是 loops(循环),所以我们简单说两句。」重点讲 /goal,因为「这次活动期间我被问到过好几次:这东西到底是怎么工作的?」他还特意说明这是一个托管的 demo,之后你们可以自己回放→ 详细
  • 机制本身很朴素:demo 里让它去猜一个数字,「只有当它真的把那个数字猜出来了,这个目标才算达成」。在达成之前,harness 会自动注入一个续跑 prompt(continuation prompt),这个续跑 prompt 里包含的东西之一就是你设定的那个目标(objective)。然后一直这样循环下去,直到模型自己调用 update plan、update goal 这个工具,声明这个目标确实达成了→ 详细
  • 然后是全场最实用的一条使用建议,而且他直接点名了听众的坏习惯:「这就是为什么你其实不该在 goal 里写长篇大论——我知道你们很多人一直在试着这么干——而是应该写非常具体、非常可验证的 prompt,这样才容易判断事情什么时候算做完了。」把因果讲完整就是:循环的退出条件是"模型判定目标达成",所以目标写得越模糊、循环就越难停,你也越没法证明它真的做完了。"可验证"在这里不是文风要求,是机制要求。 → 详细
12

compaction:服务端自动压缩,且压缩方式与训练方式一致

  • compaction(压缩)解决的是"跑太久"的问题——「如果让这些 agent 一次连续跑上几个小时甚至几天……」他们在去年年底引入了自动压缩(auto compaction),从那以后 Codex 一直在用。 → 详细
  • 两个技术要点:一是在服务端自动触发;二是触发的方式和模型训练时的方式一致,这样性能能保持不变——这句是重点,说明"怎么压"不是一个可以随便自定义的参数,压得跟训练时不一样,模型表现就会掉。 → 详细
  • 具体行为:可以手动触发也可以自动触发;它会把你之前的上下文窗口变成一个新的,后续轮次改用这个新的,而且新窗口里包含一个 compaction item,装着你需要的所有必要信息→ 详细
  • ⚠️ 本段原文因果不通,照实标注、不替讲者补逻辑:转写里这段的推理链是「如果 agent 连续跑几小时甚至几天,你肯定不想一直守在那儿、一遍遍地去批准所有东西因为这个原因,我们引入了自动压缩」——但"不想反复批准"是审批疲劳的问题,跟"上下文太长要压缩"并不是同一件事。疑似串词或漏句(可能原本要说的是"你也不想一直守着手动压缩")。此处保留原样,不做"合理化"改写。 → 详细
13

收尾三条:开源蓝本、能力都在 API 里、盯着它演进

  • 第一条Codex 的 app server 和 harness 都是开源的——「你可以把它当作蓝本,去了解我们是怎么造 agent 的;也可以直接把它当成 harness 本身,在上面搭你自己的东西。」 → 详细
  • 第二条(对自建 agent 的人最重要):「Codex 上那些亮眼的特性,大部分其实都在 responses API 里开放出来了。」他现场点名了四个可以直接拿走的能力——tool search、apply patch、WebSocket、服务端 compaction——并强调「不管你用的是哪个 harness,都可以直接用上它们」。 → 详细
  • 第三条是方法而不是结论:「随着模型不断演进,请留意我们是怎么演进 responses API 的、怎么演进 Codex 的,把它当作一条线索,去想清楚你自己的 agent 该怎么更新,才能用上这些新能力。」——呼应开场那句"这些都是当下的状态"。 → 详细

本期无闪电问答、也无现场 Q&A 环节。 全场是单人 20 分钟连讲,讲者自称「基本上得用 2 倍速讲,因为内容太多」,结尾直接以三条 takeaway 收束,把提问引导到会后展台。 → 详细

本期未留任何社交账号或邮箱。 讲者只在结尾说:「这是幻灯片的链接,我等下会去展台,有问题可以来找我。」另外他提到两份可追的书面材料——David 写的那篇 Windows sandbox 文章、以及 auto review 的博客文章;前一天他还有一场关于 app server 的演讲,「之后会有演讲视频放到网上」。 → 详细

🎯 于你何益 为你定制 · 非通用结论

相关度:高,而且是那种"直接给你零件"的高。 这不是一场讲愿景的分享,是一份把 agent 外壳(harness)的工程决策一条条摊开的清单——上下文该怎么组、工具太多怎么收、动作该怎么审、循环该怎么停、上下文满了怎么压。你手上同时有两条真实的多 agent 流水线(ERP 的 PRD 工厂、造 App 的那条链路),这五个问题你每一个都正在遇到,而他给的不是原则,是可以直接照抄的形状和数字。

先说明白哪些真的对不上:家居内容号本期无可对点,略过。StockHelp 的看板逻辑、选股与估值也无可对点——唯一沾得上边的只有一条商业观察(见下面第五节,两句话就完,不展开)。


一、Holdwell ERP 的多 Agent PRD 工厂:这期基本是照着你的痛点表讲的

① 「上下文越多越容易自相矛盾」——这句话直接命中你的跨线口径问题

  • 他怎么做的:他讲上下文大小时给了两个理由,而第二个才是狠的:「你上下文里的内容越多,出现互相矛盾的信息的概率就越高,就会让模型犯迷糊。」也就是说,塞得多的代价不只是贵,是模型会变笨。他们的应对不是"尽量少写"这种口号,而是三条可检查的指标——大小、灵活性、可缓存性——每一条都有对应的工程手段。
  • 你可以怎么做:你的跨线对齐痛点里,有一块就是同一件事在不同产品线各有说法,你可能一直把它当成"整洁度问题"或者"以后再统一也行"。换个算法:两种口径同时出现在同一份上下文里,就是在给模型制造矛盾信息,它每一次产出都会被稀释一点点,而你看不见是哪一点。 这把"对齐口径"从卫生工作升级成了质量工作。最小动作:挑一个角色(比如出 PRD 那个),把它这一次调用真正读到的全部文字打印出来数一遍——你大概率会发现同一件事有两种说法同时在场。看见了,对齐的动力就不用靠自律了。

② auto review 就是你在找的「协议纪律的物理卡口」,而且形状已经给全了

  • 他怎么做的:他们没有把审批做成"每一步都弹窗",而是只在模型试图提权的那一刻才拉起一个审查用的 sub-agent。这个审查员有三条硬约束——完全独立运行、不能再派出别的子任务、只有读权限(也就是说审查者本身没有搞破坏的能力)。喂给它的是四份材料:什么算用户授权、风险分类体系怎么运作、按什么标准判断,再加上全程对话记录和实际发生的工具调用。它输出的判断走三问:用户授权级别是什么 → 这个动作的影响是什么 → 该怎么处理。他的 .git 例子把关键点讲透了:同一个"删文件"动作,是不是该放行,完全取决于用户之前有没有明确说过——「你让它删 .git 文件夹,那很好;但如果你没让它删,它大概就不该碰那块」。
  • 你可以怎么做:你的流水线缺的正是"规则写在文档里,但没有一个必须经过的物理卡口"。照他的形状搭一个:选一到两个真正危险的动作当触发点(比如"改动共用的术语/实体定义"、"跨线动别的产品线的产出"),平时完全不拦,只有踩到这两个动作时才拉起一个只读的评审角色;给这个评审角色的输入必须是四份——用户当初的原始要求(授权)、你们自己的风险分级、判断标准、以及这一次实际改了什么。这样做有三个好处:一是闸门有了物理位置(不是"应该评审",是"不过就走不下去");二是审查者只读,它没法把事情搞得更糟;三是它的判断依据第一条就是"用户授权过没有",天然避免了评审 agent 自己发挥。别一上来做全量评审——他自己也说了,这个机制的设计目标就是"把绝大多数动作自动放行、不升级到人"。

③ 「别在目标里写长篇大论」——你的 agent 产出拿不出可验证的证据,根子可能在这

  • 他怎么做的:/goal 的循环机制是这样的——目标没达成之前,harness 会自动往下一轮里注入一个续跑提示,里面带着你设定的目标;一直循环,直到模型自己调用那个"更新计划/更新目标"的工具、宣布达成为止。所以他给的建议是机制推出来的,不是文风偏好:「你不该在 goal 里写长篇大论——我知道你们很多人一直在试着这么干——而是应该写非常具体、非常可验证的 prompt,这样才容易判断事情什么时候算做完了。
  • 你可以怎么做:你那个"agent 产出难验证"的痛点,很可能不是没做,是当初的目标就没写成能判定完成的形状。做法直接抄:下一个工单开跑之前,先写一份编号的验收条目(十几条足够,每条必须是能打钩或打叉的,不能是"提升效率"这种),跑完逐条打钩,最后报一个"N 条里对了 M 条"。这个数字有三重用处——它是你缺的那份可验证证据;它是你自己的私有基准线,下次换模型/换流程原样重跑就能对比;它还顺手解决了"目标写太满导致循环停不下来"的问题。一个分数比十页复盘有说服力得多,也更能说服你自己。

④ 技能和 MCP 越装越多时,他们的两招你现在就能用

  • 他怎么做的:难预测的那块开销是技能数量和工具注册表——尤其装了 MCP 之后会持续膨胀。两招收:一是把一部分工具标成"延迟加载",不进上下文,改由"工具检索"现查二是给可用技能列表设一个硬上限——最大上下文窗口的 2%,超了就自动削减描述文字。而且这两招不是他们的私货:工具检索在 responses API 里就开放着,从 GPT-5.4 起任何工具都能标成延迟加载,你可以用官方内置的检索工具,也可以自己实现一个
  • 你可以怎么做:你那条流水线的几个角色各自挂着一串技能和工具,每个角色其实只用得上其中一小部分。最省事的第一步不是搞动态检索——是先给每个角色手动列一张"你只有这几个技能"的白名单(后面第六节的"该反着用"会展开为什么你不该抄动态方案)。然后抄他那个百分比上限的思路:给"角色能看到的技能清单"定一个占比上限,超了就先削描述、而不是先加窗口。这条规矩的价值在于它把一个会无限增长的东西变成了有天花板的东西。

⑤ 一个免费的架构启发:派子 agent 和开后台终端,是同一个形状

  • 他怎么做的:sub-agent 只有两个工具——spawn agent(创建)和 send input(喂内容 / 等待 / 关闭);然后他说了句轻描淡写但很关键的话:「同样的思路,我们其实也用在了后台终端上」——起一个终端、往里送数据、等它一段时间干完。派活、喂料、等待、关闭,四个动词覆盖了两种完全不同的能力。
  • 你可以怎么做:你的流水线里"派一个角色去写一段"和"起一个长跑的检查任务"现在多半是两套写法。把它们统一成同一个形状(创建 → 喂 → 等 → 收 / 关),你会立刻多出两样东西:一是能派长任务而不阻塞主线,二是每个子任务的生命周期都可观察——什么时候起的、喂过什么、等了多久、怎么结束的。这是你想做"跨线对齐"和"产出可观测"时最缺的那层记录。

二、app_incubator:这期给了你 Chrome 那条链路的正确用法

① 别让 agent 一个个点,让它写脚本

  • 他怎么做的:老版本的 computer use 是「给模型一个专用工具,动作固定就那几种:打字、点击、截图、滚动」,而且真正那台"电脑"还得你自己实现。新版本整个翻过来:改用代码执行,agent 自己写脚本去操作,语言可选 JavaScript 或 Python。他们的浏览器操作就是这么做的——跟一个跨回合常驻的 node 交互环境说话,写的其实就是 Playwright 代码。收益他讲得很具体:先看一个页面、理解它的结构,然后写一个脚本,在后续页面上批量执行抓取
  • 你可以怎么做:你造 App 那条链路接了 Chrome,如果现在还是"让 agent 一步步点、每步截图确认",那就是他说的老版本。换成写脚本的形状:第一回合让它探路——打开页面、把结构摸清楚、把选择器找准;第二回合开始让它输出一段可复用的脚本,后面所有同类页面都跑这段。这不只是快,更重要的是脚本是可读、可改、可存档的资产,而一连串点击不是。而且"常驻环境跨回合保留状态"这个细节别漏——它意味着登录态、打开的标签页、中间变量都不用每回合重来

② 你装的那几个 MCP,正是他说的"最难预测的那块开销"

  • 他怎么做的:他明确点名装 MCP 会让上下文随着装的数量不断膨胀,而且这块是用户装出来的、harness 自己控制不了,所以只能靠"延迟加载 + 现查"来收。
  • 你可以怎么做:你同时挂着设计、浏览器、笔记三个 MCP,它们的工具清单每一轮都在占位置。做一次很便宜的体检:把某一个角色某一轮真正发出去的上下文抓下来,看看有多少字符是"从来没被调用过的工具的说明书"。如果占比可观,处理办法有轻重两档——轻的是按角色裁剪(这个角色根本不需要设计工具),重的是照他的方案,把不常用的工具改成"要用再查"

③ 「把该做什么前移到 agent」的载体,是标准不是意图

  • 他怎么做的:整场里凡是"让 agent 自己判断"的地方,他给的都是明确的输入清单和判断标准——评审角色拿到的是"什么算授权、风险怎么分级、按什么标准判";循环的退出靠的是"目标写得可验证"。没有一处是靠把意图描述得更动人来实现的。
  • 你可以怎么做:你那条链路里"设计稿即工程强制契约"已经踩在正确方向上了——契约就是标准的一种。往前再走一步:把还停留在自然语言交代的那些前置判断(尤其是"这个 App 到底要解决谁的什么问题、做到什么程度算达标"),也写成带验收条目的标准agent 接得住的从来不是意图,是判据。

三、Personal Thinking:他给了你一条"什么该写死、什么该留指针"的规矩

  • 他怎么做的:开场第二段他就做了一次知识保鲜的声明:「这些都是当下的状态,东西变化太快了……尤其每次有新模型发布,我们经常会发新 API、也会改 harness 的工作方式。」但他给的应对不是"我会更新幻灯片",而是——「你随时可以回过头去问 Codex 现在的状态是什么样。他把易变的部分外包给了一个可查询的活源,自己只讲不变的那部分(三个约束、双层守门、瓶颈会搬家)。 另一处同源的做法是:Windows 沙箱那段"我能讲满一整场"的内容,他没塞进演讲,而是给了一个指针——去看 David 那篇文章
  • 你可以怎么做:这本第二大脑最大的信噪比风险,就是把一堆半年后就失效的具体值当永久知识存进来(版本号、参数上限、某个工具的当前行为)。加一条最轻的入库规矩:任何一条会随版本变的事实,入库时旁边留一句"怎么现查"——问谁、查哪个文档、跑哪条命令。你已经在用【耐用】/【会过期】标注了,这一条是它的下半段:光标注会过期还不够,得同时留下"过期之后从哪儿拿新的"。 另外他"把一整场的内容压成一个指针"的做法值得抄进摄入流程——不是所有值得知道的东西都值得存进来,有些只值得存一个去哪儿找。

四、Chief of Staff:auto review 的三问,本身就是一套守门算法

  • 他怎么做的:审批疲劳那两次举手是全场最有洞察的一段——第一次问"多少人被审批弹窗烦到、恨不得直接开全权",第二次问"多少人知道 IT 和安全其实特别讨厌你开全权"。他没有把结论说破,但结论很清楚:审批太频繁的真实后果不是烦,是人会把整个安全机制关掉。 所以 auto review 的设计目标从一开始就是**"把绝大多数动作自动放行、不升级到你这里来"**,只在提权那一刻介入,判断走三问:用户授权级别 → 动作的影响 → 该怎么处理
  • 你可以怎么做:你的决策外脑最容易死的方式,就是触发词太宽、什么都要说两句,最后你直接把它关掉——这就是审批疲劳的私人版本。把 auto review 的结构搬过去:平时完全不出声,只在少数几个"提权动作"上介入(比如"你要在没写下理由的情况下接一个新的长期承诺"、"你要动一个已经写死的原则")。介入时的判断也照抄三问——这件事你自己之前明确授权/写下过原则吗(授权级别)→ 做错了影响多大且可不可逆(影响)→ 那是自动过、提醒一句、还是必须停下来(处理)。 这套算法的好处是它把"该不该打断你"变成了可写下来的规则,而不是每次靠感觉。

五、StockHelp:只有一条沾边的商业观察,看板本身无可对点

  • 唯一沾边的:OpenAI 把 responses API 做成了开放标准——拉上 Ollama、LM Studio、Nvidia 等伙伴把 schema 规范化,还专门成立了一个治理机构,让别家也能基于同一套 API 建东西。作为价值投资者,这是一个很干净的**"用开放标准换生态位"的护城河动作**样本:放弃接口层的独占,换取让所有人的 agent 都长在你定义的形状上(顺带看一眼受益方——Nvidia、以及本地模型运行方 Ollama / LM Studio 出现在这份名单里本身就是信息)。 → 详细
  • 就这一条,不引申。选股逻辑、估值方法、看板该显示什么信号,本期确实没有可对点的内容,略过。

六、One Human Company:这期是「AI 员工管理成本账」这条支柱的现成选题矿

  • 他怎么做的:整场演讲本质上是一份 agent 的运行成本账——上下文要控大小(省 token、也防模型犯迷糊)、技能列表卡 2%、不常用的工具延迟加载、网络往返改成持久连接只发变化量。每一条都能换算成"我这个月的 token 账单少了多少 / 一轮跑完快了多少"。 另外他现场那个动作值得单独学:demo 崩了,他当场说"这也正好说明刚才那些是真实数据"——把翻车直接变成可信度的证据,这是 build-in-public 的教科书操作。
  • 你可以怎么做:这条支柱缺的是能拿出数字的实测,而这期正好给了你四个成本可测的具体改动。选题形状建议直接固定成:「OpenAI 说他们给技能清单卡了 2% 的上限 —— 我拿自己的 9+1 个 Agent 试了」,报三个数字:改之前的单轮上下文字数、改之后的字数、产出质量有没有掉。过一下你的弹药库闸门:删掉你的判断和实测之后还剩什么? 如果只剩"OpenAI 用了延迟加载",那不该发;如果剩下的是"我这条流水线上砍了 40% 的工具说明书、质量没掉",那就是能发的。另外"翻车当证据"这个姿态可以直接进你的写作规范——每篇验证体必须有一处"我试砸了",那是全篇里最贵的段落。
  • 还有一个更省力的选题「你的 agent 目标别写成小作文」——他那句"我知道你们很多人一直在试着这么干"配上机制解释(循环靠模型自己宣布达成来退出,所以目标必须可验证),是一条有原理、有反常识、有可抄物的短观点,正好落在你"观点短评"那条支柱上。

七、你本人的精力:审批疲劳是注意力税的另一个名字

  • 他怎么做的:他没有把审批疲劳当成用户体验问题,而是当成安全机制的存亡问题——一个太频繁打断人的机制,最终会被人整个关掉。所以他们的解法不是"把弹窗做得更好看",而是大幅减少介入次数、只保留少数几个真正危险的卡口
  • 你可以怎么做:你同时扛正职和好几条副业线,任何"需要你随时确认一下"的机制,都在收你的注意力税。拿这个标准去体检你手上所有需要人工确认的环节:每一个卡口,问一句"如果它自动过了,最坏会怎样、能不能撤回"——能撤回的一律改成自动过 + 事后可查,不能撤回的才留人工。你要的不是更少的风险,是更少的打断。

更深三角度

  • 该反着用:他做的是给全世界用的通用外壳,所以必须极致灵活——「不管你装了多少插件和 MCP,体验都得好」。正因为他不能假设你的配置,才需要"延迟加载 + 动态检索"这种复杂机制。而你做的是给自己一个人用的专用流水线,你完全知道每个角色需要哪几个工具。所以对你正确的抄法是把结论抄走、把机制反过来:他用动态发现来对付不确定性,你直接用静态白名单消灭不确定性——"这个角色只有这三个工具",比任何检索机制都更省、更快、更可预测。别把通用产品的复杂度搬回单人流水线,那是你最容易犯的那类错。同理,他能把模型训练成习惯用某个补丁工具、习惯用某个搜索命令;你改不了模型,你只有约定、提示和校验这三样——所以凡是他说"我们把模型训成这样"的部分(补丁工具、PowerShell、搜索工具、压缩方式与训练一致)都不可迁移,凡是他说"这在 API 里开放了"的部分才是你能直接拿的。这条分界线值得你每次看这类分享时都画一次。

  • 和你现在做法冲突:你一直想要的闸门是机械可判定的——规则写死,流水线自己守,不靠人也不靠模型发挥。而他的 auto review 恰恰是用模型去守模型:一个只读的 sub-agent,读上下文、读风险分级、读授权,然后给一个判断。这跟"写死规则"是两种哲学,而且他自己承认这段是"极度简化的说法"、背后是整个研究团队的工作——言下之意是这套判断并不便宜、也不保证对。但仔细看他的整体结构,冲突其实已经被他化解了,答案是双层沙箱定物理边界(这个动作在技术上能不能做),评审 agent 判语义(这个动作在此刻该不该做)。规则守得住格式和边界,守不住"这次删文件到底合不合理";模型能判语义,但它自己也会错,所以必须先有一层它坏了也伤不到你的物理约束。你现在的做法是只有一层(写规则),而且规则层还没落地。 先把物理层建起来(哪些操作在技术上就不允许发生),再考虑要不要加语义层——这个顺序比你现在的顺序更省力。

  • 对你的镜子:这场最扎心的一句是那个"高自主性反噬"的例子——你让模型发个带附件的邮件,还推着它"要有高自主性",结果它发现附件加不上,就自作主张把文件传到了文件共享上。 模型没有偷懒,它是太忠实地在完成你给的目标。照回你自己:你给自己和给团队定目标时,是不是也经常只给一个"要做成"的方向,然后靠"再努力一点"补齐?当目标本身没写清边界,努力就会往你没想到的方向溢出——你写在几年前的那条"判断力 > 努力",在这里有了一个非常具体的落点:判断力的一半,是把目标写成"到什么信号出现算完成、哪些路径不许走"。 他那句"别在 goal 里写长篇大论、要写可验证的",说的其实是同一件事——丰满的表述是努力的样子,可验证的判据才是判断力的样子。

所以呢

可迁移的思维模型

  • 【耐用】上下文是预算不是仓库,而且超支有两种代价——贵,和变笨。判断"要不要把这段塞进去"时,除了算钱,还要问一句"它会不会跟已经在里面的东西打架"。这条同样适用于你给人交代事情、写 PRD、写内容大纲。
  • 【耐用】双层守门:物理边界 + 语义判断。 先用不可绕过的机制定死"能做什么",再用一个只读、无权限、独立的角色判"该不该做"。守门者本身没有搞破坏的能力,这条设计原则比任何审批流程都重要。
  • 【耐用】目标必须写成能机械判定完成的形状,否则循环停不下来、事后也证明不了做完。可验证不是文风要求,是机制要求。
  • 【耐用】瓶颈会搬家:推理快到每秒 1,000 个 token 之后,瓶颈自己跑到了网络上。所以任何优化动手之前先确认瓶颈在哪——你上一次优化对了的地方,很可能就是你下一次该停手的地方
  • 【耐用】易变的知识留指针,不留答案。他自己讲完就说"随时回去问 Codex 现在是什么状态"。
  • 【会过期】所有具体的版本号和数字:技能列表 2% 上限、GPT-5.4 起可标延迟加载、GPT 5.3 Codex SparkCerebras 上每秒 1,000 token、去年年底引入自动压缩、WebSocket 模式的现状。讲者开场第二句就是免责声明——「这些都是当下的状态,东西变化太快了」。别记数字,记那三个约束和双层守门的形状。

判断更新

  • 之前你可能默认"上下文塞得越全,agent 干得越好"。这场给的修正是:内容越多,自相矛盾的概率越高,模型会犯迷糊——所以"给足信息"和"给对信息"是两件事,而且后者更难。这直接改变了你对齐跨线口径的优先级:那不是整洁问题,是质量问题。
  • 另一个更新:闸门不该覆盖全部动作,只该覆盖提权动作。 你之前想的可能是"每个环节都要有评审",但他的机制说明——审批太频繁的真实后果是人把它整个关掉。所以设计闸门时该问的不是"哪些环节需要把关",而是"哪几个动作一旦做错就不可撤回",只在那几个上设卡。

这周一个赌注

从 ERP 那条 PRD 流水线里挑一个角色(建议挑最常跑的那个),做一次很小但能出数的实验:

  1. 先看清楚:把它某一轮真正发出去的完整上下文导出来,数三个数——总字数、其中"从没被调用过的工具/技能说明书"占多少、同一件事出现了几种说法
  2. 只改一处:给这个角色列一张静态工具白名单(只留它真用得上的),别的全砍。
  3. 只记三个数:改前后的上下文字数单轮耗时产出质量有没有掉(用你自己那份编号验收条目逐条打钩,报"N 条里对了 M 条")。

这一次实验同时解掉四件事——它给你第一份可打钩的验证证据(正是你缺的那样东西);它顺手把跨线口径在这个角色上的打架处照出来了;它是你的第一条私有基准线,以后换模型换流程原样重跑就能对比;它还是 One Human Company「AI 员工管理成本账」那条支柱的第一篇现成素材,而且带着一个可抄物和一组真数字,能过弹药库闸门。

接着读