CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

ios-device-qa

Drive QA of a SwiftUI app on a real iPhone over USB - screenshot, read the accessibility tree, inspect @Observable state, tap, swipe, and type through an HTTP bridge embedded in the app under test. Use when asked to test an iOS app on a physical device, find bugs on the device, or expose a connected iPhone to a remote agent over Tailscale. Requires the ios-agent-qa runtime; not for simulator or XCTest work.

Quality

91%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

85%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An exemplary operational skill body: concrete commands, a tight drive loop with built-in validation, hard safety rules, and a genuinely useful error-recovery table, all in under 60 lines. The minor deductions come from version pins that will age, one redundant boundary sentence, and step 2's bridge wiring being described rather than shown.

Suggestions

Make step 2 as copy-paste ready as the daemon and mint commands: include the exact devicectl launch invocation and a minimal DebugBridge SPM dependency/wiring snippet, or explicitly name the README section that contains them.

Trim the boundary sentence 'No simulator, no XCTest, no WebDriverAgent' (it duplicates the frontmatter description) and move the tool version pins ('swift >= 5.9, bun >= 1.1') into the referenced runtime README so the body does not go stale.

DimensionReasoningScore

Conciseness

The body is dense and operational with no explanation of concepts Claude already knows, but it carries time-sensitive version pins ("swift >= 5.9, bun >= 1.1") outside any old-patterns/deprecated section and repeats the frontmatter boundary ("No simulator, no XCTest, no WebDriverAgent"). This places it at 'efficient with minor instances that could be trimmed' rather than 'every token earns its place'.

4 / 5

Actionability

Mostly executable: copy-paste commands like "bun run gen-accessors", "bin/ios-agent-qa-daemon", "bin/ios-agent-qa-mint grant --remote <id>", and full endpoint paths ("GET /screenshot", "POST /session/acquire", "/tap"). Not 5 because step 2 gives direction rather than code ("Add the `DebugBridge` SPM dependency... wire it from the `@main` App init") and the exact devicectl launch invocation is unspecified.

4 / 5

Workflow Clarity

Four clearly sequenced phases with an explicit in-loop validation checkpoint ("re-screenshot → compare" after every state-changing action, with screenshots required before and after) and a five-row failure table mapping specific error codes (403, 409, 429, 503) to concrete recovery actions — explicit validation plus feedback loops for error recovery.

5 / 5

Progressive Disclosure

No bundle files exist (references/, scripts/, assets/ are absent), and the body stays a lean overview: it delegates setup, capability tiers, and ACL detail to the runtime repo's README ("Read that repo's README.md first; it is the source of truth for setup, capability tiers, and the Tailscale ACL shape") — a well-signaled, one-level-deep reference with clear section navigation (Runtime, Loop, Rules, Failure modes).

5 / 5

Total

18

/

20

Passed

Description

92%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: concrete capability list, explicit 'Use when' triggers, a clear runtime dependency, and explicit boundaries against simulator/XCTest work. The only weakness is moderate synonym coverage in the trigger clause, where a few natural phrasings users might say are missing.

DimensionReasoningScore

Specificity

The description lists six concrete actions — "screenshot, read the accessibility tree, inspect @Observable state, tap, swipe, and type" — covering both observation and input, which matches the 'comprehensive coverage' anchor. It is not 4 because coverage within its stated domain is complete rather than leaving minor gaps.

5 / 5

Completeness

It explicitly answers what ("Drive QA of a SwiftUI app on a real iPhone over USB... through an HTTP bridge embedded in the app under test") and when ("Use when asked to test an iOS app on a physical device, find bugs on the device, or expose a connected iPhone to a remote agent over Tailscale") with concrete trigger phrases, plus a boundary clause ("not for simulator or XCTest work").

5 / 5

Trigger Term Quality

"Use when asked to test an iOS app on a physical device, find bugs on the device, or expose a connected iPhone to a remote agent over Tailscale" supplies several natural phrases a user would say. It falls short of 5 because common variants ("on-device", "real device", "QA my iPhone app") are absent, and it is above 3 because multiple natural trigger phrases are explicitly present.

4 / 5

Distinctiveness Conflict Risk

The niche is sharply defined — real iPhone over USB, @Observable state inspection, Tailscale exposure — and the explicit exclusion "not for simulator or XCTest work" prevents overlap with simulator- or XCTest-based testing skills, matching the 'clear niche with distinct triggers' anchor.

5 / 5

Total

19

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

phatblat/dotfiles

Path

.agents/skills/ios-device-qa/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.