> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cursor proof (BYO-CI)

> Device proof on every PR with your existing CI and a Cursor Automation — no Revyl GitHub App required

Prove each pull request on a Revyl cloud device using **your CI build** and a
**Cursor Automation**, without installing the Revyl GitHub App.

## Who this is for

Teams that already:

* Build every PR in their own CI (GitHub Actions or equivalent)
* Use Cursor (Automations / Cloud Agents)
* Want a device-backed proof comment on the PR

…and do **not** want to connect the Revyl GitHub App yet.

If you already connect GitHub to Revyl, use the [twin path](#twin-path-with-the-revyl-github-app)
instead — same upload step, Revyl launches Cursor proof for you.

## 3-step setup

### 1. Install Revyl in Cursor

Install the Revyl plugin or MCP and authenticate with a Revyl API key:

```bash theme={null}
revyl auth login
# or set REVYL_API_KEY for Automations / Cloud Agents
```

See [MCP setup](/integrations/mcp-setup) and the [Cursor plugin](/integrations/cursor/plugin).

### 2. Add one upload step to CI

After your existing build produces a simulator `.app` or installable `.apk`,
upload it:

```bash theme={null}
revyl build upload \
  --file path/to/app.apk \
  --app "<your-app-id>" \
  --platform android \
  --version "$GITHUB_SHA" \
  --yes \
  --json
```

Copy the ready-made workflow from
[`upload-for-cursor-proof.yml`](https://github.com/RevylAI/revyl-cli/blob/main/examples/ci-github-actions/upload-for-cursor-proof.yml)
in the public CLI examples. Store `REVYL_API_KEY` as a CI secret and the app id
as a variable. GitHub Actions metadata (`scm_head_sha`, PR number, and related
fields) is stamped automatically so the Automation can match the build to the
commit.

The CI job **only uploads**. It does not start a device and does not need a
Cursor API key.

### 3. Enable the Cursor Automation

Create an Automation at
[cursor.com/automations](https://cursor.com/automations):

1. Paste the prompt from
   [`PROMPT.md`](https://github.com/RevylAI/revyl-cli/blob/main/examples/cursor-automation/prove-mobile-pr/PROMPT.md).
2. Enable **Comment on pull request** and the **Revyl MCP** tools.
3. Prefer a **CI completed** / **Workflow run completed** trigger on the upload
   workflow; fall back to **Pull request pushed** if needed.
4. Add secret `REVYL_API_KEY` and variable `REVYL_APP_ID`.

Full trigger and identity notes:
[`AUTOMATION_SPEC.md`](https://github.com/RevylAI/revyl-cli/blob/main/examples/cursor-automation/prove-mobile-pr/AUTOMATION_SPEC.md).

## Secrets

| Where                    | What                                                                          |
| ------------------------ | ----------------------------------------------------------------------------- |
| CI + Cursor Automation   | `REVYL_API_KEY` (required)                                                    |
| CI + Automation variable | App id (`REVYL_APP_ID` / platform-specific)                                   |
| Your CI only             | Signing keys, Expo tokens, store credentials — never needed by the Automation |

No Cursor API key belongs in GitHub for this path.

## What happens on each PR

```text theme={null}
CI builds the app
  → revyl build upload (commit metadata stamped)
  → Cursor Automation starts
  → matches Revyl build for the PR head SHA
  → revyl device start --build-version-id …
  → screenshots / validations
  → session share + publish
  → ## Revyl device proof comment on the PR
```

If no matching build exists after a brief wait, the Automation comments that
proof was not run and stops — it never rebuilds and never claims proof without
a device session.

## Twin path with the Revyl GitHub App

When you connect the [Revyl GitHub integration](/integrations/github), keep the
same upload step and let Revyl orchestrate Cursor:

```yaml theme={null}
pr_review:
  builds:
    android:
      use_existing_ci: true
      app: "<your-app-id>"
  actions:
    proof_of_changes: true
    proof_harness:
      kind: cursor
```

See [Use your own CI](/integrations/github#use-your-own-ci) and
[Choose which agent proves the change](/integrations/github#choose-which-agent-proves-the-change).
Revyl waits for the CI-uploaded build, then launches Cursor proof instead of
(or as an alternative to) the hand-rolled Automation.

## Related

* [Cursor overview](/integrations/cursor) — plugin vs cloud agents
* [Cursor Cloud Agents](/integrations/cursor/cloud-agents) — Revyl-launched proof harness
* [MCP setup](/integrations/mcp-setup) — authenticate Revyl tools in Cursor
* [Agent Skills](/integrations/skills) — including proof-from-CI guidance in the plugin
* [GitHub](/integrations/github) — App-connected previews and proof
