Manzanas
Drive iOS simulators from Claude Code, Cursor or Codex by accessibility label instead of screenshot-and-tap-coordinates. Exposes ui_tree, tap_element, type_into_element, wait_for_element and scroll_to_element, and every action reports whether the UI actually changed. A Mac daemon underneath hands out simulators as TTL leases with a queue and keeps a SIGSTOP warm pool, so a lease gets a live simulator in about 0.28s instead of a 7s cold boot, and multiple agents can share one Mac without colliding. Open source, MIT.
Quick Install
Automated & IDE SetupCopy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
Manual Client & Custom JSON ConfigExpand JSON โพ
Install Config Generator
๐ก Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Documentation Overview
manzanas
A Mac daemon for multi-agent iOS simulator fleet orchestration: leases, actions, streaming, deterministic state, and an exportable run journal for AI agents (and humans) sharing simulators.
https://github.com/user-attachments/assets/deb577d0-1123-4a89-90d8-8d9c7684a3cf
The launch film โ leases, actions, live streaming, warm pools, the broker, and the run journal in 52 seconds. Sound on.
manzanasd runs on each Mac host and owns everything stateful โ the
simulator registry, the lease table, the warm pool, action backends,
streamers, golden images, and the run journal. Clients (manzanas CLI, MCP
facade, SDKs) are thin and cross-platform, speaking a versioned JSON
protocol over HTTP + WebSocket. manzanas-broker federates N daemons
behind one endpoint โ start with one Mac, and when you outgrow it the same
clients lease across the whole fleet without changing a line.

Two agents lease pre-warmed simulators โ parked sims thaw on grant instead of paying a 5 s+ boot โ then drive one (warm taps land in ~50 ms end-to-end) and export the run journal as PR-ready evidence.
Website: manzanasd.vercel.app (source in
site/).
Install
See docs/install.md for launchd tarball installs and alternatives, and docs/quickstart.md for a single-Mac walkthrough from install to first screenshot.
Why
Agents driving simulators over raw SSH + CLI tools trip over each other
and pay huge fixed costs. manzanasd removes both, with measured numbers
(M3 Pro, macOS 26.5, Xcode 26.5; reproduce with make bench):
- Leases, not locks: TTL-bounded exclusive claims with FIFO queues โ no two agents ever drive the same sim.
- Park/thaw warm pool: idle sims are SIGSTOPped (a parked tree is unschedulable โ ~0 idle host CPU no matter what the sim's daemons are doing) and thawed on lease grant: ~0.28 s lease-to-live vs ~7 s for a cold boot (~29 s first boot). The thaw itself is a cached-PID SIGCONT and takes under a millisecond.
- Warm actions: a resident per-sim helper makes an end-to-end tap ~36 ms vs ~950 ms cold (per-action AXe spawn) โ ~3 s cold on Intel.
- Deterministic state: snapshots, fixtures, per-lease auto-reset, and golden images that stamp out slimmed sims in seconds (~0.75 GB vs ~5 GB stock, via simslim) โ how one Mac runs a dozen sims.
- Evidence: every mutating op under a lease is journaled, with content-addressed artifacts and a PR-ready markdown export.
| Leases | TTL-bounded exclusive claims, labels, FIFO queues, auto-reset |
| Warm pool | park/thaw (SIGSTOP) pool sims: ~0.28 s lease-to-live, ~0 idle CPU |
| Actions | cold (AXe) + warm (resident helper) taps/swipes/typing, composite tap_element, batches |
| Streaming | MJPEG fan-out, browser /view page, WS frames |
| Video | per-lease simctl recordings that land in the journal |
| State | snapshots, fixtures, per-lease auto-reset, golden images |
| Journal | append-only evidence per run, artifacts, export.md |
| Dashboard | read-only web dashboard at /dash: fleet, leases, multiview, journal browser |
| Devices | physical iPhones via devicectl + WebDriverAgent (--devices) |
| Fleet | manzanas-broker federates N Macs behind one endpoint |
| Clients | manzanas CLI, MCP tools over stdio, npm wrapper, GitHub Action |
![]() | ![]() |
|---|---|
the browser /view MJPEG live page | the built-in /dash fleet dashboard |
Quickstart
New here? docs/quickstart.md walks through a full single-Mac session (install โ lease โ tap โ screenshot). The short version:
Or the thin client (--json for machine output; see
clients/):
Production installs (launchd, releases): docs/install.md.
MCP (Claude Code, Cursor, Codex)
manzanas mcp serves the whole toolset over the Model Context Protocol
(stdio), so any MCP-capable agent can lease and drive simulators โ with
per-session auto-release of leases and self-describing tool errors.
Ready-to-paste client configs and troubleshooting:
docs/mcp.md.
Architecture
Documentation
Protocol:
- proto/PROTOCOL.md โ the v0 wire protocol: targets,
leases, actions (incl. composite
tap_element/type_into_elementandactions:batch), streams, state, images, journal, WS surface.
Subsystems:
- docs/architecture.md โ components and the interface contracts between slices.
- docs/agent-qa.md โ a worked end-to-end agent QA session, plus driving animated (React Native) apps: screenshot/type races, waiting strategy, batch entry shape.
- docs/devices.md โ physical iPhones as leasable targets (devicectl + WebDriverAgent).
- docs/recording.md โ per-lease video capture into the journal.
- docs/warm-pool.md โ park/thaw warm pool, footprint watchdog, host safety gates (503 overloaded).
- docs/actions-warm.md โ warm vs cold action
paths; the resident
simbridgehelper. - docs/streaming.md โ MJPEG streaming and the browser view page.
- docs/dashboard.md โ the built-in read-only web
dashboard at
/dash(fleet, leases, pool, journal browser). - docs/state.md โ snapshots, fixtures, per-lease auto-reset, quarantine.
- docs/images.md โ golden images: slim once, stamp N sims in seconds.
- docs/journal.md โ run journal format, artifacts, GC.
- docs/broker.md โ multi-Mac federation.
- docs/eval.md โ the scenario-driven determinism benchmark harness.
- docs/mcp.md โ the MCP server: setup, Claude Code/Cursor/Codex configuration, troubleshooting.
- clients/README.md โ
manzanasCLI + MCP quickstarts; clients/npm/; GitHub Action in action/.
Operations:
- docs/install.md โ launchd install, releases, Homebrew formula.
- docs/fleet.md โ running a multi-Mac fleet (topology, Tailscale, day-2 ops).
- docs/troubleshooting.md โ 503 overloaded, boot failures, parked-sim semantics, quarantine, and friends.
The physical fleet this runs on (machines, locks, build caching) is site-specific; docs/fleet.md covers the daemon's part.
Status
Everything above is implemented and running on the fleet โ leases +
queues, warm pool with safety gates, cold (AXe) + warm (simbridge) action
backends, composite/batch actions, MJPEG streaming, video capture,
snapshots/fixtures/auto-reset, golden images, journal, dashboard,
physical-device support, broker, eval harness, CLI + MCP. Verify with
go build ./... && go vet ./... && go test ./... (Linux-safe; simctl
paths are mocked).
License
MIT โ see LICENSE.
Related MCP Servers
View all alternativesFrequently Asked Questions about Manzanas
How do I install the manzanas MCP server?
Add the following block to your claude_desktop_config.json under mcpServers: "mcpServers": { "manzanas": { "command": "npx", "args": ["-y", "manzanas"] } }
What does manzanas do?
Drive iOS simulators from Claude Code, Cursor or Codex by accessibility label instead of screenshot-and-tap-coordinates. Exposes ui_tree, tap_element, type_into_element, wait_for_element and scroll_to_element, and every action reports whether the UI actually changed. A Mac daemon underneath hands out simulators as TTL leases with a queue and keeps a SIGSTOP warm pool, so a lease gets a live simulator in about 0.28s instead of a 7s cold boot, and multiple agents can share one Mac without colliding. Open source, MIT.
Is the manzanas MCP server free to use?
Yes. manzanas is listed on AllMCPs as a free, open Model Context Protocol server you can install into Claude Desktop, Cursor, or any MCP-compatible client.

