Automation#Coding agent#Device control

phone-harness

phone-harness lets Claude Code or Codex control a real iPhone or Android — no jailbreak, nothing on the phone; iPhone rides Mac mirroring, Android runs on adb.

Project facts

GitHub Ecosystem
Repositorygithub.com/ShawnPana/phone-harness
License
MIT
Language
Python
Stars
3,084
Data checked
2026-09-29

Snapshot figures reflect the check date and may change over time.

Apps without APIs put your agent in a cage: it can browse, but it can’t hail a ride, order lunch, or send a text, because those live on your phone. phone-harness hands the phone over — Claude Code, Codex or any agent sees the screen, taps, types, and reads the result on a real iPhone or Android. The trick is that nothing touches the phone’s OS: on iPhone the harness watches macOS’s iPhone Mirroring window, no jailbreak, no Xcode, nothing installed on the device. The repo was created on August 7, 2026 and had 3,084 stars when checked on September 29.

Core features

  • Zero phone modification: iPhone goes through the Mac’s iPhone Mirroring window, Android over adb (USB or Wi-Fi) — no jailbreak, no Xcode, no automation app sideloaded.
  • The screen is its eye: on iPhone, Apple’s Vision framework OCRs the mirrored window, so find_text("Weather") returns tap-ready coordinates like (400, 468) and tap(400, 468) lands on it; Android reads the accessibility tree, which beats OCR for text.
  • One helper set, both platforms: phone-harness config set platform ios|android switches the default device; every helper works unchanged.
  • Agent Skill registration: phone-harness skill emits a SKILL.md for Claude Code / Codex, and the README ships a setup prompt that lets the agent install the whole thing itself.
  • Asks before it spends: the demo task is “Buy me a Waymo to Delah Coffee from my current location” — the agent opens the app, enters the destination, then stops for confirmation before paying.
  • Rent a phone in the cloud: phone-harness cloud start boots a dedicated cloud Android with apps and logins kept, first 100 minutes free; cloud stop ends billing and start --temp gives you a throwaway.

Typical use cases

  1. Apps without APIs: rides, food delivery, banking — the agent walks the screen step by step on your behalf.
  2. Repetitive bulk actions: messaging a list of contacts or cleaning up in-app content, wrapped in a few lines of Python.
  3. Cross-platform testing: an iPhone-only developer rents a cloud Android and runs the same script on the other side.

It shares a philosophy with OpenMausBot, which gives agents a full computer and asks for chat approval before acting — phone-harness just shrinks that radius to your pocket.

Quick start

Prerequisites: Python 3.10+; the iPhone path needs a Mac, Android works from macOS, Linux or Windows. The laziest install is pasting the README’s setup prompt into Claude Code or Codex and letting it set itself up; manual steps live in install.md. Either way, start with the doctor:

phone-harness --doctor

It checks the chain item by item — on iPhone you’ll grant Accessibility and Screen Recording to your terminal in Privacy & Security, on Android you’ll enable developer options and approve adb. Once it’s green, a few lines of Python are a full session:

phone-harness <<'PY'
open_app("Notes")
tap_text("New Note")
type_text("hello from the harness")
print([o["text"] for o in ocr()][:10])
PY

Summary

For developers and tinkerers who want their agent’s hands on real phone apps, this runs today with a Mac plus an iPhone, or any Android; if you only need links clicked and pages scraped, stay in the browser. MIT-licensed Python, created August 7, 2026, still pushed on September 27 — young (3,084 stars checked September 29). The README is honest about limits: unlocking the iPhone pauses mirroring, a PIN-locked Android needs you; OCR reads text, not icons, so unlabeled controls need a vision model on a screenshot; no multi-touch, camera, or Face ID flows, and DRM video renders black. The cloud phones are its paid service, so heavy use turns into a subscription.