{
  "markdown": "<div align=\"center\">\n\n# 🦋 Flutter Agent Skills\n\n**Production-grade, reusable Flutter engineering skills for AI coding agents.**\n\nArchitecture · Riverpod 3.x state · testing · persistence · i18n/RTL · accessibility · navigation · performance · shipping & monetization — and the codegen/CI/migration runbooks that keep them honest.\n\n[**Browse the catalog →**](https://zakaria.dev/Flutter-Skills/) · [Agent Skills standard](https://agentskills.io) · [Contributing](CONTRIBUTING.md)\n\n`40 skills` · `Riverpod 3.x` · `Material 3` · `works with 70+ agents` · `MIT`\n\n</div>\n\n---\n\nEach skill is a short, high-signal playbook that an agent loads **only when your task matches it**,\nthen follows — the rules, the anti-patterns, and a definition of done. The rules are applied\nconsistently across sessions, projects, and agents without bloating context.\n\nBuilt on the [**Agent Skills**](https://agentskills.io) open standard, so the same files work in\n**Claude Code, Cursor, Codex, Copilot, Gemini CLI, Windsurf, Cline, OpenCode** and 70+ more — not\nonly Claude Code.\n\nThese skills were distilled from more than ten production Flutter apps' private skill libraries\n(~120 skills), merged into one best-of-breed set, reconciled to a single canonical stack, and\nadversarially reviewed for API correctness — then extended with the shipping, monetization and\ndeterminism lessons from a multi-app studio that ships to the App Store. **Design-token specifics** (exact colours, radii,\nshadows, named design systems) and **app-domain skills** were intentionally left out — this is the\ngeneral foundation, not any one app's look or domain.\n\n## Quick start\n\n```bash\n# Any agent (installs into 70+ tools via the open skills CLI)\nnpx skills add zakariaf/Flutter-Skills            # all skills\nnpx skills add zakariaf/Flutter-Skills --list     # browse first\nnpx skills add zakariaf/Flutter-Skills --skill flutter-architecture\n```\n\nPrefer a native integration? See [How to use these skills](#how-to-use-these-skills) below.\n\n## Design principles\n\n- **Riverpod 3.x first, but not Riverpod-only.** State/DI skills lead with a\n  state-management-*agnostic* core, give the Riverpod 3.x \"how\", and close with a **Provider /\n  `ChangeNotifier` appendix** so they still serve an app on Flutter's official-guide stack.\n- **Single-package first, workspace-aware.** Everything works for a plain single-package app;\n  monorepo / pub-workspace / Melos guidance is fenced under *\"when multi-package\"*.\n- **One canonical stack.** Feature-first layout, Riverpod 3.x, `go_router`, Drift, `package:clock`,\n  Material 3 — reconciled to a single vocabulary so the 40 skills never contradict each other.\n- **Structure, not aesthetics.** Design-system and component skills teach *how* tokens, themes,\n  components, pages, and views are **structured** — never \"the colour must be `#…`\".\n- **Progressive disclosure.** Core skills ship a lean `SKILL.md` plus on-demand `references/`,\n  `examples/`, and runnable `scripts/`; simpler skills are a single `SKILL.md`.\n- **Correct by construction.** Every snippet is idiomatic and conceptually compiles; rules come with\n  the *why*, anti-patterns, a definition-of-done, and often a grep/analyze script that enforces them.\n\n## The skills\n\n*Skills marked* ***(rich)*** *ship `references/`, `examples/`, and runnable `scripts/` alongside\n`SKILL.md`.* ***(manual-only)*** *skills are side-effecting runbooks an agent never fires on its own.*\n\n### Core Flutter & Dart\n| Skill | What it governs |\n|---|---|\n| `state-management-riverpod` **(rich)** | Riverpod 3.x: one `Notifier`/`AsyncNotifier`/`StreamNotifier` per feature over immutable state, `watch`/`read`/`listen` split, providers-as-DI, `family`+`autoDispose`, single write path. |\n| `widget-composition` **(rich)** | Small `const` `Widget` classes over `_buildX()` methods, lean `build()`, dumb Views, key policy, controller disposal, plus structural layout. |\n| `dart3-idioms-and-coding-standards` **(rich)** | Which Dart 3 construct each declaration earns: `sealed` + exhaustive `switch`, class modifiers, records intra-layer only, immutable value types, the complexity-limit table. |\n| `async-safety` | No-silent-failure async: the arrow-callback `Future`-drop hole no lint catches, `mounted` guards after every `await`, subscription/timer disposal. |\n| `naming-conventions` | Effective Dart naming + role suffixes (`Screen`/`Notifier`/`Repository`/`Service`/`Gateway`/`Failure`) so a name reveals the layer. |\n| `flutter-performance` | `const` subtrees, rebuilds narrowed via `.select`, lazy lists/slivers, off-isolate work, sized image decode, surgical `RepaintBoundary`, profile-mode measurement. |\n| `app-startup-and-bootstrap` | `main()` ordering: crash log + two global error handlers first, settings before `runApp`, composition-root DI overrides, lifecycle flush, no `runZonedGuarded`. |\n| `dartdoc-conventions` | `///` on every public API, standalone one-sentence summary, documented units/ranges/throws, `//` explains *why* not *what*. |\n| `ui-states-and-feedback` **(rich)** | The non-happy paths: loading/empty/error/content resolved in one `switch`, delayed skeletons, filtered-empty vs empty, typed-`Failure` error text with retry, the inline → snackbar → banner → dialog ladder, Undo over confirm. |\n| `forms-and-input` **(rich)** | `Form`/`TextFormField`, sync + async validation, `FocusNode` traversal, keyboard actions, input formatters, error display, controller disposal. |\n| `local-notifications-scheduler` **(rich)** | On-device reminders: DB is the only source of truth, one idempotent `syncNotifications()` reconcile, plugin behind a gateway port, DST-correct recurrence, iOS 64-cap budgeting. |\n\n### Architecture\n| Skill | What it governs |\n|---|---|\n| `flutter-architecture` **(rich)** | Right-sized feature-first layered MVVM: features are folders, foundations become packages only when a compile wall earns it, downward-only DAG, single write-path repositories. |\n| `navigation-and-routing` **(rich)** | One `go_router` in `lib/routing/`, deep-link identity in path params, redirect guards via `refreshListenable`, `StatefulShellRoute` shells, `PopScope`, 404. |\n| `error-handling-typed-results` **(rich)** | Sealed `Result<T,F>` + per-boundary sealed `Failure` returned instead of thrown, exhaustive switches, a global error net, never-lose-data. |\n| `service-boundary-and-native` **(rich)** | Every side effect / native channel behind an injectable `Service`/`Gateway` that throws until overridden, one live impl per flavor, `MethodChannel` quarantined to one dir. |\n\n### Structure & foundations\n| Skill | What it governs |\n|---|---|\n| `project-structure-and-packages` **(rich)** | The canonical feature-first tree (`lib/features/` + shared `core`/`data`/`services`/`routing`/`theme`), one public barrel over private `src/`, one-way dependency layering. |\n| `design-system-structure` **(rich)** | *Token-agnostic* design-system organization: tokens→theme→modifiers layering, two-tier tokens via `ThemeExtension`, no-raw-values CI gate. |\n| `adaptive-layout` **(rich)** | Adapt by size not device: Material 3 window size classes, `LayoutBuilder`/`MediaQuery.sizeOf`, list-detail two-pane, `NavigationRail`-vs-`BottomNav` by width. |\n| `custom-canvas-and-gestures` **(rich)** | `CustomPainter` technique: View/Painter/Scene split, `shouldRepaint` as one value compare, one shared transform read by painter *and* hit-tester, gesture→typed-command. |\n| `motion-and-haptics` **(rich)** | What the motion tokens are spent on: same-frame acknowledgment, a declared moment catalog, one haptic per commit from an event map, interruptible animation, bounded celebration, stop conditions. |\n\n### Data\n| Skill | What it governs |\n|---|---|\n| `persistence-drift` **(rich)** | Drift/SQLite behind DAOs mapping rows to value objects, schema-level invariants, one-transaction-per-mutation, scoped `.watch` streams, WAL-safe backups. |\n| `value-objects-money-and-units` **(rich)** | Store canonically (integer minor units keyed to real ISO-4217 exponent, SI ints, UTC), convert only at the edge, one largest-remainder `allocate()`, inject a `Clock`. |\n| `data-export-and-restore` **(rich)** | Portable data: a versioned+checksummed backup envelope, all-or-nothing restore via staging-then-swap, canonical values in machine formats, RFC 4180 + formula-injection-safe CSV, share behind a Gateway. |\n\n### Quality & testing\n| Skill | What it governs |\n|---|---|\n| `testing-strategy` **(rich)** | Test shape follows code not the pyramid: clock-injected pure core, fakes over mocks for owned code, property/fuzz with independent oracles, one acceptance gate. |\n| `widget-golden-and-a11y-testing` **(rich)** | `pumpApp` harness with device/`MediaQuery` presets, per-(device,scale,bold) overflow matrix, two golden lanes, RTL goldens, honest a11y limits. |\n| `lint-and-style-config` **(rich)** | A strict `analysis_options.yaml`: `very_good_analysis` + `strict-casts`/`strict-raw-types`, silent-failure lints promoted to error, suppression discipline. |\n| `seeded-determinism-and-golden-vectors` **(rich)** | Output every device must compute identically: injected key, civil-date days, one seeded entropy source, regenerate-don't-store, versioned cutovers, a frozen fingerprint table from an independent oracle. |\n\n### Internationalization & accessibility\n| Skill | What it governs |\n|---|---|\n| `i18n-rtl-l10n` **(rich)** | gen-l10n/ARB with key+placeholder parity, ICU plurals, `Directional`-only geometry, bidi isolation, canonical-store + localize-at-render, numeral normalize-before-parse, vendored delegates for a locale `flutter_localizations` lacks. |\n| `accessibility-as-code` | A11y as a correctness property: `Semantics` on every node, read a11y flags from `MediaQuery`, never clamp `textScaler`, never colour-alone, 44px targets. |\n\n### Shipping & monetization\n| Skill | What it governs |\n|---|---|\n| `release-and-store-shipping` **(rich)** | From green CI to a shipped build: `x.y.z+N` as the only version source, no keys in the repo, archived obfuscation symbols, merged-manifest permission audit, store declarations read back rather than trusted, size/startup budgets, staged rollout. |\n| `ads-and-iap-monetization` **(rich)** | Opt-in rewarded grants on a sealed outcome, per-day caps, preload-or-hide so a control never dead-ends, service-owned interstitial caps, one entitlement gate, and restore *before* the ad SDK initializes. |\n\n### Workflows & tooling\n| Skill | What it governs |\n|---|---|\n| `flutter-conventions-index` | The front door: the non-negotiable house rules plus a routing table pointing each task to the right deep-dive skill, and a recommended build order. |\n| `scaffold-feature-module` **(rich)** | Stand up one feature: dumb View + 1:1 `Notifier` ViewModel + `widgets/` + scoped providers, single write path, typed `go_router` route, ARB parity. |\n| `codegen-and-toolchain` **(rich)** | `build_runner` + toolchain: workspace linking, SDK pinning, per-package `build.yaml`, `--delete-conflicting-outputs`, commit-vs-gitignore, analyzer/coverage excludes. |\n| `ci-pipeline-and-gates` **(rich)** | GitHub Actions Flutter CI: pinned toolchain, `format`/`analyze --fatal-infos`, codegen+schema freshness gates, randomized test order, coverage-as-report-not-gate. |\n| `dependency-hygiene` **(rich)** | Caret ranges + committed lock, SDK pinning, version-pinned lint include, transitive-tree auditing, vendoring a bus-factor-1 plugin behind an interface. |\n| `design-review-workflow` | Once-per-app end-of-build QA sweep: every screen × light/dark × LTR+RTL × largest text × reduce-motion, graded BLOCKER/FIX/NOTE, a dated sign-off that gates release. |\n| `run-codegen` *(manual-only)* | The deterministic `build_runner` pass before analyze: the pinned command with `--delete-conflicting-outputs`, never hand-edit or commit-force generated output. |\n| `run-migration` *(manual-only)* | The forward-only Drift/SQLite migration ritual: mandatory pre-migration snapshot, bump by one, append-only steps, tests over every from→to path + a forced-throw restore. |\n| `run-goldens-rebaseline` *(manual-only)* | The only sanctioned way committed golden images are overwritten: real assertions green first, blessing environment only, inspect every changed PNG, delete orphans, prove it without the flag. |\n\n> A full, searchable catalog with descriptions and filters lives on the\n> **[website](https://zakaria.dev/Flutter-Skills/)**.\n\n## How to use these skills\n\nSkills **auto-load** when a task matches their `description` — you rarely invoke them by hand. You\ncan also run one explicitly with `/<skill-name>` (or, installed as a plugin, `/flutter:<skill-name>`).\n\n### Any agent — the universal installer\n```bash\nnpx skills add zakariaf/Flutter-Skills\n```\nThe open [skills CLI](https://github.com/vercel-labs/skills) places the skills where your agent\nexpects them (Cursor, Codex, Copilot, Cline, Windsurf, Gemini CLI, …).\n\n### Claude Code — plugin marketplace\n```\n/plugin marketplace add zakariaf/Flutter-Skills\n/plugin install flutter@flutter-skills\n```\n\n### Copy into a single project\n```bash\ngit clone https://github.com/zakariaf/Flutter-Skills\nmkdir -p .claude/skills && cp -R Flutter-Skills/skills/* .claude/skills/\n```\n\n### Personal-global (every project on your machine)\n```bash\nfor d in /path/to/Flutter-Skills/skills/*/; do\n  ln -s \"$d\" \"$HOME/.claude/skills/$(basename \"$d\")\"\ndone\n```\n\n### Agents that read `AGENTS.md`\n[`AGENTS.md`](AGENTS.md) carries an intent → skill map and usage instructions for any agent (Codex,\nCursor, Copilot, …). Copy its guidance into a consuming project's own `AGENTS.md`.\n\n## Repository layout\n\n```\n.\n├── .claude-plugin/          # Claude Code plugin + marketplace manifests\n├── .codex-plugin/           # Codex plugin manifest\n├── AGENTS.md                # cross-agent entry file (intent → skill map)\n├── skills/\n│   └── <skill-name>/\n│       ├── SKILL.md         # frontmatter (name + description) + the playbook\n│       ├── references/      # on-demand deep-dives            (rich skills)\n│       ├── examples/        # complete, correct .dart samples  (rich skills)\n│       └── scripts/         # runnable grep/analyze checks     (rich skills)\n├── skills.json              # machine-readable catalog (for tooling & the site)\n├── docs/                    # the GitHub Pages website\n├── README.md · CONTRIBUTING.md · LICENSE\n```\n\n## Validating\n\n```bash\nclaude plugin validate . --strict          # plugin + marketplace manifests\nfind skills -name '*.sh' -print0 | xargs -0 -n1 bash -n   # scripts parse\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the skill format, the house conventions every skill must\nfollow, and the checks to run before opening a PR.\n\n## Provenance\n\nDistilled and merged from the skill libraries of more than ten production Flutter apps, reconciled\nto one canonical stack, then adversarially reviewed for API correctness (Riverpod 3.x, Drift,\ngen-l10n, WCAG) and scrubbed of design-token and app-domain specifics so they apply to any Flutter\napp.\n\n## License\n\n[MIT](LICENSE) © 2026 Zakaria Fatahi\n",
  "bytes": 15060,
  "sha": "f2efca403e0491035ceadc92ca6be6f6d5b61c77c9208fe107d800ab61cc38fa",
  "repo_slug": "zakariaf/flutter-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://api.agentalog.com/api/listings/skl_zakariaf_flutter_skills_app_startup_and__743a270c/readme"
}