This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

EAS Simulator CLI reference

Edit page

Reference for the experimental EAS CLI commands that create, inspect, monitor, control, list, and stop remote simulator sessions.


The simulator:* commands are experimental and hidden. Install or update EAS CLI before running them:

Terminal
eas simulator:start --help

The --help flag displays the available options for simulator:start.

The start command is also available as eas simulator, eas sim, and eas sim:start. The other commands have matching eas sim:* aliases, such as eas sim:list and eas sim:stop.

To manage sessions without EAS CLI, use the REST API.

Commands

CommandPurpose
simulator:availabilityCheck whether the current project's account can use EAS Simulator
simulator:startCreate a session and wait for its controller configuration
simulatorAlias for simulator:start
simulator:execRun another command with .env.eas-simulator loaded
simulator:eventsShow recorded activity or follow activity from a running session
simulator:getGet status, connection details, dashboard URL, timestamps, and artifacts
simulator:listList and filter sessions for the current project
simulator:stopStop a session

simulator:availability

Terminal
eas simulator:availability --json

The --json flag is optional. It prints a stable, machine-readable result for agents and automation; omit it for human-readable output. The JSON object contains available and accountName. This command does not create a session or consume simulator usage.

simulator:start

The session type determines which interface EAS provisions with the remote device. On iOS, every type includes a web preview. Choose agent-device, Argent, or Appium to add programmatic control, or choose web-preview-only for the web preview only:

Use agent-device for accessibility-driven device actions and app installation.

Terminal
eas simulator:start --platform ios --type agent-device --name "Checkout flow screenshots" --non-interactive

Important flags:

FlagDescription
-p, --platformandroid or ios. Required in non-interactive mode; prompted for in an interactive terminal
--nameHuman-readable session name shown by simulator:list, simulator:get, and expo.dev
--deviceiOS Simulator name or unique device identifier (UDID), or Android virtual device hardware profile. The runner chooses a device when omitted
--build-idEAS Build to install and launch before the session is ready
--application-archive-urlApplication archive to download, install, and launch before the session is ready
--expo-goInstall and launch the Expo Go version that matches the current project's Expo SDK
--sdk-versionExpo SDK used to select Expo Go. Only valid with --expo-go; defaults to the current project SDK
--launch-argArgument passed to the installed app when it launches. Repeat the flag for multiple arguments
--open-urlExpo or development-client URL to open in the installed app after launch
--typeSession type. On iOS, every type includes a web preview. Use agent-device, appium, or argent to add programmatic control, or web-preview-only for the web preview only
--package-versionController package version. Defaults to the service's latest version
--max-duration-minutesAutomatic session stop time. Custom values are available on paid plans; otherwise the default depends on job priority
--max-idle-time-minutesStop after this many minutes without session activity. When omitted, the session has no idle timeout and runs until its maximum duration
--out-config-typedotenv to write .env.eas-simulator, or env to print shell exports
--[no-]forceWhether to create a new session when a session ID already exists in the environment. Defaults to true
--non-interactiveReturn after the session is ready instead of staying attached
--jsonPrint machine-readable output and imply non-interactive mode

--build-id, --application-archive-url, and --expo-go are mutually exclusive application sources. --launch-arg and --open-url require one of those sources because the start command needs an installed application to launch.

The default dotenv output writes configuration even when --json is used. Use --out-config-type env when you explicitly do not want the file.

Common JSON output fields have this shape. The fields inside remoteConfig depend on the selected controller:

{ "id": "<session-id>", "name": "Checkout flow screenshots", "type": "<controller-type>", "deviceRunSessionUrl": "https://expo.dev/accounts/<account>/projects/<project>/simulator-sessions/<session-id>", "remoteConfig": { "<controller-specific-key>": "<value>" } }

Treat remoteConfig as secret because it includes controller credentials.

Interactive and non-interactive behavior

Without --non-interactive, the start command stays attached and polls the session. Press Ctrl+C once to stop it. EAS CLI resets .env.eas-simulator after it confirms the session ended.

With --non-interactive or --json, the command returns after the controller is ready. You must stop the session separately.

simulator:exec

simulator:exec is controller-agnostic. It loads the connection variables for the active session from .env.eas-simulator, then spawns the command and arguments that follow.

Use the command pattern for the controller selected when the session started:

Terminal
eas simulator:exec npx agent-device@latest <command> [args...]

simulator:exec does not implement device actions. It only supplies the active session's connection environment and runs the command that follows. The available actions and argument syntax come from agent-device or Argent.

simulator:events

Show a snapshot of the activity recorded for the session referenced by .env.eas-simulator:

Terminal
eas simulator:events

Pass a session ID to inspect another session:

Terminal
eas simulator:events --id <session-id>

The default text output condenses related operations into a readable timeline. It includes the timestamp, controller, summary, and duration when available. This command shows session and controller activity from agent-device or Argent, not application runtime logs.

Follow new activity while a session is running:

Terminal
eas simulator:events --follow

The -f short flag is equivalent to --follow. The command stops following when the session ends. Press Ctrl + C to stop following earlier.

For agents and automation, request the raw event records as JSON:

Terminal
eas simulator:events --json

The JSON object contains deviceRunSessionId and an events array. Common event fields include eventId, ts, producer, type, and summary, with operation ID, outcome, duration, and controller-specific data when available. --json cannot be combined with --follow.

simulator:get

Get the session referenced by .env.eas-simulator:

Terminal
eas simulator:get --json --non-interactive

Get another session explicitly:

Terminal
eas simulator:get --id <session-id> --json --non-interactive

The response includes:

  • ID, name, type, status, and platform
  • Created, started, finished, and updated timestamps
  • The expo.dev simulator session URL
  • Controller connection configuration
  • Session artifacts, when present

simulator:list

Terminal
eas simulator:list --platform ios --status in-progress --json --non-interactive

Filters can be repeated:

FilterValues
--platformios, android
--typeagent-device, appium, argent, web-preview-only
--statusnew, in-progress, stopped, errored
--nameCase-insensitive session name prefix

Use --limit to control page size and --after with the previous response's endCursor for pagination.

simulator:stop

Stop the session referenced by .env.eas-simulator:

Terminal
eas simulator:stop

Stop a specific session:

Terminal
eas simulator:stop --id <session-id>

The stop mutation is idempotent.

Use --json for a machine-readable object containing the session id and final status.

.env.eas-simulator

The managed file always contains the session ID:

.env.eas-simulator
EAS_SIMULATOR_SESSION_ID="<session-id>"

Controller connection variables depend on the selected type:

ControllerConnection variables
agent-deviceAGENT_DEVICE_DAEMON_BASE_URL, AGENT_DEVICE_DAEMON_AUTH_TOKEN
ArgentARGENT_TOOLS_URL and, when required, ARGENT_AUTH_TOKEN
AppiumAPPIUM_URL, APPIUM_CAPS

Add the file to .gitignore:

.gitignore
.env.eas-simulator

Do not modify its values while the session is running.