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

Capture screenshots, recordings, and logs from a remote simulator

Edit page

Take screenshots, record video, read session activity, and download session artifacts from an Expo Simulators session to prove that a change works.


Evidence shows what the app did on the remote device. Use a screenshot for a still state and a recording for motion. Use session activity for the list of actions that a person or an agent did. EAS also keeps session artifacts, such as recordings and screenshots, that you can download from EAS CLI or from the session page on expo.dev.

Choose the evidence

QuestionEvidence
Does the screen look correct?Screenshot
Does an animation, gesture, or transition work?Screen recording
Which actions did the agent do, and in what order?Session activity from eas simulator:events
What did the app print?App logs from the controller

Take a screenshot

Open the app first. agent-device needs an open app session before it can take a screenshot:

Terminal
- eas simulator:exec npx agent-device@latest open com.example.app --platform ios
- eas simulator:exec npx agent-device@latest screenshot ./artifacts/home.png

The screenshot downloads to the computer that runs the command. Take the screenshot only after the correct build is on screen. A release build shows the code from build time. See Which build to install on Expo Simulators. To confirm that a screenshot came from the remote device, see Confirm that the agent controls the remote device.

Control the screenshot size

On an iOS Simulator, agent-device screenshots use 1x logical points by default, such as 402 x 874 on iPhone 17. For a full-resolution image, pass --pixel-density 3 (1206 x 2622 on iPhone 17). A full-resolution image uses more tokens when an agent reads it. From agent-device 0.20.6, pass --scale with a value from 0.01 to 1 to make the image smaller:

Terminal
- eas simulator:exec npx agent-device@latest screenshot ./artifacts/home.png --scale 0.5

Use the full resolution for an image that you compare pixel by pixel with another image.

Record the screen

Terminal
- eas simulator:exec npx agent-device@latest open com.example.app --platform ios
- eas simulator:exec npx agent-device@latest record start ./artifacts/flow.mp4
# Use the app
- eas simulator:exec npx agent-device@latest record stop

agent-device writes the recording to the path that you pass to record start, with a .gesture-telemetry.json file next to it. EAS also uploads the recording as a session artifact. If record stop times out while the remote device still exports the recording, run record stop again. If agent-device reports that it cannot find the recording, add --platform ios.

Recordings may not capture every frame, so they cannot prove or disprove a short frame drop.

With Argent, use the screen-recording-start and screen-recording-stop tools. Argent removes frames that do not change by default, so turn off that option when you measure timing. Argent recordings on Expo Simulators include an Argent watermark.

Recover a recording that did not download

If the controller does not download a recording, get it from the session artifacts. EAS uploads the agent-device recording as an artifact, and it can appear while the session is still running. EAS also records the full session screen and uploads that recording as an artifact after the session stops. Get the session with its ID, and find the recording in the artifacts array:

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

Download the file from its downloadUrl:

Terminal
- curl --fail --location --max-time 600 --output ./capture.mp4 '<download-url>'

The downloadUrl does not change. Each request to it redirects to a new signed URL that is valid for one hour. If a signed URL expires, request the same downloadUrl again. You can get artifacts after the session stops.

Read session activity

Sessions that use agent-device, Argent, or Appium record each controller action. Show the activity so far:

Terminal
- eas simulator:events

Follow new activity in another terminal while you or an agent use the device:

Terminal
- eas simulator:events --follow

Use --json to get the raw event records for a script or an agent. You cannot use --json together with --follow. Session activity shows controller actions. It does not show the logs of your app.

Read app logs

agent-device has a logs command that collects the logs of the app that it opened. Logging is off by default. Open a log window for one reproduction instead of collecting all logs. Read the version-matched help for the syntax:

Terminal
- eas simulator:exec npx agent-device@latest help debugging

Find artifacts on expo.dev

The session page on expo.dev shows the evidence that EAS stores for the session:

SectionContent
Preview or recordingAn Open preview button while the session runs. After it ends, the recording player.
Session activityThe recorded controller actions.
ArtifactsFiles grouped as screenshots, screen recordings, traces, performance metrics, native profiles, React profiles, session events, and other files.
LogsThe logs of the job that ran the session. This section starts collapsed.

Android sessions also produce a session screen recording artifact. The session page on expo.dev shows an Open preview button that opens the browser preview in a new tab. Android support is still in development, so some features that work on iOS may not work on Android yet.

Job logs on the session page are available for 30 days after the session is created. EAS keeps session artifacts, such as screenshots and recordings, until you delete the session. You can delete a finished session from its expo.dev page with the Developer role or higher. Download the files that you want to keep. See Expo Simulators security, permissions, and data retention.

Common questions

Why does the screenshot command say that there is no active session?

agent-device needs an open app. Run open <app-id> before screenshot. If the start command launched the app with --open-url, attach without a relaunch: open <app-id> --foreground --platform ios.

Can other people see my artifacts?

Yes. People with access to the project can see the session page. An artifact download link works without an Expo login, so share it only with people who should see the file.