canary-automate
Drive a real browser for a one-off task with Canary — navigate, click, fill, scrape, screenshot — and return the result. Nothing is recorded. Use when the user…
Record a verifiable QA session with Canary — explore a flow step by step against one persistent browser, each script a recorded step that captures a Playwright trace, video, network HAR, and console, then render a self-contained report.html. Use when the user wants to verify or
$ npx -y skills add 0xnyn/canary --skill canary-session --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/canary-sessionContext preview
The summary Claude sees to decide when to auto-load this skill.
Record a verifiable QA session with Canary — explore a flow step by step against one persistent browser, each script a recorded step that captures a Playwright trace, video, network HAR, and console, then render a self-contained report.html. Use when the user wants to verify or
name: canary-session
description: Record a verifiable QA session with Canary — explore a flow step by step against one persistent browser, each script a recorded step that captures a Playwright trace, video, network HAR, and console, then render a self-contained report.html. Use when the user wants to verify or QA a flow, produce evidence or a report, or capture a trace/video of a browser run. Trigger phrases — "record a session", "QA this flow", "verify the checkout", "capture a trace", "give me a report of this run".
license: MIT
metadata:
author: usecanary
version: 0.4.4
category: workflow
tags:
- canary
- qa
- testing
- reportWork the flow like a tester — observe, act, adapt — not as a pre-written script. Every script runs as a **step** against one persistent browser; Canary records trace / video / HAR / console and renders a self-contained `report.html`. Use the **canary-scripting** skill for the API.
User says: "QA the checkout flow and give me a report" or "verify login works" Start a session, explore-and-record the flow step by step, end it, point to `report.html`.
User says: "record a trace of the signup" or "I need a video of this bug" One session, small steps that reproduce it, `session end` — the report bundles trace, video, HAR, console.
1. Ensure the runtime: `npx @usecanary/cli install` (one-time). 2. Start: `id=$(npx @usecanary/cli session start --name "<flow>")` 3. **LOOK** — observe before acting; an observe step records like any other:
npx @usecanary/cli run --session "$id" --step observe-home <<'EOF'
const page = await browser.getPage("main");
await page.goto("http://localhost:3000", { waitUntil: "domcontentloaded" });
console.log(page.url(), await page.title());
console.log((await page.snapshotForAI()).full); // aria outline — pick selectors from this
EOF4. **DECIDE** the next small action from stdout. 5. **ACT** — run that one action (or a tight cluster, e.g. fill three fields + submit) as its own intent-named step: `npx @usecanary/cli run --session "$id" --step submit-login-form <<'EOF' …` (a `./step.js` file works too). Reuse the same named page so each step picks up where the last left off. 6. **READ** stdout + exit code. Failed? Observe where the page is, then retry as a NEW step — duplicates are honest evidence, and a failed step does not end the session. 7. Repeat 3–6 until the flow is done; finish with explicit assertion step(s): expected text / URL / state, logging `PASS`/`FAIL`. 8. End + render: `npx @usecanary/cli session end "$id"` → `~/.canary/sessions/<id>/report.html` 9. Offer **canary-review** (or `npx @usecanary/ui`) to browse it. 10. Done? Leave the daemon running for the next session, or `npx @usecanary/cli stop` to shut it (and every browser) down — or pass `--stop-daemon` to step 8 (`session end --stop-daemon`).
batch the flow into a few named steps. Re-checking what you already know just pads the report.
<!-- canary:snippet rule-observe-first -->
is there, pick a semantic selector from it (`getByRole`, `getByText`), then interact. Never guess selectors blind.
<!-- canary:end rule-observe-first -->
<!-- canary:snippet rule-screenshot cli=npx-cli --> After each `npx @usecanary/cli run --step`, the daemon auto-captures ONE screenshot of the step's last-opened tab and binds it to that step in the report. So:
extras for debugging. <!-- canary:end rule-screenshot -->
<!-- canary:snippet rule-fail-fast cli=npx-cli -->
observation channel.
missing element.
crashing, so the step still records its evidence. While exploring, a missed selector means look again (snapshot, fix, retry as a new step), not a silent fallback.
skipping its report.html — always `npx @usecanary/cli session end <id>` first. <!-- canary:end rule-fail-fast -->
the report timeline should read as a QA narrative.
QA harness built for Claude Code | E2E testing with screen recordings, console logs, network HARs, and Playwright traces
Repo: 0xnyn/canary
Drive a real browser for a one-off task with Canary — navigate, click, fill, scrape, screenshot — and return the result. Nothing is recorded. Use when the user…
Open and triage recorded Canary sessions in the local viewer. Use when the user wants to look at, replay, compare, or triage a recorded session — or asks what…
The Canary sandbox scripting API for browser automation. Use when writing or debugging a Canary script — looking up how to open a page, click, fill, extract…
Turn a code change into a prioritized browser-QA plan with Canary — read the git diff, infer which user-facing workflows it touches, suggest the concrete flows…