Communitygithub.com

vercel-labs/dogfood

系统地探索和测试 Web 应用,以发现 Bug、用户体验问题及其他缺陷。当被要求进行“dogfood”、“QA”、“探索性测试”、“查找问题”、“Bug 大扫除”、“测试此应用/网站/平台”或审查 Web 应用质量时使用。生成带有完整复现证据的结构化报告——每一步的截图、复现视频以及每个问题的详细复现步骤,使发现的问题可以直接移交给负责团队。

dogfood 是什么?

该技能(Skill)旨在帮助 AI 代理(如 Claude Code、Cursor 等)对 Web 应用进行系统性探索和问题发现,适用于 QA、Bug 大扫除或任意探索性测试场景。用户只需提供目标 URL,其余参数(会话名称、输出目录、范围、身份验证)均设定了合理的默认值,无需过多配置。工作流程包括初始化、身份验证(若需要)、定位、系统探索、即时记录问题以及最终总结。技能特别强调“先复现再记录”的原则:对于交互式 Bug(功能、UX、操作触发的控制台错误),要求录制复现视频并逐步骤截图;对于静态问题(错别字、占位符文本、视觉错位等),一张带注释的截图即可。所有发现的问题会立即追加到报告中,确保会话中断时数据不丢失。最终目标是生成一份内容详实、证据充分的 QA 报告,可直接交付给开发团队。该技能基于 `agent-browser` 命令行工具(直接使用二进制文件,而非 `npx`),并需加载 `references/issue-taxonomy.md` 和 `templates/dogfood-report-template.md` 等本地文件。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vercel-labs/agent-browser/tree/main/skill-data/dogfood

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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、操作触发的控制台错误)

这些问题需要用户交互才能复现——请使用完整的复现过程,包括视频和逐步截图:

  1. 在复现之前启动复现视频:
agent-browser --session {SESSION} record start {OUTPUT_DIR}/videos/issue-{NNN}-repro.webm
  1. 以人类的速度逐步执行操作。 在操作之间暂停 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
# ...继续直到问题显现
  1. 捕获错误状态。 暂停以便观看者可以看到它,然后拍摄带注释的截图:
sleep 2
agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}-result.png
  1. 停止视频:
agent-browser --session {SESSION} record stop
  1. 在报告中编写编号的复现步骤,每个步骤引用其对应的截图。

静态 / 加载即可见的问题(错别字、占位符文本、文本被裁剪、对齐错误、加载时的控制台错误)

这些问题无需交互即可见——一张带注释的截图就足够了。不需要视频,不需要多步骤复现:

agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}.png

在报告中编写简要描述并引用该截图。将复现视频设置为 N/A。


对于所有问题:

  1. 立即追加到报告中。 不要将问题批量延迟处理。每发现一个问题就即时写入,这样即使会话中断也不会丢失信息。

  2. 递增问题计数器(ISSUE-001, ISSUE-002, ...)。

6. 收尾

目标是查找 5-10 个文档完善的问题,然后收尾。证据的深度比总数量更重要——5 个带有完整复现过程的问题胜过 20 个模糊的描述。

探索完成后:

  1. 重新阅读报告并更新摘要中的严重级别计数,使其与实际发现的问题一致。每个 ### ISSUE- 块都必须在总数中得到反映。
  2. 关闭会话:
agent-browser --session {SESSION} close
  1. 告诉用户报告已准备就绪,并总结发现:总问题数、按严重级别分类以及最关键的问题。

指导原则

  • 复现是一切。 每个问题都需要证据——但要让证据与问题相匹配。交互式 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复制到输出目录作为报告文件

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to

vercel-labs/agentcore

Run agent-browser on AWS Bedrock AgentCore cloud browsers. Use when the user wants to use AgentCore, run browser automation on AWS, use a cloud browser with AWS credentials, or needs a managed browser session backed by AWS infrastructure. Triggers include "use agentcore", "run on AWS", "cloud browser with AWS", "bedrock browser", "agentcore session", or any task requiring AWS-hosted browser automation.

vercel-labs/derive-client

Reverse-engineer a website's internal API by recording browser traffic into a HAR file, then generate a standalone client or CLI that calls the endpoints directly, with no browser needed after the first recording. Use when asked to "derive a client", "build a CLI for <site>", "reverse engineer this site's API", "record network requests", "turn this site into an API", or when the same site will be automated repeatedly and direct HTTP calls would beat driving the browser every time.

vercel-labs/electron

Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include "automate Slack app", "control VS Code", "interact with Discord app", "test this Electron app", "connect to desktop app", or any task requiring automation of a native Electron application.

vercel-labs/protected-vercel-deployments

Access and test Vercel deployments protected by Vercel Authentication, SSO, or Deployment Protection with agent-browser. Use when a preview or production URL redirects to a Vercel login page, returns a protection 401 or 403, or needs short-lived Trusted Sources OIDC authentication instead of a static bypass secret or public exception.

vercel-labs/slack

Interact with Slack workspaces using browser automation. Use when the user needs to check unread channels, navigate Slack, send messages, extract data, find information, search conversations, or automate any Slack task. Triggers include "check my Slack", "what channels have unreads", "send a message to", "search Slack for", "extract from Slack", "find who said", or any task requiring programmatic Slack interaction.

vercel-labs/vercel-sandbox

Run agent-browser + Chrome inside Vercel Sandbox microVMs for browser automation from any Vercel-deployed app. Use when the user needs browser automation in a Vercel app (Next.js, SvelteKit, Nuxt, Remix, Astro, etc.), wants to run headless Chrome without binary size limits, needs persistent browser sessions across commands, or wants ephemeral isolated browser environments. Triggers include "Vercel Sandbox browser", "microVM Chrome", "agent-browser in sandbox", "browser automation on Vercel", or any task requiring Chrome in a Vercel Sandbox.

vercel-labs/webmcp-gen

Build and validate experimental WebMCP tools for an existing web page. Use when an agent needs to expose a site's real workflows as page tools, create webmcp.init.js, define deterministic checks, or compare WebMCP with accessibility-tree automation.

相关技能