Quickstart
From zero to a co-pilot driving all three platforms in a few minutes.
1. Install PilotStack
Download the desktop app — it runs the daemon (the MCP server + driver registry + cockpit bridge) and registers the MCP server with Claude Code for you. Sign in; an active subscription unlocks the cockpit.
2. Register the MCP server (manual / CLI)
The app does this automatically. To wire it up by hand, point any MCP client at the pilotstack daemon:
claude mcp add pilotstack -- pilotstack --mode co-pilot Modes: manual (approve everything), co-pilot (approve mutations), auto-pilot (log only).
3. Boot devices & fly
Ask your agent to boot a web target, attach a running Android emulator, and bind a Flutter app's VM Service:
boot_web url=http://localhost:3000
attach_android
attach_flutter vmServiceUri=<from `flutter run`>
run_on_all action=screenshot # all three, side by side 4. Record flows & catch drift
Turn a driving session into a replayable regression test, and snapshot a screen to catch layout or visual drift later. Flows replay by selector, so you can record on web and replay on iOS / Android.
start_recording name=login # then drive the login flow…
stop_recording # saved as a replayable flow
add_assertion flowId=… stepIndex=1 kind=visible target=text:"Welcome"
replay_flow flowId=… # re-run by selector on any platform
replay_all_flows # run the whole suite — green / red
save_baseline kind=layout label="cart total" target=testId:total
check_baseline baselineId=… # reports what drifted (8px, new overflow…) Baselines come in two flavours: layout (cheap text facts — size, position, overflow) and visual (a reference screenshot, pixel-diffed in the cockpit). Each flow's last result is kept,
so the green/red health survives restarts.
Meter your usage
Register a machine in the dashboard to get a ps_live_ key, then pass it so usage is billed to your org:
--api-url https://api.pilotstack.dev --api-key ps_live_… Tool reference
Context (free, auto-run)
list_devicesget_ui_treeget_layoutget_design_tokensscreenshotcompare_platforms
Flutter deep context
get_errorsinspect_widgetfind_widgetget_semanticsdiff_treeprobe_overflowhot_reload
Driving (approval-gated)
tap / double_tap / long_pressswipe / drag / scrollpinch / zoomtype_text / press_keyset_orientation / set_locale / set_text_scalewait_for
Flows & baselines (regression)
start_recording / stop_recordinglist_flowsreplay_flow / replay_all_flowsadd_assertionsave_baseline / check_baselinelist_baselines
Orchestration
boot_webattach_androidattach_iosattach_flutterrun_on_all