在我的上一篇帖子中,我写了如何将Forem的性能与维护工作迁移到基于OpenHands的自主循环之上。在一个月的时间里,这些循环提交了 351 个拉取请求,将 Rails 请求的平均耗时从 70ms 降到 16ms,也让我从充当仪表盘和终端之间的人肉剪贴板这一角色中解放了出来。
一旦脱离日常的执行循环,立刻就会引出一个不同的问题:当工厂已经自主运转起来之后,你究竟该如何看见它?
文本驱动的界面永远都会很强大。终端、提示框和 markdown 日志,本就是语言模型的工作方式以及开发者表达临时意图的方式所固有的。这些都不会消失。
奇怪的是,如今几乎所有围绕 AI 工具的 UI 都如此缺乏创意。我们拥有历史上最强大的软件生成引擎,而我们用来操作它们的几乎通用界面,却只是一个深色模式的聊天窗口,配上一个闪烁的光标和一面不断滚动的 JSON 工具调用之墙。
聊天框很适合用来对话。但它是一个糟糕的仪表盘,而且每个平台看起来都一模一样。
回滚缓冲区不是可观测性
在单个交互式会话中,你可以把整个世界的状态装进脑子里。你知道当前分支、所用模型,也知道某个测试为什么失败,因为你是看着文本流过去的。
可一旦你转向八个自主循环,每十分钟在相互隔离的 git worktree、三个前沿模型订阅以及数十个进行中的拉取请求之间触发一次,聊天回滚就崩溃了。要从一堆聊天记录里回答基本的运维问题,你就又变回了一个人肉路由器:
- Rust 循环停止开 PR,是因为候选任务用完了,是因为它的
WIP <= 1闸门已满,还是因为一个过期的.gitconfig.lock卡住了 worktree? - Claude Opus 5.5 是不是刚触发了速率限制冷却,而路由器是否干净利落地把下一个 tick 交给了 Gemini 4 Argon 或 GPT-6.1 Sol?
- 那个 PR
#24547是在它 10 分钟的 CI 检查中自我修复,还是已经在同一个失败的 spec 上耗掉了三轮修复?
如果你必须点开五个对话日志或运行四条 CLI 命令才能还原出那幅图景,那这个界面就是不合格的。好的可观测性不在于把所有日志都堆在某处,而在于把数据塑造成能让你在五秒内做出清晰决策的形态。
用这些工具来搭建仪表盘
平淡无奇的 AI 界面颇具讽刺意味:我们正盯着的这些工具,恰恰让构建更好的界面变得轻而易举。
我并不幻想自己花一个下午搭出来的仪表盘,能在一两年后与最好的专用 AI 可观测性产品相媲美。我们仍处在摸索管理自主软件的视觉语法的早期阶段,专用平台最终会解决这个问题。
在它们做到之前,你不必将就于千篇一律的默认界面。围绕你系统确切的操控点构建的定制界面,每次都会胜过一刀切的聊天外壳,而 AI 编程工具让你能以底层系统演进的速度来迭代这个界面。
为了不只是抱怨,我优先在构建各个循环的同时,也搭建了一个自定义控制中心。
自动化观测台
我弃用了默认的 OpenHands 主题和主页,换成了一个自定义的可观测性平台。我认为这是我能做的最起码的事,但维护工作本身的一部分就是随着时间推移改进工具,所以这是一项进行中的工作,我希望它能带来一些有创意的成果。它以 Schema v1 Canvas 扩展的形式打包,无需分叉核心应用即可在上游升级后继续使用。
每个区块都对应我在调优这座工厂时需要做出的一个具体决策:
1. 自主循环注册表。核心不再是最近的对话,而是一张 Airtable 风格的账本表格,展示全部九个工作流(perf-loop、rust-loop、error-loop、test-loop、deps-loop、issue-loop、github-pr-reviewer、pr-merge-loop、以及worktree-pruner)。每一行显示实时状态、运行节奏、WIP 上限和未关闭的 PR,并带有内联控件,可暂停、触发一次运行或固定某个模型提供商。
2. 前沿订阅余额与冷却时间。一张三列的表格追踪我们的模型路由器在 Gemini 4 Argon(agy-acp)、Claude Opus 5.5(claude-acp)和 GPT-6.1 Sol(codex-acp)之间的分布,显示运行分布、是否有任何提供商处于 8 小时冷却中,以及凭据刷新后的一键重置。
3. 开放 PR 签到雷达。每个自主 PR 都会按5 -> 10 -> 20 -> 40分钟指数退避计划被监视,以检查 CI 失败或审查评论。该雷达会列出该队列中的每个开放 PR、其当前退避步数、已尝试的修复轮次,以及距离下一次签到的实时倒计时。
4. 临时工作树卫生。底部账本跟踪隔离/data/worktrees/*检出目录的数量和存在时长、只读 Postgres 健康状态以及 Mac 桥接状态。当并行git gc运行留下孤立目录时,它会立即在这里显示出来,表现为工作树存在时长悄悄超过一小时。
为人类判断而设计
这些都不能替代文本。当我想探索一个信息流排序想法,或就四阶段 JavaScript 资产清理进行结对时,我仍然会点击“New Chat”或打开终端。
但将对话与监督分离,改变了整个系统的运行感受。好的界面会把操作噪音压缩到周边视野中。我可以在喝咖啡时瞥一眼 Almanac,看到八个循环都是绿色,注意到rust-loop被固定到 Argon,且有一个 PR 正在审查中,然后关掉标签页。
我们才刚刚触及智能体系统的人类界面应该是什么样子的表面。就目前而言,拥有能写代码的智能体,最好的部分是你不必等着别人来设计驾驶舱。
