This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Triage a bug report with an AI agent
Edit page
Add an agentic workflow in which a coding agent reproduces a bug from a GitHub issue or TestFlight feedback on a remote Android Emulator or iOS Simulator.
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 if you are interested in trying it.
Bug triage is an automated workflow in which a coding agent tries to reproduce a bug report on a remote Android Emulator or iOS Simulator. The report comes from a GitHub issue or from TestFlight feedback. When the agent sees the bug, a person reads the report and adds the agent label. Then Issue to PR opens a pull request (PR) with a fix, and Agentic CI tests the fix.
How Bug triage works
The highlighted steps run on EAS Workflows and Expo Simulators:
A bug report arrives as an issue or as tester feedback
The workflow files feedback as an issue, and finds or builds the app
A coding agent follows the steps of the report on a cloud simulator
The workflow posts the verdict and the evidence on the issue
A person reads the report and adds the agent label
Issue to PR opens a fix, and Agentic CI tests it
- Each bug report starts as a GitHub issue. For TestFlight feedback, the workflow creates the issue with the comment of the tester, the device, and links to the screenshots.
- The workflow starts an Expo Simulators session with a build of the default branch.
- A coding agent follows the steps in the report and writes a verdict:
REPLICATEDorNOT-REPLICATED. - The workflow posts the verdict on the issue. For a
REPLICATEDbug, a person reads the report and adds theagentlabel, which starts Issue to PR.
The agent tests a build of the default branch, not the build that the tester used.
Add Bug triage with an AI agent
Paste this into Claude, Cursor, Codex, or another agent.
Add the Bug triage workflow to my Expo project. Use https://docs.expo.dev/agentic-workflows/bug-triage.md as the source for each step and each file. 1. Check each step on https://docs.expo.dev/agentic-workflows/setup.md. Check that the Agentic CI workflow from https://docs.expo.dev/agentic-workflows/agentic-ci.md and the Issue to PR workflow from https://docs.expo.dev/agentic-workflows/issue-to-pr.md are in the project. Do each step that is not done. Use the version of .eas/agents/run-agent.sh for the agent that I name, and the version of .eas/agents/start-session.sh for the controller that I name: agent-device or Argent. 2. Create each file that the page shows, at the same path and with the same content. 3. When a step needs a token, an account, or a choice, stop and ask me. Do not print or save a token. 4. Run `eas workflow:validate` on each workflow file that you added. 5. Commit the files, but do not push them. Tell me which files you added and which commands I must run.
Set up your project
Follow Set up a project for agentic workflows one time for your project, including Add a GitHub token to EAS. See What the agent can do to learn which limits apply to the agent.
Bug triage needs Agentic CI and Issue to PR, because they fix a replicated bug and test the fix. Add them first.
Add the Bug triage workflow
1
2
Add the job script
The script does these tasks in this order:
- It reads the issue and the comments from the owners, members, and collaborators of the repository.
- It starts a session with the build. Then it writes the prompt for the agent, and runs the agent in the
devicemode. - It posts the verdict and a report on the issue.
- For a
REPLICATEDverdict, the comment asks a person to read the report and add theagentlabel. - It stops the session.
3
4
Add the TestFlight report formatter
TestFlight is iOS only, so skip this step for Android. For TestFlight feedback, the iOS workflow uses this script to change the feedback into the text of an issue. The issue does not include the name or the email address of the tester.
Apple signs the links to the screenshots for a limited time, so the links in the issue expire.
5
Add the EAS workflow
Use the file for the platform that you test. Only the iOS workflow starts on TestFlight feedback.
To test both platforms, add both files with different names, such as bug-triage-android.yml and bug-triage-ios.yml. Each workflow posts its own comment. Use the same names in the commands on this page.
The jobs do these tasks:
intakeruns only in the iOS workflow, for TestFlight feedback. It creates the GitHub issue.fingerprint,get_build,build, andrepackfind or create a build of the default branch for the remote device.reproduceruns the job script. It gets the issue number from-F issue_numberin a manual run, or from theintakejob.
Reproduce a bug from a GitHub issue
Create an issue with the bug label. Write the steps, the expected result, and the actual result:
The command prints the address of the issue. The address ends with the issue number. Start the workflow on the default branch with the issue number:
If your default branch has a different name, change --ref.
Reproduce a bug from TestFlight feedback
This path is iOS only. You need a membership in the Apple Developer Program and an app with a build in TestFlight.
1
Connect your App Store Connect app to the EAS project. See Trigger workflows from App Store Connect events.
Do this before testers send feedback. Feedback that a tester sent before the connection does not start the workflow.
2
Make sure that EAS has an App Store Connect API key for the app. To add one, run eas credentials --platform ios. The eas testflight:feedback command finds the app with the bundle identifier and the API key of the production submit profile.
3
Create the testflight label:
4
In the TestFlight app, take a screenshot of the bug, write a comment, and send the feedback.
App Store Connect starts the iOS workflow. The intake job creates the issue, and then the reproduce job runs. Each TestFlight report creates a new issue. The workflow does not look for duplicates.
Read the result
When the agent finishes, the issue gets a Bug triage (Android) or Bug triage (iOS) comment:
- Verdict:
REPLICATED,NOT-REPLICATED, orINCONCLUSIVE, with one sentence from the agent. The verdict isINCONCLUSIVEwhen the agent writes no verdict. - Session recording: the session page on expo.dev, with the screen recording of the session.
- Agent report and screenshots: the workflow run on expo.dev. The report and the screenshots are in its artifacts. The Claude Code runner also saves its log there, and the other runners print it to the job log.
- Report: in a folded section, each step of the agent and what it saw.
For a REPLICATED bug, read the report before you add the agent label. The report can come from a tester, and the change agent follows the text of the issue. When you add the label, Issue to PR opens a PR with a fix, and Agentic CI tests it.
For NOT-REPLICATED, add the missing steps to the issue. Then run the workflow again.
Next steps
Issue to PR: a coding agent writes the change for a GitHub issue and opens a pull request, and Agentic CI tests it.
Agentic CI: a coding agent tests each pull request on a remote Android Emulator or iOS Simulator and posts a verdict with evidence.