dogfood 是做什么的?
系统性地探索 Web 应用,发现问题,并为每个发现生成带有完整复现证据的报告。
设置
仅需要提供目标 URL。其他所有参数都有合理的默认值——除非用户明确提供覆盖值,否则请使用默认值。
| 参数 | 默认值 | 覆盖示例 |
|---|---|---|
| 目标 URL | (必填) | vercel.com, http://localhost:3000 |
| 会话名称 | 简短化的域名 (例如 vercel.com -> vercel-com) | --session my-session |
| 输出目录 | ./dogfood-output/ | Output directory: /tmp/qa |
| 范围 | 整个应用 | Focus on the billing page |
| 身份验证 | 无 | Sign in to [email protected] |
如果用户说类似“dogfood vercel.com”,请立即使用默认值开始。除非用户提到了身份验证但缺少凭据,否则不要询问澄清性问题。
始终直接使用 agent-browser——不要使用 npx agent-browser。直接二进制文件使用快速的 Rust 客户端。npx 会通过 Node.js 路由,速度明显较慢。
工作流程
1. 初始化 设置会话、输出目录、报告文件
2. 身份验证 如果需要则登录,保存状态
3. 定位 导航到起点,拍摄初始快照
4. 探索 系统性地访问页面并测试功能
5. 文档化 每发现一个问题立即截图+记录
6. 收尾 更新摘要计数,关闭会话
1. 初始化
mkdir -p {OUTPUT_DIR}/screenshots {OUTPUT_DIR}/videos
将报告模板复制到输出目录并填写头部字段:
cp {SKILL_DIR}/templates/dogfood-report-template.md {OUTPUT_DIR}/report.md
启动一个命名会话:
agent-browser --session {SESSION} open {TARGET_URL}
agent-browser --session {SESSION} wait --load domcontentloaded
2. 身份验证
如果应用需要登录:
agent-browser --session {SESSION} snapshot -i
# 识别登录表单引用,填写凭据
agent-browser --session {SESSION} fill @e1 "{EMAIL}"
agent-browser --session {SESSION} fill @e2 "{PASSWORD}"
agent-browser --session {SESSION} click @e3
# 将其替换为目标应用的登录后 URL、文本或 JS 条件:
agent-browser --session {SESSION} wait --url "{POST_LOGIN_URL_PATTERN}"
# 或者:
# agent-browser --session {SESSION} wait --text "{POST_LOGIN_TEXT}"
# agent-browser --session {SESSION} wait --fn "{POST_LOGIN_CONDITION}"
对于 OTP/邮箱验证码:询问用户,等待其响应,然后输入验证码。
登录成功后,保存状态以供潜在重用:
agent-browser --session {SESSION} state save {OUTPUT_DIR}/auth-state.json
3. 定位
拍摄初始的带注释截图和快照以了解应用结构:
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/initial.png
agent-browser --session {SESSION} snapshot -i
识别主要的导航元素并规划要访问的板块。
4. 探索
阅读 references/issue-taxonomy.md 以获取完整的关注点清单和探索检查表。
策略——系统地遍历应用:
- 从主导航开始。访问每个顶层板块。
- 在每个板块内,测试交互元素:点击按钮、填写表单、打开下拉菜单/模态框。
- 检查边缘情况:空状态、错误处理、边界输入。
- 尝试现实的端到端工作流(创建、编辑、删除流程)。
- 定期检查浏览器控制台是否有错误。
在每个页面:
agent-browser --session {SESSION} snapshot -i
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/{page-name}.png
agent-browser --session {SESSION} errors
agent-browser --session {SESSION} console
根据判断决定探索深度。在核心功能上多花时间,在边缘页面上少花时间。如果在某个区域发现一系列问题,请深入调查。
5. 记录问题(先复现)
步骤 4 和 5 同时进行——在一次遍历中探索并记录。当你发现问题时,立即停止探索并记录下来,然后再继续。不要先探索整个应用再记录。
每个问题都必须可复现。当你发现问题时,不要仅仅记录它——要用证据证明它。目标是阅读报告的人可以准确地看到发生了什么,并且能够重放。
为问题选择合适的证据级别:
交互式 / 行为问题(功能性、UX、操作触发的控制台错误)
这些问题需要用户交互才能复现——请使用完整的复现过程,包括视频和逐步截图:
- 在复现之前启动复现视频:
agent-browser --session {SESSION} record start {OUTPUT_DIR}/videos/issue-{NNN}-repro.webm
- 以人类的速度逐步执行操作。 在操作之间暂停 1-2 秒,使视频可观看。在每个步骤截取屏幕截图:
agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-1.png
sleep 1
# 执行操作(点击、填写等)
sleep 1
agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-2.png
sleep 1
# ...继续直到问题显现
- 捕获错误状态。 暂停以便观看者可以看到它,然后拍摄带注释的截图:
sleep 2
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}-result.png
- 停止视频:
agent-browser --session {SESSION} record stop
- 在报告中编写编号的复现步骤,每个步骤引用其对应的截图。
静态 / 加载即可见的问题(错别字、占位符文本、文本被裁剪、对齐错误、加载时的控制台错误)
这些问题无需交互即可见——一张带注释的截图就足够了。不需要视频,不需要多步骤复现:
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}.png
在报告中编写简要描述并引用该截图。将复现视频设置为 N/A。
对于所有问题:
-
立即追加到报告中。 不要将问题批量延迟处理。每发现一个问题就即时写入,这样即使会话中断也不会丢失信息。
-
递增问题计数器(ISSUE-001, ISSUE-002, ...)。
6. 收尾
目标是查找 5-10 个文档完善的问题,然后收尾。证据的深度比总数量更重要——5 个带有完整复现过程的问题胜过 20 个模糊的描述。
探索完成后:
- 重新阅读报告并更新摘要中的严重级别计数,使其与实际发现的问题一致。每个
### ISSUE-块都必须在总数中得到反映。 - 关闭会话:
agent-browser --session {SESSION} close
- 告诉用户报告已准备就绪,并总结发现:总问题数、按严重级别分类以及最关键的问题。
指导原则
- 复现是一切。 每个问题都需要证据——但要让证据与问题相匹配。交互式 Bug 需要视频和逐步截图。静态 Bug(错别字、占位符文本、加载时可见的视觉问题)只需要一张带注释的截图。
- 在收集证据之前验证可复现性。 在录制视频或拍摄截图之前,至少重试一次验证问题是否可复现。如果不能持续复现,则不是有效问题。
- 不要为静态问题录制视频。 错别字或文本被裁剪不需要视频。将视频保留给涉及用户交互、时序或状态变化的问题。
- 对于交互式问题,为每一步截图。 捕获操作前、操作中和操作后——以便有人可以看到完整的顺序。
- 编写与截图对应的复现步骤。 报告中每个编号的步骤都应引用其相应的截图。读者无需接触浏览器即可直观地跟随步骤。
- 使用正确的快照命令。
snapshot -i—— 用于查找可点击/可填写的元素(按钮、输入框、链接)snapshot(无参数) —— 用于读取页面内容(文本、标题、数据列表)
- 要彻底但也要有判断力。 你不是在遵循测试脚本——你是在像真实用户一样探索。如果感觉不对劲,就深入调查。
- 逐步记录发现。 每发现一个问题就立即追加到报告中。如果会话中断,发现结果也会被保存。永远不要将所有问题留到最后批量处理。
- 永远不要删除输出文件。 不要在会话中途删除截图、视频或报告。不要关闭会话并重新开始。只能前进,不能后退。
- 永远不要阅读目标应用的源代码。 你是以用户的身份进行测试,而不是审查代码。不要阅读所测试应用的 HTML、JS 或配置文件。所有发现必须来自你在浏览器中观察到的内容。
- 检查控制台。 许多问题在 UI 中不可见,但会以 JS 错误或失败请求的形式出现。
- 像用户一样测试,而不是像机器人。 尝试完整的端到端通用工作流。点击真实用户会点击的内容。输入真实的数据。
- 像人类一样打字。 在录制视频期间填写表单字段时,使用
type而不是fill——它会逐字逐句地键入。仅在录制视频之外,速度重要时才使用fill。 - 为人类调整复现视频的节奏。 在操作之间添加
sleep 1,在最终结果截图之前添加sleep 2。视频应该能够以 1 倍速度观看——审查报告的人需要看到发生了什么,而不是瞬时状态变化的模糊过程。 - 高效使用命令。 当多个
agent-browser命令互相独立时,将它们批量放在一个 shell 调用中(例如agent-browser ... screenshot ... && agent-browser ... console)。使用agent-browser --session {SESSION} scroll down 300进行滚动——不要使用key或evaluate来滚动。
参考资料
| 参考资料 | 何时阅读 |
|---|---|
| references/issue-taxonomy.md | 会话开始时——校准关注点、严重级别、探索检查表 |
模板
| 模板 | 用途 |
|---|---|
| templates/dogfood-report-template.md | 复制到输出目录作为报告文件 |