[ Documentation ]
rnx maestro

rnx maestro

rnx maestro

The single YAML test surface. Run existing .maestro/*.yaml suites unchanged, generate a flow from a plain-language goal, or author one from live CLI actions. Playback, recording, profiling, and hosted results all use the same runner.

terminal
rnx maestro [test] <flow-or-dir> [options]
rnx maestro # auto-discovers ./.maestro/
rnx maestro generate "<goal>"
rnx maestro start|keep|end
rnx maestro validate <flow>
rnx maestro init # scaffold a starter flow
rnx maestro --list-compat

Options

flagdescription
--env KEY=VALUEset env vars for ${KEY} interpolation (repeatable)
--continuousre-run the flow on file changes (alias for —watch)
--format <fmt>accepted for maestro cli compat (not used)
--profilecapture performance stats while the flow runs
--out <dir>write recordings and screenshots to this directory
--url <url>load this target before running the flow
--output <path>write a live-authored flow on maestro end
--validatere-run a live-authored flow before clearing its draft
--videorecord while validating a live-authored flow
--newforce a fresh sim for this run
--headedforce a fresh, VISIBLE window (implies —new, overrides —headless) to watch the flow run live
--recordrecord a webm while the flow runs
--previewrecord events+video, upload, and print /preview/<id>
--preview-openopen the uploaded preview link after a successful run
--preview-origin <url>upload target for —preview
--preview-public-origin <url>public link origin for —preview
--slow <ms>delay between steps for natural pacing
--list-compatprint supported and unsupported Maestro verbs

Examples

terminal
rnx maestro test .maestro/login.yaml
rnx maestro generate "log in and verify the welcome screen"
rnx maestro start
rnx maestro end --output .maestro/login.yaml --validate
rnx maestro --env USERNAME=alice test .maestro/login.yaml
rnx maestro test .maestro/flow.yaml --record
rnx maestro --list-compat

One Maestro Surface

rnx maestro owns every YAML test: existing suites, generated tests, and live-authored drafts. Existing Maestro projects remain drop-in compatible:

terminal
rnx maestro # discover .maestro/ and run all
rnx maestro test .maestro/login.yaml # single flow
rnx maestro generate "log in and verify the welcome screen"
rnx maestro start # begin a live-authored draft
rnx do tap-id loginButton
rnx maestro keep
rnx maestro end --output .maestro/login.yaml --validate
rnx maestro init # scaffold .maestro/login.yaml
rnx maestro --list-compat # verb support matrix

Supports: tapOn, longPressOn, assertVisible, inputText, scrollUntilVisible, launchApp with JSON arguments, stopApp, clearState, copyTextFrom, evalScript, openLink, when:/optional:, onFlowStart/onFlowComplete, repeat, runFlow, env var interpolation. Launch arguments are installed before guest app entry and replace or clear on each later launch. Device-only verbs (setLocation, addMedia, killApp) throw a clear error.

For live authoring, only the last successful write action becomes the pending candidate; maestro keep commits it to the draft. maestro end --validate re-runs from a clean run before clearing the draft, and preserves the draft if validation fails.

Existing flow files still support frontmatter like:

---
app: 8081
electron: true
---

That lets a flow file encode which target it opens and whether the desktop companion is the preferred runtime for that flow. When you want frame timing for a full scripted path, run the same file with --profile. Maestro playback, recording, and profiling stay on the same bridge-backed sim/action surface as the rest of the CLI.