Snapshot
The current layout is saved to your Mac before anything is sent.
macOS app + MCP server · iPhone & iPad · USB or Wi-Fi
Your real home screen (real icons, real grid, real widgets) in a window on your Mac, and the same editor handed to AI agents as sixteen MCP tools. Every write is snapshotted first, then read back and verified. In the app, nothing is written until you've seen the exact diff. An agent writes once its plan validates; to approve each agent write yourself, turn on Confirm agent writes (it's off by default).
Developer ID signed and notarized. Not on the Mac App Store; the reason is written down, not hidden.
One home screen. Two ways in.
What an agent actually did
From Claude Code, over USB, on an iPhone 16 Pro running iOS 27.0.
Patch 1 swapped Zwift and Music in the dock. Patch 2 moved a Smart Stack by its UUID onto a full page; four apps flowed into the freed slots. Both previewed, both snapshotted, both verified clean. The worked example →
Afterwards, without having watched: Write History in the app (⌘Y) lists recent writes like these two, marked AGENT, with the same sentences. What the app can tell you →
01 The problem
With a couple of hundred apps, rearranging by thumb is a ritual: hold, wiggle, drag to the edge, wait for the page flip, miss. And in our tests in August 2026, Apple Configurator, Apple's own desktop editor, failed in two ways on an iPhone 16 Pro running iOS 27.0.
Type a name, press Return, and it reverts to the auto-generated App Store category (“Folder”, “Finance”) as soon as the view redraws.
Merge two apps into a folder and one ends up inside the folder and still on the page. ScreenWright's validator refuses that state: an app can't be in two places.
In our August 2026 survey: not Configurator, not 3uTools or AnyTrans, not sbmanager, not MDM layout payloads. ScreenWright reads Smart Stacks and widgets at their real footprint and moves, resizes, or removes them without touching what's inside.
Every route we found is drag-and-drop, a push-only MDM payload on a supervised device, or a robot driving simulated touches. ScreenWright exposes read → diff → write as structured calls.
An agent reorganizing 265 apps should be a structured call, not a robot dragging icons.the engineering brief, day one
02 The safety model
The device's acknowledgement for a home-screen write carries no information, so every write, from either face, is a five-step transaction. There is no other way to write.
The current layout is saved to your Mac before anything is sent.
Compiled against the real installed-app list and real grid. Any error refuses the write.
The exact diff, with nothing written: the Review sheet, or preview_layout, which also says what SpringBoard will make of it. An agent's preview isn't shown to you unless you turn on Confirm agent writes.
One push, then about three seconds for SpringBoard to settle.
Read back and diffed against the prediction. “Verified clean” is the only success signal.
03 The MCP server
screenwright-mcp speaks Model Context Protocol over stdio, exposes sixteen tools and nothing else, and works with the app closed. The layout grammar lives inside the tool descriptions.
list_devices→get_layout→get_installed_apps→preview_layout→apply_layoutName, model, iOS version, transport, UDID. A Wi-Fi-visible device appears twice.
Dock, pages, folders, widgets with UUIDs, and the device's real grid metrics.
Every bundle ID and display name; the list app refs resolve against.
Compile and validate a spec. Structured errors and warnings. No write.
Validate, the diff you asked for, and what SpringBoard will make of it. No write.
Snapshot → validate → write → settle ~3 s → read back → verify. Refuses on any error.
Pre-write snapshots, newest first. At least the last 20 are kept.
The restore, planned and shown, with nothing written and no snapshot taken.
Push a snapshot back through the same verified pipeline. Omit the name for the most recent.
An app's real icon as a PNG image block, by bundle ID.
All device tools take an optional udid (default: the first USB device) and network: true for the Wi-Fi link. A write over Wi-Fi is flagged wireless: true.
04 Limits
Limits of what iOS exposes to a paired computer, not features we haven't gotten to. The server states the four hard ones to agents in its own instructions.
| Capability | Status | Why |
|---|---|---|
| Wallpaper | Can't be set | No command exists. On iOS 27, even reading it breaks the service channel, so the app doesn't try. |
| Icon appearance (dark, tinted, large) | Can't be set | Not in the service. |
| Removing an app from the home screen | Not possible | SpringBoard re-inserts anything omitted. ScreenWright warns rather than pretends. |
| Creating a widget | Not possible | Existing widgets can be moved, resized, or removed, by UUID. A synthesized widget renders as a dead blank tile, so the compiler refuses to invent one. A snapshot can't bring back a widget you removed; add it again on the device. |
| Blank slots, free placement, hidden apps, Today View, App Library order | Not expressible | Not in the wire format. |
05 Pricing
The download is free, so you can see exactly what it would do to your phone before you pay. A license unlocks writing to the device. One payment, no subscription, no account. Downloads and purchases open with ScreenWright 1.0.
Free
$0 forever
License
US$19 once
apply_layout, restore_snapshot, apply_saved_layoutPurchasing opens with ScreenWright 1.0. Sold by Paddle, our reseller. Your local currency and any sales tax or VAT are shown at checkout. 14-day refunds.
ScreenWright uses parts of iOS that Apple doesn't document or support. Any iOS update can stop it working, and we can't promise a fix or a date. We plan on updates after major iOS releases, and the free features let you check your device before you pay. If it doesn't work out, ask for a refund within 14 days. The details are in the terms.
Updates: your license covers every 1.x release. A future 2.0 may be a paid upgrade; if it is, your 1.x license stays yours. No free trial of writing: the free features are the trial, and the refund is the safety net.
Questions? Read the FAQ on the Support page →
For macOS 15 or later · Free to download; a US$19 license unlocks writing
We've paused the download while we get 1.0 ready. If you'd like to hear when it's out, tell us on the support page: choose “Question” and ask to be told. We'll write to you once, when it ships.
Tell me when it's outDeveloper ID signed and notarized · drag to Applications
screenwright-mcp is inside the app, at ScreenWright.app/Contents/MacOS/screenwright-mcp, signed and notarized with it. Register it by absolute path; with the app in Applications:
claude mcp add screenwright -- /Applications/ScreenWright.app/Contents/MacOS/screenwright-mcpor, in a project's .mcp.json:
{
"mcpServers": {
"screenwright": { "command": "/Applications/ScreenWright.app/Contents/MacOS/screenwright-mcp", "args": [] }
}
}If the app lives somewhere else, don't guess the path: in ScreenWright, choose Help, then Set Up MCP Server, and copy either form. It reads the path of the copy that is running.
Smoke test it by hand:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_devices","arguments":{}}}' \
| /Applications/ScreenWright.app/Contents/MacOS/screenwright-mcpMade by Grizzly Mining Company LLC.