{
  "markdown": "# Flutter Knowledge\n\nFlutter/Dart skills for coding agents. Install once and your agent follows a\nconsistent set of full-stack Flutter conventions — feature architecture, the\ndata layer, Cubit state management, dependency injection, routing, the core UI\nwrappers, and localization — plus five on-demand helpers: `add-translation`\nfor keeping `en.json` / `ar.json` in sync, `drift-local-database` and\n`hive-local-database` for local persistence (drift/SQLite or Hive),\n`flutter-testing` for mocktail/bloc_test unit tests, and\n`design-from-html-flutter` for building the app's design system from an HTML\nprototype.\n\n`flutter-knowledge` triggers automatically from its `description` — whenever\nFlutter or Dart comes up, the agent loads it. Nothing to invoke by hand. The\nhelpers are lazy-loaded instead: they stay out of `flutter-knowledge`\nand only enter context on demand, either because the agent recognizes the\ntask needs one from its own scoped `description` (local storage, tests, a\nmissing translation key, an HTML design prototype), because\n`flutter-knowledge` explicitly invokes it,\nor because you run `/add-translation`, `/drift-local-database`,\n`/hive-local-database`, `/flutter-testing`, or `/design-from-html-flutter`\ndirectly — this keeps `flutter-knowledge` itself smaller and avoids loading\nstorage/localization/testing/design conventions into every session.\n\nOn Claude Code, Codex, OpenCode, and Pi, `flutter-knowledge` is also\nforce-loaded: a hook/plugin checks for `pubspec.yaml` and injects the\nconventions directly, so they apply even if the model doesn't decide to\ntrigger the skill on its own. The timing differs by harness, though — Claude\nCode and Codex inject it once, at session start (a `SessionStart` hook); on\nOpenCode and Pi it's re-applied to the system prompt on every turn instead,\nsince those harnesses only expose per-turn hooks (`experimental.chat.system.transform`\nand `before_agent_start` respectively) — it doesn't accumulate across turns,\nand system prompts are typically prompt-cached, but it's a different\nmechanism from the other two's one-time injection. Gemini already gets this\nfor free since `GEMINI.md` is always loaded. Cursor and Kimi rely on\ndescription-based triggering only (see `CONTRIBUTING.md`).\n\n## What's inside\n\n| Skill | Purpose | Loads |\n| --- | --- | --- |\n| **flutter-knowledge** | Full-stack conventions: architecture, data layer, Cubit, DI, routing, UI, styling, localization. | Automatically |\n| **drift-local-database** | Drift/SQLite local persistence: tables, DAOs, entities, migrations, local-only and hybrid repositories. | On demand, via `flutter-knowledge` or `/drift-local-database` |\n| **hive-local-database** | Hive (hive_ce) local persistence: boxes, storage↔model mapping, local-only and hybrid repositories. | On demand, via `flutter-knowledge` or `/hive-local-database` |\n| **flutter-testing** | Unit test conventions: mocktail mocks, bloc_test cubit tests, data source/repository/cubit coverage. | On demand, via `flutter-knowledge` or `/flutter-testing` |\n| **add-translation** | Add localization key(s) to `en.json` and `ar.json` in sync, then regenerate `locale_keys.g.dart`. | On demand, via `flutter-knowledge` or `/add-translation` |\n| **design-from-html-flutter** | Turn an HTML design prototype into skin colors, text styles, motion constants, core widgets, and per-screen design docs + implementation prompts. | On demand, via `flutter-knowledge` or `/design-from-html-flutter` |\n\n## Install\n\nInstall separately for each harness you use. Every method points at the same\n`skills/` directory, so updating is always \"pull the latest.\"\n\n### Claude Code\n\n```bash\n/plugin marketplace add OmarAly92/flutter-knowledge\n/plugin install flutter-knowledge@flutter-skills\n```\n\nUpdate: run both of these — the first refreshes the marketplace metadata, the second actually pulls the new version in.\n\n```bash\n/plugin marketplace update flutter-skills\n/plugin install flutter-knowledge@flutter-skills\n```\n\n### Gemini CLI\n\n```bash\ngemini extensions install https://github.com/OmarAly92/flutter-knowledge\n```\n\nUpdate: `gemini extensions update flutter-knowledge`.\n\n### OpenCode\n\nAdd to your `opencode.json`:\n\n```json\n{\n  \"plugin\": [\"flutter-knowledge@git+https://github.com/OmarAly92/flutter-knowledge.git\"]\n}\n```\n\nSee [`.opencode/INSTALL.md`](./.opencode/INSTALL.md) for details. Update: `git pull` / clear the package cache.\n\n### Pi\n\nInstall the package (its `package.json` exposes the Pi extension and skills):\n\n```bash\npi package add github:OmarAly92/flutter-knowledge\n```\n\n### Codex\n\nRun these in your OS terminal/shell — not inside an active Codex chat session\n(that's where `/plugins` lives, for browsing what's already installed):\n\n```bash\ncodex plugin marketplace add OmarAly92/flutter-knowledge\ncodex plugin add flutter-knowledge@flutter-skills\n```\n\nThen start a new Codex session to pick up the plugin. It reads\n`.codex-plugin/plugin.json`, which registers `./skills/` and — like Claude\nCode — wires up the `SessionStart` hook that force-loads `flutter-knowledge`\nfor Flutter projects.\n\nUpdate: run both of these — the first refreshes the marketplace metadata, the second reinstalls the latest version.\n\n```bash\ncodex plugin marketplace add OmarAly92/flutter-knowledge\ncodex plugin add flutter-knowledge@flutter-skills\n```\n\n### Cursor / Kimi\n\nAdd this repo through the harness's plugin/extension manager. Each reads its own\nmanifest — `.cursor-plugin/plugin.json`, `.kimi-plugin/plugin.json` — which\nregisters `./skills/`. Unlike Codex, these two are description-based triggering\nonly; no hook is wired up.\n\n### Any other agent (universal fallback)\n\nFor any agent that reads `SKILL.md` files from `~/.claude/skills/`:\n\n```bash\ngit clone https://github.com/OmarAly92/flutter-knowledge.git\ncd flutter-knowledge\n./install.sh\n```\n\nThis symlinks each skill into `~/.claude/skills/` (override with\n`CLAUDE_SKILLS_DIR=/path ./install.sh`). Update with `git pull` and re-run\n`./install.sh`.\n\n## Repo structure\n\n`skills/` is the single source of truth. Every harness manifest is a thin\nadapter that points at it — see [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the full map and\nhow to add a skill or cut a release.\n\n## License\n\nMIT — see [`LICENSE`](./LICENSE).\n",
  "bytes": 6233,
  "sha": "7f6f0b895d291b5f5bbb9b5f99c9f60dfb527e5b7c092887b508652b1eadbf5c",
  "repo_slug": "omaraly92/flutter-knowledge",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_omaraly92_flutter_knowledge_dde001fa/readme"
}