Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/fluttersdk/ainpx agentmods add skills/fluttersdk/ai/fluttersdk-artisanWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/fluttersdk/ai/fluttersdk-artisan)<a href="https://agentmods.dev/skills/fluttersdk/ai/fluttersdk-artisan"><img src="https://agentmods.dev/badge/skills/fluttersdk/ai/fluttersdk-artisan.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00249 | $0.05621 |
| Opus 5 | $0.00125 | $0.02811 |
| Sonnet 5 | $0.00050 | $0.01124 |
| Haiku 4.5 | $0.00025 | $0.00562 |
Grade C, and why
fluttersdk-artisan scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
if it does not, `rm -rf .artisan/.fsa.lock` + retry. How it starts
The opening of the file, as written. The whole thing — 323 lines — stays where its author put it; the contents beside it link to each section on GitHub.
fluttersdk_artisan
CLI framework and stdio MCP server for Flutter dev loops, designed for LLM
agents. The running app exposes a process + VM Service surface plus an MCP
server; the agent calls artisan_* tools (or ./bin/fsa <cmd> from a
shell) to start the app, hot-reload it, read its logs, evaluate Dart
expressions against the running isolate, and discover what other plugin
tools (dusk_*, telescope_*) are available, all without leaving the
conversation.
This skill assumes the host app already has artisan installed
(bin/dispatcher.dart present, lib/app/_plugins.g.dart non-empty,
.mcp.json wired). If not, run dart pub add fluttersdk_artisan followed
by dart run fluttersdk_artisan install once from the app root, then
./bin/fsa mcp:install to write the MCP entry, then reconnect the client.
1. Core Laws
-
Two MCP boot paths produce two different tool catalogs. The substrate entry
dart run fluttersdk_artisan:mcp(viabin/mcp.dartof the artisan package) forcesdelegateToConsumer: falseand surfaces ONLY the 10 substrate tools (artisan_start,artisan_stop, ...,artisan_tinker). The consumer dispatcher entry./bin/fsa mcp:serve(viabin/dispatcher.dartof the host app) loadslib/app/_plugins.g.dartand surfaces substrate tools PLUS every plugin'smcpTools()(dusk_*fromfluttersdk_dusk,telescope_*fromfluttersdk_telescope, etc.). Inspect.mcp.jsonto see which path is wired;./bin/fsa mcp:serveis the dev default. Diagnose a missing plugin namespace by callingartisan_list:dusk:/telescope:groups appear only when the dispatcher wrapper loaded the provider. -
State lives in a PER-PROJECT session directory, and it is the single source of truth for connectedness.
artisan_startwrites~/.artisan/sessions/<hash>/state.jsonatomically (pid +vmServiceUri- FIFO path + device + ports), keyed by the project root, with the log
and the FIFO beside it. Two projects can be driven at once and neither
overwrites the other.
~/.artisan/state.jsonstill exists as a pointer to whichever session started last, read as a fallback and used by the hand-written recovery recipe, but it is NOT where your session lives. Every connected tool reads the session on dispatch. When absent, the soft-fail contract holds:artisan_statusreturns{"running": false},artisan_stopno-ops (exit 0),artisan_tinkerand any plugin tool that needs the VM Service returnisError: truewith an actionable "Runartisan startfirst" message. The MCP server stays online either way; failed calls do not kill the session.
- FIFO path + device + ports), keyed by the project root, with the log
and the FIFO beside it. Two projects can be driven at once and neither
overwrites the other.
What ships with it
5 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago Changed · +7 lines · +11 tokens per session 002bafbe9ee2
- 6d ago First seen · 316 lines · 238 tokens per session scan C 1ab1953f2b58
fluttersdk-artisan is a skill published in the GitHub repository fluttersdk/ai (2 stars, last pushed 3d ago), licensed MIT. It adds 249 tokens to every session and 5,621 once invoked, about $0.0012 per session on Opus 5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
flutter-internationalization
Add, fix, audit, and maintain Flutter internationalization with gen-l10n, ARB files, AppLocalizations, flutterlocalizations, intl formatting, plural/select messages, RTL support, locale-specific number/date formatting, and localization build errors. Use when asked to add l10n or i18n, translate Flutter UI text…
flutter-duit-bdui
Integrate, fix, review, migrate, test, or debug Duit / flutterduit backend-driven UI in Flutter applications. Use when a task mentions DUIT, flutterduit, backend-driven UI, BDUI, server-driven UI, XDriver, DuitViewHost, DuitRegistry, HTTP or WebSocket transports, custom Duit widgets, components, capability delegates…
flutter-animations
Add, fix, refactor, debug, test, or explain Flutter animations and motion effects. Use when working with implicit animations such as AnimatedContainer, AnimatedOpacity, AnimatedSwitcher, and TweenAnimationBuilder; explicit animations using AnimationController, Tween, CurvedAnimation, AnimatedWidget, AnimatedBuilder…
flutter-drift
Implement, fix, review, migrate, test, or debug Drift persistence in Flutter apps using SQLite, driftflutter, type-safe Dart queries, generated tables, StreamBuilder or Riverpod StreamProvider UI, write operations, transactions, schema migrations, web assets, isolate sharing, and local database testing. Use when a…
flutter-navigation
Implement, fix, refactor, review, migrate, or validate Flutter navigation and routing. Use when working with Navigator, MaterialPageRoute, Router API, gorouter, route guards, redirects, ShellRoute or StatefulShellRoute, nested Navigators, passing and returning route data, deep links, Android App Links, iOS Universal…
flutter-networking
Implement, fix, debug, review, or refactor Flutter networking code for HTTP/REST APIs, WebSocket realtime flows, authentication and token refresh, request headers, timeouts, retries, JSON parsing, caching, background isolates, repositories, services, and adaptation to existing http, Dio, Retrofit, Chopper, or custom…