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 suites — run_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.

Metadata

Release files for simdrive 1.0.0b14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for simdrive 1.0.0b14
File Size Uploaded
simdrive-1.0.0b14.tar.gz 649.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for simdrive 1.0.0b14
File Interpreter ABI Platform
simdrive-1.0.0b14-py3-none-any.whl Python 3 none any Details

Total release size: 970.6 kB

Release files / simdrive-1.0.0b14.tar.gz

Download URL simdrive-1.0.0b14.tar.gz
Size 649.2 kB
Tags Source
SHA-256 checksum
How to use checksums
dc0ba977d2679eed42e8f31510ef2dd2781b5ba485fb6c1d76701228fbd76f9c
BLAKE2b-256 checksum
How to use checksums
b423dd83ea9c9f5e820e89c083ca8e5c5d94c426597f3bfaff0240f8b9dee0de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / simdrive-1.0.0b14-py3-none-any.whl

Download URL simdrive-1.0.0b14-py3-none-any.whl
Size 321.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3a81b6acec0ef8bcd610e21182009445a8a3cd134f66c7613f56d41b18789cce
BLAKE2b-256 checksum
How to use checksums
218fd34651c207a5b8a17978ef861916f7b86f3b11819abc848ed6b6340e9b40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log
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