/roveflow --only=cold-setup passes on your own Flutter app” in minutes.
Build the
flutter_inspector_mcp binary first if you have not already. See Build flutter_inspector_mcp.Install the CLI
import Install from “/snippets/install.mdx”;See Installation for prerequisites and
PATH tips.Initialize into your Flutter project
From the project root:This writes the skill, slash command, agent,
lib/core/mcp/mcp_interaction_tools.dart, .mcp.json, and a starter docs/roveflow/scenarios.md. The command fails fast if the target directory is not a Flutter project.See roveflow init reference for the full list of created files and flags.Add mcp_toolkit to pubspec
mcp_toolkit is the only runtime dependency the interaction tools pull in.Add the navigate.pop() helper
lib/core/mcp/mcp_interaction_tools.dart (written by roveflow init) imports a top-level navigate.pop() helper. Create it:navigate.pop() helper elsewhere, point the import at the top of mcp_interaction_tools.dart at that file instead of adding this one.Wire main.dart
Add three imports and a debug-only registration block:Attach Replace
rootNavigatorKey to your MaterialApp:<your_app> with your pubspec name. Full context: Integrate into an existing app.Verify .mcp.json
roveflow init writes .mcp.json using env-var substitution so the binary path stays out of your repo:ROVEFLOW_FLUTTER_INSPECTOR is exported in your shell (see Build flutter_inspector_mcp). If you prefer not to use an env var, replace the command field with the absolute path to the binary.Port collisions. The default
--dart-vm-port=8181 matches flutter run --vm-service-port=8181. If another Flutter app is already using 8181, pick an unused port (e.g., 8182) and update both .mcp.json and the flutter run command below.Fill in docs/roveflow/scenarios.md
Open the file and replace the Full field reference: Scenario schema.
cold-setup placeholder with your app’s first-run flow. You need real screen titles for waypoints.Minimal example (from the counter app):Boot the app in debug mode
flutter-inspector MCP.The
/roveflow orchestrator will restart the app itself during its preflight (shut down, erase, boot, relaunch) so you can also skip this step and let the slash command handle it.Run the smoke test in Claude Code
Open a Claude Code session with its working directory set to the Flutter project root so Then invoke:The orchestrator dispatches a
.mcp.json loads and flutter-inspector is available:roveflow-runner agent, collects the structured result, and writes a session recording at docs/roveflow/runs/<timestamp>/.If cold-setup passes, your install is good. Add more scenarios incrementally.
If cold-setup fails
- Waypoint titles don’t match — screenshot your running app and copy the exact
AppBartitle string intowaypoints.reach_screen. - The agent can’t find a button — either rewrite the
steps_hintwith clearer landmarks, or add aValueKey(see Using ValueKeys). - App won’t boot — check
/tmp/flutter-smoke-run.logfor build errors. - Port already in use: another Flutter process is holding 8181. Stop it or pick a different port in
.mcp.json+flutter run --vm-service-port=. - Using
fvmor a flavor: the skill auto-detectsfvmfrom.fvmrc/.fvm/. For flavors or custom wrappers, drop adocs/roveflow/config.yaml(see run config reference).
Next
Authoring scenarios
YAML format, criticality tiers, and skip results.
Running smoke tests
Modes, flags, and reporting.
CLI reference
Every command and flag on one page.
Counter app walkthrough
The dogfood install in full.