Simon Willison 最近记录了一次 Claude Fable 5 的调试过程。
问题很小:Datasette Agent 的聊天输入框里,多了一条不该出现的横向滚动条。用户给 Fable 的输入也很少:一张截图,再加一句“看依赖,帮我找原因”。
反常点在后面。
Fable 没有停在读代码和猜 CSS。它开始运行本地开发服务器,打开真实浏览器,写临时 HTML,用 PyObjC/Quartz 找 Safari 窗口,再用 screencapture 截图。它还改了模板,注入 JavaScript,让页面自动触发 / 快捷键打开弹窗。
一个两行 CSS bug,被它查成了一套真实浏览器实验。
这个案例的重点,是它自己找路
这不是 Anthropic 的发布,也不是官方 demo。它只是 Simon Willison 的个人使用记录。也正因为如此,它比剪好的演示更有参考价值。
用户没有明确要求“自动化浏览器”。Fable 自己判断:只看源码不够,要进真实环境复现。
| 环节 | Fable 做了什么 | 说明了什么 |
|---|---|---|
| 复现问题 | 运行本地开发服务器,尝试 Playwright、Firefox、WebKit | 它把 bug 当成环境问题处理,不只读代码 |
| 获取画面 | 打开真实 Safari,用 PyObjC/Quartz 找窗口编号,再用 screencapture 截图 | 常规自动化不顺时,会绕到系统工具 |
| 触发弹窗 | 修改 Datasette 模板,注入 JS,页面加载后模拟 / 快捷键 | 没有直接操作入口,就改页面入口 |
| 收集数据 | 写 Python CORS 服务,让页面 POST 测量 JSON 到本地文件 | 它能自建本地回传通道 |
| 定位组件 | 穿透 Web Component 的 shadow DOM 找 textarea | 它不是靠猜,是真测布局数据 |
中途 Fable 似乎碰到某个不可见限制,降级到了 Opus。Opus 沿用上下文,继续验证,最后找到并确认两行 CSS 修复。
结果很小,路径很长。
这正是它有意思的地方。Fable 展示的不是单点代码能力,而是把终端、浏览器、系统 API、临时代码和页面注入串起来的能力。它像一个会自己搭实验台的调试助理。
对写前端、用 Claude Code、Cursor、Codex 的开发者来说,这类能力很有用。尤其是那些“代码看着对,浏览器就是不对”的问题,agent 能省掉大量机械试错。
但同一件事也把风险照得很清楚:它越会自己找路,权限边界就越不能含糊。
危险不在修 bug,在它拿着你的终端权限
我不太买账那种单纯惊叹“AI 会自己修 bug 了”的说法。这个阶段已经过去了。
更关键的问题是:未沙箱化的 coding agent,能做多少你在终端里能做的事。
它不等于远控软件。不要夸大。Fable 这次主要是通过命令行、系统工具、脚本、模板修改和本地服务,绕出了一条自动化路径。
但这已经足够敏感。
它为了调试,可以写 Python CORS 服务收集页面测量数据。换一个输入环境,如果遇到 prompt injection 或恶意依赖说明,同样的行动链也可能变成读文件、打包、发请求、改配置、删数据。
原记录里没有发生泄露,也没有攻击事故。这里只能说风险轮廓已经出现。
“工欲善其事,必先利其器。”问题是,利器不会判断自己该不该出鞘。它只会沿着目标推进。
这就是主动型 agent 的两面。
正常任务里,它叫工程创造力。恶意输入里,它就是放大器。越聪明,越会绕路;越会绕路,越不能靠一句“它应该不会乱来”管理。
开发者最该改的,不是立刻停用工具,而是换一种使用姿势:
- 不要在主目录、生产凭据目录里裸跑 agent。
- 给每个项目建隔离工作区,必要时用容器或临时 VM。
- API key、SSH key、云厂商凭据默认不进 agent 可读目录。
- 网络访问默认收紧;需要外联时再放行。
- 高风险命令要审批,比如删除、移动大量文件、安装脚本、上传数据、改 shell 配置。
- 保留命令日志和文件 diff,不要只看最终答案。
企业团队更现实。采购或推广这类工具时,别只问“代码通过率”。要问四件事:文件系统怎么隔离,网络怎么管,命令怎么批,日志怎么追。
如果这些回答不上来,最好先把使用范围压在低风险仓库、样例项目、只读代码审查里。别一上来就接生产库、内部平台和带真实凭据的开发机。
沙箱会拖慢一点,但不设沙箱会更贵
很多团队对 coding agent 的治理还停在“别让它乱改重要文件”。这不够。
文件只是一个入口。网络、环境变量、浏览器会话、本地服务、构建脚本,都是入口。Fable 这次能通过 CORS 服务回收页面数据,恰好说明 agent 不一定要直接“偷文件”,它可以自己搭通道。
这不是说 Fable 做错了。相反,这次调试很漂亮。
一个前端滚动条问题,如果人手慢慢查浏览器差异、Web Component、shadow DOM、布局尺寸,也会耗时间。Fable 把这些杂活串起来,效率确实高。
分水岭也在这里。
工具越有效,越容易被默认放权。效率先到账,治理晚结算。铁路、电力、互联网平台都经历过类似阶段:新能力先冲出去,制度跟在事故后面补。不完全一样,但利益节奏很像。
对团队来说,接下来最该看三件事。
| 要看的变量 | 为什么重要 | 可以接受的最低线 |
|---|---|---|
| 默认沙箱 | 决定 agent 能碰到哪些文件和凭据 | 项目级隔离,不默认读全盘 |
| 网络权限 | 决定本地数据能否被外发 | 默认限制外联,白名单放行 |
| 审批与日志 | 决定出事后能否还原路径 | 高风险命令确认,操作可追踪 |
这三项比“又强了多少”更影响落地。
个人开发者可以容忍一点麻烦。比如把 agent 放进容器,只挂载当前仓库;把敏感配置放到容器外;让它改代码,但安装依赖、跑远程脚本、发网络请求前必须确认。
团队更不能偷懒。内部规范要写清楚:哪些仓库能用,哪些目录只读,哪些命令必须人工批准,哪些输出不能发给模型。否则 agent 的每一次“主动帮忙”,都可能变成审计黑洞。
那个滚动条已经被修掉了。
真正还没修好的,是我们给 coding agent 设边界的方式。模型越像能干的同事,就越该按同事管理:给权限,留记录,分环境,出事能追责。
