Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.signalrooms.xyz/llms.txt

Use this file to discover all available pages before exploring further.

Mac host setup

Status: Current setup reference. The repo source of truth for helper binaries and socket paths remains the Warmr repo. The Mac host runs Warmr.app, owns the control socket, drives connected iPhones over USB, and hosts the bundled go-ios + port-forwarding helpers. SignalRoom is software you run on your own Mac, there is no hosted SignalRoom fleet you connect to.

1. Host machine requirements

Apple Silicon is required. Intel Macs are not supported.
  • CPU: Apple Silicon (M1 / M2 / M3 / M4 family). Pro / Max variants help for larger fleets.
  • macOS: 14 (Sonoma) or later.
  • Disk: SSD; on a fleet of 5+ iPhones, prefer NVMe.
  • Network: Stable internet on the Mac. 100 Mbps is plenty for any fleet size; latency matters more than peak bandwidth.

Why Apple Silicon

On-screen content recognition (the computer-vision layer that finds buttons, tracks the upload flow, and reads the gallery) runs on the Neural Engine on Apple Silicon. Per-device cost on the Neural Engine is roughly 6% CPU equivalent and 80 MB RAM. On a CPU-only path the same workload runs several times slower per device. Practical effect: at the same hardware budget, a Mac comfortably handles roughly twice the iPhones a comparable Windows PC would. This is why Warmr ships Mac-only.

Sizing by iPhone count

Use this as a starting point. Capacity assumes TikTok’s native multi-account limit (up to 8 accounts per device), so the “Up to accounts” column = iPhones × 8.
iPhonesUp to accountsMac suggestionRAMDisk
18M1 / M2 / M416 GBSATA SSD
324M1 / M2 / M416 GBSATA SSD
540M2 / M4 (Pro preferred)24 GBNVMe SSD
1080M2 Pro / M4 Pro32 GBNVMe SSD
> 10Contact us before sizing

Why each tier

  • 1-3 iPhones: a base M1/M2/M4 with 16 GB handles the per-device cost comfortably (~80 MB × 3 = 240 MB RAM, ~18% CPU). The bottleneck at this size is USB power, not compute.
  • 5 iPhones: ~400 MB RAM, ~30% CPU sustained. A Pro chip’s extra cores stop the screenshot/OCR loop from contending with normal Mac background work. Move to NVMe so the per-device screenshot cache doesn’t queue behind SATA seek time.
  • 10 iPhones: ~800 MB RAM, ~60% CPU sustained. M2 Pro / M4 Pro is the comfortable floor; 32 GB RAM leaves headroom for support tools (Console, Activity Monitor, the JSON-RPC log tail) without thrashing.
  • Above 10: the bottleneck shifts from CPU to USB hub topology (one powered hub maxes out around 6-8 devices) and fd / process limits (each device spawns ~2 helper processes and ~12 file descriptors). Email support before buying hardware so we can size the hub layout, port allocation, and budget thresholds together.
For deployments above 10 devices, network, hub topology, and USB port count matter more than raw CPU.

2. Mac responsibilities

Current:
  • Run Warmr.app.
  • Own the control socket at ~/Library/Application Support/Warmr/control/control.sock.
  • Discover and drive connected iPhones via the bundled go-ios helpers.
  • Keep one owner per device lane: running two Warmr instances against the same iPhone produces wedged lanes.
  • Surface state to warmrctl for operator + agent inspection.
Agents may override the socket path with WARMR_CONTROL_SOCKET or --socket-path when the operator explicitly provides one.

3. One-time Mac setup

Run through these once per Mac, before connecting your first iPhone.
  1. Disable App Nap for Warmr.app. Long sessions get throttled otherwise. System Settings → General → Login Items → Allow in Background (set Warmr to always allow).
  2. Grant Full Disk Access if Warmr asks. System Settings → Privacy & Security → Full Disk Access → add Warmr.app.
  3. Disable display sleep. System Settings → Lock Screen → “Turn display off when inactive” = Never (or 1 hour for long sessions). The display does not need to be on, but waking it shouldn’t interrupt the session.
  4. Keep the Mac plugged into power during sessions. Laptops on battery will throttle Neural Engine workloads.

4. Pre-flight check from the operator

Before running anything that touches iPhones, confirm:
warmrctl --json status
# .app.automationEnabled == true if you intend to start a thread
# .devices is the array of iPhones Warmr currently sees

warmrctl --json devices list
# Each connected iPhone shows isConnected: true and a UDID
If status returns app-not-running and you have permission to launch Warmr.app, the default warmrctl status invocation will auto-launch it. To inspect without launching, pass --no-launch.

What this page does not cover

Planned

Planned:
  • Trial-onboarding checklist for teams installing on their own Mac for the first time.
  • A warmrctl install walkthrough once that surface stabilizes.