
在使用编码代理时,一个关键的挑战是让他们既测试他们构建的内容,又向你作为主管演示该软件。这超出了自动化测试------我们需要展示他们进度并帮助我们准确了解代理生产的软件能够做什么的工件。
我刚刚发布了针对这个问题的两个新工具:Showboat 和 Rodney。
1、证明代码确实有效
我最近写过,软件工程师的工作不是写代码,而是*交付有效的代码*。其中很大一部分是向自己和他人证明我们负责的代码的行为符合预期。
当我们采用编码代理作为软件开发过程的核心部分时,这变得更加重要------也更加具有挑战性。
我们用代理产生的代码越多,减少我们需要花费的手动 QA 时间数量的工具就越有价值。
关于 StrongDM 软件工厂模式 最有趣的事情之一是,尽管他们的政策是"代码不得由人类审查",但他们如何确保他们的软件经过充分测试并提供价值。他们解决方案的一部分涉及通过运行"场景"来测试其软件的昂贵的 QA 代理群。这很迷人,但我不想在可以避免的情况下在 QA 机器人上花费数千美元!
我需要工具让代理能够清楚地向我展示他们的工作,同时尽量减少他们对自己所做的事情进行欺骗的机会。
2、Showboat:代理构建文档来演示他们的工作
Showboat 是我构建的帮助代理向我展示其工作的工具。
它是一个 CLI 工具(一个 Go 二进制文件,可选地包装在 Python 中以使其更易于安装),它帮助代理构建一个 Markdown 文档,准确演示他们新开发的代码可以做什么。
它不是为人类运行而设计的,但无论如何这是你会运行它的方式:
showboat init demo.md '如何使用 curl 和 jq'
showboat note demo.md "以下是如何一起使用 curl 和 jq 的方法。"
showboat exec demo.md bash 'curl -s https://api.github.com/repos/simonw/rodney | jq .description'
showboat note demo.md '以及 curl 标志,用于演示 image 命令:'
showboat image demo.md 'curl -o curl-logo.png https://curl.se/logo/curl-logo.png && echo curl-logo.png'
如果你在 VS Code 中打开它并预览 Markdown,结果是这样的:

一个 Gist 中的 demo.md 文件因此,一系列 showboat init、showboat note、showboat exec 和 showboat image 命令一次构建一个 Markdown 文档部分,其中 exec 命令的输出自动添加到文档中,直接跟在运行的命令后面。
image 命令有点特别------它在命令输出中查找图像的文件路径,并将该图像复制到当前文件夹并在文件中引用它。
基本上就是整个东西!还有一个 pop 命令,如果出现问题则删除最近添加的部分,一个 verify 命令重新运行文档并检查没有任何变化(我对这个设计并不完全信服),以及一个 extract 命令,用于逆向工程用于创建文档的 CLI 命令。
它非常简单------只有 172 行 Go 代码。
我使用我的 go-to-wheel 工具对其进行了打包,这意味着你可以像这样甚至不安装它就运行它:
uvx showboat --help
那个 --help 命令真的很重要:它旨在为使用工具的编码代理提供他们需要知道的一切 。这里是完整的帮助文本。
这意味着你可以打开 Claude Code 并告诉它:
运行 "uvx showboat --help" 然后使用 showboat 创建一个 demo.md 文档,描述你刚刚构建的功能
就是这样!--help 文本有点像一个技能。你的代理可以阅读帮助文本并使用 Showboat 的每个功能来创建一个文档,演示你需要演示的任何内容。
这里有一个有趣的技巧:如果你让 Claude Code 构建 Showboat 文档,你可以在 VS Code 中打开它,并在代理运行演示时实时观看预览窗格更新。这有点像让你的同事在屏幕共享会议中向你介绍他们最新的工作。
最后,一些例子。以下是我让 Claude 使用 Showboat 创建的文档,以帮助演示我在其他项目中正在处理的功能:
- shot-scraper:全面演示 运行我的 shot-scraper 浏览器自动化工具的完整功能套件,主要是为了练习
showboat image命令。 - sqlite-history-json CLI 演示 演示我为新的 sqlite-history-json Python 库添加的 CLI 功能。
- row-state-sql CLI 演示 展示我向同一项目添加的新
row-state-sql命令。 - 使用 Notes 进行更改分组 演示另一个功能,即同一事务中的更改组可以附加一个备注。
- krunsh:将 Shell 命令传递到临时 libkrun 微型虚拟机 是一个特别复杂的例子,我设法让 Claude Code for web 在 Claude gVisor 沙箱内的 QEMU 模拟 Linux 环境中运行 libkrun 微型虚拟机。
我现在经常使用 Showboat,足以说服我它的实用性。
我也看到代理作弊!由于演示文件是 Markdown,代理有时会直接编辑该文件而不是使用 Showboat,这可能导致命令输出不反映实际发生的情况。这里是关于这个问题的问题。
2、Rodney:配合Showboat的CLI 浏览器自动化
我参与的许多项目都涉及 Web 界面。代理经常为这些界面构建全新的页面,我希望在演示中看到这些内容。
Showboat 的图像功能旨在允许代理作为其演示的一部分捕获屏幕截图,最初使用我的 shot-scraper 工具 或 Playwright。
Showboat 格式受益于 CLI 实用程序。我寻找从 CLI 管理多轮浏览器会话的良好选项,但没有找到,所以我决定尝试构建一些新东西。
Claude Opus 4.6 指向了我 Rod 用于与 Chrome DevTools 协议交互的 Go 库。它很棒------它为使用自动化 Chrome 基本上可以做的所有事情提供了全面的包装,全部在一个编译为几 MB 的自包含库中。
Rod 缺少的只是一个 CLI。
我构建了第一个版本作为一个异步报告原型,这说服我值得将其发展成为自己的项目。
我将其命名为 Rodney,是对它所基于的 Rod 库的致敬,以及对只有傻瓜和马的引用------以及因为包名称在 PyPI 上可用。
你可以使用 uvx rodney 运行 Rodney 或像这样安装它:
uv tool install rodney
(或者从发布页面获取 Go 二进制文件。)
这是一个简单的示例会话:
rodney start # 在后台启动 Chrome
rodney open https://datasette.io/
rodney js 'Array.from(document.links).map(el => el.href).slice(0, 5)'
rodney click 'a[href="/for"]'
rodney js location.href
rodney js document.title
rodney screenshot datasette-for-page.png
rodney stop
在终端中看起来是这样的:

与 Showboat 一样,这个工具也不是为人类使用而设计的!目标是让编码代理能够运行 rodney --help 并看到他们需要知道的一切以开始使用该工具。你可以在 GitHub 存储库中看到该帮助输出。
以下是我使用 Showboat 创建的 Rodney 的三个演示:
- Rodney 的原始功能集,包括页面屏幕截图和执行 JavaScript。
- Rodney 的新无障碍测试功能,在开发这些功能期间构建,以展示它们可以做什么。
- 使用这些功能对页面进行基本的无障碍审核。我对 Claude Opus 4.6 如何响应提示"使用 showboat 和 rodney 对 https://latest.datasette.io/fixtures 进行无障碍审核"印象深刻------转录在这里。
3、测试驱动开发有帮助,但我们仍然需要手动测试
在成为测试优先、最大测试覆盖率软件开发学派的终身怀疑论者之后(我喜欢包含测试的开发)我最近开始接受测试优先流程,作为迫使代理只编写解决当前问题所需代码的一种方式。
我的许多 Python 编码代理会话都以相同方式开始:
使用 "uv run pytest" 运行现有测试。使用红色/绿色 TDD 构建。
告诉代理如何运行测试既表明该项目存在测试且重要,也是一个指标。代理在编写自己的测试之前会阅读现有测试,因此拥有具有良好模式的干净测试套件使他们更有可能编写自己的良好测试。
前沿模型都明白"红/绿 TDD"意味着他们应该先编写测试,运行它并观察它失败,然后编写代码使其通过------这是一个方便的快捷方式。
我发现这大大提高了代码质量和代理用最少的提示指导产生正确事物的可能性。
但任何从事过测试工作的人都知道,仅仅因为自动化测试通过并不意味着软件真正有效!这就是 Showboat 和 Rodney 背后的动机------直到我用自己的眼睛看到它运行,我从不信任任何功能。
在构建 Showboat 之前,我经常向代理会话添加"手动"测试步骤,例如:
测试通过后,启动开发服务器并使用 curl 练习新功能
4、我在手机上构建了这两个工具
Showboat 和 Rodney 都开始作为通过 Claude iPhone 应用创建的 Claude Code for web 项目。它们的大多数持续功能工作都以相同方式发生。
我对现在在手机上完成了多少编码工作仍然有点惊讶,但我估计,我今天发布到 GitHub 的大部分代码都是由通过该 iPhone 应用驱动的编码代理为我编写的。
我最初设计这两个工具用于像 Claude Code for web 这样的异步编码代理环境。到目前为止,效果真的很好。
原文链接:让AI代理演示他们的工作 - 汇智网