From e02ff2804eaad7145760b4be3c49662594f16e57 Mon Sep 17 00:00:00 2001 From: Nicholai Date: Sat, 28 Feb 2026 22:25:45 -0700 Subject: [PATCH] 2026-03-01T05-25-45_auto_memory/memories.db-wal --- .skill-lock.json | 9 + memory/memories.db-shm | Bin 32768 -> 32768 bytes memory/memories.db-wal | Bin 5285992 -> 5285992 bytes skills/dogfood/SKILL.md | 216 ++++++++++++++++++ skills/dogfood/references/issue-taxonomy.md | 109 +++++++++ .../templates/dogfood-report-template.md | 53 +++++ 6 files changed, 387 insertions(+) create mode 100644 skills/dogfood/SKILL.md create mode 100644 skills/dogfood/references/issue-taxonomy.md create mode 100644 skills/dogfood/templates/dogfood-report-template.md diff --git a/.skill-lock.json b/.skill-lock.json index 02f714f9a..7185d7124 100644 --- a/.skill-lock.json +++ b/.skill-lock.json @@ -207,6 +207,15 @@ "skillFolderHash": "ba20eb1474ed8c2123f2a98e36f822b9bf369834", "installedAt": "2026-02-25T23:00:56.183Z", "updatedAt": "2026-02-25T23:00:56.183Z" + }, + "dogfood": { + "source": "vercel-labs/agent-browser", + "sourceType": "github", + "sourceUrl": "https://github.com/vercel-labs/agent-browser.git", + "skillPath": "skills/dogfood/SKILL.md", + "skillFolderHash": "ad41914e08b955060a80801619d6a36206187e9e", + "installedAt": "2026-03-01T05:22:00.975Z", + "updatedAt": "2026-03-01T05:22:00.975Z" } }, "dismissed": { diff --git a/memory/memories.db-shm b/memory/memories.db-shm index 75671a873e9f54abf704698007e2e3ab12b09c27..2427572e6eee98e378deef423b3e759379e679d5 100644 GIT binary patch delta 652 zcmb7=Pe_w-7{{OI+1w^m$i4BEn92LLoF?+4pHhMBBGMjc9PwH z7onR(bSaQu2kBXFKU=Dy&y^Nk zCCnu!Z~+epgE-j0#Wn}gw`QVWAm}FY!!Xu@clE*xG$;m$X7>`UgoxVr6TJjpgna2G z`VAcT9ye$M+rdt-3j{zUN;=gX?^9x=B`G>%RE2xgp?@!PJTBkvt;e+^(|LU=tJ6%%6 zt9N)9bE2yA+7#y-6LYF_yv}`Qx9XU9>N#xnU7#9W;x)C92r1WO#WS=eZ5e7r*Cv13 zoTn_g1%hAKuTL-!A~mdwH`2^GM7D81gl=uWX%{xEiEqzN>*}p{HjbNC_4;lXpRk&O cQya{O(6n16iv~v@-o-E*EwfT+@3ll2?gAe18$p;-3H?#TkFagC4Hai7wVV=AxtOCf9*xVMn zgmIF4+~kgMKcKafZ-grWsm*`FcQ67?)tY=S^1);#7mdx&qQ0&w>0PRQHY%0KT7} Az5oCK diff --git a/memory/memories.db-wal b/memory/memories.db-wal index 032c9c9c229b2e09cc4e24f4e00947f72800b960..6210fd1a9bcf851182dfc90481ed294feb652ba3 100644 GIT binary patch delta 50041 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 POd;$qKCo^2rThLDdS4Jw delta 27615 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�GsJzaw#^`q0{kaIF|?m39}h0NzCbon430X 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 Z0-r7M*$SU|_-u{OHUk&-Zo6vf{{vw1o!tNc diff --git a/skills/dogfood/SKILL.md b/skills/dogfood/SKILL.md new file mode 100644 index 000000000..be25ce58d --- /dev/null +++ b/skills/dogfood/SKILL.md @@ -0,0 +1,216 @@ +--- +name: dogfood +description: Systematically explore and test a web application to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", "test this app/site/platform", or review the quality of a web application. Produces a structured report with full reproduction evidence -- step-by-step screenshots, repro videos, and detailed repro steps for every issue -- so findings can be handed directly to the responsible teams. +allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*) +--- + +# Dogfood + +Systematically explore a web application, find issues, and produce a report with full reproduction evidence for every finding. + +## Setup + +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 user@example.com` | + +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. + +Always use `agent-browser` directly -- never `npx agent-browser`. The direct binary uses the fast Rust client. `npx` routes through Node.js and is significantly slower. + +## Workflow + +``` +1. Initialize Set up session, output dirs, report file +2. Authenticate Sign in if needed, save state +3. Orient Navigate to starting point, take initial snapshot +4. Explore Systematically visit pages and test features +5. Document Screenshot + record each issue as found +6. Wrap up Update summary counts, close session +``` + +### 1. Initialize + +```bash +mkdir -p {OUTPUT_DIR}/screenshots {OUTPUT_DIR}/videos +``` + +Copy the report template into the output directory and fill in the header fields: + +```bash +cp {SKILL_DIR}/templates/dogfood-report-template.md {OUTPUT_DIR}/report.md +``` + +Start a named session: + +```bash +agent-browser --session {SESSION} open {TARGET_URL} +agent-browser --session {SESSION} wait --load networkidle +``` + +### 2. Authenticate + +If the app requires login: + +```bash +agent-browser --session {SESSION} snapshot -i +# Identify login form refs, fill credentials +agent-browser --session {SESSION} fill @e1 "{EMAIL}" +agent-browser --session {SESSION} fill @e2 "{PASSWORD}" +agent-browser --session {SESSION} click @e3 +agent-browser --session {SESSION} wait --load networkidle +``` + +For OTP/email codes: ask the user, wait for their response, then enter the code. + +After successful login, save state for potential reuse: + +```bash +agent-browser --session {SESSION} state save {OUTPUT_DIR}/auth-state.json +``` + +### 3. Orient + +Take an initial annotated screenshot and snapshot to understand the app structure: + +```bash +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/initial.png +agent-browser --session {SESSION} snapshot -i +``` + +Identify the main navigation elements and map out the sections to visit. + +### 4. Explore + +Read [references/issue-taxonomy.md](references/issue-taxonomy.md) for the full list of what to look for and the exploration checklist. + +**Strategy -- work through the app systematically:** + +- Start from the main navigation. Visit each top-level section. +- Within each section, test interactive elements: click buttons, fill forms, open dropdowns/modals. +- Check edge cases: empty states, error handling, boundary inputs. +- Try realistic end-to-end workflows (create, edit, delete flows). +- Check the browser console for errors periodically. + +**At each page:** + +```bash +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 +``` + +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. + +### 5. Document Issues (Repro-First) + +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:** + +#### Interactive / behavioral issues (functional, ux, console errors on action) + +These require user interaction to reproduce -- use full repro with video and step-by-step screenshots: + +1. **Start a repro video** _before_ reproducing: + +```bash +agent-browser --session {SESSION} record start {OUTPUT_DIR}/videos/issue-{NNN}-repro.webm +``` + +2. **Walk through the steps at human pace.** Pause 1-2 seconds between actions so the video is watchable. Take a screenshot at each step: + +```bash +agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-1.png +sleep 1 +# Perform action (click, fill, etc.) +sleep 1 +agent-browser --session {SESSION} screenshot {OUTPUT_DIR}/screenshots/issue-{NNN}-step-2.png +sleep 1 +# ...continue until the issue manifests +``` + +3. **Capture the broken state.** Pause so the viewer can see it, then take an annotated screenshot: + +```bash +sleep 2 +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}-result.png +``` + +4. **Stop the video:** + +```bash +agent-browser --session {SESSION} record stop +``` + +5. Write numbered repro steps in the report, each referencing its screenshot. + +#### Static / visible-on-load issues (typos, placeholder text, clipped text, misalignment, console errors on load) + +These are visible without interaction -- a single annotated screenshot is sufficient. No video, no multi-step repro: + +```bash +agent-browser --session {SESSION} screenshot --annotate {OUTPUT_DIR}/screenshots/issue-{NNN}.png +``` + +Write a brief description and reference the screenshot in the report. Set **Repro Video** to `N/A`. + +--- + +**For all issues:** + +1. **Append to the report immediately.** Do not batch issues for later. Write each one as you find it so nothing is lost if the session is interrupted. + +2. **Increment the issue counter** (ISSUE-001, ISSUE-002, ...). + +### 6. Wrap Up + +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: + +1. Re-read the report and update the summary severity counts so they match the actual issues. Every `### ISSUE-` block must be reflected in the totals. +2. Close the session: + +```bash +agent-browser --session {SESSION} close +``` + +3. Tell the user the report is ready and summarize findings: total issues, breakdown by severity, and the most critical items. + +## Guidance + +- **Repro is everything.** Every issue needs proof -- but match the evidence to the issue. Interactive bugs need video and step-by-step screenshots. Static bugs (typos, placeholder text, visual glitches visible on load) only need a single annotated screenshot. +- **Don't record video for static issues.** A typo or clipped text doesn't benefit from a video. Save video for issues that involve user interaction, timing, or state changes. +- **For interactive issues, screenshot each step.** Capture the before, the action, and the after -- so someone can see the full sequence. +- **Write repro steps that map to screenshots.** Each numbered step in the report should reference its corresponding screenshot. A reader should be able to follow the steps visually without touching a browser. +- **Be thorough but use judgment.** You are not following a test script -- you are exploring like a real user would. If something feels off, investigate. +- **Write findings incrementally.** Append each issue to the report as you discover it. If the session is interrupted, findings are preserved. Never batch all issues for the end. +- **Never delete output files.** Do not `rm` screenshots, videos, or the report mid-session. Do not close the session and restart. Work forward, not backward. +- **Never read the target app's source code.** You are testing as a user, not auditing code. Do not read HTML, JS, or config files of the app under test. All findings must come from what you observe in the browser. +- **Check the console.** Many issues are invisible in the UI but show up as JS errors or failed requests. +- **Test like a user, not a robot.** Try common workflows end-to-end. Click things a real user would click. Enter realistic data. +- **Type like a human.** When filling form fields during video recording, use `type` instead of `fill` -- it types character-by-character. Use `fill` only outside of video recording when speed matters. +- **Pace repro videos for humans.** Add `sleep 1` between actions and `sleep 2` before the final result screenshot. Videos should be watchable at 1x speed -- a human reviewing the report needs to see what happened, not a blur of instant state changes. +- **Be efficient with commands.** Batch multiple `agent-browser` commands in a single shell call when they are independent (e.g., `agent-browser ... screenshot ... && agent-browser ... console`). Use `agent-browser --session {SESSION} scroll down 300` for scrolling -- do not use `key` or `evaluate` to scroll. + +## References + +| Reference | When to Read | +|-----------|--------------| +| [references/issue-taxonomy.md](references/issue-taxonomy.md) | Start of session -- calibrate what to look for, severity levels, exploration checklist | + +## Templates + +| Template | Purpose | +|----------|---------| +| [templates/dogfood-report-template.md](templates/dogfood-report-template.md) | Copy into output directory as the report file | diff --git a/skills/dogfood/references/issue-taxonomy.md b/skills/dogfood/references/issue-taxonomy.md new file mode 100644 index 000000000..c3edbe573 --- /dev/null +++ b/skills/dogfood/references/issue-taxonomy.md @@ -0,0 +1,109 @@ +# Issue Taxonomy + +Reference for categorizing issues found during dogfooding. Read this at the start of a dogfood session to calibrate what to look for. + +## Contents + +- [Severity Levels](#severity-levels) +- [Categories](#categories) +- [Exploration Checklist](#exploration-checklist) + +## Severity Levels + +| Severity | Definition | +|----------|------------| +| **critical** | Blocks a core workflow, causes data loss, or crashes the app | +| **high** | Major feature broken or unusable, no workaround | +| **medium** | Feature works but with noticeable problems, workaround exists | +| **low** | Minor cosmetic or polish issue | + +## Categories + +### Visual / UI + +- Layout broken or misaligned elements +- Overlapping or clipped text +- Inconsistent spacing, padding, or margins +- Missing or broken icons/images +- Dark mode / light mode rendering issues +- Responsive layout problems (viewport sizes) +- Z-index stacking issues (elements hidden behind others) +- Font rendering issues (wrong font, size, weight) +- Color contrast problems +- Animation glitches or jank + +### Functional + +- Broken links (404, wrong destination) +- Buttons or controls that do nothing on click +- Form validation that rejects valid input or accepts invalid input +- Incorrect redirects +- Features that fail silently +- State not persisted when expected (lost on refresh, navigation) +- Race conditions (double-submit, stale data) +- Broken search or filtering +- Pagination issues +- File upload/download failures + +### UX + +- Confusing or unclear navigation +- Missing loading indicators or feedback after actions +- Slow or unresponsive interactions (>300ms perceived delay) +- Unclear error messages +- Missing confirmation for destructive actions +- Dead ends (no way to go back or proceed) +- Inconsistent patterns across similar features +- Missing keyboard shortcuts or focus management +- Unintuitive defaults +- Missing empty states or unhelpful empty states + +### Content + +- Typos or grammatical errors +- Outdated or incorrect text +- Placeholder or lorem ipsum content left in +- Truncated text without tooltip or expansion +- Missing or wrong labels +- Inconsistent terminology + +### Performance + +- Slow page loads (>3s) +- Janky scrolling or animations +- Large layout shifts (content jumping) +- Excessive network requests (check via console/network) +- Memory leaks (page slows over time) +- Unoptimized images (large file sizes) + +### Console / Errors + +- JavaScript exceptions in console +- Failed network requests (4xx, 5xx) +- Deprecation warnings +- CORS errors +- Mixed content warnings +- Unhandled promise rejections + +### Accessibility + +- Missing alt text on images +- Unlabeled form inputs +- Poor keyboard navigation (can't tab to elements) +- Focus traps +- Insufficient color contrast +- Missing ARIA attributes on dynamic content +- Screen reader incompatible patterns + +## Exploration Checklist + +Use this as a guide for what to test on each page/feature: + +1. **Visual scan** -- Take an annotated screenshot. Look for layout, alignment, and rendering issues. +2. **Interactive elements** -- Click every button, link, and control. Do they work? Is there feedback? +3. **Forms** -- Fill and submit. Test empty submission, invalid input, and edge cases. +4. **Navigation** -- Follow all navigation paths. Check breadcrumbs, back button, deep links. +5. **States** -- Check empty states, loading states, error states, and full/overflow states. +6. **Console** -- Check for JS errors, failed requests, and warnings. +7. **Responsiveness** -- If relevant, test at different viewport sizes. +8. **Auth boundaries** -- Test what happens when not logged in, with different roles if applicable. diff --git a/skills/dogfood/templates/dogfood-report-template.md b/skills/dogfood/templates/dogfood-report-template.md new file mode 100644 index 000000000..a7732a409 --- /dev/null +++ b/skills/dogfood/templates/dogfood-report-template.md @@ -0,0 +1,53 @@ +# Dogfood Report: {APP_NAME} + +| Field | Value | +|-------|-------| +| **Date** | {DATE} | +| **App URL** | {URL} | +| **Session** | {SESSION_NAME} | +| **Scope** | {SCOPE} | + +## Summary + +| Severity | Count | +|----------|-------| +| Critical | 0 | +| High | 0 | +| Medium | 0 | +| Low | 0 | +| **Total** | **0** | + +## Issues + + + +### ISSUE-001: {Short title} + +| Field | Value | +|-------|-------| +| **Severity** | critical / high / medium / low | +| **Category** | visual / functional / ux / content / performance / console / accessibility | +| **URL** | {page URL where issue was found} | +| **Repro Video** | {path to video, or N/A for static issues} | + +**Description** + +{What is wrong, what was expected, and what actually happened.} + +**Repro Steps** + + + +1. Navigate to {URL} + ![Step 1](screenshots/issue-001-step-1.png) + +2. {Action -- e.g., click "Settings" in the sidebar} + ![Step 2](screenshots/issue-001-step-2.png) + +3. {Action -- e.g., type "test" in the search field and press Enter} + ![Step 3](screenshots/issue-001-step-3.png) + +4. **Observe:** {what goes wrong -- e.g., the page shows a blank white screen instead of search results} + ![Result](screenshots/issue-001-result.png) + +---