solmate-skills 1.0.2 → 2.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/AGENTS.md +49 -15
- package/CLAUDE.md +77 -0
- package/README.md +114 -60
- package/{business-plan → docs-business}/SKILL.md +8 -8
- package/{dev-docs → docs-dev}/SKILL.md +9 -6
- package/{pitch-deck → docs-pitch}/SKILL.md +8 -35
- package/{plan-docs → docs-plan}/SKILL.md +3 -5
- package/ext-awesome-design/SKILL.md +19 -0
- package/ext-k-skill/SKILL.md +21 -0
- package/hooks/install.sh +131 -0
- package/hooks/suggest-skills.sh +94 -0
- package/hooks/watch-files.sh +86 -0
- package/manage-decisions/SKILL.md +215 -0
- package/package.json +1 -1
- package/{dev-conventions → rules-dev}/SKILL.md +2 -2
- package/{manage-docs → rules-docs}/SKILL.md +14 -10
- package/{product-workflow → rules-product}/SKILL.md +90 -100
- package/{react-components → rules-react}/README.md +1 -1
- package/rules-react/SKILL.md +39 -0
- package/rules-react/package.json +15 -0
- package/{implementation-workflow → rules-workflow}/SKILL.md +2 -2
- package/{obsidian-sync → tools-obsidian}/SKILL.md +2 -2
- package/{shadcn-ui → tools-shadcn}/SKILL.md +1 -1
- package/verify-code/SKILL.md +134 -0
- package/verify-docs/SKILL.md +3 -2
- package/verify-performance/SKILL.md +221 -0
- package/verify-security/SKILL.md +205 -0
- package/design-md/README.md +0 -34
- package/design-md/SKILL.md +0 -172
- package/design-md/examples/DESIGN.md +0 -154
- package/enhance-prompt/README.md +0 -34
- package/enhance-prompt/SKILL.md +0 -204
- package/enhance-prompt/references/KEYWORDS.md +0 -114
- package/react-components/SKILL.md +0 -47
- package/react-components/package.json +0 -16
- package/remotion/README.md +0 -105
- package/remotion/SKILL.md +0 -393
- package/remotion/examples/WalkthroughComposition.tsx +0 -78
- package/remotion/examples/screens.json +0 -56
- package/remotion/resources/composition-checklist.md +0 -124
- package/remotion/resources/screen-slide-template.tsx +0 -123
- package/remotion/scripts/download-stitch-asset.sh +0 -38
- package/stitch-loop/README.md +0 -54
- package/stitch-loop/SKILL.md +0 -203
- package/stitch-loop/examples/SITE.md +0 -73
- package/stitch-loop/examples/next-prompt.md +0 -25
- package/stitch-loop/resources/baton-schema.md +0 -61
- package/stitch-loop/resources/site-template.md +0 -104
- /package/{awesome-design-md → ext-awesome-design}/.github/FUNDING.yml +0 -0
- /package/{awesome-design-md → ext-awesome-design}/.github/ISSUE_TEMPLATE/design-md-request.yml +0 -0
- /package/{awesome-design-md → ext-awesome-design}/CONTRIBUTING.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/LICENSE +0 -0
- /package/{awesome-design-md → ext-awesome-design}/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airbnb/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airbnb/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airbnb/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airbnb/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airtable/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airtable/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airtable/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/airtable/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/apple/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/apple/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/apple/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/apple/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/bmw/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/bmw/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/bmw/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/bmw/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cal/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cal/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cal/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cal/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/claude/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/claude/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/claude/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/claude/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clay/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clay/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clay/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clay/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clickhouse/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clickhouse/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clickhouse/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/clickhouse/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cohere/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cohere/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cohere/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cohere/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/coinbase/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/coinbase/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/coinbase/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/coinbase/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/composio/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/composio/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/composio/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/composio/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cursor/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cursor/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cursor/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/cursor/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/elevenlabs/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/elevenlabs/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/elevenlabs/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/elevenlabs/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/expo/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/expo/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/expo/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/expo/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/figma/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/figma/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/figma/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/figma/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/framer/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/framer/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/framer/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/framer/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/hashicorp/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/hashicorp/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/hashicorp/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/hashicorp/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ibm/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ibm/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ibm/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ibm/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/intercom/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/intercom/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/intercom/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/intercom/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/kraken/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/kraken/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/kraken/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/kraken/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/linear.app/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/linear.app/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/linear.app/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/linear.app/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/lovable/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/lovable/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/lovable/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/lovable/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/minimax/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/minimax/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/minimax/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/minimax/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mintlify/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mintlify/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mintlify/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mintlify/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/miro/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/miro/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/miro/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/miro/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mistral.ai/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mistral.ai/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mistral.ai/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mistral.ai/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mongodb/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mongodb/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mongodb/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/mongodb/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/notion/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/notion/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/notion/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/notion/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/nvidia/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/nvidia/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/nvidia/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/nvidia/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ollama/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ollama/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ollama/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/ollama/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/opencode.ai/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/opencode.ai/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/opencode.ai/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/opencode.ai/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/pinterest/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/pinterest/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/pinterest/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/pinterest/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/posthog/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/posthog/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/posthog/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/posthog/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/raycast/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/raycast/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/raycast/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/raycast/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/replicate/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/replicate/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/replicate/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/replicate/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/resend/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/resend/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/resend/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/resend/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/revolut/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/revolut/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/revolut/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/revolut/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/runwayml/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/runwayml/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/runwayml/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/runwayml/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sanity/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sanity/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sanity/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sanity/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sentry/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sentry/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sentry/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/sentry/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spacex/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spacex/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spacex/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spacex/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spotify/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spotify/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spotify/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/spotify/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/stripe/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/stripe/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/stripe/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/stripe/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/supabase/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/supabase/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/supabase/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/supabase/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/superhuman/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/superhuman/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/superhuman/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/superhuman/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/together.ai/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/together.ai/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/together.ai/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/together.ai/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/uber/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/uber/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/uber/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/uber/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/vercel/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/vercel/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/vercel/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/vercel/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/voltagent/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/voltagent/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/voltagent/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/voltagent/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/warp/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/warp/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/warp/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/warp/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/webflow/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/webflow/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/webflow/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/webflow/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/wise/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/wise/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/wise/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/wise/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/x.ai/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/x.ai/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/x.ai/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/x.ai/preview.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/zapier/DESIGN.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/zapier/README.md +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/zapier/preview-dark.html +0 -0
- /package/{awesome-design-md → ext-awesome-design}/design-md/zapier/preview.html +0 -0
- /package/{k-skill → ext-k-skill}/.changeset/config.json +0 -0
- /package/{k-skill → ext-k-skill}/.github/release-please/python-config.json +0 -0
- /package/{k-skill → ext-k-skill}/.github/release-please/python-manifest.json +0 -0
- /package/{k-skill → ext-k-skill}/.github/workflows/ci.yml +0 -0
- /package/{k-skill → ext-k-skill}/.github/workflows/release-npm.yml +0 -0
- /package/{k-skill → ext-k-skill}/.github/workflows/release-python.yml +0 -0
- /package/{k-skill → ext-k-skill}/AGENTS.md +0 -0
- /package/{k-skill → ext-k-skill}/CLAUDE.md +0 -0
- /package/{k-skill → ext-k-skill}/LICENSE +0 -0
- /package/{k-skill → ext-k-skill}/README.md +0 -0
- /package/{k-skill → ext-k-skill}/blue-ribbon-nearby/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/coupang-product-search/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/daiso-product-search/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/delivery-tracking/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/assets/k-skill-thumbnail.png +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/blue-ribbon-nearby.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/coupang-product-search.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/daiso-product-search.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/delivery-tracking.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/fine-dust-location.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/hwp.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/k-skill-proxy.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/kakao-bar-nearby.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/kakaotalk-mac.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/kbo-results.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/kleague-results.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/korean-law-search.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/ktx-booking.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/lotto-results.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/seoul-subway-arrival.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/srt-booking.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/toss-securities.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/used-car-price-search.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/features/zipcode-search.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/install.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/releasing.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/roadmap.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/security-and-secrets.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/setup.md +0 -0
- /package/{k-skill → ext-k-skill}/docs/sources.md +0 -0
- /package/{k-skill → ext-k-skill}/ecosystem.config.cjs +0 -0
- /package/{k-skill → ext-k-skill}/examples/secrets.env.example +0 -0
- /package/{k-skill → ext-k-skill}/fine-dust-location/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/hwp/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/k-skill-setup/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/kakao-bar-nearby/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/kakaotalk-mac/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/kbo-results/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/kleague-results/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/korean-law-search/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/ktx-booking/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/lotto-results/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/src/parse.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/test/fixtures/restaurants-map.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/test/fixtures/search-zone.html +0 -0
- /package/{k-skill → ext-k-skill}/packages/blue-ribbon-nearby/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/src/parse.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/test/fixtures/online-stock.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/test/fixtures/search-goods.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/test/fixtures/store-detail.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/test/fixtures/store-pickup-stock.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/test/fixtures/store-search.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/daiso-product-search/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/src/parse.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/test/fixtures/latest-result.html +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/test/fixtures/round-1216.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-lotto/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-skill-proxy/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-skill-proxy/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-skill-proxy/src/airkorea.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-skill-proxy/src/server.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-skill-proxy/test/airkorea.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/k-skill-proxy/test/server.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/src/parse.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/fixtures/anchor-panel.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/fixtures/anchor-search.html +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/fixtures/bar-search.html +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/fixtures/closed-bar-panel.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/fixtures/non-bar-panel.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/fixtures/open-bar-panel.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kakao-bar-nearby/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/src/parse.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/test/fixtures/schedule-kleague1-2026-03.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/test/fixtures/standings-kleague1-2026.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/kleague-results/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/toss-securities/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/toss-securities/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/toss-securities/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/toss-securities/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/toss-securities/src/parse.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/toss-securities/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/CHANGELOG.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/README.md +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/package.json +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/src/index.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/src/providers/sk-tagobuy.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/src/search.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/src/util.js +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/test/fixtures/tb-empty.html +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/test/fixtures/tb-page.html +0 -0
- /package/{k-skill → ext-k-skill}/packages/used-car-price-search/test/index.test.js +0 -0
- /package/{k-skill → ext-k-skill}/python-packages/README.md +0 -0
- /package/{k-skill → ext-k-skill}/scripts/check-setup.sh +0 -0
- /package/{k-skill → ext-k-skill}/scripts/fine_dust.py +0 -0
- /package/{k-skill → ext-k-skill}/scripts/fixtures/delivery-tracking-public-provenance.json +0 -0
- /package/{k-skill → ext-k-skill}/scripts/fixtures/delivery-tracking-public-samples.json +0 -0
- /package/{k-skill → ext-k-skill}/scripts/fixtures/fine-dust-measurements.json +0 -0
- /package/{k-skill → ext-k-skill}/scripts/fixtures/fine-dust-stations.json +0 -0
- /package/{k-skill → ext-k-skill}/scripts/ktx_booking.py +0 -0
- /package/{k-skill → ext-k-skill}/scripts/run-k-skill-proxy.sh +0 -0
- /package/{k-skill → ext-k-skill}/scripts/skill-docs.test.js +0 -0
- /package/{k-skill → ext-k-skill}/scripts/test_fine_dust.py +0 -0
- /package/{k-skill → ext-k-skill}/scripts/test_ktx_booking.py +0 -0
- /package/{k-skill → ext-k-skill}/scripts/validate-skills.sh +0 -0
- /package/{k-skill → ext-k-skill}/seoul-subway-arrival/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/srt-booking/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/toss-securities/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/tsconfig.json +0 -0
- /package/{k-skill → ext-k-skill}/used-car-price-search/SKILL.md +0 -0
- /package/{k-skill → ext-k-skill}/zipcode-search/SKILL.md +0 -0
- /package/{react-components → rules-react}/examples/gold-standard-card.tsx +0 -0
- /package/{react-components → rules-react}/resources/architecture-checklist.md +0 -0
- /package/{react-components → rules-react}/resources/component-template.tsx +0 -0
- /package/{react-components → rules-react}/resources/stitch-api-reference.md +0 -0
- /package/{react-components → rules-react}/resources/style-guide.json +0 -0
- /package/{react-components → rules-react}/scripts/fetch-stitch.sh +0 -0
- /package/{react-components → rules-react}/scripts/validate.js +0 -0
- /package/{shadcn-ui → tools-shadcn}/README.md +0 -0
- /package/{shadcn-ui → tools-shadcn}/examples/auth-layout.tsx +0 -0
- /package/{shadcn-ui → tools-shadcn}/examples/data-table.tsx +0 -0
- /package/{shadcn-ui → tools-shadcn}/examples/form-pattern.tsx +0 -0
- /package/{shadcn-ui → tools-shadcn}/resources/component-catalog.md +0 -0
- /package/{shadcn-ui → tools-shadcn}/resources/customization-guide.md +0 -0
- /package/{shadcn-ui → tools-shadcn}/resources/migration-guide.md +0 -0
- /package/{shadcn-ui → tools-shadcn}/resources/setup-guide.md +0 -0
- /package/{shadcn-ui → tools-shadcn}/scripts/verify-setup.sh +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ext-k-skill
|
|
3
|
+
description: External collection of Korean-specific specialized skills. Includes law search, delivery tracking, transportation booking (KTX/SRT), and more. Use this for tasks requiring localized Korean data or services.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# External K-Skill Library
|
|
7
|
+
|
|
8
|
+
This is a comprehensive collection of **Korean localized tools and services**. It provides specialized logic for interacting with various Korean platforms and data sources.
|
|
9
|
+
|
|
10
|
+
> **Source of Truth**: Refer to [README.md](./README.md) and the individual package directories for detailed documentation on each sub-skill.
|
|
11
|
+
|
|
12
|
+
## 1. Included Sub-Skills
|
|
13
|
+
- **Public Services**: Law search (`korean-law-search`), fine dust location (`fine-dust-location`).
|
|
14
|
+
- **Logistics & Transport**: Delivery tracking (`delivery-tracking`), KTX/SRT booking.
|
|
15
|
+
- **Ecommerce**: Coupang/Daiso product search.
|
|
16
|
+
- **Leisure**: KBO/K-League results, Lotto, neighborhood bar search.
|
|
17
|
+
|
|
18
|
+
## 2. Usage Instructions
|
|
19
|
+
1. Navigate to the specific subdirectory for the task at hand.
|
|
20
|
+
2. Read the local `README.md` or `SKILL.md` within that subdirectory (if available).
|
|
21
|
+
3. Follow the specific API or script instructions provided in the external library.
|
package/hooks/install.sh
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# solmate-skills: install.sh
|
|
3
|
+
# Purpose: Install Solmate hook scripts into the current project's .claude/ directory
|
|
4
|
+
# and merge hook configuration into .claude/settings.json.
|
|
5
|
+
# Usage: bash .agent/skills/hooks/install.sh
|
|
6
|
+
# (or run from any location: bash <path-to-hooks>/install.sh)
|
|
7
|
+
|
|
8
|
+
set -euo pipefail
|
|
9
|
+
|
|
10
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
PROJECT_ROOT="$(pwd)"
|
|
12
|
+
CLAUDE_DIR="$PROJECT_ROOT/.claude"
|
|
13
|
+
HOOKS_DIR="$CLAUDE_DIR/hooks"
|
|
14
|
+
SETTINGS_FILE="$CLAUDE_DIR/settings.json"
|
|
15
|
+
|
|
16
|
+
echo "Solmate Skills — Hook Installer"
|
|
17
|
+
echo "Project: $PROJECT_ROOT"
|
|
18
|
+
echo ""
|
|
19
|
+
|
|
20
|
+
# --- Step 1: Create .claude/hooks/ ---
|
|
21
|
+
mkdir -p "$HOOKS_DIR"
|
|
22
|
+
echo "[1/4] Created $HOOKS_DIR"
|
|
23
|
+
|
|
24
|
+
# --- Step 2: Copy hook scripts ---
|
|
25
|
+
cp "$SCRIPT_DIR/suggest-skills.sh" "$HOOKS_DIR/solmate-suggest.sh"
|
|
26
|
+
cp "$SCRIPT_DIR/watch-files.sh" "$HOOKS_DIR/solmate-watch.sh"
|
|
27
|
+
chmod +x "$HOOKS_DIR/solmate-suggest.sh"
|
|
28
|
+
chmod +x "$HOOKS_DIR/solmate-watch.sh"
|
|
29
|
+
echo "[2/4] Copied hook scripts:"
|
|
30
|
+
echo " .claude/hooks/solmate-suggest.sh (UserPromptSubmit)"
|
|
31
|
+
echo " .claude/hooks/solmate-watch.sh (PreToolUse)"
|
|
32
|
+
|
|
33
|
+
# --- Step 3: Merge hook config into settings.json ---
|
|
34
|
+
echo "[3/4] Merging hook config into $SETTINGS_FILE"
|
|
35
|
+
|
|
36
|
+
python3 - "$SETTINGS_FILE" <<'PYEOF'
|
|
37
|
+
import sys, json, os
|
|
38
|
+
|
|
39
|
+
settings_path = sys.argv[1]
|
|
40
|
+
|
|
41
|
+
# Load existing settings or start fresh
|
|
42
|
+
if os.path.exists(settings_path):
|
|
43
|
+
with open(settings_path, 'r') as f:
|
|
44
|
+
try:
|
|
45
|
+
settings = json.load(f)
|
|
46
|
+
except json.JSONDecodeError:
|
|
47
|
+
print(f" WARNING: {settings_path} has invalid JSON. Backing up and starting fresh.")
|
|
48
|
+
os.rename(settings_path, settings_path + '.bak')
|
|
49
|
+
settings = {}
|
|
50
|
+
else:
|
|
51
|
+
settings = {}
|
|
52
|
+
|
|
53
|
+
hooks = settings.setdefault('hooks', {})
|
|
54
|
+
|
|
55
|
+
# --- UserPromptSubmit hook ---
|
|
56
|
+
suggest_cmd = "bash .claude/hooks/solmate-suggest.sh"
|
|
57
|
+
submit_hooks = hooks.setdefault('UserPromptSubmit', [])
|
|
58
|
+
|
|
59
|
+
# Check for duplicate
|
|
60
|
+
already_has_suggest = any(
|
|
61
|
+
h.get('command') == suggest_cmd
|
|
62
|
+
for entry in submit_hooks
|
|
63
|
+
for h in entry.get('hooks', [])
|
|
64
|
+
)
|
|
65
|
+
if not already_has_suggest:
|
|
66
|
+
submit_hooks.append({
|
|
67
|
+
"hooks": [{
|
|
68
|
+
"type": "command",
|
|
69
|
+
"command": suggest_cmd,
|
|
70
|
+
"timeout": 5
|
|
71
|
+
}]
|
|
72
|
+
})
|
|
73
|
+
print(" Added: UserPromptSubmit → solmate-suggest.sh")
|
|
74
|
+
else:
|
|
75
|
+
print(" Skipped (already exists): UserPromptSubmit → solmate-suggest.sh")
|
|
76
|
+
|
|
77
|
+
# --- PreToolUse hook ---
|
|
78
|
+
watch_cmd = "bash .claude/hooks/solmate-watch.sh"
|
|
79
|
+
pre_hooks = hooks.setdefault('PreToolUse', [])
|
|
80
|
+
|
|
81
|
+
already_has_watch = any(
|
|
82
|
+
h.get('command') == watch_cmd
|
|
83
|
+
for entry in pre_hooks
|
|
84
|
+
for h in entry.get('hooks', [])
|
|
85
|
+
)
|
|
86
|
+
if not already_has_watch:
|
|
87
|
+
pre_hooks.append({
|
|
88
|
+
"matcher": "Read|Write|Edit|Bash",
|
|
89
|
+
"hooks": [{
|
|
90
|
+
"type": "command",
|
|
91
|
+
"command": watch_cmd,
|
|
92
|
+
"timeout": 5
|
|
93
|
+
}]
|
|
94
|
+
})
|
|
95
|
+
print(" Added: PreToolUse (Read|Write|Edit|Bash) → solmate-watch.sh")
|
|
96
|
+
else:
|
|
97
|
+
print(" Skipped (already exists): PreToolUse → solmate-watch.sh")
|
|
98
|
+
|
|
99
|
+
# Write back
|
|
100
|
+
os.makedirs(os.path.dirname(settings_path), exist_ok=True)
|
|
101
|
+
with open(settings_path, 'w') as f:
|
|
102
|
+
json.dump(settings, f, indent=2, ensure_ascii=False)
|
|
103
|
+
f.write('\n')
|
|
104
|
+
|
|
105
|
+
print(f" Saved: {settings_path}")
|
|
106
|
+
PYEOF
|
|
107
|
+
|
|
108
|
+
# --- Step 4: Add .claude/hooks/ to .gitignore if not already there ---
|
|
109
|
+
GITIGNORE="$PROJECT_ROOT/.gitignore"
|
|
110
|
+
if [ -f "$GITIGNORE" ]; then
|
|
111
|
+
if ! grep -q "\.claude/hooks/" "$GITIGNORE" 2>/dev/null; then
|
|
112
|
+
echo "" >> "$GITIGNORE"
|
|
113
|
+
echo "# Solmate hook scripts (project-local)" >> "$GITIGNORE"
|
|
114
|
+
echo ".claude/hooks/" >> "$GITIGNORE"
|
|
115
|
+
echo "[4/4] Added .claude/hooks/ to .gitignore"
|
|
116
|
+
else
|
|
117
|
+
echo "[4/4] .gitignore already excludes .claude/hooks/"
|
|
118
|
+
fi
|
|
119
|
+
else
|
|
120
|
+
echo "[4/4] No .gitignore found — skipping"
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
echo ""
|
|
124
|
+
echo "Done. Hooks are active in this project."
|
|
125
|
+
echo ""
|
|
126
|
+
echo "What was installed:"
|
|
127
|
+
echo " UserPromptSubmit → detects keywords in your prompts → suggests relevant skills"
|
|
128
|
+
echo " PreToolUse → detects file patterns being edited → suggests relevant skills"
|
|
129
|
+
echo ""
|
|
130
|
+
echo "To review or disable hooks, open /hooks in Claude Code."
|
|
131
|
+
echo "To uninstall, remove .claude/hooks/ and the 'hooks' section from .claude/settings.json."
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# solmate-skills: suggest-skills.sh
|
|
3
|
+
# Event: UserPromptSubmit
|
|
4
|
+
# Purpose: Detect keywords in user prompt and inject skill suggestions as context.
|
|
5
|
+
# Output: JSON with hookSpecificOutput.additionalContext (non-blocking)
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# Read stdin JSON
|
|
10
|
+
INPUT=$(cat)
|
|
11
|
+
|
|
12
|
+
# Extract the user prompt text
|
|
13
|
+
PROMPT=$(echo "$INPUT" | python3 -c "
|
|
14
|
+
import sys, json
|
|
15
|
+
data = json.load(sys.stdin)
|
|
16
|
+
# UserPromptSubmit provides 'prompt' field
|
|
17
|
+
print(data.get('prompt', ''))
|
|
18
|
+
" 2>/dev/null || echo "")
|
|
19
|
+
|
|
20
|
+
if [ -z "$PROMPT" ]; then
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
SUGGESTIONS=""
|
|
25
|
+
|
|
26
|
+
# --- Keyword matching (Korean + English) ---
|
|
27
|
+
|
|
28
|
+
# Decision / Design → manage-decisions
|
|
29
|
+
if echo "$PROMPT" | grep -qiE '결정|설계|어떻게 할|어떤 방식|DB 스키마|테이블|API 구조|아키텍처|폴더 구조|기능 범위|MVP|스택|라이브러리|어떤 거|어떤게'; then
|
|
30
|
+
SUGGESTIONS="$SUGGESTIONS\n- 결정이 필요한 상황입니다. \`/manage-decisions\`를 실행하면 유형별 질문 템플릿으로 대화를 통해 결정을 이끌어냅니다."
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Security → verify-security
|
|
34
|
+
if echo "$PROMPT" | grep -qiE '보안|security|취약|OWASP|인증|인가|token|jwt|secret|API ?key|sql|injection|xss|csrf'; then
|
|
35
|
+
SUGGESTIONS="$SUGGESTIONS\n- 보안 관련 작업입니다. \`/verify-security\`로 OWASP Top 10 기준 점검을 실행하세요."
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Performance → verify-performance
|
|
39
|
+
if echo "$PROMPT" | grep -qiE '성능|performance|lighthouse|느리|느림|최적화|LCP|CLS|FID|번들|bundle|이미지 최적|lazy|loading'; then
|
|
40
|
+
SUGGESTIONS="$SUGGESTIONS\n- 성능 관련 작업입니다. \`/verify-performance\`로 Lighthouse 및 Core Web Vitals 점검을 실행하세요."
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# PR / Commit / Code review → verify-code
|
|
44
|
+
if echo "$PROMPT" | grep -qiE 'PR|pull ?request|코드 ?리뷰|review|commit|머지|merge|배포 전|pre-deploy'; then
|
|
45
|
+
SUGGESTIONS="$SUGGESTIONS\n- PR 또는 배포 전 점검입니다. \`/verify-code\`로 코드 품질을 종합 리뷰하고, \`/verify-implementation\`으로 전체 verify-* 스킬을 통합 실행하세요."
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Documentation → verify-docs / docs-plan / docs-dev
|
|
49
|
+
if echo "$PROMPT" | grep -qiE '문서|docs?|README|VISION|LEAN_CANVAS|PRODUCT_SPECS|API_SPECS|DB_SCHEMA|ROADMAP|백로그|backlog'; then
|
|
50
|
+
SUGGESTIONS="$SUGGESTIONS\n- 문서 작업입니다. 기획·UI 문서는 \`/docs-plan\`, 기술·진행·QA 문서는 \`/docs-dev\`, 문서 구조 검증은 \`/verify-docs\`를 사용하세요."
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# Feature implementation / workflow → rules-workflow
|
|
54
|
+
if echo "$PROMPT" | grep -qiE '기능 ?구현|구현|implement|feature|작업 ?시작|어디서 ?시작|어떻게 ?시작|개발 ?시작|시작할게'; then
|
|
55
|
+
SUGGESTIONS="$SUGGESTIONS\n- 기능 구현을 시작하려 합니다. \`/rules-workflow\`로 18단계 워크플로우를 따라 계획부터 PR까지 진행하세요."
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
# React / UI component → rules-react
|
|
59
|
+
if echo "$PROMPT" | grep -qiE 'React|컴포넌트|component|페이지|page|UI|화면|shadcn|tailwind'; then
|
|
60
|
+
SUGGESTIONS="$SUGGESTIONS\n- React/UI 작업입니다. \`/rules-react\`로 컴포넌트 설계 기준을 확인하고, shadcn/ui 활용은 \`/tools-shadcn\`을 사용하세요."
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
# Drizzle / DB schema → verify-drizzle-schema
|
|
64
|
+
if echo "$PROMPT" | grep -qiE 'drizzle|schema\.ts|마이그레이션|migration|pgTable|sqliteTable'; then
|
|
65
|
+
SUGGESTIONS="$SUGGESTIONS\n- Drizzle 스키마 작업입니다. \`/verify-drizzle-schema\`로 스키마 정합성을 검증하세요."
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# New project / product pipeline → rules-product
|
|
69
|
+
if echo "$PROMPT" | grep -qiE '새 프로젝트|신규 프로젝트|프로젝트 시작|어디서 시작|뭐부터|처음부터|from scratch'; then
|
|
70
|
+
SUGGESTIONS="$SUGGESTIONS\n- 새 프로젝트입니다. \`/rules-product\`를 실행하면 현재 단계를 자동 진단하고 올바른 스킬로 안내합니다."
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Pitch deck / business plan → docs-pitch / docs-business
|
|
74
|
+
if echo "$PROMPT" | grep -qiE '피치|pitch|투자|investor|사업 ?계획|business ?plan|데모데이|해커톤'; then
|
|
75
|
+
SUGGESTIONS="$SUGGESTIONS\n- 발표·투자 자료 작업입니다. 피치덱은 \`/docs-pitch\`, 사업계획서는 \`/docs-business\`를 사용하세요."
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
# If no suggestions, exit silently
|
|
79
|
+
if [ -z "$SUGGESTIONS" ]; then
|
|
80
|
+
exit 0
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Output JSON with additionalContext (non-blocking)
|
|
84
|
+
python3 -c "
|
|
85
|
+
import json, sys
|
|
86
|
+
suggestions = sys.argv[1]
|
|
87
|
+
output = {
|
|
88
|
+
'hookSpecificOutput': {
|
|
89
|
+
'hookEventName': 'UserPromptSubmit',
|
|
90
|
+
'additionalContext': '[Solmate Skills 제안]\n' + suggestions.strip()
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
print(json.dumps(output))
|
|
94
|
+
" "$SUGGESTIONS"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# solmate-skills: watch-files.sh
|
|
3
|
+
# Event: PreToolUse (matcher: Read|Write|Edit|Bash)
|
|
4
|
+
# Purpose: Detect file patterns being modified and inject relevant skill suggestions.
|
|
5
|
+
# Output: JSON with hookSpecificOutput.additionalContext (non-blocking)
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
INPUT=$(cat)
|
|
10
|
+
|
|
11
|
+
# Extract file path and tool name
|
|
12
|
+
FILE_PATH=$(echo "$INPUT" | python3 -c "
|
|
13
|
+
import sys, json
|
|
14
|
+
data = json.load(sys.stdin)
|
|
15
|
+
inp = data.get('tool_input', {})
|
|
16
|
+
# Write/Edit use file_path; Bash use command
|
|
17
|
+
print(inp.get('file_path', inp.get('command', '')))" 2>/dev/null || echo "")
|
|
18
|
+
|
|
19
|
+
TOOL_NAME=$(echo "$INPUT" | python3 -c "
|
|
20
|
+
import sys, json
|
|
21
|
+
data = json.load(sys.stdin)
|
|
22
|
+
print(data.get('tool_name', ''))" 2>/dev/null || echo "")
|
|
23
|
+
|
|
24
|
+
if [ -z "$FILE_PATH" ]; then
|
|
25
|
+
exit 0
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
SUGGESTIONS=""
|
|
29
|
+
|
|
30
|
+
# --- File pattern matching ---
|
|
31
|
+
|
|
32
|
+
# Drizzle schema file → verify-drizzle-schema
|
|
33
|
+
if echo "$FILE_PATH" | grep -qiE 'schema\.(ts|js)|drizzle'; then
|
|
34
|
+
SUGGESTIONS="$SUGGESTIONS\n- Drizzle 스키마 파일을 수정 중입니다. 작업 후 \`/verify-drizzle-schema\`로 스키마 정합성을 검증하세요."
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# .env files → verify-security
|
|
38
|
+
if echo "$FILE_PATH" | grep -qiE '\.env|\.env\.local|\.env\.production|\.env\.example'; then
|
|
39
|
+
SUGGESTIONS="$SUGGESTIONS\n- 환경변수 파일을 수정 중입니다. \`/verify-security\` Check 1(시크릿 노출)을 실행하여 민감 정보 노출 여부를 확인하세요."
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# SKILL.md files → manage-skills
|
|
43
|
+
if echo "$FILE_PATH" | grep -qiE 'SKILL\.md'; then
|
|
44
|
+
SUGGESTIONS="$SUGGESTIONS\n- 스킬 파일을 수정 중입니다. \`/manage-skills\`로 verify 스킬과의 정합성 드리프트를 점검하세요."
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Page/route files → verify-performance
|
|
48
|
+
if echo "$FILE_PATH" | grep -qiE 'page\.(tsx|jsx|ts|js)|route\.(tsx|jsx|ts|js)|layout\.(tsx|jsx)'; then
|
|
49
|
+
SUGGESTIONS="$SUGGESTIONS\n- 페이지·라우트 파일을 수정 중입니다. 작업 후 \`/verify-performance\`로 Core Web Vitals 및 렌더링 전략을 점검하세요."
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# API route files → verify-security
|
|
53
|
+
if echo "$FILE_PATH" | grep -qiE 'api/.*route\.(ts|js)|api/.*index\.(ts|js)|\bapi\b.*\.(ts|js)'; then
|
|
54
|
+
SUGGESTIONS="$SUGGESTIONS\n- API 라우트 파일을 수정 중입니다. 작업 후 \`/verify-security\` Check 2(인증·인가) 및 Check 5(CSRF)를 점검하세요."
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Auth-related files → verify-security
|
|
58
|
+
if echo "$FILE_PATH" | grep -qiE 'auth\.(ts|js|tsx)|middleware\.(ts|js)|session\.(ts|js)'; then
|
|
59
|
+
SUGGESTIONS="$SUGGESTIONS\n- 인증·미들웨어 파일을 수정 중입니다. \`/verify-security\`로 인증·인가 취약점을 점검하세요."
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Documentation files → verify-docs
|
|
63
|
+
if echo "$FILE_PATH" | grep -qiE 'docs/(01|02|03|04|05)_.*\.md'; then
|
|
64
|
+
SUGGESTIONS="$SUGGESTIONS\n- 문서 레이어 파일을 수정 중입니다. 작업 후 \`/verify-docs\`로 메타데이터 및 구조 정합성을 검증하세요."
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# AGENTS.md → remind about skill count
|
|
68
|
+
if echo "$FILE_PATH" | grep -qiE 'AGENTS\.md'; then
|
|
69
|
+
SUGGESTIONS="$SUGGESTIONS\n- AGENTS.md를 수정 중입니다. 스킬 목록·개수가 변경된 경우 Section 4의 테이블과 개수를 함께 업데이트하세요."
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
if [ -z "$SUGGESTIONS" ]; then
|
|
73
|
+
exit 0
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
python3 -c "
|
|
77
|
+
import json, sys
|
|
78
|
+
suggestions = sys.argv[1]
|
|
79
|
+
output = {
|
|
80
|
+
'hookSpecificOutput': {
|
|
81
|
+
'hookEventName': 'PreToolUse',
|
|
82
|
+
'additionalContext': '[Solmate Skills 파일 감지]\n' + suggestions.strip()
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
print(json.dumps(output))
|
|
86
|
+
" "$SUGGESTIONS"
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: manage-decisions
|
|
3
|
+
description: 프로젝트 진행 중 결정이 필요한 순간에 올바른 질문을 던지고 대화를 통해 결정을 이끌어냅니다. 기술 선택, 기능 범위, DB 설계, API 구조, UX 방향, 아키텍처 등 6개 결정 유형별 질문 템플릿을 제공합니다. "이거 어떻게 할까요?", "결정이 필요합니다", 또는 설계/구조 논의 시 사용합니다.
|
|
4
|
+
argument-hint: "[선택사항: 결정 유형 또는 주제 (예: DB 설계, API 구조, 기능 범위)]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 결정 관리 스킬 (manage-decisions)
|
|
8
|
+
|
|
9
|
+
프로젝트를 진행하다 보면 AI가 독단적으로 결정해서는 안 되는 순간들이 있습니다. 이 스킬은 그 순간을 인식하고, 결정 유형에 맞는 질문을 사용자에게 던져 충분한 대화와 맥락을 바탕으로 결정이 이루어지도록 합니다.
|
|
10
|
+
|
|
11
|
+
**원칙**: 결정을 내리기 전에 먼저 묻는다. 추측하거나 "일반적으로는" 식의 답변으로 진행하지 않는다.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 실행 시점
|
|
16
|
+
|
|
17
|
+
- "이거 어떻게 할까요?", "어떤 방식이 좋을까요?" 질문을 받았을 때
|
|
18
|
+
- 기술 스택·라이브러리·패턴을 선택해야 할 때
|
|
19
|
+
- 기능 범위를 정의하거나 MVP 경계를 정해야 할 때
|
|
20
|
+
- DB 스키마·API 구조·아키텍처 설계를 시작하기 전
|
|
21
|
+
- `rules-workflow` Step 1~4 (계획 수립·검토) 수행 중 결정이 필요할 때
|
|
22
|
+
- `rules-product` 각 Phase 진입 전 핵심 방향을 잡을 때
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Step 0: 결정 유형 파악
|
|
27
|
+
|
|
28
|
+
사용자의 요청 또는 현재 맥락에서 아래 6개 유형 중 하나를 먼저 식별한다. 유형이 복수인 경우 우선순위가 높은 것부터 순서대로 진행한다.
|
|
29
|
+
|
|
30
|
+
| 유형 | 키워드 | 대표 상황 |
|
|
31
|
+
|------|--------|-----------|
|
|
32
|
+
| A. 기술 선택 | 스택, 라이브러리, 프레임워크, 도구 | "ORM은 뭘 쓸까요?", "상태관리는?" |
|
|
33
|
+
| B. 기능 범위 | MVP, 기능, 우선순위, 범위, 스코프 | "이 기능도 넣을까요?", "MVP 범위는?" |
|
|
34
|
+
| C. DB 설계 | 테이블, 스키마, 관계, 필드, 인덱스 | "테이블을 어떻게 나눌까요?" |
|
|
35
|
+
| D. API 설계 | 엔드포인트, REST, 응답 구조, 인증 | "API 구조를 어떻게 잡을까요?" |
|
|
36
|
+
| E. UX·UI 방향 | 화면, 흐름, 레이아웃, 인터랙션 | "이 화면은 어떻게 구성할까요?" |
|
|
37
|
+
| F. 아키텍처 | 구조, 레이어, 모듈, 배포, 확장성 | "폴더 구조를 어떻게 잡을까요?" |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Type A: 기술 선택
|
|
42
|
+
|
|
43
|
+
**목적**: 필연적인 기술 선택. "일반적으로 많이 쓰여서"가 아니라 프로젝트 요구사항에서 이 기술이 필요한 이유를 먼저 확인한다.
|
|
44
|
+
|
|
45
|
+
**질문 순서**:
|
|
46
|
+
|
|
47
|
+
1. **제약 조건 먼저**: 현재 프로젝트의 기술 스택(언어, 런타임, 배포 환경)에서 이미 확정된 것은 무엇인가?
|
|
48
|
+
2. **핵심 요구사항**: 이 기술을 선택하는 핵심 기능적 이유는 무엇인가? (예: 실시간 필요 → WebSocket, 타입 안전 DB 쿼리 필요 → Drizzle/Prisma)
|
|
49
|
+
3. **트레이드오프 인식**: 후보 옵션들의 장단점을 비교해도 되는가? (예: A는 기능이 많지만 번들이 크고, B는 가볍지만 커뮤니티가 작다)
|
|
50
|
+
4. **팀 친숙도**: 현재 팀(또는 본인)이 이 기술에 얼마나 익숙한가? 학습 비용이 허용되는가?
|
|
51
|
+
5. **미래 의존성**: 이 선택이 나중에 교체하기 어려운 결정인가? (예: DB 종류, 인증 라이브러리)
|
|
52
|
+
|
|
53
|
+
**결정 기록 형식**:
|
|
54
|
+
```
|
|
55
|
+
결정: [선택한 기술]
|
|
56
|
+
이유: [핵심 이유 1-2줄]
|
|
57
|
+
포기한 대안: [대안] — [포기 이유]
|
|
58
|
+
재검토 조건: [이 결정을 바꿔야 하는 상황]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Type B: 기능 범위
|
|
64
|
+
|
|
65
|
+
**목적**: AI가 임의로 기능을 추가하거나 제외하지 않도록 범위를 사용자와 함께 확정한다.
|
|
66
|
+
|
|
67
|
+
**질문 순서**:
|
|
68
|
+
|
|
69
|
+
1. **현재 단계 확인**: 지금이 MVP인가, 이후 버전인가? Phase 1(기획) 문서에 정의된 MVP 범위가 있는가?
|
|
70
|
+
2. **Must Have vs Nice to Have**: 이 기능이 없으면 핵심 가치(UVP)가 전달되지 않는가, 아니면 있으면 좋은 수준인가?
|
|
71
|
+
3. **사용자 여정 필수성**: 이 기능 없이 사용자가 핵심 목표를 달성할 수 없는가?
|
|
72
|
+
4. **구현 비용 인식**: 이 기능의 구현 복잡도가 다른 기능들에 비해 어느 수준인가? 이 비용이 가치에 비례하는가?
|
|
73
|
+
5. **제외 시 영향**: 이 기능을 이번 버전에서 제외하면 어떤 문제가 생기는가?
|
|
74
|
+
|
|
75
|
+
**결정 기록 형식**:
|
|
76
|
+
```
|
|
77
|
+
기능: [기능명]
|
|
78
|
+
결정: 포함 / 제외 / 다음 버전
|
|
79
|
+
이유: [결정 근거]
|
|
80
|
+
제외 시 대안: [없으면 "없음"]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Type C: DB 설계
|
|
86
|
+
|
|
87
|
+
**목적**: 스키마 결정은 나중에 바꾸기 어렵다. 충분한 논의 없이 진행하지 않는다.
|
|
88
|
+
|
|
89
|
+
**질문 순서**:
|
|
90
|
+
|
|
91
|
+
1. **데이터 성격**: 이 데이터는 관계형(정형)인가, 비정형인가? 어떤 쿼리 패턴이 가장 빈번한가?
|
|
92
|
+
2. **소유권과 관계**: 이 엔티티는 누가 소유하는가? (User → Post → Comment 같은 계층 구조가 있는가?)
|
|
93
|
+
3. **확장 가능성**: 이 테이블에 나중에 어떤 필드가 추가될 가능성이 높은가? 지금 설계가 그것을 수용하는가?
|
|
94
|
+
4. **삭제 정책**: 레코드 삭제 시 `hard delete`인가, `soft delete`(deleted_at)인가? 관련 데이터는 어떻게 처리하는가?
|
|
95
|
+
5. **인덱스 우선순위**: 가장 자주 조회되는 필드 조합은 무엇인가? (검색, 필터, 정렬 기준)
|
|
96
|
+
6. **민감 데이터**: 이 테이블에 PII(개인식별정보)가 포함되는가? 암호화·접근 제한이 필요한가?
|
|
97
|
+
|
|
98
|
+
**결정 기록 형식**:
|
|
99
|
+
```
|
|
100
|
+
테이블: [테이블명]
|
|
101
|
+
주요 결정: [핵심 설계 선택사항]
|
|
102
|
+
이유: [결정 근거]
|
|
103
|
+
주의사항: [나중에 재검토가 필요한 부분]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Type D: API 설계
|
|
109
|
+
|
|
110
|
+
**목적**: 클라이언트-서버 계약(contract)은 한번 노출되면 바꾸기 어렵다. 구현 전에 구조를 먼저 합의한다.
|
|
111
|
+
|
|
112
|
+
**질문 순서**:
|
|
113
|
+
|
|
114
|
+
1. **클라이언트 요구사항**: 이 API를 호출하는 클라이언트는 무엇인가? (웹/앱/외부 파트너) 각자 필요한 데이터 형태가 다른가?
|
|
115
|
+
2. **인증 방식**: 이 엔드포인트는 인증이 필요한가? 어떤 인증 방식을 사용하는가? (세션, JWT, API Key)
|
|
116
|
+
3. **응답 구조**: 성공·실패 응답의 표준 형식이 있는가? 페이지네이션이 필요한가?
|
|
117
|
+
4. **버전 관리**: API 버전 관리 전략이 있는가? (`/api/v1/`) 현재 명세 변경이 기존 클라이언트에 영향을 주는가?
|
|
118
|
+
5. **에러 처리**: 어떤 에러 케이스가 예상되는가? 클라이언트가 각 에러를 어떻게 처리해야 하는가?
|
|
119
|
+
6. **부작용 범위**: 이 API 호출이 다른 데이터에 side effect를 일으키는가? (예: 주문 생성 → 재고 차감 → 알림 발송)
|
|
120
|
+
|
|
121
|
+
**결정 기록 형식**:
|
|
122
|
+
```
|
|
123
|
+
엔드포인트: [METHOD /path]
|
|
124
|
+
결정: [설계 선택사항]
|
|
125
|
+
이유: [결정 근거]
|
|
126
|
+
미확정 사항: [추후 확인 필요한 부분]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Type E: UX·UI 방향
|
|
132
|
+
|
|
133
|
+
**목적**: 화면 구성·흐름·인터랙션은 사용자 경험에 직결된다. AI가 임의로 레이아웃을 결정하지 않는다.
|
|
134
|
+
|
|
135
|
+
**질문 순서**:
|
|
136
|
+
|
|
137
|
+
1. **사용자 목표**: 이 화면에서 사용자가 달성하려는 핵심 목표는 무엇인가? 가장 빈번한 액션은?
|
|
138
|
+
2. **진입 경로**: 사용자가 이 화면에 어떻게 도달하는가? 이전 화면의 맥락이 이 화면에 영향을 주는가?
|
|
139
|
+
3. **정보 우선순위**: 이 화면에서 가장 먼저 눈에 들어와야 하는 요소는 무엇인가? (CTA, 핵심 정보, 상태)
|
|
140
|
+
4. **빈 상태(Empty State)**: 데이터가 없을 때 어떻게 보여야 하는가? 사용자에게 다음 행동을 유도하는가?
|
|
141
|
+
5. **에러·로딩 상태**: 로딩 중, 에러 발생 시 화면을 어떻게 처리하는가?
|
|
142
|
+
6. **모바일 우선 여부**: 이 화면은 모바일에서 더 많이 사용되는가? 반응형 레이아웃 전략이 있는가?
|
|
143
|
+
|
|
144
|
+
**결정 기록 형식**:
|
|
145
|
+
```
|
|
146
|
+
화면: [화면명]
|
|
147
|
+
핵심 결정: [레이아웃·흐름·인터랙션 선택]
|
|
148
|
+
이유: [결정 근거]
|
|
149
|
+
확인 필요: [사용자 테스트 또는 추가 검토 필요한 부분]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Type F: 아키텍처
|
|
155
|
+
|
|
156
|
+
**목적**: 폴더 구조, 레이어 분리, 모듈 경계는 팀 전체 생산성에 영향을 준다. 한 명이 독단적으로 결정하지 않는다.
|
|
157
|
+
|
|
158
|
+
**질문 순서**:
|
|
159
|
+
|
|
160
|
+
1. **팀 규모와 협업 방식**: 이 프로젝트는 혼자 진행하는가, 팀으로 진행하는가? 도메인별로 역할이 나뉘는가?
|
|
161
|
+
2. **성장 예측**: 6개월 후 코드베이스 규모가 지금의 몇 배가 될 것 같은가? 현재 구조가 그것을 수용하는가?
|
|
162
|
+
3. **레이어 경계**: 비즈니스 로직, 데이터 접근, UI를 어디서 분리할 것인가? (예: `services/`, `repositories/`, `components/`)
|
|
163
|
+
4. **공유 코드 전략**: 여러 페이지·기능에서 공통으로 쓰이는 코드(유틸, 훅, 타입)를 어디에 두는가?
|
|
164
|
+
5. **의존성 방향**: 모듈 간 의존성이 단방향인가? 순환 의존성이 발생할 가능성이 있는가?
|
|
165
|
+
6. **배포 단위**: 모노레포인가 멀티레포인가? 프론트·백을 분리 배포하는가?
|
|
166
|
+
|
|
167
|
+
**결정 기록 형식**:
|
|
168
|
+
```
|
|
169
|
+
결정: [아키텍처 선택사항]
|
|
170
|
+
이유: [결정 근거]
|
|
171
|
+
전제 조건: [이 구조가 성립하는 조건]
|
|
172
|
+
재검토 시점: [이 결정을 다시 봐야 하는 상황]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 결정 기록 저장
|
|
178
|
+
|
|
179
|
+
중요한 결정은 다음 경로에 누적 기록한다:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
docs/04_Logic_Progress/03_DECISION_LOG.md
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
형식:
|
|
186
|
+
```markdown
|
|
187
|
+
# Decision Log
|
|
188
|
+
> Created: YYYY-MM-DD HH:mm
|
|
189
|
+
> Last Updated: YYYY-MM-DD HH:mm
|
|
190
|
+
|
|
191
|
+
## [YYYY-MM-DD] [결정 제목]
|
|
192
|
+
- **유형**: A·B·C·D·E·F 중 하나
|
|
193
|
+
- **결정**: [선택한 방향]
|
|
194
|
+
- **이유**: [핵심 근거]
|
|
195
|
+
- **포기한 대안**: [대안 및 이유]
|
|
196
|
+
- **재검토 조건**: [이 결정을 바꿔야 하는 상황]
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Anti-Rush (AGENTS.md 준수)
|
|
202
|
+
|
|
203
|
+
- 사용자가 "그냥 알아서 해줘"라고 해도 중요한 결정은 질문을 먼저 한다.
|
|
204
|
+
- 답변이 불충분하면 보완 질문을 한다. 추측으로 채우지 않는다.
|
|
205
|
+
- 결정이 내려지면 반드시 요약하여 사용자에게 확인받은 후 다음 단계로 넘어간다.
|
|
206
|
+
- 결정 기록을 `03_DECISION_LOG.md`에 남기도록 안내한다.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 관련 스킬
|
|
211
|
+
|
|
212
|
+
- `rules-product`: Phase 전환 시 이 스킬로 핵심 결정 사전 확정
|
|
213
|
+
- `rules-workflow`: Step 1~4 계획 수립 중 결정 필요 시 호출
|
|
214
|
+
- `docs-plan`: 기획 단계 질문 (Why/Who/What) — Phase 1~3 질문은 docs-plan이 담당
|
|
215
|
+
- `docs-dev`: 결정된 사항을 기술 명세 문서로 기록
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: dev
|
|
2
|
+
name: rules-dev
|
|
3
3
|
description: Apply development setup, coding conventions, and quality rules when writing code, configuring environment, or reviewing implementation. Use when the user asks about dev setup, coding standards, commit rules, env vars, DB safety, or "what to follow when developing." Includes framework-specific patterns for Next.js, React Router v7, and React (SPA/Vite). Always align with project AGENTS.md and any DEVELOPMENT_PRINCIPLES document.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Development Conventions
|
|
6
|
+
# Rules Development Skill (Coding Conventions)
|
|
7
7
|
|
|
8
8
|
This skill defines **development setup**, **conventions to follow**, and **prohibitions** so that code and environment stay consistent, secure, and maintainable. It is intended for **global use** across projects that follow Antigravity/AGENTS-style standards. Project-specific details (e.g. stack, app directory name) live in the repo's AGENTS.md or `docs/03_Technical_Specs/00_DEVELOPMENT_PRINCIPLES.md`.
|
|
9
9
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: rules-docs
|
|
3
3
|
description: Create and manage project documentation according to the 365 Principle (3 Investor Lenses, 6 Rubrics, 5 Documentation Layers) with mandatory cross-layer context linking. Use when the user asks to document features, update documentation, create spec files, or manage project docs. Always include "Related Documents" sections to maintain context continuity across layers.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Documentation Management Skill
|
|
7
7
|
|
|
8
|
-
이 스킬은 모든 프로젝트 문서의 **마스터 규칙**을 정의한다. 실제 문서 작성은 하위 스킬(`plan
|
|
8
|
+
이 스킬은 모든 프로젝트 문서의 **마스터 규칙**을 정의한다. 실제 문서 작성은 하위 스킬(`docs-plan`, `docs-dev`, `docs-pitch`, `docs-business`)이 담당하며, 이 스킬은 그것들이 따르는 공통 기준을 정의한다.
|
|
9
9
|
|
|
10
10
|
> **365 Principle** -- 프로젝트 품질과 시장 경쟁력을 보장하는 통합 프레임워크.
|
|
11
11
|
>
|
|
@@ -39,7 +39,7 @@ description: Create and manage project documentation according to the 365 Princi
|
|
|
39
39
|
| 1 | `docs/01_Concept_Design/` | 비전, 제품 기획, 비즈니스 전략 |
|
|
40
40
|
| 2 | `docs/02_UI_Screens/` | UI 디자인 시스템, 화면 흐름, 프로토타입 리뷰 |
|
|
41
41
|
| 3 | `docs/03_Technical_Specs/` | DB 스키마, API 명세, 개발 원칙 |
|
|
42
|
-
| 4 | `docs/04_Logic_Progress/` | 로드맵, 백로그, 비즈니스 로직, 알고리즘 |
|
|
42
|
+
| 4 | `docs/04_Logic_Progress/` | 로드맵, 백로그, 개발 일정, 비즈니스 로직, 알고리즘 |
|
|
43
43
|
| 5 | `docs/05_QA_Validation/` | 테스트 시나리오, QA 체크리스트, 검증 보고서 |
|
|
44
44
|
|
|
45
45
|
**Context Flow**:
|
|
@@ -54,14 +54,17 @@ description: Create and manage project documentation according to the 365 Princi
|
|
|
54
54
|
- 기획·제품 정의 → **01_Concept_Design**
|
|
55
55
|
- UI 디자인·화면 흐름 → **02_UI_Screens**
|
|
56
56
|
- DB, API, 개발 원칙 → **03_Technical_Specs**
|
|
57
|
-
-
|
|
57
|
+
- 로드맵·백로그·개발 일정·비즈니스 로직 → **04_Logic_Progress** (일정 문서는 반드시 여기에 생성하며, 모든 항목은 체크박스`[ ]`를 포함한 원자적 단위로 분할해야 함)
|
|
58
58
|
- 테스트·QA 보고 → **05_QA_Validation**
|
|
59
59
|
|
|
60
60
|
## 4. 파일 작성 규칙
|
|
61
61
|
|
|
62
62
|
### 네이밍
|
|
63
63
|
|
|
64
|
-
파일명 앞에 2자리 순번을
|
|
64
|
+
파일명 앞에 2자리 순번을 붙인다. 특히 **04_Logic_Progress**의 일정 문서는 다음 표준 명칭과 형식을 준수한다:
|
|
65
|
+
- `00_BACKLOG.md`: 작업 현황 관리 (ToDo/In Progress/Done 구분 및 체크박스 활용)
|
|
66
|
+
- `00_ROADMAP.md`: 마일스톤 및 단계별 일정 (Phase별 큰 줄기와 세부 항목 분할)
|
|
67
|
+
- `01_EXECUTION_PLAN.md`: 기술 실행 전략 및 타임라인 (구체적인 구현 스텝 및 체크박스 필수)
|
|
65
68
|
|
|
66
69
|
### 메타데이터 (필수)
|
|
67
70
|
|
|
@@ -107,11 +110,12 @@ description: Create and manage project documentation according to the 365 Princi
|
|
|
107
110
|
|
|
108
111
|
| 작업 | 스킬 |
|
|
109
112
|
|:---|:---|
|
|
110
|
-
| Layer 1-2 기획/UI 문서 | `plan
|
|
111
|
-
| Layer 3-5 기술/로직/QA 문서 | `dev
|
|
112
|
-
| 피치덱 | `pitch
|
|
113
|
-
| 사업계획서 | `business
|
|
114
|
-
|
|
|
113
|
+
| Layer 1-2 기획/UI 문서 | `docs-plan` |
|
|
114
|
+
| Layer 3-5 기술/로직/QA 문서 | `docs-dev` |
|
|
115
|
+
| 피치덱 | `docs-pitch` |
|
|
116
|
+
| 사업계획서 | `docs-business` |
|
|
117
|
+
| 리액트 컴포넌트 표준 | `rules-react` |
|
|
118
|
+
| 전체 파이프라인 진행 | `rules-product` |
|
|
115
119
|
| 문서 구조 검증 | `verify-docs` |
|
|
116
120
|
|
|
117
121
|
## 7. Best Practices
|