SimDrive — reproduce and validate iOS bugs in 60 seconds with Claude. MCP-native iOS automation; 32 vision-first tools; record once, replay free in CI. 14-day trial, then $29/mo Pro.
Project description
Reproduce and validate iOS bugs in 60 seconds with Claude.
SimDrive is the MCP-native iOS automation toolkit your AI agent already knows how to drive. Hand it a Linear ticket, watch it walk the steps in the simulator (or a paired real device), and get back a deterministic recording that replays free in CI forever.
60-second bug repro
You (in Cursor / Claude Code):
"Use simdrive to reproduce Linear ENG-1247 — sign-in fails on iPhone 17 /
iOS 26.3 with test@example.com."
Claude:
→ session_start({device: "iPhone 17", os_version: "26.3", bundle_id: "com.acme.app"})
→ observe() # screenshot + annotated marks
→ tap({text: "Email"})
→ type_text({text: "test@example.com"})
→ tap({text: "Password"})
→ type_text({text: "pw123"})
→ tap({text: "Sign In"})
→ observe() # captures error toast
→ record_stop({name: "ENG-1247-repro"}) # YAML+PNG attached to PR
After you ship the fix, the same recording replays free in CI — no AI cost on every run.
What you get
- Bug reproduction + validation (hero) — agent reads the ticket, drives the simulator, captures the failure, saves a deterministic recording.
- Record → replay — recordings are YAML + PNG bundles that re-run identically on every CI build. Zero AI cost on replay.
- Autonomous test suites —
run_journeyreads a YAML journey with goals and success criteria; SimDrive drives the agent loop and reports pass/fail with evidence. - Real iOS device support — WebDriverAgent-backed; one-command
simdrive bootstrap-device <udid>bring-up. - Visual regression detection — SSIM-based pre/post comparison with configurable drift handling.
- Performance baselines + regression comparison — capture CPU / RSS / thread baselines and diff future runs.
Install + activate
pip install simdrive
simdrive trial start --email you@example.com
# 14 days full access, then:
simdrive auth <your-license-key>
The trial license is Ed25519-signed and machine-locked — it works offline,
in CI sandboxes, and on developer laptops without network. After 14 days,
paid licenses (simdrive auth …) unlock the full tool surface.
Requires: macOS, Xcode 15+, Python 3.10+.
Wire SimDrive into your MCP client
Add to .claude/mcp.json (Claude Code), claude_desktop_config.json (Claude
Desktop), or your Cursor MCP config:
{
"mcpServers": {
"simdrive": { "command": "simdrive" }
}
}
Restart the client. Your agent now has 32 SimDrive tools available.
Pricing
| Plan | Price | What you get |
|---|---|---|
| Trial | Free, 14 days | All Pro features, machine-locked |
| Pro | $29 / mo | One seat, all tools, unlimited CI replays |
| Team | $99 / seat / mo | Multi-seat, shared recording cloud |
| Enterprise | Contact | Self-hosted licensing, SLA, integrations |
Pricing + ROI calculator: https://simdrive.dev/pricing
Minimum-viable session
session_start(bundle_id="com.example.app")
observe() # see initial screen
tap(label="Sign In") # tap a labelled control
observe() # verify state
record_stop(session_id="...", name="signin-smoke") # save replay
session_end(session_id="...") # clean up
Maestro-compatible YAML
Migrating from Maestro? SimDrive parses the shorthand natively:
replay:
bundle_id: com.example.app
steps:
- tapOn: "Sign In"
- inputText: "user@example.com"
- assertVisible: "Dashboard"
- assertNotVisible: "Loading"
- waitFor: "Feed"
Tool surface (32 MCP tools)
| Group | Tools |
|---|---|
| Lifecycle (3) | session_start, session_end, session_status |
| Observe (1) | observe |
| Act (5) | tap, swipe, type_text, press_key, clear_field |
| Record/Replay (5) | record_start, record_stop, replay, list_replays, validate_replay |
| Logs (1) | logs |
| Performance (4) | perf, perf_baseline, perf_compare, memory |
| Diagnostics (5) | doctor, app_state, apps, crashes, list_devices |
| Robustness (4) | dismiss_first_launch_alerts, pre_grant_permissions, set_appearance, dismiss_sheet |
| Recordings (2) | lint_recordings, migrate_recording |
| Journeys (1) | load_journey |
| Version (1) | version |
Canonical machine-readable list: simdrive/src/simdrive/server.py::_TOOLS.
Real-device support
Drive a paired iPhone or iPad in addition to the simulator:
export SIMDRIVE_ALLOW_PHYSICAL_DEVICE=1
simdrive bootstrap-device <device-udid>
session_start(bundle_id="com.example.app", udid="<device-udid>", target="device")
WDA bootstrap on iOS 26.x has some rough edges; the simulator
(target="simulator", default) is the fully supported path.
Known limitations
See docs/LIMITATIONS.md for: type_text first-character drop workaround,
SSIM-vs-structural-check semantics, SwiftUI half-sheet dismissal,
appearance-respring caveats, real-device input scope.
License
Elastic License 2.0 — see LICENSE. Free for internal use; prohibits
offering SimDrive as a competing managed service.
Built by SyncTek.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file simdrive-1.0.0b3.tar.gz.
File metadata
- Download URL: simdrive-1.0.0b3.tar.gz
- Upload date:
- Size: 462.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e85d37d7d4bbff78d779cd2c8c19bcde6e6e36659c09ea45d3e279cc391d6aac
|
|
| MD5 |
4c655f41e7e23d09f3fdcd3d7d63e5b7
|
|
| BLAKE2b-256 |
ffd3880c36d336ee377c910213acf9c631c147494f2e56ffc970653ead216892
|
Provenance
The following attestation bundles were made for simdrive-1.0.0b3.tar.gz:
Publisher:
specterqa-ios-publish.yml on SyncTek-LLC/simdrive
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simdrive-1.0.0b3.tar.gz -
Subject digest:
e85d37d7d4bbff78d779cd2c8c19bcde6e6e36659c09ea45d3e279cc391d6aac - Sigstore transparency entry: 1599115543
- Sigstore integration time:
-
Permalink:
SyncTek-LLC/simdrive@4974d9da56154166d486a1fae8fdf42bb232b510 -
Branch / Tag:
refs/tags/simdrive-v1.0.0b3 - Owner: https://github.com/SyncTek-LLC
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
specterqa-ios-publish.yml@4974d9da56154166d486a1fae8fdf42bb232b510 -
Trigger Event:
push
-
Statement type:
File details
Details for the file simdrive-1.0.0b3-py3-none-any.whl.
File metadata
- Download URL: simdrive-1.0.0b3-py3-none-any.whl
- Upload date:
- Size: 242.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e31f5eea21458d0eee830f178df475489e33129ce54b96adaee6a623c5ea88dc
|
|
| MD5 |
990b8b8b77789658ca78ebccbb8d6f6c
|
|
| BLAKE2b-256 |
cc3112e240980e6305f9c7df8087c03e0cb8e51d8949b0b935adb9de500f4a03
|
Provenance
The following attestation bundles were made for simdrive-1.0.0b3-py3-none-any.whl:
Publisher:
specterqa-ios-publish.yml on SyncTek-LLC/simdrive
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
simdrive-1.0.0b3-py3-none-any.whl -
Subject digest:
e31f5eea21458d0eee830f178df475489e33129ce54b96adaee6a623c5ea88dc - Sigstore transparency entry: 1599115626
- Sigstore integration time:
-
Permalink:
SyncTek-LLC/simdrive@4974d9da56154166d486a1fae8fdf42bb232b510 -
Branch / Tag:
refs/tags/simdrive-v1.0.0b3 - Owner: https://github.com/SyncTek-LLC
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
specterqa-ios-publish.yml@4974d9da56154166d486a1fae8fdf42bb232b510 -
Trigger Event:
push
-
Statement type: