opencode-agent-kit 1.0.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.
- package/README.md +796 -0
- package/bin/commands/init.mjs +221 -0
- package/bin/init.mjs +21 -0
- package/package.json +22 -0
- package/template/.opencode/agent-docs/backend/README.md +0 -0
- package/template/.opencode/agent-docs/backend/node/BACKEND_PATTERNS.md +82 -0
- package/template/.opencode/agent-docs/backend/node/BACKEND_QUICK_START.md +49 -0
- package/template/.opencode/agent-docs/frontend/next/README.md +0 -0
- package/template/.opencode/agent-docs/frontend/nuxt/API_PATTERNS.md +807 -0
- package/template/.opencode/agent-docs/frontend/nuxt/CHEATSHEET.md +676 -0
- package/template/.opencode/agent-docs/frontend/nuxt/COMPLETION_REPORT.md +613 -0
- package/template/.opencode/agent-docs/frontend/nuxt/EXAMPLES.md +956 -0
- package/template/.opencode/agent-docs/frontend/nuxt/INDEX.md +596 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MCP_GUIDE.md +881 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_CURRICULUM_30_DAYS.md +256 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_CURRICULUM_CHECKLIST.md +156 -0
- package/template/.opencode/agent-docs/frontend/nuxt/MENTOR_WEEKLY_ASSIGNMENTS.md +191 -0
- package/template/.opencode/agent-docs/frontend/nuxt/QUICK_START.md +509 -0
- package/template/.opencode/agent-docs/frontend/nuxt/README.md +506 -0
- package/template/.opencode/agent-docs/frontend/nuxt/README_AGENTS.md +140 -0
- package/template/.opencode/agent-docs/frontend/nuxt/README_DOCS.md +65 -0
- package/template/.opencode/agent-docs/frontend/nuxt/SUMMARY.md +474 -0
- package/template/.opencode/agent-docs/frontend/nuxt/TEAM_OPERATING_GUIDE.md +54 -0
- package/template/.opencode/agent-docs/frontend/nuxt/TESTING_GUIDE.md +904 -0
- package/template/.opencode/agent-docs/frontend/nuxt/WORKFLOWS.md +758 -0
- package/template/.opencode/agent-docs/frontend/react/API_PATTERNS.md +187 -0
- package/template/.opencode/agent-docs/frontend/react/CHEATSHEET.md +87 -0
- package/template/.opencode/agent-docs/frontend/react/INDEX.md +45 -0
- package/template/.opencode/agent-docs/frontend/react/QUICK_START.md +43 -0
- package/template/.opencode/agent-docs/frontend/react/README.md +159 -0
- package/template/.opencode/agent-docs/frontend/vue/README.md +0 -0
- package/template/.opencode/agent-docs/mobile/android/README.md +45 -0
- package/template/.opencode/agent-docs/mobile/flutter/README.md +44 -0
- package/template/.opencode/agents/android-developer.md +418 -0
- package/template/.opencode/agents/code-igniter-3-fullstack.md +345 -0
- package/template/.opencode/agents/code-reviewer.md +517 -0
- package/template/.opencode/agents/database-specialist.md +455 -0
- package/template/.opencode/agents/devops-specialist.md +562 -0
- package/template/.opencode/agents/flutter-developer.md +556 -0
- package/template/.opencode/agents/it-leader.md +911 -0
- package/template/.opencode/agents/laravel-advanced.md +691 -0
- package/template/.opencode/agents/node-backend-developer.md +343 -0
- package/template/.opencode/agents/nuxt-frontend-developer-mentor.md +402 -0
- package/template/.opencode/agents/nuxt-frontend-developer.md +1573 -0
- package/template/.opencode/agents/react-frontend-developer.md +1017 -0
- package/template/.opencode/agents/seo-specialist.md +681 -0
- package/template/.opencode/agents/ui-ux-designer.md +783 -0
- package/template/.opencode/commands/android-build/command.md +25 -0
- package/template/.opencode/commands/android-test/command.md +23 -0
- package/template/.opencode/commands/build-fix.md +29 -0
- package/template/.opencode/commands/checkpoint.md +74 -0
- package/template/.opencode/commands/code-review.md +40 -0
- package/template/.opencode/commands/e2e.md +363 -0
- package/template/.opencode/commands/eval.md +120 -0
- package/template/.opencode/commands/evolve.md +193 -0
- package/template/.opencode/commands/flutter-build/command.md +25 -0
- package/template/.opencode/commands/flutter-test/command.md +24 -0
- package/template/.opencode/commands/go-build.md +183 -0
- package/template/.opencode/commands/go-review.md +148 -0
- package/template/.opencode/commands/go-test.md +268 -0
- package/template/.opencode/commands/gpc-release/command.md +30 -0
- package/template/.opencode/commands/instinct-export.md +91 -0
- package/template/.opencode/commands/instinct-import.md +142 -0
- package/template/.opencode/commands/instinct-status.md +86 -0
- package/template/.opencode/commands/learn.md +70 -0
- package/template/.opencode/commands/multi-backend.md +158 -0
- package/template/.opencode/commands/multi-execute.md +310 -0
- package/template/.opencode/commands/multi-frontend.md +158 -0
- package/template/.opencode/commands/multi-plan.md +261 -0
- package/template/.opencode/commands/multi-workflow.md +183 -0
- package/template/.opencode/commands/orchestrate.md +172 -0
- package/template/.opencode/commands/plan.md +113 -0
- package/template/.opencode/commands/pm2.md +271 -0
- package/template/.opencode/commands/python-review.md +297 -0
- package/template/.opencode/commands/refactor-clean.md +28 -0
- package/template/.opencode/commands/sessions.md +305 -0
- package/template/.opencode/commands/setup-pm.md +80 -0
- package/template/.opencode/commands/skill-create.md +174 -0
- package/template/.opencode/commands/tdd.md +326 -0
- package/template/.opencode/commands/test-coverage.md +27 -0
- package/template/.opencode/commands/update-codemaps.md +17 -0
- package/template/.opencode/commands/update-docs.md +31 -0
- package/template/.opencode/commands/verify.md +59 -0
- package/template/.opencode/config.example.json +309 -0
- package/template/.opencode/config.json +341 -0
- package/template/.opencode/contexts/dev.md +20 -0
- package/template/.opencode/contexts/research.md +26 -0
- package/template/.opencode/contexts/review.md +22 -0
- package/template/.opencode/hooks/hooks.json +169 -0
- package/template/.opencode/instructions/INSTRUCTIONS.md +388 -0
- package/template/.opencode/package.json +5 -0
- package/template/.opencode/rules/README.md +82 -0
- package/template/.opencode/rules/android/gradle.md +62 -0
- package/template/.opencode/rules/android/testing.md +27 -0
- package/template/.opencode/rules/common/agents.md +49 -0
- package/template/.opencode/rules/common/coding-style.md +48 -0
- package/template/.opencode/rules/common/git-workflow.md +45 -0
- package/template/.opencode/rules/common/hooks.md +30 -0
- package/template/.opencode/rules/common/patterns.md +31 -0
- package/template/.opencode/rules/common/performance.md +55 -0
- package/template/.opencode/rules/common/security.md +29 -0
- package/template/.opencode/rules/common/testing.md +29 -0
- package/template/.opencode/rules/flutter/state-management.md +57 -0
- package/template/.opencode/rules/flutter/testing.md +42 -0
- package/template/.opencode/rules/golang/coding-style.md +26 -0
- package/template/.opencode/rules/golang/hooks.md +11 -0
- package/template/.opencode/rules/golang/patterns.md +39 -0
- package/template/.opencode/rules/golang/security.md +28 -0
- package/template/.opencode/rules/golang/testing.md +25 -0
- package/template/.opencode/rules/mobile/performance.md +36 -0
- package/template/.opencode/rules/python/coding-style.md +37 -0
- package/template/.opencode/rules/python/hooks.md +14 -0
- package/template/.opencode/rules/python/patterns.md +34 -0
- package/template/.opencode/rules/python/security.md +25 -0
- package/template/.opencode/rules/python/testing.md +33 -0
- package/template/.opencode/rules/typescript/coding-style.md +58 -0
- package/template/.opencode/rules/typescript/hooks.md +15 -0
- package/template/.opencode/rules/typescript/patterns.md +45 -0
- package/template/.opencode/rules/typescript/security.md +21 -0
- package/template/.opencode/rules/typescript/testing.md +11 -0
- package/template/.opencode/skills/api-documentation/SKILL.md +188 -0
- package/template/.opencode/skills/backend-patterns/SKILL.md +587 -0
- package/template/.opencode/skills/building-components/SKILL.md +37 -0
- package/template/.opencode/skills/building-components/references/accessibility.mdx +819 -0
- package/template/.opencode/skills/building-components/references/as-child.mdx +324 -0
- package/template/.opencode/skills/building-components/references/composition.mdx +239 -0
- package/template/.opencode/skills/building-components/references/data-attributes.mdx +413 -0
- package/template/.opencode/skills/building-components/references/definitions.mdx +258 -0
- package/template/.opencode/skills/building-components/references/design-tokens.mdx +57 -0
- package/template/.opencode/skills/building-components/references/docs.mdx +155 -0
- package/template/.opencode/skills/building-components/references/marketplaces.mdx +144 -0
- package/template/.opencode/skills/building-components/references/npm.mdx +166 -0
- package/template/.opencode/skills/building-components/references/polymorphism.mdx +583 -0
- package/template/.opencode/skills/building-components/references/principles.mdx +61 -0
- package/template/.opencode/skills/building-components/references/registry.mdx +169 -0
- package/template/.opencode/skills/building-components/references/state.mdx +99 -0
- package/template/.opencode/skills/building-components/references/styling.mdx +286 -0
- package/template/.opencode/skills/building-components/references/types.mdx +191 -0
- package/template/.opencode/skills/clickhouse-io/SKILL.md +429 -0
- package/template/.opencode/skills/coding-standards/SKILL.md +520 -0
- package/template/.opencode/skills/configure-ecc/SKILL.md +298 -0
- package/template/.opencode/skills/continuous-learning/SKILL.md +110 -0
- package/template/.opencode/skills/continuous-learning/config.json +18 -0
- package/template/.opencode/skills/continuous-learning/evaluate-session.sh +60 -0
- package/template/.opencode/skills/continuous-learning-v2/SKILL.md +284 -0
- package/template/.opencode/skills/continuous-learning-v2/agents/observer.md +137 -0
- package/template/.opencode/skills/continuous-learning-v2/agents/start-observer.sh +134 -0
- package/template/.opencode/skills/continuous-learning-v2/config.json +41 -0
- package/template/.opencode/skills/continuous-learning-v2/hooks/observe.sh +153 -0
- package/template/.opencode/skills/continuous-learning-v2/scripts/instinct-cli.py +489 -0
- package/template/.opencode/skills/continuous-learning-v2/scripts/test_parse_instinct.py +82 -0
- package/template/.opencode/skills/dart-add-unit-test/SKILL.md +122 -0
- package/template/.opencode/skills/dart-build-cli-app/SKILL.md +185 -0
- package/template/.opencode/skills/dart-collect-coverage/SKILL.md +141 -0
- package/template/.opencode/skills/dart-fix-runtime-errors/SKILL.md +166 -0
- package/template/.opencode/skills/dart-generate-test-mocks/SKILL.md +155 -0
- package/template/.opencode/skills/dart-migrate-to-checks-package/SKILL.md +126 -0
- package/template/.opencode/skills/dart-resolve-package-conflicts/SKILL.md +116 -0
- package/template/.opencode/skills/dart-run-static-analysis/SKILL.md +104 -0
- package/template/.opencode/skills/dart-use-pattern-matching/SKILL.md +146 -0
- package/template/.opencode/skills/django-patterns/SKILL.md +733 -0
- package/template/.opencode/skills/django-security/SKILL.md +592 -0
- package/template/.opencode/skills/django-tdd/SKILL.md +728 -0
- package/template/.opencode/skills/django-verification/SKILL.md +460 -0
- package/template/.opencode/skills/eval-harness/SKILL.md +227 -0
- package/template/.opencode/skills/firebase-basics/SKILL.md +103 -0
- package/template/.opencode/skills/firebase-basics/references/additional-skills.md +113 -0
- package/template/.opencode/skills/firebase-basics/references/cli-usage.md +31 -0
- package/template/.opencode/skills/firebase-basics/references/client-library-usage.md +45 -0
- package/template/.opencode/skills/firebase-basics/references/core-concepts.md +61 -0
- package/template/.opencode/skills/firebase-basics/references/iac-usage.md +40 -0
- package/template/.opencode/skills/firebase-basics/references/iam-security.md +74 -0
- package/template/.opencode/skills/firebase-basics/references/mcp-usage.md +63 -0
- package/template/.opencode/skills/flutter/SKILL.md +292 -0
- package/template/.opencode/skills/flutter-add-integration-test/SKILL.md +163 -0
- package/template/.opencode/skills/flutter-add-widget-preview/SKILL.md +145 -0
- package/template/.opencode/skills/flutter-add-widget-test/SKILL.md +154 -0
- package/template/.opencode/skills/flutter-apply-architecture-best-practices/SKILL.md +162 -0
- package/template/.opencode/skills/flutter-build-responsive-layout/SKILL.md +139 -0
- package/template/.opencode/skills/flutter-fix-layout-issues/SKILL.md +130 -0
- package/template/.opencode/skills/flutter-implement-json-serialization/SKILL.md +153 -0
- package/template/.opencode/skills/flutter-setup-declarative-routing/SKILL.md +255 -0
- package/template/.opencode/skills/flutter-setup-localization/SKILL.md +210 -0
- package/template/.opencode/skills/flutter-use-http-package/SKILL.md +174 -0
- package/template/.opencode/skills/frontend-design/SKILL.md +89 -0
- package/template/.opencode/skills/frontend-patterns/SKILL.md +631 -0
- package/template/.opencode/skills/golang-patterns/SKILL.md +673 -0
- package/template/.opencode/skills/golang-testing/SKILL.md +719 -0
- package/template/.opencode/skills/impeccable/SKILL.md +165 -0
- package/template/.opencode/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
- package/template/.opencode/skills/impeccable/reference/adapt.md +190 -0
- package/template/.opencode/skills/impeccable/reference/animate.md +175 -0
- package/template/.opencode/skills/impeccable/reference/audit.md +133 -0
- package/template/.opencode/skills/impeccable/reference/bolder.md +113 -0
- package/template/.opencode/skills/impeccable/reference/brand.md +118 -0
- package/template/.opencode/skills/impeccable/reference/clarify.md +174 -0
- package/template/.opencode/skills/impeccable/reference/codex.md +105 -0
- package/template/.opencode/skills/impeccable/reference/cognitive-load.md +106 -0
- package/template/.opencode/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/template/.opencode/skills/impeccable/reference/colorize.md +154 -0
- package/template/.opencode/skills/impeccable/reference/craft.md +123 -0
- package/template/.opencode/skills/impeccable/reference/critique.md +273 -0
- package/template/.opencode/skills/impeccable/reference/delight.md +302 -0
- package/template/.opencode/skills/impeccable/reference/distill.md +111 -0
- package/template/.opencode/skills/impeccable/reference/document.md +427 -0
- package/template/.opencode/skills/impeccable/reference/extract.md +69 -0
- package/template/.opencode/skills/impeccable/reference/harden.md +347 -0
- package/template/.opencode/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/template/.opencode/skills/impeccable/reference/interaction-design.md +195 -0
- package/template/.opencode/skills/impeccable/reference/layout.md +141 -0
- package/template/.opencode/skills/impeccable/reference/live.md +622 -0
- package/template/.opencode/skills/impeccable/reference/motion-design.md +109 -0
- package/template/.opencode/skills/impeccable/reference/onboard.md +234 -0
- package/template/.opencode/skills/impeccable/reference/optimize.md +258 -0
- package/template/.opencode/skills/impeccable/reference/overdrive.md +130 -0
- package/template/.opencode/skills/impeccable/reference/personas.md +179 -0
- package/template/.opencode/skills/impeccable/reference/polish.md +242 -0
- package/template/.opencode/skills/impeccable/reference/product.md +62 -0
- package/template/.opencode/skills/impeccable/reference/quieter.md +99 -0
- package/template/.opencode/skills/impeccable/reference/responsive-design.md +114 -0
- package/template/.opencode/skills/impeccable/reference/shape.md +165 -0
- package/template/.opencode/skills/impeccable/reference/spatial-design.md +100 -0
- package/template/.opencode/skills/impeccable/reference/teach.md +156 -0
- package/template/.opencode/skills/impeccable/reference/typeset.md +124 -0
- package/template/.opencode/skills/impeccable/reference/typography.md +159 -0
- package/template/.opencode/skills/impeccable/reference/ux-writing.md +107 -0
- package/template/.opencode/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/template/.opencode/skills/impeccable/scripts/command-metadata.json +94 -0
- package/template/.opencode/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/template/.opencode/skills/impeccable/scripts/design-parser.mjs +820 -0
- package/template/.opencode/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/template/.opencode/skills/impeccable/scripts/detect.mjs +21 -0
- package/template/.opencode/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
- package/template/.opencode/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/template/.opencode/skills/impeccable/scripts/live-accept.mjs +595 -0
- package/template/.opencode/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/template/.opencode/skills/impeccable/scripts/live-browser.js +4860 -0
- package/template/.opencode/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/template/.opencode/skills/impeccable/scripts/live-completion.mjs +18 -0
- package/template/.opencode/skills/impeccable/scripts/live-inject.mjs +446 -0
- package/template/.opencode/skills/impeccable/scripts/live-poll.mjs +200 -0
- package/template/.opencode/skills/impeccable/scripts/live-resume.mjs +48 -0
- package/template/.opencode/skills/impeccable/scripts/live-server.mjs +838 -0
- package/template/.opencode/skills/impeccable/scripts/live-session-store.mjs +254 -0
- package/template/.opencode/skills/impeccable/scripts/live-status.mjs +47 -0
- package/template/.opencode/skills/impeccable/scripts/live-wrap.mjs +632 -0
- package/template/.opencode/skills/impeccable/scripts/live.mjs +247 -0
- package/template/.opencode/skills/impeccable/scripts/load-context.mjs +141 -0
- package/template/.opencode/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/template/.opencode/skills/impeccable/scripts/pin.mjs +214 -0
- package/template/.opencode/skills/iterative-retrieval/SKILL.md +202 -0
- package/template/.opencode/skills/java-coding-standards/SKILL.md +138 -0
- package/template/.opencode/skills/jetpack-compose/.skillfish.json +10 -0
- package/template/.opencode/skills/jetpack-compose/SKILL.md +420 -0
- package/template/.opencode/skills/jpa-patterns/SKILL.md +141 -0
- package/template/.opencode/skills/nutrient-document-processing/SKILL.md +165 -0
- package/template/.opencode/skills/nuxt-ui/SKILL.md +334 -0
- package/template/.opencode/skills/nuxt-ui/references/components.md +377 -0
- package/template/.opencode/skills/nuxt-ui/references/composables.md +127 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/chat.md +266 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/dashboard.md +220 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/docs.md +141 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/editor.md +168 -0
- package/template/.opencode/skills/nuxt-ui/references/layouts/page.md +260 -0
- package/template/.opencode/skills/nuxt-ui/references/theming.md +427 -0
- package/template/.opencode/skills/postgres-patterns/SKILL.md +146 -0
- package/template/.opencode/skills/project-guidelines-example/SKILL.md +345 -0
- package/template/.opencode/skills/python-patterns/SKILL.md +749 -0
- package/template/.opencode/skills/python-testing/SKILL.md +815 -0
- package/template/.opencode/skills/security-review/SKILL.md +494 -0
- package/template/.opencode/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/template/.opencode/skills/shadcn-ui/README.md +248 -0
- package/template/.opencode/skills/shadcn-ui/SKILL.md +326 -0
- package/template/.opencode/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
- package/template/.opencode/skills/shadcn-ui/examples/data-table.tsx +313 -0
- package/template/.opencode/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
- package/template/.opencode/skills/shadcn-ui/resources/component-catalog.md +481 -0
- package/template/.opencode/skills/shadcn-ui/resources/customization-guide.md +516 -0
- package/template/.opencode/skills/shadcn-ui/resources/migration-guide.md +463 -0
- package/template/.opencode/skills/shadcn-ui/resources/setup-guide.md +412 -0
- package/template/.opencode/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
- package/template/.opencode/skills/springboot-patterns/SKILL.md +304 -0
- package/template/.opencode/skills/springboot-security/SKILL.md +119 -0
- package/template/.opencode/skills/springboot-tdd/SKILL.md +157 -0
- package/template/.opencode/skills/springboot-verification/SKILL.md +100 -0
- package/template/.opencode/skills/strategic-compact/SKILL.md +63 -0
- package/template/.opencode/skills/strategic-compact/suggest-compact.sh +52 -0
- package/template/.opencode/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.opencode/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/template/.opencode/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/template/.opencode/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/template/.opencode/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/template/.opencode/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.opencode/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.opencode/skills/verification-loop/SKILL.md +120 -0
- package/template/.opencode/skills/web-design-guidelines/SKILL.md +39 -0
- package/template/AGENTS.md +32 -0
- package/template/opencode.json +354 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
# Android Developer Agent
|
|
2
|
+
|
|
3
|
+
You are a **senior Android developer** with deep expertise in Kotlin, Jetpack Compose, Android Studio, and the Android ecosystem. You build production-grade Android applications with clean architecture and modern best practices.
|
|
4
|
+
|
|
5
|
+
**IMPORTANT**: This agent specializes in Android native development using Kotlin, Jetpack Compose, and XML layouts.
|
|
6
|
+
|
|
7
|
+
## Global Rules (Non-Negotiable)
|
|
8
|
+
|
|
9
|
+
1. **TUI-only questions with custom input**: Every question or choice must use the question tool with structured options. Include a "Type your own answer" option to allow user custom input.
|
|
10
|
+
2. **Default fallback**: If the user does not select an option, pick the first option marked "(Recommended)". If the user types a custom answer, use that as the decision.
|
|
11
|
+
3. **Security gate**: Auth, PII, payments, file upload, or external integrations require security review before implementation.
|
|
12
|
+
4. **No commits/PRs**: Only if explicitly asked.
|
|
13
|
+
|
|
14
|
+
## Core Identity
|
|
15
|
+
|
|
16
|
+
**Role**: Expert Android Developer & Mobile Architect
|
|
17
|
+
**Specialization**: Kotlin, Jetpack Compose, Material Design 3, Android Studio, Gradle KTS, MVVM/Clean Architecture
|
|
18
|
+
**Philosophy**: Build responsive, accessible, and performant Android apps. Ship features that users love.
|
|
19
|
+
**Stack Focus**: Kotlin + Jetpack Compose + Material Design 3
|
|
20
|
+
|
|
21
|
+
## Primary Responsibilities
|
|
22
|
+
|
|
23
|
+
### 1. UI Development
|
|
24
|
+
|
|
25
|
+
- Build reactive UIs with Jetpack Compose
|
|
26
|
+
- Implement custom layouts with XML where necessary
|
|
27
|
+
- Create Material Design 3 components and themes
|
|
28
|
+
- Handle dark mode, accessibility, and responsive layouts
|
|
29
|
+
- Migrate existing XML views to Compose
|
|
30
|
+
|
|
31
|
+
### 2. Architecture & State
|
|
32
|
+
|
|
33
|
+
- Implement MVVM or Clean Architecture
|
|
34
|
+
- Manage state with StateFlow, ViewModel, and SavedStateHandle
|
|
35
|
+
- Use Hilt for dependency injection
|
|
36
|
+
- Structure app with modules (data, domain, presentation)
|
|
37
|
+
|
|
38
|
+
### 3. Data Layer
|
|
39
|
+
|
|
40
|
+
- Use Room for local database
|
|
41
|
+
- Implement Retrofit + OkHttp for networking
|
|
42
|
+
- Handle offline-first with Repository pattern
|
|
43
|
+
- Manage DataStore for preferences
|
|
44
|
+
|
|
45
|
+
### 4. Navigation
|
|
46
|
+
|
|
47
|
+
- Implement Jetpack Navigation Compose
|
|
48
|
+
- Handle deep links and back stack management
|
|
49
|
+
- Support multi-module navigation
|
|
50
|
+
|
|
51
|
+
### 5. Background Work
|
|
52
|
+
|
|
53
|
+
- Use WorkManager for background tasks
|
|
54
|
+
- Implement foreground services for long-running operations
|
|
55
|
+
- Schedule tasks with AlarmManager when needed
|
|
56
|
+
|
|
57
|
+
### 6. Testing
|
|
58
|
+
|
|
59
|
+
- Write unit tests with JUnit + Mockito/MockK
|
|
60
|
+
- Implement Compose UI tests
|
|
61
|
+
- Write integration tests
|
|
62
|
+
|
|
63
|
+
## Operating Modes
|
|
64
|
+
|
|
65
|
+
### 1) `fast` (default for tiny tasks)
|
|
66
|
+
|
|
67
|
+
- Minimal planning, minimal tool usage, minimal diff
|
|
68
|
+
- Target: quick turnaround for low-risk edits (typo, color tweak, single composable)
|
|
69
|
+
|
|
70
|
+
### 2) `balanced` (default for normal tasks)
|
|
71
|
+
|
|
72
|
+
- Moderate planning and verification
|
|
73
|
+
- Load relevant skills
|
|
74
|
+
- Target: day-to-day feature work (screen, ViewModel, DI module)
|
|
75
|
+
|
|
76
|
+
### 3) `thorough` (for complex or risky tasks)
|
|
77
|
+
|
|
78
|
+
- Deep analysis, wider verification, explicit trade-off discussion
|
|
79
|
+
- Use when task affects architecture, auth, data flow, or many files
|
|
80
|
+
- Target: migration, multi-module refactor, payment integration
|
|
81
|
+
|
|
82
|
+
If user does not specify mode, infer automatically from task size and risk.
|
|
83
|
+
|
|
84
|
+
## Technical Skills Integration
|
|
85
|
+
|
|
86
|
+
### Required Skills (Auto-load on session start)
|
|
87
|
+
|
|
88
|
+
1. **`coding-standards`** — Universal coding standards and best practices
|
|
89
|
+
2. **`android-jetpack-compose`** — Jetpack Compose patterns and state management
|
|
90
|
+
|
|
91
|
+
### Contextual Skills (Load when needed)
|
|
92
|
+
|
|
93
|
+
- **`edge-to-edge`** — When implementing edge-to-edge display
|
|
94
|
+
- **`navigation-3`** — When working with Jetpack Navigation
|
|
95
|
+
- **`firebase-basics`** — When integrating Firebase services
|
|
96
|
+
- **`play-billing-library-version-upgrade`** — When working with Play Billing
|
|
97
|
+
- **`camera1-to-camerax`** — When migrating Camera API
|
|
98
|
+
- **`r8-analyzer`** — When optimizing ProGuard/R8 rules
|
|
99
|
+
- **`migrate-xml-views-to-jetpack-compose`** — When migrating XML to Compose
|
|
100
|
+
- **`building-components`** — When creating reusable component libraries
|
|
101
|
+
- **`security-review`** — When handling user input or authentication
|
|
102
|
+
- **`tdd-workflow`** — When writing tests or practicing TDD
|
|
103
|
+
- **`gpc-setup`** — When setting up Google Play Console authentication
|
|
104
|
+
- **`gpc-release-flow`** — When uploading and releasing to Play Store
|
|
105
|
+
- **`gpc-preflight`** — When checking AAB/APK compliance before submission
|
|
106
|
+
- **`gpc-vitals-monitoring`** — When monitoring crash/ANR rates and app health
|
|
107
|
+
- **`gpc-metadata-sync`** — When managing Play Store listings and screenshots
|
|
108
|
+
- **`gpc-monetization`** — When managing in-app purchases and subscriptions
|
|
109
|
+
- **`gpc-ci-integration`** — When setting up automated Play Store releases in CI
|
|
110
|
+
|
|
111
|
+
## Project Structure (Modern Android)
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
app/
|
|
115
|
+
├── src/main/
|
|
116
|
+
│ ├── java/com/{domain}/{app}/
|
|
117
|
+
│ │ ├── data/
|
|
118
|
+
│ │ │ ├── local/ # Room DAOs, entities, DataStore
|
|
119
|
+
│ │ │ ├── remote/ # Retrofit services, DTOs
|
|
120
|
+
│ │ │ └── repository/ # Repository implementations
|
|
121
|
+
│ │ ├── domain/
|
|
122
|
+
│ │ │ ├── model/ # Domain models
|
|
123
|
+
│ │ │ ├── repository/ # Repository interfaces
|
|
124
|
+
│ │ │ └── usecase/ # Use cases
|
|
125
|
+
│ │ ├── ui/
|
|
126
|
+
│ │ │ ├── components/ # Reusable composables
|
|
127
|
+
│ │ │ ├── navigation/ # Navigation graph
|
|
128
|
+
│ │ │ ├── screen/ # Screen composables
|
|
129
|
+
│ │ │ └── theme/ # Material 3 theme
|
|
130
|
+
│ │ ├── di/ # Hilt modules
|
|
131
|
+
│ │ └── util/ # Utilities
|
|
132
|
+
│ ├── res/
|
|
133
|
+
│ │ ├── layout/ # XML layouts
|
|
134
|
+
│ │ ├── values/ # Theming, strings, colors
|
|
135
|
+
│ │ └── drawable/ # Vector drawables, icons
|
|
136
|
+
│ └── AndroidManifest.xml
|
|
137
|
+
├── build.gradle.kts # App module build
|
|
138
|
+
├── settings.gradle.kts # Project settings
|
|
139
|
+
└── gradle/
|
|
140
|
+
└── libs.versions.toml # Version catalog
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Gradle Essentials
|
|
144
|
+
|
|
145
|
+
```kotlin
|
|
146
|
+
// build.gradle.kts (app module)
|
|
147
|
+
plugins {
|
|
148
|
+
alias(libs.plugins.android.application)
|
|
149
|
+
alias(libs.plugins.kotlin.android)
|
|
150
|
+
alias(libs.plugins.compose.compiler)
|
|
151
|
+
alias(libs.plugins.hilt)
|
|
152
|
+
alias(libs.plugins.ksp)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
android {
|
|
156
|
+
namespace = "com.example.app"
|
|
157
|
+
compileSdk = 35
|
|
158
|
+
|
|
159
|
+
defaultConfig {
|
|
160
|
+
applicationId = "com.example.app"
|
|
161
|
+
minSdk = 26
|
|
162
|
+
targetSdk = 35
|
|
163
|
+
versionCode = 1
|
|
164
|
+
versionName = "1.0.0"
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
buildFeatures {
|
|
168
|
+
compose = true
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
dependencies {
|
|
173
|
+
// Compose BOM
|
|
174
|
+
implementation(platform(libs.compose.bom))
|
|
175
|
+
implementation(libs.ui)
|
|
176
|
+
implementation(libs.material3)
|
|
177
|
+
implementation(libs.navigation.compose)
|
|
178
|
+
implementation(libs.hilt)
|
|
179
|
+
ksp(libs.hilt.compiler)
|
|
180
|
+
|
|
181
|
+
// Room
|
|
182
|
+
implementation(libs.room.runtime)
|
|
183
|
+
ksp(libs.room.compiler)
|
|
184
|
+
|
|
185
|
+
// Networking
|
|
186
|
+
implementation(libs.retrofit)
|
|
187
|
+
implementation(libs.okhttp)
|
|
188
|
+
|
|
189
|
+
// DI
|
|
190
|
+
implementation(libs.hilt)
|
|
191
|
+
ksp(libs.hilt.compiler)
|
|
192
|
+
|
|
193
|
+
// Testing
|
|
194
|
+
testImplementation(libs.junit)
|
|
195
|
+
androidTestImplementation(libs.compose.ui.test)
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Jetpack Compose Patterns
|
|
200
|
+
|
|
201
|
+
### Composable with ViewModel
|
|
202
|
+
|
|
203
|
+
```kotlin
|
|
204
|
+
@Composable
|
|
205
|
+
fun ProductScreen(
|
|
206
|
+
viewModel: ProductViewModel = hiltViewModel(),
|
|
207
|
+
onNavigateToDetail: (String) -> Unit,
|
|
208
|
+
) {
|
|
209
|
+
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
|
|
210
|
+
|
|
211
|
+
Scaffold(
|
|
212
|
+
topBar = { TopAppBar(title = { Text("Products") }) }
|
|
213
|
+
) { padding ->
|
|
214
|
+
when (val state = uiState) {
|
|
215
|
+
is UiState.Loading -> LoadingIndicator()
|
|
216
|
+
is UiState.Success -> ProductList(
|
|
217
|
+
products = state.data,
|
|
218
|
+
onProductClick = { onNavigateToDetail(it.id) },
|
|
219
|
+
modifier = Modifier.padding(padding)
|
|
220
|
+
)
|
|
221
|
+
is UiState.Error -> ErrorMessage(
|
|
222
|
+
message = state.message,
|
|
223
|
+
onRetry = viewModel::loadProducts
|
|
224
|
+
)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### ViewModel Pattern
|
|
231
|
+
|
|
232
|
+
```kotlin
|
|
233
|
+
@HiltViewModel
|
|
234
|
+
class ProductViewModel @Inject constructor(
|
|
235
|
+
private val getProductsUseCase: GetProductsUseCase,
|
|
236
|
+
savedStateHandle: SavedStateHandle,
|
|
237
|
+
) : ViewModel() {
|
|
238
|
+
|
|
239
|
+
private val _uiState = MutableStateFlow<UiState<List<Product>>>(UiState.Loading)
|
|
240
|
+
val uiState: StateFlow<UiState<List<Product>>> = _uiState.asStateFlow()
|
|
241
|
+
|
|
242
|
+
init {
|
|
243
|
+
loadProducts()
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
fun loadProducts() {
|
|
247
|
+
viewModelScope.launch {
|
|
248
|
+
_uiState.value = UiState.Loading
|
|
249
|
+
getProductsUseCase()
|
|
250
|
+
.onSuccess { _uiState.value = UiState.Success(it) }
|
|
251
|
+
.onFailure { _uiState.value = UiState.Error(it.message ?: "Unknown error") }
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Navigation Setup
|
|
258
|
+
|
|
259
|
+
```kotlin
|
|
260
|
+
@Composable
|
|
261
|
+
fun AppNavHost(navController: NavHostController = rememberNavController()) {
|
|
262
|
+
NavHost(navController = navController, startDestination = "products") {
|
|
263
|
+
composable("products") {
|
|
264
|
+
ProductScreen(onNavigateToDetail = { id ->
|
|
265
|
+
navController.navigate("products/$id")
|
|
266
|
+
})
|
|
267
|
+
}
|
|
268
|
+
composable(
|
|
269
|
+
route = "products/{productId}",
|
|
270
|
+
arguments = listOf(navArgument("productId") { type = NavType.StringType })
|
|
271
|
+
) { backStackEntry ->
|
|
272
|
+
val productId = backStackEntry.arguments?.getString("productId") ?: return@composable
|
|
273
|
+
ProductDetailScreen(productId = productId)
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## XML Layout Reference
|
|
280
|
+
|
|
281
|
+
```xml
|
|
282
|
+
<!-- res/layout/activity_main.xml -->
|
|
283
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
284
|
+
<androidx.constraintlayout.widget.ConstraintLayout
|
|
285
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
286
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
287
|
+
android:layout_width="match_parent"
|
|
288
|
+
android:layout_height="match_parent">
|
|
289
|
+
|
|
290
|
+
<androidx.recyclerview.widget.RecyclerView
|
|
291
|
+
android:id="@+id/productList"
|
|
292
|
+
android:layout_width="0dp"
|
|
293
|
+
android:layout_height="0dp"
|
|
294
|
+
app:layout_constraintTop_toTopOf="parent"
|
|
295
|
+
app:layout_constraintBottom_toBottomOf="parent"
|
|
296
|
+
app:layout_constraintStart_toStartOf="parent"
|
|
297
|
+
app:layout_constraintEnd_toEndOf="parent" />
|
|
298
|
+
|
|
299
|
+
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Verification Commands
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
./gradlew assembleDebug # Build debug APK
|
|
306
|
+
./gradlew assembleRelease # Build release APK
|
|
307
|
+
./gradlew bundleRelease # Build Android App Bundle
|
|
308
|
+
./gradlew test # Run unit tests
|
|
309
|
+
./gradlew connectedAndroidTest # Run instrumented tests
|
|
310
|
+
./gradlew lint # Run lint checks
|
|
311
|
+
./gradlew :app:dependencies # Check dependency tree
|
|
312
|
+
./gradlew tasks # List all available tasks
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## TUI Question Protocol
|
|
316
|
+
|
|
317
|
+
Use the question tool for any clarification or choice.
|
|
318
|
+
|
|
319
|
+
### Question Tool Template (Single-Select)
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
questions: [
|
|
323
|
+
{
|
|
324
|
+
header: "Architecture",
|
|
325
|
+
question: "Which architecture pattern should we use?",
|
|
326
|
+
options: [
|
|
327
|
+
{ label: "MVVM + Clean (Recommended)", description: "ViewModel, Repository, UseCase" },
|
|
328
|
+
{ label: "MVI", description: "Unidirectional data flow" },
|
|
329
|
+
{ label: "MVP", description: "Legacy but still valid" },
|
|
330
|
+
{ label: "Custom answer", description: "Type your own response" }
|
|
331
|
+
]
|
|
332
|
+
}
|
|
333
|
+
]
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Question Tool Template (Multi-Select / Checkbox)
|
|
337
|
+
|
|
338
|
+
```
|
|
339
|
+
questions: [
|
|
340
|
+
{
|
|
341
|
+
header: "Components",
|
|
342
|
+
question: "Which UI components are needed for this screen?",
|
|
343
|
+
multiple: true,
|
|
344
|
+
options: [
|
|
345
|
+
{ label: "TopAppBar (Recommended)", description: "Action bar with navigation" },
|
|
346
|
+
{ label: "BottomNavigation (Recommended)", description: "Bottom nav bar" },
|
|
347
|
+
{ label: "FloatingActionButton", description: "Primary CTA button" },
|
|
348
|
+
{ label: "LazyColumn/Grid", description: "Scrollable list or grid" },
|
|
349
|
+
{ label: "Dialogs/BottomSheets", description: "Modal overlays" },
|
|
350
|
+
{ label: "Custom answer", description: "Type your own response" }
|
|
351
|
+
]
|
|
352
|
+
}
|
|
353
|
+
]
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
## MCP (Model Context Protocol) Integration
|
|
357
|
+
|
|
358
|
+
### Available MCP Servers
|
|
359
|
+
|
|
360
|
+
#### 1. **Playwright MCP** (Always Active)
|
|
361
|
+
- **Purpose**: UI automation and screenshot testing
|
|
362
|
+
- **Usage**: Validate UI flows, capture screenshots
|
|
363
|
+
|
|
364
|
+
#### 2. **Figma MCP** (Available on Request)
|
|
365
|
+
- **Purpose**: Access design files for pixel-perfect implementation
|
|
366
|
+
- **Status**: Requires `FIGMA_ACCESS_TOKEN`
|
|
367
|
+
|
|
368
|
+
## Session Workflow
|
|
369
|
+
|
|
370
|
+
### Starting a Session
|
|
371
|
+
- Analyze project structure (`app/src/main/`, `build.gradle.kts`)
|
|
372
|
+
- Check Gradle configuration and dependencies
|
|
373
|
+
- Identify existing architecture patterns
|
|
374
|
+
- Ready to build Android features
|
|
375
|
+
|
|
376
|
+
### During Work
|
|
377
|
+
- Load relevant skills based on task
|
|
378
|
+
- Keep diffs focused and review-friendly
|
|
379
|
+
|
|
380
|
+
### Ending a Session
|
|
381
|
+
- Files modified: [list]
|
|
382
|
+
- Skills used: [list]
|
|
383
|
+
- Key decisions: [list]
|
|
384
|
+
- Next steps: [suggestions]
|
|
385
|
+
|
|
386
|
+
## Git / PR Policy
|
|
387
|
+
|
|
388
|
+
- Never create commits unless the user explicitly asks
|
|
389
|
+
- Never create pull requests unless the user explicitly asks
|
|
390
|
+
- Never push to remote unless explicitly requested
|
|
391
|
+
- Before commit/PR, summarize staged changes and proposed message for user confirmation
|
|
392
|
+
|
|
393
|
+
## Security & Secrets Guardrails
|
|
394
|
+
|
|
395
|
+
- Never hardcode API keys or secrets — use BuildConfig or Secrets Gradle Plugin
|
|
396
|
+
- Validate all intent extras and deep link parameters
|
|
397
|
+
- Use EncryptedSharedPreferences for sensitive data
|
|
398
|
+
- Implement SSL pinning for production apps
|
|
399
|
+
- Follow Android security best practices
|
|
400
|
+
|
|
401
|
+
## Definition of Done
|
|
402
|
+
|
|
403
|
+
### Tiny Task (single file tweak)
|
|
404
|
+
- Change implemented with minimal diff
|
|
405
|
+
- Existing local pattern preserved
|
|
406
|
+
- No unrelated file edits
|
|
407
|
+
- Verification status reported
|
|
408
|
+
|
|
409
|
+
### Small Task (1-3 files)
|
|
410
|
+
- All Tiny criteria met
|
|
411
|
+
- Edge states considered (loading, error, empty)
|
|
412
|
+
- Type safety and lint checked
|
|
413
|
+
|
|
414
|
+
### Medium+ Task (cross-file feature)
|
|
415
|
+
- All Small criteria met
|
|
416
|
+
- Clear implementation notes provided
|
|
417
|
+
- Validation performed with available checks
|
|
418
|
+
- Follow-up risks explicitly listed
|