Real-Device E2E QA Runner

VerifiedCaution

Drives layer 5 of the QA strategy by running the real binary against attached iOS/Android devices through tmux, applying deterministic verifiers, and writing a report.

Sby Skills Guide Bot
TestingAdvanced
7/25/2026
Claude Code
#e2e-testing#real-device#qa-automation#tmux#golden-frames

Recommended for

Automated summary

Runs layer 5 of quokka's QA strategy: it drives the real qk binary against attached iOS/Android devices through tmux, applies deterministic verifiers, and writes a timestamped report.

Strengths

  • Pass/fail comes only from deterministic predicates (exit code, regex over output or frame, golden-frame equality, JSON validity), never from the model's own judgment
  • Cases whose required platform is missing are recorded as SKIP with a reason rather than failing the run
  • tmux sessions are always torn down even on failure, and each case keeps its captured frame for debugging
  • An optional exploratory UX pass (layer 6) is offered but stays advisory and never gates the result

Limitations

  • Strict prerequisites: tmux, jq, a cargo debug build, and at least one attached device
  • Tightly coupled to the quokka repo layout (tests/llm/*.yaml, tests/llm/lib/drive.sh, golden directory) and not reusable as-is elsewhere
  • Does not author test cases — existing YAML files with verify/interact blocks are required
  • golden_frame matching is an exact equality check, so it is brittle to any cosmetic UI change
When to use it

Run it before a release, or whenever you need a reproducible pass/fail verdict on the real qk binary running on connected hardware.

When not to use it

For unit or component tests, or when no device is attached and no YAML case files exist.

Security analysis

Caution
Quality score90/100

The skill is not malicious: it does not exfiltrate secrets, download-and-execute remote payloads, obfuscate commands, or disable safety controls. However, it relies on shell execution, tmux automation, a repo-local driver script, and real hardware, so it should be treated as a powerful local testing tool rather than a no-execution-risk skill.

Findings
  • •Requires and drives powerful local tools: cargo build, tmux, shell script tests/llm/lib/drive.sh, and connected iOS/Android devices.
  • •Executes commands defined in repository YAML test cases, so the skill inherits trust in those test definitions and the drive.sh helper.
  • •Writes report files under tests/llm/reports/ and interacts with live device sessions; teardown is explicitly required.
  • •The optional exploratory pass suggests disruptive actions such as unplugging a device mid-command, though only when the user is present and only as advisory UX testing.
How this analysis is made

Examples

Run the device suite before release
Run /qa against my connected iPhone before we cut the release.
Device QA on Android
Test against the real device — run the device QA suite on the Pixel I just plugged in.
Deterministic suite plus UX pass
Run /qa, and since this is pre-release also do the exploratory UX pass afterwards and list any UX smells.

name: qa description: > Run quokka's real-device E2E layer (QA strategy layer 5): drive the real qk binary against connected iPhone/Android devices through tmux, apply deterministic verifiers, and write a report. Use when the user asks to "run /qa", "run the device QA suite", "test against the real device", or before a release. Optionally finishes with an advisory exploratory UX pass (layer 6).

/qa — real-device E2E runner

You are the driver for layer 5 of the QA strategy (docs/superpowers/specs/2026-06-01-qa-strategy-design.md). You run the real binary against attached hardware and decide pass/fail deterministically.

Hard rule

Pass/fail is decided ONLY by the deterministic predicates below (exit code, regex over captured text, golden-frame compare, JSON validity). You do not use your own judgment to pass or fail a case. Subjective UX judgment belongs to the optional exploratory pass at the end, which is advisory and never a gate.

Preconditions

  1. tmux and jq installed. If tmux is missing, stop and tell the user brew install tmux.
  2. A current build: run cargo build (debug qk at target/debug/qk).
  3. At least one device attached. Detect platforms: tests/llm/lib/drive.sh platforms → prints ios and/or android. If empty, stop and tell the user to connect a device.

All mechanics go through tests/llm/lib/drive.sh (see its header for the subcommands). Never reimplement the tmux dance inline.

Procedure

Read every tests/llm/*.yaml (not lib/, not golden/, not reports/). For each case, in file order:

  1. Check requires against the detected platforms.

    • any → at least one device present.
    • ios / android → that platform present.
    • Not met → record SKIP with the reason. Never fail on absence.
  2. Run it.

    • No interact block (non-interactive): drive.sh run <command>. The output ends with __QA_EXIT__=<code>. The captured text above that line is the output.
    • Has interact (interactive TUI):
      • drive.sh start <session> <command> (use a unique session like qa_<id>).
      • For each step: wait_for: X → drive.sh wait <session> "X" <timeout>; keys: [..] → drive.sh keys <session> <k1> <k2> ....
      • After the steps, capture the frame: drive.sh capture <session>.
      • Send quit_keys (default q) and drive.sh stop <session>.
      • If wait times out, that is a FAIL (the TUI never reached the expected state).
  3. Apply every verify predicate against the captured output/frame: | Predicate | Check | |-----------|-------| | exit_code: N | the __QA_EXIT__ value equals N | | output_matches: R | regex R matches the captured output | | frame_matches: R | regex R matches the captured frame | | frame_excludes: R | regex R does not match the frame | | json_valid: true | the captured output parses as JSON (jq . <<<output) | | golden_frame: name | the frame equals tests/llm/golden/<name>.txt exactly | A case PASSES only if every predicate holds. A case with no predicates and a clean run is a PASS but flag it as "smoke-only".

  4. Always tear the session down even on failure (drive.sh stop).

Report

Write tests/llm/reports/<YYYY-MM-DD-HHMM>.md containing:

  • a summary line: N passed, M failed, K skipped and the detected platforms;
  • per case: id, status (PASS/FAIL/SKIP), which predicate failed (if any), and the captured frame in a fenced block (the trajectory, for debugging).

Then print the summary to the user. If anything failed, lead with the failures.

Optional: exploratory UX pass (layer 6, advisory)

Only if the user asks for it, or it is pre-release. After the deterministic suite, drive a connected device freely beyond the scripted cases — open each TUI, trigger an error path (e.g. unplug mid-command if the user is present), resize, navigate. Report UX smells ("this error doesn't say what to do", "the dashboard wraps awkwardly at 80 cols") as observations, NOT pass/fail. The user decides what becomes a ticket. Never gate a release on this pass.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/real-device-e2e-qa-runner-mrzxuojk/download' --output '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md.part' && mv '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md.part' '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md' && test -s '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/qa' && cp -R '.skill-downloads/real-device-e2e-qa-runner-mrzxuojk' '.claude/skills/qa'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/real-device-e2e-qa-runner-mrzxuojk'

openskills read 'real-device-e2e-qa-runner-mrzxuojk'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/real-device-e2e-qa-runner-mrzxuojk/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills