@bdayadev/flutter-ultra-mcp 1.5.8 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,167 +1,173 @@
1
1
  ---
2
2
  name: flutter-scaffold
3
- description: Scaffolding new Flutter projects or features following the conventions detected in the existing codebase. Use when starting a fresh app, adding a feature module, or generating boilerplate that should match an existing project's structure.
3
+ description: Scaffolds new Flutter projects or features following conventions detected in the existing codebase. Use when starting a fresh app, adding a feature module, generating boilerplate that should match the project's structure, setting up state management, or configuring localization.
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
- # flutter-scaffold — Project and Feature Scaffolding
7
+ # Project and Feature Scaffolding
8
8
 
9
- ## When to use
10
-
11
- User must explicitly trigger this skill with `/flutter:scaffold`. It is not auto-invoked because it creates files. Use when the user asks to create a new Flutter project, add a feature module, scaffold a new screen, set up state management, or add boilerplate that must match the project's existing conventions.
12
-
13
- ## Prerequisites
14
-
15
- - For **project mode**: a target directory must be specified or agreed upon. Flutter SDK must be on PATH.
16
- - For **feature mode**: a Flutter project must already exist and be identifiable by `list_projects`.
17
- - The user must confirm the scaffolding plan before any files are written.
9
+ User must explicitly trigger this skill with `/flutter:scaffold`. It creates files and is not auto-invoked.
18
10
 
19
11
  ## Mode detection
20
12
 
21
- Determine which mode to use from the user's request:
22
-
23
- | User asks | Mode |
24
- | --------------------------------------------------------- | ------------------------------------ |
25
- | "create a new Flutter app", "new project" | Project mode |
26
- | "add a feature", "new screen", "scaffold [X] page/module" | Feature mode |
27
- | "set up BLoC / Riverpod / Provider" | State management mode |
28
- | "add a new route / page" | Screen mode (subset of feature mode) |
13
+ | User asks | Mode |
14
+ |-----------|------|
15
+ | "create a new Flutter app" | Project mode |
16
+ | "add a feature", "new screen" | Feature mode |
17
+ | "set up BLoC / Riverpod" | State management mode |
18
+ | "add localization" | L10n mode |
29
19
 
30
- ---
31
-
32
- ## Project mode — new Flutter app
20
+ ## Project mode
33
21
 
34
- 1. Confirm with the user: project name, org (reverse domain), target directory, and Flutter channel (stable/beta).
35
- 2. Run via shell (Bash tool):
36
- ```bash
37
- flutter create --org com.example --project-name my_app ./my_app
38
- ```
39
- 3. Call `mcp__plugin_flutter_flutter-ultra-build__pub_get` on the new project to fetch dependencies.
40
- 4. Call `mcp__plugin_flutter_flutter-ultra-build__analyze` to confirm a clean baseline.
41
- 5. Ask the user if they want state management, routing, or localization scaffolded next — then proceed to the relevant feature mode sections below.
42
-
43
- ---
22
+ 1. Confirm: project name, org, target directory, Flutter channel.
23
+ 2. Create via shell: `flutter create --org com.example --project-name my_app ./my_app`.
24
+ 3. `mcp__plugin_flutter_flutter-ultra-build__pub_get` to fetch dependencies.
25
+ 4. `mcp__plugin_flutter_flutter-ultra-build__analyze` to confirm clean baseline.
26
+ 5. `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` to verify the environment.
27
+ 6. Ask if state management, routing, or l10n scaffolding is needed.
44
28
 
45
- ## Feature mode — detect existing conventions first
29
+ ## Feature mode — detect conventions first
46
30
 
47
- Before creating any files, call `mcp__plugin_flutter_flutter-ultra-build__project_info` on the target project to read:
31
+ Call `mcp__plugin_flutter_flutter-ultra-build__project_info` to read project structure and dependencies.
48
32
 
49
- - Project root and `lib/` structure
50
- - Existing dependencies (from `pubspec.yaml`)
33
+ Detect the project's state management from `pubspec.yaml`:
51
34
 
52
- Then detect the project's conventions by reading `pubspec.yaml` dependencies:
35
+ | Dependency | Pattern |
36
+ |-----------|---------|
37
+ | `flutter_bloc` / `bloc` | BLoC |
38
+ | `riverpod` / `flutter_riverpod` | Riverpod |
39
+ | `provider` | Provider |
40
+ | None | Ask the user |
53
41
 
54
- | Detected dep | State management pattern |
55
- | ------------------------------- | ------------------------- |
56
- | `flutter_bloc` / `bloc` | BLoC pattern |
57
- | `riverpod` / `flutter_riverpod` | Riverpod |
58
- | `provider` | Provider |
59
- | None of the above | Ask the user which to use |
42
+ Detect routing: `go_router` = GoRouter, `auto_route` = AutoRoute, none = Navigator 1.0.
60
43
 
61
- | Detected dep | Routing pattern |
62
- | ------------ | ------------------------ |
63
- | `go_router` | GoRouter |
64
- | `auto_route` | AutoRoute |
65
- | None | Navigator 1.0 (push/pop) |
44
+ Announce detected conventions before scaffolding.
66
45
 
67
- Announce detected conventions to the user before scaffolding.
68
-
69
- ---
70
-
71
- ## Screen scaffolding (new route/page)
72
-
73
- For each new screen, create the following files following the detected pattern:
74
-
75
- ### File structure (BLoC + GoRouter example for `InvoiceList`):
46
+ ### Screen scaffolding (BLoC + GoRouter example)
76
47
 
77
48
  ```
78
- lib/
79
- features/
80
- invoice_list/
81
- bloc/
82
- invoice_list_bloc.dart # BLoC class
83
- invoice_list_event.dart # events sealed class
84
- invoice_list_state.dart # states sealed class
85
- view/
86
- invoice_list_page.dart # BlocProvider wrapper
87
- invoice_list_view.dart # stateless widget body
88
- invoice_list.dart # barrel export
89
- test/
90
- features/
91
- invoice_list/
92
- bloc/
93
- invoice_list_bloc_test.dart
49
+ lib/features/invoice_list/
50
+ bloc/
51
+ invoice_list_bloc.dart
52
+ invoice_list_event.dart
53
+ invoice_list_state.dart
54
+ view/
55
+ invoice_list_page.dart
56
+ invoice_list_view.dart
57
+ invoice_list.dart # barrel export
58
+ test/features/invoice_list/
59
+ bloc/
60
+ invoice_list_bloc_test.dart
94
61
  ```
95
62
 
96
- For **Riverpod**: replace `bloc/` with `provider/` containing a `StateNotifier` or `AsyncNotifier`.
97
- For **Provider**: replace `bloc/` with `provider/` containing a `ChangeNotifier`.
98
-
99
- ### Route registration (GoRouter):
63
+ ### After creating files
100
64
 
101
- Add the new route to the router config file (detect by searching for `GoRouter(` in `lib/`):
65
+ 1. `mcp__plugin_flutter_flutter-ultra-build__format` to normalize formatting.
66
+ 2. `mcp__plugin_flutter_flutter-ultra-build__analyze` to confirm clean compilation.
67
+ 3. If codegen is needed (Riverpod generators, freezed): `mcp__plugin_flutter_flutter-ultra-build__start_build_runner_build` -> `mcp__plugin_flutter_flutter-ultra-build__poll_build_runner_job` -> `mcp__plugin_flutter_flutter-ultra-build__get_build_runner_result`.
102
68
 
103
- ```dart
104
- GoRoute(
105
- path: '/invoice-list',
106
- name: 'invoiceList',
107
- builder: (context, state) => const InvoiceListPage(),
108
- ),
109
- ```
110
-
111
- ### After creating files:
112
-
113
- 1. Call `mcp__plugin_flutter_flutter-ultra-build__format` on the new files to normalize formatting.
114
- 2. Call `mcp__plugin_flutter_flutter-ultra-build__analyze` — fix any errors before reporting done.
115
- 3. Do **not** call `pub_get` unless new packages were added.
116
-
117
- ---
118
-
119
- ## State management setup (first-time)
120
-
121
- When the project has no state management and the user wants to add one:
69
+ ## State management setup
122
70
 
123
71
  **BLoC:**
124
72
 
125
- 1. Call `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_bloc bloc equatable`.
126
- 2. Call `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
127
- 3. Scaffold the first BLoC as described in the screen section above.
73
+ 1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_bloc bloc equatable`.
74
+ 2. `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
128
75
 
129
76
  **Riverpod:**
130
77
 
131
- 1. Call `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_riverpod riverpod_annotation` and dev deps `riverpod_generator build_runner`.
132
- 2. Call `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
133
- 3. Wrap `main.dart`'s `runApp` with `ProviderScope`.
134
- 4. Call `mcp__plugin_flutter_flutter-ultra-build__start_build_runner_build` → `poll_build_runner_job` → `get_build_runner_result` to generate initial code.
78
+ 1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_riverpod riverpod_annotation` + dev deps `riverpod_generator build_runner`.
79
+ 2. `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
80
+ 3. Run build_runner to generate initial code.
135
81
 
136
82
  **Provider:**
137
83
 
138
- 1. Call `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `provider`.
139
- 2. Call `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
140
-
141
- ---
142
-
143
- ## Localization scaffolding
84
+ 1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `provider`.
85
+ 2. `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
144
86
 
145
- When the user asks to add l10n:
87
+ ## Localization setup
146
88
 
147
- 1. Call `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_localizations` (SDK package).
89
+ 1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_localizations` (SDK package).
148
90
  2. Create `lib/l10n/app_en.arb` with a minimal key set.
149
91
  3. Add `generate: true` to `pubspec.yaml` under `flutter:`.
150
- 4. Call `mcp__plugin_flutter_flutter-ultra-build__flutter_gen_l10n` to generate the `AppLocalizations` class.
151
- 5. Add `localizationsDelegates` and `supportedLocales` to the `MaterialApp`.
152
-
153
- ---
92
+ 4. `mcp__plugin_flutter_flutter-ultra-build__flutter_gen_l10n` to generate the `AppLocalizations` class.
93
+ 5. Add `localizationsDelegates` and `supportedLocales` to `MaterialApp`.
94
+ 6. Verify: `mcp__plugin_flutter_flutter-ultra-build__list_missing_translations` to check all locales have translations.
95
+
96
+ ## Asset management
97
+
98
+ When the scaffold includes images or other assets:
99
+
100
+ 1. `mcp__plugin_flutter_flutter-ultra-build__add_asset` to register assets in `pubspec.yaml`.
101
+ 2. `mcp__plugin_flutter_flutter-ultra-build__validate_assets` to confirm all referenced assets exist on disk.
102
+ 3. `mcp__plugin_flutter_flutter-ultra-build__list_orphan_assets` to find assets on disk not referenced in code.
103
+
104
+ ## Web configuration
105
+
106
+ For web-targeted projects:
107
+
108
+ 1. `mcp__plugin_flutter_flutter-ultra-build__validate_web_redirect` to check `web/index.html` base href and redirect handling.
109
+ 2. `mcp__plugin_flutter_flutter-ultra-build__validate_canvaskit_vs_html_consistency` to verify renderer consistency.
110
+ 3. `mcp__plugin_flutter_flutter-ultra-build__flush_service_worker` when changing web config during development.
111
+
112
+ ## Signing verification
113
+
114
+ After scaffolding a release-ready project:
115
+
116
+ 1. `mcp__plugin_flutter_flutter-ultra-build__verify_android_signing` to check keystore and signing config.
117
+ 2. `mcp__plugin_flutter_flutter-ultra-build__verify_ios_signing` to check provisioning profiles.
118
+ 3. `mcp__plugin_flutter_flutter-ultra-build__set_bundle_id` to configure the app's bundle identifier.
119
+
120
+ ## Safety rules
121
+
122
+ - Always announce the file list before writing. Wait for user confirmation if more than 3 files.
123
+ - Never overwrite existing files without explicit confirmation.
124
+ - Match the existing naming convention (`snake_case` vs `camelCase`).
125
+ - Run `analyze` and surface any errors before reporting done.
126
+
127
+ ## Tool reference
128
+
129
+ | Action | Tool |
130
+ |--------|------|
131
+ | Project info | `mcp__plugin_flutter_flutter-ultra-build__project_info` |
132
+ | List projects | `mcp__plugin_flutter_flutter-ultra-build__list_projects` |
133
+ | Add dependency | `mcp__plugin_flutter_flutter-ultra-build__pub_add` |
134
+ | Remove dependency | `mcp__plugin_flutter_flutter-ultra-build__pub_remove` |
135
+ | Resolve deps | `mcp__plugin_flutter_flutter-ultra-build__pub_get` |
136
+ | Search pub.dev | `mcp__plugin_flutter_flutter-ultra-build__pub_dev_search` |
137
+ | Format code | `mcp__plugin_flutter_flutter-ultra-build__format` |
138
+ | Analyze | `mcp__plugin_flutter_flutter-ultra-build__analyze` |
139
+ | Auto-fix | `mcp__plugin_flutter_flutter-ultra-build__fix` |
140
+ | Preview fixes | `mcp__plugin_flutter_flutter-ultra-build__fix_preview` |
141
+ | Build runner | `mcp__plugin_flutter_flutter-ultra-build__start_build_runner_build` |
142
+ | Gen l10n | `mcp__plugin_flutter_flutter-ultra-build__flutter_gen_l10n` |
143
+ | Add asset | `mcp__plugin_flutter_flutter-ultra-build__add_asset` |
144
+ | Validate assets | `mcp__plugin_flutter_flutter-ultra-build__validate_assets` |
145
+ | Orphan assets | `mcp__plugin_flutter_flutter-ultra-build__list_orphan_assets` |
146
+ | Web redirect | `mcp__plugin_flutter_flutter-ultra-build__validate_web_redirect` |
147
+ | CanvasKit check | `mcp__plugin_flutter_flutter-ultra-build__validate_canvaskit_vs_html_consistency` |
148
+ | Flush SW | `mcp__plugin_flutter_flutter-ultra-build__flush_service_worker` |
149
+ | Android signing | `mcp__plugin_flutter_flutter-ultra-build__verify_android_signing` |
150
+ | iOS signing | `mcp__plugin_flutter_flutter-ultra-build__verify_ios_signing` |
151
+ | Set bundle ID | `mcp__plugin_flutter_flutter-ultra-build__set_bundle_id` |
152
+ | Flutter doctor | `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` |
153
+ | Missing translations | `mcp__plugin_flutter_flutter-ultra-build__list_missing_translations` |
154
+
155
+ ## Example
154
156
 
155
- ## Confirmation and safety rules
156
-
157
- - **Always announce the file list** that will be created before writing. Wait for user confirmation if the list is more than 3 files.
158
- - **Never overwrite existing files** without explicit user confirmation.
159
- - **Match the existing naming convention**: if existing files use `snake_case` feature directories, continue that pattern; if they use `camelCase`, match it.
160
- - After scaffolding, run `analyze` and surface any errors — do not report done if there are errors.
157
+ ```
158
+ User: "/flutter:scaffold add an InvoiceList feature to the Invora app"
159
+
160
+ 1. project_info -> detected: BLoC + GoRouter
161
+ 2. Announce plan: 7 files to create (bloc, events, state, page, view, barrel, test)
162
+ 3. [User confirms]
163
+ 4. Create files following BLoC + GoRouter pattern
164
+ 5. Add GoRoute entry to router config
165
+ 6. format -> normalized
166
+ 7. analyze -> 0 errors
167
+ -> "InvoiceList feature scaffolded: 7 files created, 1 file modified."
168
+ ```
161
169
 
162
170
  ## See also
163
171
 
164
- - Sibling skill: `flutter-test` for writing tests after scaffolding
165
- - Sibling skill: `flutter-debug` for inspecting live state in scaffolded features
166
- - `mcp__plugin_flutter_flutter-ultra-build__project_info` — reads project structure and dependencies
167
- - `mcp__plugin_flutter_flutter-ultra-build__analyze` — validates scaffolded code compiles clean
172
+ - `flutter-test` write and run tests for scaffolded features
173
+ - `flutter-setup` initial flutter-ultra plugin setup
@@ -1,45 +1,30 @@
1
1
  ---
2
2
  name: flutter-setup
3
- description: One-command setup of the flutter-ultra-mcp plugin in an existing Flutter codebase. Use when the user wants to enable flutter-ultra for the first time, or when re-running after a clean install. Idempotent safe to run again if a previous attempt was partial.
3
+ description: One-command setup of the flutter-ultra-mcp plugin in an existing Flutter codebase. Use when the user wants to enable flutter-ultra for the first time, re-run after a clean install, or verify an existing setup is complete and working. Idempotent and safe to re-run.
4
4
  ---
5
5
 
6
- # flutter-setup — One-Command Plugin Setup
6
+ # Plugin Setup
7
7
 
8
- ## When to use
9
-
10
- Use this skill when the user wants to wire up the flutter-ultra-mcp plugin into a Flutter project for the first time, or when verifying that a previously attempted setup is complete and working. The expected end state is: `UltraFlutterBinding` initialized in the app entry point, `ultra_flutter` in `dev_dependencies`, patrol fork overridden in `pubspec_overrides.yaml`, and a smoke launch confirming the VM Service attaches correctly.
11
-
12
- ## Prerequisites
13
-
14
- - Flutter SDK installed and on PATH (`flutter --version` must succeed).
15
- - Node.js ≥ 18 installed (required for the MCP servers).
16
- - The target project has a `pubspec.yaml` (i.e., it is a Flutter app, not a pure Dart package).
17
- - The user is working from the project root (or has provided an absolute path to it).
8
+ Expected end state: `UltraFlutterBinding` initialized in the app entry point, `ultra_flutter` in `dev_dependencies`, patrol fork overridden if needed, and a smoke launch confirming the VM Service attaches correctly.
18
9
 
19
10
  ## Workflow
20
11
 
21
12
  ### 1. Verify the environment
22
13
 
23
- - Call `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` with the project root.
24
- - If any `[✗]` entries appear for Flutter SDK, connected devices, or Dart, stop and surface the doctor output to the user. Do not continue until the environment is healthy.
25
- - Call `mcp__plugin_flutter_flutter-ultra-build__project_info` with the project root.
26
- - Note: `entryPoints` (usually `lib/main.dart` or `lib/bootstrap.dart`), `hasSentry` (affects binding pattern), `hasPatrol` (determines whether to configure the patrol fork override).
14
+ - `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` stop if Flutter SDK, devices, or Dart show `[x]`.
15
+ - `mcp__plugin_flutter_flutter-ultra-build__project_info` note entry points, `hasSentry`, `hasPatrol`, `hasUltraBinding`.
16
+ - `mcp__plugin_flutter_flutter-ultra-runtime__list_devices` verify at least one target device is available.
17
+ - `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` discover required dart-defines for launch.
18
+ - `mcp__plugin_flutter_flutter-ultra-build__list_flavors` — check for flavor configuration.
27
19
 
28
20
  ### 2. Add `ultra_flutter` to dev_dependencies
29
21
 
30
- - Call `mcp__plugin_flutter_flutter-ultra-build__pub_add` with:
31
- - `package`: `ultra_flutter`
32
- - `dev`: `true`
33
- - If `pub_add` fails because `ultra_flutter` is not on pub.dev (it is a local plugin bundled with the MCP server), use `pubspec_overrides_set` to point to the bundled path instead:
34
- - Call `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` with `package: ultra_flutter` and `path` set to the absolute path of the bundled package (ask the user or read from plugin config if available).
35
- - Then add the dependency manually by editing `pubspec.yaml`: add `ultra_flutter: any` under `dev_dependencies`.
36
- - Call `mcp__plugin_flutter_flutter-ultra-build__pub_get` to resolve.
22
+ - `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `package: ultra_flutter`, `dev: true`.
23
+ - If it fails (not on pub.dev), use `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` to point to the bundled path, add `ultra_flutter: any` under `dev_dependencies` manually, then `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
37
24
 
38
25
  ### 3. Patch the app entry point
39
26
 
40
- Read the primary entry point file identified in step 1. Apply the following pattern:
41
-
42
- **Without Sentry** — wrap the existing `runApp` call:
27
+ **Without Sentry:**
43
28
 
44
29
  ```dart
45
30
  import 'package:flutter/foundation.dart';
@@ -53,98 +38,110 @@ void main() {
53
38
  }
54
39
  ```
55
40
 
56
- **With Sentry** (when `hasSentry: true`) — Sentry installs its own binding; use the direct mixin pattern:
41
+ **With Sentry** (custom binding mixin):
57
42
 
58
43
  ```dart
59
- import 'package:flutter/foundation.dart';
60
44
  import 'package:ultra_flutter/ultra_flutter.dart';
61
45
 
62
- // In your custom binding class:
63
46
  class AppBinding extends WidgetsFlutterBinding with UltraFlutterBindingMixin {
64
47
  static AppBinding ensureInitialized() =>
65
48
  WidgetsFlutterBinding.ensureInitialized() as AppBinding;
66
49
  }
67
-
68
- void main() {
69
- AppBinding.ensureInitialized();
70
- // ... Sentry.init wrapping runApp as before
71
- }
72
50
  ```
73
51
 
74
- Edit the file with the appropriate pattern. Only add the import and the `ensureInitialized` call do not reorganize the existing code.
75
-
76
- ### 4. Configure the patrol fork override (if patrol detected)
52
+ Skip if `project_info` reported `hasUltraBinding: true`.
77
53
 
78
- When `project_info` reported `hasPatrol: true`:
54
+ ### 4. Configure patrol fork override (if patrol detected)
79
55
 
80
- - Call `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` to check if a `patrol` override already exists.
81
- - If not present, call `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` with:
82
- - `package`: `patrol`
83
- - `path`: the vendored patrol fork path bundled with flutter-ultra-mcp (located at `<plugin-root>/packages/flutter-ultra-patrol/vendor/patrol` — ask the user for `<plugin-root>` if not available in context).
84
- - Call `mcp__plugin_flutter_flutter-ultra-build__pub_get` to resolve the override.
56
+ - `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` check if `patrol` override exists.
57
+ - If not: `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` with `package: patrol` and the vendored fork path.
58
+ - `mcp__plugin_flutter_flutter-ultra-build__pub_get` to resolve.
85
59
 
86
- ### 5. Run static analysis to verify the setup
60
+ ### 5. Static analysis
87
61
 
88
- - Call `mcp__plugin_flutter_flutter-ultra-build__pub_get` (ensure lock file is current after all edits).
89
- - Call `mcp__plugin_flutter_flutter-ultra-build__analyze` with the project root.
90
- - If any errors reference `ultra_flutter` or `UltraFlutterBinding`, the import or mixin was not applied correctly — re-read the entry point and fix.
91
- - Warnings about `// ignore: implementation_imports` on the Sentry path are expected; surface them to the user as informational only.
62
+ - `mcp__plugin_flutter_flutter-ultra-build__pub_get` ensure lock file is current.
63
+ - `mcp__plugin_flutter_flutter-ultra-build__analyze` fix any errors referencing `ultra_flutter` or `UltraFlutterBinding`.
64
+ - If analysis finds other pre-existing issues: `mcp__plugin_flutter_flutter-ultra-build__fix` to auto-apply safe lint fixes.
92
65
 
93
66
  ### 6. Smoke test: launch, attach, screenshot
94
67
 
95
- - Call `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` with the project root and target device (default: `chrome` for web projects, `linux`/`macos`/`windows` for desktop, first connected device for mobile).
96
- - Poll `mcp__plugin_flutter_flutter-ultra-runtime__poll_launch_app` until status is `ready` or `error`.
97
- - If `error`, surface the launch log to the user and stop.
98
- - Call `mcp__plugin_flutter_flutter-ultra-runtime__attach` with the returned `sessionId`.
99
- - Call `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` — save to `.omc/research/setup-smoke-<YYYY-MM-DD>.png`.
100
- - Call `mcp__plugin_flutter_flutter-ultra-runtime__detach`.
101
- - Call `mcp__plugin_flutter_flutter-ultra-runtime__stop_app` with the `sessionId`.
102
-
103
- If screenshot succeeds and the image is not blank, the setup is confirmed working.
104
-
105
- ## Handling edge cases
106
-
107
- - **`UltraFlutterBinding.ensureInitialized()` already present**: `project_info` reports `hasUltraBinding: true`. Skip step 3 but still run steps 5–6 to confirm working state.
108
- - **Multiple entry points** (e.g. `main_dev.dart`, `main_prod.dart`): patch all of them with the same binding initialization. Confirm with the user if the list is longer than 3 files before editing.
109
- - **Monorepo / workspace**: `pubspec_overrides.yaml` must exist in each app package that needs ultra. Run steps 2–6 for each app package separately.
110
- - **pub_get fails after overrides**: common cause is a mismatched `patrol` version in `pubspec.yaml` vs. the fork. Call `mcp__plugin_flutter_flutter-ultra-build__pub_outdated` to inspect version constraints, then relax the constraint in `pubspec.yaml` to `any` for the overridden package.
111
- - **analyze reports `ultra_flutter` not found**: the `pubspec_overrides.yaml` path is wrong. Call `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` to verify the resolved path, then correct it.
112
- - **launch_app times out**: the app may require dart-defines (e.g. OIDC client IDs). Call `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` to discover required defines, then relaunch with them.
68
+ - `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` with the project root and target device (default: `chrome` for web, platform default for desktop, first connected device for mobile).
69
+ - Pass `importLaunchJsonConfig` if `.vscode/launch.json` has dart-defines.
70
+ - `mcp__plugin_flutter_flutter-ultra-runtime__poll_launch_app` until status is `attached` or `failed`.
71
+ - `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` to capture the running app.
72
+ - `mcp__plugin_flutter_flutter-ultra-runtime__detach`.
73
+ - `mcp__plugin_flutter_flutter-ultra-runtime__stop_app`.
74
+
75
+ If screenshot succeeds and is not blank, setup is confirmed working.
76
+
77
+ ### 7. Build verification (optional, when requested)
78
+
79
+ Verify the app builds for all target platforms using the build server's platform-specific start/poll/get/cancel tool sets. Each platform follows the same pattern: `start_build_{platform}` -> `poll_build_{platform}_job` -> `get_build_{platform}_result`. Supported platforms: apk, appbundle, ipa (macOS only), web, windows, macos, linux.
80
+
81
+ ## Edge cases
82
+
83
+ - **`UltraFlutterBinding.ensureInitialized()` already present**: skip step 3, run steps 5-6 to confirm.
84
+ - **Multiple entry points** (`main_dev.dart`, `main_prod.dart`): patch all of them. Confirm with the user if more than 3 files.
85
+ - **Monorepo / workspace**: run steps 2-6 for each app package separately.
86
+ - **pub_get fails after overrides**: `mcp__plugin_flutter_flutter-ultra-build__pub_outdated` to inspect version constraints, then relax to `any`.
87
+ - **analyze reports `ultra_flutter` not found**: `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` to verify the resolved path.
88
+ - **launch_app times out**: check `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` for required defines, relaunch with them.
89
+ - **Pub cache corruption**: `mcp__plugin_flutter_flutter-ultra-build__pub_cache_repair` to rebuild the cache, then retry pub_get.
90
+ - **Stale build artifacts**: `mcp__plugin_flutter_flutter-ultra-build__flutter_clean` to clear, then rebuild.
91
+
92
+ ## Tool reference
93
+
94
+ | Action | Tool |
95
+ |--------|------|
96
+ | Flutter doctor | `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` |
97
+ | Project info | `mcp__plugin_flutter_flutter-ultra-build__project_info` |
98
+ | List devices | `mcp__plugin_flutter_flutter-ultra-runtime__list_devices` |
99
+ | List dart defines | `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` |
100
+ | List flavors | `mcp__plugin_flutter_flutter-ultra-build__list_flavors` |
101
+ | Add dependency | `mcp__plugin_flutter_flutter-ultra-build__pub_add` |
102
+ | Resolve deps | `mcp__plugin_flutter_flutter-ultra-build__pub_get` |
103
+ | Overrides set | `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` |
104
+ | Overrides list | `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` |
105
+ | Analyze | `mcp__plugin_flutter_flutter-ultra-build__analyze` |
106
+ | Auto-fix | `mcp__plugin_flutter_flutter-ultra-build__fix` |
107
+ | Flutter clean | `mcp__plugin_flutter_flutter-ultra-build__flutter_clean` |
108
+ | Pub cache repair | `mcp__plugin_flutter_flutter-ultra-build__pub_cache_repair` |
109
+ | Pub outdated | `mcp__plugin_flutter_flutter-ultra-build__pub_outdated` |
110
+ | Launch app | `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` |
111
+ | Poll launch | `mcp__plugin_flutter_flutter-ultra-runtime__poll_launch_app` |
112
+ | Attach | `mcp__plugin_flutter_flutter-ultra-runtime__attach` |
113
+ | Screenshot | `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` |
114
+ | Detach | `mcp__plugin_flutter_flutter-ultra-runtime__detach` |
115
+ | Stop app | `mcp__plugin_flutter_flutter-ultra-runtime__stop_app` |
116
+ | Build (any platform) | `start_build_{platform}` via the build server |
113
117
 
114
118
  ## Output format
115
119
 
116
- After the workflow completes, produce:
117
-
118
120
  1. **Status**: `setup complete` or `setup failed at step N`.
119
- 2. **Changes made**: bullet list of files edited (entry points, `pubspec.yaml`, `pubspec_overrides.yaml`).
120
- 3. **Smoke test result**: path to the saved screenshot, or the error message if launch failed.
121
- 4. **Next steps**: suggest running `/flutter-tour` to capture a visual baseline, or `/flutter-debug` if the smoke test revealed a runtime error.
121
+ 2. **Changes made**: bullet list of files edited.
122
+ 3. **Smoke test result**: screenshot path or error message.
123
+ 4. **Next steps**: suggest `/flutter:tour` for a visual baseline or `/flutter:debug` if the smoke test failed.
122
124
 
123
125
  ## Example
124
126
 
125
127
  ```
126
- User: "Set up flutter-ultra on the Invora Flutter app."
127
-
128
- 1. flutter_doctor all checks pass
129
- 2. project_info entryPoints: ["lib/bootstrap.dart"], hasSentry: true, hasPatrol: true
130
- 3. pub_add ultra_flutter dev:true → added to pubspec.yaml
131
- 4. Edit lib/bootstrap.dart add UltraFlutterBindingMixin to AppBinding class
132
- 5. pubspec_overrides_set patrol path: /home/user/.claude/plugins/flutter-ultra-mcp/vendor/patrol
133
- 6. pub_get resolved
134
- 7. analyze 0 errors, 1 warning (ignore: implementation_imports — expected)
135
- 8. launch_app device:chrome sessionId: "flutter-1"
136
- 9. attach(sessionId: "flutter-1")
137
- 10. screenshot .omc/research/setup-smoke-2026-05-19.png (dashboard visible)
138
- 11. detach + stop_app
139
-
140
- Setup complete. 3 files changed. Smoke screenshot saved.
141
- Next: run /flutter-tour to capture a full visual baseline.
128
+ User: "Set up flutter-ultra on my app."
129
+
130
+ 1. flutter_doctor -> all checks pass
131
+ 2. project_info -> entryPoints: ["lib/main.dart"], hasSentry: false, hasPatrol: false
132
+ 3. list_devices -> chrome, windows
133
+ 4. pub_add ultra_flutter dev:true -> added
134
+ 5. Edit lib/main.dart -> add UltraFlutterBinding.ensureInitialized()
135
+ 6. pub_get -> resolved
136
+ 7. analyze -> 0 errors
137
+ 8. launch_app(device: "chrome") -> poll -> attached
138
+ 9. screenshot -> app visible
139
+ 10. detach + stop_app
140
+ -> "Setup complete. 2 files changed. Smoke screenshot saved."
142
141
  ```
143
142
 
144
143
  ## See also
145
144
 
146
- - Sibling skill: `flutter-tour` — visual screenshot tour after setup
147
- - Sibling skill: `flutter-debug` — triage if the smoke launch reveals a runtime error
148
- - `mcp__plugin_flutter_flutter-ultra-build__project_info` — entry point and feature detection
149
- - `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` — launch app for smoke test
150
- - `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` — configure patrol fork override
145
+ - `flutter-tour` — visual screenshot tour after setup
146
+ - `flutter-debug` — triage if the smoke launch reveals a runtime error
147
+ - `flutter-devtools` — wire up the DevTools panel for live inspection