{"id":51322798,"url":"https://github.com/jacobsmith/dogfood-presentation","last_synced_at":"2026-07-01T15:03:02.504Z","repository":{"id":346702894,"uuid":"1191165898","full_name":"jacobsmith/dogfood-presentation","owner":"jacobsmith","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-25T21:55:44.000Z","size":7844,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T08:58:58.348Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacobsmith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-25T01:27:23.000Z","updated_at":"2026-03-25T22:50:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jacobsmith/dogfood-presentation","commit_stats":null,"previous_names":["jacobsmith/dogfood-presentation"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jacobsmith/dogfood-presentation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobsmith%2Fdogfood-presentation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobsmith%2Fdogfood-presentation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobsmith%2Fdogfood-presentation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobsmith%2Fdogfood-presentation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacobsmith","download_url":"https://codeload.github.com/jacobsmith/dogfood-presentation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacobsmith%2Fdogfood-presentation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35011257,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-01T15:03:01.738Z","updated_at":"2026-07-01T15:03:02.496Z","avatar_url":"https://github.com/jacobsmith.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Let Claude Break Your App: Automated QA with /dogfood\n\nPresentation materials for a community talk on the [`/dogfood`](https://github.com/vercel-labs/agent-browser/tree/main/skills/dogfood) skill from vercel-labs — a Claude Code skill that turns your AI assistant into a systematic QA tester for your web app.\n\n## What's in this repo\n\n| Directory | Contents |\n|---|---|\n| [`/app`](./app) | Deliberately-buggy demo web app to run `/dogfood` against |\n| [`/slides`](./slides) | Reveal.js presentation deck |\n| [`/token-comparison`](./token-comparison) | Guide for measuring token usage: native Chrome tool vs `/dogfood` |\n| [`/demo`](./demo) | Backup recording instructions and narration script |\n\n## Key links\n\n| Resource | URL |\n|---|---|\n| agent-browser (Rust CLI + skill) | https://github.com/vercel-labs/agent-browser |\n| dogfood GitHub Action | https://github.com/jacobsmith/dogfood-github-action |\n| Claude Code | https://claude.ai/code |\n\n## How it works\n\n`agent-browser` is a Rust CLI that drives Chrome via the CDP protocol and keeps a **persistent browser session** alive across commands. The `/dogfood` skill issues a sequence of CLI calls against that live session — no browser cold-start per step, no fragile CSS selectors, just stable element refs.\n\n```\nagent-browser open https://app.com   # start session\nagent-browser snapshot -i            # get interactive wireframe with refs\nagent-browser click @e4              # interact by ref\nagent-browser errors                 # read console errors\nagent-browser screenshot --annotate  # capture evidence\n```\n\n## Prerequisites\n\n- [Claude Code](https://claude.ai/code) installed\n- `agent-browser` + `/dogfood` skill installed:\n  ```bash\n  npm i -g agent-browser\n  npx skills add vercel-labs/agent-browser --skill dogfood\n  ```\n\n## Running the demo app\n\n```bash\ncd app\n# No build step needed — open index.html directly or serve it:\nnpx serve .\n```\n\nThen in Claude Code:\n```\n/dogfood http://localhost:3000\n```\n\n## Running the slides\n\n```bash\ncd slides\nnpx serve .\n# Open http://localhost:3000\n```\n\n## Automating with the GitHub Action\n\n[`dogfood-github-action`](https://github.com/jacobsmith/dogfood-github-action) wires `/dogfood` into your CI pipeline:\n\n1. Comment `/dogfood` on any open PR\n2. The action polls Vercel for the preview deployment URL\n3. Runs Claude in headless mode (`claude -p`) with `agent-browser`\n4. Posts a full bug report + up to 20 screenshots back to the PR\n\n**Cost:** ~$0.75 – $1.50 per PR depending on app size.\n\nSetup:\n```bash\ncp action .github/workflows/dogfood.yml\n# Add secrets: ANTHROPIC_API_KEY, PREVIEW_TEST_USER_EMAIL, PREVIEW_TEST_USER_PASSWORD\n```\n\n## Talk abstract\n\n\u003e Claude Code can browse the web natively — but what happens to your context window when it does? In this talk we dig into `agent-browser`, a Rust CLI from Vercel Labs that drives a persistent Chrome session, and the `/dogfood` skill built on top of it. We'll compare real token counts between Claude's built-in Chrome tool and `/dogfood` (same bugs found, 2× more pages visited at lower cost per step), live-demo a systematic QA run against a deliberately-broken web app, and show how to wire the whole thing into CI with a GitHub Action. You'll leave with the skill installed, a mental model for when to reach for it, and a ready-to-copy workflow file.\n\n## Credits\n\n- [`vercel-labs/agent-browser`](https://github.com/vercel-labs/agent-browser)\n- [`dogfood-github-action`](https://github.com/jacobsmith/dogfood-github-action)\n- [Claude Code](https://claude.ai/code)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobsmith%2Fdogfood-presentation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacobsmith%2Fdogfood-presentation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacobsmith%2Fdogfood-presentation/lists"}