[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71T0CPCF04CQQ4FGRKJTYB5":3,"skill-same:01M71T0CPCF04CQQ4FGRKJTYB5":104},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":68,"commitSha":69,"skillDirectory":70,"forksCount":71,"repositoryHtmlUrl":72,"repositoryHomepageUrl":6,"ownerHtmlUrl":73,"ownerBlogUrl":74,"ownerDescription":75,"updatedAt":76,"install":77,"resources":89},"01M71T0CPCF04CQQ4FGRKJTYB5","qa",null,"Use for headless-browser QA against a running app — systematic bug-hunting with optional fixes, post-deploy canary monitoring, performance benchmarking, ad-hoc browser interaction, cookie import, or an autonomous full-site visual crawl with per-route findings filed as issues. For a judgment-based design critique, use \u002Fclaudna:audit design; for static code-level performance analysis, use \u002Fclaudna:audit frontend-perf. Replaces \u002Fvisual-crawl.","Claudfather\u002FclauDNA","Claudfather","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F281278891?v=4","01M71SX82K0TBGQ394AB2G1T5Z","01M71SX83CE1S8YC06K9P3P962",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[5,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"deep","cookie","static","headless","which","mkdir","lsof","ls","URL","app","frontend","local","crawl","auto","autonomous","Bash","issues","performance","design","2026-11-10 13:02:02",false,"---\nname: qa\nuser-invocable: true\ndescription: \"Use for headless-browser QA against a running app — systematic bug-hunting with optional fixes, post-deploy canary monitoring, performance benchmarking, ad-hoc browser interaction, cookie import, or an autonomous full-site visual crawl with per-route findings filed as issues. For a judgment-based design critique, use \u002Fclaudna:audit design; for static code-level performance analysis, use \u002Fclaudna:audit frontend-perf. Replaces \u002Fvisual-crawl.\"\nargument-hint: \"[test|report|canary|benchmark|browse|cookies|crawl] [--auto] [--deep] [--output github|session] [--url \u003Cbase-url>] [--local] [focus-area]\"\nallowed-tools:\n  - \"Bash(which *)\"\n  - \"Bash(test *)\"\n  - \"Bash(lsof *)\"\n  - \"Bash(ls *)\"\n  - \"Bash(mkdir *)\"\n  - \"Bash(cat *)\"\n  - \"Bash(git status *)\"\n  - \"Bash(git diff *)\"\n  - \"Bash(gh issue view *)\"\n  - \"Read(*)\"\n  - \"Write(*)\"\n  - \"Edit(*)\"\n  - \"Glob(*)\"\n  - \"Grep(*)\"\n  - \"Task(*)\"\n  - \"Agent(*)\"\n  - \"EnterPlanMode\"\n  - \"ExitPlanMode\"\n---\n\n# QA\n\n> **Codex:** Read `..\u002F_shared\u002Fcodex-tools.md` before following this skill. Apply its tool, root and dispatch mappings throughout.\n\nBrowser-automation framework with modes for different QA tasks. Uses a fast headless browser (~100ms per command) for navigating, interacting, screenshotting, and verifying state.\n\nFor PR visual evidence in test, report or browse mode, read\n`..\u002F_shared\u002Fvisual-evidence.md` §1 before capture. Reuse the shared evidence decision\nand reason, or choose them from the change's risk and claims. `none` creates no\nmedia packet or capture\u002Fupload obligation; explicitly requested browser QA still\nruns. For selected media, capture the actual app with source provenance, carry the\ndecision and packet to shipping, and reuse its publication, media-specific\nverification and automatic finalizer. Screenshots do not require recording.\n\n## Mode dispatch\n\nArguments to dispatch (first token = mode, the rest belong to the mode): $ARGUMENTS\n\n| Token | Mode | When |\n|-------|------|------|\n| `test` | Test-and-fix | Systematically QA the app, find bugs, fix them, re-verify (iterative loop) |\n| `report` | Report-only | Find bugs and produce a structured report; never modify code |\n| `canary` | Canary | Post-deploy monitoring; baseline + diff to catch regressions |\n| `benchmark` | Benchmark | Performance regression detection (Core Web Vitals, bundle size, load time) |\n| `browse` | Browse | General-purpose browser interactions (navigate, click, screenshot, verify) |\n| `cookies` | Cookie-setup | Import cookies from real browser for authenticated testing |\n| `crawl` | Crawl | Autonomous route discovery + screenshot + per-route checks + findings filed via `publish` |\n\n**No mode token → infer from the natural-language triggers in each mode's own section below** (\"qa\"\u002F\"test this site\" → `test`; \"canary\"\u002F\"monitor deploy\" → `canary`; etc. — see each mode's **When:** line). **Headless \u002F non-interactive contexts: the mode token is required** — never inferred.\n\nOnly **Crawl mode** supports `--auto` (see \"Autonomous Mode\" below) — the other six modes are interactive-only.\n\n---\n\n## Test-and-fix mode\n\n**When:** user says \"qa\", \"test this site\", \"find bugs and fix them\", \"test and fix.\"\n\n**Process:**\n\n1. **Health baseline.** Snapshot the current state: tests pass\u002Ffail, lint clean, type-check clean, build succeeds. Record a score 0-10.\n2. **Discover.** Either walk the app's key flows (golden path + top edge cases) OR if a URL is provided, navigate and interact.\n3. **Find bugs.** Each bug gets severity (Critical \u002F High \u002F Medium \u002F Cosmetic), repro steps and expected vs. actual. Attach media only as selected by the shared evidence gate.\n4. **Fix iteratively.** Reproduce → fix → verify with relevant checks → commit atomically. Add a regression test only for a concrete failure existing checks do not adequately cover. One bug → one commit.\n5. **Re-verify.** Re-run the QA flow. Did fixes introduce regressions? Repeat.\n6. **Report.** Before\u002Fafter health score, fix evidence, ship-readiness summary.\n\nThree tiers based on user's appetite:\n- **Quick** — Critical + High only\n- **Standard** — + Medium\n- **Exhaustive** — + Cosmetic\n\n---\n\n## Report-only mode\n\n**When:** user says \"qa report only\", \"just check for bugs\", \"don't fix anything.\"\n\nSame as test-and-fix but stops at step 3. Deliverable is a structured report (bug list + selected evidence + repro). No code changes.\n\n---\n\n## Canary mode\n\n**When:** user says \"canary\", \"monitor deploy\", \"verify deploy\", \"watch production.\"\n\n**Process:**\n\n1. Before deploy, snapshot baseline: key pages' screenshots, Core Web Vitals, console error counts.\n2. Deploy (the user handles the deploy; this skill doesn't deploy).\n3. After deploy, periodically (every ~2 min) re-capture the same pages.\n4. Compare against baseline. Flag anomalies:\n   - New console errors\n   - LCP \u002F CLS \u002F FID regressions >20%\n   - Page load failures\n   - Screenshot diff >10% (may indicate layout break)\n5. Alert on anomaly; report all-clear after N clean cycles.\n\n---\n\n## Benchmark mode\n\n**When:** user says \"benchmark\", \"performance\", \"page speed\", \"check bundle size\", \"web vitals.\"\n\n**Process:**\n\n1. Establish baseline (first run OR from a previous commit\u002Fdeploy).\n2. Measure: load time, Core Web Vitals (LCP, FID, CLS), total bundle size per resource type, console errors.\n3. Compare to baseline. Flag regressions >5%.\n4. Present a before\u002Fafter table. Suggest specific fixes for regressions.\n\n---\n\n## Browse mode\n\n**When:** user says \"open in browser\", \"screenshot this page\", \"click this button then verify X\", \"test this form.\"\n\nA general-purpose browser automation interface. Navigate, interact with elements, take screenshots, verify assertions, handle dialogs, test forms\u002Fuploads.\n\nNo process — it's a tool. Agent picks commands based on task.\n\n---\n\n## Cookie-setup mode\n\n**When:** user needs to test authenticated pages.\n\n**Process:**\n\n1. Open a picker UI showing cookie domains from the user's real Chromium browser.\n2. User selects which domains to import.\n3. Import those cookies into the headless session.\n4. Subsequent QA\u002Fbrowse commands are authenticated.\n\nUse before test-and-fix, report-only, canary, or crawl mode if auth is required.\n\n---\n\n## Crawl mode\n\n**When:** user says \"visual crawl\", \"crawl the site\", \"screenshot every page\", \"test the whole frontend.\"\n\nSystematic visual crawl of a frontend application. Discovers routes, screenshots every page at three viewports, tests interactions for errors, compares observed styles against design tokens, and files GitHub issues with screenshot evidence for every finding.\n\nRuns on a real Playwright engine. Three support files in this directory carry the mechanics:\n- `deep-crawl.md` — copy-pasteable scripts: screenshot recipe (`device_scale_factor=2`, networkidle, full-page), console-error collector, the `--deep` interactive harness (click ≤30 buttons \u002F fill ≤10 forms with before\u002Fafter diffs), and the chat-simulation driver.\n- `crawl-checklist.md` — the 7 per-route check groups (render \u002F console \u002F link \u002F interaction \u002F responsive \u002F empty-states \u002F a11y) with concrete thresholds (body ≥16px, touch ≥44px, WCAG AA 4.5:1).\n- `design-token-rules.md` — token extraction JS + ΔE2000 perceptual color-distance thresholds for drift detection.\n\n### Arguments\n\nParse `$ARGUMENTS` at invocation:\n- `--auto`: Fully non-interactive. Implies `--output github`. Crawl, screenshot, test, file issues, return summary.\n- `--deep`: Full interactive testing. Extends the interaction-testing step with: click every button\u002Flink and verify result, fill and submit forms, simulate chat conversations with sample queries, screenshot before\u002Fafter each interaction, report broken flows. Uses Playwright for interaction testing (see `deep-crawl.md`).\n- `--output github`: Write findings as GitHub Issues (default). See output guide (`..\u002F_shared\u002Foutput-guide.md`).\n- `--output session`: Present findings in chat only, no persistence.\n- `--url \u003Cbase-url>`: Crawl a deployed URL (e.g., `--url https:\u002F\u002Fapp.example.com`).\n- `--local`: Spin up a local dev server from the project directory and crawl it.\n- Remaining text is a focus area or constraint (e.g., \"only the dashboard pages\").\n\nIf neither `--url` nor `--local` is specified, ask the user.\n\n### When NOT to use this mode\n\n- For design critique and enhancement proposals → use `\u002Fclaudna:audit design`\n- For frontend performance (flickering, re-renders, layout shifts) → use `\u002Fclaudna:audit frontend-perf`\n- For code quality\u002Ftech debt → use `\u002Fclaudna:audit tech-debt`\n- For security vulnerabilities → use `\u002Fclaudna:audit security`\n\n**Enter Plan Mode.** Call `EnterPlanMode`. All discovery and crawl steps are read-only. If declined, proceed by convention.\n\n### Process\n\n1. **Setup.** Scratch dir: make it with `mktemp -d \"${TMPDIR:-\u002Ftmp}\u002Fqa-crawl.XXXXXX\"` (`\u003Cscratch>` below). Create subdirectories: `screenshots\u002F`, `research\u002F`, `console-logs\u002F`. Detect Chrome\u002FChromium: `which chromium`, `which google-chrome`, `which chromium-browser` in parallel.\n\n2. **Determine base URL.**\n   - **If `--url \u003Cbase-url>`:** Use directly. Verify reachable with `curl -sI \u003Cbase-url>`. That is the base URL you were given; a route found on the site never goes on a command line (`deep-crawl.md`, the bundled runner).\n   - **If `--local`:** Read `package.json` for start\u002Fdev scripts and port (use the port only if it matches `^[0-9]{1,5}$`); check if already running (`lsof -i :\u003Cport>`, `curl -s http:\u002F\u002Flocalhost:\u003Cport>`); if not, start it in background; poll with curl (max 30s); base URL = `http:\u002F\u002Flocalhost:\u003Cport>`.\n   - **If neither:** Ask the user (skip in `--auto` — error out).\n\n3. **Route discovery.** Launch **Explore subagents** in parallel — one scans for file-based routes (Next.js App\u002FPages Router, React Router, `routes\u002F`\u002F`views\u002F`), one checks `sitemap.xml`\u002F`robots.txt`\u002Fhomepage `\u003Ca href>` links. Merge into a deduplicated list. Present to user for confirmation (skip in `--auto`).\n\n4. **Screenshot crawl.** Per `deep-crawl.md`'s screenshot recipe: capture desktop (1440×900) \u002F tablet (768×1024) \u002F mobile (375×812) for each route, in parallel per-route, sequential across routes. Collect console errors and page exceptions per route.\n\n5. **Interaction testing.** Per `deep-crawl.md`'s standard interaction pass: enumerate interactive elements, dead-link check, button click test, empty-state detection. If `--deep`: run the deep-crawl harness and chat-simulation driver from `deep-crawl.md`.\n\n6. **Design token comparison.** Per `design-token-rules.md`: extract observed tokens (fonts, colors, sizes, spacing) at desktop viewport; compare against the project's reference tokens (or fallback defaults); flag drift (ΔE2000 > 5 for colors).\n\n7. **Findings compilation.** Classify per `crawl-checklist.md`'s categories and priority mapping (Critical \u002F High \u002F Medium \u002F Low).\n\n8. **Output.** **Exit Plan Mode** (`ExitPlanMode`).\n   - **`--output github` or `--auto`:** write each finding as a doc (frontmatter + Section 4 body skeleton; group related findings per `crawl-checklist.md`'s grouping rules), `tags:` including `auto-audit`, `visual-crawl`, a category label, a priority label; delegate each to `\u002Fclaudna:publish \u003Cfile> --to github-issue --repo \u003Crepo>`. Finish with a batch summary doc (output guide §4.6).\n   - **`--output session`:** present findings in chat with inline screenshot references. Stay in Plan Mode.\n\nReturn structured summary:\n```\nVisual Crawl Summary\n════════════════════════════════════════════════════\nRoutes crawled: N\nScreenshots taken: N (N routes × 3 viewports)\nConsole errors found: N\nDead links found: N\nInteraction failures: N\nDesign token violations: N\nGitHub issues created: N\n════════════════════════════════════════════════════\n```\n\n### Autonomous Mode (`--auto`)\n\nScoped to **Crawl mode only** — the other six modes have no `--auto` contract.\n\nWhen `--auto` is set:\n1. Skip Plan Mode — go straight to crawl\n2. Skip user confirmation gates\n3. Implies `--output github`\n4. Must have `--url` or `--local` (cannot prompt for URL)\n5. Create GitHub Issues for all findings at Medium priority or above\n6. **Emit the structured-result shape** per `..\u002F_shared\u002Forchestration-guide.md` §10.C as the FINAL output of the run — a fenced ```json block with no text after:\n\n```json\n{\n  \"skill\": \"qa\",\n  \"outcome\": \"completed\",\n  \"artifacts\": {\n    \"mode\": \"crawl\",\n    \"issues_created\": [\"...\"],\n    \"routes_crawled\": 12,\n    \"screenshots_taken\": 36,\n    \"console_errors\": 3,\n    \"dead_links\": 1,\n    \"interaction_failures\": 0,\n    \"design_token_violations\": 5,\n    \"scratch_dir\": \"\u003Cscratch>\u002F\"\n  },\n  \"summary\": \"\u003C2-3 line digest>\",\n  \"next\": null,\n  \"errors\": [],\n  \"blocker_description\": null\n}\n```\n\n- `outcome` is `completed` on success, `blocked` if base URL is unreachable or no routes were discovered.\n- `--deep` mode produces additional artifacts; if `--deep` was used, add `deep_findings: N` to artifacts.\n\n`--auto` and `--deep` can be combined: `--auto --deep --url https:\u002F\u002Fapp.example.com` runs a full interactive crawl with issue filing, no human in the loop.\n\n---\n\n## Notes\n\n- **One screenshot per Bash call.** No shell operators (`&&`, `||`, `;`, `|`). Playwright commands are single-shot.\n- **Sequential routes, parallel viewports.** Don't open multiple browser instances for different routes simultaneously — sequential keeps memory pressure low and avoids resource exhaustion on constrained hardware.\n- **Screenshots are evidence.** Every crawl-mode finding must reference at least one screenshot file.\n- **Don't fix code in report-only or crawl mode.** These identify problems. Use `\u002Fclaudna:build`, test-and-fix mode, or manual fixes afterward.\n- **Respect robots.txt.** If a deployed URL has `Disallow` rules, honor them unless the user explicitly overrides.\n- **Timeout handling.** If a page doesn't load within 30 seconds, log a finding (possible server issue) and continue to next route.\n- **Subagents for research.** Use Explore subagents for route discovery and codebase analysis. Use general-purpose subagents for disk writes. Keep orchestrator context lean.\n- `..\u002F_shared\u002Forchestration-guide.md` §11 for shared reminders.\n\n---\n\n## Output Targets (crawl mode)\n\nFollow the output guide at `..\u002F_shared\u002Foutput-guide.md`:\n- For `github` (default): write each finding as a doc (frontmatter + Section 4 body skeleton) with `tags:` including `visual-crawl` + a category label, then delegate to `\u002Fclaudna:publish \u003Cfile> --to github-issue --repo \u003Crepo>` (publish dedups + labels).\n- For `session`: produce the doc, then `\u002Fclaudna:publish \u003Cfile> --to session` prints it to chat (Section 5)\n","# QA\n\n> **Codex:** Read `..\u002F_shared\u002Fcodex-tools.md` before following this skill. Apply its tool, root and dispatch mappings throughout.\n\nBrowser-automation framework with modes for different QA tasks. Uses a fast headless browser (~100ms per command) for navigating, interacting, screenshotting, and verifying state.\n\nFor PR visual evidence in test, report or browse mode, read\n`..\u002F_shared\u002Fvisual-evidence.md` §1 before capture. Reuse the shared evidence decision\nand reason, or choose them from the change's risk and claims. `none` creates no\nmedia packet or capture\u002Fupload obligation; explicitly requested browser QA still\nruns. For selected media, capture the actual app with source provenance, carry the\ndecision and packet to shipping, and reuse its publication, media-specific\nverification and automatic finalizer. Screenshots do not require recording.\n\n## Mode dispatch\n\nArguments to dispatch (first token = mode, the rest belong to the mode): $ARGUMENTS\n\n| Token | Mode | When |\n|-------|------|------|\n| `test` | Test-and-fix | Systematically QA the app, find bugs, fix them, re-verify (iterative loop) |\n| `report` | Report-only | Find bugs and produce a structured report; never modify code |\n| `canary` | Canary | Post-deploy monitoring; baseline + diff to catch regressions |\n| `benchmark` | Benchmark | Performance regression detection (Core Web Vitals, bundle size, load time) |\n| `browse` | Browse | General-purpose browser interactions (navigate, click, screenshot, verify) |\n| `cookies` | Cookie-setup | Import cookies from real browser for authenticated testing |\n| `crawl` | Crawl | Autonomous route discovery + screenshot + per-route checks + findings filed via `publish` |\n\n**No mode token → infer from the natural-language triggers in each mode's own section below** (\"qa\"\u002F\"test this site\" → `test`; \"canary\"\u002F\"monitor deploy\" → `canary`; etc. — see each mode's **When:** line). **Headless \u002F non-interactive contexts: the mode token is required** — never inferred.\n\nOnly **Crawl mode** supports `--auto` (see \"Autonomous Mode\" below) — the other six modes are interactive-only.\n\n---\n\n## Test-and-fix mode\n\n**When:** user says \"qa\", \"test this site\", \"find bugs and fix them\", \"test and fix.\"\n\n**Process:**\n\n1. **Health baseline.** Snapshot the current state: tests pass\u002Ffail, lint clean, type-check clean, build succeeds. Record a score 0-10.\n2. **Discover.** Either walk the app's key flows (golden path + top edge cases) OR if a URL is provided, navigate and interact.\n3. **Find bugs.** Each bug gets severity (Critical \u002F High \u002F Medium \u002F Cosmetic), repro steps and expected vs. actual. Attach media only as selected by the shared evidence gate.\n4. **Fix iteratively.** Reproduce → fix → verify with relevant checks → commit atomically. Add a regression test only for a concrete failure existing checks do not adequately cover. One bug → one commit.\n5. **Re-verify.** Re-run the QA flow. Did fixes introduce regressions? Repeat.\n6. **Report.** Before\u002Fafter health score, fix evidence, ship-readiness summary.\n\nThree tiers based on user's appetite:\n- **Quick** — Critical + High only\n- **Standard** — + Medium\n- **Exhaustive** — + Cosmetic\n\n---\n\n## Report-only mode\n\n**When:** user says \"qa report only\", \"just check for bugs\", \"don't fix anything.\"\n\nSame as test-and-fix but stops at step 3. Deliverable is a structured report (bug list + selected evidence + repro). No code changes.\n\n---\n\n## Canary mode\n\n**When:** user says \"canary\", \"monitor deploy\", \"verify deploy\", \"watch production.\"\n\n**Process:**\n\n1. Before deploy, snapshot baseline: key pages' screenshots, Core Web Vitals, console error counts.\n2. Deploy (the user handles the deploy; this skill doesn't deploy).\n3. After deploy, periodically (every ~2 min) re-capture the same pages.\n4. Compare against baseline. Flag anomalies:\n   - New console errors\n   - LCP \u002F CLS \u002F FID regressions >20%\n   - Page load failures\n   - Screenshot diff >10% (may indicate layout break)\n5. Alert on anomaly; report all-clear after N clean cycles.\n\n---\n\n## Benchmark mode\n\n**When:** user says \"benchmark\", \"performance\", \"page speed\", \"check bundle size\", \"web vitals.\"\n\n**Process:**\n\n1. Establish baseline (first run OR from a previous commit\u002Fdeploy).\n2. Measure: load time, Core Web Vitals (LCP, FID, CLS), total bundle size per resource type, console errors.\n3. Compare to baseline. Flag regressions >5%.\n4. Present a before\u002Fafter table. Suggest specific fixes for regressions.\n\n---\n\n## Browse mode\n\n**When:** user says \"open in browser\", \"screenshot this page\", \"click this button then verify X\", \"test this form.\"\n\nA general-purpose browser automation interface. Navigate, interact with elements, take screenshots, verify assertions, handle dialogs, test forms\u002Fuploads.\n\nNo process — it's a tool. Agent picks commands based on task.\n\n---\n\n## Cookie-setup mode\n\n**When:** user needs to test authenticated pages.\n\n**Process:**\n\n1. Open a picker UI showing cookie domains from the user's real Chromium browser.\n2. User selects which domains to import.\n3. Import those cookies into the headless session.\n4. Subsequent QA\u002Fbrowse commands are authenticated.\n\nUse before test-and-fix, report-only, canary, or crawl mode if auth is required.\n\n---\n\n## Crawl mode\n\n**When:** user says \"visual crawl\", \"crawl the site\", \"screenshot every page\", \"test the whole frontend.\"\n\nSystematic visual crawl of a frontend application. Discovers routes, screenshots every page at three viewports, tests interactions for errors, compares observed styles against design tokens, and files GitHub issues with screenshot evidence for every finding.\n\nRuns on a real Playwright engine. Three support files in this directory carry the mechanics:\n- `deep-crawl.md` — copy-pasteable scripts: screenshot recipe (`device_scale_factor=2`, networkidle, full-page), console-error collector, the `--deep` interactive harness (click ≤30 buttons \u002F fill ≤10 forms with before\u002Fafter diffs), and the chat-simulation driver.\n- `crawl-checklist.md` — the 7 per-route check groups (render \u002F console \u002F link \u002F interaction \u002F responsive \u002F empty-states \u002F a11y) with concrete thresholds (body ≥16px, touch ≥44px, WCAG AA 4.5:1).\n- `design-token-rules.md` — token extraction JS + ΔE2000 perceptual color-distance thresholds for drift detection.\n\n### Arguments\n\nParse `$ARGUMENTS` at invocation:\n- `--auto`: Fully non-interactive. Implies `--output github`. Crawl, screenshot, test, file issues, return summary.\n- `--deep`: Full interactive testing. Extends the interaction-testing step with: click every button\u002Flink and verify result, fill and submit forms, simulate chat conversations with sample queries, screenshot before\u002Fafter each interaction, report broken flows. Uses Playwright for interaction testing (see `deep-crawl.md`).\n- `--output github`: Write findings as GitHub Issues (default). See output guide (`..\u002F_shared\u002Foutput-guide.md`).\n- `--output session`: Present findings in chat only, no persistence.\n- `--url \u003Cbase-url>`: Crawl a deployed URL (e.g., `--url https:\u002F\u002Fapp.example.com`).\n- `--local`: Spin up a local dev server from the project directory and crawl it.\n- Remaining text is a focus area or constraint (e.g., \"only the dashboard pages\").\n\nIf neither `--url` nor `--local` is specified, ask the user.\n\n### When NOT to use this mode\n\n- For design critique and enhancement proposals → use `\u002Fclaudna:audit design`\n- For frontend performance (flickering, re-renders, layout shifts) → use `\u002Fclaudna:audit frontend-perf`\n- For code quality\u002Ftech debt → use `\u002Fclaudna:audit tech-debt`\n- For security vulnerabilities → use `\u002Fclaudna:audit security`\n\n**Enter Plan Mode.** Call `EnterPlanMode`. All discovery and crawl steps are read-only. If declined, proceed by convention.\n\n### Process\n\n1. **Setup.** Scratch dir: make it with `mktemp -d \"${TMPDIR:-\u002Ftmp}\u002Fqa-crawl.XXXXXX\"` (`\u003Cscratch>` below). Create subdirectories: `screenshots\u002F`, `research\u002F`, `console-logs\u002F`. Detect Chrome\u002FChromium: `which chromium`, `which google-chrome`, `which chromium-browser` in parallel.\n\n2. **Determine base URL.**\n   - **If `--url \u003Cbase-url>`:** Use directly. Verify reachable with `curl -sI \u003Cbase-url>`. That is the base URL you were given; a route found on the site never goes on a command line (`deep-crawl.md`, the bundled runner).\n   - **If `--local`:** Read `package.json` for start\u002Fdev scripts and port (use the port only if it matches `^[0-9]{1,5}$`); check if already running (`lsof -i :\u003Cport>`, `curl -s http:\u002F\u002Flocalhost:\u003Cport>`); if not, start it in background; poll with curl (max 30s); base URL = `http:\u002F\u002Flocalhost:\u003Cport>`.\n   - **If neither:** Ask the user (skip in `--auto` — error out).\n\n3. **Route discovery.** Launch **Explore subagents** in parallel — one scans for file-based routes (Next.js App\u002FPages Router, React Router, `routes\u002F`\u002F`views\u002F`), one checks `sitemap.xml`\u002F`robots.txt`\u002Fhomepage `\u003Ca href>` links. Merge into a deduplicated list. Present to user for confirmation (skip in `--auto`).\n\n4. **Screenshot crawl.** Per `deep-crawl.md`'s screenshot recipe: capture desktop (1440×900) \u002F tablet (768×1024) \u002F mobile (375×812) for each route, in parallel per-route, sequential across routes. Collect console errors and page exceptions per route.\n\n5. **Interaction testing.** Per `deep-crawl.md`'s standard interaction pass: enumerate interactive elements, dead-link check, button click test, empty-state detection. If `--deep`: run the deep-crawl harness and chat-simulation driver from `deep-crawl.md`.\n\n6. **Design token comparison.** Per `design-token-rules.md`: extract observed tokens (fonts, colors, sizes, spacing) at desktop viewport; compare against the project's reference tokens (or fallback defaults); flag drift (ΔE2000 > 5 for colors).\n\n7. **Findings compilation.** Classify per `crawl-checklist.md`'s categories and priority mapping (Critical \u002F High \u002F Medium \u002F Low).\n\n8. **Output.** **Exit Plan Mode** (`ExitPlanMode`).\n   - **`--output github` or `--auto`:** write each finding as a doc (frontmatter + Section 4 body skeleton; group related findings per `crawl-checklist.md`'s grouping rules), `tags:` including `auto-audit`, `visual-crawl`, a category label, a priority label; delegate each to `\u002Fclaudna:publish \u003Cfile> --to github-issue --repo \u003Crepo>`. Finish with a batch summary doc (output guide §4.6).\n   - **`--output session`:** present findings in chat with inline screenshot references. Stay in Plan Mode.\n\nReturn structured summary:\n```\nVisual Crawl Summary\n════════════════════════════════════════════════════\nRoutes crawled: N\nScreenshots taken: N (N routes × 3 viewports)\nConsole errors found: N\nDead links found: N\nInteraction failures: N\nDesign token violations: N\nGitHub issues created: N\n════════════════════════════════════════════════════\n```\n\n### Autonomous Mode (`--auto`)\n\nScoped to **Crawl mode only** — the other six modes have no `--auto` contract.\n\nWhen `--auto` is set:\n1. Skip Plan Mode — go straight to crawl\n2. Skip user confirmation gates\n3. Implies `--output github`\n4. Must have `--url` or `--local` (cannot prompt for URL)\n5. Create GitHub Issues for all findings at Medium priority or above\n6. **Emit the structured-result shape** per `..\u002F_shared\u002Forchestration-guide.md` §10.C as the FINAL output of the run — a fenced ```json block with no text after:\n\n```json\n{\n  \"skill\": \"qa\",\n  \"outcome\": \"completed\",\n  \"artifacts\": {\n    \"mode\": \"crawl\",\n    \"issues_created\": [\"...\"],\n    \"routes_crawled\": 12,\n    \"screenshots_taken\": 36,\n    \"console_errors\": 3,\n    \"dead_links\": 1,\n    \"interaction_failures\": 0,\n    \"design_token_violations\": 5,\n    \"scratch_dir\": \"\u003Cscratch>\u002F\"\n  },\n  \"summary\": \"\u003C2-3 line digest>\",\n  \"next\": null,\n  \"errors\": [],\n  \"blocker_description\": null\n}\n```\n\n- `outcome` is `completed` on success, `blocked` if base URL is unreachable or no routes were discovered.\n- `--deep` mode produces additional artifacts; if `--deep` was used, add `deep_findings: N` to artifacts.\n\n`--auto` and `--deep` can be combined: `--auto --deep --url https:\u002F\u002Fapp.example.com` runs a full interactive crawl with issue filing, no human in the loop.\n\n---\n\n## Notes\n\n- **One screenshot per Bash call.** No shell operators (`&&`, `||`, `;`, `|`). Playwright commands are single-shot.\n- **Sequential routes, parallel viewports.** Don't open multiple browser instances for different routes simultaneously — sequential keeps memory pressure low and avoids resource exhaustion on constrained hardware.\n- **Screenshots are evidence.** Every crawl-mode finding must reference at least one screenshot file.\n- **Don't fix code in report-only or crawl mode.** These identify problems. Use `\u002Fclaudna:build`, test-and-fix mode, or manual fixes afterward.\n- **Respect robots.txt.** If a deployed URL has `Disallow` rules, honor them unless the user explicitly overrides.\n- **Timeout handling.** If a page doesn't load within 30 seconds, log a finding (possible server issue) and continue to next route.\n- **Subagents for research.** Use Explore subagents for route discovery and codebase analysis. Use general-purpose subagents for disk writes. Keep orchestrator context lean.\n- `..\u002F_shared\u002Forchestration-guide.md` §11 for shared reminders.\n\n---\n\n## Output Targets (crawl mode)\n\nFollow the output guide at `..\u002F_shared\u002Foutput-guide.md`:\n- For `github` (default): write each finding as a doc (frontmatter + Section 4 body skeleton) with `tags:` including `visual-crawl` + a category label, then delegate to `\u002Fclaudna:publish \u003Cfile> --to github-issue --repo \u003Crepo>` (publish dedups + labels).\n- For `session`: produce the doc, then `\u002Fclaudna:publish \u003Cfile> --to session` prints it to chat (Section 5)\n",{"name":5,"description":7,"allowed-tools":47,"argument-hint":66,"user-invocable":67},[48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],"Bash(which *)","Bash(test *)","Bash(lsof *)","Bash(ls *)","Bash(mkdir *)","Bash(cat *)","Bash(git status *)","Bash(git diff *)","Bash(gh issue view *)","Read(*)","Write(*)","Edit(*)","Glob(*)","Grep(*)","Task(*)","Agent(*)","EnterPlanMode","ExitPlanMode","[test|report|canary|benchmark|browse|cookies|crawl] [--auto] [--deep] [--output github|session] [--url \u003Cbase-url>] [--local] [focus-area]",true,"main","fc776f04574726e261087dbb521c1831bf0ea9d5","skills\u002Fqa",1,"https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA","https:\u002F\u002Fgithub.com\u002FClaudfather","https:\u002F\u002Fcrog.gg","Rise of the machines","2026-11-08 21:32:41",{"source":8,"skillName":5,"commands":78,"prompt":88,"zipAvailable":67},[79,82,85],{"tool":80,"command":81},"npx","npx skills add Claudfather\u002FclauDNA --skill qa",{"tool":83,"command":84},"bunx","bunx skills add Claudfather\u002FclauDNA --skill qa",{"tool":86,"command":87},"pnpm","pnpm dlx skills add Claudfather\u002FclauDNA --skill qa","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002FSKILL.md",[90,96,100],{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":95},"crawl-checklist.md","REFERENCE","参考文档",3212,"https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002Fcrawl-checklist.md",{"path":97,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":98,"sourceHtmlUrl":99},"deep-crawl.md",8703,"https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002Fdeep-crawl.md",{"path":101,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":102,"sourceHtmlUrl":103},"design-token-rules.md",4187,"https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002Fdesign-token-rules.md",[105,131,141,165,188,205],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":42},"01M71T1STJ99BE1C0JYHCQW0XN","example-review","Use when you want to review pull requests with detailed, actionable feedback on code quality, correctness, and maintainability.","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalid-package\u002FSKILL.md",[],[112,113,114,115,116,117,118,119,38,120,121,122,123,124,125,126,127,128,129,130],"review","example","example review","actionable","pull requests","with","code","correctness","you","when","use","gh","gh pr","diff","view","pr","code quality","feedback","pull",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":42},"01M71T1RMCD30MAJC954JC7580","bad-skill","Too short","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Ffailing-package\u002FSKILL.md",[],[138,139,140],"bad","bad skill","short",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":147,"publishedAt":42},"01M71T1NS97NJ2MQ993V7FBES7","worktree","Use when starting feature work that needs isolation from the current workspace, or when running multiple Claude sessions in parallel on different branches — creates and manages git worktrees. For fetching latest main into every existing worktree and branch across your sibling repos, use \u002Fclaudna:sync-branches instead.","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fworktree\u002FSKILL.md",[],[143,148,149,150,151,152,153,154,155,156,157,158,121,159,68,160,161,162,163,164],"sync","repos","git","isolation","running","sessions","worktrees","work","across","needs","git worktrees","claude sessions","branches","branch","parallel","for","feature",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":42},"01M71T1HNVG1CZY8P904P6RB7P","weigh-development-paths","Use when at a development junction with multiple viable approaches — architecture choices, refactoring strategies, where to put new code, or which pattern to follow. Triggers on 'which approach', 'how should I', 'Option A vs B', or any point where the next step isn't obvious and the wrong choice creates rework.","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fweigh-development-paths\u002FSKILL.md",[],[172,173,174,175,176,177,178,179,180,181,182,183,184,118,121,36,185,186,187,27],"development","weigh development paths","paths","next step","path","refactoring","choice","pattern","at","how","next","strategies","architecture","new","junction","option",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":42},"01M71T1ECV1T5E168GH70AY5B3","verify-completion","Use when about to claim work is complete, fixed, or passing -- requires running verification commands and confirming output before making any success claims.","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fverify-completion\u002FSKILL.md",[],[195,196,197,198,152,199,200,201,155,202,203,204,121,122],"verify completion","verify","claim","complete","true","commands","about","verification","claims","output",{"skillNo":206,"name":207,"nameZh":6,"description":208,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":209,"categories":210,"keywords":214,"publishedAt":42},"01M71T1BC1HA7XQH0Q1H574FYS","vercel","Use for Vercel operations — deploy to production or preview (or roll back), view, filter, or debug deployment logs, or check project status (deployments, domains, env vars, config). Replaces \u002Fvercel-deploy, \u002Fvercel-logs, \u002Fvercel-status.","https:\u002F\u002Fgithub.com\u002FClaudfather\u002FclauDNA\u002Fblob\u002Fmain\u002Fskills\u002Fvercel\u002FSKILL.md",[211],{"categoryNo":212,"categoryName":213,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",[207,215,216,217,218,219,220,221,222,122,223,199,224,225,226,227,163,126,228,229],"inspection","check","filter","env","logs","preview","debug deployment","debug","deployments","domains","deployment","env vars","project","project status","back"]