sootsim maestro

sootsim 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

sootsim maestro [test] <flow-or-dir> [options]
sootsim maestro # auto-discovers ./.maestro/
sootsim maestro generate "<goal>"
sootsim maestro start|keep|end
sootsim maestro validate <flow>
sootsim maestro init # scaffold a starter flow
sootsim 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
--validatereplay 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

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

One Maestro Surface

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

terminal

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

Supports: tapOn, longPressOn, assertVisible, inputText, scrollUntilVisible, launchApp, stopApp, clearState, copyTextFrom, evalScript, openLink, when:/optional:, onFlowStart/onFlowComplete, repeat, runFlow, env var interpolation. 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 replays 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.

Ready to build?

Run your React Native app in the browser. No simulators, no native toolchain, no waiting.

curl -fsSL https://sootsim.com/install.sh | sh