My reading of the phone-harness README is that the question of trust rests on a human responsibility it names in one line of the Limits section: "Connecting the phone is always the user's job." Once you make that connection, the agent drives. The project connects Claude Code, Codex, or any agent to your real phone, and the task in the README's Demo section is "Buy me a Waymo to Delah Coffee from my current location." That is an agent asked to pay for something. If you run agents for a living, the thing to check is what sits between the agent and that purchase. The README describes setup steps you perform with your own hands, but does not say they constrain later actions.
What the agent gets
The README says the agent "sees the screen, taps, types, and reads the result." It claims no jailbreak, no Xcode, and nothing installed on the phone. Control runs through the Mac's iPhone Mirroring window on iPhone and through adb on Android.
On iPhone, iPhone Mirroring renders the phone as a Mac window and forwards mouse and keyboard as touches. The harness captures that window, runs OCR on it with Apple's Vision framework to get text with tap-ready coordinates, and posts HID-level events for taps, swipes, and typing.
On Android, adb is the transport. screencap is the capture, the phone's accessibility tree is the text source, and input is the hands. The README says this works over USB or Wi-Fi, with no window needed.
The same helpers work on both platforms, and phone-harness config set platform ios|android picks the default. The README's usage example looks like this:
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. The README points to SKILL.md as the agent's day-to-day guide and to helpers.py for the full list. I have not read either file for this piece.
Where the human stays in the loop
Setup is itself delegated to an agent. You paste a prompt into Claude Code or Codex telling it to clone the repo into ~/.phone-harness, read install.md first, install it so phone-harness is a command on your PATH, register it as an agent skill named phone-harness using phone-harness skill as the body, then read onboarding.md and walk you through it. The agent installs the tool that will later drive your phone. That ordering deserves a look before you paste anything.
What the README leaves to you during setup are the pairing and permission steps. 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. phone-harness --doctor checks the chain.
The Limits section lists a few more points where a person has to act or where the harness falls short. Unlocking the iPhone pauses mirroring, and a PIN-locked Android needs the user. OCR sees text, not icons, so unlabeled controls need a screenshot and a vision-capable model. There is no multi-touch and no camera or Face ID flows, and DRM video renders black. The README lists these under Limits and does not present them as safety features, and neither would I.
What the README does not cover
For a tool whose Demo section asks an agent to buy a Waymo ride, the README says nothing about several things an operator would want to know. It does not mention confirmation prompts before purchases or messages, an allowlist of apps, a log of what the agent tapped, a dry-run mode, or a way to cap what a connected agent can do. Whether any of that exists in the code or in SKILL.md, the README does not say.
It also advertises Phone Harness Cloud, described as hosted iPhones and Androids "with stealth, real numbers, 2FA, and unlimited devices." The README gives no further detail on how that service works.
How I would try it
Given what the README does say, the practical move is to limit the exposure yourself. Use a spare device or a secondary account rather than the phone that holds your payment methods and primary email, since the README does not describe app allowlists or action-level controls. Run phone-harness --doctor to confirm the chain, then start with the kind of task in the usage example, opening Notes and reading text back, before handing it anything that costs money. On the iPhone path the phone is rendered as a window on your Mac, so you can keep that window in view while the agent works.
The author describes phone-harness as free and maintained in their own time, with sponsorship as the way to keep it that way.
GitHub: https://github.com/ShawnPana/phone-harness
Curated by Agent Palisade — practical AI for small and mid-sized businesses.
Top comments (0)