---
name: contrast
description: >-
  index of all Contrast and Peach agent skills and CLI commands.
  auto-generated from the CLI info registry — do not edit by hand.
---

# contrast

overview of all available skills and CLI commands in this repo.

> this file is auto-generated by `bun scripts/generate-contrast-skill.ts`.
> to update, edit the source registries and re-run the generator.

## Peach CLI commands

the `rnx` CLI is the operational surface for booting shells, driving
automation, inspecting the render tree, and managing sims.

| command | description |
| --- | --- |
| `rnx maestro` | author, generate, and run Maestro YAML flows against rnx |
| `rnx detox` | run existing Detox suites against rnx on headless Chromium |
| `rnx cleanup` | inspect and reclaim local rnx disk usage |
| `rnx record` | capture the live sim as webm/mp4/gif, or sample N png frames (--frames) |
| `rnx film` | record a flow on the flat canvas, play it back on the 3d device stage under a camera cinematic, save a clip |
| `rnx storage` | manage guest app storage and launch profiles |
| `rnx permissions` | inspect and change simulated operating-system permissions |
| `rnx perf` | CPU, React render, shell frame, and scroll-layer profiling |
| `rnx describe` | curated human-readable UI summary (default inspection tool) |
| `rnx find` | locate nodes by text / testID / role / type / predicate |
| `rnx assert` | run any read verb and convert its output into an exit code |
| `rnx screenshot` | capture PNGs and manage App Store screenshot assets |
| `rnx get` | read runtime state (tree, a11y, layout, url, count, errors, …) |
| `rnx do` | drive the app (tap, type, scroll, swipe, key, reload, …) |
| `rnx wait` | block until the runtime reaches a known state |
| `rnx shell` | drive shell state and simulator chrome |
| `rnx mode` | toggle screenshot and 3D display modes |
| `rnx device` | inspect or change the live device preset for a sim |
| `rnx network` | inspect live network traffic from the running rnx worker |
| `rnx logs` | inspect live console output from the running rnx worker |
| `rnx debug` | drive __sootsimDebug: channels, snapshots, and inspectors |
| `rnx what-happened` | show recent semantic events: toasts, keyboards, screens, alerts, fetches, errors |
| `rnx timeline` | control the semantic event timeline (enable opt-in kinds, clear, dump) |
| `rnx box` | start a local Box or create a cloud Box |
| `rnx ios` | start an iOS simulator |
| `rnx android` | start an Android simulator |
| `rnx open` | load a target into the current sim or open a new one |
| `rnx list` | list connected sims or available launch drivers |
| `rnx use` | select a connected sim |
| `rnx skill` | install and inspect bundled rnx agent skills |
| `rnx claim` | take an exclusive lease on a sim |
| `rnx agent` | attached projects + local agent sessions (codex/claude) |
| `rnx close` | close a connected sim |
| `rnx setup` | configure optional local conveniences |
| `rnx compat` | check package compatibility |
| `rnx report-issue` | send an explicitly approved compatibility report |
| `rnx desktop` | launch or install the desktop companion |
| `rnx daemon` | manage the recommended background bridge service |
| `rnx version` | show the CLI + engine runtime versions you are running |
| `rnx upgrade` | update the rnx CLI and engine runtime to the latest |
| `rnx serve` | run the rnx bridge in the foreground |
| `rnx runtime` | manage engine runtimes under ~/.rnx/runtimes/ |
| `rnx auth` | inspect active CLI auth |
| `rnx login` | sign in for preview uploads |
| `rnx logout` | clear the local desktop auth session |
| `rnx config` | manage local CLI preferences |

### runtime verb groups

every runtime verb is organized under one of these grouping prefixes.
run `rnx --help` to see the full list under each group.

- `rnx describe` — summarize the current UI
- `rnx find <...>` — unified finder (bare text, --testid, --role, --type, --pressable, --visible)
- `rnx get <noun>` — read runtime state (tree, a11y, url, count, errors, warnings, requests, globals, layout, node)
- `rnx do <action>` — drive the app (tap, tap-text, tap-id, type, type-into, key, dismiss, scroll, drag, swipe, pinch, reload, shell, sleep, settle, wait)
- `rnx debug <tool>` — instrumentation (state, js, eval, perf, sample-color, enable/disable channels, snapshots, diff, record, recent)

### global flags

- `-h, --help` — show help
- `-V, --version` — show version
- `-v, --verbose` — verbose output
- `-p, --port <number>` — bridge port, depending on command
- `-d, --device <model>` — override the simulated device model
- `-t, --theme <scheme>` — override light, dark, or auto color scheme
- `--headless` — run browser automation without a visible window where supported

## bundled Peach agent skills

skills for working with the Peach native preview engine:

| skill | description |
| --- | --- |
| `/rnx-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under Peach. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnx CLI debug tooling first, not screenshots or ad-hoc logging. |
| `/rnx-perf` | Optimize Peach engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /rnx-debug first. |
| `/rnx-setup` | Get Peach connected to your React Native app with no project setup |
| `/rnx-test` | Run automated tests against your React Native app under Peach with Maestro YAML or Detox/Jest |
| `/rnx-visual` | Pixel-level rendering comparison between Peach and native iOS — fonts, gradients, shadows, image fidelity |

## automatic settling

every CLI command already waits at the right moment — **do not wrap
commands in your own `sleep` or chain `do settle` "just to be safe"**.

- **before read commands** (`describe`, `find`, `get`, `tree`, `node`,
  `layout`, `screenshot`, `capture`, `a11y`, `sample-color`, `count`,
  and every gesture — `tap`, `tap-id`, `tap-text`, `type-into`,
  `touch`, `swipe`, `drag`, `scroll`, `pinch`, `long-press`,
  `double-tap`, `gesture`) the CLI waits up to **1800 ms** for any
  in-flight screen transition to actually start, so the tree you read is
  never mid-flip.
- **after write commands** (`tap`, `tap-text`, `tap-id`, `type`,
  `type-into`, `key`, `key-sequence`, `keycode`, `drag`, `swipe`,
  `long-press`, `touch`, `gesture`, `pinch`, `scroll`, `shell`)
  the CLI polls the layout hash until it is stable for two consecutive
  frames. budget: **400 ms for agents** (`RNX_AGENT=1`, set by the
  harness), 200 ms for humans.

what this means:

- `rnx do tap-id login` then `rnx find "Welcome"` Just Works™.
- you only need `rnx do settle <seconds>` or `rnx wait idle
  --max-ms <N>` when the CLI explicitly prints
  `⚠ auto-wait timed out after Nms — next command may see mid-animation
  state`, or when the transition you care about lasts longer than ~400 ms
  (full stack navigation, crossfades, video load).
- opt-out: `--no-wait` on a single command, `RNX_NO_AUTO_WAIT=1`
  for a whole lane.
- if a read keeps racing its write, the fix is **never** a blind `sleep` —
  prefer `wait selector`, `wait ready`, `wait idle`, or a longer
  explicit `do settle`, and investigate whether the app's animation
  completion signal is actually firing.

## quick reference

### dev workflow

```sh
bun dev                              # start everything
rnx dev -- pnpm dev              # wrap a bundler
rnx open 8081                    # load an app
rnx describe                     # inspect the UI tree
```

### debugging

```sh
rnx get errors 5                 # recent console errors
rnx get requests 5               # recent failed requests
rnx debug snapshot before        # capture state
rnx debug diff before after      # compare snapshots
rnx debug state shell            # runtime state dump
```

### inspection

```sh
rnx describe                     # visible elements
rnx find "Sign in"               # find by text
rnx find --testid loginButton    # find by testID
rnx do tap-text "Submit"         # tap by text
rnx do type "hello"              # type text
```
