# Agent skill (/docs/agent-skill) Agentiqa ships a **user-facing agent skill** — a compact instruction set that teaches an AI coding agent (Claude Code and compatible agents) how to use Agentiqa across all four surfaces: the CLI, the web app, the desktop app, and the GitHub Action. It uses progressive disclosure: a short `SKILL.md` with the essentials, bundled reference files for the CLI, service keys, the JSON envelope, exit codes, and quickstarts, and a delegation to this site's [`/llms-full.txt`](/llms-full.txt) for anything not bundled. ## What it is (and what it isn't) [#what-it-is-and-what-it-isnt] This is a **Claude Code skill** — a `SKILL.md` plus reference files. It teaches an agent **how to drive Agentiqa**: which surface to pick, the `agentiqa explore` / `agentiqa run` commands, the GitHub Action, the JSON envelope, and the exit-code contract. It ships as part of the **Agentiqa plugin** ([`Agentiqa/agentiqa-plugin`](https://github.com/Agentiqa/agentiqa-plugin)), which contains two skills: * **`agentiqa-test`** — runs Agentiqa against your app from inside the coding agent (explore, report bugs with reproduction steps and media); * **`agentiqa`** (this skill) — the usage reference: CLI commands and selectors, the GitHub Action, service keys, the JSON envelope, exit codes. It is **not**: * **an MCP server** — it exposes no tools and runs no process; * **the Agentiqa product** — the skill contains only instructions. The actual testing is done by the tools it points at: the `agentiqa` **CLI** (published on npm) and the `agentiqa/qa-action` **GitHub Action**. ## Install [#install] Claude Code: ``` /plugin marketplace add Agentiqa/agentiqa-plugin /plugin install agentiqa@agentiqa ``` Cursor: `/add-plugin https://github.com/Agentiqa/agentiqa-plugin` · Codex CLI: `codex plugin marketplace add Agentiqa/agentiqa-plugin` The agent loads the skill on demand when you ask it to test an app with Agentiqa, run `agentiqa` in CI, or parse an Agentiqa result. No configuration is required. ## What it covers [#what-it-covers] * **Which surface to use** — CLI/Action for automation, the apps for interactive QA. * **The two CLI commands** — `agentiqa explore` (agent-led discovery) and `agentiqa run` (deterministic saved-plan replay), plus engine modes and plan selection. * **The CI contract** — the 4-code exit model and the `schemaVersion: 1` JSON envelope, so an agent can gate and parse results correctly. * **The GitHub Action** — `agentiqa/qa-action@v1` setup. ## Consuming the docs directly [#consuming-the-docs-directly] Any agent (with or without the skill) can read these docs as plain text: * [`/llms.txt`](/llms.txt) — a machine-readable index of every page. * [`/llms-full.txt`](/llms-full.txt) — the entire docs corpus as one document. * Append `.md` to any docs URL for that page as markdown (e.g. [`/docs/ci.md`](/docs/ci.md)). Because the CLI and Action references are generated from the code and the prose is audited nightly, the skill delegates to `/llms-full.txt` for freshness — when the bundled references and the live docs disagree, the live docs win. # CI Integration (/docs/ci) Whether you use the [GitHub Action](/docs/github-action) or run the [CLI](/docs/cli) directly, `agentiqa run` exposes a **governed, versioned contract** for CI: a fixed exit-code model and a machine-readable JSON envelope. To choose *which* plans a pipeline runs and *how* they execute — a labeled subset, sequential or parallel — see [Labels](/docs/guides/labels) and [Parallel runs](/docs/cli#parallel-vs-sequential). This page covers how to **gate** on and **parse** whatever you run. ## Exit codes [#exit-codes] The CLI exits with a status that gates your job automatically. It's a fixed, governed contract, so you can rely on it: | Code | Meaning | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `0` | Success — all selected plans passed (or there was nothing to run). | | `1` | **Plan failure** — plans executed, at least one failed. A real product-quality signal. | | `2` | **Usage / configuration error** — bad flags, not authenticated, a selector that matched no plans, **or a quota / plan-limit block** (account state — retrying won't help). Nothing ran. | | `3` | **Infra / runtime error** — engine unreachable, an auth failure, or an unexpected error. Nothing reached a verdict, so it's safe for CI to retry. | The `1` vs `3` split is deliberate and stable: `1` is a genuine test failure you should investigate; `3` is a transient/infra problem that is safe to retry. A gate can retry on `3` without masking regressions: ```yaml - name: Run test plans (retry only on infra/runtime errors) run: | for attempt in 1 2 3; do npx -y agentiqa@latest run --engine https://engine.agentiqa.com code=$? # 0 = pass, 1 = plan failure (do NOT retry), 2 = usage error (do NOT retry) [ "$code" -ne 3 ] && exit "$code" echo "Infra/runtime error (exit 3) on attempt $attempt — retrying…" sleep 15 done exit 3 ``` ## JSON envelope [#json-envelope] Add `--json` (or set `AG_OUTPUT=json`) to emit exactly **one JSON document on stdout**. Every document carries `"schemaVersion": 1` at the top level; a breaking change to the shape bumps that number. * **All logs go to stderr.** stdout is only the JSON document — no banners, no progress, no ANSI color. `stdout | jq` is always safe. * **The exit code is independent of the envelope** — always branch on the exit code for pass/fail; use the JSON for detail. **Success** (`ok: true`): ```json { "ok": true, "schemaVersion": 1, "outcome": "passed", "plans": [ { "title": "Checkout flow", "outcome": "passed", "durationSec": 42, "exitCode": 0, "runUrl": "https://web.agentiqa.com/projects/proj_…/test-plans-v2/tp_…/history/run_…", "videoUrl": "https://assets.agentiqa.com/e2e-videos/run-…/checkout-flow.mp4" }, { "title": "Login", "outcome": "failed", "durationSec": 18, "exitCode": 1, "summary": "…" } ] } ``` `outcome` is `"passed"` only when every plan passed, otherwise `"failed"`. Each `plans[]` entry carries a per-plan `outcome`, `durationSec`, `exitCode`, and an optional `summary`. When artifacts are captured, an entry may also carry `runUrl`, `videoUrl`, `videoPath`, `artifactDir`, and (with `--share`) a public `shareUrl` — each present **only** when available (omitted, never `null`, so `schemaVersion` stays `1`). **Failure** (`ok: false`) — emitted for usage errors and thrown infra/runtime errors: ```json { "ok": false, "schemaVersion": 1, "error": { "code": "run_error", "message": "…" } } ``` ## Gate on the exit code, extract detail with jq [#gate-on-the-exit-code-extract-detail-with-jq] ```yaml - name: Run test plans (JSON) run: | npx -y agentiqa@latest run --engine https://engine.agentiqa.com --json > result.json code=$? jq -r '.plans[] | "\(.outcome)\t\(.title)"' result.json || cat result.json exit "$code" ``` Because logs are on stderr, `> result.json` captures only the envelope; the human-readable run log still streams to the console. ## Action outcome buckets [#action-outcome-buckets] The [GitHub Action](/docs/github-action) maps these exits to `outcome` buckets for gating: `0` (with a valid envelope and ≥1 plan) → `passed`; `0` with zero plans or no valid envelope → `config-error`; `1` → `plan-failure`; `2`/unknown → `config-error`; `3` → `infra-error`. `fail-on: plan-failure` (default) fails on plan failures and config errors and swallows retryable infra errors; `fail-on: any` gates on anything nonzero. # Desktop App (/docs/desktop-app) The Agentiqa desktop app is an Electron application with a **built-in headed browser**. It has the complete capability set and lets you watch the agent drive the browser in real time. It can test both public URLs and apps running on `localhost`. ## Install [#install] The desktop app is distributed as a signed build for macOS (and other desktop platforms). Download the latest release from [agentiqa.com](https://agentiqa.com), install it, and sign in with your account. {/* verify: confirm the user-facing desktop download page/link and the supported OS list (build+publish flow is release-desktop-*.yml → releases.agentiqa.com). */} Releases are published to a manifest at `releases.agentiqa.com`; the app checks it and shows an in-app update prompt when a newer build is available. ## Your first test [#your-first-test] 1. **Create a project** with your app's URL (a `http://localhost:…` URL works here). 2. **Ask the Assistant** to test it. The built-in browser opens and the agent begins exploring. 3. **Curate** the scope, plan, and findings checkpoints. The feature set is shared with the web app — the [feature guides](/docs/guides/projects) apply to both surfaces. ## Why desktop [#why-desktop] The desktop app adds capabilities the browser SPA cannot provide because it runs locally: browser-extension / wallet (web3) testing, local file-system access, and native OS notifications. See [Desktop vs Web](/docs/desktop-vs-web) for the full matrix. # Desktop vs Web (/docs/desktop-vs-web) The web app and the desktop app give you the **same features** — projects, the Assistant, test plans, runs, issues, the dashboard, and settings all work the same way in both. The difference comes down to a few capabilities that need to run on your own machine, so they're available in the **desktop app** but not in the browser. | What you can do | Desktop app | Web app | | ----------------------------------------------------------------- | ----------- | ------- | | Test browser-extension / wallet flows (e.g. Metamask, web3 dApps) | Yes | No | | Save run video and artifacts to a folder on your computer | Yes | No | | Get native desktop notifications (e.g. when a long run finishes) | Yes | No | | Native window controls | Yes | No | | Test an app running on `http://localhost` | Yes | No | ## Which one should I use? [#which-one-should-i-use] * **Use the web app** to try Agentiqa with nothing to install and to test a public URL — the browser runs in Agentiqa's cloud. * **Use the desktop app** when you need to test a site on `http://localhost`, test a browser extension or crypto wallet, or save run artifacts to your computer. * **Use the [CLI](/docs/cli)** to run tests locally from a terminal or in CI. Whichever you pick, everything in the [feature guides](/docs/guides/projects) works the same. > **A note on mobile:** Agentiqa tests **web apps**. Mobile-app testing was retired > and is no longer supported. {/* verify: mobileAutomation flag is still true for desktop in PlatformCapabilities but the product dropped mobile 2026-07-01 — kept out of the user table intentionally. */} # Introduction (/docs) Agentiqa is an AI-powered testing platform for **web applications**. An LLM agent navigates a real browser, discovers what matters, executes test plans, and reports issues with screenshots and reproduction steps. ## The model: the agent proposes, you curate [#the-model-the-agent-proposes-you-curate] You provide a URL. The agent provides everything else — what to test, why it matters, how to test it, and what looks broken. Your role is to approve, reject, or redirect at three checkpoints: * **Scope** — the areas the agent discovered, ranked by risk. Default: approve all. * **Plan** — how each area will be tested. Default: approve all. * **Findings** — bugs with evidence and repro steps. The only step that always needs your review. In headless contexts (CLI, CI, scheduled runs) every checkpoint auto-approves and the agent uses its own judgment — same engine, same quality, no human in the loop. ## Where you run it [#where-you-run-it] | Surface | Best for | Guide | | ----------------- | -------------------------------------------------------------- | ------------------------------------ | | **Web app** | Trying Agentiqa in the browser, cloud execution | [Web App](/docs/web-app) | | **Desktop app** | The full experience with a built-in headed browser | [Desktop App](/docs/desktop-app) | | **CLI** | Local runs and scripting (`agentiqa explore` / `agentiqa run`) | [CLI](/docs/cli) | | **GitHub Action** | Running saved plans in CI and gating on the result | [GitHub Action](/docs/github-action) | The web and desktop apps share the same feature set — the difference is a small set of platform capabilities. See [Desktop vs Web](/docs/desktop-vs-web). ## Next steps [#next-steps] * New here? Start with the [Quickstart](/docs/quickstart). * Automating in CI? Read [CI Integration](/docs/ci) for the exit-code contract and JSON envelope. * For agents: this site serves [`/llms.txt`](/llms.txt) and [`/llms-full.txt`](/llms-full.txt), and every page has a `.md` variant (append `.md` to any docs URL). # Quickstart (/docs/quickstart) Pick the surface that fits how you want to work. All three drive the same agent.