| url | URL to analyze | yes | — |
| profile | AT profile ID (generic-mobile-web-sr-v0, nvda-desktop-v0, jaws-desktop-v0, voiceover-ios-v0, talkback-android-v0) | no | generic-mobile-web-sr-v0 |
| device | Playwright device name for emulation (e.g., 'iPhone 14') | no | "" |
| format | Output format: json, markdown, console, sarif | no | sarif |
| max-findings | Max detailed findings in the report (CLI --top) | no | "" |
| min-severity | Minimum severity to report: severe|high|moderate|acceptable|strong | no | "" |
| summary-only | Output only summary stats (~500 bytes) | no | false |
| explore | Explore hidden branches (menus, tabs, dialogs, disclosures) | no | false |
| explore-depth | Max exploration depth (CLI default: 3) | no | "" |
| explore-budget | Max exploration actions (CLI default: 50) | no | "" |
| explore-max-targets | Max accumulated targets before stopping exploration (CLI default: 2000) | no | "" |
| explore-timeout | Total exploration timeout in milliseconds; includes probe time when combined with probe (CLI default: 60000) | no | "" |
| allow-action | Space-separated glob patterns for controls explorable despite safety policy | no | "" |
| exclude | Space-separated patterns to exclude targets by name/role | no | "" |
| exclude-selector | Space-separated CSS selectors to exclude from capture | no | "" |
| scope-selector | Space-separated CSS selectors that define subtree(s) to capture, score, and probe | no | "" |
| focus | Space-separated landmarks to focus analysis on | no | "" |
| suppress | Space-separated diagnostic codes to suppress | no | "" |
| probe | Opt-in runtime keyboard probes for interactive targets (focus, activation, Escape recovery, Tab trapping). Adds ~30-60s. | no | false |
| probe-budget | Maximum targets for generic probe (overrides --probe-mode) | no | "" |
| probe-mode | Probe depth preset: fast | standard | deep | no | standard |
| probe-selector | Space-separated CSS selectors that narrow probing without changing capture/scoring | no | "" |
| entry-selector | CSS selector for a trigger to activate before capture/probe | no | "" |
| goal-target | Exact-ish target id, name, role, kind, or selector hint for goal-directed probing | no | "" |
| goal-pattern | Glob pattern matched against target id/name/role/kind/selector for goal-directed probing | no | "" |
| probe-strategy | Probe strategy: all | overlay | composite-widget | form | navigation | modal-return-focus | menu-pattern | no | all |
| validate | Run @guidepup/virtual-screen-reader against the captured DOM for predicted-vs-validated step comparison. Requires jsdom + @guidepup/virtual-screen-reader. | no | false |
| validate-max-targets | Maximum findings to validate when validate=true (CLI default: 10) | no | "" |
| validate-strategy | Navigation strategy for the virtual SR: linear | semantic | no | "" |
| check-visibility | Run per-icon visibility probe across profile-declared color-scheme × forced-colors modes. 'true' to force-enable, 'false' to disable, empty to defer to profile default (desktop AT profiles declare the matrix, mobile/generic do not). | no | "" |
| detect-routes | Record SPA route changes (history.pushState/replaceState, popstate, hashchange) that fire during analysis. Set 'true' to enable; emits an spa-route-changes info diagnostic when any are observed. | no | "" |
| descend-frames | Descend into child iframes during capture (capped at 20 frames). Set 'true' to enable; appends frame targets with frame-URL attribution, can recover many Chromium cross-origin OOPIFs via CDP, and emits a frames-descended info diagnostic. | no | "" |
| auto-scroll | Scroll to the bottom of the page in steps before capture so lazy/infinite-scroll content materializes (capped at 20 scrolls / 30 s). Set 'true' to enable; emits an auto-scrolled info diagnostic. | no | "" |
| dismiss-banners | Best-effort dismiss of cookie/consent/GDPR banners before capture. Set 'true' to enable; clicks safe-accept buttons and skips Decline/Manage/Customize. Emits a banners-dismissed info diagnostic. | no | "" |
| probe-hover | Hover candidate triggers to surface hover-only popups/tooltips with no attribute hint. Default budget 10 candidates; adds ~7-8 s. Captures discovered content as _hoverContent on the trigger target. | no | "" |
| walk-tab-order | Press Tab up to 30 times and record the focused sequence so the analyzer can flag positive-tabindex anti-patterns and focus traps. Adds ~1-3 s. | no | "" |
| diff-viewports | Capture the URL at desktop (1280×800) and mobile (375×667) viewports and diff target/landmark/heading lists. Surfaces a viewport-divergence diagnostic when content uses display:none on small screens. Adds ~3-5 s. | no | "" |
| baseline | Path to a previously-saved analysis JSON. Diffs against current run; prints regression summary. | no | "" |
| fail-on-regression | Exit non-zero when N or more findings regressed vs baseline. Set '1' (or higher) with baseline=path.json to enable a strict CI gate. | no | "" |
| fail-below | Fail if average score is below this threshold (0 to disable) | no | 0 |
| channel | Browser channel: chrome, chrome-beta, msedge. Uses the installed browser instead of bundled Chromium. | no | "" |
| stealth | Apply anti-bot-detection defaults (realistic UA, override navigator.webdriver, spoof plugins/languages). Pair with channel=chrome for Cloudflare-protected sites. | no | false |
| user-agent | Override the User-Agent string sent with requests | no | "" |
| headless | Run browser in headed mode (CLI --no-headless). Set to 'false' for headed, anything else for headless. | no | true |
| timeout | Page load timeout in milliseconds | no | 30000 |
| wait-for-selector | CSS selector to wait for before capturing (essential for SPAs) | no | "" |
| wait-time | Additional milliseconds to wait after page load | no | "" |
| storage-state | Path to Playwright storageState JSON for authenticated pages | no | "" |
| comment-on-pr | Post a summary comment on pull requests (requires GITHUB_TOKEN with pull-requests: write) | no | false |
| node-version | Node.js version to use | no | 22 |