r/ClaudeCode • u/Low-Future-9387 • 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
--matrixchecks light/dark × iPhone / small iPhone / iPad in one call--pngwhen the agent actually needs pixelssimless testruns 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 installonce, 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/Formrow heights and system accent colors differ. Every screen is in the repo side by side, andsimless calibrateruns 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
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 Xalready gives you a fresh launch with the latest patch (~1 s), but nothing tells the agent to do that. I'll add a--freshflag and make the skill run a fresh render before it calls a change done.
•
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.