{"_id":"@aswinsubhash/flutter-rules","_rev":"5-d499496173e279eca085b6ac698400a0","name":"@aswinsubhash/flutter-rules","dist-tags":{"latest":"2.0.2"},"versions":{"1.1.0":{"name":"@aswinsubhash/flutter-rules","version":"1.1.0","keywords":["flutter","dart","codex","claude-code","cursor","devin","agent-skills"],"license":"MIT","_id":"@aswinsubhash/flutter-rules@1.1.0","maintainers":[{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"}],"homepage":"https://github.com/aswinsubhash/flutter-rules","bugs":{"url":"https://github.com/aswinsubhash/flutter-rules/issues"},"bin":{"flutter-rules":"bin/flutter-rules.mjs"},"dist":{"shasum":"17dacbd0e0a847994c72134a6c1ccef5cf3e99aa","tarball":"https://registry.npmjs.org/@aswinsubhash/flutter-rules/-/flutter-rules-1.1.0.tgz","fileCount":21,"integrity":"sha512-Y6kwV3jVGequ0Hs1V5j51+9VVUD4POUWj9GnYuce3Kv0oorHqe8BFFlWOwTYPvCgfsmpnCP0GIezhchGG1qgBw==","signatures":[{"sig":"MEYCIQDf0ylCd81v3mEdmGJFC7u+6k0W0Y5YNp5YqDXqEGBjjQIhAOaNjb12uKzBoXpey1HNWk/k2sV+XciY0E5WAgG+/WwL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aswinsubhash%2fflutter-rules@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73668},"type":"module","engines":{"node":">=20"},"gitHead":"fa08471fb5bbbd160b18ef32ef270ef8d106ffd0","scripts":{"test":"node --test","validate":"npm test && ./scripts/validate.sh","pack:check":"node scripts/assert-package.mjs"},"_npmUser":{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"},"repository":{"url":"git+https://github.com/aswinsubhash/flutter-rules.git","type":"git"},"_npmVersion":"11.17.0","description":"Universal installer for the Flutter Rules agent skill.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/flutter-rules_1.1.0_1787162038809_0.36422263285380785","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aswinsubhash/flutter-rules","version":"1.1.1","keywords":["flutter","dart","codex","claude-code","cursor","devin","agent-skills"],"license":"MIT","_id":"@aswinsubhash/flutter-rules@1.1.1","maintainers":[{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"}],"homepage":"https://github.com/aswinsubhash/flutter-rules","bugs":{"url":"https://github.com/aswinsubhash/flutter-rules/issues"},"bin":{"flutter-rules":"bin/flutter-rules.mjs"},"dist":{"shasum":"3be35c7b78b4a43ca52e59a6bcca45a3af4dfa24","tarball":"https://registry.npmjs.org/@aswinsubhash/flutter-rules/-/flutter-rules-1.1.1.tgz","fileCount":21,"integrity":"sha512-QWHD8x0ph82KjqRLGuC9dcHir67Kg/OEBkuiF1p+cahW9A1WRH3yAK5JeYvo05erWmGJkLWBhiNBJzO7hjHC/g==","signatures":[{"sig":"MEYCIQClIGs7da2SYw+LYrK076VH9wMpKRfdbogj2Ut5rAxy2QIhAM4BgADe61tS5KBcAgBBnTgn+OJsZthj3fviAma3VQBp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aswinsubhash%2fflutter-rules@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":74273},"type":"module","engines":{"node":">=20"},"gitHead":"fe1659b3d7991d772870fa641d50f463e5818922","scripts":{"test":"node --test","validate":"npm test && ./scripts/validate.sh","pack:check":"node scripts/assert-package.mjs"},"_npmUser":{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"},"repository":{"url":"git+https://github.com/aswinsubhash/flutter-rules.git","type":"git"},"_npmVersion":"11.17.0","description":"Universal installer for the Flutter Rules agent skill.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/flutter-rules_1.1.1_1787168260402_0.07886165591166638","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@aswinsubhash/flutter-rules","version":"2.0.0","keywords":["flutter","dart","codex","claude-code","cursor","devin","agent-skills"],"license":"MIT","_id":"@aswinsubhash/flutter-rules@2.0.0","maintainers":[{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"}],"homepage":"https://github.com/aswinsubhash/flutter-rules","bugs":{"url":"https://github.com/aswinsubhash/flutter-rules/issues"},"bin":{"flutter-rules":"bin/flutter-rules.mjs"},"dist":{"shasum":"290b3280707bb8b4eb72596fafd661efea064a11","tarball":"https://registry.npmjs.org/@aswinsubhash/flutter-rules/-/flutter-rules-2.0.0.tgz","fileCount":22,"integrity":"sha512-6rpLudc6H+RrmTvH3sUw+v5MbW11WPcImVRX9s340Yhx6vGvwj2cxoxa58+Fk5pSUZmhDxmcOUp2Qb1RvXq8yg==","signatures":[{"sig":"MEYCIQCDsBoVGr26CfY5/I8/cdXpqHbl2lVcjlidrCdzFDqZOwIhAJOU/60mSM2y9U4zPerUM7L9J0nbi9DTuYDPwlxsMHPv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aswinsubhash%2fflutter-rules@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90183},"type":"module","engines":{"node":">=20"},"gitHead":"559863d85159b603d38c683dd18772ca76bb7473","scripts":{"test":"node --test","validate":"npm test && ./scripts/validate.sh","pack:check":"node scripts/assert-package.mjs"},"_npmUser":{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"},"repository":{"url":"git+https://github.com/aswinsubhash/flutter-rules.git","type":"git"},"_npmVersion":"11.17.0","description":"Universal installer for the Flutter Rules agent skill.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"skills":"1.5.15","cross-spawn":"7.0.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/flutter-rules_2.0.0_1787234878382_0.9545868560790618","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@aswinsubhash/flutter-rules","version":"2.0.1","keywords":["flutter","dart","codex","claude-code","cursor","devin","agent-skills"],"license":"MIT","_id":"@aswinsubhash/flutter-rules@2.0.1","maintainers":[{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"}],"homepage":"https://github.com/aswinsubhash/flutter-rules","bugs":{"url":"https://github.com/aswinsubhash/flutter-rules/issues"},"bin":{"flutter-rules":"bin/flutter-rules.mjs"},"dist":{"shasum":"a24636868ed50b427e3b156d71efea455c20bc47","tarball":"https://registry.npmjs.org/@aswinsubhash/flutter-rules/-/flutter-rules-2.0.1.tgz","fileCount":22,"integrity":"sha512-FErMoLaenCsGFPJM4hXFtuH22uI+uZ+j1QAP9oqzVCK4UOcM5NdUBlwDX4zaw3DecCwFmRIHj2+ceSc3jJxJew==","signatures":[{"sig":"MEUCIQDqV7+wnrpaOTEfCaW6Oc2eNgFU0rqBj0zH8FGWvgqAMwIgLuCJWOG+FXUoyhFL3kqltYdFI2d9LdaXUbnT6kICh8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aswinsubhash%2fflutter-rules@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90443},"type":"module","engines":{"node":">=20"},"gitHead":"284cfa3f667afb45c1a1a4e660d329afdd72c930","scripts":{"test":"node --test","validate":"npm test && ./scripts/validate.sh","pack:check":"node scripts/assert-package.mjs"},"_npmUser":{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"},"repository":{"url":"git+https://github.com/aswinsubhash/flutter-rules.git","type":"git"},"_npmVersion":"11.17.0","description":"Universal installer for the Flutter Rules agent skill.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"skills":"1.5.15","cross-spawn":"7.0.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/flutter-rules_2.0.1_1787235861464_0.39000320046379855","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@aswinsubhash/flutter-rules","version":"2.0.2","description":"Universal installer for the Flutter Rules agent skill.","type":"module","bin":{"flutter-rules":"bin/flutter-rules.mjs"},"engines":{"node":">=20"},"scripts":{"test":"node --test","pack:check":"node scripts/assert-package.mjs","validate":"npm test && ./scripts/validate.sh"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/aswinsubhash/flutter-rules.git"},"homepage":"https://github.com/aswinsubhash/flutter-rules","bugs":{"url":"https://github.com/aswinsubhash/flutter-rules/issues"},"license":"MIT","keywords":["flutter","dart","codex","claude-code","cursor","devin","agent-skills"],"dependencies":{"cross-spawn":"7.0.6","skills":"1.5.15"},"gitHead":"f2a0c36515e346cc8435ebb3725beedb1f51477a","_id":"@aswinsubhash/flutter-rules@2.0.2","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-qM1Wej5fhXI3WcLDYtfG3vsThdUJu3/Cz5at6L+RcpCUs+DZjq+gil227MI6dlZMp0lugLJTdBoHBIrH48jATA==","shasum":"352c0449f6b23b073f64890932c2bc8a4dd7f0fd","tarball":"https://registry.npmjs.org/@aswinsubhash/flutter-rules/-/flutter-rules-2.0.2.tgz","fileCount":31,"unpackedSize":713861,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aswinsubhash%2fflutter-rules@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDR47s9aDSgu3Rv1ADnPRNvq+WFVzW6CSMsDq1DOT+7jwIgOZSRwiD5eY5CAX0gUl6b10UaKz/jYBZEtcbmhfiVYSk="}]},"_npmUser":{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"},"directories":{},"maintainers":[{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flutter-rules_2.0.2_1787343092102_0.9369211527672794"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-19T17:53:58.647Z","modified":"2026-08-21T20:11:32.635Z","1.1.0":"2026-08-19T17:53:58.955Z","1.1.1":"2026-08-19T19:37:40.530Z","2.0.0":"2026-08-20T14:07:58.536Z","2.0.1":"2026-08-20T14:24:21.634Z","2.0.2":"2026-08-21T20:11:32.294Z"},"bugs":{"url":"https://github.com/aswinsubhash/flutter-rules/issues"},"license":"MIT","homepage":"https://github.com/aswinsubhash/flutter-rules","keywords":["flutter","dart","codex","claude-code","cursor","devin","agent-skills"],"repository":{"type":"git","url":"git+https://github.com/aswinsubhash/flutter-rules.git"},"description":"Universal installer for the Flutter Rules agent skill.","maintainers":[{"name":"aswinsubhash","email":"aswinofficial3@gmail.com"}],"readme":"# Flutter Rules\n\n[![Validate skill packages](https://github.com/aswinsubhash/flutter-rules/actions/workflows/validate.yml/badge.svg)](https://github.com/aswinsubhash/flutter-rules/actions/workflows/validate.yml)\n[![Latest tag](https://img.shields.io/github/v/tag/aswinsubhash/flutter-rules?sort=semver)](https://github.com/aswinsubhash/flutter-rules/tags)\n[![npm](https://img.shields.io/npm/v/%40aswinsubhash%2Fflutter-rules)](https://www.npmjs.com/package/@aswinsubhash/flutter-rules)\n[![Agent Skills](https://img.shields.io/badge/Agent%20Skills-compatible-4c6ef5)](https://agentskills.io/specification)\n\nReusable engineering guidance for building maintainable, production-ready\nFlutter applications with AI coding agents.\n\nFlutter Rules gives Codex, Claude Code, Cursor, and Devin a shared set of\nprinciples for clean architecture, state management, UI, networking,\nnavigation, testing, and security. The skill applies only when you invoke it.\n\n## What it covers\n\n- Clean architecture and feature boundaries\n- Effective Dart and Dart 3 language conventions\n- Cubit/BLoC state management and testing conventions\n- Flutter UI, accessibility, and responsive design\n- Flutter layout-error diagnosis and debugging workflow\n- API clients, models, repositories, and error handling\n- Navigation and routing\n- Testing, mirrored test placement, Bloc/Cubit policy validation, analysis,\n  documentation, and code quality\n- Secure storage and SharedPreferences usage\n- Evidence-based implemented-feature review reports\n\n## Install\n\nInstall Flutter Rules globally:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest install\n```\n\nClaude Code is optional. Install its integration explicitly when needed:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest install claude\n```\n\nPreview an installation without changing anything:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest install --dry-run\n```\n\nUsers upgrading from v1 can run the same install command. Verified legacy\nFlutter Rules integrations are migrated automatically after the new install is\nhealthy.\n\n## Use\n\n| Agent | Invocation |\n| --- | --- |\n| Codex | `$flutter-rules` |\n| Claude Code | `/flutter-rules` |\n| Cursor | `/flutter-rules` |\n| Devin | `@skills:flutter-rules` |\n\nExamples for Codex:\n\n```text\n$flutter-rules review this authentication feature\n$flutter-rules plan a new checkout flow\n$flutter-rules check whether this session storage is secure\n```\n\nStart a new agent session after installation so the skill is discovered.\n\n## Feature review reports\n\nEvery explicit request to review an implemented feature generates an offline,\ndisplay-only report. Flutter Rules determines the relevant diff, reviews the\nchanged and affected surfaces, and records:\n\n- Critical, high, medium, and low findings\n- Release risk tier, confidence, and remediation effort\n- Affected modules, files, and relevant changes\n- Exact evidence, impact, remediation, and verification guidance\n- Validation results, passed checks, provenance for affected pre-existing findings,\n  limitations, and unverified areas\n\nReports are stored in the reviewed project:\n\n```text\n.flutter-rules/reviews/<YYYYMMDDTHHMMSSZ>-<feature>/\n  review.json\n  review.html\n```\n\n`review.json` is the structured audit source and `review.html` is a searchable,\nfilterable view with all assets embedded. The skill attempts to open the HTML in\nthe default browser and prints its absolute path when automatic opening is not\navailable.\n\nThe review report is a human-in-the-loop workflow: the agent gathers evidence,\nclassifies findings, records validation limits, and presents the result for a\nhuman release decision. Findings can be searched, filtered, expanded, deep-linked,\nand copied as fix instructions to send back to the agent. The report is\ndisplay-only; it never changes application code automatically.\n\n### Review report preview\n\nThe report is designed to make review scope, actionable findings, and verification\nlimits easy to scan:\n\n<p align=\"center\">\n  <img src=\"docs/assets/feature-review-overview.png\" alt=\"Feature review report overview showing executive summary, review scope, and change impact\" width=\"960\">\n</p>\n\n<p align=\"center\">\n  <img src=\"docs/assets/feature-review-findings.png\" alt=\"Expanded feature review finding with evidence, remediation, verification, and affected files\" width=\"960\">\n</p>\n\n<p align=\"center\">\n  <img src=\"docs/assets/feature-review-validation.png\" alt=\"Feature review validation results, passed checks, unverified areas, limitations, and classification reference\" width=\"960\">\n</p>\n\nA feature review does not modify application code or implement its findings.\nChoose the changes you want after reading the report, then give the agent that\nfollow-up scope. If the reports directory is not already ignored, the agent must\nask before adding it to `.gitignore`.\n\n## Manage\n\nUpdate every installed Flutter Rules integration:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest update\n```\n\nCheck installation health:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest doctor\n```\n\nGet machine-readable health information:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest doctor --json\n```\n\nRemove Flutter Rules and all managed integrations:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest uninstall\n```\n\nUse `--help` to see all commands:\n\n```bash\nnpx @aswinsubhash/flutter-rules@latest --help\n```\n\n## Community\n\n- Read [CONTRIBUTING.md](CONTRIBUTING.md) to propose a rule or contribute a\n  change.\n- Use the issue forms to report a bug or propose a rule.\n- Report vulnerabilities privately by following [SECURITY.md](SECURITY.md).\n- Distributed under the [MIT License](LICENSE).\n\n## Compatibility\n\n- [Agent Skills specification](https://agentskills.io/specification)\n- [Codex skills](https://developers.openai.com/codex/skills/)\n- [Claude Code skills](https://code.claude.com/docs/en/slash-commands)\n- [Cursor skills](https://cursor.com/docs/skills)\n- [Devin skills](https://docs.devin.ai/product-guides/skills)\n","readmeFilename":"README.md"}