roveflow init installs a /roveflow slash command into your Claude Code project. Invoke it in any Claude Code session whose working directory is the Flutter project root.
Prerequisites
- The app is running in debug mode on a simulator.
.mcp.jsonpoints at a workingflutter_inspector_mcpbinary.docs/roveflow/scenarios.mdhas a validcold-setupand at least the scenarios you want to run.
Run configuration
Before the orchestrator relaunches the app, it resolves three values:| Value | How it’s resolved |
|---|---|
flutter_command | fvm flutter if .fvmrc / .fvm/ / fvm_config.json is present; otherwise flutter. |
flavor | The single subdirectory of ios/config/ if exactly one exists; otherwise omitted. |
vm_service_port | Parsed from --dart-vm-port=N in .mcp.json; defaults to 8181. |
docs/roveflow/config.yaml (all fields optional):
.mcp.json --dart-vm-port in sync).
Modes
--mode=critical
Default. Runs only scenarios tagged
criticality: critical. Use this as the pre-release gate.--mode=all
Runs every scenario in the inventory. Use for scheduled nightly runs.
--only=<ids>
Runs a specific subset (comma-separated ids). Use when iterating on a single scenario.
Recording the simulator
Every run also captures a full-length.mov of the simulator via xcrun simctl io booted recordVideo. It lands at docs/roveflow/runs/<run-id>/recording.mov alongside report.md.
Pass --no-record to skip it:
Invocation
In Claude Code:--mode=critical (the default).
What happens under the hood
- The orchestrator parses scenarios and filters by mode (and
--onlyif present). - It resets the simulator (shut down, erase, boot, relaunch the app in debug mode). That’s the only step that touches your system directly.
- It dispatches a
roveflow-runneragent (Haiku-class) forcold-setup. - If cold-setup passes, it dispatches one agent per remaining scenario, in declared order, collecting a structured result for each.
- Between scenarios it runs
reset_to_home; if that fails it has one fallback attempt before aborting withskipped: setup_lost. - It compacts working memory after every 5 scenarios or when the context estimate crosses 60%.
- It compiles the results into a markdown report.
The report
Manual mode
A markdown table to chat:Scheduled mode
Same table written todocs/roveflow/runs/YYYY-MM-DD-HHMM/report.md with no chat interaction.
Reading results
pass— the scenario’spasscondition was observable on screen.fail— the scenario’sfailcondition fired, or the flow was unreachable (crash, blank screen, unrecoverable error toast).skipped: no_data— environmental gap (e.g., no available slots today).skipped: setup_failed— cold-setup didn’t reach home; every later scenario inherits this.skipped: setup_lost— mid-run reset failed; remaining scenarios inherit it.
tap_at as a fallback surfaces "fragile": true in its notes. If you see fragility on a hot scenario, consider adding a ValueKey (Using ValueKeys).
Aborts
The orchestrator aborts when:- The app fails to boot or the VM service never responds.
cold-setupfails.- Mid-run reset-to-home fails and the one fallback attempt also fails.
skipped: setup_failed or skipped: setup_lost in the report.
Next
Authoring scenarios
Add more flows to the inventory.
Recording demos
Save polished playbacks of your runs.