Skip to main content

Phone Harness 📱

phone-harness · let your agent control your phone.

Connect Claude Code, Codex, or any agent to your real phone. iPhone through the Mac's iPhone Mirroring window, Android over adb from macOS, Linux or Windows. No jailbreak, no Xcode, nothing installed on the phone. The agent sees the screen, taps, types, and reads the result.

  ● agent: wants to open Weather
  │
  ● find_text("Weather") → (400, 468)
  │
  ● tap(400, 468) → reads the screen → forecast is up
  ✓ done

Try Phone Harness Cloud → Hosted iPhones and Androids with stealth, real numbers, 2FA, and unlimited devices

Get started by sending the setup prompt to your coding agent.

Demo

Task: "Buy me a Waymo to Delah Coffee from my current location."

https://github.com/user-attachments/assets/80b6d38e-0222-481c-93db-9de60d79247a

Setup

Paste into Claude Code or Codex:

Set up phone-harness for me. Clone https://github.com/ShawnPana/phone-harness into ~/.phone-harness, read `install.md` first, install it so `phone-harness` is a command on my PATH, and register it as an agent skill named phone-harness using `phone-harness skill` as the body. Then read `onboarding.md` and walk me through it.

The agent asks which phone is your default and walks you through the parts that need your hands: pairing iPhone Mirroring and granting Accessibility and Screen Recording, or turning on Android developer options and approving adb. It also offers a cloud Android — the same helpers with nothing to pair, and the first 100 minutes free — so an iPhone user can test on Android too. phone-harness --doctor checks the chain. Details in install.md.

Usage

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

Helpers are pre-imported. SKILL.md is the agent's day-to-day guide; helpers.py is the full list.

No phone on your desk? Rent one

phone-harness cloud login     # once: approve in your browser
phone-harness cloud start     # your own Android phone; apps and logins are kept
phone-harness <<'PY'
print(screenshot())
PY
phone-harness cloud stop      # billing stops, the phone is saved

Phone Harness Cloud phones are Android phones reached over adb, so every helper works on them unchanged and there is nothing to export or select. phone-harness cloud lists the rest: ls, watch, history, and start --temp for a throwaway phone.

How it works

iPhone. iPhone Mirroring renders the phone as a Mac window and forwards mouse and keyboard as touches. The harness captures that window, OCRs it with Apple's Vision framework for text with tap-ready coordinates, and posts HID-level events for taps, swipes, and typing.

Android. adb is the transport. screencap is the capture, the phone's accessibility tree is the text source, input is the hands. Works over USB or Wi‑Fi, no window needed.

Same helpers on both. phone-harness config set platform ios|android picks the default.

Limits

  • Unlocking the iPhone pauses mirroring; a PIN-locked Android needs the user.
  • OCR sees text, not icons. Unlabeled controls need a screenshot and a vision-capable model.
  • No multi-touch, no camera or Face ID flows. DRM video renders black.
  • Connecting the phone is always the user's job.

Sponsor

phone-harness is free and maintained in my own time. Sponsoring keeps it that way.

Metadata

Release files for phone-harness 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for phone-harness 0.3.0
File Size Uploaded
phone_harness-0.3.0.tar.gz 74.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for phone-harness 0.3.0
File Interpreter ABI Platform
phone_harness-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 153.7 kB

Release files / phone_harness-0.3.0.tar.gz

Download URL phone_harness-0.3.0.tar.gz
Size 74.4 kB
Tags Source
SHA-256 checksum
How to use checksums
620d3e0688a5ea5fada1d169ff137ed7792860ae67fb7b3b01a1bcc77b97c0b2
BLAKE2b-256 checksum
How to use checksums
eb4bf2c45b4b030c722bb17e0d1045a2ac2bbee3fc209dea82722d768d21e496
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Release files / phone_harness-0.3.0-py3-none-any.whl

Download URL phone_harness-0.3.0-py3-none-any.whl
Size 79.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c01e78a4f707caf642db7bd920a4e2f1fa33bb3278ed27444ebf3d8203ee2240
BLAKE2b-256 checksum
How to use checksums
b3c583086e01f46f6a14fb7d70a7c6fd424abedc7f63a4bc658cd018ab89ba40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page