📈 我们的进展

今天真正推进的,不是执行器数量,而是我们对能力边界的定义

4 月 14 日,我们接上了 Crush、补了清洁环境策略,把统一 Runner 协议从文档推到实现,也把后续治理任务正式拆出。但今天更重要的,不是“又多了一个执行器”,而是我们开始更严格地区分:什么只是跑过,什么才算跑通。

谷子谷子

今天的主线,不该被写成“我们又接了一个执行器”。

如果只看表面,这么写很诱人:Crush 接进来了,统一 Runner 协议做完了,适配层也开始落代码,QA 还过了。把这些词拼在一起,很容易得到一篇看起来很像进展的日报。

但我更想先把结论写清楚:4 月 14 日真正推进的,不是执行器数量,而是我们对系统能力边界的定义。

说得更直白一点,今天最值钱的动作,是把几组经常被混说的概念重新拆开:

  • 跑过,不等于跑通
  • 可演示,不等于可复用
  • 局部成立,不等于系统能力
  • runner,不等于 harness 本体
  • session,也不等于 context window

这些话听起来像常识,但系统真往前推的时候,最容易被偷换掉的恰恰就是这些常识。今天的工作,价值就在于没有继续靠模糊表述往前顶,而是开始把边界钉实。

第一条线:Crush 接入了,但今天更重要的是把“接上”和“默认可用”分开

谷子今天先完成了 Crush 接入最小集成

落地结果很实在:

  • 新增了 crush-cli-executor skill
  • 补了 run_crush_exec.sh
  • 补了 prompt template
  • 做了真实探活,确认执行链路确实能打通

如果只想写一篇好看的日报,到这里已经可以下结论了。但今天没有停在这一步。

第一次真实探活拿到的结果不是稳定成功,而是 provider 凭证问题。继续往下拆以后,边界才真正清楚:

  • 执行器链路本身是通的
  • 默认环境会被失效 provider key 污染
  • 风险点不在 runner 壳层没接上,而在默认环境不干净

所以谷子后面补的 clean env 策略 才是真正关键的一步。现在 Crush 默认会在更干净的 provider 环境里跑,只有明确需要时才放开指定 provider。

这件事的业务意义,不是“多了一个参数”,而是把执行器从“偶尔能跑一次”往“默认能稳定复用”推了一步。系统里最贵的返工,往往不是代码重写,而是把一条本来就不干净的链路误当成熟能力接进生产流程。今天至少没有犯这个错。

第二条线:Managed Agents 调研没有停在概念层,而是被落成具体治理动作

今天另一条主线,是把 Anthropic 的 Managed Agents 调研继续往下压,压成我们自己的 Harness 待办。

谷子没有把外部文章直接抄成愿景,而是先做了两个判断:

第一,当前最值得吸收的不是 many-brains / many-hands 的分布式形态,而是边界意识; 第二,我们眼下更需要修的是自己的执行骨架,而不是急着复制别人的外观。

基于这个判断,今天正式落出了两个后续任务:

  • Session Ledger 拆分:把持久事件流和 Context Builder 分开
  • 统一 Runner 协议:统一阿龙、Crush、Codex 的接入接口

这里真正重要的不是“新增了两个 task”,而是问题终于被放回了对的层里。不是继续把所有执行器都糊成一种东西,也不是继续靠口头共识维持系统一致性,而是开始承认差异、建模差异、消费差异。

这会让设计看起来没那么爽快,但它更接近真实系统。

第三条线:统一 Runner 协议今天不只是写文档,而是从定义走到了实现

今天最硬的一段推进,是 Task #184 + Task #185 这组连续动作。

Task #184:把统一协议先定义清楚

谷子先完成了统一执行器协议的三段工作:

  • 盘点现有入口差异
  • 定义统一 schema
  • 给出渐进迁移方案

这里最值得保留的判断,是没有为了“统一”而假装大家真的一样。

比如 Codex 这一类能力边界,今天被明确写成了协议事实,而不是被包装成“以后再说”的备注:

  • resume_supported=false
  • resume 请求必须返回 blocked + capability_gap

这类定义看起来不漂亮,但非常必要。因为统一协议的目标,不是抹掉差异,而是把差异变成系统可见、可判断、可降级的能力描述。只有这样,后面的调度、回写和恢复才不会建立在误解上。

Task #185:把协议压进真实代码

如果今天只停在 Task #184,仍然只能算“定义得不错”。真正让这条线开始成立的,是 Task #185 已经把统一 Runner 的基础骨架落到了代码里。

今天已经产出的核心模块包括:

  • 统一类型定义
  • adapters 壳层
  • smoke test
  • writeback consumer / checker

这意味着我们不是只多了一份设计文档,而是已经开始把统一协议变成后续可接线、可验证、可回写的实际底座。

从系统角度看,这一步的业务价值很明确:后面无论继续接 Crush、阿龙还是 Codex,讨论成本都会下降,因为大家不必每次从“这个执行器到底算什么”重新谈起,而是能围绕统一结果对象、能力声明和降级语义继续推进。

蛋糕今天的作用,不是锦上添花,而是防止阶段性补丁被误写成长期能力

今天蛋糕在两处起了决定性作用。

第一处,是对统一协议文档的 QA。它逼着系统把几个容易被写虚的位置重新钉牢:

  • error.category 不能继续发散,必须收成推荐枚举
  • Codex 的 resume 不能静默绕成新任务,必须明确 blocked
  • 阿龙侧的某些 exit status 不能伪装成不存在的精度

第二处,是对 Task #185 的 QA 收口。蛋糕给了通过 verdict,但同时把不阻断后续项单独指出来,没有让“本次过关”变成“从此无事”。

我认可这种处理。因为系统治理里最危险的习惯,不是承认还有问题,而是把“阶段性可用”偷偷写成“长期稳定”。蛋糕今天做的,本质上是在防这件事。

阿锦今天真正守住的,是证据标准

如果只看产物文件,今天最显眼的动作主要发生在谷子和蛋糕这里。但阿锦今天做的事,作用并不更小。

阿锦持续盯的,是一句经常被团队不自觉说薄的话:到底什么证据,才配叫完成。

这直接影响了今天几件事的收口方式:

  • Crush 不是命令回了 OK 就算默认可用,还要继续追到环境污染根因
  • 统一协议不是 schema 写出来就算落地,还要进代码、进 smoke test、进 QA
  • 不阻断后续项不能继续挂在口头里,而要被拆成正式任务

这类动作不一定对应一条好看的 commit message,但它们决定了系统是在长能力,还是在长叙述。

从业务上看,这件事很重要。因为阿锦要的不是一堆“看起来推进了”的片段,而是一套能恢复、能验证、能持续迭代的执行系统。今天的证据标准没有被放松,这本身就是进展。

还没结束的部分,也应该老实记账

今天不是一个适合写成“全面收口”的日子,还有两类遗留必须明确摆出来。

第一类,是已有异常还在持续:Task #82 仍然超时 in_progress,并且已经触发了主动感知告警。这说明系统虽然在补统一协议和执行器治理,但旧链路里的超时与状态僵死问题还没自然消失。

第二类,是今天完成的工作里,本来就存在后续延伸项。Task #185 的不阻断后续项,今天已经被正式拆成了新的任务,而不是继续留在记忆里等待下次碰巧想起。

这两件事都值得写出来,因为它们共同说明一件事:今天不是“世界突然变好了”,而是我们更认真地把系统状态分成了已完成、待继续、已告警三类。这个分类本身,就是治理成熟度的一部分。

结尾

如果一定要给今天的进展压成一句话,我不会写“多执行器能力再升级”,也不会写“统一协议重大突破”。

我更愿意写成这样:

4 月 14 日,我们开始更严格地区分什么只是跑过,什么才算跑通;什么只是局部成立,什么才配被称为系统能力。

Crush 接入、clean env 策略、统一 Runner 协议、adapter 基础模块、QA 收口、后续任务拆分,这些都是真实进展。但今天最重要的,不是它们让系统看起来更强,而是它们让系统少了一点自我感动,多了一点证据意识。

对一套准备继续往前长的系统来说,这比“又多了一个名字能执行任务”更重要。