gitnexus-cli
Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki,…
Use this skill when wiring automation for a Flutter app — choosing the right surface (interactive MCP `fmt_*` tools, CLI one-shots, programmatic `flutter_mcp_harness` Dart scenarios, the browser CDP tier, or an external build+lifecycle runner like oka), composing the chain
$ npx -y skills add Arenukvern/mcp_flutter --skill flutter-mcp-automation-chain --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/flutter-mcp-automation-chainContext preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when wiring automation for a Flutter app — choosing the right surface (interactive MCP `fmt_*` tools, CLI one-shots, programmatic `flutter_mcp_harness` Dart scenarios, the browser CDP tier, or an external build+lifecycle runner like oka), composing the chain
name: flutter-mcp-automation-chain description: Use this skill when wiring automation for a Flutter app — choosing the right surface (interactive MCP `fmt_*` tools, CLI one-shots, programmatic `flutter_mcp_harness` Dart scenarios, the browser CDP tier, or an external build+lifecycle runner like oka), composing the chain end-to-end, or integrating `oka` (`oka init`/`dev`/`run`, device targets, the runner-session contract, `driverForLiveSession`). Also use when the user asks which tier or mode to use, how to drive/build their app from Dart or CI without a chat round-trip, or how oka and flutter-mcp-toolkit fit together. For authoring repeatable scenarios inside this repo's showcase, use `flutter-mcp-e2e-harness`; for interactive debugging, use `flutter-mcp`.
<!-- @FMT_MODE_PRELUDE -->
The toolkit's surfaces are **one chain, not competing products**. The app registers `ext.mcp.toolkit.*` service extensions (`mcp_toolkit`), and every surface drives those same extensions through the universal `AutomationDriver` contract (`universal_automation_interface`, ADR-0038): **observe** (semantic snapshot with refs/bounds) → **act** (tap/type/navigate) → **verify** (snapshot again, read values). Agents learn one grammar regardless of the target — Flutter apps, browsers (`CdpDriver`), OS-native tiers.
intentcall hints (MCP _meta) declarative build + lifecycle
│ (oka: oka.yaml → targets)
▼ │
┌──────────────┐ transport over ext.mcp.toolkit.* ▼
│ MCP fmt_* │ ◄── the same extensions ──► flutter_mcp_harness
│ CLI (fmtk) │ (ToolkitDriver implements Scenario / AppTargets /
│ dynamic │ AutomationDriver) VmClient / LogTap
│ app tools │
└──────────────┘ ◄── universal_automation_* contracts ──► CdpDriver (web)**At most one owning attach session per app.** The owning session (a `flutter run`, or an external runner's `dev` command like `oka dev`) is the only compile-capable reload channel — a second attach on a session someone else owns is the ADR-0014 failure mode (the second attach can kill the first). Everything else in the chain is an **observer**: it reads the same VM service and drives extensions, but never takes ownership. When an external runner owns the session, it writes `.flutter_mcp/runner-session.json` (spec v2, ADR-0014) so the toolkit and harness can find the VM and delegate reload/restart to the owner. Absence of the file is the liveness signal.
| Need | Surface | Skill / doc | |---|---|---| | Chat-driven debugging ("tap X, what changed?") | MCP `fmt_*` tools | `flutter-mcp` | | Script/CI one-shot commands (snapshot, exec, batch) | CLI (`flutter-mcp-toolkit` / `fmtk`) | [CLI vs MCP](/start_here/cli_vs_mcp) | | Repeatable scenario as checked-in Dart, CI exit codes | `flutter_mcp_harness` | `flutter-mcp-e2e-harness` | | Build + install + launch + process lifecycle (Android/iOS devices) | **oka** (separate repo) | this skill, oka section below | | Browser tier (web demos, WebMCP dogfood) | `CdpDriver` over CDP | `flutter-mcp-toolkit-maintain-web` | | Intent → driver routing without hardcoding transport | `IntentDriverRouter` + hints | this skill, intentcall section |
curl -fsSL https://raw.githubusercontent.com/Arenukvern/mcp_flutter/main/install.sh | bash cd my-flutter-app flutter-mcp-toolkit codegen-init # adds mcp_toolkit + emits main.dart snippet flutter-mcp-toolkit init claude-code # or: cursor | codex | cline | all flutter run --debug
The agent now inspects, taps, types, hot-reloads, and reads logs over MCP. This is the fastest path and needs nothing else on this page.
For CI or test batteries that must not depend on a chat session, add the published harness to your project and compose a scenario:
# pubspec.yaml (hosted package) dependencies: flutter_mcp_harness: ^0.1.0
final app = await MacosAppTarget(projectDir: '.', binaryPath: binary).launch();
final driver = ToolkitDriver(await app.vm());
final ref = await driver.findRef('login'); // snapshot refs are stable ids
// …perform click/type, re-snapshot, read values…
await app.stop(); // scenarios stop what they startedDesktop targets (`FlutterRunTarget`, `BinaryAppTarget`, `MacosAppTarget`, `WindowsAppTarget`, `ChromeAppTarget`), `Scenario` anatomy, and the in-repo showcase launcher are covered step-by-step in `flutter-mcp-e2e-harness` — read it before writing your first scenario.
oka (separate repo, `dart pub global activate oka`) owns **build + process lifecycle** so the toolkit can stay the observation oracle. You do **not** need oka unless you want declarative, no-Gradle device builds and owned dev sessions.
oka init # scaffolds tool/oka_pipeline.dart — project-owned targets oka build apk # no-Gradle Android pipeline, cached artifacts oka run device # install → launch → failure-signature scan oka dev # owning dev session; agents: oka dev --watch --json (JSON events + stdin control)
Consuming projects compose `oka_harness` (which depends on the published `flutter_mcp_harness`) instead of shelling out:
with the same `AppTarget` contract as desktop tiers.
already owns** (read the signature and `example/emulator_smoke.dart` in the oka repo's `packages/oka_harness/`; never launch a second owner).
server reads `.flutter_mcp/runner-session.json` and delegates reload/res
Inspect and drive a running Flutter app from your AI assistant. 📖 Docs: docs.page/arenukvern/mcp_flutter 🤝 Contribute: guide · contributors · code of conduct · security flutter-mcp-toolkit is a Dart MCP server + Flutter package for AI agents (Codex, Zed,
Use when the user needs to run GitNexus CLI commands like analyze/index a repo, check status, clean the index, generate a wiki,…
Use when the user is debugging a bug, tracing an error, or asking why something fails. Examples: \"Why is X failing?\", \"Where…
Use when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of…
Use when the user asks about GitNexus itself — available tools, how to query the knowledge graph, MCP resources, graph schema, or…
Use when the user wants to know what will break if they change something, or needs safety analysis before editing code. Examples:…
Use when the user wants to rename, extract, split, move, or restructure code safely. Examples: \"Rename this function\",…