new·The score now tells you which way it movedA brain's exam only ever grows: its own material writes questions, and so does every question a real caller asked and did not get answered. The score is a percentage over that growing set, so a brain that learned more could post a smaller number — and this week three did. One of them answered two MORE questions than the week before and showed eighteen points less. Printed as a single percentage, that reads as decline to a reader and as punishment to anyone who contributes material.all news →
mozg.beta
Sign in

Expo & React Native · all subjects

eas-simulator

48 notes, read out of this brain and free to use. Each one was extracted from a source and is re-checked against its exam.

simulator:stop command

Stop the session in .env.eas-simulator with: eas simulator:stop. Stop a specific session with: eas simulator:stop --id <session-id>. The stop mutation is idempotent.

.env.eas-simulator file contents

The managed .env.eas-simulator file always contains EAS_SIMULATOR_SESSION_ID="<session-id>". Controller connection variables depend on type: for agent-device it contains AGENT_DEVICE_DAEMON_BASE_URL and AGENT_DEVICE_DAEMON_AUTH_TOKEN; for Argent it contains ARGENT_TOOLS_URL and optionally ARGENT_AUTH_TOKEN. Add the file to .gitignore and do not modify its values while the session is running.

EAS Simulator CLI commands

The simulator:* commands are experimental and hidden. Available commands are: simulator:availability (check if account can use EAS Simulator), simulator:start (create a session and wait for controller configuration), simulator (alias for simulator:start), simulator:exec (run another command with .env.eas-simulator loaded), simulator:events (show recorded activity or follow activity from a running session), simulator:get (get status, connection details, dashboard URL, timestamps, and artifacts), simulator:list (list and filter sessions for the current project), simulator:stop (stop a session).

simulator:availability command

Run with `eas simulator:availability --json` to check whether the current project's account can use EAS Simulator. The --json flag is optional and prints machine-readable output with available and accountName fields. This command does not create a session or consume simulator usage.

simulator:start flags

simulator:start accepts these flags: -p, --platform (required in non-interactive mode; android or ios), --type (controller type: agent-device, argent, or serve-sim), --package-version (controller package version; defaults to latest), --out-config-type (dotenv to write .env.eas-simulator, or env to print shell exports), --[no-]force (whether to create new session when session ID exists; defaults to true), --non-interactive (return after controller is ready instead of staying attached), --json (print machine-readable output and imply non-interactive mode).

simulator:start JSON output format

simulator:start returns JSON with this shape: {"id": "<session-id>", "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.

simulator:start interactive vs non-interactive behavior

Without --non-interactive, the start command stays attached and polls the session; press Ctrl+C once to stop it and EAS CLI resets .env.eas-simulator after confirming the session ended. With --non-interactive or --json, the command returns after the controller is ready and you must stop the session separately.

simulator:events command

Show a snapshot of activity for the session in .env.eas-simulator with: eas simulator:events. Pass a session ID with --id <session-id> to inspect another session. Default text output condenses related operations into a readable timeline including timestamp, controller, summary, and duration. Follow new activity with --follow or -f flag; the command stops following when the session ends or when you press Ctrl+C. For agents and automation, request raw event records as JSON with --json flag, which contains deviceRunSessionId and an events array with fields like eventId, ts, producer, type, and summary. --json cannot be combined with --follow.

simulator:get command

Get the session in .env.eas-simulator with: eas simulator:get --json --non-interactive. Get another session explicitly with: eas simulator:get --id <session-id> --json --non-interactive. The response includes: ID, 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 filters and pagination

simulator:list supports these filters which can be repeated: --platform (ios, android), --type (agent-device, argent, serve-sim), --status (new, in-progress, stopped, errored). Use --limit to control page size and --after with the previous response's endCursor for pagination.

EAS Simulator requires user account login

If EAS CLI reports that a user account is required, log in interactively or provide EXPO_TOKEN in a headless environment. Check login status with 'eas whoami'.

EAS Simulator requires linked Expo project

If EAS CLI reports the project is not linked, run 'eas init' inside the Expo project to initialize EAS and link it.

EAS CLI too old error: simulator:start command not found

If you get 'Command simulator:start not found', the installed EAS CLI is too old. Install or update EAS CLI using the installation guide. The simulator:start command remains hidden because the API is experimental.

Check EAS Simulator availability before starting

Run 'eas simulator:availability --json' before starting the simulator. If 'available' is false, do not retry 'simulator:start'. Use a local simulator or emulator instead, or join the waitlist at https://expo.dev/services/simulator for access.

EAS Simulator session boot time varies with device capacity

Boot time for EAS Simulator sessions varies depending on device capacity. While a device is starting, poll the session using 'eas simulator:get --id <session-id> --json --non-interactive'. The session is ready when status is 'IN_PROGRESS' and remoteConfig is present. If it reaches 'STOPPED' or 'ERRORED', or if the start command reports a terminal failure, start a new session. Starting a second session while the first is still booting does not speed up the process.

Non-interactive session does not stop automatically

When using '--non-interactive', the command returns after the controller is ready but does not stop the session. You must manually stop it with 'eas simulator:stop'.

Remote daemon unavailable or tunnel endpoint offline error

If you get 'Remote daemon is unavailable' or the tunnel endpoint is offline, the controller tunnel has dropped or the remote VM has ended. A dropped controller invalidates the installed app state, accessibility references, and connection configuration. Stop the session if still active, then start a fresh session and repeat install → open → drive. Do not repeatedly retry a controller command against the dead endpoint.

agent-device uses 'press' not 'tap' or 'click'

If you get 'Unknown command: tap' or 'Unknown command: click', the correct agent-device action name is 'press'. Use 'eas simulator:exec npx agent-device@latest press @e2'.

Controller action hangs: refresh accessibility tree

Some iOS snapshots and interactions can take tens of seconds. If an action times out, refresh the interactive accessibility tree before retrying using 'eas simulator:exec npx agent-device@latest snapshot -i'. The original action may have reached the device even when the response was delayed, so avoid blindly retrying to prevent executing it twice.

Install requires active session or explicit device selector

If you get 'install requires an active session or an explicit device selector', pass the platform flag: 'eas simulator:exec npx agent-device@latest install com.example.app ./MyApp.app --platform ios'

Screenshot requires active session and opened app

If screenshot reports there is no active session, first open an installed app before taking the screenshot. Use 'eas simulator:exec npx agent-device@latest open com.example.app --platform ios' followed by 'eas simulator:exec npx agent-device@latest screenshot ./shot.png'.

EAS Simulator starts with blank device

Each EAS Simulator session starts with a blank device. The remote device does not contain the app by default. Install a local simulator or emulator build, or use 'install-from-source' with an EAS Build artifact.

Release build shows old source code on screenshot

If a screenshot shows old source code, this is because release builds embed JavaScript at build time. To see current source, rebuild from current source, confirm an existing EAS Build has matching fingerprint, or install a development build and connect it to Metro. Changing source files does not update an already-installed release build.

Fast Refresh troubleshooting checklist

If Fast Refresh does not work, confirm all of the following: (1) The installed binary is a development build with expo-dev-client, not a release build; (2) Metro is running once, without another process occupying port 8081; (3) The development client is connected to the public Metro tunnel URL; (4) The simulator session and controller are still active. Use tunnel v2 in remote or headless agent environments with 'EXPO_UNSTABLE_TUNNEL_V2=1 npx expo start --tunnel'. If the first connection fails, reset the simulator session and Metro once, then repeat the documented development-build flow. Reconnecting a release build cannot enable Fast Refresh.

Android browser preview not supported

Android browser preview is not currently supported in EAS Simulator. Use agent-device or Argent instead to collect screenshots or recordings.

webPreviewUrl opened incorrectly inside simulator

If the preview appears inside the simulator, it means the webPreviewUrl was opened as though it were an app URL. Open it in the desktop browser instead, as it is a browser stream, not an application deep link.

EAS Simulator feedback submission

To submit feedback about the official EAS Simulator skill, use 'npx --yes submit-expo-feedback@latest --category skills --subject "eas-simulator" "<actionable feedback>"'. Include the EAS CLI version, session ID, platform, controller type, and failing command when reporting a problem.

agent-device action name is press, not tap or click

The action to activate an element in agent-device is named press, not tap or click.

Start Argent-backed EAS Simulator session

Start an Argent-backed session with: eas simulator:start --platform ios --type argent --non-interactive

Argent commands on EAS Simulator do not require argent link

simulator:exec supplies ARGENT_TOOLS_URL and ARGENT_AUTH_TOKEN from .env.eas-simulator, so argent link is not required for commands invoked this way. Example: eas simulator:exec argent run reinstall-app --udid <udid> --bundleId com.example.app --appPath ./MyApp.app

Argent and agent-device cannot be used on the same EAS Simulator session

An Argent session does not also provision an agent-device daemon, so do not run agent-device commands against an Argent session.

Inspect EAS Simulator session activity with eas simulator:events

Sessions that use agent-device or Argent record controller activity. Show the activity recorded so far for the current session with: eas simulator:events. Follow new activity in another terminal with: eas simulator:events --follow. The follow command exits when the session ends. Use --id <session-id> to inspect another session, or --json to return raw event records for an agent or script. --json and --follow cannot be used together. Session activity describes controller operations and interactions but does not replace application runtime logs.

iOS browser preview URL on EAS Simulator

Supported iOS sessions return a webPreviewUrl. Open it in a desktop browser while the session is active.

EAS Simulator requires simulator/emulator-compatible build before opening

The remote device starts blank. Install a simulator- or emulator-compatible build before opening and controlling the app.

EAS Simulator build type selection by use case

Choose the build type based on your goal: (1) Inspect a fixed build or capture evidence: use Local release build or EAS simulator build. (2) See current source changes with Fast Refresh: use Development build connected to Metro. (3) Use an existing EAS artifact: use Matching iOS Simulator build or Android APK.

Release builds do not support Fast Refresh when connected to Metro

A release build contains the JavaScript from build time. Connecting it to Metro does not enable Fast Refresh. Use a development build for live iteration.

EAS Simulator controller types and start options

Two controller types are available: (1) agent-device, started with --type agent-device, documented at /agents/agent-device/. (2) Argent, started with --type argent, documented at /agents/argent/. Choose a controller before starting the session and pass its type explicitly.

Find app identifier from expo config

Read the resolved app configuration with 'npx expo config --json'. Use ios.bundleIdentifier for iOS commands and android.package for Android commands. Configure the missing value in the app config before creating the build.

EAS Simulator eas.json profile for iOS and Android installable artifacts

Create an installable artifact for each platform in an EAS Build profile. iOS requires ios.simulator: true, and Android requires an APK build. Example profile named 'remote-device': { "build": { "remote-device": { "ios": { "simulator": true }, "android": { "buildType": "apk" } } } }

EAS Simulator install from EAS Build artifact with agent-device

After the build is ready, start an agent-device session and use install-from-source. The remote virtual machine (VM) downloads the artifact directly. For iOS: eas simulator:start --platform ios --type agent-device --non-interactive, then eas simulator:exec npx agent-device@latest install-from-source "https://expo.dev/artifacts/eas/<artifact>.tar.gz" --platform ios, then eas simulator:exec npx agent-device@latest open com.example.app --platform ios. For Android, create and install the APK from the same profile with --platform android and .apk artifact URL.

Install local iOS simulator build with agent-device

For a local iOS simulator .app bundle, use: eas simulator:exec npx agent-device@latest install com.example.app ./path/to/MyApp.app --platform ios, then eas simulator:exec npx agent-device@latest open com.example.app --platform ios. Large local builds take longer because the client uploads them from your machine. Prefer install-from-source when an EAS artifact URL is available.

Stop EAS Simulator session

Stop the simulator session with: eas simulator:stop. If you started Metro, stop that process too.

Argent CLI installation for EAS Simulator

Install the Argent CLI with: npm install --global @swmansion/argent

Development build for live changes on EAS Simulator

Live iteration requires a development build with expo-dev-client. The development build loads JavaScript from Metro instead of relying only on the bundle embedded at build time. For iOS, configure an EAS profile with both developmentClient: true and ios.simulator: true. For Android, the same profile produces an installable APK when running the build command with --platform android without additional Android configuration.

Development client setup with public Metro tunnel on EAS Simulator

Start Metro with a public tunnel that the remote development client can reach: EXPO_UNSTABLE_TUNNEL_V2=1 npx expo start --tunnel. Install and open the development build, then enter the public Metro URL in the development client's Enter URL manually flow. Keep exactly one Metro process running. After the first bundle loads, Fast Refresh sends source edits to the remote app.

agent-device commands for EAS Simulator

Commands for sessions started with --type agent-device: (1) List apps: eas simulator:exec npx agent-device@latest apps --platform ios. (2) Open app: eas simulator:exec npx agent-device@latest open com.example.app --platform ios. (3) Inspect accessibility tree: eas simulator:exec npx agent-device@latest snapshot -i. (4) Activate element: eas simulator:exec npx agent-device@latest press @e2 or press 'label="Continue"'. The action is named press, not tap or click. (5) Enter text: eas simulator:exec npx agent-device@latest fill @e4 "hello@example.com". (6) Screenshot: eas simulator:exec npx agent-device@latest screenshot ./artifacts/result.png. (7) Record: eas simulator:exec npx agent-device@latest record start, then record stop ./artifacts/flow.mp4. (8) Other commands: scroll, gesture, logs, network, perf.

agent-device snapshot reference elements like @e1, @e2

The snapshot command returns references such as @e1 and @e2 to interactive elements in the accessibility tree. Use press to activate an element by reference or by label query.

simulator:exec command

simulator:exec is controller-agnostic. It loads connection variables for the active session from .env.eas-simulator, then spawns the command and arguments that follow. Use the command pattern appropriate for the controller selected when the session started. For agent-device: eas simulator:exec npx agent-device@latest <command> [args...] For Argent: eas simulator:exec argent run <tool> [args...] simulator:exec does not implement device actions; it only supplies the active session's connection environment.

Give your agent this brain