Pass or fail for the screen your agent wrote.
Mobster CLI gives Claude Code an iOS simulator and checks the screens it writes, with pass or fail from assertions. Your agent gets each screen as the button names VoiceOver reads, then taps and types.
Everything runs on your Mac. Commands go over the cable to the phone, with no relay and no account. It’s MIT licensed, and it’s free.
Try it with no phone: mobster --demo
Start with Mobster for Mac
It sets up your iPhone in one window: Developer Mode, the runner and the cable, step by step. Then your agent connects with one command, and you watch every step it takes.
Quickstart
- 1
Install
One line installs the mobster command. Run it again to upgrade.
curl -fsSL https://mobster.dev/install.sh | shbrew install radishsoftware/tap/mobster - 2
Add it to your agent
Finds Claude Code, Codex, Cursor, Zed and 9 more on your Mac and adds Mobster to each.
mobster mcp install --all - 3
Ask
Ask your agent to open your app on a simulator and check a screen. To try it with no iPhone, run the demo: a scripted phone, no key, no model calls.
mobster --demo
Works with your agent
mobster mcp install --all finds the agents on your Mac and adds Mobster to each: Claude Code, Codex, Cursor, Zed and 9 more.
mobster mcp is a local stdio MCP server. Your agent gets tools to read the screen, tap, type, swipe, open apps and handle alerts, on a simulator Mobster manages.
Mobster’s agent asks before it sends, buys, posts or deletes. When your agent taps through MCP, only its own permission prompts apply.
Claude Codemobster mcp install
Codexmobster mcp install- Cursormobster mcp install
Google AntigravitySet up from the docs
VS Code (Copilot)mobster mcp install
Claude Desktopmobster mcp install
Gemini CLImobster mcp install- Windsurfmobster mcp install
opencodemobster mcp install- Zedmobster mcp install
- Goosemobster mcp install
- Clinemobster mcp install
Ampmobster mcp install
Tested with Claude Code. For the others, the setup follows each client’s own MCP documentation. Names and logos belong to their makers.
Google Antigravity
Add Mobster to ~/.gemini/config/mcp_config.json, or open it from the agent panel: … › MCP Servers › Manage MCP Servers › View raw config.
{ "mcpServers": { "mobster": { "command": "mobster", "args": ["mcp"] } }}The skill and the Claude Code plugin
The mobster skill teaches your agent the verify loop, driving a phone and the safety rules. Add it with the server:
mobster mcp install --all --with-skillOr on its own, for any agent that reads skills, and as a Claude Code plugin with the server, the skill and /mobster:verify:
npx skills add RadishSoftware/mobsterclaude plugin marketplace add RadishSoftware/mobster
claude plugin install mobster@mobsterclaude mcp add mobster -- mobster mcpOne line in your terminal. Claude Code then sees the phone tools.
mobster run "Scroll basketball Reels for 10 minutes and tell me what you learned" --execute --json | jq -c 'select(.event == "result") | {status, data}'mobster run --json prints JSON lines. mobster serve adds a local HTTP API.
What your agent reads
Each step reads the iPhone’s accessibility tree: the labelled controls VoiceOver reads, with their values, roles and state. Your agent taps “Send” by name, reads “$39.99 / year” as text, and knows a switch is on.
Mobster reads each field back after typing it. Smart also looks at a small screenshot for what the tree doesn’t say.
Screen dev.mobster.daybreak 402×874 pt keyboard: none alert: none
e2 text "Choose your plan" id=paywall_title
e7 button "Weekly" value="$2.99 / week" id=plan_weekly
e13 button "Monthly" value="$7.99 / month" id=plan_monthly
e20 button "Annual" value="$39.99 / year" id=plan_annual selected
e27 button "Start free trial" id=paywall_ctaPass or fail for the screen your agent wrote
Your coding agent states what must be true (“Choose your plan” is on screen, three plan buttons, no “Loading”), drives your app on a simulator Mobster manages, and gets a verdict from the accessibility tree, with the frames that prove it.
A model never decides the verdict, so the verdict costs no model call. Steps you write in plain English run on your key. Every run leaves a one-file HTML report and a check file you can commit.
The paywall shows three plans with Annual at $39.99 a year
text “Choose your plan”count id=/^plan_/ == 3Found 2: plan_weekly, plan_monthlyvalue id=plan_annual == “$39.99 / year”Not found. Closest: plan_monthlyvisible label=Restore Purchases role=buttonno_text “Loading”
What you need
Mobster drives the phone through WebDriverAgent, so the iPhone needs Developer Mode and the Mac needs Xcode. That’s what buys the accessibility tree, and simulators too.
Tested on an iPhone 15 Pro running iOS 26, and on iOS 26 simulators. Mobster drives iPhones and iOS simulators from an Apple silicon Mac. It doesn’t drive Android, and it can’t get past Face ID or a passcode.
- An Apple silicon Mac
- Mobster and its runner are arm64 only.
- Xcode, signed in to an Apple ID
- Builds and signs the WebDriverAgent runner. A free Apple ID works; its signature lasts 7 days.
- Homebrew, libimobiledevice and git
- USB relay and device info; git fetches WebDriverAgent’s pinned source.
- An iPhone with Developer Mode on
- A USB data cable, and “Trust This Computer” on the phone.
- An Anthropic or OpenAI key, for Smart
- Mobster has no hosted model. Agents you connect bring their own.
Docs
- Getting started Install, connect, first run
- MCP server Tools, clients, approvals
- Checks The check file, assertion by assertion
- mobster verify Verdicts, frames and the report
- Simulators The simulators Mobster manages
- Device setup Developer Mode and the runner
- CLI reference Every command and flag
- Troubleshooting When a step doesn’t work
Open source, MIT
Mobster CLI is everything an agent needs on the phone: the command line, the MCP server, the built-in agent, mobster verify and the simulator manager. It’s on GitHub, and it’s what Mobster for Mac runs inside. Read what touches your phone, change it, or build on it.
Mobster for Mac adds guided setup for each phone, a live view, approvals, history and schedules, for $34.99 one time or $7.67 a month. See pricing

