From dogfood
USE WHEN: dogfood, QA, exploratory test, find issues, bug hunt, test this app/site/platform, or review the quality of a web application. Systematically explores a web app in a real browser, finds bugs and UX issues, and produces a structured report with full reproduction evidence (step-by-step screenshots, repro GIFs when available, and detailed repro steps) so findings can be handed straight to the responsible team.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dogfood:dogfoodThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically explore a web application, find issues, and produce a report with full reproduction evidence for every finding.
Systematically explore a web application, find issues, and produce a report with full reproduction evidence for every finding.
This plugin drives a real browser through Claude Code's browser tools. Use whichever surface is available, in this order of preference:
mcp__claude-in-chrome__*): the primary surface for interactive exploration, authenticated flows, console reading, and GIF repro capture. These tools are loaded on demand. Before the first call, load them with ToolSearch (e.g. select:mcp__claude-in-chrome__navigate,mcp__claude-in-chrome__computer,mcp__claude-in-chrome__read_page,mcp__claude-in-chrome__read_console_messages,mcp__claude-in-chrome__form_input,mcp__claude-in-chrome__find,mcp__claude-in-chrome__gif_creator,mcp__claude-in-chrome__tabs_context_mcp,mcp__claude-in-chrome__tabs_create_mcp). At session start call tabs_context_mcp first, then open a fresh tab with tabs_create_mcp (do not reuse the user's existing tabs unless asked).bunx playwright screenshot ...): a headless fallback for deterministic full-page screenshots when no live Chrome session is available or when you just need a static capture. It ships its own browser and runs in background/CI contexts.If neither browser surface is available, stop and tell the user that dogfood needs a browser tool (Claude in Chrome or Playwright) and cannot proceed without one.
Use shell commands only for local filesystem work such as creating output directories, copying the report template, or moving finished artifacts. The report template lives at ${CLAUDE_PLUGIN_ROOT}/skills/dogfood/templates/dogfood-report-template.md.
Only the Target URL is required. Everything else has sensible defaults. Use them unless the user explicitly provides an override.
| Parameter | Default | Example override |
|---|---|---|
| Target URL | (required) | vercel.com, http://localhost:3000 |
| Session name | Slugified domain (e.g., vercel.com -> vercel-com) | Session: my-session |
| Output directory | ./dogfood-output/ | Output directory: /tmp/qa |
| Scope | Full app | Focus on the billing page |
| Authentication | None | Sign in to [email protected] |
If the user says something like "dogfood vercel.com", start immediately with defaults. Do not ask clarifying questions unless authentication is mentioned but credentials are missing.
1. Initialize Set up output dirs, report file, browser tab
2. Authenticate Sign in if needed
3. Orient Navigate to starting point, take initial snapshot
4. Explore Systematically visit pages and test features
5. Document Capture evidence for each issue as found
6. Wrap up Update summary counts, close the tab
Create the output directories and seed the report from the template:
mkdir -p {OUTPUT_DIR}/screenshots {OUTPUT_DIR}/videos
cp "${CLAUDE_PLUGIN_ROOT}/skills/dogfood/templates/dogfood-report-template.md" {OUTPUT_DIR}/report.md
Fill in the report header fields (target URL, date, session name).
Open a browser tab on the target. With Claude in Chrome, call tabs_context_mcp, then tabs_create_mcp for a new tab, then navigate to {TARGET_URL} and wait for the page to settle. With the Playwright CLI alone, you will capture screenshots per page on demand instead of holding a live tab.
If the app requires login, use the interactive browser surface (Claude in Chrome):
read_page (or get_page_text) to find the email/password fields.form_input, then click the submit control with computer (or locate it first with find).For OTP / email codes: ask the user, wait for their response, then enter the code. Authenticated state lives in the open tab for the rest of the session; note in the report if durable auth reuse is not available on the current surface.
Playwright CLI's clean headless browser is not logged in. For authenticated targets, prefer Claude in Chrome.
Take an initial screenshot and read the page structure to map the app:
read_page for a structural snapshot, then a screenshot via computer (screenshot action). Save it to {OUTPUT_DIR}/screenshots/initial.png.bunx playwright screenshot --full-page "{TARGET_URL}" {OUTPUT_DIR}/screenshots/initial.pngIdentify the main navigation elements and list the sections to visit.
Read references/issue-taxonomy.md for the full list of what to look for and the exploration checklist.
Strategy, work through the app systematically:
At each page:
read_page / get_page_text) to find interactive elements.{OUTPUT_DIR}/screenshots/{page-name}.png (Claude in Chrome computer screenshot, or bunx playwright screenshot --full-page).read_console_messages (filter with its pattern argument to avoid noise). Many issues are invisible in the UI but surface as JS errors or failed requests.Use your judgment on how deep to go. Spend more time on core features and less on peripheral pages. If you find a cluster of issues in one area, investigate deeper.
Steps 4 and 5 happen together: explore and document in a single pass. When you find an issue, stop exploring and document it immediately before moving on. Do not explore the whole app first and document later.
Every issue must be reproducible. When you find something wrong, do not just note it; prove it with evidence. The goal is that someone reading the report can see exactly what happened and replay it.
Choose the right level of evidence for the issue:
These require user interaction to reproduce. Prefer a repro GIF plus step-by-step screenshots when recording is available.
Start a repro GIF before reproducing, if available. Claude in Chrome provides gif_creator: capture extra frames before and after each action so playback is smooth, and name the file meaningfully (e.g. issue-{NNN}-repro.gif). If no recording surface is available, rely on step-by-step screenshots and set Repro Video in the report to N/A - recording unavailable in current browser surface.
Walk through the steps at human pace. Take a screenshot at each step so the sequence is readable:
issue-{NNN}-step-1.png (before)
issue-{NNN}-step-2.png (after the action)
...
issue-{NNN}-result.png (the broken state)
Drive each action (click, type, fill) with computer / form_input, capturing a screenshot before and after.
Capture the broken state in a final screenshot so the viewer can see it clearly.
Stop the GIF, if one was started, and save it to {OUTPUT_DIR}/videos/.
Write numbered repro steps in the report, each referencing its screenshot.
These are visible without interaction. A single screenshot is sufficient. No GIF, no multi-step repro:
bunx playwright screenshot --full-page "{PAGE_URL}" {OUTPUT_DIR}/screenshots/issue-{NNN}.png
(or a single Claude in Chrome screenshot). Write a brief description, reference the screenshot, and set Repro Video to N/A.
For all issues:
Aim to find 5-10 well-documented issues, then wrap up. Depth of evidence matters more than total count: 5 issues with full repro beats 20 with vague descriptions.
After exploring:
### ISSUE- block must be reflected in the totals.tabs_close_mcp). Leave the user's other tabs alone.read_page / get_page_text for finding clickable/fillable elements and reading page structure.computer, or bunx playwright screenshot) for visual proof, layout issues, and report evidence.read_console_messages for JS errors and failed requests.rm screenshots, GIFs, or the report mid-session. Do not close the session and restart. Work forward, not backward.alert/confirm/prompt dialogs through your actions; they block the browser-automation channel. If a control may open one, warn the user before interacting with it.| Reference | When to Read |
|---|---|
| references/issue-taxonomy.md | Start of session: calibrate what to look for, severity levels, exploration checklist |
| Template | Purpose |
|---|---|
| templates/dogfood-report-template.md | Copy into the output directory as the report file |
npx claudepluginhub aojdevstudio/agentic-utilities --plugin dogfoodCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.