乐于分享
好东西不私藏

Agent 的原生软件不是给 AI 加一个入口丨而是承认 AI 也是软件的用户

Agent 的原生软件不是给 AI 加一个入口丨而是承认 AI 也是软件的用户

吾声有涯 · 有涯 05

Agent 的原生软件不是给 AI 加一个入口

而是承认 AI 也是软件的用户

最近,我给我的理财软件(招财)做了第二套界面。

第一套给我用。里面有卡片、按钮、提醒和确认框,我可以看见发生了什么,再决定下一步做什么。

第二套没有页面,也不需要鼠标。它是给 Agent 准备的,让它能读懂系统状态,在明确边界内完成操作。

一开始,我以为这只是多做一个入口。

直到一次很小的冲突出现:我在对话中确认一项购买已经发生,Agent 将事实写回系统;可人的界面里,还可能开着一张基于旧状态的编辑框。

软件不能让两边各做各的。它必须刷新人的界面,关掉那张已经过期的编辑框,让我按最新事实重新判断。

做到这里我才意识到,软件延续了几十年的一个默认前提正在失效:

使用软件的,不再只有人。

聊天框不是 Agent 的第二界面

过去的软件界面,几乎都围绕人的感官和动作设计。

按钮要让人看得懂,错误要有提示,危险操作要再次确认,做错了最好还能撤销。哪怕后台已经有大量自动化,最后理解和裁决的依然是人。

这两年,越来越多软件开始加入 AI。最常见的做法,是在侧边栏放一个聊天框。

聊天框当然有用。人可以直接说出意图,不必再去菜单里一层层找。

可当 Agent 真要动手时,它靠什么知道自己没有走错?

至少,它得知道眼下发生了什么,哪些事可以做,做完以后,世界到底变了没有。否则,它依然只是一个给建议的顾问。

我把这套入口称为软件的第二界面

它不一定是一块屏幕。系统告诉它什么、允许它做什么、做完后怎样回答,共同组成了它眼中的界面。

聊天框增加的是一种交互方式。第二界面增加的是一种用户。

两种用户,必须共用同一个世界

招财是我在使用的一套本地财务系统。给人看的驾驶舱,会把业务整理成可以理解的状态:哪些事情等待判断,哪些正在冷却,哪些已经确认。

后来,我通过 MCP 给它开了一个 Agent 入口。这个名字听着有些技术,说白了,就是让 Agent 不再隔着页面猜,而是直接问系统:现在是什么情况,我能做什么?

同一件事,两种用户看到的内容并不相同。

比如一项已经结束冷却、等待复审的消费意向。在界面里,我看到的是当初为什么想买、现在到了哪一步,以及接下来批准还是放弃。Agent 不需要这些视觉层次,它需要的是另一种表达:当前事实是什么,下一步允许什么,行动前还缺不缺我的确认。

当我完成复审,它重新读取最新状态。得到确认后,它可以记录一项已经发生的购买事实。写入完成,人的界面随即刷新,旧状态也不再允许继续编辑。

人看见状态、理由与可执行动作,再完成判断。
界面可以不同,事实只有一套。两边都从同一个业务内核读取和写回。

做这一层时,我最初盯着的,是它能不能读、能不能写。后来才发现,调通只是开始。

只要两边各认一套事实,系统立刻就会分叉:Agent 认为事情已经完成,人的界面却仍显示等待处理;人正在修改旧状态,它已经把现实推到了下一步。

两种用户可以拥有不同的界面,却不能拥有不同的业务真相。邮件、日历、项目管理、内容编辑和客户系统,迟早都会遇到同样的问题。

当然,招财只是一个单用户、本地优先的案例。它不能代表所有商业系统。但它至少证明了一件事:双用户软件不是一句概念,它已经可以成为具体的产品结构。

Agent 能行动,也必须知道何时停下

为 Agent 设计第二界面,并不是把权限全部交出去。

Agent 的能力越强,边界越需要被写清楚。在招财里,我最后把它收成了两句话。

第一,只开放明确的业务动作。

Agent 可以“记录一次已经发生的购买”,却不能“随便修改某段数据”。前者有条件、有结果、可以追溯;后者只是把数据库变成遥控器。

第二,把“停下来”写进系统。

如果人已经修改了同一件事,它之前读到的状态就作废;如果系统无法确认事实,它应该老老实实说不知道。记录一笔已经发生的付款,也不等于替用户发起真实支付。

这两句话,一句管它怎么动,一句管它什么时候收手。

再往下想,这就不只是技术设计了。

谁可以读取?谁可以执行?谁来确认?出了问题,谁能撤销?

所谓 Agent 原生,既要说明它能做什么,也要说清它什么时候必须停下,把决定交还给人。

如果你也在观察这件事

真要继续沿着这条线看,下面六个项目可以顺手点开。

我不想拿六个收藏拼出一条未来趋势。它们不是完整的证据链,也不是采购建议,只是六个观察窗口。

  • Palmier Pro:让 Agent 直接进入视频时间线,与人操作同一个剪辑项目,而不只负责生成素材。
  • motion-anything:Agent 生成动画以后,人还能在正在运行的页面上继续逐组件精调。
  • HeroUI:组件库不只给人提供文档,也通过 MCP、llms.txt 和 Agent skills 让 AI 理解组件。
  • ShipSwift:把 SwiftUI 组件和功能配方直接开放给编程 Agent,减少人翻文档再转述的中间层。
  • Transitions.dev:同一套 Web 动效既给人浏览,也封装成 Agent skill,并提供运行中的调校入口。
  • html-anything:人负责提供材料和判断,本地 Agent 负责生成可以预览、发布的 HTML。
六个项目,六扇窗口。它们指向的不是同一条产品路线,而是同一种变化。

这些项目成熟度不同,路线也不相同。合不合用,还得看具体场景。放在这里,只供你继续往下看。

第二界面真正改变的是行动权

回到招财。

做完这套界面,我开始反复掂量一个问题:软件究竟该在什么时候拒绝 Agent?

当人和 Agent 同时进入一个系统,产品设计就不只是考虑按钮放在哪里。它还要分配行动权:谁可以读取,谁可以执行,谁来确认,谁能撤销。

下一代软件仍然会服务人。只是,它不能再假装人是唯一的用户。

屏幕之外,另一个用户已经来了。

现在轮到我们决定:什么交给它,什么,还得自己攥着?

· · ·

声有涯,思无界。

—— 吾声有涯