A verdict, not a summary
Every run ends in PASS, FAIL or a refusal with a typed reason and the next action to take. Your agent reads it as JSON; your scripts read the exit code.
exit 0 pass · 1 fail · 4 refused
React Native · iOS simulator · Claude Code, Codex and Cursor
Claude Code, Codex or Cursor writes the React Native change. QaReN tries it in your app on an iOS simulator and comes back with PASS or FAIL, and the evidence behind it.
A coding agent checks its work the ways it can: types, lint, unit tests. It does not tap through the app. A screen that never appears, a tap that lands on nothing or a flow that breaks halfway gets past all of those and reaches review, or your users.
QaReN is the QA engineer on your agent's team. Your agent hands it the change and a short plan of what to check; QaReN runs that plan in the real app and tells both of you what happened.
How a check runs
You ask your agent to QA a change, for example "QA the onboarding change".
The agent writes a plan in Markdown: what to tap, what to wait for and what must be on screen.
### Onboarding to the tasks tab 1. Tap "onboarding-skip" 2. Wait for "Welcome" to appear ✓ "Welcome" 3. Tap "tab-tasks"
QaReN borrows a simulator, builds and installs the app from your working tree, starts Metro, walks the plan step by step and tears down what it started.
You get PASS or FAIL with the evidence. On a pull request, QaReN can record the screen and post the result as a comment.
Every run ends in PASS, FAIL or a refusal with a typed reason and the next action to take. Your agent reads it as JSON; your scripts read the exit code.
exit 0 pass · 1 fail · 4 refused
Each run keeps a step-by-step ledger and a readable report at the paths its receipt names. A pull request run adds a screen recording when one can be captured.
report.md · ledger.json · run.json · logs/events.jsonl
QaReN builds your working tree, or a pull request's head, and fails the run if the code changes while the plan is being walked, so a drifted run can never pass.
CANDIDATE_DRIFTED is never a pass
A passing block that is eligible is saved under .qaren/actions/ and replayed next time by the exact elements it used, so repeat checks skip the search.
ledger.blocks: replayed · patched · discovered
| Your | What QaReN works with |
|---|---|
| Coding agent | Claude Code, Codex or Cursor, through the QaReN plugin. |
| App | An Expo React Native app that uses expo-dev-client and pnpm. |
| Mac | An Apple silicon Mac with Xcode. QaReN 2.0 sets up and checks on an iOS simulator. |
| Android | Coming in 2.1. |
Open Claude Code, Codex or Cursor in your app. Copy this prompt, then paste it into your agent to set up QaReN for iOS simulators on an Apple silicon Mac:
Prefer terminal commands or manual installation? See the full installation guide.
Set up QaReN in this app, from the app root, for my current host (Claude Code, Codex or Cursor). The QaReN repository is https://github.com/Lykhoyda/QaReN. Check that this is an Apple silicon Mac and a pnpm Expo app using expo-dev-client with pnpm-lock.yaml. Install missing Node 24 or newer, Corepack and pnpm using user-writable locations. Check that full Xcode and an iOS simulator runtime are installed and ready. If a prerequisite needs administrator access, a license agreement or a manual download, stop and tell me the exact step I need to complete. Do not use sudo. Install the QaReN plugin for my host using the per-host instructions at https://github.com/Lykhoyda/QaReN#install-the-plugin-yourself If the host needs a plugin UI step or a session restart, tell me what to do and resume setup once the plugin is available. Run /qaren:setup; if slash commands are unavailable, load and follow the plugin's setup skill. It owns installing the matching qaren CLI, running qaren doctor, configuring this app and selecting the iOS simulator. Follow its source-install fallback only if the release is unavailable. Use the matching binary path it resolves; preserve any existing qaren command on PATH and keep the default QaReN home and installer options. Follow setup through writing .qaren/plans/smoke.md and running the first smoke check. Read the receipt and report result, run_id and next_action. If setup or the check stops, report the exact reason and fix; do not claim success before a passing receipt.
Under the hood, QaReN is the qaren command-line tool. The plugin teaches your agent to drive it, and you can run the same commands yourself.