
Dogfood
Run structured exploratory browser QA on a web app URL and produce screenshot evidence plus a markdown bug report.
Overview
Dogfood is an agent skill most often used in Ship (also Validate) that runs systematic exploratory browser QA on a web app and delivers evidence-backed bug reports.
Install
npx skills add https://github.com/nousresearch/hermes-agent --skill dogfoodWhat is this skill?
- 5-phase systematic dogfood workflow from plan through structured bug reporting
- Uses browser_navigate, snapshot, click, type, vision, console, scroll, and related browser tools
- Creates dogfood-output with screenshots/ evidence and report.md
- Accepts target URL, scoped features or full site, and optional output directory
- Guides navigation and interaction to find regressions and UX defects with captured proof
- 5-phase systematic exploratory QA workflow
- Default output layout: dogfood-output/screenshots and report.md
Adoption & trust: 3.5k installs on skills.sh; 187k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are about to ship or demo a web app but only have ad-hoc manual clicks and no structured evidence trail when something breaks.
Who is it for?
Solo builders dogfooding staging or production-like URLs before launch, handoff, or investor demos.
Skip if: Teams that already need automated CI regression suites only—this skill is exploratory QA with browser tools, not a replacement for full test harness design.
When should I use this skill?
You have a target URL, testing scope, and browser toolset available and need structured exploratory QA with evidence.
What do I get? / Deliverables
You get a scoped test pass with screenshots under dogfood-output and a report.md listing issues, steps, and severity-ready notes for fixes or a PR.
- Screenshot evidence under the output directory
- Structured markdown bug report (report.md)
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Canonical shelf is Ship because the skill’s core output is pre-release quality assurance via real browser interaction, not feature implementation. Testing is the best fit: it defines a repeatable exploratory QA workflow with evidence capture rather than unit-test authoring or security hardening.
Where it fits
Click through a clickable prototype URL to catch broken links before you commit to the full build.
Run a scoped pass on checkout and settings after a refactor while saving screenshots for each failure.
Dogfood production-adjacent staging right before go-live to verify critical paths still work.
Reproduce a user-reported flow in the browser and attach evidence to a fix ticket.
How it compares
Use instead of unstructured “click around the app” chat sessions when you want a fixed 5-phase QA workflow and a written report.
Common Questions / FAQ
Who is dogfood for?
Solo and indie builders shipping web apps with agent browser toolsets who need repeatable exploratory QA without standing up a full E2E framework first.
When should I use dogfood?
Use it in Ship testing before release, in Validate when probing a prototype or landing flow for breakage, and whenever you have a URL plus scope and want screenshot-backed findings instead of vague “seems broken” notes.
Is dogfood safe to install?
It drives a real browser against URLs you specify and writes local screenshots and reports; review the Security Audits panel on this page and only aim it at environments you are authorized to test.
SKILL.md
READMESKILL.md - Dogfood
# Dogfood: Systematic Web Application QA Testing ## Overview This skill guides you through systematic exploratory QA testing of web applications using the browser toolset. You will navigate the application, interact with elements, capture evidence of issues, and produce a structured bug report. ## Prerequisites - Browser toolset must be available (`browser_navigate`, `browser_snapshot`, `browser_click`, `browser_type`, `browser_vision`, `browser_console`, `browser_scroll`, `browser_back`, `browser_press`) - A target URL and testing scope from the user ## Inputs The user provides: 1. **Target URL** — the entry point for testing 2. **Scope** — what areas/features to focus on (or "full site" for comprehensive testing) 3. **Output directory** (optional) — where to save screenshots and the report (default: `./dogfood-output`) ## Workflow Follow this 5-phase systematic workflow: ### Phase 1: Plan 1. Create the output directory structure: ``` {output_dir}/ ├── screenshots/ # Evidence screenshots └── report.md # Final report (generated in Phase 5) ``` 2. Identify the testing scope based on user input. 3. Build a rough sitemap by planning which pages and features to test: - Landing/home page - Navigation links (header, footer, sidebar) - Key user flows (sign up, login, search, checkout, etc.) - Forms and interactive elements - Edge cases (empty states, error pages, 404s) ### Phase 2: Explore For each page or feature in your plan: 1. **Navigate** to the page: ``` browser_navigate(url="https://example.com/page") ``` 2. **Take a snapshot** to understand the DOM structure: ``` browser_snapshot() ``` 3. **Check the console** for JavaScript errors: ``` browser_console(clear=true) ``` Do this after every navigation and after every significant interaction. Silent JS errors are high-value findings. 4. **Take an annotated screenshot** to visually assess the page and identify interactive elements: ``` browser_vision(question="Describe the page layout, identify any visual issues, broken elements, or accessibility concerns", annotate=true) ``` The `annotate=true` flag overlays numbered `[N]` labels on interactive elements. Each `[N]` maps to ref `@eN` for subsequent browser commands. 5. **Test interactive elements** systematically: - Click buttons and links: `browser_click(ref="@eN")` - Fill forms: `browser_type(ref="@eN", text="test input")` - Test keyboard navigation: `browser_press(key="Tab")`, `browser_press(key="Enter")` - Scroll through content: `browser_scroll(direction="down")` - Test form validation with invalid inputs - Test empty submissions 6. **After each interaction**, check for: - Console errors: `browser_console()` - Visual changes: `browser_vision(question="What changed after the interaction?")` - Expected vs actual behavior ### Phase 3: Collect Evidence For every issue found: 1. **Take a screenshot** showing the issue: ``` browser_vision(question="Capture and describe the issue visible on this page", annotate=false) ``` Save the `screenshot_path` from the response — you will reference it in the report. 2. **Record the details**: - URL where the issue occurs - Steps to reproduce - Expected behavior - Actual behavior - Console errors (if any) - Screenshot path 3. **Classify the issue** using the issue taxonomy (see `references/issue-taxonomy.md`): - Severity: Critical / High / Medium / Low - Category: Functional / Visual / Accessibility / Console / UX / Content ### Phase 4: Categorize 1. Review all collected issues. 2. De-duplicate — merge issues that are the same bug manifesting in different places. 3. Assign final severity and