---
modificationDate: October 15, 2026
title: Capture screenshots, recordings, and logs from a remote simulator
description: Take screenshots, record video, read session activity, and download session artifacts from an Expo Simulators session to prove that a change works.
---

This documentation is available as Markdown for AI agents and LLMs. See the [full Markdown index](https://docs.expo.dev/llms.txt) or append .md to any documentation URL.

# Capture screenshots, recordings, and logs from a remote simulator

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

<AgentInstructions>

## Submitting Feedback

If you encounter errors, misleading or outdated information, report it so Expo can be improved:

Preferred command:
npx --yes submit-expo-feedback@latest --category docs --subject "/preview/simulators/how-to/capture-evidence/" "<actionable feedback>"

Direct HTTP fallback:
curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/preview/simulators/how-to/capture-evidence/","feedback":"🤖 Agent feedback for docs: <specific, actionable description> (<model>, <harness>)"}'

Only submit when you have something specific and actionable to report. Try to give the most context.

</AgentInstructions>

> **Expo Simulators is a limited-access preview.** It is not included with paid or free plans and is currently available only to select partners. [Join the waitlist](https://expo.dev/services/simulators) if you are interested in trying it.

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

| Question | Evidence |
| --- | --- |
| 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:

```sh
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](https://docs.expo.dev/preview/simulators/how-it-works/builds-and-bundles.md). To confirm that a screenshot came from the remote device, see [Confirm that the agent controls the remote device](https://docs.expo.dev/preview/simulators/how-it-works/agent-targeting.md#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:

```sh
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

```sh
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:

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

Download the file from its `downloadUrl`:

```sh
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:

```sh
eas simulator:events
```

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

```sh
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:

```sh
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:

| Section | Content |
| --- | --- |
| Preview or recording | An **Open preview** button while the session runs. After it ends, the recording player. |
| Session activity | The recorded controller actions. |
| Artifacts | Files grouped as screenshots, screen recordings, traces, performance metrics, native profiles, React profiles, session events, and other files. |
| Logs | The 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](https://docs.expo.dev/preview/simulators/reference/security-and-data.md).

## 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.
