Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

simdrive

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 the same way every time.

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, replay the same recording with the replay tool to confirm it still fails (or now passes) before deploy.

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 each time via the replay tool.
  • Autonomous test suitesrun_journey reads 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

pip install simdrive

No license or account required.

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 36 SimDrive tools available.

Note: SimDrive is no longer offered as a commercial product. It remains available as a free, open MCP tool for internal/personal use — see LICENSE.

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

Tool surface (36 MCP tools)

Group Tools
Lifecycle (3) session_start, session_end, session_status
Observe (1) observe
Act (6) tap, swipe, type_text, press_key, clear_field, tap_and_wait_keyboard
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
Accessibility (3) perform_accessibility_action, get_announcements, set_text

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.

Environment variables

Variable Effect
SIMDRIVE_ALLOW_PHYSICAL_DEVICE=1 Allow driving a paired physical iPhone/iPad (see above).
SIMDRIVE_NO_AUTO_RESTART=1 Suppress the version-drift auto-restart. When the running server is older than the wheel on disk (after pip install -U simdrive), simdrive normally re-execs itself to pick up the new code. Set this for MCP-driver sessions (Claude Code, etc.): an auto-restart re-execs the process and desyncs the MCP stdio transport, after which every tool call fails MCP error -32602: Invalid request parameters until you reconnect (/mcp). When simdrive detects it is serving as an MCP stdio server it now suppresses the auto-restart automatically and tells you to reconnect; this env var makes that the default everywhere (incl. embedded/CLI contexts). Truthy values: 1, true, yes, on.

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.

Support

License

Elastic License 2.0 — see LICENSE. Free for internal use; prohibits offering SimDrive as a competing managed service.

Built by SyncTek.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simdrive-1.0.0b13.tar.gz (597.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simdrive-1.0.0b13-py3-none-any.whl (302.1 kB view details)

Uploaded Python 3

File details

Details for the file simdrive-1.0.0b13.tar.gz.

File metadata

  • Download URL: simdrive-1.0.0b13.tar.gz
  • Upload date:
  • Size: 597.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for simdrive-1.0.0b13.tar.gz
Algorithm Hash digest
SHA256 4184706d0e226fa8a8928aac583ee8bfb3460363109ea9527fa8e6afe3acb19d
MD5 40c7cf19ad1f8563eb98d7dbf22ecce0
BLAKE2b-256 76a87461f5e5efe49df13a6565aaec48dd957a62f2e20899582bfbdd0a501961

See more details on using hashes here.

Provenance

The following attestation bundles were made for simdrive-1.0.0b13.tar.gz:

Publisher: specterqa-ios-publish.yml on SyncTek-LLC/simdrive

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simdrive-1.0.0b13-py3-none-any.whl.

File metadata

  • Download URL: simdrive-1.0.0b13-py3-none-any.whl
  • Upload date:
  • Size: 302.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for simdrive-1.0.0b13-py3-none-any.whl
Algorithm Hash digest
SHA256 c5b375eff30813c9f9a5275c6eec3708eba82a58d567c891f9d1b5b6d9c34646
MD5 91d06dc4c294013e994bc3c3f69d49ef
BLAKE2b-256 dc226650220041e5965cdc5a6df661949ea7f041dfb69c1037f6f2feac159658

See more details on using hashes here.

Provenance

The following attestation bundles were made for simdrive-1.0.0b13-py3-none-any.whl:

Publisher: specterqa-ios-publish.yml on SyncTek-LLC/simdrive

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page