← ClaudeAtlas

fluttersdk-dusklisted

fluttersdk_dusk: E2E driver for Flutter apps that lets an LLM agent see (snap, observe, screenshot) and act (tap, type, drag, scroll, navigate) on a running Flutter app via 33 MCP tools (`dusk_*`) and 34 matching CLI commands (`./bin/fsa dusk:*`). Snapshots emit a YAML Semantics tree with stable `[ref=eN]` tokens; `dusk_find` and `dusk_observe` mint re-resolvable `q<N>` query handles. Every gesture passes a 6-step actionability gate with substring-parseable failure reasons (`not enabled`, `zero rect`, `off-viewport`, `not stable`, `obscured by`, `defunct`). TRIGGER when: any `dusk_*` MCP tool call, any `dusk:*` CLI command, `./bin/fsa` invocation, the user asks the agent to drive / inspect / test / debug a running Flutter app, the user mentions snap / observe / actionability / ref / eN / qN, or the conversation touches end-to-end testing of a Flutter UI. DO NOT TRIGGER when: only authoring `flutter_test` widget tests, only reading telescope ring buffers without driving the UI (use fluttersdk-telescope), or on
fluttersdk/dusk · ★ 2 · Testing & QA · score 76
Install: claude install-skill fluttersdk/dusk
<!-- fluttersdk_dusk v0.0.9 | Skill updated: 2026-06-25 --> # fluttersdk_dusk End-to-end driver for Flutter apps, designed for LLM agents. The running app exposes a `ext.dusk.*` VM Service surface plus an MCP server; the agent calls `dusk_*` tools (or `./bin/fsa dusk:*` from a shell) to snap the Semantics tree, mint ref tokens, gesture against them, wait for conditions, screenshot, and hot-reload, all without a test file or rebuild between actions. This skill assumes the app already has dusk installed (a `kDebugMode`-gated `DuskPlugin.install()` in `lib/main.dart`, the MCP server in `.mcp.json`). If not, run `dart run fluttersdk_dusk dusk:install` once from the app root and verify with `./bin/fsa dusk:doctor`. ## 1. Core Laws 1. **Two ref token spaces.** `e<N>` (snapshot-frozen, minted by `dusk_snap`) are deduped by `SemanticsNode.id`: the same widget across consecutive snaps returns the same `e<N>` and the ref stays valid as long as the node remains mounted. They become defunct when the node unmounts (navigation, conditional render, list rebuild). `q<N>` (re-resolvable, minted by `dusk_find` / `dusk_observe`) store a predicate and re-walk the live tree on every action. Use `e<N>` right after the snap that minted them when the UI is static. Reach for `q<N>` whenever the action might retry, the UI animates, or the agent holds the ref across a navigation. Never mix the spaces (no `e<N>` from find, no `q<N>` from snap). 2. **The 6-step actiona