Executes hardware-in-the-loop QA testing on iOS/Android devices using deterministic verifiers.
Install
mkdir -p .claude/skills/qa-dutradotdev && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17334" && unzip -o skill.zip -d .claude/skills/qa-dutradotdev && rm skill.zipInstalls to .claude/skills/qa-dutradotdev
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
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).Key capabilities
- →Detect available platforms (iOS, Android)
- →Run non-interactive test cases
- →Run interactive TUI test cases
- →Apply verification predicates against captured output or frames
- →Generate a detailed test report
- →Perform an optional exploratory UX pass
How it works
The skill reads YAML test cases, checks platform requirements, runs tests using `drive.sh`, applies deterministic verification predicates, and generates a report.
Inputs & outputs
When to use qa
- →Run device E2E test suite
- →Validate release readiness on hardware
- →Automate QA reporting
About this skill
/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
tmuxandjqinstalled. Iftmuxis missing, stop and tell the userbrew install tmux.- A current build: run
cargo build(debugqkattarget/debug/qk). - At least one device attached. Detect platforms:
tests/llm/lib/drive.sh platforms→ printsiosand/orandroid. 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:
-
Check
requiresagainst 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.
-
Run it.
- No
interactblock (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 likeqa_<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(defaultq) anddrive.sh stop <session>. - If
waittimes out, that is a FAIL (the TUI never reached the expected state).
- No
-
Apply every
verifypredicate against the captured output/frame:Predicate Check exit_code: Nthe __QA_EXIT__value equals Noutput_matches: Rregex R matches the captured output frame_matches: Rregex R matches the captured frame frame_excludes: Rregex R does not match the frame json_valid: truethe captured output parses as JSON ( jq . <<<output)golden_frame: namethe frame equals tests/llm/golden/<name>.txtexactlyA 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". -
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 skippedand 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.
When not to use it
- →When subjective UX judgment is the primary pass/fail criterion
- →When `tmux` is not installed
- →When no device is attached
Prerequisites
Limitations
- →Pass/fail is decided ONLY by deterministic predicates.
- →Subjective UX judgment is advisory and never a gate.
- →Requires `tmux` and `jq` installed.
How it compares
This skill automates real-device end-to-end testing with deterministic pass/fail criteria and structured reporting, which is different from manual testing or subjective evaluations.
Compared to similar skills
qa side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| qa (this skill) | 0 | 1mo | No flags | Intermediate |
| xcodebuildmcp | 24 | 3mo | No flags | Advanced |
| ios-simulator-skill | 27 | 1mo | Review | Advanced |
| claude-mobile-ios-testing | 18 | 8mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
xcodebuildmcp
cameroncooke
Official skill for XcodeBuildMCP. Use when doing iOS/macOS/watchOS/tvOS/visionOS work (build, test, run, debug, log, UI automation).
ios-simulator-skill
conorluddy
21 production-ready scripts for iOS app testing, building, and automation. Provides semantic UI navigation, build automation, accessibility testing, and simulator lifecycle management. Optimized for AI agents with minimal token output.
claude-mobile-ios-testing
krzemienski
Use when testing iOS apps on simulator, capturing screenshots for validation gates, automating UI testing with expo-mcp and xc-mcp, or verifying visual correctness - combines expo-mcp autonomous testing (React Native level) with xc-mcp simulator management (iOS level)
e2e-testing-patterns
wshobson
Master end-to-end testing with Playwright and Cypress to build reliable test suites that catch bugs, improve confidence, and enable fast deployment. Use when implementing E2E tests, debugging flaky tests, or establishing testing standards.
testing-workflow
amo-tech-ai
Comprehensive testing workflow for E2E, integration, and unit tests. Use when testing applications layer-by-layer, validating user journeys, or running test suites.
build-iphone-apps
glittercowboy
Build professional native iPhone apps in Swift with SwiftUI and UIKit. Full lifecycle - build, debug, test, optimize, ship. CLI-only, no Xcode. Targets iOS 26 with iOS 18 compatibility.