device-interaction
Verify iOS app behavior on device or simulator via screenshots, UI hierarchy, and touch interactions.
Skill by guillevc
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/guillevc-device-interaction
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/device-interaction
What's inside
- Skill name
device-interaction- Description
- Verify iOS app behavior on device or simulator via screenshots, UI hierarchy, and touch interactions.
- License
- MIT
- Instructions
- 132 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Device Interaction
TRIGGER when: user asks to verify/test/check if the app works on device, after implementing a UI-affecting feature that needs device verification, user says "does it work", "test this", "check on device", user reports UI doesn't work as expected, need to debug touch/interaction issues.
DO NOT TRIGGER when: user asks about unit tests only, build-only requests without device testing, code review without device testing, simulator configuration questions, changes that don't affect UI (e.g. comments, refactors, non-UI logic).
---
# For the Main Agent
**This is a SUBAGENT skill.** Invoke it via the Agent tool when device verification is needed. If there is an open session for that work, provide that session identifier to a subagent for exclusive use by that subagent.
```
Agent tool:
- subagent_type: "general-purpose"
- description: "Verify login feature works"
- prompt: "Using the device-interaction skill, verify that the login feature works correctly on session <session-identifier>. Launch the app, capture screenshot and UI hierarchy, check that the login button is visible and tappable, and report if the implementation is working correctly."
```
**After implementing a UI-affecting feature, invoke this skill to verify the implementation works on a device.**
## Session Lifecycle
```
DeviceInteractionStartSession (do this early, runs in the background)
→ DeviceInteractionInstallAndRun (after each code change; includes building)
→ DeviceEventSynthesize (interact + observe, repeatable)
→ DeviceInteractionEndSession (when done — keeping sessions open is resource-heavy)
```
## DeviceInteractionStartSession tool
### Device Discovery
When opening a new device interaction session, pass a device identifier to select a device, or omit it to use the current destination. Pass any non-matching value to get a list of available targets.
## DeviceInteractionInstallAndRun tool
### Optional Parameters
- `commandLineArguments` — arguments passed to the app at launch. Use `$(inherited)` as a token to preserve the scheme's existing arguments (e.g. `["$(inherited)", "--reset-state"]` to add an extra argument at the end).
- `environmentVariables` — key/value pairs set in the app's environment at launch. Use `"$(inherited)"` as a key to preserve the scheme's existing environment variables (e.g. `{"$(inherited)": "", "DEBUG_MODE": "1"}`).
Omit both parameters to leave the scheme's arguments and environment unchanged.
**Prefer these parameters over editing the scheme directly.** They are applied only for that one run and have no lasting effect on the user's configuration.
---
# For the Subagent
**ALWAYS** report UI issues that might be caused by code: overlapping or unreadable text, unexpectedly cropped image/text, wrong colors etc.
## DeviceEventSynthesize tool
This tool allows performing an interaction and observing the state of a device.
## Reading Hierarchy Files
The hierarchy files include calculated center positions for each element:
```
UIView {{100, 200}, {50, 30}}, center: {125.0, 215.0}
UIButton "Login" {{110, 205}, {30, 20}}, center: {125.0, 215.0}
```
- `{100, 200}` - origin position
- `{50, 30}` - width and height
- `center: {125.0, 215.0}` - calculated center point (best for tapping)
**Always prefer the center coordinates for touch events.**
Warning: Elements marked `isRemoteLeafPlaceholder` do not report child elements — interacting with them requires falling back to screenshot-estimated coordinates.
## Interaction Command Syntax
The `interactionCommand` parameter accepts a command syntax:
| Command | Description |
|---|---|
| `t <x> <y> [duration]` | Tap at coordinates with optional hold duration |
| `d <x> <y>` | Double tap |
| `t <x1> <y1> f <x2> <y2> [duration]` | Swipe from (x1,y1) to (x2,y2) |
| `b h/p/u/d [duration]` | Hardware button: h=Home, p=Power, u=VolUp, d=VolDown |
| `sender keyboard kbd <text>` | Type text; **must be the last command in the chain** — all content after `kbd ` is taken verbatim (multiple spaces preserved). For special characters use `\u{XXXX}` Unicode escapes: `\u{000A}` (return/newline), `\u{0009}` (tab) |
| `w duration` | Wait for a duration without any work |
| `orientation faceDown/faceUp/landscapeLeft/landscapeRight/portrait/portraitUpsideDown` | Set device orientation |
**Examples:**
- `"t 100 200"` - Tap at (100, 200)
- `"d 200 300"` - Double tap at (200, 300)
- `"t 200 600 f 200 200 0.3"` - Swipe up (scroll to the content below)
- `"t 200 200 f 200 600 0.3"` - Swipe down (scroll to the content above)
- `"b h"` - Press home button
- `"b h b h"` - Press home button twice to go to the app switcher
- `"b h w 0 b h"` - Wake and unlock a device (non-passcode devices only)
- `"sender keyboard kbd hello world"` - Type text with spaces
- `"sender keyboard kbd hello world"` - Type text preserving multiple spaces
- `"sender keyboard kbd submit\u{000A}"` - Type text then press Return/submit
- `"w 0.3"` - Wait for 0.3s
- `"orientation landscapeLeft"` - Rotate device to landscape
## Standard Subagent Workflow
Before any interaction, always capture and read the hierarchy (and screenshot). After any interaction, capture again and verify the result. For complex components (like toggles or switches), look at nested elements (like `Switch` or `Slider`) — nearby elements might correspond to the actual control. When done, report findings to the main agent.
- To capture without interacting, use DeviceEventSynthesize with an empty interactionCommand.
- Never guess positions from screenshots alone — always use hierarchy center coordinates.
- If not confident or thumbnail resolution is insufficient, analyze the full-size screenshot.
## Timing and Retries
- **App launch**: After starting a session, the app may take a few seconds to load. Capture the hierarchy and check it has meaningful UI elements before interacting. If the hierarchy is mostly empty or shows a launch screen, capture again before proceeding.
- **After interaction**: If a tap or swipe doesn't produce the expected change, recapture the hierarchy and retry the interaction once (the element may have shifted during an animation). If it still fails after one retry, report the failure rather than retrying indefinitely.
- **Loading states**: If the hierarchy shows a spinner or loading indicator, capture again after a brief pause. Do not interact with elements that are still loading.
## Judging Success vs Failure
When verifying, distinguish between these categories:
- **Functional bug** (always report): element doesn't respond to tap, navigation goes to wrong screen, crash, data not displayed, missing expected UI element.From guillevc/skills, MIT.
More from guillevc/skills
- 0.570score
audit-xcode-security-settings
guillevc
Audit and enable security-oriented Xcode build settings.
SkillAFreshness: AClaude Code +9 - 0.567score
uikit-app-modernization
guillevc
Modernizes UIKit apps for multi-window environments by replacing legacy shared-state APIs with context-appropriate modern alternatives.
SkillAFreshness: AClaude Code +9 - 0.567score
adopt-c-bounds-safety
guillevc
Guide for the C -fbounds-safety language extension.
SkillAFreshness: AClaude Code +9 - 0.566score
swiftui-whats-new-27
guillevc
New SwiftUI APIs, behaviors, and deprecations introduced in the 2027 OS releases (iOS 27, macOS 27, watchOS 27, tvOS 27, visionOS 27).
SkillAFreshness: AClaude Code +9 - 0.560score
swiftui-specialist
guillevc
Authoritative SwiftUI best practices from Apple.
SkillAFreshness: AClaude Code +9 - 0.558score
modernize-tests
guillevc
Modernize test suites to use modern Swift Testing features or migrate from XCTest.
SkillAFreshness: AClaude Code +9 - 0.518score
simple-english
guillevc
Rewrite or write English at a CEFR level (default B1) so non-proficient readers understand it.
SkillBFreshness: BClaude Code +9 - 0.479score
swift-factory-di
guillevc
MUST USE for questions about the Swift Factory dependency injection library by hmlongco, also called FactoryKit.
SkillCFreshness: CClaude Code +9 - 0.474score
2-commit-fast
guillevc
Fast auto-commit: analyzes staged git changes and commits with an intelligent conventional commit message — no confirmation needed.
SkillCFreshness: CClaude Code +9 - 0.474score
record
guillevc
Write a resolved fact into the living spec (a glossary term or an ADR) and keep it coherent.
SkillCFreshness: CClaude Code +9 - 0.474score
develop
guillevc
Take a unit of work from fuzzy idea to shipped, on one loop.
SkillCFreshness: CClaude Code +9 - 0.474score
audit
guillevc
Audit code against the living spec (ADRs and the glossary) and let the human resolve each contradiction.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 3, 2026 (25 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/guillevc/skills
- Website
- skills.sh/guillevc/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from guillevc
- 0.570score
audit-xcode-security-settings
guillevc
Audit and enable security-oriented Xcode build settings.
SkillAFreshness: AClaude Code +9 - 0.567score
adopt-c-bounds-safety
guillevc
Guide for the C -fbounds-safety language extension.
SkillAFreshness: AClaude Code +9 - 0.567score
uikit-app-modernization
guillevc
Modernizes UIKit apps for multi-window environments by replacing legacy shared-state APIs with context-appropriate modern alternatives.
SkillAFreshness: AClaude Code +9 - 0.566score
swiftui-whats-new-27
guillevc
New SwiftUI APIs, behaviors, and deprecations introduced in the 2027 OS releases (iOS 27, macOS 27, watchOS 27, tvOS 27, visionOS 27).
SkillAFreshness: AClaude Code +9 - 0.560score
swiftui-specialist
guillevc
Authoritative SwiftUI best practices from Apple.
SkillAFreshness: AClaude Code +9 - 0.558score
modernize-tests
guillevc
Modernize test suites to use modern Swift Testing features or migrate from XCTest.
SkillAFreshness: AClaude Code +9
Cite this page
device-interaction skill. Agent Mart. https://agentmart.dev/skills/guillevc-device-interaction (last updated 2026-10-24)