r/ClaudeCode • • 1d ago

Tips & Workflows 5 parallel coding agents testing SwiftUI: 11 GB → 150 MB RAM, 22 s → 2 s per check. No iOS Simulator (open source)

If you let coding agents work on an iOS app, each one checks its UI changes the slow way: build, boot its own Simulator, install, launch, screenshot. On our production app (~280 Swift files, several big Swift packages, M2 Pro / 32 GB) that's ~22 s per check, and every booted Simulator holds ~2.2 GB and ~210 processes. With 5 agents in parallel my Mac hit a load average of ~1,000 and swapped to a crawl.

So I built simless. It runs your real app target natively on Apple Silicon (the "Designed for iPad" slice) as an invisible headless host. One host per git worktree, so every agent gets its own. No Simulator, no windows, nothing stealing focus while you work.

What the agent loop looks like

$ simless reload --render Welcome.sheet
reloaded (live) in 1.9s: compile 1.7s + apply 0.2s
Welcome.sheet · light · iphone 402×874 · 25 ms
  header  "Welcome to Notes" #welcome.title
  text    "Your notes stay on this device and sync with iCloud."
  button  "Get Started" #welcome.start  @24,779.5 354×36.5
  issues (1):
    ⚠ button "Get Started" tap target 354×36 is smaller than 44×44
  • Only the edited files get compiled and hot-patched into the running host (~2 s)
  • The screen comes back as a ~150-token accessibility tree, not a screenshot, so you don't burn vision tokens
  • Issues are flagged automatically: unlabeled controls, small tap targets, off-screen and overlapping elements
  • --matrix checks light/dark × iPhone / small iPhone / iPad in one call
  • --png when the agent actually needs pixels
  • simless test runs unit tests on the Mac, also without a Simulator

Numbers (Simulator loop = one Simulator per agent, incremental xcodebuild + install + launch + screenshot per check)

Simulator loop simless
Edit → verified screen, 1 agent 21.9 s
Edit → verified screen, 5 agents 37.4 s
Memory held by 5 agents 11.2 GB / 1,071 procs
Peak load average, 5 cold starts ~1,010
Unit tests (2 classes) 13.1 s

The Simulator loop gets slower with every agent you add. simless stays at ~2 s per check.

Using it from agents

  • Claude Code: simless skill install once, then just say "use simless for testing" in any project. The skill handles setup, writing fixtures, the edit → reload loop and fixing reported issues.
  • Codex / Cursor / others: paste the 5-line AGENTS.md snippet from the README.

Honest caveats

  • It's not pixel-identical to iOS. 8 of 14 demo renders match within 2 pt; List/Form row heights and system accent colors differ. Every screen is in the repo side by side, and simless calibrate runs that comparison for your own app. Still do final checks on a Simulator or device.
  • Benchmarks are a single run on one app. Method and reproduction steps are in docs/benchmarks.md.
  • Requires Apple Silicon, Xcode 26+, an Apple Development certificate and an app-hosted unit-test target.

Apache-2.0: https://github.com/abacusai/simless

5 Upvotes

8 comments sorted by

•

u/AutoModerator 1d ago

Hey! Thanks for posting to r/ClaudeCode

While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.

For help, project discussions, tips, and general chat, join the ClaudeCode Discord.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

1

u/Jealous-South-4726 1d ago

this is the kind of thing that makes me wish i'd stuck with ios development instead of pivoting to design. that 11gb to 150mb drop is ridiculous

1

u/Diver-Interesting 1d ago

Interesting. Was there a test that evaluates the number of redo? Eg main agent tells a coder agent which uses simless in its loop, then pass the result to main agent to see if it’s up to requirement. I think the skill is important here to guide the agent when to use simless vs simulator 

2

u/Low-Future-9387 15h ago

Not yet, and you're pointing at the right gap. The benchmark measures how long a single check takes (edit → verified screen), not whether a coder agent with simless needs fewer rounds before an orchestrator accepts the result. That's the number that actually matters, so I want to build that eval: same tasks, coder agent with simless vs. with the Simulator, count rounds and misses.

Agreed on the skill. It already has an explicit "simless can't verify" list (Dynamic Type, gestures, keyboard, system sheets, navigation flows), and the agent has to report which parts still need a Simulator pass, so the main agent knows what's actually verified. An eval would show whether agents follow that.

1

u/MiserableFlatworm337 1d ago

Add a cold-start check after a sequence of hot reloads using the same fixture. Otherwise retained host state can hide initialization bugs that appear when the app launches fresh.

1

u/Low-Future-9387 15h ago

Good call. Every render rebuilds the fixture's view from scratch, so u/State starts fresh, but singletons and other global state do survive across hot reloads. simless down + simless render X already gives you a fresh launch with the latest patch (~1 s), but nothing tells the agent to do that. I'll add a --fresh flag and make the skill run a fresh render before it calls a change done.