Modal, for Macs

Give your agentsreal Macs.

Connect any Mac you own and it becomes a programmable cloud runtime — driven by agents, SDKs, and CLIs from anywhere.

herds — zsh
$ herds child
✓ live · M3 Max · herds_sk_…@studio…
# anywhere else
$ herds use herds_sk_…
✓ Driving studio — 1 machine
$ herds connect studio.local
✓ Mac Studio joined the fleet
$ herds run --all "xcodebuild"
3 Macs online · agents dispatched
you.herds.runThis MacM3 Max · 16CMac miniM2 Pro · 12CMac StudioM2 Ultra · 24C
$ herds use herds_sk_…@studio.relay.herds.run
Start free
Capabilities

Everything a Linux sandbox can’t do

A fleet of real Macs, driven by agents from anywhere — the things a Linux box in the cloud simply can’t be.

M3 MaxMac miniMac StudioMacBook4 Macs · online
Fleet

Run a fleet of real Macs

The Studio on your desk, the minis in the closet, the laptop in your bag — one private fleet, online and addressable from anywhere.

⌘“run the suite on every Mac”
M3 Max
Mac mini
Studio
Agents

Control them all with agents

Dispatch one prompt across the whole fleet — agents drive every machine remotely, in parallel.

linkedin.com/in/…
Connect
Browser

A real browser, like a human

Not a patchy cloud-browser API — the actual browser on a real Mac. Log in, scroll, click, type, exactly like a person.

App — Xcode
XcodeSimulatorCodesignAppleScriptHomebrew
Build Succeeded · 42.1s
Native

The whole of real macOS

Xcode, simulators, codesigning, AppleScript, Homebrew — the real platform, not a stub or an emulator.

Clone
Build
Test
TestFlightv1.4 (32)
End to end

Ship iOS, autonomously

Clone → build → test → notarize → TestFlight, in a single run.

localhost:3000app.you.herds.runlive
Networking

Expose any port as a public URL

Run a server in a sandbox and get a named subdomain with real TLS — zero inbound ports opened.

Write it

If it installs on a Mac, it runs on Herds

Xcode, Final Cut, Blender, the iOS Simulator, real Safari — the whole Mac, driven from Python. No new runtime to learn.

Make a machine drivable

One command on the machine. No account, no signup, no port forwarding.

on the Mac — zsh
$ herds child
✓ This machine is live and drivable
herds use herds_sk_…@studio.relay.herds.run

Drive it from anywhere

Paste that token on any machine — Mac, Linux, Windows. Then run things.

anywhere else — zsh
$ herds use herds_sk_…@studio.relay.herds.run
✓ Driving studio — 1 machine, 1 online
$ herds run -- xcodebuild -scheme App test

Run it on a real Mac

Pick the idlest Mac in your fleet and run anything a Mac can run.

build.py
import herds
mac = herds.mac() # idlest Mac in the fleet
mac.run("xcodebuild -scheme App test", check=True)

Fan out across the fleet

Every online Mac pulls the next task as it frees up.

suite.py
results = herds.fleet().map("pytest {}", TEST_DIRS)
# {} ← each item. N Macs, N× throughput —
# work-stealing, so none gets overloaded.

Serve it on a public URL

A sandbox is an isolated workspace. Ship code in, expose a port out.

preview.py
with herds.mac().sandbox(image="xcode:26") as sbx:
sbx.put("./my-project")
sbx.spawn("npm run dev", keep_alive=True)
url = sbx.expose(3000) # → public link

Hand it to an agent

Give a coding agent a whole Mac. Keyless — no key lands on it.

agent.py
herds.mac().agent("fix the failing tests and open a PR",
proxy="https://proxy.you.com",
secret="proxyagent")
Apple-native

Native to your Apple world

It doesn’t call half-built APIs — it uses the real apps, signed in on a real Mac, and operates any machine you point it at.

iMessage

Reads, replies, and reschedules — in your voice, around the clock.

iCloud Photos

Sorts, dedupes, and albums a decade of photos in iCloud.

Apple Notes

Captures, files, and recalls everything you need.

FaceTime

Places and joins calls — schedules, dials, follows up.

Remote operation

Drives any Mac you point it at — set up, fix, and triage.

Pair operator

You watch, it works — approve the risky steps, skip the rest.

Use cases

What people build on Herds

9:41
Deliver to
Home ▾
Search restaurants
PizzaSushiThaiBowls
Free delivery♡
Thai Basil★ 4.9
Thai · 15 min · $$ · 1.2 mi
Pad Thai $14Add
Green Bowl Co.
Healthy · 18 min · $$
★ 4.8
Nonna’s Pizza
Italian · 22 min · $
★ 4.7
iOS · overnight

A food-delivery app, shipped overnight

An agent cloned the repo, ran Xcode, fixed the failing tests, QA'd the build, and pushed to TestFlight by morning — on a Mac mini in the closet.

Today 9:14 AM
Are we still on for dinner Friday?
Yes — booked 7:30 at Nopa and sent them the address
Delivered · handled by Herds
iMessage

iMessage, handled for you

Triage threads, RSVP, reschedule, and reply in your voice — native Messages on a real Mac, around the clock. No bridge, no API.

Signed in · the real apps
Apple apps

It lives in your Apple world

Messages, Mail, Photos, Notes, Music — signed in on a real Mac. Your agent uses the actual Apple apps, not half-built APIs.

HerdsFileWindowHelp
Fri 9:41
Mom’s MacBook · remote
Disk almost fullcleared 42 GB ✓
Wi-Fi droppingreset · stable ✓
12 updatesinstalled ✓
Remote control

Fix anyone's Mac, remotely

Point an agent at a relative's or teammate's Mac — diagnose the slowdown, clear the disk, reset the network, install the update. Hands-on support, hands-free.

AAcme Careers — Apply✕
+
jobs.acme.com/apply☆
Senior iOS Engineer
Application
Full name
Teddy O.
Email
teddy@acme.dev
Résumé
PDFresume.pdf
Submit application
Browser · human

It applies, books, and files — like a person

The real browser on a real Mac: log into the portal, fill the form, hit submit. No brittle scraping API, no headless workarounds.

⌘render all 240 frames in parallel4 Macs
M3 Max
Mac mini
Mac Studio
MacBook
Fleet · agents

A hundred Macs, one prompt

Point an agent at the whole fleet — build, render, scrape, test — running for hours across every machine you own.

Build & ship iOS appsNative Apple appsRemote Mac supportBrowser tasksRender farmsData extractionLong-running agentsMac-only software
Set it up

Two commands, then a hundred Macs

One command makes a Mac drivable and prints a token. One command anywhere else drives it. Growing into a fleet is the same two commands, more times.

01On the Mac — go live
your Mac — zsh
$curl -fsSL herds.run/install | sh
installed herds
$herds child
✓ live and drivable
herds_sk_…@studio.relay.herds.run
02Anywhere else — drive it
your laptop / PC — zsh
# no account, no signup
$herds use herds_sk_…@studio…
✓ Driving studio — 1 machine
# several? switch by name
$herds use work
✓ Driving work — 11 machines
03Drive it — Python or web
agent.py
import herds
mac = herds.mac(tag="xcode") # idlest match
mac.run("xcodebuild -scheme App")
sbx = mac.sandbox()
url = sbx.expose(3000) # → public URL

Then open it in the browser

Hosting prints a signed-in dashboard link. Sign in with the same account from anywhere — every Mac, every sandbox, and every run, live on the web. No inbound ports opened.

Open the dashboard
One machine, many worlds

Carve one Mac into a hundred sandboxes

A single Mac mini is two things at once: a machine you drive directly, and a host you partition into dozens of isolated, localized environments — each its own sandbox, all running in parallel.

One Mac mini · M2 Pro
24 sandboxes running
M2 Pro
12-core · 32 GB
sbx_1a2vite dev --host:3000 live
sbx_7f4xcodebuild -scheme App0:42
sbx_9c1playwright test --headedrunning
Isolated

Each gets its own HOME, filesystem, and TMPDIR — nothing leaks between them.

Localized

Pin a toolchain, env, and volumes per sandbox — a hundred clean worlds on one box.

Disposable

Spin up, run, and tear down by process group — no residue left behind.

with herds.mac("mac-mini").sandbox(image="xcode:26") as sbx:
sbx.exec("xcodebuild -scheme App archive")
url = sbx.expose(3000) # its own public URL
# torn down clean on exit — fan this across the whole grid with .map()
Ready when you are

Connect your Mac in 60 seconds.

Every Mac you own becomes an API. Your machine, your infra — live with a single command.

$ herds host✓ live at you.herds.run