@rubix0270/arboris 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 +151 -0
- package/cli/manifest.json +323 -0
- package/dist/cli.mjs +376 -0
- package/package.json +81 -0
- package/prisma/skills/accessibility/SKILL.md +147 -0
- package/prisma/skills/agent-architecture-audit/SKILL.md +257 -0
- package/prisma/skills/agent-eval/SKILL.md +146 -0
- package/prisma/skills/agent-harness-construction/SKILL.md +74 -0
- package/prisma/skills/agent-introspection-debugging/SKILL.md +154 -0
- package/prisma/skills/agent-payment-x402/SKILL.md +225 -0
- package/prisma/skills/agent-self-evaluation/SKILL.md +182 -0
- package/prisma/skills/agent-self-evaluation/examples/high-score-example.md +87 -0
- package/prisma/skills/agent-self-evaluation/examples/low-score-example.md +86 -0
- package/prisma/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
- package/prisma/skills/agent-self-evaluation/references/hook-integration.md +64 -0
- package/prisma/skills/agent-self-evaluation/scripts/evaluate.py +408 -0
- package/prisma/skills/agent-self-evaluation/templates/evaluation-report.md +86 -0
- package/prisma/skills/agent-sort/SKILL.md +216 -0
- package/prisma/skills/agentic-engineering/SKILL.md +64 -0
- package/prisma/skills/agentic-os/SKILL.md +388 -0
- package/prisma/skills/ai-first-engineering/SKILL.md +52 -0
- package/prisma/skills/ai-regression-testing/SKILL.md +386 -0
- package/prisma/skills/android-clean-architecture/SKILL.md +340 -0
- package/prisma/skills/angular-developer/SKILL.md +155 -0
- package/prisma/skills/angular-developer/references/angular-animations.md +160 -0
- package/prisma/skills/angular-developer/references/angular-aria.md +410 -0
- package/prisma/skills/angular-developer/references/cli.md +86 -0
- package/prisma/skills/angular-developer/references/component-harnesses.md +59 -0
- package/prisma/skills/angular-developer/references/component-styling.md +91 -0
- package/prisma/skills/angular-developer/references/components.md +117 -0
- package/prisma/skills/angular-developer/references/creating-services.md +97 -0
- package/prisma/skills/angular-developer/references/data-resolvers.md +69 -0
- package/prisma/skills/angular-developer/references/define-routes.md +67 -0
- package/prisma/skills/angular-developer/references/defining-providers.md +72 -0
- package/prisma/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/prisma/skills/angular-developer/references/e2e-testing.md +56 -0
- package/prisma/skills/angular-developer/references/effects.md +83 -0
- package/prisma/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/prisma/skills/angular-developer/references/host-elements.md +80 -0
- package/prisma/skills/angular-developer/references/injection-context.md +63 -0
- package/prisma/skills/angular-developer/references/inputs.md +101 -0
- package/prisma/skills/angular-developer/references/linked-signal.md +59 -0
- package/prisma/skills/angular-developer/references/loading-strategies.md +61 -0
- package/prisma/skills/angular-developer/references/mcp.md +108 -0
- package/prisma/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/prisma/skills/angular-developer/references/outputs.md +86 -0
- package/prisma/skills/angular-developer/references/reactive-forms.md +122 -0
- package/prisma/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/prisma/skills/angular-developer/references/resource.md +77 -0
- package/prisma/skills/angular-developer/references/route-animations.md +56 -0
- package/prisma/skills/angular-developer/references/route-guards.md +52 -0
- package/prisma/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/prisma/skills/angular-developer/references/router-testing.md +87 -0
- package/prisma/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/prisma/skills/angular-developer/references/signal-forms.md +795 -0
- package/prisma/skills/angular-developer/references/signals-overview.md +94 -0
- package/prisma/skills/angular-developer/references/tailwind-css.md +69 -0
- package/prisma/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/prisma/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/prisma/skills/api-connector-builder/SKILL.md +121 -0
- package/prisma/skills/api-design/SKILL.md +524 -0
- package/prisma/skills/architecture-decision-records/SKILL.md +180 -0
- package/prisma/skills/article-writing/SKILL.md +80 -0
- package/prisma/skills/automation-audit-ops/SKILL.md +143 -0
- package/prisma/skills/autonomous-agent-harness/SKILL.md +274 -0
- package/prisma/skills/autonomous-loops/SKILL.md +611 -0
- package/prisma/skills/backend-patterns/SKILL.md +562 -0
- package/prisma/skills/benchmark/SKILL.md +94 -0
- package/prisma/skills/benchmark-methodology/SKILL.md +190 -0
- package/prisma/skills/benchmark-optimization-loop/SKILL.md +70 -0
- package/prisma/skills/blender-motion-state-inspection/SKILL.md +165 -0
- package/prisma/skills/blueprint/SKILL.md +106 -0
- package/prisma/skills/brand-discovery/SKILL.md +145 -0
- package/prisma/skills/brand-discovery/references/10_purpose-why.md +40 -0
- package/prisma/skills/brand-discovery/references/20_positioning.md +44 -0
- package/prisma/skills/brand-discovery/references/30_audience-niche.md +52 -0
- package/prisma/skills/brand-discovery/references/40_personality-archetype.md +57 -0
- package/prisma/skills/brand-discovery/references/50_voice-tone.md +59 -0
- package/prisma/skills/brand-discovery/references/60_narrative-story.md +50 -0
- package/prisma/skills/brand-discovery/references/70_founder-tension.md +49 -0
- package/prisma/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
- package/prisma/skills/brand-voice/SKILL.md +98 -0
- package/prisma/skills/brand-voice/references/voice-profile-schema.md +55 -0
- package/prisma/skills/browser-qa/SKILL.md +105 -0
- package/prisma/skills/bun-runtime/SKILL.md +85 -0
- package/prisma/skills/canary-watch/SKILL.md +108 -0
- package/prisma/skills/carrier-relationship-management/SKILL.md +212 -0
- package/prisma/skills/cisco-ios-patterns/SKILL.md +164 -0
- package/prisma/skills/ck/SKILL.md +148 -0
- package/prisma/skills/ck/commands/forget.mjs +44 -0
- package/prisma/skills/ck/commands/info.mjs +24 -0
- package/prisma/skills/ck/commands/init.mjs +143 -0
- package/prisma/skills/ck/commands/list.mjs +40 -0
- package/prisma/skills/ck/commands/migrate.mjs +202 -0
- package/prisma/skills/ck/commands/resume.mjs +36 -0
- package/prisma/skills/ck/commands/save.mjs +210 -0
- package/prisma/skills/ck/commands/shared.mjs +387 -0
- package/prisma/skills/ck/hooks/session-start.mjs +224 -0
- package/prisma/skills/claude-devfleet/SKILL.md +112 -0
- package/prisma/skills/click-path-audit/SKILL.md +245 -0
- package/prisma/skills/clickhouse-io/SKILL.md +440 -0
- package/prisma/skills/code-tour/SKILL.md +254 -0
- package/prisma/skills/codebase-onboarding/SKILL.md +234 -0
- package/prisma/skills/codehealth-mcp/SKILL.md +167 -0
- package/prisma/skills/coding-standards/SKILL.md +551 -0
- package/prisma/skills/competitive-platform-analysis/SKILL.md +214 -0
- package/prisma/skills/competitive-report-structure/SKILL.md +162 -0
- package/prisma/skills/compose-multiplatform-patterns/SKILL.md +300 -0
- package/prisma/skills/config-gc/SKILL.md +120 -0
- package/prisma/skills/configure-ecc/SKILL.md +385 -0
- package/prisma/skills/connections-optimizer/SKILL.md +190 -0
- package/prisma/skills/content-engine/SKILL.md +132 -0
- package/prisma/skills/content-hash-cache-pattern/SKILL.md +162 -0
- package/prisma/skills/context-budget/SKILL.md +136 -0
- package/prisma/skills/continuous-agent-loop/SKILL.md +46 -0
- package/prisma/skills/continuous-learning/SKILL.md +132 -0
- package/prisma/skills/continuous-learning/config.json +18 -0
- package/prisma/skills/continuous-learning/evaluate-session.sh +69 -0
- package/prisma/skills/continuous-learning-v2/SKILL.md +361 -0
- package/prisma/skills/continuous-learning-v2/agents/observer-loop.sh +359 -0
- package/prisma/skills/continuous-learning-v2/agents/observer.md +189 -0
- package/prisma/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/prisma/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/prisma/skills/continuous-learning-v2/config.json +8 -0
- package/prisma/skills/continuous-learning-v2/hooks/observe.sh +585 -0
- package/prisma/skills/continuous-learning-v2/scripts/detect-project.sh +322 -0
- package/prisma/skills/continuous-learning-v2/scripts/instinct-cli.py +1956 -0
- package/prisma/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/prisma/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +68 -0
- package/prisma/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1421 -0
- package/prisma/skills/cost-aware-llm-pipeline/SKILL.md +184 -0
- package/prisma/skills/cost-tracking/SKILL.md +97 -0
- package/prisma/skills/council/SKILL.md +204 -0
- package/prisma/skills/cpp-coding-standards/SKILL.md +724 -0
- package/prisma/skills/cpp-testing/SKILL.md +325 -0
- package/prisma/skills/crosspost/SKILL.md +112 -0
- package/prisma/skills/csharp-testing/SKILL.md +322 -0
- package/prisma/skills/customer-billing-ops/SKILL.md +141 -0
- package/prisma/skills/customs-trade-compliance/SKILL.md +263 -0
- package/prisma/skills/dart-flutter-patterns/SKILL.md +564 -0
- package/prisma/skills/dashboard-builder/SKILL.md +109 -0
- package/prisma/skills/data-scraper-agent/SKILL.md +765 -0
- package/prisma/skills/data-throughput-accelerator/SKILL.md +73 -0
- package/prisma/skills/database-migrations/SKILL.md +430 -0
- package/prisma/skills/deep-research/SKILL.md +160 -0
- package/prisma/skills/defi-amm-security/SKILL.md +167 -0
- package/prisma/skills/delivery-gate/SKILL.md +126 -0
- package/prisma/skills/delivery-gate/hooks/quality-gate.py +220 -0
- package/prisma/skills/deployment-patterns/SKILL.md +428 -0
- package/prisma/skills/design-system/SKILL.md +83 -0
- package/prisma/skills/django-celery/SKILL.md +458 -0
- package/prisma/skills/django-patterns/SKILL.md +735 -0
- package/prisma/skills/django-security/SKILL.md +644 -0
- package/prisma/skills/django-tdd/SKILL.md +730 -0
- package/prisma/skills/django-verification/SKILL.md +470 -0
- package/prisma/skills/dmux-workflows/SKILL.md +192 -0
- package/prisma/skills/docker-patterns/SKILL.md +365 -0
- package/prisma/skills/documentation-lookup/SKILL.md +91 -0
- package/prisma/skills/dotnet-patterns/SKILL.md +322 -0
- package/prisma/skills/dynamic-workflow-mode/SKILL.md +124 -0
- package/prisma/skills/e2e-testing/SKILL.md +327 -0
- package/prisma/skills/ecc-guide/SKILL.md +190 -0
- package/prisma/skills/ecc-recipes/SKILL.md +149 -0
- package/prisma/skills/ecc-tools-cost-audit/SKILL.md +161 -0
- package/prisma/skills/email-ops/SKILL.md +122 -0
- package/prisma/skills/energy-procurement/SKILL.md +228 -0
- package/prisma/skills/enterprise-agent-ops/SKILL.md +51 -0
- package/prisma/skills/error-handling/SKILL.md +377 -0
- package/prisma/skills/eval-harness/SKILL.md +271 -0
- package/prisma/skills/evm-token-decimals/SKILL.md +131 -0
- package/prisma/skills/exa-search/SKILL.md +108 -0
- package/prisma/skills/fal-ai-media/SKILL.md +289 -0
- package/prisma/skills/fastapi-patterns/SKILL.md +514 -0
- package/prisma/skills/finance-billing-ops/SKILL.md +128 -0
- package/prisma/skills/flox-environments/SKILL.md +497 -0
- package/prisma/skills/flutter-dart-code-review/SKILL.md +436 -0
- package/prisma/skills/foundation-models-on-device/SKILL.md +243 -0
- package/prisma/skills/frontend-a11y/SKILL.md +446 -0
- package/prisma/skills/frontend-design-direction/SKILL.md +93 -0
- package/prisma/skills/frontend-patterns/SKILL.md +657 -0
- package/prisma/skills/frontend-slides/SKILL.md +185 -0
- package/prisma/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/prisma/skills/frontend-slides/animation-patterns.md +122 -0
- package/prisma/skills/frontend-slides/html-template.md +419 -0
- package/prisma/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/prisma/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/prisma/skills/frontend-slides/viewport-base.css +153 -0
- package/prisma/skills/fsharp-testing/SKILL.md +281 -0
- package/prisma/skills/gan-style-harness/SKILL.md +279 -0
- package/prisma/skills/gateguard/SKILL.md +133 -0
- package/prisma/skills/generating-python-installer/SKILL.md +820 -0
- package/prisma/skills/git-workflow/SKILL.md +716 -0
- package/prisma/skills/github-ops/SKILL.md +145 -0
- package/prisma/skills/golang-patterns/SKILL.md +675 -0
- package/prisma/skills/golang-testing/SKILL.md +721 -0
- package/prisma/skills/google-workspace-ops/SKILL.md +96 -0
- package/prisma/skills/growth-log/SKILL.md +128 -0
- package/prisma/skills/healthcare-cdss-patterns/SKILL.md +246 -0
- package/prisma/skills/healthcare-emr-patterns/SKILL.md +160 -0
- package/prisma/skills/healthcare-eval-harness/SKILL.md +208 -0
- package/prisma/skills/healthcare-phi-compliance/SKILL.md +146 -0
- package/prisma/skills/hermes-imports/SKILL.md +89 -0
- package/prisma/skills/hexagonal-architecture/SKILL.md +277 -0
- package/prisma/skills/hipaa-compliance/SKILL.md +79 -0
- package/prisma/skills/homelab-network-readiness/SKILL.md +170 -0
- package/prisma/skills/homelab-network-setup/SKILL.md +130 -0
- package/prisma/skills/homelab-pihole-dns/SKILL.md +275 -0
- package/prisma/skills/homelab-vlan-segmentation/SKILL.md +312 -0
- package/prisma/skills/homelab-wireguard-vpn/SKILL.md +306 -0
- package/prisma/skills/hookify-rules/SKILL.md +128 -0
- package/prisma/skills/inherit-legacy-style/SKILL.md +157 -0
- package/prisma/skills/intent-driven-development/SKILL.md +360 -0
- package/prisma/skills/inventory-demand-planning/SKILL.md +247 -0
- package/prisma/skills/investor-materials/SKILL.md +97 -0
- package/prisma/skills/investor-outreach/SKILL.md +92 -0
- package/prisma/skills/ios-icon-gen/SKILL.md +158 -0
- package/prisma/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/prisma/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/prisma/skills/iterative-retrieval/SKILL.md +212 -0
- package/prisma/skills/ito-basket-compare/SKILL.md +64 -0
- package/prisma/skills/ito-data-atlas-agent/SKILL.md +64 -0
- package/prisma/skills/ito-market-intelligence/SKILL.md +61 -0
- package/prisma/skills/ito-trade-planner/SKILL.md +68 -0
- package/prisma/skills/java-coding-standards/SKILL.md +384 -0
- package/prisma/skills/jira-integration/SKILL.md +303 -0
- package/prisma/skills/jpa-patterns/SKILL.md +152 -0
- package/prisma/skills/knowledge-ops/SKILL.md +155 -0
- package/prisma/skills/kotlin-coroutines-flows/SKILL.md +285 -0
- package/prisma/skills/kotlin-exposed-patterns/SKILL.md +720 -0
- package/prisma/skills/kotlin-ktor-patterns/SKILL.md +690 -0
- package/prisma/skills/kotlin-patterns/SKILL.md +712 -0
- package/prisma/skills/kotlin-testing/SKILL.md +825 -0
- package/prisma/skills/kubernetes-patterns/SKILL.md +756 -0
- package/prisma/skills/laravel-patterns/SKILL.md +416 -0
- package/prisma/skills/laravel-plugin-discovery/SKILL.md +230 -0
- package/prisma/skills/laravel-security/SKILL.md +948 -0
- package/prisma/skills/laravel-tdd/SKILL.md +675 -0
- package/prisma/skills/laravel-verification/SKILL.md +180 -0
- package/prisma/skills/latency-critical-systems/SKILL.md +74 -0
- package/prisma/skills/lead-intelligence/SKILL.md +322 -0
- package/prisma/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/prisma/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/prisma/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/prisma/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/prisma/skills/liquid-glass-design/SKILL.md +279 -0
- package/prisma/skills/llm-trading-agent-security/SKILL.md +147 -0
- package/prisma/skills/logistics-exception-management/SKILL.md +222 -0
- package/prisma/skills/loop-design-check/SKILL.md +143 -0
- package/prisma/skills/mailtrap-email-integration/SKILL.md +77 -0
- package/prisma/skills/make-interfaces-feel-better/SKILL.md +152 -0
- package/prisma/skills/manim-video/SKILL.md +90 -0
- package/prisma/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/prisma/skills/market-research/SKILL.md +76 -0
- package/prisma/skills/marketing-campaign/SKILL.md +114 -0
- package/prisma/skills/mcp-server-patterns/SKILL.md +70 -0
- package/prisma/skills/messages-ops/SKILL.md +105 -0
- package/prisma/skills/ml-adoption-playbook/SKILL.md +57 -0
- package/prisma/skills/mle-workflow/SKILL.md +347 -0
- package/prisma/skills/motion-advanced/SKILL.md +596 -0
- package/prisma/skills/motion-foundations/SKILL.md +299 -0
- package/prisma/skills/motion-patterns/SKILL.md +434 -0
- package/prisma/skills/motion-ui/SKILL.md +576 -0
- package/prisma/skills/mysql-patterns/SKILL.md +413 -0
- package/prisma/skills/nanoclaw-repl/SKILL.md +34 -0
- package/prisma/skills/nestjs-patterns/SKILL.md +231 -0
- package/prisma/skills/netmiko-ssh-automation/SKILL.md +174 -0
- package/prisma/skills/network-bgp-diagnostics/SKILL.md +168 -0
- package/prisma/skills/network-config-validation/SKILL.md +211 -0
- package/prisma/skills/network-interface-health/SKILL.md +153 -0
- package/prisma/skills/nextjs-turbopack/SKILL.md +58 -0
- package/prisma/skills/nodejs-keccak256/SKILL.md +103 -0
- package/prisma/skills/nutrient-document-processing/SKILL.md +168 -0
- package/prisma/skills/nuxt4-patterns/SKILL.md +101 -0
- package/prisma/skills/openclaw-persona-forge/SKILL.md +289 -0
- package/prisma/skills/openclaw-persona-forge/gacha.py +224 -0
- package/prisma/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/prisma/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/prisma/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/prisma/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/prisma/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/prisma/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/prisma/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/prisma/skills/opensource-pipeline/SKILL.md +256 -0
- package/prisma/skills/orch-add-feature/SKILL.md +45 -0
- package/prisma/skills/orch-build-mvp/SKILL.md +49 -0
- package/prisma/skills/orch-change-feature/SKILL.md +43 -0
- package/prisma/skills/orch-fix-defect/SKILL.md +43 -0
- package/prisma/skills/orch-pipeline/SKILL.md +121 -0
- package/prisma/skills/orch-refine-code/SKILL.md +44 -0
- package/prisma/skills/parallel-execution-optimizer/SKILL.md +73 -0
- package/prisma/skills/perl-patterns/SKILL.md +505 -0
- package/prisma/skills/perl-security/SKILL.md +504 -0
- package/prisma/skills/perl-testing/SKILL.md +476 -0
- package/prisma/skills/plan-orchestrate/SKILL.md +263 -0
- package/prisma/skills/plankton-code-quality/SKILL.md +237 -0
- package/prisma/skills/postgres-patterns/SKILL.md +148 -0
- package/prisma/skills/prediction-market-oracle-research/SKILL.md +64 -0
- package/prisma/skills/prediction-market-risk-review/SKILL.md +61 -0
- package/prisma/skills/prisma-patterns/SKILL.md +401 -0
- package/prisma/skills/product-capability/SKILL.md +142 -0
- package/prisma/skills/product-lens/SKILL.md +93 -0
- package/prisma/skills/production-audit/SKILL.md +207 -0
- package/prisma/skills/production-scheduling/SKILL.md +238 -0
- package/prisma/skills/project-flow-ops/SKILL.md +112 -0
- package/prisma/skills/prompt-optimizer/SKILL.md +398 -0
- package/prisma/skills/python-patterns/SKILL.md +751 -0
- package/prisma/skills/python-testing/SKILL.md +817 -0
- package/prisma/skills/pytorch-patterns/SKILL.md +397 -0
- package/prisma/skills/quality-nonconformance/SKILL.md +260 -0
- package/prisma/skills/quarkus-patterns/SKILL.md +723 -0
- package/prisma/skills/quarkus-security/SKILL.md +468 -0
- package/prisma/skills/quarkus-tdd/SKILL.md +812 -0
- package/prisma/skills/quarkus-verification/SKILL.md +480 -0
- package/prisma/skills/ralphinho-rfc-pipeline/SKILL.md +68 -0
- package/prisma/skills/react-native-patterns/SKILL.md +326 -0
- package/prisma/skills/react-patterns/SKILL.md +342 -0
- package/prisma/skills/react-performance/SKILL.md +575 -0
- package/prisma/skills/react-testing/SKILL.md +424 -0
- package/prisma/skills/recsys-pipeline-architect/SKILL.md +115 -0
- package/prisma/skills/recursive-decision-ledger/SKILL.md +80 -0
- package/prisma/skills/redis-patterns/SKILL.md +404 -0
- package/prisma/skills/regex-vs-llm-structured-text/SKILL.md +221 -0
- package/prisma/skills/remotion-video-creation/SKILL.md +43 -0
- package/prisma/skills/remotion-video-creation/rules/3d.md +86 -0
- package/prisma/skills/remotion-video-creation/rules/animations.md +29 -0
- package/prisma/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/prisma/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/prisma/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/prisma/skills/remotion-video-creation/rules/assets.md +78 -0
- package/prisma/skills/remotion-video-creation/rules/audio.md +172 -0
- package/prisma/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/prisma/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/prisma/skills/remotion-video-creation/rules/charts.md +58 -0
- package/prisma/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/prisma/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/prisma/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/prisma/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/prisma/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/prisma/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/prisma/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/prisma/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/prisma/skills/remotion-video-creation/rules/images.md +130 -0
- package/prisma/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/prisma/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/prisma/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/prisma/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/prisma/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/prisma/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/prisma/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/prisma/skills/remotion-video-creation/rules/timing.md +179 -0
- package/prisma/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/prisma/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/prisma/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/prisma/skills/remotion-video-creation/rules/videos.md +171 -0
- package/prisma/skills/repo-scan/SKILL.md +79 -0
- package/prisma/skills/research-ops/SKILL.md +113 -0
- package/prisma/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/prisma/skills/rules-distill/SKILL.md +265 -0
- package/prisma/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/prisma/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/prisma/skills/rust-patterns/SKILL.md +500 -0
- package/prisma/skills/rust-testing/SKILL.md +501 -0
- package/prisma/skills/safety-guard/SKILL.md +76 -0
- package/prisma/skills/santa-method/SKILL.md +307 -0
- package/prisma/skills/scientific-db-pubmed-database/SKILL.md +176 -0
- package/prisma/skills/scientific-db-uspto-database/SKILL.md +178 -0
- package/prisma/skills/scientific-pkg-gget/SKILL.md +167 -0
- package/prisma/skills/scientific-thinking-literature-review/SKILL.md +193 -0
- package/prisma/skills/scientific-thinking-scholar-evaluation/SKILL.md +161 -0
- package/prisma/skills/search-first/SKILL.md +183 -0
- package/prisma/skills/security-bounty-hunter/SKILL.md +100 -0
- package/prisma/skills/security-review/SKILL.md +504 -0
- package/prisma/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/prisma/skills/security-scan/SKILL.md +166 -0
- package/prisma/skills/seo/SKILL.md +155 -0
- package/prisma/skills/skill-comply/SKILL.md +59 -0
- package/prisma/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/prisma/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/prisma/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/prisma/skills/skill-comply/prompts/classifier.md +24 -0
- package/prisma/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/prisma/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/prisma/skills/skill-comply/pyproject.toml +15 -0
- package/prisma/skills/skill-comply/scripts/__init__.py +0 -0
- package/prisma/skills/skill-comply/scripts/classifier.py +85 -0
- package/prisma/skills/skill-comply/scripts/grader.py +124 -0
- package/prisma/skills/skill-comply/scripts/parser.py +107 -0
- package/prisma/skills/skill-comply/scripts/report.py +170 -0
- package/prisma/skills/skill-comply/scripts/run.py +127 -0
- package/prisma/skills/skill-comply/scripts/runner.py +194 -0
- package/prisma/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/prisma/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/prisma/skills/skill-comply/scripts/utils.py +13 -0
- package/prisma/skills/skill-comply/tests/test_grader.py +197 -0
- package/prisma/skills/skill-comply/tests/test_parser.py +90 -0
- package/prisma/skills/skill-comply/tests/test_runner.py +172 -0
- package/prisma/skills/skill-scout/SKILL.md +141 -0
- package/prisma/skills/skill-stocktake/SKILL.md +195 -0
- package/prisma/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/prisma/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/prisma/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/prisma/skills/social-graph-ranker/SKILL.md +155 -0
- package/prisma/skills/social-publisher/SKILL.md +130 -0
- package/prisma/skills/springboot-patterns/SKILL.md +315 -0
- package/prisma/skills/springboot-security/SKILL.md +273 -0
- package/prisma/skills/springboot-tdd/SKILL.md +159 -0
- package/prisma/skills/springboot-verification/SKILL.md +232 -0
- package/prisma/skills/strategic-compact/SKILL.md +136 -0
- package/prisma/skills/swift-actor-persistence/SKILL.md +144 -0
- package/prisma/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/prisma/skills/swift-protocol-di-testing/SKILL.md +191 -0
- package/prisma/skills/swiftui-patterns/SKILL.md +259 -0
- package/prisma/skills/taste/SKILL.md +264 -0
- package/prisma/skills/taste/references/genre-taxonomy.md +87 -0
- package/prisma/skills/tdd-workflow/SKILL.md +583 -0
- package/prisma/skills/team-agent-orchestration/SKILL.md +111 -0
- package/prisma/skills/team-builder/SKILL.md +169 -0
- package/prisma/skills/terminal-ops/SKILL.md +110 -0
- package/prisma/skills/tinystruct-patterns/SKILL.md +279 -0
- package/prisma/skills/tinystruct-patterns/references/architecture.md +90 -0
- package/prisma/skills/tinystruct-patterns/references/data-handling.md +60 -0
- package/prisma/skills/tinystruct-patterns/references/database.md +99 -0
- package/prisma/skills/tinystruct-patterns/references/routing.md +64 -0
- package/prisma/skills/tinystruct-patterns/references/system-usage.md +97 -0
- package/prisma/skills/tinystruct-patterns/references/testing.md +72 -0
- package/prisma/skills/token-budget-advisor/SKILL.md +134 -0
- package/prisma/skills/ui-demo/SKILL.md +466 -0
- package/prisma/skills/ui-to-vue/SKILL.md +135 -0
- package/prisma/skills/uncloud/SKILL.md +344 -0
- package/prisma/skills/unified-notifications-ops/SKILL.md +188 -0
- package/prisma/skills/verification-loop/SKILL.md +127 -0
- package/prisma/skills/video-editing/SKILL.md +311 -0
- package/prisma/skills/videodb/SKILL.md +375 -0
- package/prisma/skills/videodb/reference/api-reference.md +550 -0
- package/prisma/skills/videodb/reference/capture-reference.md +407 -0
- package/prisma/skills/videodb/reference/capture.md +101 -0
- package/prisma/skills/videodb/reference/editor.md +443 -0
- package/prisma/skills/videodb/reference/generative.md +331 -0
- package/prisma/skills/videodb/reference/rtstream-reference.md +564 -0
- package/prisma/skills/videodb/reference/rtstream.md +65 -0
- package/prisma/skills/videodb/reference/search.md +230 -0
- package/prisma/skills/videodb/reference/streaming.md +406 -0
- package/prisma/skills/videodb/reference/use-cases.md +118 -0
- package/prisma/skills/videodb/scripts/ws_listener.py +282 -0
- package/prisma/skills/visa-doc-translate/README.md +86 -0
- package/prisma/skills/visa-doc-translate/SKILL.md +117 -0
- package/prisma/skills/vite-patterns/SKILL.md +450 -0
- package/prisma/skills/vue-patterns/SKILL.md +471 -0
- package/prisma/skills/windows-desktop-e2e/SKILL.md +888 -0
- package/prisma/skills/workspace-surface-audit/SKILL.md +126 -0
- package/prisma/skills/x-api/SKILL.md +235 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: investor-materials
|
|
3
|
+
description: Create and update pitch decks, one-pagers, investor memos, accelerator applications, financial models, and fundraising materials. Use when the user needs investor-facing documents, projections, use-of-funds tables, milestone plans, or materials that must stay internally consistent across multiple fundraising assets.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Investor Materials
|
|
9
|
+
|
|
10
|
+
Build investor-facing materials that are consistent, credible, and easy to defend.
|
|
11
|
+
|
|
12
|
+
## When to Activate
|
|
13
|
+
|
|
14
|
+
- creating or revising a pitch deck
|
|
15
|
+
- writing an investor memo or one-pager
|
|
16
|
+
- building a financial model, milestone plan, or use-of-funds table
|
|
17
|
+
- answering accelerator or incubator application questions
|
|
18
|
+
- aligning multiple fundraising docs around one source of truth
|
|
19
|
+
|
|
20
|
+
## Golden Rule
|
|
21
|
+
|
|
22
|
+
All investor materials must agree with each other.
|
|
23
|
+
|
|
24
|
+
Create or confirm a single source of truth before writing:
|
|
25
|
+
- traction metrics
|
|
26
|
+
- pricing and revenue assumptions
|
|
27
|
+
- raise size and instrument
|
|
28
|
+
- use of funds
|
|
29
|
+
- team bios and titles
|
|
30
|
+
- milestones and timelines
|
|
31
|
+
|
|
32
|
+
If conflicting numbers appear, stop and resolve them before drafting.
|
|
33
|
+
|
|
34
|
+
## Core Workflow
|
|
35
|
+
|
|
36
|
+
1. inventory the canonical facts
|
|
37
|
+
2. identify missing assumptions
|
|
38
|
+
3. choose the asset type
|
|
39
|
+
4. draft the asset with explicit logic
|
|
40
|
+
5. cross-check every number against the source of truth
|
|
41
|
+
|
|
42
|
+
## Asset Guidance
|
|
43
|
+
|
|
44
|
+
### Pitch Deck
|
|
45
|
+
Recommended flow:
|
|
46
|
+
1. company + wedge
|
|
47
|
+
2. problem
|
|
48
|
+
3. solution
|
|
49
|
+
4. product / demo
|
|
50
|
+
5. market
|
|
51
|
+
6. business model
|
|
52
|
+
7. traction
|
|
53
|
+
8. team
|
|
54
|
+
9. competition / differentiation
|
|
55
|
+
10. ask
|
|
56
|
+
11. use of funds / milestones
|
|
57
|
+
12. appendix
|
|
58
|
+
|
|
59
|
+
If the user wants a web-native deck, pair this skill with `frontend-slides`.
|
|
60
|
+
|
|
61
|
+
### One-Pager / Memo
|
|
62
|
+
- state what the company does in one clean sentence
|
|
63
|
+
- show why now
|
|
64
|
+
- include traction and proof points early
|
|
65
|
+
- make the ask precise
|
|
66
|
+
- keep claims easy to verify
|
|
67
|
+
|
|
68
|
+
### Financial Model
|
|
69
|
+
Include:
|
|
70
|
+
- explicit assumptions
|
|
71
|
+
- bear / base / bull cases when useful
|
|
72
|
+
- clean layer-by-layer revenue logic
|
|
73
|
+
- milestone-linked spending
|
|
74
|
+
- sensitivity analysis where the decision hinges on assumptions
|
|
75
|
+
|
|
76
|
+
### Accelerator Applications
|
|
77
|
+
- answer the exact question asked
|
|
78
|
+
- prioritize traction, insight, and team advantage
|
|
79
|
+
- avoid puffery
|
|
80
|
+
- keep internal metrics consistent with the deck and model
|
|
81
|
+
|
|
82
|
+
## Red Flags to Avoid
|
|
83
|
+
|
|
84
|
+
- unverifiable claims
|
|
85
|
+
- fuzzy market sizing without assumptions
|
|
86
|
+
- inconsistent team roles or titles
|
|
87
|
+
- revenue math that does not sum cleanly
|
|
88
|
+
- inflated certainty where assumptions are fragile
|
|
89
|
+
|
|
90
|
+
## Quality Gate
|
|
91
|
+
|
|
92
|
+
Before delivering:
|
|
93
|
+
- every number matches the current source of truth
|
|
94
|
+
- use of funds and revenue layers sum correctly
|
|
95
|
+
- assumptions are visible, not buried
|
|
96
|
+
- the story is clear without hype language
|
|
97
|
+
- the final asset is defensible in a partner meeting
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: investor-outreach
|
|
3
|
+
description: Draft cold emails, warm intro blurbs, follow-ups, update emails, and investor communications for fundraising. Use when the user wants outreach to angels, VCs, strategic investors, or accelerators and needs concise, personalized, investor-facing messaging.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: ECC
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Investor Outreach
|
|
9
|
+
|
|
10
|
+
Write investor communication that is short, concrete, and easy to act on.
|
|
11
|
+
|
|
12
|
+
## When to Activate
|
|
13
|
+
|
|
14
|
+
- writing a cold email to an investor
|
|
15
|
+
- drafting a warm intro request
|
|
16
|
+
- sending follow-ups after a meeting or no response
|
|
17
|
+
- writing investor updates during a process
|
|
18
|
+
- tailoring outreach based on fund thesis or partner fit
|
|
19
|
+
|
|
20
|
+
## Core Rules
|
|
21
|
+
|
|
22
|
+
1. Personalize every outbound message.
|
|
23
|
+
2. Keep the ask low-friction.
|
|
24
|
+
3. Use proof instead of adjectives.
|
|
25
|
+
4. Stay concise.
|
|
26
|
+
5. Never send copy that could go to any investor.
|
|
27
|
+
|
|
28
|
+
## Voice Handling
|
|
29
|
+
|
|
30
|
+
If the user's voice matters, run `brand-voice` first and reuse its `VOICE PROFILE`.
|
|
31
|
+
This skill should keep the investor-specific structure and ask discipline, not recreate its own parallel voice system.
|
|
32
|
+
|
|
33
|
+
## Hard Bans
|
|
34
|
+
|
|
35
|
+
Delete and rewrite any of these:
|
|
36
|
+
- "I'd love to connect"
|
|
37
|
+
- "excited to share"
|
|
38
|
+
- generic thesis praise without a real tie-in
|
|
39
|
+
- vague founder adjectives
|
|
40
|
+
- begging language
|
|
41
|
+
- soft closing questions when a direct ask is clearer
|
|
42
|
+
|
|
43
|
+
## Cold Email Structure
|
|
44
|
+
|
|
45
|
+
1. subject line: short and specific
|
|
46
|
+
2. opener: why this investor specifically
|
|
47
|
+
3. pitch: what the company does, why now, and what proof matters
|
|
48
|
+
4. ask: one concrete next step
|
|
49
|
+
5. sign-off: name, role, and one credibility anchor if needed
|
|
50
|
+
|
|
51
|
+
## Personalization Sources
|
|
52
|
+
|
|
53
|
+
Reference one or more of:
|
|
54
|
+
- relevant portfolio companies
|
|
55
|
+
- a public thesis, talk, post, or article
|
|
56
|
+
- a mutual connection
|
|
57
|
+
- a clear market or product fit with the investor's focus
|
|
58
|
+
|
|
59
|
+
If that context is missing, state that the draft still needs personalization instead of pretending it is finished.
|
|
60
|
+
|
|
61
|
+
## Follow-Up Cadence
|
|
62
|
+
|
|
63
|
+
Default:
|
|
64
|
+
- day 0: initial outbound
|
|
65
|
+
- day 4 or 5: short follow-up with one new data point
|
|
66
|
+
- day 10 to 12: final follow-up with a clean close
|
|
67
|
+
|
|
68
|
+
Do not keep nudging after that unless the user wants a longer sequence.
|
|
69
|
+
|
|
70
|
+
## Warm Intro Requests
|
|
71
|
+
|
|
72
|
+
Make life easy for the connector:
|
|
73
|
+
- explain why the intro is a fit
|
|
74
|
+
- include a forwardable blurb
|
|
75
|
+
- keep the forwardable blurb under 100 words
|
|
76
|
+
|
|
77
|
+
## Post-Meeting Updates
|
|
78
|
+
|
|
79
|
+
Include:
|
|
80
|
+
- the specific thing discussed
|
|
81
|
+
- the answer or update promised
|
|
82
|
+
- one new proof point if available
|
|
83
|
+
- the next step
|
|
84
|
+
|
|
85
|
+
## Quality Gate
|
|
86
|
+
|
|
87
|
+
Before delivering:
|
|
88
|
+
- the message is genuinely personalized
|
|
89
|
+
- the ask is explicit
|
|
90
|
+
- the proof point is concrete
|
|
91
|
+
- filler praise and softener language are gone
|
|
92
|
+
- word count stays tight
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ios-icon-gen
|
|
3
|
+
description: Generate iOS app icons as PNG imagesets for Xcode asset catalogs from SF Symbols (5000+ Apple-native) or Iconify API (275k+ open source icons from 200+ collections). Use when generating icons, creating icon assets, adding icons to asset catalog, or searching for icons for iOS projects.
|
|
4
|
+
metadata:
|
|
5
|
+
origin: community
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# iOS Icon Generator
|
|
9
|
+
|
|
10
|
+
Generate PNG icon imagesets for Xcode asset catalogs from two sources.
|
|
11
|
+
|
|
12
|
+
## When to Activate
|
|
13
|
+
|
|
14
|
+
- Generating icon assets for an iOS/macOS Xcode project
|
|
15
|
+
- Searching for icons across open source collections
|
|
16
|
+
- Creating PNG imagesets (1x, 2x, 3x) for asset catalogs
|
|
17
|
+
- Replacing placeholder icons with production-quality assets
|
|
18
|
+
- Matching existing icon styles in an Xcode project
|
|
19
|
+
|
|
20
|
+
## Core Principles
|
|
21
|
+
|
|
22
|
+
### 1. Two Sources, One Output Format
|
|
23
|
+
Both sources produce identical Xcode-compatible imagesets. Choose based on need:
|
|
24
|
+
|
|
25
|
+
| Source | Icons | Requires | Best for |
|
|
26
|
+
|--------|-------|----------|----------|
|
|
27
|
+
| **Iconify API** | 275,000+ from 200+ collections | Internet | Wide selection, specific styles, open source icons |
|
|
28
|
+
| **SF Symbols** | 5,000+ Apple symbols | macOS only | Apple-native style, offline use |
|
|
29
|
+
|
|
30
|
+
### 2. Always Match Existing Style
|
|
31
|
+
Before generating, check the project's existing icons for size, color, and weight consistency.
|
|
32
|
+
|
|
33
|
+
### 3. Output Structure
|
|
34
|
+
Both methods produce a complete Xcode imageset:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
<output-dir>/<asset-name>.imageset/
|
|
38
|
+
Contents.json
|
|
39
|
+
<asset-name>.png # 1x (68px default)
|
|
40
|
+
<asset-name>@2x.png # 2x (136px default)
|
|
41
|
+
<asset-name>@3x.png # 3x (204px default)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
### Step 1: Assess Requirements
|
|
47
|
+
|
|
48
|
+
Determine icon needs: what the icon represents, preferred style, target color, and size.
|
|
49
|
+
|
|
50
|
+
If the project already has icons, check existing style:
|
|
51
|
+
```bash
|
|
52
|
+
# Check dimensions of existing icon
|
|
53
|
+
sips -g pixelWidth -g pixelHeight path/to/existing@2x.png
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Step 2: Search for Icons
|
|
57
|
+
|
|
58
|
+
**Iconify API (recommended for wide selection):**
|
|
59
|
+
```bash
|
|
60
|
+
# Search all collections
|
|
61
|
+
$SKILL_DIR/scripts/iconify_gen.sh search "receipt"
|
|
62
|
+
|
|
63
|
+
# Search within a specific collection
|
|
64
|
+
$SKILL_DIR/scripts/iconify_gen.sh search "business card" --prefix mdi
|
|
65
|
+
|
|
66
|
+
# List available collections
|
|
67
|
+
$SKILL_DIR/scripts/iconify_gen.sh collections
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**SF Symbols (for Apple-native style):**
|
|
71
|
+
Browse the SF Symbols app or reference common names:
|
|
72
|
+
|
|
73
|
+
| Use Case | Symbol Name |
|
|
74
|
+
|----------|-------------|
|
|
75
|
+
| Document | `doc.text`, `doc.fill` |
|
|
76
|
+
| Receipt | `doc.text.below.ecg`, `receipt` |
|
|
77
|
+
| Person | `person.crop.rectangle`, `person.text.rectangle` |
|
|
78
|
+
| Camera | `camera`, `camera.fill` |
|
|
79
|
+
| Scan | `doc.viewfinder`, `qrcode.viewfinder` |
|
|
80
|
+
| Settings | `gearshape`, `slider.horizontal.3` |
|
|
81
|
+
|
|
82
|
+
### Step 3: Preview (Optional)
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Iconify preview
|
|
86
|
+
$SKILL_DIR/scripts/iconify_gen.sh preview mdi:receipt-text-outline
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Step 4: Generate
|
|
90
|
+
|
|
91
|
+
**Iconify API:**
|
|
92
|
+
```bash
|
|
93
|
+
# Basic generation
|
|
94
|
+
$SKILL_DIR/scripts/iconify_gen.sh mdi:receipt-text-outline editTool_expenseReport
|
|
95
|
+
|
|
96
|
+
# Custom color and output location
|
|
97
|
+
$SKILL_DIR/scripts/iconify_gen.sh mdi:receipt-text-outline myIcon --color 007AFF --output ./Assets.xcassets/icons
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Options: `--size <pt>` (default: 68), `--color <hex>` (default: 8E8E93), `--output <dir>` (default: /tmp/icons)
|
|
101
|
+
|
|
102
|
+
**SF Symbols:**
|
|
103
|
+
```bash
|
|
104
|
+
# Basic generation
|
|
105
|
+
swift $SKILL_DIR/scripts/generate_icons.swift doc.text.below.ecg editTool_expenseReport
|
|
106
|
+
|
|
107
|
+
# Custom color, weight, and output
|
|
108
|
+
swift $SKILL_DIR/scripts/generate_icons.swift person.crop.rectangle myIcon --color 007AFF --weight regular --output ./Assets.xcassets/icons
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Options: `--size <pt>` (default: 68), `--color <hex>` (default: 8E8E93), `--weight <name>` (default: thin), `--output <dir>` (default: /tmp/icons)
|
|
112
|
+
|
|
113
|
+
### Step 5: Verify and Integrate
|
|
114
|
+
|
|
115
|
+
1. Read the generated @2x PNG to verify visually
|
|
116
|
+
2. Copy to asset catalog if not output there directly:
|
|
117
|
+
```bash
|
|
118
|
+
cp -r /tmp/icons/<name>.imageset path/to/Assets.xcassets/<group>/
|
|
119
|
+
```
|
|
120
|
+
3. Build the project to verify Xcode picks up the new assets
|
|
121
|
+
|
|
122
|
+
## Popular Iconify Collections
|
|
123
|
+
|
|
124
|
+
| Prefix | Name | Count | Style |
|
|
125
|
+
|--------|------|-------|-------|
|
|
126
|
+
| `mdi` | Material Design Icons | 7400+ | Filled + outline variants |
|
|
127
|
+
| `ph` | Phosphor | 9000+ | 6 weights per icon |
|
|
128
|
+
| `solar` | Solar | 7400+ | Bold, linear, outline |
|
|
129
|
+
| `tabler` | Tabler Icons | 6000+ | Consistent stroke width |
|
|
130
|
+
| `lucide` | Lucide | 1700+ | Clean, minimal |
|
|
131
|
+
| `ri` | Remix Icon | 3100+ | Filled + line variants |
|
|
132
|
+
| `carbon` | Carbon | 2400+ | IBM design language |
|
|
133
|
+
| `heroicons` | HeroIcons | 1200+ | Tailwind CSS companion |
|
|
134
|
+
|
|
135
|
+
Browse all: <https://icon-sets.iconify.design/>
|
|
136
|
+
|
|
137
|
+
## Scripts Reference
|
|
138
|
+
|
|
139
|
+
| Script | Source | Path |
|
|
140
|
+
|--------|--------|------|
|
|
141
|
+
| `iconify_gen.sh` | Iconify API (275k+ icons) | `$SKILL_DIR/scripts/iconify_gen.sh` |
|
|
142
|
+
| `generate_icons.swift` | SF Symbols (5k+ icons) | `$SKILL_DIR/scripts/generate_icons.swift` |
|
|
143
|
+
|
|
144
|
+
## Best Practices
|
|
145
|
+
|
|
146
|
+
- **Search before generating** -- browse available icons to find the best match
|
|
147
|
+
- **Match existing project style** -- check dimensions, color, and weight of existing icons before generating new ones
|
|
148
|
+
- **Use Iconify for variety** -- 200+ collections means you can find the exact style you need
|
|
149
|
+
- **Use SF Symbols for Apple consistency** -- they match system UI perfectly
|
|
150
|
+
- **Generate directly to asset catalog** -- use `--output ./Assets.xcassets/icons` to skip manual copying
|
|
151
|
+
- **Verify visually** -- always preview the @2x PNG before committing
|
|
152
|
+
|
|
153
|
+
## Anti-Patterns
|
|
154
|
+
|
|
155
|
+
- Generating icons without checking existing project icon style
|
|
156
|
+
- Using default colors when the project has a defined color palette
|
|
157
|
+
- Generating at wrong sizes (check existing icons first)
|
|
158
|
+
- Committing generated icons without visual verification
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/usr/bin/env swift
|
|
2
|
+
|
|
3
|
+
import AppKit
|
|
4
|
+
import Foundation
|
|
5
|
+
|
|
6
|
+
// MARK: - Configuration
|
|
7
|
+
|
|
8
|
+
struct IconSpec {
|
|
9
|
+
let symbolName: String
|
|
10
|
+
let assetName: String
|
|
11
|
+
let baseSize: CGFloat
|
|
12
|
+
let color: NSColor
|
|
13
|
+
let weight: NSFont.Weight
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
func parseColor(_ hex: String) -> NSColor {
|
|
17
|
+
var hex = hex.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
18
|
+
if hex.hasPrefix("#") { hex.removeFirst() }
|
|
19
|
+
guard hex.count == 6, let value = UInt64(hex, radix: 16) else {
|
|
20
|
+
return NSColor(red: 142/255, green: 142/255, blue: 147/255, alpha: 1.0)
|
|
21
|
+
}
|
|
22
|
+
return NSColor(
|
|
23
|
+
red: CGFloat((value >> 16) & 0xFF) / 255,
|
|
24
|
+
green: CGFloat((value >> 8) & 0xFF) / 255,
|
|
25
|
+
blue: CGFloat(value & 0xFF) / 255,
|
|
26
|
+
alpha: 1.0
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
func parseWeight(_ name: String) -> NSFont.Weight {
|
|
31
|
+
switch name.lowercased() {
|
|
32
|
+
case "ultralight": return .ultraLight
|
|
33
|
+
case "thin": return .thin
|
|
34
|
+
case "light": return .light
|
|
35
|
+
case "regular": return .regular
|
|
36
|
+
case "medium": return .medium
|
|
37
|
+
case "semibold": return .semibold
|
|
38
|
+
case "bold": return .bold
|
|
39
|
+
case "heavy": return .heavy
|
|
40
|
+
case "black": return .black
|
|
41
|
+
default: return .thin
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// MARK: - Generation
|
|
46
|
+
|
|
47
|
+
enum IconError: Error, CustomStringConvertible {
|
|
48
|
+
case directoryCreation(String)
|
|
49
|
+
case symbolNotFound(String)
|
|
50
|
+
case configurationFailed(String)
|
|
51
|
+
case pngCreation(String)
|
|
52
|
+
case fileWrite(String)
|
|
53
|
+
|
|
54
|
+
var description: String {
|
|
55
|
+
switch self {
|
|
56
|
+
case .directoryCreation(let msg): return msg
|
|
57
|
+
case .symbolNotFound(let msg): return msg
|
|
58
|
+
case .configurationFailed(let msg): return msg
|
|
59
|
+
case .pngCreation(let msg): return msg
|
|
60
|
+
case .fileWrite(let msg): return msg
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
func generateIcon(_ spec: IconSpec, outputDir: String) throws {
|
|
66
|
+
let dir = "\(outputDir)/\(spec.assetName).imageset"
|
|
67
|
+
do {
|
|
68
|
+
try FileManager.default.createDirectory(atPath: dir, withIntermediateDirectories: true)
|
|
69
|
+
} catch {
|
|
70
|
+
throw IconError.directoryCreation("Could not create output directory '\(dir)': \(error.localizedDescription)")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let scales: [(suffix: String, multiplier: CGFloat)] = [("", 1), ("@2x", 2), ("@3x", 3)]
|
|
74
|
+
|
|
75
|
+
for scale in scales {
|
|
76
|
+
let pixelSize = spec.baseSize * scale.multiplier
|
|
77
|
+
let imageSize = NSSize(width: pixelSize, height: pixelSize)
|
|
78
|
+
|
|
79
|
+
let config = NSImage.SymbolConfiguration(
|
|
80
|
+
pointSize: pixelSize * 0.40,
|
|
81
|
+
weight: spec.weight,
|
|
82
|
+
scale: .large
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
guard let symbol = NSImage(systemSymbolName: spec.symbolName, accessibilityDescription: nil) else {
|
|
86
|
+
throw IconError.symbolNotFound("SF Symbol '\(spec.symbolName)' not found. Run 'SF Symbols' app to browse available names.")
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
guard let configured = symbol.withSymbolConfiguration(config) else {
|
|
90
|
+
throw IconError.configurationFailed("Could not apply symbol configuration to '\(spec.symbolName)'")
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
let image = NSImage(size: imageSize, flipped: false) { rect in
|
|
94
|
+
let symSize = configured.size
|
|
95
|
+
let x = (rect.width - symSize.width) / 2
|
|
96
|
+
let y = (rect.height - symSize.height) / 2
|
|
97
|
+
let drawRect = NSRect(x: x, y: y, width: symSize.width, height: symSize.height)
|
|
98
|
+
|
|
99
|
+
let tinted = NSImage(size: symSize, flipped: false) { tintRect in
|
|
100
|
+
configured.draw(in: tintRect)
|
|
101
|
+
spec.color.set()
|
|
102
|
+
tintRect.fill(using: .sourceAtop)
|
|
103
|
+
return true
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
tinted.draw(in: drawRect, from: .zero, operation: .sourceOver, fraction: 1.0)
|
|
107
|
+
return true
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
guard let tiffData = image.tiffRepresentation,
|
|
111
|
+
let bitmap = NSBitmapImageRep(data: tiffData),
|
|
112
|
+
let pngData = bitmap.representation(using: .png, properties: [:]) else {
|
|
113
|
+
throw IconError.pngCreation("Failed to create PNG for \(spec.assetName)\(scale.suffix)")
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
let fileName = "\(spec.assetName)\(scale.suffix).png"
|
|
117
|
+
do {
|
|
118
|
+
try pngData.write(to: URL(fileURLWithPath: "\(dir)/\(fileName)"))
|
|
119
|
+
} catch {
|
|
120
|
+
throw IconError.fileWrite("Failed to write \(fileName): \(error.localizedDescription)")
|
|
121
|
+
}
|
|
122
|
+
print(" \(fileName) (\(Int(pixelSize))x\(Int(pixelSize)))")
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Write Contents.json
|
|
126
|
+
let json = """
|
|
127
|
+
{
|
|
128
|
+
"images" : [
|
|
129
|
+
{
|
|
130
|
+
"filename" : "\(spec.assetName).png",
|
|
131
|
+
"idiom" : "universal",
|
|
132
|
+
"scale" : "1x"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"filename" : "\(spec.assetName)@2x.png",
|
|
136
|
+
"idiom" : "universal",
|
|
137
|
+
"scale" : "2x"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"filename" : "\(spec.assetName)@3x.png",
|
|
141
|
+
"idiom" : "universal",
|
|
142
|
+
"scale" : "3x"
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"info" : {
|
|
146
|
+
"author" : "xcode",
|
|
147
|
+
"version" : 1
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
"""
|
|
151
|
+
do {
|
|
152
|
+
try json.write(toFile: "\(dir)/Contents.json", atomically: true, encoding: .utf8)
|
|
153
|
+
} catch {
|
|
154
|
+
throw IconError.fileWrite("Failed to write Contents.json: \(error.localizedDescription)")
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
func requireOptionValue(_ args: [String], at index: Int, flag: String) -> String {
|
|
159
|
+
guard index < args.count else {
|
|
160
|
+
fputs("ERROR: Missing value for \(flag)\n", stderr)
|
|
161
|
+
exit(1)
|
|
162
|
+
}
|
|
163
|
+
let value = args[index]
|
|
164
|
+
if value.hasPrefix("--") {
|
|
165
|
+
fputs("ERROR: Missing value for \(flag)\n", stderr)
|
|
166
|
+
exit(1)
|
|
167
|
+
}
|
|
168
|
+
return value
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// MARK: - CLI
|
|
172
|
+
|
|
173
|
+
let args = CommandLine.arguments
|
|
174
|
+
|
|
175
|
+
if args.count < 3 || args.contains("--help") || args.contains("-h") {
|
|
176
|
+
print("""
|
|
177
|
+
Usage: generate_icons.swift <sf-symbol-name> <asset-name> [options]
|
|
178
|
+
|
|
179
|
+
Options:
|
|
180
|
+
--size <pt> Base size in points (default: 68)
|
|
181
|
+
--color <hex> Color hex code (default: 8E8E93)
|
|
182
|
+
--weight <name> Font weight: ultralight|thin|light|regular|medium|semibold|bold|heavy|black (default: thin)
|
|
183
|
+
--output <dir> Output directory (default: /tmp/icons)
|
|
184
|
+
|
|
185
|
+
Examples:
|
|
186
|
+
generate_icons.swift doc.text.below.ecg editTool_expenseReport
|
|
187
|
+
generate_icons.swift person.crop.rectangle editTool_businessCard --color 007AFF --weight regular
|
|
188
|
+
generate_icons.swift receipt myReceipt --size 48 --output ./Assets.xcassets/icons
|
|
189
|
+
|
|
190
|
+
Browse SF Symbol names: open the SF Symbols app (free from Apple) or https://developer.apple.com/sf-symbols/
|
|
191
|
+
""")
|
|
192
|
+
exit(0)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
let symbolName = args[1]
|
|
196
|
+
let assetName = args[2]
|
|
197
|
+
|
|
198
|
+
var baseSize: CGFloat = 68
|
|
199
|
+
var colorHex = "8E8E93"
|
|
200
|
+
var weightName = "thin"
|
|
201
|
+
var outputDir = "/tmp/icons"
|
|
202
|
+
|
|
203
|
+
var i = 3
|
|
204
|
+
while i < args.count {
|
|
205
|
+
switch args[i] {
|
|
206
|
+
case "--size":
|
|
207
|
+
let raw = requireOptionValue(args, at: i + 1, flag: "--size")
|
|
208
|
+
guard let size = Double(raw), size > 0 else {
|
|
209
|
+
fputs("ERROR: --size must be a positive number\n", stderr)
|
|
210
|
+
exit(1)
|
|
211
|
+
}
|
|
212
|
+
baseSize = CGFloat(size)
|
|
213
|
+
i += 2
|
|
214
|
+
continue
|
|
215
|
+
case "--color":
|
|
216
|
+
colorHex = requireOptionValue(args, at: i + 1, flag: "--color")
|
|
217
|
+
let stripped = colorHex.hasPrefix("#") ? String(colorHex.dropFirst()) : colorHex
|
|
218
|
+
guard stripped.count == 6, UInt64(stripped, radix: 16) != nil else {
|
|
219
|
+
fputs("ERROR: --color must be a 6-digit hex code (e.g. 007AFF)\n", stderr)
|
|
220
|
+
exit(1)
|
|
221
|
+
}
|
|
222
|
+
i += 2
|
|
223
|
+
continue
|
|
224
|
+
case "--weight":
|
|
225
|
+
weightName = requireOptionValue(args, at: i + 1, flag: "--weight")
|
|
226
|
+
let validWeights = ["ultralight", "thin", "light", "regular", "medium", "semibold", "bold", "heavy", "black"]
|
|
227
|
+
guard validWeights.contains(weightName.lowercased()) else {
|
|
228
|
+
fputs("ERROR: --weight must be one of: \(validWeights.joined(separator: ", "))\n", stderr)
|
|
229
|
+
exit(1)
|
|
230
|
+
}
|
|
231
|
+
i += 2
|
|
232
|
+
continue
|
|
233
|
+
case "--output":
|
|
234
|
+
outputDir = requireOptionValue(args, at: i + 1, flag: "--output")
|
|
235
|
+
i += 2
|
|
236
|
+
continue
|
|
237
|
+
default:
|
|
238
|
+
fputs("WARNING: Unknown option \(args[i])\n", stderr)
|
|
239
|
+
}
|
|
240
|
+
i += 1
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
let spec = IconSpec(
|
|
244
|
+
symbolName: symbolName,
|
|
245
|
+
assetName: assetName,
|
|
246
|
+
baseSize: baseSize,
|
|
247
|
+
color: parseColor(colorHex),
|
|
248
|
+
weight: parseWeight(weightName)
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
print("Generating \(assetName) from SF Symbol '\(symbolName)':")
|
|
252
|
+
do {
|
|
253
|
+
try generateIcon(spec, outputDir: outputDir)
|
|
254
|
+
print("Output: \(outputDir)/\(assetName).imageset/")
|
|
255
|
+
} catch {
|
|
256
|
+
fputs("ERROR: \(error)\n", stderr)
|
|
257
|
+
exit(1)
|
|
258
|
+
}
|