Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
desplega-ai avatar

Qa Use

  • 139 installs
  • 25 repo stars
  • Updated May 26, 2026
  • desplega-ai/qa-use

Run E2E tests and browser automation from your agent via the qa-use CLI without wiring a separate QA harness.

About

qa-use is an agent skill that wires the qa-use CLI into coding agents for end-to-end testing and browser automation. Solo builders use it when they need to verify features, run automated browser flows, or debug test failures without leaving the agent session. The skill stresses that plugin slash commands are convenience wrappers: any harness with Bash can drive the same behavior through documented CLI steps. Configuration starts with qa-use setup and qa-use info, with QA_USE_API_KEY, QA_USE_REGION, and optional QA_USE_API_URL as environment overrides. It fits teams shipping web or agent-backed products who want repeatable verification during Ship, especially when the primary interface is Claude Code, Cursor, or Codex rather than a dedicated QA IDE.

  • Full qa-use CLI workflows for harnesses that only expose Bash (slash commands are optional shortcuts)
  • Setup via qa-use setup, QA_USE_API_KEY, and project or home .qa-use.json with env-var precedence
  • Documented verify and automation flows for AI-driven dev loops
  • Browser interaction and test-failure debugging oriented to agent workflows

Qa Use by the numbers

  • 139 all-time installs (skills.sh)
  • Ranked #906 of 2,153 Testing & QA skills by installs in the Skillselion catalog
  • Security screen: HIGH risk (skills.sh audit)
  • Data as of Jul 24, 2026 (Skillselion catalog sync)
npx skills add https://github.com/desplega-ai/qa-use --skill qa-use

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs139
repo stars25
Security audit2 / 3 scanners passed
Last updatedMay 26, 2026
Repositorydesplega-ai/qa-use

What it does

Run E2E tests and browser automation from your agent via the qa-use CLI without wiring a separate QA harness.

Files

SKILL.mdMarkdownGitHub ↗

qa-use

E2E testing and browser automation for AI-driven development workflows.

Critical Insight: Plugin Commands as Shortcuts

For AI Harnesses (codex, opencode, etc.):

Plugin commands (slash commands like /qa-use:verify) are convenience shortcuts that wrap CLI workflows. Harnesses with only the Bash tool can access ALL functionality via CLI commands documented below.

Pattern throughout this document:

  • CLI Workflow: Step-by-step CLI commands (works for ALL harnesses)
  • Plugin Shortcut: Optional slash command (convenience)

Setup & Configuration

Before using any qa-use commands, verify configuration is in place:

# Check current configuration (no-op if already configured)
qa-use setup

# Configure with API key (validates against server)
qa-use setup --api-key <key>

# View full configuration details
qa-use info

Environment Variables (alternative to config file):

VariableDescription
QA_USE_API_KEYAPI key for authentication
QA_USE_REGIONRegion: us (default) or auto
QA_USE_API_URLOverride API base URL

Config file: .qa-use.json in the project directory or ~/.qa-use.json in the home directory. Precedence: env vars > project .qa-use.json > ~/.qa-use.json.

If you encounter "API key not configured", 401, or auth errors: Run qa-use setup to check config state. NEVER fabricate or guess API keys.

Core Workflow

1. Browser Control & Session Lifecycle

CLI Workflow:

# Create browser session (returns immediately — runs detached in the background)
qa-use browser create --viewport desktop

# For localhost testing — auto-tunnels when base URL is localhost and API is remote.
# No flag needed for the common case:
qa-use browser create --no-headless http://localhost:3000

# Force a tunnel even in dev mode:
qa-use browser create --tunnel on --no-headless

# Opt out of auto-tunnel (e.g. backend is also local):
qa-use browser create --no-tunnel

# Navigate
qa-use browser goto https://example.com

# Snapshot to get element refs (ALWAYS do this before interacting)
qa-use browser snapshot

# Interact by ref
qa-use browser click e3
qa-use browser fill e5 "text"

# Close
qa-use browser close

Background session management:

qa-use browser create returns immediately — the actual browser + tunnel run in a detached child process so your terminal stays free. Manage sessions with:

qa-use browser status --list   # Show all active sessions across processes
qa-use browser status           # Details for the auto-resolved session
qa-use browser close <id>       # Close a specific session
qa-use doctor                   # Reap stale sessions/tunnels (dead PIDs)
qa-use doctor --dry-run         # Preview what would be cleaned

Tunnel commands:

Cross-process tunnel registry — multiple commands share a single tunnel per target:

qa-use tunnel start <url>         # Acquire a tunnel (released immediately unless --hold)
qa-use tunnel start <url> --hold  # Keep the tunnel up until Ctrl+C
qa-use tunnel ls                  # List active tunnels (target, public URL, refcount)
qa-use tunnel status <target>     # Detail for a single tunnel
qa-use tunnel close <target>      # Force-release a tunnel (kills detached holders)

Plugin Shortcut:

/qa-use:explore https://example.com

(Wraps create + goto + snapshot with autonomous exploration)

Critical: Always run snapshot before your first interaction on a page. Never guess element refs.

Snapshot Diff Feature (use it to avoid unnecessary snapshots): After each action (goto, click, fill, etc.), the browser automatically shows DOM changes:

  • Summary: "5 elements added, 1 element modified"
  • Added elements: + [e54] generic "Thanks for agreeing!" (green)
  • Modified elements: ~ [e18] checkbox "I agree..." with +attrs: checked, active (yellow)
  • Removed elements: - [e99] button "Submit" (red)

When you can skip a full `snapshot`: If the diff output from your last action already shows the element ref you need to interact with next, use it directly — no need for an intermediate snapshot. For example, if clicking a button shows + [e54] button "Submit" in the diff, you can click e54 immediately.

When you still need a full `snapshot`: Run snapshot when you need to find elements that weren't in the diff (e.g., pre-existing elements you haven't interacted with yet), or when the diff was truncated (shows "... and N more changes").

2. Understanding Blocks

What are blocks?

Blocks are atomic recorded interactions from a browser session. They are:

  • Automatically captured during any browser interaction (click, fill, goto, scroll, etc.)
  • Stored server-side with the session
  • Retrieved via qa-use browser get-blocks
  • The foundation for test generation

Why blocks matter:

  • Record-once, replay-many: Interactive recording becomes automated test
  • AI-friendly: Agents can analyze blocks to understand user intent
  • Version control: Blocks stored with session enable test iteration
  • Bridge CLI → Tests: Natural workflow from exploration to automation

How blocks work:

# 1. Create session and interact (auto-tunnels localhost)
qa-use browser create --no-headless
qa-use browser goto https://example.com
qa-use browser snapshot        # Returns: [ref=e1] button
qa-use browser click e1        # Records as block
qa-use browser fill e5 "text"  # Records as block

# 2. Retrieve blocks (JSON array)
qa-use browser get-blocks
# Returns:
# [
#   {"type": "goto", "url": "...", "timestamp": "..."},
#   {"type": "click", "ref": "e1", "timestamp": "..."},
#   {"type": "fill", "ref": "e5", "value": "text", "timestamp": "..."}
# ]

# 3. Generate test YAML from blocks
qa-use browser generate-test -n "my_test" -o qa-tests/my_test.yaml

# 4. Run generated test
qa-use test run my_test

Plugin Shortcut:

/qa-use:record start my_test
# ... perform interactions ...
/qa-use:record stop

(Wraps the interactive workflow with AI-powered test generation)

3. Test Management

CLI Workflow:

# Run test by name
qa-use test run login

# Run and save the (non-synced) local test to cloud
qa-use test run login --persist

# Validate syntax
qa-use test validate login

# Show test details
qa-use test info login

# List test runs
qa-use test runs --status failed

Plugin Shortcut:

/qa-use:test-run login

(Convenience shortcut for common test execution)

4. Test Variables (Imperative Edit)

Quick set/unset for the typed variables: block on a single test — useful when you don't want to round-trip the full YAML.

CLI Workflow:

# Local YAML file — Document API preserves comments + key order
qa-use test vars list  qa-tests/login.yaml
qa-use test vars list  qa-tests/login.yaml --json
qa-use test vars set   qa-tests/login.yaml --key user --value alice
qa-use test vars set   qa-tests/login.yaml --key url --value https://x \
                                          --type url --lifetime all
qa-use test vars set   qa-tests/login.yaml --key password --value hunter2 --sensitive
qa-use test vars set   qa-tests/login.yaml --key password --sensitive  # preserves stored value
qa-use test vars unset qa-tests/login.yaml --key user

# Remote --id fallback — exports YAML, mutates, re-imports (best-effort RMW)
qa-use test vars list  --id <uuid>
qa-use test vars set   --id <uuid> --key user --value alice
qa-use test vars unset --id <uuid> --key user

Rules:

  • Mutual exclusion: pass either <file> or --id, not both. Neither → exit 1.
  • `--id` requires a full UUID (use qa-use test list --query <name> to find one).
  • Form upgrade: passing only --key/--value writes simple form (key: value).

Any of --type/--lifetime/--context/--sensitive upgrades to full form ({ value, type, lifetime, context, is_sensitive }).

  • Sensitive-preserve: on an existing sensitive var, --sensitive without

--value keeps the stored value. On a new key, that combination errors out.

  • `--json` redaction: sensitive entries omit the value key entirely; the

is_sensitive: true flag is the redaction signal.

  • Remote round-trip caveat: comment/key-order preservation only applies to

the local-file path. The server normalizes formatting on import.

No Plugin Shortcut - Use CLI commands directly.

5. Test Sync Lifecycle

CLI Workflow:

# Pull tests from cloud
qa-use test sync pull

# Push all local tests to cloud
qa-use test sync push --all

# Push specific test
qa-use test sync push --id <uuid>

# Force push (overwrite conflicts)
qa-use test sync push --force

# Compare local vs cloud
qa-use test diff login.yaml

Persist vs Sync:

A local test is synced when its YAML has both an id: and a version_hash: (these are written back by test sync push/pull). --persist on test run and qa-use test sync are related but not the same:

Local file statepersistWhat happens at run time
Non-syncedfalse (default)Runs locally; nothing saved to cloud. Re-run with --persist or use test sync push to persist.
Non-syncedtrueTest is uploaded as a new cloud entry after the run. Re-running like this creates duplicates — prefer test sync push once the file tracks the cloud id.
SyncedfalseRuns against the cloud-tracked definition; no extra write.
SyncedtrueCloud definition is upserted (may overwrite newer cloud edits). Use test sync push/pull for explicit version control.

Rule of thumb: test sync push/pull is the deliberate path. Reserve --persist (or defaults.persist: true in .qa-use.json) for one-off uploads of brand-new local tests.

No Plugin Shortcut - Use CLI commands directly

Essential Commands

Browser Session Management

CommandDescription
qa-use browser createCreate remote browser session
qa-use browser create <url>Create session and navigate to URL
`qa-use browser create --tunnel [auto\on\
qa-use browser create --no-headlessShow browser window (paired with a local/tunnel browser)
qa-use browser create --viewport <size>Set viewport: desktop, tablet, mobile
qa-use browser create --ws-url <url>Connect to existing WebSocket browser
qa-use browser create --after-test-id <uuid>Run a test first, then become interactive
qa-use browser create --var <key=value>Override app config variables (repeatable)
qa-use browser listList active sessions
qa-use browser statusShow current session details (app_url, recording_url, etc.)
qa-use browser status --listShow all active sessions across processes
qa-use browser closeClose active session
qa-use browser close <id>Close a specific session by id
qa-use doctorReap stale sessions/tunnels (dead PIDs)
qa-use tunnel lsList active tunnels in the registry
qa-use tunnel start <url> --holdHold a public tunnel for external consumers

Sessions auto-persist in ~/.qa-use.json. One active session = no -s flag needed. browser create returns immediately — the browser + tunnel run in a detached child. Use qa-use doctor if stale state accumulates.

Navigation

CommandDescription
qa-use browser goto <url>Navigate to URL
qa-use browser backGo back
qa-use browser forwardGo forward
qa-use browser reloadReload page

Element Interaction

CommandDescription
qa-use browser click <ref>Click element by ref
qa-use browser click --text "Button"Click by semantic description
qa-use browser fill <ref> "value"Fill input field
qa-use browser type <ref> "text"Type with delays (for autocomplete)
qa-use browser press <key>Press key (e.g., Enter, Tab)
qa-use browser check <ref>Check checkbox
qa-use browser uncheck <ref>Uncheck checkbox
qa-use browser select <ref> "option"Select dropdown option
qa-use browser hover <ref>Hover over element
qa-use browser scroll down 500Scroll by pixels
qa-use browser scroll-into-view <ref>Scroll element into view
qa-use browser drag <ref> --target <ref>Drag element to target
qa-use browser mfa-totp [ref] <secret>Generate TOTP code (optionally fill)
qa-use browser upload <ref> <file>...Upload file(s) to input (base64-encoded, works remote & tunnel)

Inspection & Snapshot Diff

CommandDescription
qa-use browser snapshotGet full ARIA tree with element refs (use only when diff output is insufficient)
qa-use browser urlGet current URL
qa-use browser screenshotSave screenshot.png
qa-use browser screenshot file.pngSave to custom path
qa-use browser screenshot --base64Output base64 to stdout
qa-use browser evaluate <expression>Execute JavaScript in browser context

The snapshot-diff feature automatically displays DOM changes after each browser action:

  • Added elements: Shown with + prefix and green color — these refs are immediately usable
  • Modified elements: Shown with ~ prefix and yellow color, including attribute changes (+attrs: checked)
  • Removed elements: Shown with - prefix and red color — do NOT use these refs

Downloads: When an action triggers a file download (e.g., clicking a download link), the response includes download info: filename, size, and a presigned URL. Use qa-use browser downloads to list all downloads or --save <dir> to save them locally.

Use diff output to interact with newly appeared elements directly, without running a full snapshot first.

Test Operations

CommandDescription
qa-use test run <name>Run test by name
qa-use test run --allRun all tests
qa-use test run <name> --tunnel [mode]Override tunnel mode (auto, on, off). --no-tunnel is sugar for off. Bare --tunnel is sugar for on.
qa-use test run <name> --downloadDownload assets to /tmp/qa-use/downloads/
qa-use test run <name> --var key=valueOverride variable
qa-use test validate <name>Validate test syntax
qa-use test listList available tests
qa-use test info <name>Show test details (steps, tags, description)
qa-use test info --id <uuid>Show cloud test details by ID
qa-use test runs [name]List test run history
qa-use test runs --id <uuid>Filter runs by test ID
qa-use test runs --status failedFilter runs by status
qa-use test initInitialize test directory
qa-use test sync pullPull tests from cloud
qa-use test sync push --allPush all local tests to cloud
qa-use test sync push --id <uuid>Push specific test
qa-use test sync push --forcePush tests, overwriting conflicts
qa-use test diff <file>Compare local vs cloud test
qa-use test schema [path]View test definition schema

API Operations (Dynamic OpenAPI)

qa-use api dynamically discovers operations from /api/v1/openapi.json and caches metadata locally for offline fallback.

CommandDescription
qa-use apiShow help and available subcommands
qa-use api lsList available /api/v1/* routes from OpenAPI
qa-use api ls --refreshForce refresh OpenAPI cache
qa-use api ls --offlineUse cached OpenAPI metadata only
qa-use api info /api/v1/<route>Show route details: parameters, request body, responses
qa-use api info /api/v1/<route> -X POSTShow info for specific HTTP method
qa-use api info /api/v1/<route> --jsonRoute info as JSON
qa-use api examplesShow usage examples
qa-use api openapiPrint OpenAPI spec URL
qa-use api openapi --rawDump full OpenAPI spec as JSON
qa-use api /api/v1/testsCall endpoint (method inferred when possible)
qa-use api -X GET /api/v1/test-runs -f limit=5GET with query fields
qa-use api -X POST /api/v1/tests-actions/run --input body.jsonPOST with JSON body file
qa-use api -X GET /api/v1/test-runs/<id>Fetch detail endpoint by ID

No Plugin Shortcut - Use CLI commands directly.

API Checks And Check Schedules

Remote API checks are managed through first-class commands. They call the desplega.ai API directly; they do not run checks locally or create browser sessions.

CommandDescription
qa-use check list --app-config <id>List remote API checks
qa-use check info <check-id>Inspect one check, including dependencies and captures
qa-use check create --name <name> --app-config <id> --config check.jsonCreate a check
qa-use check update <check-id> --depends-on <id> --alias <name>Update dependency-chain metadata
qa-use check delete <check-id> --forceDelete a check
qa-use check-schedule list --app-config <id>List remote check schedules
qa-use check-schedule create --name <name> --app-config <id> --cron "*/15 * * * *" --check <id>Create an ordered schedule
qa-use check-schedule run <schedule-id> --var env=stagingRun a schedule as a remote variable-passing chain

Common flow:

qa-use check create \
  --name "Auth token" \
  --app-config <app-config-id> \
  --config auth-check.json \
  --alias auth \
  --capture token=$.access_token

qa-use check update <claim-check-id> \
  --depends-on <auth-check-id> \
  --alias claim

qa-use check-schedule create \
  --name "Claims chain" \
  --app-config <app-config-id> \
  --cron "*/15 * * * *" \
  --check <auth-check-id> \
  --check <claim-check-id>

qa-use check-schedule run <schedule-id> --var env=staging --var claim_id=123

There is no standalone qa-use check run <check-id> command yet because the public API currently documents schedule runs, not individual check-run actions. Use qa-use api info /api/v1/checks -X POST for the current check payload contract, and see references/checks.md for examples.

No Plugin Shortcut - Use CLI commands directly.

Logs & Debugging

CommandDescription
qa-use browser logs consoleView console logs from session
qa-use browser logs console -s <id>View logs from specific/closed session
qa-use browser logs networkView network request logs
qa-use browser logs network -s <id>View network logs from specific session
qa-use browser downloadsList downloaded files from session
qa-use browser downloads --save <dir>Save downloaded files to local directory
qa-use browser downloads --jsonOutput download info as JSON

Test Generation

CommandDescription
qa-use browser generate-testGenerate test YAML from recorded session
qa-use browser generate-test -s <id>Generate from specific session
qa-use browser generate-test -n <name>Specify test name
qa-use browser generate-test -o <path>Specify output path
qa-use browser get-blocksGet recorded interaction blocks (JSON)

Waiting

CommandDescription
qa-use browser wait <ms>Fixed wait
qa-use browser wait-for-selector ".class"Wait for selector
qa-use browser wait-for-loadWait for page load

Variable Overrides

Use --var to override app config variables at runtime. Common variables:

VariableDescription
base_urlBase URL for the app (e.g., preview deployment URL)
login_urlLogin page URL
login_usernameUsername/email for authentication
login_passwordPassword for authentication

Example with ephemeral preview URL:

qa-use browser create --after-test-id <login-test-uuid> \
  --var base_url=https://preview-123.example.com \
  --var login_url=https://preview-123.example.com/auth/login

Common Patterns

Pattern 1: Feature Verification

CLI Workflow:

# 1. Search for existing test
qa-use test list | grep "login"

# 2. Run test
qa-use test run login

# 3. Debug failures
qa-use browser logs console

Plugin Shortcut:

/qa-use:verify "login works with valid credentials"

(Wraps the above CLI workflow with AI-powered test discovery and analysis)

Pattern 2: Record & Generate Test

CLI Workflow:

# 1. Create session (auto-tunnels localhost targets)
qa-use browser create --no-headless

# 2. Navigate and interact
qa-use browser goto https://example.com
qa-use browser snapshot
qa-use browser click e1
qa-use browser fill e5 "test"

# 3. Generate test from blocks
qa-use browser get-blocks
qa-use browser generate-test -n "my_test"

# 4. Run test
qa-use test run my_test

Plugin Shortcut:

/qa-use:record start my_test
# ... perform interactions ...
/qa-use:record stop

Pattern 3: Authenticated Exploration

CLI Workflow:

# Create session that runs login test first
qa-use browser create --after-test-id <login-test-uuid>

# Session now authenticated, explore
qa-use browser goto /dashboard
qa-use browser snapshot

Plugin Shortcut:

/qa-use:explore /dashboard

(Automatically handles auth detection and session creation)

Pattern 4: Edit Existing Test

CLI Workflow:

# 1. Open test file in editor
vim qa-tests/login.yaml

# 2. Validate syntax
qa-use test validate login

# 3. Run to verify
qa-use test run login

Plugin Shortcut:

/qa-use:record edit login

(AI-assisted editing with validation)

Pattern 5: Using Snapshot Diff to Avoid Unnecessary Snapshots

CLI Workflow:

# Create session and navigate
qa-use browser create --no-headless
qa-use browser goto https://evals.desplega.ai/checkboxes

# goto shows diff — initial page load shows all elements:
# Changes: 45 elements added
# + [e18] checkbox "I agree to the terms and conditions"
# + [e19] generic "I agree to the terms and conditions"

# ✅ Use ref from diff directly — no snapshot needed!
qa-use browser click e18

# Diff shows what changed:
# Changes: 5 elements added, 1 element modified
# + [e54] generic "Thanks for agreeing!"
# + [e55] link "Terms and Conditions"
# ~ [e18] checkbox "I agree to the terms and conditions"
#     +attrs: active, checked

# ✅ Can click e55 directly from diff output — no snapshot needed!
qa-use browser click e55

# ❌ Need to find an element NOT in the diff? Now run snapshot:
qa-use browser snapshot

Key principle: Use diff output as your primary source of element refs after actions. Only fall back to snapshot when you need to find elements that weren't in the diff.

Benefits:

  • Fewer API calls = faster automation
  • Diff refs are always fresh (just returned from the server)
  • Instantly see what changed (new elements, attribute changes, removals)

No Plugin Shortcut - Automatic feature in all browser commands

CI/CD Integration

Running Tests in CI

Environment Variables:

export QA_USE_API_KEY="your-api-key"
export QA_USE_REGION="us"  # Optional: "us" or "auto"

Basic Test Execution:

# Run all tests
qa-use test run --all

# Run specific tag
qa-use test run --tag smoke

# Exit codes: 0 = pass, 1 = fail

GitHub Actions Example

name: QA Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '20'
      - name: Install qa-use
        run: npm install -g @desplega.ai/qa-use
      - name: Run tests
        run: qa-use test run --all
        env:
          QA_USE_API_KEY: ${{ secrets.QA_USE_API_KEY }}

Test Artifacts

Screenshots:

  • Automatically saved on failure
  • Location: /tmp/qa-use/downloads/ (local) or cloud (remote)

Logs:

  • Console logs: qa-use browser logs console -s <session-id>
  • Network logs: qa-use browser logs network -s <session-id>

Advanced Topics

Localhost Testing (Auto-Tunnel)

qa-use auto-tunnels localhost targets when the API is remote. No flag required for the common case:

qa-use browser create --no-headless http://localhost:3000
qa-use test run my_test   # auto-tunnels if base_url is localhost

Tri-state `--tunnel` flag:

ValueBehavior
auto (default)Tunnel iff base URL is localhost AND API URL is remote
on (or bare --tunnel)Force a tunnel even in dev mode
off (or --no-tunnel)Never tunnel
Testing localhost (http://localhost:3000)?
  ├─ API remote (default)  → auto-tunnels. No flag needed.
  ├─ API also local (dev)  → no tunnel by default. Use --tunnel on to force.
  └─ Public URL target     → no tunnel (remote cloud browser)

Plugin shortcuts handle tunnel detection automatically:

/qa-use:explore http://localhost:3000
/qa-use:record start local_test

See references/localhost-testing.md for troubleshooting.

Session Persistence

Sessions are stored in ~/.qa-use.json and have:

  • TTL: 30 minutes (default)
  • Auto-resolve: One active session = no -s flag needed
  • Cleanup: Automatic on timeout or explicit browser close

Block Limitations

What's captured:

  • goto, click, fill, type, check, uncheck, select, hover
  • scroll, scroll-into-view, drag, upload, press

What's NOT captured:

  • Assertions (must be added manually)
  • Waits (inferred from timing, may need adjustment)
  • Complex interactions (multi-drag, hover sequences)

Manual editing: Edit generated YAML to add assertions and refine selectors.

WebSocket Sessions

Sharing sessions across processes:

# Process 1: Create session (auto-tunnels if target is localhost + API remote)
qa-use browser create http://localhost:3000
# Output: ws://localhost:12345/browser/abc123

# Process 2: Connect to session
qa-use browser goto https://example.com --ws-url ws://localhost:12345/browser/abc123

Deep-Dive References

Access any reference at runtime via the CLI: qa-use docs <topic>

TopicCLI CommandDescription
browser-commands.mdqa-use docs browser-commandsComplete browser CLI reference with all flags
checks.mdqa-use docs checksAPI checks and check schedule workflows
test-format.mdqa-use docs test-formatFull test YAML specification
localhost-testing.mdqa-use docs localhost-testingTunnel setup for local development
failure-debugging.mdqa-use docs failure-debuggingFailure classification and diagnostics
ci.mdqa-use docs ciCI/CD integration patterns and examples

Use qa-use docs --list to discover all available topics and templates.

Templates

TemplateDescription
basic-test.yamlSimple navigation and assertion
auth-flow.yamlLogin flow with credentials
form-test.yamlForm submission with validation

Test Format Overview

name: Login Test
description: Validates login functionality with valid credentials
tags:
  - smoke
  - auth
app_config: <app-config-id>
variables:
  email: test@example.com
  password: secret123
depends_on: setup-test  # Optional
steps:
  - action: goto
    url: /login
  - action: fill
    target: email input
    value: $email
  - action: click
    target: login button
  - action: to_be_visible
    target: dashboard

See references/test-format.md for complete specification.

Common Mistakes

❌ Wrong✅ Correct
browser navigate <url>browser goto <url>
browser destroybrowser close
browser close <session-id>browser close
Guessing element refsUse refs from diff output or snapshot
Running snapshot after every actionUse diff output; only snapshot when needed
Forcing --tunnel in dev (both local)Rely on auto-mode, or use --tunnel on explicitly
test sync --pulltest sync pull (subcommand, not flag)
test sync --pushtest sync push (subcommand, not flag)

Troubleshooting

When stuck or encountering unexpected errors, use the built-in documentation:

# Check configuration state
qa-use setup

# Browse main documentation
qa-use docs

# List all available topics
qa-use docs --list

# Access specific topic
qa-use docs <topic>
SituationCommand
Auth / API key errorsqa-use setup then qa-use docs
Unknown browser commandqa-use docs browser-commands
Test failuresqa-use docs failure-debugging
Localhost / tunnel issuesqa-use docs localhost-testing
Test YAML syntaxqa-use docs test-format
API checks / schedulesqa-use docs checks
CI/CD setupqa-use docs ci

Key rules:

  • ALWAYS consult qa-use docs before improvising workarounds
  • NEVER fabricate API keys, tokens, URLs, or credentials
  • If qa-use setup shows no config, report it — don't guess

npx Alternative

All commands use qa-use assuming global install. For one-off use:

npx @desplega.ai/qa-use browser <command>

Related skills

FAQ

Is Qa Use safe to install?

skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Testing & QAtestingintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.