manzanas

by baribarigood

Not rated
GitHub

About

Drive iOS simulators from Claude Code, Cursor or Codex by accessibility label instead of screenshot-and-tap-coordinates, with leases and a warm pool so multiple agents can share one Mac.

Details

Author
baribarigood
Categories
Developer Tools, Other, AI

Setup

Install manzanas in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/baribarigood/manzanas

Follow the installation instructions in the repository README, then restart your MCP client.

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.

manzanasdruns 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 (manzanasCLI, MCP facade, SDKs) are thin and cross-platform, speaking a versioned JSON protocol over HTTP + WebSocket.manzanas-brokerfederates 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.

https://github.com/user-attachments/assets/983b0548-df1a-41a3-812c-f0f39cfaa01c

1 orchestrator, 7 Codex agents, 7 simulators across 3 Macs — leases mean nobody trips over anybody. Real time, no edits.

Website:manzanas.dapsdev.dev(source insite/).

brew tap baribarigood/tap https://github.com/BariBariGood/homebrew-tap brew trust baribarigood/tap # Homebrew >= 6 requires trusting third-party taps brew install manzanasd # daemon (+ pulls in the manzanas CLI) brew services start manzanasd # launchd service on port 7433

Seedocs/install.mdfor launchd tarball installs and alternatives, anddocs/quickstart.mdfor a single-Mac walkthrough from install to first screenshot.

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 withmake 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 mscold (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.

New here?docs/quickstart.mdwalks through a full single-Mac session (install → lease → tap → screenshot). The short version:

make build # builds bin/manzanasd, bin/manzanas, bin/manzanas-broker # on a Mac with Xcode: ./bin/manzanasd --addr :7433 # anywhere (Linux/dev/CI), with a mock fleet and a full mock action # backend — the whole lease→observe→tap→audit loop, no Mac (docs/mock.md): ./bin/manzanasd --addr :7433 --mock # list simulators curl -s localhost:7433/v0/targets | jq # lease one by label, boot it, release it curl -s -X POST localhost:7433/v0/leases \ -d '{"labels":["ios26"],"agent_id":"me","ttl_seconds":300}' | jq curl -s -X POST localhost:7433/v0/targets/<udid>/boot -d '{"lease_id":"<id>"}' | jq curl -s -X DELETE localhost:7433/v0/leases/<id> | jq

Or the thin client (--jsonfor machine output; seeclients/):

manzanas targets manzanas lease acquire --labels ios26 --agent me --wait manzanas tap 200 400 --lease lse_... manzanas mcp # lease-scoped MCP tools over stdio for agents

Production installs (launchd, releases):docs/install.md.

manzanas mcpserves 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.

claude mcp add manzanas -e MANZANASD_ADDR=mac-host:7433 -- /path/to/manzanas mcp
┌ Linux / CI / anywhere ────────────┐ ┌ each Mac host ─────────────────────────────┐ │ manzanas (thin client, Go) │ WS │ manzanasd (Go daemon) :7433 │ │ - CLI: lease/tap/observe/... │◄──────►│ registry ── warm pool (park/thaw, gates) │ │ - MCP facade (stdio) │ HTTP │ leases (TTL, labels, FIFO, auto-reset) │ │ - eval harness (manzanas-eval) │ │ actions ── cold AXe / warm simbridge │ ├───────────────────────────────────┤ │ streams (MJPEG fan-out, browser view) │ │ manzanas-broker :7440 │ │ state (snapshots, fixtures, golden images)│ │ fleet-wide placement: leases are │───────►│ journal (evidence, artifacts, export.md) │ │ scheduled across N daemons, then │ probe/ └────────────────────────────────────────────┘ │ clients talk to the owning │ lease × one daemon per Mac in the fleet │ daemon directly (host_addr) │ └───────────────────────────────────┘

- [proto/PROTOCOL.md— the v0 wire protocol: targets, leases, actions (incl. compositetap_element/type_into_elementandactions:batch), streams, state, images, journal, WS surface.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.