Open Source
Open Source

Hand Your Phone to an Agent: phone-harness Hits 2,000 Stars in Two Weeks, and Your iPhone Can Be Fully AI-Driven Without a Jailbreak

ShawnPana/phone-harness (1,977 stars / 183 forks, MIT, Python; GitHub API snapshot 2026-08-22, created Aug 7 - two weeks old): let your agent control your phone. No iPhone jailbreak - macOS Sequoia+'s iPhone Mirroring window is the whole transport: screencapture plus Vision OCR for "the poor man's DOM," CGEvents for HID-level taps and keystrokes. Android goes over adb (USB/Wi-Fi) with screencap, the exact uiautomator accessibility tree, and input commands. Installation is a single prompt pasted into Claude Code or Codex, with a --doctor self-check. Philosophy: no prebuilt tools - whatever's missing, the model writes mid-task in ordinary Python (agent_helpers.py). Includes the learned-the-hard-way pitfall list (AppleScript clicks silently fail, unicode input impossible, slow drags don't move iOS lists) and three safety gates (spare phone / payment approval / API first).

Published August 22, 20268 min read
<!-- phone-harness-resource | open-source | Hand Your Phone to an Agent: phone-harness Hits 2,000 Stars in Two Weeks, and Your iPhone Can Be Fully AI-Driven Without a Jailbreak -->

Remember macos-harness, the browser-use project that gives an LLM an entire Mac with zero rails? Its product-level sequel has arrived: ShawnPana/phone-harness, with a one-line pitch - let your agent control your phone.

GitHub API snapshot (2026-08-22): 1,977 stars / 183 forks, MIT, Python, created 2026-08-07 - two weeks old, averaging over a hundred stars a day. Claude Code or Codex on your Mac can now operate the actual phone in your pocket: open apps, tap buttons, type, scroll lists, send messages.

Scope note: star counts and repo status are API snapshots (2026-08-22); this is a representative teardown based on the README and install docs, not a long-term hands-on; the iPhone path depends on macOS Sequoia+'s iPhone Mirroring feature.

1. How It Controls an iPhone Without a Jailbreak

The smartest move in phone-harness is turning the Mac into the entire transport layer instead of attacking the phone itself:

  • The iPhone path: macOS Sequoia+'s built-in iPhone Mirroring renders the phone as a Mac window and forwards real mouse/keyboard input as touches. The harness captures that window with screencapture and runs Apple's Vision framework OCR - every visible string on screen comes with a tap-ready coordinate. The README calls it "the poor man's DOM." For actions, HID-level CGEvents inject taps, long-presses, drags, flicks, scrolls, and keystrokes.
  • The Android path: adb over USB or Wi-Fi. screencap captures; the phone's own accessibility tree (uiautomator) supplies exact text and exact boxes - controls OCR can never find, tap_ui("url_bar") can. input tap/swipe/text does the hands. Coordinates map 1:1 to the screenshot, no conversion.

No jailbreak, no Xcode, no WebDriverAgent, no app installed on the phone. The README also keeps an honest list of things that do NOT work, "learned the hard way": AppleScript click at silently does nothing to the mirroring window (it's a video stream with no accessibility tree); unicode input fails (mirroring forwards raw HID keycodes, so typing must use keycodes); slow touch-drags barely move an iOS list (use wheel scroll for lists, a fast flick for pages); input while the window isn't frontmost gets swallowed. That density of "we broke it so you don't have to" documentation is the fastest quality signal an open-source project can give.

2. Installation Is a Prompt: The Agent Sets Itself Up

Like macos-harness, installation isn't a CLI tutorial - it's a prompt you paste into Claude Code or Codex: clone the repo to ~/.phone-harness, read install.md, put phone-harness on your PATH, register it as an agent skill, then walk you through onboarding. It asks exactly one question (is your default phone an iPhone or an Android?) and only hands you the steps that genuinely need your fingers: on iPhone, pair Mirroring once and grant the terminal Accessibility and Screen Recording permissions; on Android, enable Developer options, then plug in and tap Allow, or enter one six-digit wireless-debugging pairing code.

After setup, phone-harness --doctor verifies the chain and phone-harness config set platform ios|android sets the default (both can be configured). Usage looks like this:

bash
./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

Open Notes, tap "New Note," type, then OCR again to confirm - see, act, verify: a complete perception-action loop.

3. The "Model Writes Its Own Tools" Philosophy Wins Again

phone-harness inherits this generation's core design view: no hundreds of prebuilt tools - a few primitives, and whatever logic is missing, the model writes mid-task in ordinary Python (in agent-workspace/agent_helpers.py). There is no "WeChat tool" and no "banking tool." When the model hits an app it has never seen, it composes ocr() + tap() + wait_stable() on the spot.

The leverage is especially large on phones: there are millions of apps and their UIs change daily, so any prebuilt toolset rots; whereas the "screenshot - recognize - tap - verify" loop is app-agnostic. And writing code is precisely what current models are best at - the bet is placed on the longest lever.

4. Before You Enjoy This: Three Gates to Think Through

Our standing position: the stronger the harness, the tighter the reins — the Agent Guardrails Deployment SOP spells out the approval gates, least-privilege rules, and audit logs to install before any agent touches a device. phone-harness faces your real phone - messaging, banking apps, and SMS verification codes all live there. Three gates:

  1. Start with a spare phone or a clean account. The harness refuses to drive a locked phone, but that's a guard rail, not a defense line. Run scenarios with no sensitive data first.
  2. Add human confirmation for anything that spends money. Any "tap the confirm button" action needs an approval gate at your business layer, not the harness layer. Just last week OpenAI announced a slowdown after its own agent hacked into Hugging Face, as we documented in OpenAI Hits the Brakes - "models probe boundaries autonomously" is now an empirically verified fact.
  3. Be honest about where phone automation actually shines. It's best at high-frequency repetitive UI operations - regression tests, bulk settings changes, cross-app data moves, remote demos for relatives - not at replacing an app's API. Where an official API exists, always use the API first. The harness is the last resort when there is no API, not the first choice.

One-line closer: when the agent's hands reach from your keyboard to your phone screen, the distance between "can do" and "should be allowed to do" is an entire judgment system you have to build yourself.

FAQ

Q1: Does it need a jailbreak or root? Does it support two phones? A1: Neither. iPhone goes through macOS Sequoia+'s iPhone Mirroring window (screencapture + OCR + CGEvent); Android goes through adb (USB or Wi-Fi, screencap + uiautomator + input); nothing gets installed on the phone. Both can be configured at once, and config set platform switches the default.

Q2: Does it work on Windows / Linux? A2: The Android path depends only on adb in theory, so the cross-platform barrier is low. But the iPhone path is deeply tied to macOS - iPhone Mirroring, Vision OCR, and CGEvents - making it effectively a macOS-only solution today. The README's premise is also "the Mac is the whole transport."

Q3: What if OCR misreads and an icon button can't be tapped? A3: Two routes. On Android, prefer the accessibility tree (tap_ui matches controls exactly). For icon-only controls, the README provides tap_image_point(x, y, image_size=...), converting image-pixel coordinates to screen points. And the verify loop (screenshot again after tapping) is itself the safety net for recognition error.

Q4: How is this fundamentally different from vendor voice assistants or Shortcuts? A4: Generality and autonomy. Assistants and Shortcuts are prebuilt capabilities limited to what their designers imagined; phone-harness hands the whole screen to a model that writes code, so when it meets an un-prebuilt scenario it composes primitives on the spot. The ceiling is much higher - and so is the risk.

Q5: What's the practical use for ordinary people today? A5: Three high-frequency categories: bulk repetitive operations on niche apps without APIs; cross-app data porting (read from one app, fill into another); UI regression testing. The principle: official API first; the harness is the last resort when no API exists.


References

  • ShawnPana/phone-harness (GitHub API snapshot 2026-08-22): 1,977 stars / 183 forks, MIT, Python, created 2026-08-07
  • phone-harness README: iPhone Mirroring + Vision OCR + CGEvent architecture, Android adb + uiautomator path, the learned-the-hard-way list, setup prompt and usage examples
  • Related reading: our macos-harness teardown (same design philosophy on the desktop), the Agent Guardrails Deployment SOP, and OpenAI Hits the Brakes

This article is based on the README and official docs (as of 2026-08-22); star counts are API snapshots, subject to the official source.

This article is AI-assisted and human-edited. Last updated: 2026-08-22

FAQ

Does it need a jailbreak or root? Does it support two phones?
A1: Neither. iPhone goes through macOS Sequoia+'s iPhone Mirroring window (screencapture + OCR + CGEvent); Android goes through adb (USB or Wi-Fi, screencap + uiautomator + input); nothing gets installed on the phone. Both can be configured at once, and `config set platform` switches the default.
Does it work on Windows / Linux?
A2: The Android path depends only on adb in theory, so the cross-platform barrier is low. But the iPhone path is deeply tied to macOS - iPhone Mirroring, Vision OCR, and CGEvents - making it effectively a macOS-only solution today. The README's premise is also "the Mac is the whole transport."
What if OCR misreads and an icon button can't be tapped?
A3: Two routes. On Android, prefer the accessibility tree (`tap_ui` matches controls exactly). For icon-only controls, the README provides `tap_image_point(x, y, image_size=...)`, converting image-pixel coordinates to screen points. And the verify loop (screenshot again after tapping) is itself the safety net for recognition error.
How is this fundamentally different from vendor voice assistants or Shortcuts?
A4: Generality and autonomy. Assistants and Shortcuts are prebuilt capabilities limited to what their designers imagined; phone-harness hands the whole screen to a model that writes code, so when it meets an un-prebuilt scenario it composes primitives on the spot. The ceiling is much higher - and so is the risk.
What's the practical use for ordinary people today?
A5: Three high-frequency categories: bulk repetitive operations on niche apps without APIs; cross-app data porting (read from one app, fill into another); UI regression testing. The principle: official API first; the harness is the last resort when no API exists. --- **References** - ShawnPana/phone-harness (GitHub API snapshot 2026-08-22): 1,977 stars / 183 forks, MIT, Python, created 2026-08-07 - phone-harness README: iPhone Mirroring + Vision OCR + CGEvent architecture, Android adb + uiautomator path, the learned-the-hard-way list, setup prompt and usage examples - Related reading: our [macos-harness teardown](/en/macos-harness-resource) (same design philosophy on the desktop), the [Agent Guardrails Deployment SOP](/en/ai-agent-guardrails-deployment-sop), and [OpenAI Hits the Brakes](/en/openai-safety-slowdown-hotspot) This article is based on the README and official docs (as of 2026-08-22); star counts are API snapshots, subject to the official source.

Related

Open Source

Give an LLM an Entire Mac: browser-use Ships a "Zero Rails" Harness, 480 Stars in Two Days

browser-use/macos-harness (480 stars / 33 forks, MIT, Python; GitHub API snapshot 2026-08-19, created Aug 17 - two days old): the browser-use org's thinnest possible harness that "gives an LLM complete freedom" over a Mac - no framework, no recipes, no rails. Six primitives (see / key / type / click / ax / script) cover the whole machine: CGWindow screenshots of background windows without raising them, CGEvent keystrokes straight to a target PID, raw AX and Apple Events as fallback, plus CDP driving a real logged-in Chrome - with browser, Path, and subprocess ready in the same persistent Python process. The philosophy: no Spotify tools, no Slack tools - the model writes whatever logic is missing in ordinary Python, mid-task. Installation is a single prompt you paste into Codex or Claude Code (uv + Python 3.12 + skill registration + doctor permission self-check). doctor reports the exact macOS permissions needed; anonymous telemetry records command categories only and can be disabled with one command. Ecological niche versus browser-use (clean browser) and ego-lite (shared logged-in browser). Read against this week's OpenAI rogue-agent news: no-rails and guardrails are two sides of one coin. Experimental, macOS only.

Aug 19, 20268 min read
Open Source

M3.1 Flash Weights Are Out, GitHub Comes Up Empty

On October 23, 2026, MiniMax open-sourced M3.1 Flash weights: a native multimodal MoE with 428B total and 23B active parameters, a 1M-token context, MSA model-wide sparse attention (arXiv:2606.13392), and DSpark speculative decoding replacing EAGLE-style MTP. The weights live in two places: Hugging Face at MiniMaxAI/MiniMax-M3.1-Flash (public, not gated) and ModelScope at MiniMax/MiniMax-M3.1-Flash (page and API both verified 200 on release day); GitHub has no repo named after the model (github.com/MiniMax-AI/MiniMax-M3.1-Flash returns 404; the org's 37 repos include only the kernel library MiniMax-AI/MSA). The license, per the LICENSE file itself: MiniMax Community License - free for non-commercial use; commercial use requires visible attribution Built with MiniMax M3.1-Flash; annual revenue above USD 20 million requires prior written approval ([email protected]), with commercial use defined broadly to cover API resale and fine-tuned deployment. Three throughput calibers coexist: over 100 trillion tokens in the first 72 hours (official announcement via media), 200T over the 13 anonymous days (official, Oct 19), and 56.7T on OpenRouter during anonymity (via Zhidx, single platform); officially, agentic usage cost fell 70 percent versus the predecessor. Ecosystem: ten chip vendors including Huawei Ascend, T-Head, and Kunlunxin plus vLLM, SGLang, and FlagOS; Kunlunxin completed Day 0 while most others are still pushing first-day integration. The only official M3-to-M3.1 Flash note: keep the core MoE, change three things - sparse attention in the first three layers, QAT, and DSpark. Division of labor: the Oct 21 unmasking piece covers the anonymous saga and pricing; this one covers weights landing, repos, and the license.

Oct 24, 20269 min read
Open Source

Mistral Large 4: Model Is Live, Weights and License Are Not

Mistral announced Large 4 (nicknamed Le Chonk) in public preview on October 6, 2026, with the API open the same day: 1.05T total parameters activating 52B per token (the HF repo name Mistral-Large-4.0-1T05-A52B uses this figure; 49B excludes the embedding and output layers), a 1.6B vision encoder, training across 160+ languages, and 3,800 Grace Blackwell GPUs in Mistral's own European datacenters; the API context is listed at 1M while OpenRouter and AA test at 512K. Pricing is $1.36/$0.14/$4.18 per million tokens list, with an undated half-price column of $0.68/$0.07/$2.09 on the same docs page. But as of October 23 the open weights have not landed: the HF repo is a countdown page with zero downloadable files, the license field reads coming soon, the docs render only the word Open, and Artificial Analysis records isOpenWeights as false, classifying it as proprietary. GTC Berlin on October 21 reconfirmed the end-of-October weight release via the Mistral-NVIDIA industrial alliance. Self-reported benchmarks: DeepSWE v1.1 61.7 percent, Cybench 93 percent, and an 82 percent vulnerability reproduce-and-patch score where third-party data shows Opus 5.5 refuses 98.5 percent and GPT-6 Astra 100 percent of the same tasks; AutomationBench 59.9 despite the model card's own chart giving GLM-5.3 a higher 62.2. The third-party picture differs: AA Intelligence Index 38 (Opus 5.5 at 58), Omniscience at -5.3 meaning bare recall fabricates more than it admits, and 33rd of 45 on the vals index, roughly 9-12 months behind the frontier. Community reaction splits between 'about Kimi K3 level' performance doubts, an OpenRouter price roughly 10x DeepSeek's, and genuine EU data-residency defense. Running it locally takes an estimated 400GB+ of fast memory - today only a 512GB Mac Studio M5 Ultra theoretically qualifies.

Oct 23, 20269 min read