rsc-universal 0.1.1
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/LICENSE +21 -0
- package/README.md +279 -0
- package/manifest.json +4761 -0
- package/package.json +59 -0
- package/schema/frontmatter.schema.json +12 -0
- package/scripts/build-manifest.js +72 -0
- package/scripts/consult.js +106 -0
- package/scripts/detect-repo.js +118 -0
- package/scripts/doctor.js +21 -0
- package/scripts/eval-lint.sh +179 -0
- package/scripts/install-apply.js +52 -0
- package/scripts/install-plan.js +13 -0
- package/scripts/lib/behavior-score.js +103 -0
- package/scripts/lib/frontmatter.js +47 -0
- package/scripts/lib/harden-policy.js +41 -0
- package/scripts/lib/manifest.js +18 -0
- package/scripts/lib/recommend.js +36 -0
- package/scripts/lib/registry.js +110 -0
- package/scripts/lib/result-envelope.js +35 -0
- package/scripts/lib/state.js +12 -0
- package/scripts/lib/ui.js +17 -0
- package/scripts/reviewer-guard.sh +67 -0
- package/scripts/rsc.js +108 -0
- package/scripts/skill-behavior-eval.js +33 -0
- package/scripts/skill-behavior-eval.workflow.js +136 -0
- package/scripts/skill-behavior-rubric.md +63 -0
- package/scripts/skill-harden-rubric.md +40 -0
- package/scripts/skill-harden.workflow.js +161 -0
- package/scripts/skill-rubric.md +39 -0
- package/scripts/skill-scoreboard.workflow.js +35 -0
- package/skills/ab-testing/SKILL.md +191 -0
- package/skills/ab-testing/evals/README.md +8 -0
- package/skills/ab-testing/evals/cases.yaml +49 -0
- package/skills/ab-testing/references/pitfalls.md +74 -0
- package/skills/ab-testing/references/sample-size-and-cuped.md +128 -0
- package/skills/ab-testing/scripts/verify.sh +89 -0
- package/skills/accessibility/SKILL.md +218 -0
- package/skills/accessibility/evals/README.md +3 -0
- package/skills/accessibility/evals/cases.yaml +47 -0
- package/skills/accessibility/references/aria-patterns.md +113 -0
- package/skills/accessibility/references/wcag22-checklist.md +83 -0
- package/skills/accessibility/scripts/verify.sh +103 -0
- package/skills/ads/SKILL.md +175 -0
- package/skills/ads/evals/README.md +15 -0
- package/skills/ads/evals/cases.yaml +58 -0
- package/skills/ads/references/platform-specs.md +73 -0
- package/skills/ads/references/roas-model.md +77 -0
- package/skills/ads/scripts/verify.sh +210 -0
- package/skills/agent-eval/SKILL.md +213 -0
- package/skills/agent-eval/evals/README.md +12 -0
- package/skills/agent-eval/evals/cases.yaml +45 -0
- package/skills/agent-eval/references/judge-design.md +118 -0
- package/skills/agent-eval/references/runner-and-gate.md +183 -0
- package/skills/agent-eval/scripts/verify.sh +161 -0
- package/skills/agent-safety/SKILL.md +176 -0
- package/skills/agent-safety/evals/README.md +12 -0
- package/skills/agent-safety/evals/cases.yaml +46 -0
- package/skills/agent-safety/references/threat-model.md +51 -0
- package/skills/ai-media/SKILL.md +196 -0
- package/skills/ai-media/evals/README.md +3 -0
- package/skills/ai-media/evals/cases.yaml +45 -0
- package/skills/ai-media/references/ffmpeg-assembly.md +117 -0
- package/skills/ai-media/references/models-and-params.md +78 -0
- package/skills/ai-media/scripts/verify.sh +103 -0
- package/skills/analytics/SKILL.md +219 -0
- package/skills/analytics/evals/README.md +9 -0
- package/skills/analytics/evals/cases.yaml +53 -0
- package/skills/analytics/references/event-taxonomy.md +75 -0
- package/skills/analytics/references/ga4-setup.md +122 -0
- package/skills/analytics/references/posthog-setup.md +100 -0
- package/skills/analytics/scripts/verify.sh +95 -0
- package/skills/analyze/SKILL.md +136 -0
- package/skills/analyze/evals/README.md +72 -0
- package/skills/analyze/evals/cases.yaml +74 -0
- package/skills/angular/SKILL.md +288 -0
- package/skills/angular/evals/README.md +3 -0
- package/skills/angular/evals/cases.yaml +38 -0
- package/skills/angular/references/migration.md +81 -0
- package/skills/angular/references/signals-rxjs.md +92 -0
- package/skills/angular/scripts/verify.sh +122 -0
- package/skills/api-connector-builder/SKILL.md +285 -0
- package/skills/api-connector-builder/evals/README.md +11 -0
- package/skills/api-connector-builder/evals/cases.yaml +47 -0
- package/skills/api-connector-builder/references/auth-flows.md +132 -0
- package/skills/api-connector-builder/references/pagination.md +144 -0
- package/skills/api-connector-builder/scripts/verify.sh +172 -0
- package/skills/api-design/SKILL.md +189 -0
- package/skills/api-design/evals/README.md +3 -0
- package/skills/api-design/evals/cases.yaml +45 -0
- package/skills/api-design/references/graphql-design.md +70 -0
- package/skills/api-design/references/openapi-contract.md +86 -0
- package/skills/api-design/references/rest-conventions.md +63 -0
- package/skills/api-design/references/versioning-and-evolution.md +49 -0
- package/skills/api-design/scripts/verify.sh +138 -0
- package/skills/article-writing/SKILL.md +175 -0
- package/skills/article-writing/evals/README.md +3 -0
- package/skills/article-writing/evals/cases.yaml +47 -0
- package/skills/article-writing/references/ai-tell-banlist.md +114 -0
- package/skills/article-writing/references/on-page-seo.md +133 -0
- package/skills/article-writing/scripts/verify.sh +165 -0
- package/skills/astro/SKILL.md +275 -0
- package/skills/astro/evals/README.md +3 -0
- package/skills/astro/evals/cases.yaml +41 -0
- package/skills/astro/references/content-layer.md +118 -0
- package/skills/astro/references/deploy-and-integrations.md +163 -0
- package/skills/astro/scripts/verify.sh +137 -0
- package/skills/author-skill/SKILL.md +206 -0
- package/skills/author-skill/evals/README.md +66 -0
- package/skills/author-skill/evals/cases.yaml +75 -0
- package/skills/author-skill/references/description-recipe.md +84 -0
- package/skills/author-skill/references/eval-authoring.md +74 -0
- package/skills/author-skill/references/rsc-conventions.md +91 -0
- package/skills/automation-flows/SKILL.md +132 -0
- package/skills/automation-flows/evals/README.md +5 -0
- package/skills/automation-flows/evals/cases.yaml +44 -0
- package/skills/automation-flows/references/error-handling.md +58 -0
- package/skills/automation-flows/references/n8n-workflow-json.md +63 -0
- package/skills/automation-flows/scripts/verify.sh +78 -0
- package/skills/aws-essentials/SKILL.md +223 -0
- package/skills/aws-essentials/evals/README.md +10 -0
- package/skills/aws-essentials/evals/cases.yaml +44 -0
- package/skills/aws-essentials/references/iam-least-privilege.md +134 -0
- package/skills/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
- package/skills/aws-essentials/scripts/verify.sh +99 -0
- package/skills/backups/SKILL.md +137 -0
- package/skills/backups/evals/README.md +3 -0
- package/skills/backups/evals/cases.yaml +42 -0
- package/skills/backups/references/engine-recipes.md +121 -0
- package/skills/backups/references/restore-runbook.md +65 -0
- package/skills/backups/scripts/verify.sh +80 -0
- package/skills/bash-scripting/SKILL.md +231 -0
- package/skills/bash-scripting/evals/README.md +3 -0
- package/skills/bash-scripting/evals/cases.yaml +45 -0
- package/skills/bash-scripting/references/portability.md +97 -0
- package/skills/bash-scripting/scripts/verify.sh +140 -0
- package/skills/bookkeeping/SKILL.md +184 -0
- package/skills/bookkeeping/evals/README.md +5 -0
- package/skills/bookkeeping/evals/cases.yaml +52 -0
- package/skills/bookkeeping/references/chart-of-accounts.md +87 -0
- package/skills/bookkeeping/references/reconciliation-playbook.md +54 -0
- package/skills/bookkeeping/references/tricky-transactions.md +192 -0
- package/skills/brand-identity/SKILL.md +161 -0
- package/skills/brand-identity/evals/README.md +14 -0
- package/skills/brand-identity/evals/cases.yaml +43 -0
- package/skills/brand-identity/references/color-and-tokens.md +129 -0
- package/skills/brand-identity/references/logo-and-assets.md +117 -0
- package/skills/brand-identity/scripts/verify.sh +224 -0
- package/skills/brand-voice/SKILL.md +183 -0
- package/skills/brand-voice/evals/README.md +3 -0
- package/skills/brand-voice/evals/cases.yaml +57 -0
- package/skills/brand-voice/references/voice-guide-template.md +150 -0
- package/skills/brand-voice/references/word-bank.md +61 -0
- package/skills/brand-voice/scripts/verify.sh +190 -0
- package/skills/building-agents/SKILL.md +469 -0
- package/skills/building-agents/evals/README.md +68 -0
- package/skills/building-agents/evals/cases.yaml +60 -0
- package/skills/building-agents/references/agent-loops-and-harness.md +371 -0
- package/skills/building-agents/references/evals-and-observability.md +420 -0
- package/skills/building-agents/references/mcp-servers.md +294 -0
- package/skills/building-agents/references/provider-abstraction.md +489 -0
- package/skills/building-agents/references/tools-and-rag.md +417 -0
- package/skills/building-agents/scripts/verify.sh +121 -0
- package/skills/business-intelligence/SKILL.md +176 -0
- package/skills/business-intelligence/evals/README.md +3 -0
- package/skills/business-intelligence/evals/cases.yaml +43 -0
- package/skills/business-intelligence/references/authoring-semantic-models.md +120 -0
- package/skills/business-intelligence/references/wiring-agents-and-apis.md +79 -0
- package/skills/business-intelligence/scripts/verify.sh +143 -0
- package/skills/calendar-scheduling/SKILL.md +196 -0
- package/skills/calendar-scheduling/evals/README.md +14 -0
- package/skills/calendar-scheduling/evals/cases.yaml +45 -0
- package/skills/calendar-scheduling/references/google-calendar-sync.md +78 -0
- package/skills/calendar-scheduling/references/provider-matrix.md +71 -0
- package/skills/calendar-scheduling/scripts/verify.sh +117 -0
- package/skills/case-studies/SKILL.md +147 -0
- package/skills/case-studies/evals/README.md +3 -0
- package/skills/case-studies/evals/cases.yaml +63 -0
- package/skills/case-studies/references/case-study-skeleton.md +90 -0
- package/skills/case-studies/references/consent-and-substantiation.md +80 -0
- package/skills/case-studies/scripts/verify.sh +161 -0
- package/skills/chatbot/SKILL.md +168 -0
- package/skills/chatbot/evals/README.md +13 -0
- package/skills/chatbot/evals/cases.yaml +43 -0
- package/skills/chatbot/references/handoff-and-sales.md +71 -0
- package/skills/chatbot/references/system-prompt-and-guardrails.md +78 -0
- package/skills/chatbot/scripts/verify.sh +162 -0
- package/skills/chrome-extension/SKILL.md +169 -0
- package/skills/chrome-extension/evals/README.md +12 -0
- package/skills/chrome-extension/evals/cases.yaml +40 -0
- package/skills/chrome-extension/references/store-and-migration.md +84 -0
- package/skills/chrome-extension/scripts/verify.sh +62 -0
- package/skills/clarify/SKILL.md +159 -0
- package/skills/clarify/evals/README.md +70 -0
- package/skills/clarify/evals/cases.yaml +71 -0
- package/skills/clickhouse-analytics/SKILL.md +165 -0
- package/skills/clickhouse-analytics/evals/README.md +3 -0
- package/skills/clickhouse-analytics/evals/cases.yaml +45 -0
- package/skills/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
- package/skills/clickhouse-analytics/references/query-optimization.md +76 -0
- package/skills/clickhouse-analytics/references/schema-and-engines.md +63 -0
- package/skills/clickhouse-analytics/scripts/verify.sh +109 -0
- package/skills/client-onboarding/SKILL.md +254 -0
- package/skills/client-onboarding/evals/README.md +14 -0
- package/skills/client-onboarding/evals/cases.yaml +40 -0
- package/skills/client-onboarding/references/onboarding-playbook.md +126 -0
- package/skills/cloudflare/SKILL.md +191 -0
- package/skills/cloudflare/evals/README.md +15 -0
- package/skills/cloudflare/evals/cases.yaml +46 -0
- package/skills/cloudflare/references/storage-primitives.md +104 -0
- package/skills/cloudflare/references/wrangler-config.md +91 -0
- package/skills/cloudflare/scripts/verify.sh +133 -0
- package/skills/code-review/SKILL.md +143 -0
- package/skills/code-review/evals/README.md +3 -0
- package/skills/code-review/evals/cases.yaml +55 -0
- package/skills/code-review/references/pr-workflow.md +67 -0
- package/skills/codebase-onboarding/SKILL.md +133 -0
- package/skills/codebase-onboarding/evals/README.md +3 -0
- package/skills/codebase-onboarding/evals/cases.yaml +69 -0
- package/skills/codebase-onboarding/references/recon-playbook.md +57 -0
- package/skills/codebase-onboarding/scripts/verify.sh +54 -0
- package/skills/cold-outreach/SKILL.md +206 -0
- package/skills/cold-outreach/evals/README.md +3 -0
- package/skills/cold-outreach/evals/cases.yaml +60 -0
- package/skills/cold-outreach/references/compliance-footer.md +50 -0
- package/skills/cold-outreach/references/hook-derivation.md +73 -0
- package/skills/cold-outreach/references/templates.md +88 -0
- package/skills/cold-outreach/scripts/verify.sh +170 -0
- package/skills/community/SKILL.md +225 -0
- package/skills/community/evals/README.md +3 -0
- package/skills/community/evals/cases.yaml +40 -0
- package/skills/community/references/metrics-and-rituals.md +58 -0
- package/skills/community/references/platform-playbooks.md +64 -0
- package/skills/community/scripts/verify.sh +83 -0
- package/skills/competitor-watch/SKILL.md +193 -0
- package/skills/competitor-watch/evals/README.md +19 -0
- package/skills/competitor-watch/evals/cases.yaml +54 -0
- package/skills/competitor-watch/references/monitoring-config.md +124 -0
- package/skills/competitor-watch/references/tracker-schema.md +79 -0
- package/skills/competitor-watch/scripts/verify.sh +253 -0
- package/skills/compliance/SKILL.md +184 -0
- package/skills/compliance/evals/README.md +14 -0
- package/skills/compliance/evals/cases.yaml +46 -0
- package/skills/compliance/references/frameworks.md +108 -0
- package/skills/compliance/references/operating-rhythm.md +79 -0
- package/skills/compliance/scripts/verify.sh +168 -0
- package/skills/compose-multiplatform/SKILL.md +198 -0
- package/skills/compose-multiplatform/evals/README.md +3 -0
- package/skills/compose-multiplatform/evals/cases.yaml +40 -0
- package/skills/compose-multiplatform/references/ios-interop.md +91 -0
- package/skills/compose-multiplatform/references/project-setup.md +96 -0
- package/skills/compose-multiplatform/scripts/verify.sh +123 -0
- package/skills/constitution/SKILL.md +160 -0
- package/skills/constitution/evals/README.md +68 -0
- package/skills/constitution/evals/cases.yaml +72 -0
- package/skills/constitution/references/constitution-template.md +90 -0
- package/skills/content-engine/SKILL.md +164 -0
- package/skills/content-engine/evals/README.md +17 -0
- package/skills/content-engine/evals/cases.yaml +62 -0
- package/skills/content-engine/references/atomization.md +81 -0
- package/skills/content-engine/references/brief-and-pipeline.md +90 -0
- package/skills/content-engine/scripts/verify.sh +146 -0
- package/skills/context-budget/SKILL.md +132 -0
- package/skills/context-budget/evals/README.md +11 -0
- package/skills/context-budget/evals/cases.yaml +40 -0
- package/skills/context-budget/references/handoff-and-compaction.md +96 -0
- package/skills/continuous-learning/SKILL.md +136 -0
- package/skills/continuous-learning/evals/README.md +16 -0
- package/skills/continuous-learning/evals/cases.yaml +39 -0
- package/skills/continuous-learning/references/lesson-routing.md +106 -0
- package/skills/contracts/SKILL.md +124 -0
- package/skills/contracts/evals/README.md +3 -0
- package/skills/contracts/evals/cases.yaml +42 -0
- package/skills/contracts/references/clause-library.md +129 -0
- package/skills/contracts/references/review-playbook.md +49 -0
- package/skills/contracts/scripts/verify.sh +53 -0
- package/skills/coolify/SKILL.md +201 -0
- package/skills/coolify/evals/README.md +21 -0
- package/skills/coolify/evals/cases.yaml +46 -0
- package/skills/coolify/references/databases-and-backups.md +99 -0
- package/skills/coolify/references/deploy-recipes.md +105 -0
- package/skills/coolify/references/install-and-proxy.md +80 -0
- package/skills/coolify/scripts/verify.sh +123 -0
- package/skills/cost-tracking/SKILL.md +183 -0
- package/skills/cost-tracking/evals/README.md +3 -0
- package/skills/cost-tracking/evals/cases.yaml +45 -0
- package/skills/cost-tracking/references/cloud-caps.md +52 -0
- package/skills/cost-tracking/references/pricing-tables.md +51 -0
- package/skills/cost-tracking/scripts/verify.sh +135 -0
- package/skills/course-builder/SKILL.md +186 -0
- package/skills/course-builder/evals/README.md +16 -0
- package/skills/course-builder/evals/cases.yaml +49 -0
- package/skills/course-builder/references/assessment-design.md +74 -0
- package/skills/course-builder/references/grounding-and-scoping.md +69 -0
- package/skills/course-builder/references/outcomes-and-blooms.md +82 -0
- package/skills/course-builder/scripts/verify.sh +247 -0
- package/skills/course-storytelling/SKILL.md +205 -0
- package/skills/course-storytelling/evals/README.md +54 -0
- package/skills/course-storytelling/evals/cases.yaml +50 -0
- package/skills/course-storytelling/references/brunson-frameworks.md +190 -0
- package/skills/course-storytelling/references/concept-landing-recipe.md +136 -0
- package/skills/course-storytelling/references/course-analysis.md +124 -0
- package/skills/course-storytelling/references/learner-grounding.md +183 -0
- package/skills/course-storytelling/references/mental-models.md +115 -0
- package/skills/course-storytelling/scripts/verify.sh +223 -0
- package/skills/cpp/SKILL.md +349 -0
- package/skills/cpp/evals/README.md +14 -0
- package/skills/cpp/evals/cases.yaml +44 -0
- package/skills/cpp/references/cmake.md +167 -0
- package/skills/cpp/references/move-and-templates.md +130 -0
- package/skills/cpp/references/undefined-behavior.md +86 -0
- package/skills/cpp/scripts/verify.sh +165 -0
- package/skills/csharp-dotnet/SKILL.md +291 -0
- package/skills/csharp-dotnet/evals/README.md +3 -0
- package/skills/csharp-dotnet/evals/cases.yaml +48 -0
- package/skills/csharp-dotnet/references/aspnetcore.md +99 -0
- package/skills/csharp-dotnet/references/async.md +82 -0
- package/skills/csharp-dotnet/references/efcore.md +96 -0
- package/skills/csharp-dotnet/scripts/verify.sh +90 -0
- package/skills/customer-support/SKILL.md +193 -0
- package/skills/customer-support/evals/README.md +13 -0
- package/skills/customer-support/evals/cases.yaml +61 -0
- package/skills/customer-support/references/macros-and-sla.md +142 -0
- package/skills/dashboard/SKILL.md +205 -0
- package/skills/dashboard/evals/README.md +3 -0
- package/skills/dashboard/evals/cases.yaml +50 -0
- package/skills/dashboard/references/chart-selection.md +34 -0
- package/skills/dashboard/references/tile-schema.md +164 -0
- package/skills/dashboard/scripts/verify.sh +130 -0
- package/skills/data-cleaning/SKILL.md +285 -0
- package/skills/data-cleaning/evals/README.md +16 -0
- package/skills/data-cleaning/evals/cases.yaml +57 -0
- package/skills/data-cleaning/references/normalization-recipes.md +136 -0
- package/skills/data-cleaning/references/validation-patterns.md +134 -0
- package/skills/data-cleaning/scripts/verify.sh +115 -0
- package/skills/data-policy/SKILL.md +163 -0
- package/skills/data-policy/evals/README.md +15 -0
- package/skills/data-policy/evals/cases.yaml +44 -0
- package/skills/data-policy/references/consent-and-ropa.md +97 -0
- package/skills/data-policy/references/retention-schedule.md +83 -0
- package/skills/data-policy/scripts/verify.sh +143 -0
- package/skills/data-scraper/SKILL.md +134 -0
- package/skills/data-scraper/evals/README.md +3 -0
- package/skills/data-scraper/evals/cases.yaml +46 -0
- package/skills/data-scraper/references/anti-bot.md +85 -0
- package/skills/data-scraper/references/frameworks.md +116 -0
- package/skills/data-scraper/references/legal-compliance.md +59 -0
- package/skills/data-scraper/scripts/verify.sh +166 -0
- package/skills/db-migrations/SKILL.md +254 -0
- package/skills/db-migrations/evals/README.md +10 -0
- package/skills/db-migrations/evals/cases.yaml +46 -0
- package/skills/db-migrations/references/backfill-and-batching.md +105 -0
- package/skills/db-migrations/references/expand-contract-playbook.md +152 -0
- package/skills/db-migrations/references/tools-and-runners.md +88 -0
- package/skills/db-migrations/scripts/verify.sh +112 -0
- package/skills/debug/SKILL.md +227 -0
- package/skills/debug/evals/README.md +88 -0
- package/skills/debug/evals/cases.yaml +74 -0
- package/skills/decision-records/SKILL.md +189 -0
- package/skills/decision-records/evals/README.md +3 -0
- package/skills/decision-records/evals/cases.yaml +43 -0
- package/skills/decision-records/references/templates.md +232 -0
- package/skills/decision-records/scripts/verify.sh +105 -0
- package/skills/deployment/SKILL.md +439 -0
- package/skills/deployment/evals/README.md +50 -0
- package/skills/deployment/evals/cases.yaml +53 -0
- package/skills/deployment/references/coolify.md +216 -0
- package/skills/deployment/references/dockerfiles-by-stack.md +319 -0
- package/skills/deployment/references/github-actions.md +295 -0
- package/skills/deployment/references/hosting-targets.md +272 -0
- package/skills/deployment/scripts/verify.sh +134 -0
- package/skills/design/SKILL.md +399 -0
- package/skills/design/evals/README.md +53 -0
- package/skills/design/evals/cases.yaml +56 -0
- package/skills/design/references/brand-grounding.md +187 -0
- package/skills/design/references/copywriting-frameworks.md +138 -0
- package/skills/design/references/landing-anatomy-and-cro.md +202 -0
- package/skills/design/references/motion-and-interaction.md +182 -0
- package/skills/design/references/research-method.md +147 -0
- package/skills/design/references/signature-and-craft.md +148 -0
- package/skills/design/references/trends-2026.md +80 -0
- package/skills/design/references/visual-system.md +236 -0
- package/skills/design/scripts/verify.sh +248 -0
- package/skills/digitalocean/SKILL.md +251 -0
- package/skills/digitalocean/evals/README.md +10 -0
- package/skills/digitalocean/evals/cases.yaml +37 -0
- package/skills/digitalocean/references/app-spec.md +126 -0
- package/skills/digitalocean/references/droplet-ops.md +95 -0
- package/skills/digitalocean/scripts/verify.sh +102 -0
- package/skills/django/SKILL.md +268 -0
- package/skills/django/evals/README.md +11 -0
- package/skills/django/evals/cases.yaml +47 -0
- package/skills/django/references/drf.md +109 -0
- package/skills/django/references/orm-performance.md +91 -0
- package/skills/django/references/security.md +81 -0
- package/skills/django/references/testing.md +86 -0
- package/skills/django/scripts/verify.sh +115 -0
- package/skills/docker/SKILL.md +283 -0
- package/skills/docker/evals/README.md +10 -0
- package/skills/docker/evals/cases.yaml +44 -0
- package/skills/docker/references/base-images-and-stages.md +104 -0
- package/skills/docker/references/compose-recipes.md +109 -0
- package/skills/docker/scripts/verify.sh +149 -0
- package/skills/document-processing/SKILL.md +214 -0
- package/skills/document-processing/evals/README.md +3 -0
- package/skills/document-processing/evals/cases.yaml +65 -0
- package/skills/document-processing/references/engines.md +67 -0
- package/skills/document-processing/scripts/verify.sh +172 -0
- package/skills/domains-dns/SKILL.md +146 -0
- package/skills/domains-dns/evals/README.md +16 -0
- package/skills/domains-dns/evals/cases.yaml +47 -0
- package/skills/domains-dns/references/record-cookbook.md +94 -0
- package/skills/domains-dns/references/tls-and-acme.md +90 -0
- package/skills/domains-dns/references/verify-and-debug.md +64 -0
- package/skills/domains-dns/scripts/verify.sh +163 -0
- package/skills/drizzle-orm/SKILL.md +234 -0
- package/skills/drizzle-orm/evals/README.md +12 -0
- package/skills/drizzle-orm/evals/cases.yaml +47 -0
- package/skills/drizzle-orm/references/relations-and-drivers.md +118 -0
- package/skills/drizzle-orm/scripts/verify.sh +155 -0
- package/skills/duckdb/SKILL.md +207 -0
- package/skills/duckdb/evals/README.md +31 -0
- package/skills/duckdb/evals/cases.yaml +41 -0
- package/skills/duckdb/references/python-and-interop.md +105 -0
- package/skills/duckdb/references/remote-and-lakehouse.md +101 -0
- package/skills/duckdb/scripts/verify.sh +71 -0
- package/skills/dynamodb/SKILL.md +217 -0
- package/skills/dynamodb/evals/README.md +8 -0
- package/skills/dynamodb/evals/cases.yaml +46 -0
- package/skills/dynamodb/references/access-patterns.md +127 -0
- package/skills/dynamodb/references/capacity-and-limits.md +78 -0
- package/skills/dynamodb/scripts/verify.sh +108 -0
- package/skills/e-signature/SKILL.md +185 -0
- package/skills/e-signature/evals/README.md +3 -0
- package/skills/e-signature/evals/cases.yaml +44 -0
- package/skills/e-signature/references/docusign.md +83 -0
- package/skills/e-signature/references/dropbox-sign.md +73 -0
- package/skills/e-signature/references/legal-tiers.md +37 -0
- package/skills/e-signature/scripts/verify.sh +81 -0
- package/skills/e2e-testing/SKILL.md +243 -0
- package/skills/e2e-testing/evals/README.md +10 -0
- package/skills/e2e-testing/evals/cases.yaml +64 -0
- package/skills/e2e-testing/references/config-and-ci.md +156 -0
- package/skills/e2e-testing/references/flakiness-playbook.md +124 -0
- package/skills/e2e-testing/scripts/verify.sh +117 -0
- package/skills/electron/SKILL.md +221 -0
- package/skills/electron/evals/README.md +13 -0
- package/skills/electron/evals/cases.yaml +38 -0
- package/skills/electron/references/packaging-and-updates.md +122 -0
- package/skills/electron/references/security-and-ipc.md +158 -0
- package/skills/electron/scripts/verify.sh +143 -0
- package/skills/elixir/SKILL.md +217 -0
- package/skills/elixir/evals/README.md +3 -0
- package/skills/elixir/evals/cases.yaml +41 -0
- package/skills/elixir/references/mix-and-releases.md +91 -0
- package/skills/elixir/references/otp-patterns.md +96 -0
- package/skills/elixir/scripts/verify.sh +76 -0
- package/skills/email-connector/SKILL.md +294 -0
- package/skills/email-connector/evals/README.md +19 -0
- package/skills/email-connector/evals/cases.yaml +39 -0
- package/skills/email-connector/references/providers.md +107 -0
- package/skills/email-connector/scripts/verify.sh +72 -0
- package/skills/email-deliverability/SKILL.md +168 -0
- package/skills/email-deliverability/evals/README.md +21 -0
- package/skills/email-deliverability/evals/cases.yaml +45 -0
- package/skills/email-deliverability/scripts/verify.sh +98 -0
- package/skills/embeddings-search/SKILL.md +193 -0
- package/skills/embeddings-search/evals/README.md +10 -0
- package/skills/embeddings-search/evals/cases.yaml +44 -0
- package/skills/embeddings-search/references/evaluation.md +86 -0
- package/skills/embeddings-search/references/models.md +73 -0
- package/skills/embeddings-search/scripts/verify.sh +103 -0
- package/skills/error-handling/SKILL.md +307 -0
- package/skills/error-handling/evals/README.md +12 -0
- package/skills/error-handling/evals/cases.yaml +46 -0
- package/skills/error-handling/references/boundaries-and-messaging.md +120 -0
- package/skills/error-handling/references/retry-and-resilience.md +154 -0
- package/skills/error-handling/scripts/verify.sh +110 -0
- package/skills/expo/SKILL.md +253 -0
- package/skills/expo/evals/README.md +13 -0
- package/skills/expo/evals/cases.yaml +44 -0
- package/skills/expo/references/config-plugins.md +117 -0
- package/skills/expo/references/eas-update.md +118 -0
- package/skills/expo/scripts/verify.sh +132 -0
- package/skills/fal/SKILL.md +210 -0
- package/skills/fal/evals/README.md +3 -0
- package/skills/fal/evals/cases.yaml +42 -0
- package/skills/fal/references/models-and-cost.md +53 -0
- package/skills/fal/references/queue-and-webhooks.md +153 -0
- package/skills/fal/scripts/verify.sh +72 -0
- package/skills/fastapi/SKILL.md +499 -0
- package/skills/fastapi/evals/README.md +50 -0
- package/skills/fastapi/evals/cases.yaml +55 -0
- package/skills/fastapi/references/database.md +347 -0
- package/skills/fastapi/references/production.md +338 -0
- package/skills/fastapi/references/security.md +330 -0
- package/skills/fastapi/references/testing.md +349 -0
- package/skills/fastapi/scripts/verify.sh +116 -0
- package/skills/finance-ops/SKILL.md +149 -0
- package/skills/finance-ops/evals/README.md +3 -0
- package/skills/finance-ops/evals/cases.yaml +39 -0
- package/skills/finance-ops/references/cash-flow-forecast.md +57 -0
- package/skills/finance-ops/references/month-close.md +59 -0
- package/skills/finance-ops/references/reconciliation.md +65 -0
- package/skills/finance-ops/scripts/verify.sh +166 -0
- package/skills/financial-model/SKILL.md +170 -0
- package/skills/financial-model/evals/README.md +3 -0
- package/skills/financial-model/evals/cases.yaml +53 -0
- package/skills/financial-model/references/benchmarks-and-scenarios.md +55 -0
- package/skills/financial-model/references/model-structure.md +67 -0
- package/skills/financial-model/references/revenue-build.md +68 -0
- package/skills/financial-model/scripts/verify.sh +232 -0
- package/skills/firebase/SKILL.md +251 -0
- package/skills/firebase/evals/README.md +12 -0
- package/skills/firebase/evals/cases.yaml +45 -0
- package/skills/firebase/references/cloud-functions.md +102 -0
- package/skills/firebase/references/data-modeling.md +108 -0
- package/skills/firebase/references/security-rules.md +137 -0
- package/skills/firebase/scripts/verify.sh +98 -0
- package/skills/flutter/SKILL.md +448 -0
- package/skills/flutter/evals/README.md +54 -0
- package/skills/flutter/evals/cases.yaml +69 -0
- package/skills/flutter/references/architecture-and-state.md +499 -0
- package/skills/flutter/references/i18n-and-dependencies.md +197 -0
- package/skills/flutter/references/performance.md +299 -0
- package/skills/flutter/references/testing.md +385 -0
- package/skills/flutter/references/ui-and-navigation.md +378 -0
- package/skills/flutter/scripts/verify.sh +104 -0
- package/skills/fly-io/SKILL.md +206 -0
- package/skills/fly-io/evals/README.md +3 -0
- package/skills/fly-io/evals/cases.yaml +42 -0
- package/skills/fly-io/references/fly-toml.md +155 -0
- package/skills/fly-io/references/multi-region.md +66 -0
- package/skills/fly-io/scripts/verify.sh +90 -0
- package/skills/forecasting/SKILL.md +139 -0
- package/skills/forecasting/evals/README.md +13 -0
- package/skills/forecasting/evals/cases.yaml +47 -0
- package/skills/forecasting/references/accuracy-and-backtesting.md +104 -0
- package/skills/forecasting/references/methods-cheatsheet.md +94 -0
- package/skills/forecasting/scripts/verify.sh +99 -0
- package/skills/fundraising/SKILL.md +162 -0
- package/skills/fundraising/evals/README.md +18 -0
- package/skills/fundraising/evals/cases.yaml +76 -0
- package/skills/fundraising/references/funnel-math.md +90 -0
- package/skills/fundraising/references/process-playbook.md +97 -0
- package/skills/gcp-essentials/SKILL.md +327 -0
- package/skills/gcp-essentials/evals/README.md +12 -0
- package/skills/gcp-essentials/evals/cases.yaml +38 -0
- package/skills/gcp-essentials/references/deploy-recipes.md +81 -0
- package/skills/gcp-essentials/references/iam-and-auth.md +94 -0
- package/skills/gcp-essentials/references/networking-and-sql.md +74 -0
- package/skills/gcp-essentials/scripts/verify.sh +158 -0
- package/skills/gdpr-privacy/SKILL.md +167 -0
- package/skills/gdpr-privacy/evals/README.md +3 -0
- package/skills/gdpr-privacy/evals/cases.yaml +47 -0
- package/skills/gdpr-privacy/references/dpa-and-transfers.md +63 -0
- package/skills/gdpr-privacy/references/dsar-and-consent.md +83 -0
- package/skills/gdpr-privacy/references/privacy-policy-blueprint.md +99 -0
- package/skills/gdpr-privacy/scripts/verify.sh +84 -0
- package/skills/git-workflow/SKILL.md +190 -0
- package/skills/git-workflow/evals/README.md +10 -0
- package/skills/git-workflow/evals/cases.yaml +47 -0
- package/skills/git-workflow/references/interactive-rebase.md +89 -0
- package/skills/github-actions/SKILL.md +256 -0
- package/skills/github-actions/evals/README.md +3 -0
- package/skills/github-actions/evals/cases.yaml +45 -0
- package/skills/github-actions/references/caching-and-matrix.md +92 -0
- package/skills/github-actions/references/oidc-deploys.md +130 -0
- package/skills/github-actions/scripts/verify.sh +105 -0
- package/skills/go/SKILL.md +438 -0
- package/skills/go/evals/README.md +56 -0
- package/skills/go/evals/cases.yaml +55 -0
- package/skills/go/references/concurrency.md +557 -0
- package/skills/go/references/http-services.md +529 -0
- package/skills/go/references/testing.md +338 -0
- package/skills/go/scripts/verify.sh +109 -0
- package/skills/google-workspace/SKILL.md +287 -0
- package/skills/google-workspace/evals/README.md +16 -0
- package/skills/google-workspace/evals/cases.yaml +44 -0
- package/skills/google-workspace/references/api-recipes.md +148 -0
- package/skills/google-workspace/references/auth-setup.md +100 -0
- package/skills/google-workspace/scripts/verify.sh +128 -0
- package/skills/grants/SKILL.md +171 -0
- package/skills/grants/evals/README.md +3 -0
- package/skills/grants/evals/cases.yaml +69 -0
- package/skills/grants/references/budget-justification.md +71 -0
- package/skills/grants/references/jurisdictions.md +35 -0
- package/skills/grants/references/logic-model.md +66 -0
- package/skills/grants/scripts/verify.sh +193 -0
- package/skills/harness/SKILL.md +329 -0
- package/skills/harness/assets/_TEMPLATE/.env.example +8 -0
- package/skills/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
- package/skills/harness/assets/_TEMPLATE/README.md +25 -0
- package/skills/harness/assets/_TEMPLATE/test_connection.sh +30 -0
- package/skills/harness/evals/README.md +54 -0
- package/skills/harness/evals/cases.yaml +72 -0
- package/skills/harness/examples/audit-example.md +120 -0
- package/skills/harness/references/agents-md-template.md +41 -0
- package/skills/harness/references/audit-report-template.html +140 -0
- package/skills/harness/references/audit-report-template.md +116 -0
- package/skills/harness/references/claude-md-template.md +98 -0
- package/skills/harness/references/inbox-readme-template.md +51 -0
- package/skills/harness/references/ingest-formats.md +185 -0
- package/skills/harness/references/providers.yaml +3410 -0
- package/skills/harness/references/tools-readme-template.md +88 -0
- package/skills/harness/references/wiki-archive-template.html +81 -0
- package/skills/harness/references/wiki-article-template.md +20 -0
- package/skills/harness/references/wiki-dashboard-template.html +136 -0
- package/skills/harness/references/wiki-deep-improve-report-template.html +126 -0
- package/skills/harness/references/wiki-gaps-template.md +18 -0
- package/skills/harness/references/wiki-index-template.md +23 -0
- package/skills/harness/references/wiki-protocol.md +699 -0
- package/skills/harness/references/wiki-raw-template.md +7 -0
- package/skills/hetzner/SKILL.md +221 -0
- package/skills/hetzner/evals/README.md +35 -0
- package/skills/hetzner/evals/cases.yaml +46 -0
- package/skills/hetzner/references/cloud-init.md +120 -0
- package/skills/hetzner/references/plans-and-locations.md +56 -0
- package/skills/hetzner/scripts/verify.sh +122 -0
- package/skills/hiring/SKILL.md +248 -0
- package/skills/hiring/evals/README.md +13 -0
- package/skills/hiring/evals/cases.yaml +41 -0
- package/skills/hiring/references/templates.md +118 -0
- package/skills/htmx/SKILL.md +261 -0
- package/skills/htmx/evals/README.md +3 -0
- package/skills/htmx/evals/cases.yaml +38 -0
- package/skills/htmx/references/patterns.md +113 -0
- package/skills/htmx/references/server-contract.md +91 -0
- package/skills/htmx/scripts/verify.sh +93 -0
- package/skills/huggingface/SKILL.md +190 -0
- package/skills/huggingface/evals/README.md +11 -0
- package/skills/huggingface/evals/cases.yaml +41 -0
- package/skills/huggingface/references/endpoints-and-spaces.md +99 -0
- package/skills/huggingface/references/hub-and-cli.md +85 -0
- package/skills/huggingface/references/inference-providers.md +115 -0
- package/skills/huggingface/scripts/verify.sh +123 -0
- package/skills/implement/SKILL.md +283 -0
- package/skills/implement/evals/README.md +56 -0
- package/skills/implement/evals/cases.yaml +43 -0
- package/skills/init/SKILL.md +184 -0
- package/skills/init/evals/README.md +49 -0
- package/skills/init/evals/cases.yaml +74 -0
- package/skills/init/references/accompaniment-and-profile.md +140 -0
- package/skills/init/references/discovery.md +90 -0
- package/skills/init/references/recommend-skills.md +115 -0
- package/skills/init/scripts/verify.sh +122 -0
- package/skills/instagram-api/SKILL.md +241 -0
- package/skills/instagram-api/evals/README.md +3 -0
- package/skills/instagram-api/evals/cases.yaml +43 -0
- package/skills/instagram-api/references/insights-metrics.md +88 -0
- package/skills/instagram-api/references/publish-reel.md +98 -0
- package/skills/instagram-api/scripts/verify.sh +137 -0
- package/skills/inventory/SKILL.md +131 -0
- package/skills/inventory/evals/README.md +3 -0
- package/skills/inventory/evals/cases.yaml +43 -0
- package/skills/inventory/references/abc-xyz.md +52 -0
- package/skills/inventory/references/ddmrp.md +32 -0
- package/skills/inventory/references/reorder-policies.md +85 -0
- package/skills/inventory/references/safety-stock.md +63 -0
- package/skills/inventory/scripts/verify.sh +155 -0
- package/skills/investor-materials/SKILL.md +175 -0
- package/skills/investor-materials/evals/README.md +15 -0
- package/skills/investor-materials/evals/cases.yaml +60 -0
- package/skills/investor-materials/references/dataroom-checklist.md +134 -0
- package/skills/investor-materials/references/update-and-onepager-templates.md +152 -0
- package/skills/investor-materials/scripts/verify.sh +148 -0
- package/skills/invoicing/SKILL.md +154 -0
- package/skills/invoicing/evals/README.md +5 -0
- package/skills/invoicing/evals/cases.yaml +49 -0
- package/skills/invoicing/references/dunning-ladder.md +53 -0
- package/skills/invoicing/references/e-invoicing-mandates.md +43 -0
- package/skills/invoicing/scripts/fixtures/broken-invoice.json +13 -0
- package/skills/invoicing/scripts/fixtures/valid-invoice.json +15 -0
- package/skills/invoicing/scripts/verify.sh +133 -0
- package/skills/ip-trademark/SKILL.md +186 -0
- package/skills/ip-trademark/evals/README.md +10 -0
- package/skills/ip-trademark/evals/cases.yaml +47 -0
- package/skills/ip-trademark/references/jurisdictions.md +63 -0
- package/skills/ip-trademark/references/ownership-and-licensing.md +90 -0
- package/skills/java/SKILL.md +341 -0
- package/skills/java/evals/README.md +23 -0
- package/skills/java/evals/cases.yaml +43 -0
- package/skills/java/references/builds.md +133 -0
- package/skills/java/references/concurrency.md +108 -0
- package/skills/java/references/streams.md +102 -0
- package/skills/java/scripts/verify.sh +107 -0
- package/skills/knowledge-ops/SKILL.md +125 -0
- package/skills/knowledge-ops/evals/README.md +16 -0
- package/skills/knowledge-ops/evals/cases.yaml +50 -0
- package/skills/knowledge-ops/references/gardening-playbook.md +116 -0
- package/skills/kotlin-android/SKILL.md +245 -0
- package/skills/kotlin-android/evals/README.md +13 -0
- package/skills/kotlin-android/evals/cases.yaml +56 -0
- package/skills/kotlin-android/references/architecture.md +200 -0
- package/skills/kotlin-android/references/gradle-setup.md +125 -0
- package/skills/kotlin-android/scripts/verify.sh +109 -0
- package/skills/kpi-framework/SKILL.md +199 -0
- package/skills/kpi-framework/evals/README.md +11 -0
- package/skills/kpi-framework/evals/cases.yaml +42 -0
- package/skills/kpi-framework/references/definition-and-targets.md +64 -0
- package/skills/kpi-framework/references/metric-catalog.md +84 -0
- package/skills/landing-copy/SKILL.md +153 -0
- package/skills/landing-copy/evals/README.md +18 -0
- package/skills/landing-copy/evals/cases.yaml +63 -0
- package/skills/landing-copy/references/frameworks.md +61 -0
- package/skills/landing-copy/references/page-skeleton.md +92 -0
- package/skills/landing-copy/scripts/verify.sh +164 -0
- package/skills/laravel/SKILL.md +301 -0
- package/skills/laravel/evals/README.md +10 -0
- package/skills/laravel/evals/cases.yaml +45 -0
- package/skills/laravel/references/eloquent-patterns.md +126 -0
- package/skills/laravel/references/queues-and-scheduling.md +153 -0
- package/skills/laravel/scripts/verify.sh +128 -0
- package/skills/lead-gen/SKILL.md +155 -0
- package/skills/lead-gen/evals/README.md +3 -0
- package/skills/lead-gen/evals/cases.yaml +43 -0
- package/skills/lead-gen/references/data-sources.md +87 -0
- package/skills/lead-gen/references/scoring-model.md +93 -0
- package/skills/lead-gen/scripts/verify.sh +179 -0
- package/skills/linkedin-api/SKILL.md +211 -0
- package/skills/linkedin-api/evals/README.md +3 -0
- package/skills/linkedin-api/evals/cases.yaml +41 -0
- package/skills/linkedin-api/references/api-reference.md +168 -0
- package/skills/linkedin-api/scripts/verify.sh +98 -0
- package/skills/linkedin-carousels/SKILL.md +239 -0
- package/skills/linkedin-carousels/evals/README.md +13 -0
- package/skills/linkedin-carousels/evals/cases.yaml +62 -0
- package/skills/linkedin-carousels/references/carousel-patterns.md +200 -0
- package/skills/linkedin-carousels/scripts/verify.sh +160 -0
- package/skills/linkedin-content/SKILL.md +162 -0
- package/skills/linkedin-content/evals/README.md +13 -0
- package/skills/linkedin-content/evals/cases.yaml +62 -0
- package/skills/linkedin-content/references/hooks-and-formats.md +114 -0
- package/skills/linkedin-content/scripts/verify.sh +154 -0
- package/skills/linkedin-outreach/SKILL.md +174 -0
- package/skills/linkedin-outreach/evals/README.md +3 -0
- package/skills/linkedin-outreach/evals/cases.yaml +43 -0
- package/skills/linkedin-outreach/references/ledger-schema.md +48 -0
- package/skills/linkedin-outreach/references/sales-navigator-playbook.md +61 -0
- package/skills/linkedin-outreach/scripts/verify.sh +120 -0
- package/skills/linkedin-strategy/SKILL.md +167 -0
- package/skills/linkedin-strategy/evals/README.md +3 -0
- package/skills/linkedin-strategy/evals/cases.yaml +49 -0
- package/skills/linkedin-strategy/references/ssi-and-pillars.md +59 -0
- package/skills/linkedin-strategy/references/wiki-records.md +62 -0
- package/skills/linkedin-strategy/scripts/verify.sh +120 -0
- package/skills/llm-pipeline/SKILL.md +155 -0
- package/skills/llm-pipeline/evals/README.md +3 -0
- package/skills/llm-pipeline/evals/cases.yaml +44 -0
- package/skills/llm-pipeline/references/caching-layers.md +60 -0
- package/skills/llm-pipeline/references/litellm-router.md +101 -0
- package/skills/llm-pipeline/scripts/verify.sh +169 -0
- package/skills/logistics-ops/SKILL.md +219 -0
- package/skills/logistics-ops/evals/README.md +20 -0
- package/skills/logistics-ops/evals/cases.yaml +48 -0
- package/skills/logistics-ops/references/carriers-and-claims.md +105 -0
- package/skills/market-research/SKILL.md +145 -0
- package/skills/market-research/evals/README.md +3 -0
- package/skills/market-research/evals/cases.yaml +48 -0
- package/skills/market-research/references/demand-signals.md +63 -0
- package/skills/market-research/references/sizing-playbook.md +121 -0
- package/skills/market-research/scripts/verify.sh +215 -0
- package/skills/marketing/SKILL.md +233 -0
- package/skills/marketing/evals/README.md +61 -0
- package/skills/marketing/evals/cases.yaml +84 -0
- package/skills/marketing/references/brand-grounding.md +197 -0
- package/skills/marketing/references/campaigns-and-channels.md +151 -0
- package/skills/marketing/references/copy-frameworks.md +166 -0
- package/skills/marketing/references/landing-copy.md +191 -0
- package/skills/marketing/references/seo-geo.md +391 -0
- package/skills/marketing/scripts/seo_audit.py +166 -0
- package/skills/marketing/scripts/verify.sh +233 -0
- package/skills/medium-publishing/SKILL.md +152 -0
- package/skills/medium-publishing/evals/README.md +3 -0
- package/skills/medium-publishing/evals/cases.yaml +42 -0
- package/skills/medium-publishing/references/cross-post-and-canonical.md +65 -0
- package/skills/medium-publishing/references/legacy-api.md +100 -0
- package/skills/medium-strategy/SKILL.md +161 -0
- package/skills/medium-strategy/evals/README.md +3 -0
- package/skills/medium-strategy/evals/cases.yaml +50 -0
- package/skills/medium-strategy/references/distribution-and-boost.md +65 -0
- package/skills/medium-strategy/references/wiki-records.md +60 -0
- package/skills/medium-strategy/scripts/verify.sh +118 -0
- package/skills/medium-writing/SKILL.md +140 -0
- package/skills/medium-writing/evals/README.md +5 -0
- package/skills/medium-writing/evals/cases.yaml +39 -0
- package/skills/medium-writing/references/title-patterns.md +79 -0
- package/skills/meeting-notes/SKILL.md +168 -0
- package/skills/meeting-notes/evals/README.md +14 -0
- package/skills/meeting-notes/evals/cases.yaml +46 -0
- package/skills/meeting-notes/references/templates.md +140 -0
- package/skills/modal/SKILL.md +307 -0
- package/skills/modal/evals/README.md +29 -0
- package/skills/modal/evals/cases.yaml +50 -0
- package/skills/modal/references/images-gpu-cookbook.md +160 -0
- package/skills/modal/references/web-and-scaling.md +138 -0
- package/skills/modal/scripts/verify.sh +127 -0
- package/skills/mongodb/SKILL.md +342 -0
- package/skills/mongodb/evals/README.md +29 -0
- package/skills/mongodb/evals/cases.yaml +41 -0
- package/skills/mongodb/references/aggregation.md +115 -0
- package/skills/mongodb/references/data-modeling.md +135 -0
- package/skills/mongodb/references/transactions-and-ops.md +128 -0
- package/skills/mongodb/scripts/verify.sh +151 -0
- package/skills/monitoring/SKILL.md +155 -0
- package/skills/monitoring/evals/README.md +3 -0
- package/skills/monitoring/evals/cases.yaml +47 -0
- package/skills/monitoring/references/burn-rate-and-oncall.md +128 -0
- package/skills/monitoring/references/tool-setup.md +154 -0
- package/skills/monitoring/scripts/verify.sh +145 -0
- package/skills/mysql/SKILL.md +249 -0
- package/skills/mysql/evals/README.md +12 -0
- package/skills/mysql/evals/cases.yaml +49 -0
- package/skills/mysql/references/indexing-and-explain.md +161 -0
- package/skills/mysql/references/mysql-vs-mariadb.md +78 -0
- package/skills/mysql/references/online-ddl-and-migrations.md +120 -0
- package/skills/mysql/references/replication-and-ha.md +115 -0
- package/skills/mysql/scripts/verify.sh +141 -0
- package/skills/neon/SKILL.md +218 -0
- package/skills/neon/evals/README.md +11 -0
- package/skills/neon/evals/cases.yaml +45 -0
- package/skills/neon/references/branching-ci.md +86 -0
- package/skills/neon/scripts/verify.sh +78 -0
- package/skills/nestjs/SKILL.md +225 -0
- package/skills/nestjs/evals/README.md +3 -0
- package/skills/nestjs/evals/cases.yaml +38 -0
- package/skills/nestjs/references/cross-cutting.md +135 -0
- package/skills/nestjs/references/testing-recipes.md +105 -0
- package/skills/nestjs/scripts/verify.sh +98 -0
- package/skills/netlify/SKILL.md +208 -0
- package/skills/netlify/evals/README.md +13 -0
- package/skills/netlify/evals/cases.yaml +43 -0
- package/skills/netlify/references/functions.md +97 -0
- package/skills/netlify/references/netlify-toml.md +115 -0
- package/skills/netlify/scripts/verify.sh +95 -0
- package/skills/newsletter/SKILL.md +162 -0
- package/skills/newsletter/evals/README.md +12 -0
- package/skills/newsletter/evals/cases.yaml +42 -0
- package/skills/newsletter/references/growth-loops.md +73 -0
- package/skills/newsletter/references/welcome-sequence.md +62 -0
- package/skills/newsletter/scripts/verify.sh +173 -0
- package/skills/nextjs/SKILL.md +472 -0
- package/skills/nextjs/evals/README.md +59 -0
- package/skills/nextjs/evals/cases.yaml +56 -0
- package/skills/nextjs/references/data-and-caching.md +309 -0
- package/skills/nextjs/references/metadata.md +208 -0
- package/skills/nextjs/references/performance.md +325 -0
- package/skills/nextjs/references/react.md +383 -0
- package/skills/nextjs/references/security.md +239 -0
- package/skills/nextjs/references/testing.md +290 -0
- package/skills/nextjs/scripts/verify.sh +141 -0
- package/skills/no-code-app/SKILL.md +153 -0
- package/skills/no-code-app/evals/README.md +3 -0
- package/skills/no-code-app/evals/cases.yaml +43 -0
- package/skills/no-code-app/references/platform-limits.md +100 -0
- package/skills/nodejs/SKILL.md +242 -0
- package/skills/nodejs/evals/README.md +3 -0
- package/skills/nodejs/evals/cases.yaml +39 -0
- package/skills/nodejs/references/express5-migration.md +53 -0
- package/skills/nodejs/references/graceful-shutdown.md +73 -0
- package/skills/nodejs/scripts/verify.sh +122 -0
- package/skills/notion-connector/SKILL.md +234 -0
- package/skills/notion-connector/evals/README.md +15 -0
- package/skills/notion-connector/evals/cases.yaml +45 -0
- package/skills/notion-connector/references/api-versions.md +63 -0
- package/skills/notion-connector/references/property-shapes.md +110 -0
- package/skills/notion-connector/references/sync-patterns.md +95 -0
- package/skills/notion-connector/scripts/verify.sh +162 -0
- package/skills/observability/SKILL.md +231 -0
- package/skills/observability/evals/README.md +3 -0
- package/skills/observability/evals/cases.yaml +49 -0
- package/skills/observability/references/collector-config.md +98 -0
- package/skills/observability/references/instrumentation-recipes.md +115 -0
- package/skills/observability/scripts/verify.sh +156 -0
- package/skills/ollama/SKILL.md +213 -0
- package/skills/ollama/evals/README.md +9 -0
- package/skills/ollama/evals/cases.yaml +43 -0
- package/skills/ollama/references/api.md +148 -0
- package/skills/ollama/references/hardware-sizing.md +87 -0
- package/skills/ollama/scripts/verify.sh +116 -0
- package/skills/orient/SKILL.md +54 -0
- package/skills/orient/evals/README.md +16 -0
- package/skills/orient/evals/cases.yaml +57 -0
- package/skills/orient/references/orientation-contract.md +34 -0
- package/skills/parallel/SKILL.md +198 -0
- package/skills/parallel/evals/README.md +62 -0
- package/skills/parallel/evals/cases.yaml +44 -0
- package/skills/people-ops/SKILL.md +122 -0
- package/skills/people-ops/evals/README.md +14 -0
- package/skills/people-ops/evals/cases.yaml +43 -0
- package/skills/people-ops/references/templates.md +129 -0
- package/skills/performance/SKILL.md +221 -0
- package/skills/performance/evals/README.md +3 -0
- package/skills/performance/evals/cases.yaml +47 -0
- package/skills/performance/references/profiling-playbook.md +54 -0
- package/skills/performance/scripts/verify.sh +94 -0
- package/skills/phoenix/SKILL.md +169 -0
- package/skills/phoenix/evals/README.md +3 -0
- package/skills/phoenix/evals/cases.yaml +40 -0
- package/skills/phoenix/references/auth-and-scopes.md +82 -0
- package/skills/phoenix/references/ecto-patterns.md +93 -0
- package/skills/phoenix/references/liveview.md +134 -0
- package/skills/phoenix/scripts/verify.sh +73 -0
- package/skills/php/SKILL.md +397 -0
- package/skills/php/evals/README.md +12 -0
- package/skills/php/evals/cases.yaml +45 -0
- package/skills/php/references/tooling.md +170 -0
- package/skills/php/references/type-system.md +220 -0
- package/skills/php/scripts/verify.sh +155 -0
- package/skills/pitch-deck/SKILL.md +209 -0
- package/skills/pitch-deck/evals/README.md +15 -0
- package/skills/pitch-deck/evals/cases.yaml +55 -0
- package/skills/pitch-deck/references/numbers-that-matter.md +78 -0
- package/skills/pitch-deck/references/slide-spine.md +149 -0
- package/skills/pitch-deck/scripts/verify.sh +186 -0
- package/skills/plan/SKILL.md +204 -0
- package/skills/plan/evals/README.md +62 -0
- package/skills/plan/evals/cases.yaml +49 -0
- package/skills/plan/references/plan-template.md +124 -0
- package/skills/planetscale/SKILL.md +223 -0
- package/skills/planetscale/evals/README.md +11 -0
- package/skills/planetscale/evals/cases.yaml +46 -0
- package/skills/planetscale/references/deploy-requests.md +75 -0
- package/skills/planetscale/references/no-foreign-keys.md +88 -0
- package/skills/planetscale/scripts/verify.sh +115 -0
- package/skills/podcast/SKILL.md +166 -0
- package/skills/podcast/evals/README.md +17 -0
- package/skills/podcast/evals/cases.yaml +61 -0
- package/skills/podcast/references/rss-and-namespace.md +136 -0
- package/skills/podcast/scripts/verify.sh +246 -0
- package/skills/postgresdb/SKILL.md +372 -0
- package/skills/postgresdb/evals/README.md +55 -0
- package/skills/postgresdb/evals/cases.yaml +57 -0
- package/skills/postgresdb/references/migrations.md +279 -0
- package/skills/postgresdb/references/operations-and-security.md +267 -0
- package/skills/postgresdb/references/query-optimization.md +374 -0
- package/skills/postgresdb/references/schema-and-indexing.md +379 -0
- package/skills/postgresdb/scripts/verify.sh +191 -0
- package/skills/presentations/SKILL.md +296 -0
- package/skills/presentations/evals/README.md +61 -0
- package/skills/presentations/evals/cases.yaml +56 -0
- package/skills/presentations/references/brand-grounding.md +160 -0
- package/skills/presentations/references/markdown-decks.md +290 -0
- package/skills/presentations/references/pptx-python.md +242 -0
- package/skills/presentations/references/slide-design.md +261 -0
- package/skills/presentations/references/storytelling-and-decks.md +150 -0
- package/skills/presentations/scripts/verify.sh +252 -0
- package/skills/press-kit/SKILL.md +243 -0
- package/skills/press-kit/evals/README.md +15 -0
- package/skills/press-kit/evals/cases.yaml +55 -0
- package/skills/press-kit/references/release-types.md +102 -0
- package/skills/press-kit/references/templates.md +132 -0
- package/skills/press-kit/scripts/verify.sh +161 -0
- package/skills/pricing/SKILL.md +160 -0
- package/skills/pricing/evals/README.md +5 -0
- package/skills/pricing/evals/cases.yaml +44 -0
- package/skills/pricing/references/localization.md +56 -0
- package/skills/pricing/references/pricing-models.md +55 -0
- package/skills/pricing/scripts/verify.sh +91 -0
- package/skills/prisma-orm/SKILL.md +320 -0
- package/skills/prisma-orm/evals/README.md +12 -0
- package/skills/prisma-orm/evals/cases.yaml +56 -0
- package/skills/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
- package/skills/prisma-orm/references/queries-and-performance.md +169 -0
- package/skills/prisma-orm/scripts/verify.sh +137 -0
- package/skills/procurement/SKILL.md +179 -0
- package/skills/procurement/evals/README.md +20 -0
- package/skills/procurement/evals/cases.yaml +49 -0
- package/skills/procurement/references/scorecard-and-tco.md +100 -0
- package/skills/procurement/references/sourcing-requests.md +116 -0
- package/skills/procurement/scripts/verify.sh +280 -0
- package/skills/project-ops/SKILL.md +130 -0
- package/skills/project-ops/evals/README.md +3 -0
- package/skills/project-ops/evals/cases.yaml +71 -0
- package/skills/project-ops/references/raid-and-rag.md +58 -0
- package/skills/project-ops/references/status-report-template.md +68 -0
- package/skills/project-ops/scripts/verify.sh +257 -0
- package/skills/prompt-engineering/SKILL.md +138 -0
- package/skills/prompt-engineering/evals/README.md +11 -0
- package/skills/prompt-engineering/evals/cases.yaml +46 -0
- package/skills/prompt-engineering/references/eval-templates.md +94 -0
- package/skills/prompt-engineering/references/output-contracts.md +120 -0
- package/skills/prompt-engineering/scripts/verify.sh +84 -0
- package/skills/proposals/SKILL.md +159 -0
- package/skills/proposals/evals/README.md +3 -0
- package/skills/proposals/evals/cases.yaml +53 -0
- package/skills/proposals/references/proposal-skeleton.md +110 -0
- package/skills/proposals/references/sow-skeleton.md +79 -0
- package/skills/proposals/scripts/verify.sh +201 -0
- package/skills/python/SKILL.md +369 -0
- package/skills/python/evals/README.md +19 -0
- package/skills/python/evals/cases.yaml +46 -0
- package/skills/python/references/async.md +136 -0
- package/skills/python/references/stdlib.md +162 -0
- package/skills/python/references/typing.md +160 -0
- package/skills/python/scripts/verify.sh +125 -0
- package/skills/rag/SKILL.md +226 -0
- package/skills/rag/evals/README.md +13 -0
- package/skills/rag/evals/cases.yaml +45 -0
- package/skills/rag/references/evaluation.md +99 -0
- package/skills/rag/references/pipeline.md +151 -0
- package/skills/rag/scripts/verify.sh +99 -0
- package/skills/rails/SKILL.md +264 -0
- package/skills/rails/evals/README.md +12 -0
- package/skills/rails/evals/cases.yaml +47 -0
- package/skills/rails/references/activerecord.md +148 -0
- package/skills/rails/references/hotwire.md +139 -0
- package/skills/rails/references/testing.md +110 -0
- package/skills/rails/scripts/verify.sh +128 -0
- package/skills/railway/SKILL.md +245 -0
- package/skills/railway/evals/README.md +14 -0
- package/skills/railway/evals/cases.yaml +44 -0
- package/skills/railway/references/cli-cookbook.md +137 -0
- package/skills/railway/references/config-as-code.md +120 -0
- package/skills/railway/scripts/verify.sh +162 -0
- package/skills/react/SKILL.md +222 -0
- package/skills/react/evals/README.md +3 -0
- package/skills/react/evals/cases.yaml +43 -0
- package/skills/react/references/data-and-state.md +152 -0
- package/skills/react/references/performance.md +75 -0
- package/skills/react/references/routing.md +99 -0
- package/skills/react/scripts/verify.sh +123 -0
- package/skills/react-native/SKILL.md +220 -0
- package/skills/react-native/evals/README.md +3 -0
- package/skills/react-native/evals/cases.yaml +42 -0
- package/skills/react-native/references/native-modules.md +123 -0
- package/skills/react-native/references/performance-debugging.md +46 -0
- package/skills/react-native/scripts/verify.sh +117 -0
- package/skills/redis/SKILL.md +298 -0
- package/skills/redis/evals/README.md +10 -0
- package/skills/redis/evals/cases.yaml +43 -0
- package/skills/redis/references/caching.md +116 -0
- package/skills/redis/references/locks-and-rate-limiting.md +140 -0
- package/skills/redis/references/queues.md +102 -0
- package/skills/redis/scripts/verify.sh +164 -0
- package/skills/remotion-video/SKILL.md +218 -0
- package/skills/remotion-video/evals/README.md +23 -0
- package/skills/remotion-video/evals/cases.yaml +64 -0
- package/skills/remotion-video/references/captions-pipeline.md +163 -0
- package/skills/remotion-video/references/render-and-pipeline.md +131 -0
- package/skills/remotion-video/scripts/verify.sh +169 -0
- package/skills/render/SKILL.md +256 -0
- package/skills/render/evals/README.md +12 -0
- package/skills/render/evals/cases.yaml +45 -0
- package/skills/render/references/blueprint-reference.md +203 -0
- package/skills/render/scripts/verify.sh +167 -0
- package/skills/replicate/SKILL.md +210 -0
- package/skills/replicate/evals/README.md +9 -0
- package/skills/replicate/evals/cases.yaml +45 -0
- package/skills/replicate/references/cog-packaging.md +89 -0
- package/skills/replicate/references/deployments-api.md +87 -0
- package/skills/replicate/references/webhooks-and-async.md +110 -0
- package/skills/replicate/scripts/verify.sh +162 -0
- package/skills/replicate-images/SKILL.md +241 -0
- package/skills/replicate-images/evals/README.md +13 -0
- package/skills/replicate-images/evals/cases.yaml +41 -0
- package/skills/replicate-images/references/editing-recipes.md +129 -0
- package/skills/replicate-images/references/models.md +131 -0
- package/skills/replicate-images/scripts/verify.sh +178 -0
- package/skills/reporting/SKILL.md +178 -0
- package/skills/reporting/evals/README.md +12 -0
- package/skills/reporting/evals/cases.yaml +46 -0
- package/skills/reporting/references/pipeline.md +213 -0
- package/skills/reporting/scripts/verify.sh +149 -0
- package/skills/research-ops/SKILL.md +200 -0
- package/skills/research-ops/evals/README.md +13 -0
- package/skills/research-ops/evals/cases.yaml +38 -0
- package/skills/research-ops/references/credibility-rubric.md +78 -0
- package/skills/research-ops/references/memo-template.md +63 -0
- package/skills/research-ops/scripts/verify.sh +181 -0
- package/skills/retention/SKILL.md +206 -0
- package/skills/retention/evals/README.md +13 -0
- package/skills/retention/evals/cases.yaml +42 -0
- package/skills/retention/references/health-score-and-metrics.md +97 -0
- package/skills/retention/references/save-and-winback-plays.md +65 -0
- package/skills/review/SKILL.md +222 -0
- package/skills/review/evals/README.md +84 -0
- package/skills/review/evals/cases.yaml +55 -0
- package/skills/review-management/SKILL.md +204 -0
- package/skills/review-management/evals/README.md +13 -0
- package/skills/review-management/evals/cases.yaml +60 -0
- package/skills/review-management/references/platform-apis.md +86 -0
- package/skills/review-management/scripts/verify.sh +128 -0
- package/skills/ruby/SKILL.md +316 -0
- package/skills/ruby/evals/README.md +12 -0
- package/skills/ruby/evals/cases.yaml +41 -0
- package/skills/ruby/references/gems-and-testing.md +208 -0
- package/skills/ruby/references/metaprogramming.md +161 -0
- package/skills/ruby/scripts/verify.sh +83 -0
- package/skills/runpod/SKILL.md +238 -0
- package/skills/runpod/evals/README.md +11 -0
- package/skills/runpod/evals/cases.yaml +47 -0
- package/skills/runpod/references/cost-and-scaling.md +85 -0
- package/skills/runpod/references/serverless-workers.md +101 -0
- package/skills/runpod/scripts/verify.sh +126 -0
- package/skills/rust/SKILL.md +395 -0
- package/skills/rust/evals/README.md +12 -0
- package/skills/rust/evals/cases.yaml +42 -0
- package/skills/rust/references/async-tokio.md +141 -0
- package/skills/rust/references/axum-service.md +132 -0
- package/skills/rust/references/ownership.md +86 -0
- package/skills/rust/references/testing.md +108 -0
- package/skills/rust/scripts/verify.sh +91 -0
- package/skills/sales-pipeline/SKILL.md +162 -0
- package/skills/sales-pipeline/evals/README.md +13 -0
- package/skills/sales-pipeline/evals/cases.yaml +60 -0
- package/skills/sales-pipeline/references/forecasting-math.md +82 -0
- package/skills/sales-pipeline/references/stage-playbook.md +84 -0
- package/skills/sales-pipeline/scripts/verify.sh +210 -0
- package/skills/scaling/SKILL.md +137 -0
- package/skills/scaling/evals/README.md +3 -0
- package/skills/scaling/evals/cases.yaml +42 -0
- package/skills/scaling/references/load-testing-k6.md +127 -0
- package/skills/scaling/scripts/example.load.js +24 -0
- package/skills/scaling/scripts/verify.sh +70 -0
- package/skills/sdd/SKILL.md +203 -0
- package/skills/sdd/evals/README.md +60 -0
- package/skills/sdd/evals/cases.yaml +78 -0
- package/skills/sdd-init/SKILL.md +148 -0
- package/skills/sdd-init/evals/README.md +3 -0
- package/skills/sdd-init/evals/cases.yaml +43 -0
- package/skills/secure-coding/SKILL.md +365 -0
- package/skills/secure-coding/evals/README.md +68 -0
- package/skills/secure-coding/evals/cases.yaml +55 -0
- package/skills/secure-coding/references/authn-authz.md +249 -0
- package/skills/secure-coding/references/owasp-by-stack.md +574 -0
- package/skills/secure-coding/references/secrets-and-supply-chain.md +205 -0
- package/skills/secure-coding/references/threat-modeling.md +213 -0
- package/skills/secure-coding/scripts/verify.sh +208 -0
- package/skills/security-scan/SKILL.md +239 -0
- package/skills/security-scan/evals/README.md +14 -0
- package/skills/security-scan/evals/cases.yaml +50 -0
- package/skills/security-scan/references/tools.md +98 -0
- package/skills/security-scan/references/triage.md +93 -0
- package/skills/security-scan/scripts/verify.sh +108 -0
- package/skills/seo-geo/SKILL.md +192 -0
- package/skills/seo-geo/evals/README.md +14 -0
- package/skills/seo-geo/evals/cases.yaml +45 -0
- package/skills/seo-geo/references/ai-crawler-control.md +104 -0
- package/skills/seo-geo/references/schema-recipes.md +130 -0
- package/skills/seo-geo/scripts/verify.sh +236 -0
- package/skills/ship/SKILL.md +258 -0
- package/skills/ship/evals/README.md +89 -0
- package/skills/ship/evals/cases.yaml +44 -0
- package/skills/shopify/SKILL.md +229 -0
- package/skills/shopify/evals/README.md +14 -0
- package/skills/shopify/evals/cases.yaml +41 -0
- package/skills/shopify/references/apps-graphql.md +103 -0
- package/skills/shopify/references/checkout-extensibility.md +71 -0
- package/skills/shopify/references/liquid-themes.md +89 -0
- package/skills/shopify/scripts/verify.sh +120 -0
- package/skills/shortform-editing/SKILL.md +161 -0
- package/skills/shortform-editing/evals/README.md +16 -0
- package/skills/shortform-editing/evals/cases.yaml +61 -0
- package/skills/shortform-editing/references/captions.md +85 -0
- package/skills/shortform-editing/references/ffmpeg-pipeline.md +126 -0
- package/skills/shortform-editing/scripts/verify.sh +148 -0
- package/skills/shortform-ideation/SKILL.md +153 -0
- package/skills/shortform-ideation/evals/README.md +20 -0
- package/skills/shortform-ideation/evals/cases.yaml +58 -0
- package/skills/shortform-ideation/references/experiment-ledger.md +85 -0
- package/skills/shortform-ideation/references/trend-sources.md +69 -0
- package/skills/shortform-ideation/scripts/verify.sh +172 -0
- package/skills/shortform-packaging/SKILL.md +247 -0
- package/skills/shortform-packaging/evals/README.md +10 -0
- package/skills/shortform-packaging/evals/cases.yaml +48 -0
- package/skills/shortform-packaging/references/package-templates.md +117 -0
- package/skills/shortform-packaging/scripts/verify.sh +210 -0
- package/skills/shortform-strategy/SKILL.md +149 -0
- package/skills/shortform-strategy/evals/README.md +3 -0
- package/skills/shortform-strategy/evals/cases.yaml +52 -0
- package/skills/shortform-strategy/references/learning-loop-template.md +49 -0
- package/skills/shortform-strategy/references/platform-signals-2026.md +46 -0
- package/skills/shortform-strategy/scripts/verify.sh +176 -0
- package/skills/skill-scout/SKILL.md +133 -0
- package/skills/skill-scout/evals/README.md +12 -0
- package/skills/skill-scout/evals/cases.yaml +56 -0
- package/skills/skill-scout/references/install-commands.md +76 -0
- package/skills/skill-scout/scripts/verify.sh +154 -0
- package/skills/social-publisher/SKILL.md +179 -0
- package/skills/social-publisher/evals/README.md +14 -0
- package/skills/social-publisher/evals/cases.yaml +55 -0
- package/skills/social-publisher/references/calendar-schema.md +97 -0
- package/skills/social-publisher/references/platform-limits.md +56 -0
- package/skills/social-publisher/scripts/verify.sh +232 -0
- package/skills/solid-js/SKILL.md +260 -0
- package/skills/solid-js/evals/README.md +3 -0
- package/skills/solid-js/evals/cases.yaml +38 -0
- package/skills/solid-js/references/reactivity-deep-dive.md +89 -0
- package/skills/solid-js/references/router-and-start.md +93 -0
- package/skills/solid-js/scripts/verify.sh +130 -0
- package/skills/sop-builder/SKILL.md +233 -0
- package/skills/sop-builder/evals/README.md +14 -0
- package/skills/sop-builder/evals/cases.yaml +48 -0
- package/skills/sop-builder/references/sop-skeleton.md +170 -0
- package/skills/specify/SKILL.md +214 -0
- package/skills/specify/evals/README.md +73 -0
- package/skills/specify/evals/cases.yaml +80 -0
- package/skills/specify/references/eliciting-requirements.md +77 -0
- package/skills/specify/references/spec-template.md +60 -0
- package/skills/spreadsheet-ops/SKILL.md +180 -0
- package/skills/spreadsheet-ops/evals/README.md +33 -0
- package/skills/spreadsheet-ops/evals/cases.yaml +42 -0
- package/skills/spreadsheet-ops/references/formula-cookbook.md +70 -0
- package/skills/spreadsheet-ops/references/python-excel.md +87 -0
- package/skills/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
- package/skills/spreadsheet-ops/scripts/verify.sh +152 -0
- package/skills/spring-boot/SKILL.md +375 -0
- package/skills/spring-boot/evals/README.md +11 -0
- package/skills/spring-boot/evals/cases.yaml +49 -0
- package/skills/spring-boot/references/jpa.md +94 -0
- package/skills/spring-boot/references/security.md +92 -0
- package/skills/spring-boot/references/testing.md +95 -0
- package/skills/spring-boot/scripts/verify.sh +115 -0
- package/skills/sql/SKILL.md +286 -0
- package/skills/sql/evals/README.md +9 -0
- package/skills/sql/evals/cases.yaml +49 -0
- package/skills/sql/references/ctes-and-recursion.md +63 -0
- package/skills/sql/references/joins-and-sets.md +71 -0
- package/skills/sql/references/portability.md +38 -0
- package/skills/sql/references/window-functions.md +72 -0
- package/skills/sql/scripts/verify.sh +139 -0
- package/skills/sqlite-turso/SKILL.md +214 -0
- package/skills/sqlite-turso/evals/README.md +24 -0
- package/skills/sqlite-turso/evals/cases.yaml +45 -0
- package/skills/sqlite-turso/references/embedded-replicas.md +96 -0
- package/skills/sqlite-turso/scripts/verify.sh +95 -0
- package/skills/stripe/SKILL.md +269 -0
- package/skills/stripe/evals/README.md +11 -0
- package/skills/stripe/evals/cases.yaml +45 -0
- package/skills/stripe/references/going-live.md +64 -0
- package/skills/stripe/references/webhook-events.md +79 -0
- package/skills/stripe/scripts/verify.sh +130 -0
- package/skills/structured-extraction/SKILL.md +230 -0
- package/skills/structured-extraction/evals/README.md +13 -0
- package/skills/structured-extraction/evals/cases.yaml +70 -0
- package/skills/structured-extraction/references/providers.md +152 -0
- package/skills/structured-extraction/scripts/verify.sh +160 -0
- package/skills/suggest/SKILL.md +30 -0
- package/skills/suggest/evals/README.md +14 -0
- package/skills/suggest/evals/cases.yaml +51 -0
- package/skills/supabase/SKILL.md +268 -0
- package/skills/supabase/evals/README.md +12 -0
- package/skills/supabase/evals/cases.yaml +42 -0
- package/skills/supabase/references/auth-ssr.md +173 -0
- package/skills/supabase/references/rls-cookbook.md +122 -0
- package/skills/supabase/scripts/verify.sh +149 -0
- package/skills/svelte/SKILL.md +238 -0
- package/skills/svelte/evals/README.md +3 -0
- package/skills/svelte/evals/cases.yaml +41 -0
- package/skills/svelte/references/runes.md +97 -0
- package/skills/svelte/references/sveltekit-data.md +156 -0
- package/skills/svelte/scripts/verify.sh +128 -0
- package/skills/swift-ios/SKILL.md +217 -0
- package/skills/swift-ios/evals/README.md +3 -0
- package/skills/swift-ios/evals/cases.yaml +46 -0
- package/skills/swift-ios/references/concurrency.md +132 -0
- package/skills/swift-ios/references/testing.md +112 -0
- package/skills/swift-ios/scripts/verify.sh +98 -0
- package/skills/tasks/SKILL.md +260 -0
- package/skills/tasks/evals/README.md +70 -0
- package/skills/tasks/evals/cases.yaml +75 -0
- package/skills/tauri/SKILL.md +224 -0
- package/skills/tauri/evals/README.md +12 -0
- package/skills/tauri/evals/cases.yaml +46 -0
- package/skills/tauri/references/bundling-distribution.md +129 -0
- package/skills/tauri/references/security.md +143 -0
- package/skills/tauri/scripts/verify.sh +178 -0
- package/skills/technical-writing/SKILL.md +230 -0
- package/skills/technical-writing/evals/README.md +12 -0
- package/skills/technical-writing/evals/cases.yaml +53 -0
- package/skills/technical-writing/references/diataxis-modes.md +131 -0
- package/skills/technical-writing/references/vale-starter.md +90 -0
- package/skills/technical-writing/scripts/verify.sh +83 -0
- package/skills/terms-conditions/SKILL.md +147 -0
- package/skills/terms-conditions/evals/README.md +14 -0
- package/skills/terms-conditions/evals/cases.yaml +48 -0
- package/skills/terms-conditions/references/clause-library.md +158 -0
- package/skills/terms-conditions/references/notices-and-aup.md +125 -0
- package/skills/terms-conditions/scripts/verify.sh +92 -0
- package/skills/testing-go/SKILL.md +246 -0
- package/skills/testing-go/evals/README.md +3 -0
- package/skills/testing-go/evals/cases.yaml +44 -0
- package/skills/testing-go/references/coverage-and-benchmarks.md +85 -0
- package/skills/testing-go/references/mocks-and-fakes.md +140 -0
- package/skills/testing-go/references/synctest-and-concurrency.md +82 -0
- package/skills/testing-go/scripts/verify.sh +72 -0
- package/skills/testing-py/SKILL.md +179 -0
- package/skills/testing-py/evals/README.md +5 -0
- package/skills/testing-py/evals/cases.yaml +44 -0
- package/skills/testing-py/references/mocking.md +141 -0
- package/skills/testing-py/references/property-testing.md +99 -0
- package/skills/testing-py/scripts/verify.sh +117 -0
- package/skills/testing-web/SKILL.md +224 -0
- package/skills/testing-web/evals/README.md +11 -0
- package/skills/testing-web/evals/cases.yaml +52 -0
- package/skills/testing-web/references/jest-setup.md +88 -0
- package/skills/testing-web/references/recipes.md +116 -0
- package/skills/testing-web/scripts/verify.sh +111 -0
- package/skills/tiktok-api/SKILL.md +315 -0
- package/skills/tiktok-api/evals/README.md +17 -0
- package/skills/tiktok-api/evals/cases.yaml +51 -0
- package/skills/tiktok-api/references/metrics-and-publish.md +127 -0
- package/skills/tiktok-api/references/oauth-setup.md +105 -0
- package/skills/tiktok-api/references/wiki-schema.md +85 -0
- package/skills/tiktok-api/scripts/verify.sh +96 -0
- package/skills/together-fireworks/SKILL.md +181 -0
- package/skills/together-fireworks/evals/README.md +3 -0
- package/skills/together-fireworks/evals/cases.yaml +50 -0
- package/skills/together-fireworks/references/batch-and-tuning.md +59 -0
- package/skills/together-fireworks/references/models-and-pricing.md +79 -0
- package/skills/together-fireworks/scripts/verify.sh +165 -0
- package/skills/translation-l10n/SKILL.md +229 -0
- package/skills/translation-l10n/evals/README.md +3 -0
- package/skills/translation-l10n/evals/cases.yaml +39 -0
- package/skills/translation-l10n/references/icu-cookbook.md +82 -0
- package/skills/translation-l10n/references/rtl-and-bidi.md +60 -0
- package/skills/typescript/SKILL.md +258 -0
- package/skills/typescript/evals/README.md +15 -0
- package/skills/typescript/evals/cases.yaml +46 -0
- package/skills/typescript/references/build-and-monorepo.md +141 -0
- package/skills/typescript/references/type-system.md +162 -0
- package/skills/typescript/scripts/verify.sh +52 -0
- package/skills/unit-economics/SKILL.md +180 -0
- package/skills/unit-economics/evals/README.md +5 -0
- package/skills/unit-economics/evals/cases.yaml +43 -0
- package/skills/unit-economics/references/formulas.md +144 -0
- package/skills/unit-economics/scripts/verify.sh +179 -0
- package/skills/vector-db/SKILL.md +189 -0
- package/skills/vector-db/evals/README.md +10 -0
- package/skills/vector-db/evals/cases.yaml +45 -0
- package/skills/vector-db/references/engines.md +175 -0
- package/skills/vector-db/references/tuning.md +62 -0
- package/skills/vector-db/scripts/verify.sh +110 -0
- package/skills/vercel/SKILL.md +242 -0
- package/skills/vercel/evals/README.md +23 -0
- package/skills/vercel/evals/cases.yaml +45 -0
- package/skills/vercel/references/cli-cookbook.md +98 -0
- package/skills/vercel/references/vercel-json.md +120 -0
- package/skills/vercel/scripts/verify.sh +168 -0
- package/skills/verify/SKILL.md +188 -0
- package/skills/verify/evals/README.md +78 -0
- package/skills/verify/evals/cases.yaml +74 -0
- package/skills/video-shorts/SKILL.md +163 -0
- package/skills/video-shorts/evals/README.md +15 -0
- package/skills/video-shorts/evals/cases.yaml +56 -0
- package/skills/video-shorts/references/hook-and-script-patterns.md +95 -0
- package/skills/video-shorts/references/specs-and-safe-zones.md +74 -0
- package/skills/video-shorts/scripts/verify.sh +172 -0
- package/skills/vue-nuxt/SKILL.md +384 -0
- package/skills/vue-nuxt/evals/README.md +11 -0
- package/skills/vue-nuxt/evals/cases.yaml +49 -0
- package/skills/vue-nuxt/references/data-and-state.md +127 -0
- package/skills/vue-nuxt/references/migration-nuxt4.md +79 -0
- package/skills/vue-nuxt/references/nitro-and-rendering.md +117 -0
- package/skills/vue-nuxt/references/reactivity.md +135 -0
- package/skills/vue-nuxt/scripts/verify.sh +148 -0
- package/skills/webhooks/SKILL.md +246 -0
- package/skills/webhooks/evals/README.md +15 -0
- package/skills/webhooks/evals/cases.yaml +46 -0
- package/skills/webhooks/references/framework-raw-body.md +97 -0
- package/skills/webhooks/references/signature-schemes.md +66 -0
- package/skills/webhooks/scripts/verify.sh +142 -0
- package/skills/webinar/SKILL.md +196 -0
- package/skills/webinar/evals/README.md +14 -0
- package/skills/webinar/evals/cases.yaml +44 -0
- package/skills/webinar/references/email-cadence.md +75 -0
- package/skills/webinar/references/run-of-show.md +83 -0
- package/skills/whatsapp-telegram/SKILL.md +235 -0
- package/skills/whatsapp-telegram/evals/README.md +11 -0
- package/skills/whatsapp-telegram/evals/cases.yaml +44 -0
- package/skills/whatsapp-telegram/references/telegram-bot-api.md +91 -0
- package/skills/whatsapp-telegram/references/whatsapp-cloud-api.md +103 -0
- package/skills/whatsapp-telegram/scripts/verify.sh +90 -0
- package/skills/wordpress/SKILL.md +224 -0
- package/skills/wordpress/evals/README.md +3 -0
- package/skills/wordpress/evals/cases.yaml +50 -0
- package/skills/wordpress/references/hardening.md +108 -0
- package/skills/wordpress/references/performance.md +80 -0
- package/skills/wordpress/references/woocommerce.md +65 -0
- package/skills/wordpress/scripts/verify.sh +96 -0
- package/skills/worktrees/SKILL.md +199 -0
- package/skills/worktrees/evals/README.md +78 -0
- package/skills/worktrees/evals/cases.yaml +47 -0
- package/skills/youtube-api/SKILL.md +286 -0
- package/skills/youtube-api/evals/README.md +3 -0
- package/skills/youtube-api/evals/cases.yaml +50 -0
- package/skills/youtube-api/references/analytics-queries.md +89 -0
- package/skills/youtube-api/references/oauth-setup.md +55 -0
- package/skills/youtube-api/references/wiki-schema.md +70 -0
- package/skills/youtube-api/scripts/verify.sh +84 -0
- package/skills/youtube-ideation/SKILL.md +234 -0
- package/skills/youtube-ideation/evals/README.md +14 -0
- package/skills/youtube-ideation/evals/cases.yaml +52 -0
- package/skills/youtube-ideation/references/idea-ledger-and-loop.md +89 -0
- package/skills/youtube-ideation/references/research-and-signals.md +92 -0
- package/skills/youtube-ideation/scripts/verify.sh +237 -0
- package/skills/youtube-packaging/SKILL.md +220 -0
- package/skills/youtube-packaging/evals/README.md +16 -0
- package/skills/youtube-packaging/evals/cases.yaml +48 -0
- package/skills/youtube-packaging/references/description-and-chapters.md +135 -0
- package/skills/youtube-packaging/scripts/verify.sh +250 -0
- package/skills/youtube-strategy/SKILL.md +157 -0
- package/skills/youtube-strategy/evals/README.md +5 -0
- package/skills/youtube-strategy/evals/cases.yaml +61 -0
- package/skills/youtube-strategy/references/channel-architecture.md +46 -0
- package/skills/youtube-strategy/references/wiki-records.md +86 -0
- package/skills/youtube-strategy/scripts/verify.sh +118 -0
- package/skills/youtube-thumbnails/SKILL.md +180 -0
- package/skills/youtube-thumbnails/evals/README.md +11 -0
- package/skills/youtube-thumbnails/evals/cases.yaml +48 -0
- package/skills/youtube-thumbnails/references/composition-and-specs.md +69 -0
- package/skills/youtube-thumbnails/references/experiment-log-format.md +65 -0
- package/skills/youtube-thumbnails/scripts/verify.sh +123 -0
- package/targets/claude.js +23 -0
- package/targets/codex.js +29 -0
- package/targets/cursor.js +20 -0
- package/targets/gemini.js +29 -0
- package/targets/index.js +55 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# verify.sh — structural lint for a youtube-strategy wiki under 02-DOCS/wiki/youtube/.
|
|
4
|
+
#
|
|
5
|
+
# WHAT IT DOES (read-only; never edits a file)
|
|
6
|
+
# Static, network-free checks on the decision records the skill writes back.
|
|
7
|
+
# 1. The target directory exists.
|
|
8
|
+
# 2. At least one decision record is present: a file under decisions/*.md
|
|
9
|
+
# OR a running decisions.md log at the target root.
|
|
10
|
+
# 3. Each decision record carries the three required signals:
|
|
11
|
+
# - a date (a YYYY-MM-DD anywhere in the file)
|
|
12
|
+
# - a Decision: line (the concrete choice)
|
|
13
|
+
# - a named metric/bet (a "Bets on metric:" / "metric" / "bet" field)
|
|
14
|
+
# A record missing the metric/bet field is a HARD FAILURE — a decision with
|
|
15
|
+
# no metric is an opinion, not a checkable bet.
|
|
16
|
+
#
|
|
17
|
+
# Missing date or Decision line is also a hard failure. A missing/empty target
|
|
18
|
+
# (a fresh channel with no wiki yet) is reported and exits 0 — no false failure.
|
|
19
|
+
# Pure bash + grep, no dependencies. It is a lint, not a strategy oracle.
|
|
20
|
+
#
|
|
21
|
+
# HOW TO RUN
|
|
22
|
+
# ./verify.sh 02-DOCS/wiki/youtube/ # lint a channel's strategy wiki
|
|
23
|
+
# ./verify.sh # no target -> nothing to check, exit 0
|
|
24
|
+
#
|
|
25
|
+
# EXIT CODES
|
|
26
|
+
# 0 clean, or nothing to check
|
|
27
|
+
# 1 a hard structural failure
|
|
28
|
+
# 2 bad usage
|
|
29
|
+
#
|
|
30
|
+
# Runs on stock macOS bash 3.2.
|
|
31
|
+
|
|
32
|
+
set -euo pipefail
|
|
33
|
+
|
|
34
|
+
if [ -t 1 ]; then
|
|
35
|
+
RED=$'\033[31m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; NC=$'\033[0m'
|
|
36
|
+
else
|
|
37
|
+
RED=''; GREEN=''; YELLOW=''; NC=''
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
ok_count=0; warn_count=0; fail_count=0
|
|
41
|
+
ok() { printf '%s[ ok ]%s %s\n' "$GREEN" "$NC" "$*"; ok_count=$((ok_count + 1)); }
|
|
42
|
+
warn() { printf '%s[warn]%s %s\n' "$YELLOW" "$NC" "$*"; warn_count=$((warn_count + 1)); }
|
|
43
|
+
fail() { printf '%s[fail]%s %s\n' "$RED" "$NC" "$*"; fail_count=$((fail_count + 1)); }
|
|
44
|
+
|
|
45
|
+
usage() { sed -n '2,34p' "$0" | sed 's/^# \{0,1\}//'; }
|
|
46
|
+
|
|
47
|
+
summary_exit() {
|
|
48
|
+
printf '\nok=%d warn=%d fail=%d\n' "$ok_count" "$warn_count" "$fail_count"
|
|
49
|
+
[ "$fail_count" -gt 0 ] && exit 1
|
|
50
|
+
exit 0
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# --- arg parse --------------------------------------------------------------
|
|
54
|
+
TARGET=""
|
|
55
|
+
while [ $# -gt 0 ]; do
|
|
56
|
+
case "$1" in
|
|
57
|
+
-h|--help) usage; exit 0 ;;
|
|
58
|
+
-*) printf 'unknown flag: %s\n' "$1" >&2; usage >&2; exit 2 ;;
|
|
59
|
+
*) TARGET="$1"; shift ;;
|
|
60
|
+
esac
|
|
61
|
+
done
|
|
62
|
+
|
|
63
|
+
# No target, or missing dir -> nothing to check, clean exit (no false fail).
|
|
64
|
+
if [ -z "$TARGET" ]; then
|
|
65
|
+
ok "no wiki path given — nothing to lint"
|
|
66
|
+
summary_exit
|
|
67
|
+
fi
|
|
68
|
+
if [ ! -d "$TARGET" ]; then
|
|
69
|
+
warn "directory not found: $TARGET — nothing to lint (fresh channel?)"
|
|
70
|
+
summary_exit
|
|
71
|
+
fi
|
|
72
|
+
ok "wiki directory exists: $TARGET"
|
|
73
|
+
|
|
74
|
+
# --- collect decision records ----------------------------------------------
|
|
75
|
+
# Per-decision files under decisions/, plus an optional running decisions.md log.
|
|
76
|
+
RECORDS=""
|
|
77
|
+
if [ -d "$TARGET/decisions" ]; then
|
|
78
|
+
for f in "$TARGET"/decisions/*.md; do
|
|
79
|
+
[ -f "$f" ] && RECORDS="$RECORDS$f
|
|
80
|
+
"
|
|
81
|
+
done
|
|
82
|
+
fi
|
|
83
|
+
[ -f "$TARGET/decisions.md" ] && RECORDS="$RECORDS$TARGET/decisions.md
|
|
84
|
+
"
|
|
85
|
+
|
|
86
|
+
# Trim trailing newline / handle empty.
|
|
87
|
+
RECORDS="$(printf '%s' "$RECORDS" | sed '/^$/d')"
|
|
88
|
+
|
|
89
|
+
if [ -z "$RECORDS" ]; then
|
|
90
|
+
warn "no decision records yet (decisions/*.md or decisions.md) — nothing to lint"
|
|
91
|
+
summary_exit
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# --- per-record structural checks ------------------------------------------
|
|
95
|
+
DATE_RE='[0-9]{4}-[0-9]{2}-[0-9]{2}'
|
|
96
|
+
|
|
97
|
+
while IFS= read -r rec; do
|
|
98
|
+
[ -z "$rec" ] && continue
|
|
99
|
+
if [ ! -s "$rec" ]; then
|
|
100
|
+
fail "$rec: empty record"
|
|
101
|
+
continue
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
miss=""
|
|
105
|
+
grep -Eq "$DATE_RE" "$rec" || miss="$miss date"
|
|
106
|
+
grep -Eiq '^[[:space:]-]*Decision:' "$rec" || miss="$miss decision-line"
|
|
107
|
+
grep -Eiq '(bets on metric:|metric|bet:)' "$rec" || miss="$miss metric/bet"
|
|
108
|
+
|
|
109
|
+
if [ -n "$miss" ]; then
|
|
110
|
+
fail "$rec: missing required field(s):$miss"
|
|
111
|
+
else
|
|
112
|
+
ok "$rec: date + decision + metric present"
|
|
113
|
+
fi
|
|
114
|
+
done <<EOF
|
|
115
|
+
$RECORDS
|
|
116
|
+
EOF
|
|
117
|
+
|
|
118
|
+
summary_exit
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: youtube-thumbnails
|
|
3
|
+
description: "Use when designing or fixing a YouTube thumbnail, making variants for a thumbnail A/B test, or figuring out which thumbnail style wins on a channel. Triggers: 'design a thumbnail', 'make 3 thumbnail variants to A/B test', 'set up Test & Compare on this upload', 'why is my CTR low', the non-obvious 'CTR is fine but the test keeps picking the boring thumbnail' (the watch-time-share trap), 'which thumbnail style actually wins on my channel', and Catalan/Spanish 'fes la miniatura del vídeo' / 'diseña la portada del vídeo'. NOT pairing the title with the thumbnail as one click-promise (that is youtube-packaging), NOT channel positioning or niche (youtube-strategy), NOT setting a thumbnail through the Data API (youtube-api)."
|
|
4
|
+
tags: [youtube, thumbnails, ctr, ab-testing, design]
|
|
5
|
+
recommends: [youtube-packaging, youtube-strategy, ab-testing, design]
|
|
6
|
+
profiles: []
|
|
7
|
+
origin: risco
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# YouTube thumbnails
|
|
11
|
+
|
|
12
|
+
Design thumbnails that survive the mobile feed, test them so the winner is a
|
|
13
|
+
*lesson* and not a coin flip, and write every outcome back to the channel's wiki
|
|
14
|
+
so the next thumbnail is evidence-led. A thumbnail you cannot learn from is half
|
|
15
|
+
wasted.
|
|
16
|
+
|
|
17
|
+
## The loop
|
|
18
|
+
|
|
19
|
+
This skill runs a closed loop, not a one-off design pass:
|
|
20
|
+
|
|
21
|
+
1. **Design** 2-3 candidate concepts that differ on exactly ONE testable axis.
|
|
22
|
+
2. **Test** them in YouTube Studio "Test & Compare".
|
|
23
|
+
3. **Log** the outcome to `02-DOCS/wiki/youtube/thumbnail-experiments.md`.
|
|
24
|
+
4. **Learn**: mine the log into `thumbnail-patterns.md` (what wins on THIS
|
|
25
|
+
channel) and let that pick the next concept.
|
|
26
|
+
|
|
27
|
+
The reason for the discipline: Test & Compare hands you a winner, never a reason.
|
|
28
|
+
One varied axis per round is what turns a winner into a transferable rule.
|
|
29
|
+
|
|
30
|
+
## Hard constraints
|
|
31
|
+
|
|
32
|
+
These are objective and machine-checkable. `scripts/verify.sh` enforces the image
|
|
33
|
+
ones; the rest are your job. Source facts: socialrails.com / thumbnailtest.com
|
|
34
|
+
specs, accessed 2026-06-02.
|
|
35
|
+
|
|
36
|
+
| Constraint | Value | Why |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Resolution | 1280x720 px | YouTube's recommended size; anything smaller upscales soft |
|
|
39
|
+
| Aspect ratio | 16:9 | The only ratio that fills the player and feed cleanly |
|
|
40
|
+
| Min width | 640 px | Below this YouTube may reject the upload |
|
|
41
|
+
| File size | under 2 MB | Hard cap for standard video (10 MB only for podcast thumbnails) |
|
|
42
|
+
| Format | JPG or PNG | Also accepts GIF/BMP, but ship JPG/PNG |
|
|
43
|
+
| Legibility | reads at 320x180 | Most discovery is the mobile feed at ~that scale — the "squint test" |
|
|
44
|
+
| Safe zone | clear bottom-right | The duration stamp overlays that corner — no critical text/face/logo there |
|
|
45
|
+
|
|
46
|
+
The squint test: shrink the image to 320x180 (or step back two meters from the
|
|
47
|
+
screen). If the subject and any text are not instantly readable, it fails — design
|
|
48
|
+
for the feed, not for the editor canvas. See
|
|
49
|
+
`references/composition-and-specs.md` for the contrast math and export workflow.
|
|
50
|
+
|
|
51
|
+
## Composition rules
|
|
52
|
+
|
|
53
|
+
Each rule, one reason. Concrete beats abstract.
|
|
54
|
+
|
|
55
|
+
- **One dominant focal point.** The eye must land in under a second; a thumbnail
|
|
56
|
+
with two competing subjects reads as none at 320x180.
|
|
57
|
+
- **A face with one strong emotion** when the video allows it. Faces with clear
|
|
58
|
+
emotion lift CTR roughly 20-30%, and custom thumbnails run ~60-70% higher CTR
|
|
59
|
+
than auto-generated frames. One emotion, not a neutral stare.
|
|
60
|
+
- **Subject ~30% brighter or darker than its background.** Separation is what
|
|
61
|
+
makes the subject pop in a scroll; a subject the same luminance as the bg
|
|
62
|
+
vanishes. Add a subtle outline or glow if the background is busy.
|
|
63
|
+
- **2-3 bold colors, complementary.** More than three and the image turns to mud
|
|
64
|
+
at feed scale. Target a text/background contrast ratio of about 4.5:1 (a
|
|
65
|
+
usability heuristic, not a YouTube rule).
|
|
66
|
+
- **Kill motion blur and clutter.** Anything that softens or crowds the frame dies
|
|
67
|
+
first when the image shrinks.
|
|
68
|
+
|
|
69
|
+
## Text rules
|
|
70
|
+
|
|
71
|
+
- **3-4 words maximum, maximum weight.** Heavy bold sans, large enough to read at
|
|
72
|
+
320x180. If it needs a second line of small type, cut it.
|
|
73
|
+
- **Never in the bottom-right.** That is the duration-stamp safe zone.
|
|
74
|
+
- **The thumbnail text must NOT just repeat the title.** They are two surfaces of
|
|
75
|
+
one promise, so make them add up instead of echo.
|
|
76
|
+
|
|
77
|
+
Bad -> Good (text that wastes the surface):
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
Bad title: "I built a PC in 24 hours" thumb text: "BUILT A PC IN 24H"
|
|
81
|
+
Good title: "I built a PC in 24 hours" thumb text: "$200 BUDGET?!"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The Bad version spends both surfaces on the same words. The Good version lets the
|
|
85
|
+
thumbnail carry the stakes the title leaves implicit. The *full* title<->thumbnail
|
|
86
|
+
promise pairing — which surface owns which half of the hook — belongs to
|
|
87
|
+
[youtube-packaging](../youtube-packaging/SKILL.md). Here, just don't duplicate.
|
|
88
|
+
|
|
89
|
+
## Variant design for the A/B test
|
|
90
|
+
|
|
91
|
+
This is where the flow branches, so decide deliberately.
|
|
92
|
+
|
|
93
|
+
**Vary exactly ONE axis per variant set.** Change face vs object AND text AND
|
|
94
|
+
color at once and a winning variant teaches you nothing — you cannot attribute the
|
|
95
|
+
lift. Pick one axis from the menu and hold everything else constant.
|
|
96
|
+
|
|
97
|
+
| Axis | Variant A | Variant B | What a win tells you |
|
|
98
|
+
|---|---|---|---|
|
|
99
|
+
| Subject | human face | the object/result | does your audience click people or things |
|
|
100
|
+
| Expression | shock | calm/confident | which emotion this niche rewards |
|
|
101
|
+
| Text | text present | no text | whether words help or clutter here |
|
|
102
|
+
| Color | warm dominant | cool dominant | the channel's palette pull |
|
|
103
|
+
| Layout | subject left | subject right | reading-order fit |
|
|
104
|
+
| Zoom | tight crop | wide context | intimacy vs setting |
|
|
105
|
+
|
|
106
|
+
Two variants is enough to isolate one axis cleanly; use the third slot only when a
|
|
107
|
+
third level of the SAME axis is genuinely informative.
|
|
108
|
+
|
|
109
|
+
## Test & Compare procedure
|
|
110
|
+
|
|
111
|
+
YouTube's native A/B tool (broad rollout 2025). In Studio: open the video ->
|
|
112
|
+
Thumbnail -> "Test & Compare" -> add variants.
|
|
113
|
+
|
|
114
|
+
- **Up to 3 thumbnails** (and/or titles) per video.
|
|
115
|
+
- **Winner is chosen by watch-time share, NOT raw CTR.** This is the trap that
|
|
116
|
+
breaks intuition: a punchy over-promising thumbnail can win the click and still
|
|
117
|
+
*lose* the test because the viewers it lured bounce, dragging watch time down.
|
|
118
|
+
- **Runs up to ~2 weeks**, then YouTube auto-promotes the winner.
|
|
119
|
+
- Let it reach significance — don't call it after two days of noise.
|
|
120
|
+
|
|
121
|
+
The over-promise trap is the seam to [youtube-packaging](../youtube-packaging/SKILL.md):
|
|
122
|
+
if your tests keep crowning the "boring" variant, the flashy one is writing a check
|
|
123
|
+
the video doesn't cash. That is a promise problem, not an image problem.
|
|
124
|
+
|
|
125
|
+
## The feedback loop (wiki)
|
|
126
|
+
|
|
127
|
+
Every test result goes to the channel wiki. Exact path:
|
|
128
|
+
`02-DOCS/wiki/youtube/`.
|
|
129
|
+
|
|
130
|
+
**Log file** — `thumbnail-experiments.md`, one row per test:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
| date | video | variants | axis tested | winner | CTR | watch-time share | note |
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Derived file** — `thumbnail-patterns.md`, a running table of what wins on THIS
|
|
137
|
+
channel (e.g. "faces beat objects 4/5 tests", "no-text wins on tutorials"). You
|
|
138
|
+
update this after each logged test.
|
|
139
|
+
|
|
140
|
+
**Next-concept rule:** the next thumbnail keeps the winning level of every axis
|
|
141
|
+
already settled by the log, and tests the next unsettled axis. You only re-test a
|
|
142
|
+
settled axis when the channel's content or audience visibly shifts.
|
|
143
|
+
|
|
144
|
+
**Caveat:** on a small channel a single test is noise. Treat a pattern as real only
|
|
145
|
+
after it holds across ~3+ tests or a clear, repeated margin. Full schema, filled
|
|
146
|
+
example rows, and the pattern-mining heuristic live in
|
|
147
|
+
`references/experiment-log-format.md`.
|
|
148
|
+
|
|
149
|
+
## Anti-patterns
|
|
150
|
+
|
|
151
|
+
| Anti-pattern | Why it fails | Do instead |
|
|
152
|
+
|---|---|---|
|
|
153
|
+
| Tiny or thin text | Illegible at 320x180 feed scale | 3-4 words, heavy bold, squint-tested |
|
|
154
|
+
| 5+ colors | Muddies into noise when shrunk | 2-3 complementary bold colors |
|
|
155
|
+
| Clipart / stock faces | No emotion, no trust, reads as spam | Real face, one strong emotion |
|
|
156
|
+
| Thumb text == title text | Wastes both surfaces of the promise | Thumb adds the stake the title omits |
|
|
157
|
+
| Varying 3 axes per test | Winner is uninterpretable | One axis per variant set |
|
|
158
|
+
| Trusting one test on a small channel | That's noise, not signal | Wait for ~3+ tests / repeated margin |
|
|
159
|
+
| Designing in the full editor only | Looks great at 1280, dies in the feed | Check the 320x180 squint view |
|
|
160
|
+
| Subject/logo in bottom-right | Duration stamp covers it | Keep that corner clear |
|
|
161
|
+
| Chasing CTR while watch time tanks | Test & Compare scores watch-time share | Fix the over-promise (see youtube-packaging) |
|
|
162
|
+
|
|
163
|
+
## Pre-publish checklist
|
|
164
|
+
|
|
165
|
+
- [ ] Exactly 1280x720, 16:9, under 2MB, JPG or PNG (run `scripts/verify.sh`)
|
|
166
|
+
- [ ] Passes the 320x180 squint test
|
|
167
|
+
- [ ] Bottom-right corner clear of text/face/logo
|
|
168
|
+
- [ ] Single dominant focal point; subject ~30% contrast vs background
|
|
169
|
+
- [ ] 3-4 words max, heavy weight; text not duplicating the title
|
|
170
|
+
- [ ] 2-3 colors only
|
|
171
|
+
- [ ] Variant set differs on exactly ONE named axis
|
|
172
|
+
- [ ] Test & Compare configured (<=3 variants, watch-time-share, ~2-week window)
|
|
173
|
+
- [ ] Log row staged for `02-DOCS/wiki/youtube/thumbnail-experiments.md`
|
|
174
|
+
|
|
175
|
+
## See also
|
|
176
|
+
|
|
177
|
+
- [youtube-packaging](../youtube-packaging/SKILL.md) — the title<->thumbnail promise pair and hook framing.
|
|
178
|
+
- [youtube-strategy](../youtube-strategy/SKILL.md) — channel positioning, niche, cadence.
|
|
179
|
+
- [ab-testing](../ab-testing/SKILL.md) — rigorous experiment design on non-YouTube surfaces.
|
|
180
|
+
- [design](../design/SKILL.md) — general visual systems and composition theory.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Evals — youtube-thumbnails
|
|
2
|
+
|
|
3
|
+
These cases are LLM-graded against the rubric in `cases.yaml`, run through the
|
|
4
|
+
repo's standard eval runner. `should_trigger` and `should_not_trigger` check
|
|
5
|
+
routing — does the skill fire on real thumbnail/A-B work and stay quiet when the
|
|
6
|
+
request belongs to a sibling (packaging, strategy, ideation, the API, ab-testing,
|
|
7
|
+
or brand-identity)? `capability` checks the end-to-end behavior on the PC-build
|
|
8
|
+
scenario: one-axis variants, the hard image constraints, correct Test & Compare
|
|
9
|
+
setup (watch-time-share, not CTR), and a logged wiki row with the next-concept
|
|
10
|
+
rule. No live YouTube account or Data API access is needed — grading is on the
|
|
11
|
+
agent's plan and outputs, not on real uploads.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
skill: youtube-thumbnails
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Design 3 thumbnail variants to A/B test for my new video."
|
|
5
|
+
why: Core job — concept generation feeding a Test & Compare run.
|
|
6
|
+
- prompt: "My CTR dropped this month, can you fix this thumbnail?"
|
|
7
|
+
why: Diagnostic entry point into the craft rules.
|
|
8
|
+
- prompt: "Set up a Test & Compare experiment on this upload."
|
|
9
|
+
why: The skill owns the native thumbnail A/B mechanics.
|
|
10
|
+
- prompt: "CTR is fine but the test keeps picking the boring thumbnail — why?"
|
|
11
|
+
why: Non-obvious — the watch-time-share metric vs CTR and the over-promise trap.
|
|
12
|
+
- prompt: "Which thumbnail style actually wins on my channel?"
|
|
13
|
+
why: Reads the per-channel wiki log and mines patterns; distinctive feedback-loop job.
|
|
14
|
+
- prompt: "Fes la miniatura del vídeo perquè tingui més clics."
|
|
15
|
+
why: Catalan phrasing for thumbnail design — language + craft trigger.
|
|
16
|
+
|
|
17
|
+
should_not_trigger:
|
|
18
|
+
- prompt: "Write 5 title options for this video."
|
|
19
|
+
route_to: youtube-packaging
|
|
20
|
+
why: Title wording and the click-promise pairing live in packaging, not image craft.
|
|
21
|
+
- prompt: "What niche should my channel focus on?"
|
|
22
|
+
route_to: youtube-strategy
|
|
23
|
+
why: Channel-level positioning and cadence, not a single thumbnail.
|
|
24
|
+
- prompt: "Give me 10 video ideas for this week."
|
|
25
|
+
route_to: youtube-ideation
|
|
26
|
+
why: Topic/idea generation, upstream of any thumbnail.
|
|
27
|
+
- prompt: "Programmatically upload and set the thumbnail via the YouTube Data API."
|
|
28
|
+
route_to: youtube-api
|
|
29
|
+
why: API integration, not design or A/B mechanics.
|
|
30
|
+
- prompt: "Design a logo and a brand color palette for my company."
|
|
31
|
+
route_to: brand-identity
|
|
32
|
+
why: General visual identity, not a YouTube thumbnail.
|
|
33
|
+
- prompt: "Run a statistically rigorous A/B test on my landing page."
|
|
34
|
+
route_to: ab-testing
|
|
35
|
+
why: Generic experiment design on a non-YouTube surface.
|
|
36
|
+
|
|
37
|
+
capability:
|
|
38
|
+
- scenario: >
|
|
39
|
+
A creator has a video "I built a PC in 24 hours", current CTR ~3%, and wants
|
|
40
|
+
better thumbnails plus a test they can actually learn from. Walk them from
|
|
41
|
+
brief to logged result.
|
|
42
|
+
must_include:
|
|
43
|
+
- Proposes 2-3 variants that differ on exactly ONE named axis each (e.g. subject: face vs object)
|
|
44
|
+
- Enforces hard constraints — 1280x720, 16:9, under 2MB, 320x180 legibility, bottom-right safe zone
|
|
45
|
+
- Applies face+emotion and the ~30% contrast/luminance guidance concretely
|
|
46
|
+
- Sets up Test & Compare correctly — up to 3 variants, winner by watch-time share not CTR, ~2-week window, auto-promote
|
|
47
|
+
- Writes/updates a log row under 02-DOCS/wiki/youtube/thumbnail-experiments.md and states the next-concept rule
|
|
48
|
+
- Defers title wording and the title<->thumbnail promise to youtube-packaging rather than rewriting the title
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Composition & specs reference
|
|
2
|
+
|
|
3
|
+
Depth for the hard constraints and composition rules in SKILL.md. All facts dated
|
|
4
|
+
2026-06-02.
|
|
5
|
+
|
|
6
|
+
## Full constraint table
|
|
7
|
+
|
|
8
|
+
| Property | Value | Notes |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| Recommended resolution | 1280 x 720 px | Anything smaller upscales soft |
|
|
11
|
+
| Aspect ratio | 16:9 | Fills player, feed, end screens, embeds |
|
|
12
|
+
| Minimum width | 640 px | Below this, upload may be rejected |
|
|
13
|
+
| File size (standard) | under 2 MB | Hard cap |
|
|
14
|
+
| File size (podcast) | under 10 MB | Only the podcast surface allows this |
|
|
15
|
+
| Accepted formats | JPG, PNG, GIF, BMP | Ship JPG or PNG |
|
|
16
|
+
| Feed render scale | ~320 x 180 px | Where most discovery happens |
|
|
17
|
+
| Duration-stamp zone | bottom-right corner | Reserved overlay — keep critical content out |
|
|
18
|
+
|
|
19
|
+
## The 30% contrast rule (luminance, not hue)
|
|
20
|
+
|
|
21
|
+
Make the main subject roughly 30% brighter or darker than the background. This is
|
|
22
|
+
about *luminance* separation, not color difference. Quick way to judge it: desaturate
|
|
23
|
+
the image to grayscale — if the subject still clearly separates from the background
|
|
24
|
+
in gray, it will separate in the feed. If the subject and background turn the same
|
|
25
|
+
shade of gray, add an outline, drop shadow, or glow until they don't.
|
|
26
|
+
|
|
27
|
+
Text/background contrast: aim for about 4.5:1. This is a borrowed usability
|
|
28
|
+
heuristic (the WCAG AA ratio for normal text), not a YouTube-enforced rule — use it
|
|
29
|
+
as a floor, not a target.
|
|
30
|
+
|
|
31
|
+
## Legibility test protocol (the squint test)
|
|
32
|
+
|
|
33
|
+
1. Export the candidate at 1280x720.
|
|
34
|
+
2. Scale a copy to 320x180.
|
|
35
|
+
3. Glance for under one second. Can you name the subject and read the text?
|
|
36
|
+
4. If not, the thumbnail fails the feed and no editor-canvas polish saves it.
|
|
37
|
+
|
|
38
|
+
Equivalent without resizing: step ~2 meters back from the monitor, or view it as a
|
|
39
|
+
phone-sized thumbnail in an actual feed mock.
|
|
40
|
+
|
|
41
|
+
## Render contexts to check
|
|
42
|
+
|
|
43
|
+
A thumbnail does not live in one place. Verify it in:
|
|
44
|
+
|
|
45
|
+
- **Mobile feed (light + dark mode)** — the dominant surface; dark mode changes how
|
|
46
|
+
a dark background reads against the app chrome.
|
|
47
|
+
- **Desktop sidebar (small)** — even smaller than the mobile feed in some layouts.
|
|
48
|
+
- **Watch-page suggested column** — appears next to a playing video, competing for
|
|
49
|
+
attention.
|
|
50
|
+
- **Search results grid** — sits among rival thumbnails; relative contrast matters.
|
|
51
|
+
|
|
52
|
+
## Export workflow (PNG -> JPG under 2MB)
|
|
53
|
+
|
|
54
|
+
1. Design and master in PNG (lossless) at 1280x720.
|
|
55
|
+
2. Export final as JPG at quality 85-90%. This almost always lands well under 2 MB
|
|
56
|
+
while keeping text edges crisp.
|
|
57
|
+
3. If a PNG with flat color/text must stay PNG and exceeds 2 MB, reduce the palette
|
|
58
|
+
or flatten layers before re-exporting.
|
|
59
|
+
4. Re-run `scripts/verify.sh path/to/thumb.jpg` to confirm dimensions, ratio, size,
|
|
60
|
+
and format before upload.
|
|
61
|
+
|
|
62
|
+
## Sources
|
|
63
|
+
|
|
64
|
+
- socialrails.com — 1280x720 specs guide (accessed 2026-06-02)
|
|
65
|
+
- thumbnailtest.com — size/format guide (accessed 2026-06-02)
|
|
66
|
+
- thumbmagic.co / socialrails.com — 320x180 safe-zone guides (accessed 2026-06-02)
|
|
67
|
+
- usevisuals.com, deliveredsocial.com — duration-stamp safe zone (accessed 2026-06-02)
|
|
68
|
+
- nearstream.us, clickyapps.com — face/emotion and custom-vs-auto CTR (accessed 2026-06-02)
|
|
69
|
+
- usevisuals.com, ampifire.com — color count and 30% contrast guidance (accessed 2026-06-02)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Experiment log format
|
|
2
|
+
|
|
3
|
+
The wiki layout, schema, filled example, and pattern-mining heuristic for the
|
|
4
|
+
feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
|
|
5
|
+
|
|
6
|
+
## Files
|
|
7
|
+
|
|
8
|
+
- `thumbnail-experiments.md` — append-only log, one row per Test & Compare run.
|
|
9
|
+
- `thumbnail-patterns.md` — derived, human-maintained summary of what wins on this
|
|
10
|
+
channel. You rewrite the relevant line after each logged test.
|
|
11
|
+
|
|
12
|
+
## `thumbnail-experiments.md` schema
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
| date | video | variants | axis tested | winner | CTR | watch-time share | note |
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- **date** — ISO date the test concluded.
|
|
19
|
+
- **video** — title or video ID.
|
|
20
|
+
- **variants** — short labels, e.g. `A: face-shock / B: object`.
|
|
21
|
+
- **axis tested** — the single axis you varied (subject, expression, text, color,
|
|
22
|
+
layout, zoom).
|
|
23
|
+
- **winner** — which variant YouTube auto-promoted.
|
|
24
|
+
- **CTR** — reported click-through for the winner (context only; not the deciding
|
|
25
|
+
metric).
|
|
26
|
+
- **watch-time share** — the metric that actually decided the test.
|
|
27
|
+
- **note** — one-line takeaway, especially any over-promise signal.
|
|
28
|
+
|
|
29
|
+
### Filled example
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
| date | video | variants | axis tested | winner | CTR | watch-time share | note |
|
|
33
|
+
|------------|----------------------|---------------------------|-------------|--------|------|------------------|------|
|
|
34
|
+
| 2026-05-20 | I built a PC in 24h | A: face-shock / B: object | subject | A | 6.1% | 41% | face beat the build photo clearly |
|
|
35
|
+
| 2026-05-28 | $200 budget PC | A: shock / B: confident | expression | B | 5.4% | 39% | calm-confident edged shock for this niche |
|
|
36
|
+
| 2026-06-01 | Worst PC parts | A: text / B: no-text | text | A | 5.9% | 38% | one bold word helped; thin margin, re-test |
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## `thumbnail-patterns.md` shape
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
# What wins on this channel
|
|
43
|
+
|
|
44
|
+
| axis | settled winner | evidence | confidence |
|
|
45
|
+
|------|----------------|----------|------------|
|
|
46
|
+
| subject | human face | 4/5 tests | high |
|
|
47
|
+
| expression | confident > shock | 2 tests | low |
|
|
48
|
+
| text | 1 bold word | 2 tests, thin margins | low |
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Pattern-mining heuristic
|
|
52
|
+
|
|
53
|
+
1. Group logged rows by `axis tested`.
|
|
54
|
+
2. For each axis, count which level won and by what watch-time margin.
|
|
55
|
+
3. Promote a level to "settled winner" only when it holds across ~3+ tests OR wins
|
|
56
|
+
by a large, repeated margin. Mark confidence honestly.
|
|
57
|
+
4. The next thumbnail keeps every settled winner and tests the next unsettled axis.
|
|
58
|
+
|
|
59
|
+
## Minimum-sample caveat
|
|
60
|
+
|
|
61
|
+
On a small channel, watch-time-share differences inside a single ~2-week test are
|
|
62
|
+
mostly noise. A single result is a hint, not a rule. Resist rewriting your whole
|
|
63
|
+
thumbnail style off one win — wait for the margin to repeat. When content type or
|
|
64
|
+
audience shifts noticeably, re-open settled axes; yesterday's winning pattern was
|
|
65
|
+
fit to yesterday's audience.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# verify.sh — check YouTube thumbnail image files against the hard, objective spec.
|
|
3
|
+
# Read-only. Judges the spec, never taste. Exits 0 on a clean/empty target.
|
|
4
|
+
#
|
|
5
|
+
# Checks per image: 1280x720, 16:9, size < 2 MB, format in {jpg, png}.
|
|
6
|
+
# Tooling preference: sips (macOS) -> ImageMagick identify -> file (+ byte size).
|
|
7
|
+
# If no image tooling is available, prints a clear SKIP and exits 0 (no false fail).
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# scripts/verify.sh # scan ./ for *.jpg/*.jpeg/*.png
|
|
11
|
+
# scripts/verify.sh path/to/img.jpg # check one or more files
|
|
12
|
+
# scripts/verify.sh path/to/dir/ # scan a directory
|
|
13
|
+
|
|
14
|
+
set -uo pipefail
|
|
15
|
+
|
|
16
|
+
MAX_BYTES=$((2 * 1024 * 1024)) # 2 MB
|
|
17
|
+
WANT_W=1280
|
|
18
|
+
WANT_H=720
|
|
19
|
+
|
|
20
|
+
fail=0
|
|
21
|
+
checked=0
|
|
22
|
+
|
|
23
|
+
have() { command -v "$1" >/dev/null 2>&1; }
|
|
24
|
+
|
|
25
|
+
# Collect target files from args (files or dirs); default to current dir.
|
|
26
|
+
collect() {
|
|
27
|
+
local args=("$@")
|
|
28
|
+
[ "${#args[@]}" -eq 0 ] && args=(".")
|
|
29
|
+
local p
|
|
30
|
+
for p in "${args[@]}"; do
|
|
31
|
+
if [ -d "$p" ]; then
|
|
32
|
+
find "$p" -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) 2>/dev/null
|
|
33
|
+
elif [ -f "$p" ]; then
|
|
34
|
+
printf '%s\n' "$p"
|
|
35
|
+
else
|
|
36
|
+
echo "WARN: no such file or directory: $p" >&2
|
|
37
|
+
fi
|
|
38
|
+
done
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Echo "WIDTHxHEIGHT" for a file, or empty if undetermined.
|
|
42
|
+
dimensions() {
|
|
43
|
+
local f="$1" out
|
|
44
|
+
if have sips; then
|
|
45
|
+
out=$(sips -g pixelWidth -g pixelHeight "$f" 2>/dev/null)
|
|
46
|
+
local w h
|
|
47
|
+
w=$(printf '%s\n' "$out" | awk '/pixelWidth/{print $2}')
|
|
48
|
+
h=$(printf '%s\n' "$out" | awk '/pixelHeight/{print $2}')
|
|
49
|
+
[ -n "$w" ] && [ -n "$h" ] && { printf '%sx%s' "$w" "$h"; return; }
|
|
50
|
+
fi
|
|
51
|
+
if have identify; then
|
|
52
|
+
out=$(identify -format '%wx%h' "$f" 2>/dev/null)
|
|
53
|
+
[ -n "$out" ] && { printf '%s' "$out"; return; }
|
|
54
|
+
fi
|
|
55
|
+
printf ''
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
byte_size() {
|
|
59
|
+
local f="$1"
|
|
60
|
+
if stat -f%z "$f" >/dev/null 2>&1; then stat -f%z "$f"; else stat -c%s "$f" 2>/dev/null; fi
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
ext_ok() {
|
|
64
|
+
case "${1##*.}" in
|
|
65
|
+
[jJ][pP][gG]|[jJ][pP][eE][gG]|[pP][nN][gG]) return 0 ;;
|
|
66
|
+
*) return 1 ;;
|
|
67
|
+
esac
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Tooling gate: if we cannot read dimensions at all, skip cleanly.
|
|
71
|
+
if ! have sips && ! have identify; then
|
|
72
|
+
echo "SKIP: no image tooling (sips or ImageMagick 'identify') found; cannot verify dimensions."
|
|
73
|
+
echo " Install ImageMagick or run on macOS to enable dimension/ratio checks."
|
|
74
|
+
exit 0
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
while IFS= read -r f; do
|
|
78
|
+
[ -z "$f" ] && continue
|
|
79
|
+
checked=$((checked + 1))
|
|
80
|
+
errs=()
|
|
81
|
+
|
|
82
|
+
ext_ok "$f" || errs+=("format must be jpg/png")
|
|
83
|
+
|
|
84
|
+
bytes=$(byte_size "$f")
|
|
85
|
+
if [ -n "${bytes:-}" ] && [ "$bytes" -ge "$MAX_BYTES" ]; then
|
|
86
|
+
errs+=("size ${bytes}B >= 2MB")
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
dim=$(dimensions "$f")
|
|
90
|
+
if [ -z "$dim" ]; then
|
|
91
|
+
errs+=("could not read dimensions")
|
|
92
|
+
else
|
|
93
|
+
w=${dim%x*}; h=${dim#*x}
|
|
94
|
+
if [ "$w" != "$WANT_W" ] || [ "$h" != "$WANT_H" ]; then
|
|
95
|
+
errs+=("dimensions ${dim}, want ${WANT_W}x${WANT_H}")
|
|
96
|
+
fi
|
|
97
|
+
# 16:9 check (independent of exact size): w*9 == h*16
|
|
98
|
+
if [ -n "$w" ] && [ -n "$h" ] && [ $((w * 9)) -ne $((h * 16)) ]; then
|
|
99
|
+
errs+=("aspect ratio not 16:9 (${dim})")
|
|
100
|
+
fi
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
if [ "${#errs[@]}" -eq 0 ]; then
|
|
104
|
+
echo "PASS $f (${dim:-?}, ${bytes:-?}B)"
|
|
105
|
+
else
|
|
106
|
+
fail=1
|
|
107
|
+
echo "FAIL $f"
|
|
108
|
+
for e in "${errs[@]}"; do echo " - $e"; done
|
|
109
|
+
fi
|
|
110
|
+
done < <(collect "$@")
|
|
111
|
+
|
|
112
|
+
if [ "$checked" -eq 0 ]; then
|
|
113
|
+
echo "OK: no thumbnail images found to check."
|
|
114
|
+
exit 0
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
if [ "$fail" -ne 0 ]; then
|
|
118
|
+
echo "Some thumbnails failed the hard spec."
|
|
119
|
+
exit 1
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
echo "All $checked thumbnail(s) meet the hard spec."
|
|
123
|
+
exit 0
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { cpSync, readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
|
|
4
|
+
export function writeSkill(id, fromDir, toPath) {
|
|
5
|
+
mkdirSync(dirname(toPath), { recursive: true });
|
|
6
|
+
cpSync(fromDir, toPath, { recursive: true });
|
|
7
|
+
return [toPath];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function wireHook(paths) {
|
|
11
|
+
const file = paths.hookTarget;
|
|
12
|
+
const settings = existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : {};
|
|
13
|
+
settings.hooks ||= {};
|
|
14
|
+
settings.hooks.SessionStart ||= [];
|
|
15
|
+
const cmd = `cat "${paths.skillDir('suggest')}/SKILL.md"`;
|
|
16
|
+
const already = JSON.stringify(settings.hooks.SessionStart).includes('skills/rsc/suggest');
|
|
17
|
+
if (!already) {
|
|
18
|
+
settings.hooks.SessionStart.push({ hooks: [{ type: 'command', command: cmd }] });
|
|
19
|
+
}
|
|
20
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
21
|
+
writeFileSync(file, JSON.stringify(settings, null, 2) + '\n');
|
|
22
|
+
return [file];
|
|
23
|
+
}
|
package/targets/codex.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cpSync, readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
|
|
4
|
+
const MARK_START = '<!-- rsc-suggest:start -->';
|
|
5
|
+
const MARK_END = '<!-- rsc-suggest:end -->';
|
|
6
|
+
|
|
7
|
+
export function writeSkill(id, fromDir, toPath) {
|
|
8
|
+
mkdirSync(dirname(toPath), { recursive: true });
|
|
9
|
+
cpSync(fromDir, toPath, { recursive: true });
|
|
10
|
+
return [toPath];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function wireHook(paths, sourceMd) {
|
|
14
|
+
const body = stripFrontmatter(readFileSync(sourceMd, 'utf8'));
|
|
15
|
+
const block = `${MARK_START}\n${body}\n${MARK_END}`;
|
|
16
|
+
let doc = existsSync(paths.hookTarget) ? readFileSync(paths.hookTarget, 'utf8') : '';
|
|
17
|
+
if (doc.includes(MARK_START)) {
|
|
18
|
+
doc = doc.replace(new RegExp(`${MARK_START}[\\s\\S]*?${MARK_END}`), block);
|
|
19
|
+
} else {
|
|
20
|
+
doc += `\n\n${block}\n`;
|
|
21
|
+
}
|
|
22
|
+
mkdirSync(dirname(paths.hookTarget), { recursive: true });
|
|
23
|
+
writeFileSync(paths.hookTarget, doc);
|
|
24
|
+
return [paths.hookTarget];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function stripFrontmatter(md) {
|
|
28
|
+
return md.replace(/^---\n[\s\S]*?\n---\n?/, '');
|
|
29
|
+
}
|