phone-harness

phone-harness is a skill for Claude Code from oyi77/1ai-skills. It costs 93 tokens per session (1,132 once invoked), scanned A, original, MIT.

A tool for controlling a real Android or iPhone screen through a connected computer. It can open apps, tap, type, swipe, and read screen text; Android uses ADB, a standard debugging connection.

In plain words
What is it for?
Use it for hands-on phone debugging and for checking changes on a real device. On the stated Linux workstation, the supported path is Android; iPhone control requires macOS and iPhone Mirroring.
Why use it?
It handles phone actions that a web page or API cannot, such as setup dialogs, account switching, one-time codes, and checking a device's current state.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the 1ai-skills plugin — 212 skills, 4 commands shipped together

Good fit Use it for hands-on phone debugging and for checking changes on a real device. On the stated Linux workstation, the supported path is Android; iPhone control requires macOS and iPhone Mirroring.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/oyi77/1ai-skills/phone-harness
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add oyi77/1ai-skills --skill phone-harness
Clone the repo
git clone --depth 1 https://github.com/oyi77/1ai-skills

Made for: Claude Code.

Or install 1ai-skills, the plugin that ships this one along with the rest of its 212 skills, 4 commands.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for phone-harness

README.md
[![agentmods](https://agentmods.dev/badge/skills/oyi77/1ai-skills/phone-harness/github.svg)](https://agentmods.dev/skills/oyi77/1ai-skills/phone-harness)
Your own site
<a href="https://agentmods.dev/skills/oyi77/1ai-skills/phone-harness"><img src="https://agentmods.dev/badge/skills/oyi77/1ai-skills/phone-harness/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for phone-harness

Your own site · 80×15
<a href="https://agentmods.dev/skills/oyi77/1ai-skills/phone-harness"><img src="https://agentmods.dev/badge/skills/oyi77/1ai-skills/phone-harness.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 93 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,132 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00093 $0.01132
Opus 5.5 $0.00037 $0.00453
Sonnet 5.5 $0.00019 $0.00226
Haiku 4.5 $0.00009 $0.00113

Measured 1mo ago against content hash 6e8a62599ee4, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

phone-harness scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

automation/phone-harness/SKILL.md · 119 lines

How it starts

The opening of the file, as written. The whole thing — 119 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Phone Harness

When to Use

Trigger phrases:

  • "control my phone"

  • "tap on the phone"

  • "read the phone screen"

  • "install/use phone-harness"

  • One-off phone actions adapters don't cover: OTP/2FA prompts, Settings toggles, account switches, uninstalls, first-run dialogs

  • Debugging a phonefarm device state (what app is foreground, what's on screen)

  • Wiring a new farm workflow before promoting it into a phonefarm adapter

  • Verifying an adapter change against a real device by hand

When NOT to Use

  • Anything doable via web/API — leave the phone alone (phonefarm adapters first)
  • Recurring production farm workflows → implement in 1ai-phonefarm adapters (adapters/<platform>/mobile_adapter.py), not ad-hoc harness scripts
  • Tasks needing multi-touch (pinch), camera, or Face ID — unsupported
  • iOS flows on this box — no macOS here; Linux workstation = Android-only

Workflow

  1. Install once (Android focus for this workstation):
    git clone https://github.com/ShawnPana/phone-harness ~/.phone-harness
    cd ~/.phone-harness && pip install -e .
    # or: read install.md in the repo and follow it
    phone-harness --doctor   # verify adb + device chain
    
  2. Set Android default (this box has no macOS/iPhone Mirroring):
    phone-harness config set platform android
    
  3. Drive the device (helpers pre-imported):

task: dismiss a first-run dialog on the farm device

step: OCR, tap the right label, verify

open_app("chrome"); wait_stable() tap_ui("Got it") # label from accessibility tree — exact, no misreads

4. Verify after every action — adb reports nothing about outcomes; a tap on
empty space "succeeds". Use `wait_for_app(...)`, `wait_for_text(...)`, or
one `ocr()` check. Batch only steps already watched working.
5. Keep the phone awake for long tasks: `phone-harness android awake --bg`,
then `phone-harness android rest` at the end.

Key helpers: `ocr()`, `ui()`, `find_nodes()`, `tap_ui()`, `tap_text()`,
`screenshot()`, `open_app()`, `back()`, `current_app()`, `list_apps()`,
`swipe()`, `scroll()`, `type_text()`, `press()`.

Read the full file on GitHub · 119 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 119 lines · 93 tokens per session scan A 6e8a62599ee4

Subscribe to this mod's changes

phone-harness is a skill published in the GitHub repository oyi77/1ai-skills (15 stars, last pushed today), licensed MIT. It adds 93 tokens to every session and 1,132 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-16.

Related

Other skills, from other repositories

extract-apk

A workflow for finding an Android app on a connected device, exporting its APK, and turning it into searchable decompiled source files. An APK is the installable package used by Android apps.

niki914/zafiro · 105 tokens

assistant-add-support

A workflow for adapting an Android voice assistant integration to a new app version. It examines the updated app package, checks whether the integration points changed, and creates and verifies a matching configuration.

niki914/zafiro · 61 tokens

flutter-error-handling

Implement functional repository error recovery with Either/Failure patterns in Flutter. Use when handling exceptions or dartz Either types in data flows; defer UI-only retry buttons.

HoangNguyen0403/agent-skills-standard · 37 tokens

rn-agent-observer

Runtime observability for React Native/Expo apps on Android. Use when debugging RN UI, performance (FPS, JS blocking), network, re-renders, or runtime errors on a running app — understand the current screen and UI findings, capture screenshots, UI trees, ref snapshots, per-request network, CDP console/heap/CPU…

GinzaTech/rn-agent-observer · 102 tokens

flog-inspect

Use when a user asks an agent to inspect Flutter app logs, network traffic, SSE/WebSocket streams, current page state, screenshots, or debugging context through flog instead of copying from the TUI.

shaominngqing/flog · 45 tokens

android-use

Control Android devices via ADB. Use when user asks to tap, swipe, type, launch apps, take screenshots, or automate Android device interactions.

iurysza/android-use · 33 tokens