From flutter-slipstream
Launches, observes, and interacts with running Flutter apps using MCP tools instead of terminal commands. Use for running, testing, debugging layout, taking screenshots, and UI interaction.
How this skill is triggered — by the user, by Claude, or both
Slash command
/flutter-slipstream:slipstream-inspectorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The flutter-slipstream plugin provides MCP tools for launching, observing, and
The flutter-slipstream plugin provides MCP tools for launching, observing, and interacting with a running Flutter app. Use these tools — not terminal commands — for all Flutter app work.
When working on a Flutter app with this plugin installed, always prefer the MCP tools over shell commands:
| Instead of... | Use... |
|---|---|
flutter run | run_app |
| Hot reload (shell) | reload |
| Reading terminal log | get_output |
run_app does more than flutter run: it auto-selects the best available
device, exposes app output via get_output, and enables screenshot capture,
layout inspection, and UI interaction — none of which are possible from a plain
terminal session.
run_app → get_output → take_screenshot
→ edit source → reload → get_output → take_screenshot → repeat
get_output after run_app, after reload, and after any interaction
tool. It drains the output buffer — skipping it causes output to accumulate
silently across calls.take_screenshot after every reload to confirm the change looked right.
Never assume a visual edit was correct without seeing it.get_output returns a [flutter.error] line, the widget ID in the
summary can be passed directly to inspect_layout.take_screenshot — see what's on screen.get_route — see the navigator stack and current screen widget names with
source file locations. Use before editing to confirm which file to change.get_semantics — see the interactive elements and their node IDs.When slipstream_agent is installed in the Flutter app, prefer finder-based
tools — they are more reliable than semantics-based interaction:
perform_tap(byKey: ...) / perform_set_text(byKey: ...) — most reliable;
add ValueKey('my_key') to the widget while writing it.perform_tap(byText: ...) — good for button labels.perform_tap(byType: ...) — useful for unique widget types.Fall back to perform_semantic_action (works without slipstream_agent) when
the target widget has no key and no distinctive text — e.g. a built-in
IconButton.
reload (hot reload) preserves app state and is fast, but cannot apply
structural changes: new routes, modified initState, changed widget keys, or
constructor signature changes. Use reload(full_restart: true) when state must
reset. Expect the app to return to its initial state.
get_output must be called explicitlyget_output is a pull operation — it drains the buffer and clears it. Call it
after every run_app, reload, and interaction tool, even when no output is
expected. Skipping it causes errors to accumulate and makes [flutter.error]
entries harder to correlate with their cause.
Flutter's built-in widgets sometimes set a Tooltip (e.g. the Drawer hamburger
button gets "Open navigation menu") but that string does not appear as a
semantics label in get_semantics output. If a button shows no label, use its
numeric node ID with perform_semantic_action.
take_screenshot captures only the Flutter-rendered view. Native system UI
(permission dialogs, share sheets) does not appear. If a red flutter.error
chip is visible in the screenshot, call get_output to clear it before
retaking.
inspect_layout with no widget_id starts from the root.[flutter.error] output can be passed directly — no tree
traversal needed.subtree_depth when the relevant widget is several levels down.evaluate is useful for exact runtime values (MediaQuery.of(...),
controller state) that don't appear in the layout tree.npx claudepluginhub devoncarew/slipstream --plugin flutter-slipstreamGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.