开源工具改进AI浏览器自动化的确定性和稳定性,直击Agent执行不可靠的痛点
Libretto 是一个用于构建可靠 Web 集成的工具包。它为你的 coding agent 提供实时浏览器和高效节省 token 的 CLI,可用于:
Saffron Health 团队构建 Libretto,是为了帮助我们维护与常见医疗软件之间的浏览器集成。现在,我们将它开源,希望其他团队在做同类工作时能更轻松一些。
代码仓库:github.com/saffron-health/libretto
Discord:discord.gg/NYrG56hVDt
# Add Libretto to your project. Requires Node.js and npm.
npm install libretto
# First-time onboarding: install skills and download Chromium
npx libretto setup
# Check workspace readiness at any time
npx libretto status
setup 会创建 .libretto/ 目录、安装 Agent skills,并下载 Chromium,除非你传入 --skip-browsers。
Libretto 的设计方式,是让你通过 coding agent 将它作为一项 skill 使用。下面是一些 prompt 示例:
使用 Libretto skill。打开 LinkedIn,抓取前 10 条帖子,包括帖子内容、发布者、reaction 数量、前 25 条评论,以及前 25 次 repost。
你的 coding agent 会打开一个窗口,让你登录 LinkedIn,随后自动开始探索。
我会向你演示如何在 eClinicalWorks EHR 中获取患者的主要保险 ID。使用 Libretto skill 将这个流程转换成一个 Playwright 脚本,以患者姓名和出生日期作为输入,返回保险 ID。URL 是……
Libretto 可以读取你在浏览器中执行的操作,因此你可以先完成一次工作流,再要求它根据你的操作重新构建这个工作流。
我们在 ./integration.ts 中有一个浏览器脚本,它会自动访问 Hacker News 并获取前 10 条帖子。把它转换成直接发送网络请求的脚本。使用 Libretto skill。
Libretto 可以读取浏览器发出的网络请求,利用这些信息对 API 进行逆向分析,并创建一个直接调用这些请求的脚本。与 UI 自动化相比,直接调用 API 更快,也更可靠。你还可以要求 Libretto 进行安全分析:它会检查请求中常见的安全 cookie,帮助你判断采用网络请求方案是否安全。
我们在 ./integration.ts 中有一个浏览器脚本,它本应访问 Availity,并为患者执行资格检查。但运行时出现了 broken selector error。修复它。使用 Libretto skill。
Agent 可以使用 Libretto 重现故障、在工作流的任意节点暂停、检查实时页面并修复问题,整个过程都可以自主完成。
你也可以直接通过命令行使用 Libretto。所有命令都接受 --session <name>,用于指定特定 session。
npx libretto open <url> # launch browser and open a URL
npx libretto run ./integration.ts --headless # run a workflow and close on success
npx libretto run ./integration.ts --headless --stay-open-on-success # keep a successful run inspectable
npx libretto snapshot --session <name> # capture a screenshot and compact accessibility tree
npx libretto exec "<code>" # execute Playwright TypeScript against the open page
npx libretto close # close the browser
通过 run 创建的 session,可以使用与 open session 相同的 daemon-backed 命令进行检查。运行成功后,浏览器默认会关闭;传入 --stay-open-on-success,即可让浏览器保持打开,以便使用 pages、snapshot 和 exec。失败或暂停的工作流会让浏览器保持打开,这样你可以在修复或恢复工作流之前,检查页面当时的准确状态。
运行 npx libretto help 可查看完整的命令列表。
Libretto 的全部状态都保存在项目根目录下的 .libretto/ 目录中。有关配置文件、session 和 profile 的详细信息,请参阅配置文档。
Libretto 会记录 CLI telemetry,以了解 CLI 的使用情况,并帮助我们确定改进工作的优先级。每条执行完毕的命令只能发送以下信息:install id、时间戳、libretto run 之类的命令事件名称、是否发生错误的布尔值、软件包版本、构建渠道(node_modules、source 或 unknown),以及在登录 Libretto Cloud 时配置的 cloud user id。Libretto 不会发送命令参数、URL、项目路径、session cookie、API key、错误消息或错误详情,也不会发送电子邮箱地址。
install id 存储在 ~/.libretto/telemetry.json telemetry 文件中。相关实现在 packages/libretto/src/cli/core/telemetry.ts。
如需禁用 telemetry,可以设置 LIBRETTO_TELEMETRY_DISABLED=1、设置 DO_NOT_TRACK=1、使用 CI=1 运行,或者编辑 ~/.libretto/telemetry.json,将 "enabled" 设置为 false。
加入我们的 Discord,与其他开发者交流、获取帮助,并分享你构建的项目:
如果要进行更深入、更长篇幅的讨论,请前往 GitHub Discussions。发现 bug?请提交 issue。
采用 MIT License——你可以在商业项目和开源项目中自由使用。
在此代码仓库中进行本地开发:
pnpm i
pnpm build
pnpm type-check
pnpm test
packages/libretto/src/cli/——CLI 命令
packages/libretto/src/runtime/——浏览器 runtime(网络、恢复、下载)
packages/libretto/src/shared/——共享工具(配置、LLM client、日志、状态)
packages/libretto/test/——测试文件(*.spec.ts)
packages/libretto/README.template.md——代码仓库和软件包 README 的唯一事实来源
packages/libretto/skills/libretto/——Libretto skill 的唯一事实来源
编辑 packages/libretto/README.template.md 或 packages/libretto/skills/libretto/ 下的任何内容后,请运行 pnpm sync:mirrors。
如果只想检查生成的 README、skill mirrors 和 skill 版本元数据是否保持同步,而不自动修复,请运行 pnpm check:mirrors。发布时,请运行 pnpm prepare-release。
这是一个仍在积极开发的早期项目。API 在 1.0 版本之前可能发生变化。我们建议在生产环境中锁定具体版本。
由 Saffron Health 团队构建。