What it does. Direct control of the user's phone. iPhone: through the iPhone Mirroring app — screenshots + Vision OCR for eyes, HID-level CGEvents for hands. Android: over adb — screenshots + the phone's accessibility tree for eyes,
input
for hands (see the Android section; the helpers are the same).
phone-harness config
shows which is the default. For task-specific edits, use
agent-workspace/agent_helpers.py
. For setup or permission problems, read
install.md
.
If the task is doable on the Mac or the web — a website, an API, an app with a web equivalent — do it there and leave the phone alone. Use phone-harness only when the task genuinely needs the phone: iOS-only apps, things tied to the user's phone number or 2FA, testing how something looks on the phone.
Highlights
- Invoke as
phone-harness
. Use heredocs for multi-line commands.
- Start every script with two comment lines:
# task:
restating the user's
- Helpers are pre-imported. All coordinates are global screen points.
ensure_mirroring()
launches the window and gates on connection. The
- Prefer
ocr()
over eyeballing screenshots: every visible string comes back
When to use it. Control the user's phone — iPhone through the Mac's iPhone Mirroring window, or an Android over adb: open apps, tap, type, swipe, read the screen.
Install
npx skills add ShawnPana/phone-harness
Or copy the skill folder manually:
git clone https://github.com/ShawnPana/phone-harness.git
cp -r phone-harness/ ~/.claude/skills/phone-harness
Source: ShawnPana/phone-harness — 2,194 stars, MIT, last pushed 2026-09-02.