Fleet Dashboard

Simulators for AI coding agents

Your idle Mac has been pressed into service.

Fleet turns a spare Mac into iPhone, iPad and Apple TV simulators that your coding agents lease on their own. They install your app, tap through it, take screenshots and hand the berth back. Fleet swabs it clean for the next one.

Open the dashboard
$ curl -fsSL https://fleet.osroc.io/install.sh | sh -s -- <join-token>

Run it on the Mac you want to press. Your join token is on the dashboard.

  • Claude Code and any MCP client
  • iPhone, iPad, Apple TV
  • No open ports
  • Erased after every lease
  • Hosted on Cloudflare

How it works

From idle to under way in three steps

One Mac, one line, one MCP server. Your agents do the rest, and you can watch every move from the dashboard.

Press a Mac into service

Run the installer on any Mac with Xcode. It registers with your fleet, sets up simulator berths and runs quietly in the background. Simulators boot headless, so nothing pops up on screen.

Welcome aboard, macbookpro. Three berths ready. You sail at dawn.

$ curl -fsSL https://fleet.osroc.io/install.sh | sh -s -- <join-token>

Connect your agent

Add Fleet as an MCP server in Claude Code, or any MCP client, with an API key from the dashboard. Agents without MCP can drive the fleet CLI instead.

$ claude mcp add --transport http fleet https://fleet.osroc.io/mcp --header "Authorization: Bearer <key>"

Agents lease berths

Your agent opens a voyage, leases a berth, installs its build, taps around and looks at what it sees. Then it releases the berth and Fleet erases it. Every step lands in the ship's log.

  • voyage_start"Fix the sign-in button"
  • leaseiphone:17 pro → macbookpro b1
  • install_appTidewater.app → ok
  • taplabel: "Sign in"
  • screenshot→ image
  • release→ erased
ship
A Mac in your fleet
berth
One simulator on a ship
voyage
A unit of agent work
ship's log
The voyage's journal
Ashore
Idle and ready
At sea
Leased by an agent
Adrift
The Mac is offline
change of watch
One agent hands off to the next

The dashboard

Every ship, every berth, every voyage

Sign in at /app with Google. See which berths are ashore, at sea or adrift, read any voyage's ship's log, and answer an agent when it asks you something.

Change of watch

When one agent runs dry, the next takes the helm

Agents run out of tokens. Accounts hit their limits. Fleet is built for it: another agent, or another Claude account, picks up exactly where the last one stopped.

  • Every step is journaled

    Leases, ops, screenshots, notes, questions and handoffs go into the voyage's ship's log as they happen. A voyage that dies mid-step still leaves its trail.

  • Every step is idempotent

    Each mutating call carries an op id, like signin-tap-1. Send the same one twice and Fleet returns the stored result with "replayed": true instead of tapping twice.

  • The next agent resumes, not restarts

    voyage_resume hands over a briefing: the goal, the latest state, open questions, the last handoff, the live leases and a fresh screenshot of each berth. Same berth, same app, no starting over.

Safety

A tight ship

Fleet lends your simulators to agents, not your Mac. Here is what it can and can't do.

It dials out

Your Mac opens one outbound WebSocket to Fleet on Cloudflare. No open ports, no port forwarding, nothing listening for strangers.

Fixed orders, no shell

The runner obeys a fixed set of simulator ops: boot, install, launch, tap, swipe, type, screenshot, record and a few more. Anything else is refused. There is no remote shell.

Erased on release

When a lease is released or expires, Fleet erases that simulator, so nothing carries over between agents. "iPhone 17 was abandoned at sea. We've swabbed it clean."

Revocable keys

Agent API keys and join tokens are made on the dashboard and stored hashed. Revoke one and that agent, or that installer, is off the ship.

Your Mac, your rules

Cap how many simulators may boot at once and set quiet hours. The runner turns down work that would break them, with a plain error the agent can read.

Everything on the record

Every call lands in a ship's log with who made it and when. Screenshots and uploaded builds expire after a day.

Berths

iPhone

iphone · iphone:17 pro

iPad

ipad · ipad:air

Apple TV

appletv · appletv@tvOS 26

You choose how many berths of each kind a Mac carries when you press it. Agents ask for a family, optionally narrowed by device and runtime, and get whichever matching berth is ashore.

Questions from the crew

FAQ

Is this a CI runner?

No. CI runs a fixed script on every push and tells you how it went at the end. Fleet is for agents iterating in real time: build, install, look, tap, fix, look again, while you watch from the dashboard. Keep your CI. Give your agents a berth.

What do I need?

A Mac with Xcode and the simulator runtimes you want, Apple silicon or Intel. The laptop in the drawer counts. On the agent side, anything that speaks MCP over HTTP, Claude Code included, or anything that can run the fleet CLI.

Does my Mac need internet? Do I need to open ports?

It needs an ordinary internet connection, outbound only. The Mac dials out to Fleet over a single secure WebSocket and waits for orders. Nothing has to reach in: no open ports, no port forwarding, no VPN. If it loses its connection, its berths show as Adrift until it reconnects on its own.

What if an agent wanders off mid-lease?

Leases expire, 30 minutes by default, and every op pushes the clock back. When one runs out, Fleet erases the berth and puts it back ashore for the next agent.

Can an agent test against my local dev server?

Yes. fleet expose <port> --lease <id> opens a Cloudflare quick tunnel to that port and opens it on the berth. Add --scheme to load it in an Expo development client instead.

Can I press more than one Mac?

Yes. Every Mac you install with your join token joins the same fleet, and agents lease whichever matching berth is free. Reinstalling on the same Mac keeps its place in the fleet.

Why all the pirate talk?

Naval, not pirate. We run a respectable press gang. The words live on the dashboard and this page only. The API and CLI stay plain, because agents read them literally.

The harbor's empty, Captain.

Press a Mac into service and give your agents somewhere to test.

Open the dashboard