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,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: video-shorts
|
|
3
|
+
description: "Use when scripting or directing the edit of a single vertical short for Reels/Shorts/TikTok that has to hold attention from the first frame — turning a topic, a clip, or a long video into a shot-by-shot script and an edit decision sheet. Use for writing a 15–60s short, fixing a hook that dies in second three, generating hook variants to A/B test, planning cuts and burned-in captions, or extracting shorts from a long video. Triggers: 'write me a 30-second Reel/TikTok/Short', 'my Reels die in the first 3 seconds', 'give me 5 hook variants to A/B test', 'turn this podcast clip into a vertical short', 'plan the cuts and on-screen text for this faceless voiceover Reel', 'escríbeme un guion para un Reel de 30 segundos', 'convierte este vídeo largo en un Short', 'el gancho de mis Reels no engancha'. NOT scheduling or cross-platform cadence (that is social-publisher), NOT running the editorial calendar/pipeline (that is content-engine), NOT defining the durable brand tone (that is brand-voice)."
|
|
4
|
+
tags: [short-form-video, reels, shorts, tiktok, video-script, hook, retention, captions, vertical-video, editing]
|
|
5
|
+
recommends: [social-publisher, content-engine, brand-voice, podcast, ads]
|
|
6
|
+
origin: risco
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Video Shorts — The Script and the Cut for One Vertical Video
|
|
10
|
+
|
|
11
|
+
*You are the scriptwriter and edit director for a single 9:16 short.* You hold attention for 15–60 seconds and then hand off. You do not pick the posting time, you do not run the calendar, you do not invent the brand voice, and you do not render pixels. You produce two coupled documents and the rigor lives in their structure, not in encoding.
|
|
12
|
+
|
|
13
|
+
## What you produce
|
|
14
|
+
|
|
15
|
+
Two artifacts, every time, in one `.md`:
|
|
16
|
+
|
|
17
|
+
1. **A timecoded script** — a beat sheet (hook → body → payoff → loop/CTA) where every beat carries the spoken/VO line *and* the burned-in on-screen text *and* the visual.
|
|
18
|
+
2. **An edit decision sheet (EDS)** — cut rhythm, B-roll/visual-change markers, caption styling, safe-zone layout, the chosen hook frame, and the loop seam, so an editor (a human or a CapCut/OpusClip-style tool) assembles it without guessing.
|
|
19
|
+
|
|
20
|
+
**The one governing rule: write for the sound-off viewer.** Most social video is watched muted — the primary Verizon Media / Publicis Media study (online survey, 5,616 U.S. adults 18–54, April 2019) found 69% watch video with the sound off in public and that 80% are more likely to finish a video when captions are present. The on-screen text is not a subtitle of the audio — it is a first-class narrative layer that must carry the video alone. If your short only works with sound on, it is broken. *Why: a muted viewer who reads nothing scrolls in under a second.*
|
|
21
|
+
|
|
22
|
+
You output a script + EDS the user hands to a creator or pastes into an editor. The deliverable is the plan, not the rendered file.
|
|
23
|
+
|
|
24
|
+
## Decide first
|
|
25
|
+
|
|
26
|
+
Pick a length from the *content type*, not from how much you have to say. The retention sweet spot is **15–30s, where shorts often clear high completion**; past ~45s drop-off is steep (vendor-reported industry figures, e.g. OpusClip ideal-length data, 2026 — directional, not peer-reviewed).
|
|
27
|
+
|
|
28
|
+
| Content type | Target length | Why |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Tip / hack / single insight | 15–20s | One idea, one payoff; longer dilutes it |
|
|
31
|
+
| Tutorial / how-to | 25–40s | Needs steps, still must escalate |
|
|
32
|
+
| Story / before-after | 30–45s | Tension needs room, but cap the burn |
|
|
33
|
+
| Anything > 45s | must justify itself | Every extra second has to earn its retention |
|
|
34
|
+
|
|
35
|
+
YouTube Shorts allows up to 3 min (180s, since 15 Oct 2024) and Reels/TikTok go longer still, but length-allowed is not length-wanted — the algorithm rewards completion, and completion lives in the short band.
|
|
36
|
+
|
|
37
|
+
**Route out before you start writing:**
|
|
38
|
+
|
|
39
|
+
- Posting cadence, best-time slots, cross-platform limits → `../social-publisher/SKILL.md`.
|
|
40
|
+
- Which short to commission, the editorial calendar → `../content-engine/SKILL.md`.
|
|
41
|
+
- The durable brand tone you should write *in* → `../brand-voice/SKILL.md`.
|
|
42
|
+
- Paid creative variants / ROAS / ad-account structure → `../ads/SKILL.md`.
|
|
43
|
+
- A talking audio-first episode (not a vertical clip) → `../podcast/SKILL.md`.
|
|
44
|
+
|
|
45
|
+
## The structure
|
|
46
|
+
|
|
47
|
+
Four blocks, with a timecode budget. Worked for a **30-second** short:
|
|
48
|
+
|
|
49
|
+
| Block | Window (30s) | Job |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| **Hook** | 0:00–0:03 | Survive second 3. Promise, don't describe. |
|
|
52
|
+
| **Body / escalation** | 0:03–0:24 | Deliver, escalating; visual change every 3–5s |
|
|
53
|
+
| **Payoff** | 0:24–0:28 | The resolution the hook promised (last 15–25%) |
|
|
54
|
+
| **Loop / CTA** | 0:28–0:30 | Seam back to frame 1, or one-action CTA |
|
|
55
|
+
|
|
56
|
+
**Visual change every 3–5s after the hook.** A new shot, B-roll, text card, zoom, or reframe — anything that resets the eye. *Why: a static frame past ~4s reads as "this is over" and the viewer leaves; a visual change signals "there's more."*
|
|
57
|
+
|
|
58
|
+
**Open the loop early, close it late.** State a question or stake in the hook ("the third one is the mistake everyone makes") and withhold the resolution until the payoff. Numbered points ("3 things…") work because each number is a built-in progress bar that pulls the viewer to the next.
|
|
59
|
+
|
|
60
|
+
## The hook
|
|
61
|
+
|
|
62
|
+
As vendor-reported industry figures (OpusClip / housesparrowfilms, 2026; directional, not from a primary study), roughly half of the viewers who drop do so in the first 3 seconds, intro retention past 3s should land around 70%+, and shorts holding above ~65% at 3s see several times more impressions. Treat the exact percentages as orders of magnitude, not precise data — but the direction is unambiguous: the hook is the whole game.
|
|
63
|
+
|
|
64
|
+
**Six hook patterns** — pick by intent:
|
|
65
|
+
|
|
66
|
+
| Pattern | When to use |
|
|
67
|
+
|---|---|
|
|
68
|
+
| Promise / result | You have a concrete outcome ("how I cut my edit time in half") |
|
|
69
|
+
| Question | The viewer has felt the pain ("why do your Reels die at second 3?") |
|
|
70
|
+
| Pattern interrupt | You need to break the scroll ("stop posting at 9am") |
|
|
71
|
+
| Contrarian claim | You can defend a take against consensus ("captions are not optional") |
|
|
72
|
+
| In medias res | You can open mid-action / mid-result ("…and that's the cut that doubled it") |
|
|
73
|
+
| Stakes / tension | There's a cost to not knowing ("this mistake tanks your reach") |
|
|
74
|
+
|
|
75
|
+
**On-screen hook text: 4–7 words, high contrast, inside the safe zone.** It must be readable muted in under a second. Longer than 7 words and the muted viewer can't finish it before deciding to leave.
|
|
76
|
+
|
|
77
|
+
**Bad → Good rewrites:**
|
|
78
|
+
|
|
79
|
+
| Bad | Why it dies | Good |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| "Hey guys, today I want to talk about editing." | Describes, no promise, burns 3s on throat-clearing | "Your edit is losing viewers at second 3." |
|
|
82
|
+
| "Let me tell you a story about my first Reel." | Slow-burn intro, payoff invisible | "My first Reel got 11 views. Here's the fix." |
|
|
83
|
+
| "In this video we'll cover five tips." | Generic, no stake, no curiosity gap | "Tip 3 is the one nobody does." |
|
|
84
|
+
| "So basically captions are kind of important." | Hedged, mute-unreadable, no contrast | "Most people watch on mute. No captions, no views." |
|
|
85
|
+
|
|
86
|
+
**Reflex: cut your first five seconds.** First drafts almost always bury the hook behind a greeting. Delete the setup and start on the strongest line. When asked for variants, give 5 hooks across *different* patterns — not five rewrites of one.
|
|
87
|
+
|
|
88
|
+
For the full hook library by content type and a worked long-video → short extraction, see `references/hook-and-script-patterns.md`.
|
|
89
|
+
|
|
90
|
+
## The script artifact
|
|
91
|
+
|
|
92
|
+
A timecoded table. Every row has on-screen text — no exceptions (sound-off rule).
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
## Script — "Stop posting at 9am" (28s, 9:16)
|
|
96
|
+
|
|
97
|
+
| Time | VO / spoken | On-screen text | Visual / B-roll |
|
|
98
|
+
|------|-------------|----------------|-----------------|
|
|
99
|
+
| 0:00–0:03 | "Stop posting at 9am." | STOP POSTING AT 9AM | Hard cut to face, fast zoom-in |
|
|
100
|
+
| 0:03–0:09 | "Your audience isn't awake — they're commuting at 8." | 9am = your worst slot | Phone clock 9:00 → swipe to 8:00 |
|
|
101
|
+
| 0:09–0:16 | "The data says evenings beat mornings for this niche." | Evenings win | B-roll: graph line rising |
|
|
102
|
+
| 0:16–0:23 | "Test 6pm for a week and watch the reach." | Try 6pm for 7 days | Screen-record of scheduler set to 18:00 |
|
|
103
|
+
| 0:23–0:26 | "Then come back and tell me I was wrong." | I'll wait. | Back to face, raised eyebrow |
|
|
104
|
+
| 0:26–0:28 | "Stop posting at 9am." | STOP POSTING AT 9AM | Match-cut to opening frame (loop seam) |
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Note the last row repeats the hook line and frame: that is the loop, not an outro. Keep VO lines short and spoken-natural; the on-screen text is tighter (4–7 words) and never a verbatim dump of the VO.
|
|
108
|
+
|
|
109
|
+
## The edit decision sheet
|
|
110
|
+
|
|
111
|
+
The EDS turns the script into cut instructions. Tie each marker to a script row.
|
|
112
|
+
|
|
113
|
+
- **Cut cadence: one cut every 2–4 seconds.** High-performing shorts average that; put **micro-cuts (0.4–1.2s)** in the first 2–3 shots to "wake" the scroller. Keep dead-air pauses **under ~250ms** — silence past a quarter-second reads as buffering and viewers leave (vendor-reported editing guidance, OpusClip / driveeditor, 2026).
|
|
114
|
+
- **Visual-change markers** — annotate each script row with its change (cut / B-roll / text card / zoom / reframe) so no row sits static past 5s.
|
|
115
|
+
- **Hook frame** — name the exact opening frame (the most arresting still). It is the thumbnail-in-motion; if it's boring, nothing after it matters.
|
|
116
|
+
- **Loop seam** — specify how the last frame blends into the first (match cut, same framing, same audio bar). **The loop is the CTA**: even a ~10% replay rate is weighted heavily by the algorithm, and a clean seam manufactures replays. No traditional "thanks for watching" outro.
|
|
117
|
+
- **Caption track** — styling lives in the next section; the EDS just flags "captions: burned-in, style X, on for the whole runtime."
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
## EDS — "Stop posting at 9am"
|
|
121
|
+
- Hook frame: face mid-sentence, eyes to lens, 0:00 (most arresting still)
|
|
122
|
+
- Cuts: micro-cuts 0:00–0:03 (3 cuts), then 1 cut / ~3s thereafter
|
|
123
|
+
- Dead air: trim every gap > 250ms
|
|
124
|
+
- B-roll: clock (0:03), rising graph (0:09), scheduler screen-rec (0:16)
|
|
125
|
+
- Captions: burned-in, all 28s, style below, safe-zone bottom margin respected
|
|
126
|
+
- Loop seam: 0:26 match-cut to 0:00 frame; same VO line bridges the seam
|
|
127
|
+
- CTA: implicit (the loop). No outro card.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Captions & safe zones
|
|
131
|
+
|
|
132
|
+
Captioned videos retain better — the primary Verizon Media / Publicis Media study (n=5,616, April 2019) found 80% of viewers more likely to finish a video with captions; vendors report an additional ~15–25% retention lift (OpusClip / Verbit, 2026, vendor figures). Treat captions as design, not an afterthought.
|
|
133
|
+
|
|
134
|
+
- **Large, high-contrast, with a solid stroke or box** — readable on a bright phone outdoors.
|
|
135
|
+
- **4–7 words per line, ≥2s on screen.** Faster than that and the muted viewer can't read it.
|
|
136
|
+
- **On for the entire runtime.** No "captions only on the hook."
|
|
137
|
+
- **Inside safe zones.** Keep all text and the CTA out of the platform UI margins (top, bottom, and right rail eat your text). Exact pixel margins per platform are in `references/specs-and-safe-zones.md`.
|
|
138
|
+
- **Don't bury the hook under a trend audio's caption.** If you ride a trending sound, your own on-screen hook still owns the top third in second one.
|
|
139
|
+
|
|
140
|
+
## Repurpose one master
|
|
141
|
+
|
|
142
|
+
All three platforms share **9:16 @ 1080×1920, MP4 (H.264 video + AAC audio), 30 or 60 fps** (vidIQ / Sprout Social specs, 2026). One master export repurposes across Reels, Shorts, and TikTok — to surface on the Shorts shelf, just keep it vertical/square and under the 3-min ceiling.
|
|
143
|
+
|
|
144
|
+
Handing off to a tool (CapCut's 2026 AI Suite for one-click auto-edit + hundreds of TTS voices + multilingual captions + AI avatars, OpusClip/Reap/Vizard for long-video clipping, Submagic for caption styling): **paste the script + EDS as the brief.** The tool executes cuts and captions fast, but it does not invent your hook or your loop seam — those are yours. Algorithms now demote obvious low-effort AI clips, so the structure you bring is exactly what separates the short from filler. Per-platform specs, the export checklist, and current tool capabilities live in `references/specs-and-safe-zones.md`.
|
|
145
|
+
|
|
146
|
+
## Anti-patterns
|
|
147
|
+
|
|
148
|
+
| Bad | Why it kills retention | Good |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| Slow-burn intro / greeting before the point | ~half of droppers leave in the first 3s; you spent them on "hey guys" | Open on the strongest line; cut the first 5s |
|
|
151
|
+
| No burned-in captions | most viewers watch muted; a silent screen has no narrative | Captions all runtime, 4–7 words/line, high contrast |
|
|
152
|
+
| Traditional "thanks for watching" outro | Ends the video instead of replaying it | Loop seam: last frame match-cuts to the first |
|
|
153
|
+
| One static talking-head shot for 30s | No visual change reads as "it's over" past ~4s | A cut / B-roll / text card every 3–5s |
|
|
154
|
+
| Hook that *describes* the topic | Description has no promise or stake, so no reason to stay | Promise an outcome or open a curiosity gap |
|
|
155
|
+
| >45s with no escalation | Flat energy collapses completion past the sweet spot | Cut to 15–30s, or escalate every beat |
|
|
156
|
+
| TTS narrating a wall of on-screen text | Mismatched layers, nothing to read fast, AI-clip smell | Tight VO + separate 4–7-word caption layer |
|
|
157
|
+
| Trend audio buries your own hook | The borrowed caption owns second one, not your promise | Your hook owns the top third in the first frame |
|
|
158
|
+
|
|
159
|
+
## Verify & references
|
|
160
|
+
|
|
161
|
+
- Lint a produced script with `bash scripts/verify.sh path/to/script.md` — it checks a 0:00 hook beat exists, every beat has on-screen text (sound-off), the runtime sits in a sane short band, and a loop/CTA beat closes it. It is read-only and exits 0 on a clean script.
|
|
162
|
+
- `references/specs-and-safe-zones.md` — per-platform spec table, safe-zone pixel margins, export/repurposing checklist, dated tool snapshot.
|
|
163
|
+
- `references/hook-and-script-patterns.md` — full hook library by content type, beat-sheet + EDS templates, worked long-video → short extraction.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Evals — video-shorts
|
|
2
|
+
|
|
3
|
+
These cases are routing + capability checks for a human or an LLM judge; there is
|
|
4
|
+
no automated runner beyond `scripts/verify.sh` (which lints an emitted script file,
|
|
5
|
+
not these prompts). To run them: read `cases.yaml` and confirm the skill's
|
|
6
|
+
`description` would fire on every `should_trigger` prompt — including the
|
|
7
|
+
non-obvious "my Reels lose everyone in the first 3 seconds" symptom and the Spanish
|
|
8
|
+
"convierte este vídeo largo en un Short" phrasing — and that each `should_not_trigger`
|
|
9
|
+
prompt routes to the named sibling instead (`social-publisher`, `content-engine`,
|
|
10
|
+
`brand-voice`, `ads`, `podcast`) rather than here. For the `capability` scenario,
|
|
11
|
+
generate the script + EDS and grade it line by line against the `must_include`
|
|
12
|
+
rubric: a 0:00–0:03 hook with 4–7-word on-screen text, a timecoded beat sheet that
|
|
13
|
+
sums to a 15–30s runtime, on-screen text on every beat, a cut-cadence note, a loop
|
|
14
|
+
seam or single CTA (no outro), and the 9:16/1080×1920/burned-in-caption export note.
|
|
15
|
+
To lint an actual produced script, point `scripts/verify.sh` at the `.md` it emitted.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
skill: video-shorts
|
|
2
|
+
|
|
3
|
+
# Prompts that MUST load `video-shorts`. The skill owns the CRAFT of one short:
|
|
4
|
+
# the timecoded script (hook → body → payoff → loop) written for sound-off, and
|
|
5
|
+
# the edit decision sheet (cut cadence, B-roll, captions, safe zones, loop seam).
|
|
6
|
+
# It does NOT schedule (social-publisher), commission/calendar (content-engine),
|
|
7
|
+
# define brand voice (brand-voice), buy reach (ads), or make audio episodes (podcast).
|
|
8
|
+
should_trigger:
|
|
9
|
+
- prompt: "Write me a 30-second TikTok script about cold brew coffee."
|
|
10
|
+
why: "Core ask — a single vertical short script is exactly the deliverable."
|
|
11
|
+
|
|
12
|
+
- prompt: "My Reels lose everyone in the first 3 seconds, fix the hook."
|
|
13
|
+
why: "Non-obvious — the user names a retention symptom, not the skill; fixing the hook is the skill's signature move."
|
|
14
|
+
|
|
15
|
+
- prompt: "Turn this 40-minute podcast into 3 vertical Shorts."
|
|
16
|
+
why: "Long-video → short extraction; each short needs its own hook and loop, which this skill owns."
|
|
17
|
+
|
|
18
|
+
- prompt: "Give me 5 hook variants to A/B test for this clip."
|
|
19
|
+
why: "Hook-only craft ask — the skill's hook library produces patterned variants, not five rewrites of one."
|
|
20
|
+
|
|
21
|
+
- prompt: "Convierte este vídeo largo en un Short de 30 segundos con captions."
|
|
22
|
+
why: "Spanish for 'turn this long video into a 30s Short with captions' — long→short extraction plus the sound-off caption layer."
|
|
23
|
+
|
|
24
|
+
- prompt: "Plan the cuts and on-screen text for this faceless voiceover Reel."
|
|
25
|
+
why: "Edit-direction ask — cut cadence + burned-in captions are the EDS half of the skill."
|
|
26
|
+
|
|
27
|
+
should_not_trigger:
|
|
28
|
+
- prompt: "When should I post my Reels and how often across platforms?"
|
|
29
|
+
route_to: social-publisher
|
|
30
|
+
why: "Cadence, best-time slots and cross-platform scheduling are distribution mechanics, not the craft of the clip."
|
|
31
|
+
|
|
32
|
+
- prompt: "Build our monthly content calendar and brief the team."
|
|
33
|
+
route_to: content-engine
|
|
34
|
+
why: "Commissioning shorts and running the editorial pipeline is the factory; this skill is one station."
|
|
35
|
+
|
|
36
|
+
- prompt: "Define our brand's tone of voice we reuse everywhere."
|
|
37
|
+
route_to: brand-voice
|
|
38
|
+
why: "The durable voice system is consumed by this skill, not authored by it."
|
|
39
|
+
|
|
40
|
+
- prompt: "Set up a Meta Advantage+ campaign with 5 paid creative variants and budgets."
|
|
41
|
+
route_to: ads
|
|
42
|
+
why: "Paid acquisition, ad-account structure and ROAS math live in ads; organic short craft lives here."
|
|
43
|
+
|
|
44
|
+
- prompt: "Edit and publish a full talking podcast episode."
|
|
45
|
+
route_to: podcast
|
|
46
|
+
why: "An audio-first episode is a different format; this skill makes vertical clips, not podcasts."
|
|
47
|
+
|
|
48
|
+
capability:
|
|
49
|
+
- scenario: "Produce a 30s vertical Short script + edit decision sheet from a given topic (e.g. 'why morning posting is a myth')."
|
|
50
|
+
must_include:
|
|
51
|
+
- "A hook beat covering 0:00–0:03 with 4–7-word on-screen text that promises/opens a loop rather than describing"
|
|
52
|
+
- "A timecoded beat sheet whose rows sum to the declared runtime, inside the 15–30s sweet spot"
|
|
53
|
+
- "On-screen text present for EVERY beat (the sound-off rule), distinct from the VO line"
|
|
54
|
+
- "An EDS cut-cadence note: ~1 cut / 2–4s, micro-cuts in the first 2–3 shots, dead air trimmed under ~250ms"
|
|
55
|
+
- "A loop seam (last frame match-cuts to the first) or a single one-action CTA — never a traditional outro"
|
|
56
|
+
- "An export note: 9:16 @ 1080×1920, MP4 H.264+AAC, captions burned-in inside safe zones"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Hook library, templates & long-video extraction
|
|
2
|
+
|
|
3
|
+
## Hook library by content type
|
|
4
|
+
|
|
5
|
+
Pick the pattern that fits the *intent*; vary patterns when generating A/B
|
|
6
|
+
variants instead of rewording one. Hook text stays 4–7 words, high contrast,
|
|
7
|
+
inside the safe zone, readable muted in under a second.
|
|
8
|
+
|
|
9
|
+
### Tip / hack
|
|
10
|
+
- Promise: "Do this and your edit time halves."
|
|
11
|
+
- Contrarian: "Stop using transitions. Here's why."
|
|
12
|
+
- Stakes: "This one setting tanks your reach."
|
|
13
|
+
|
|
14
|
+
### Tutorial / how-to
|
|
15
|
+
- Promise + number: "3 cuts that fix any boring clip."
|
|
16
|
+
- Question: "Why do your tutorials lose people at step 2?"
|
|
17
|
+
- In medias res: "…and that's the move that finished it. From the top:"
|
|
18
|
+
|
|
19
|
+
### Story / before-after
|
|
20
|
+
- Stakes: "My first Reel got 11 views."
|
|
21
|
+
- In medias res: "…so I deleted the whole thing and started over."
|
|
22
|
+
- Contrarian: "Going viral made it worse. Here's what happened."
|
|
23
|
+
|
|
24
|
+
### Faceless / voiceover
|
|
25
|
+
- Question over B-roll: "Ever wonder why some Shorts never stop replaying?"
|
|
26
|
+
- Pattern interrupt: "Everyone gets this backwards."
|
|
27
|
+
- Open loop: "There are 4 reasons. The last one is the real one."
|
|
28
|
+
|
|
29
|
+
## Six patterns, defined
|
|
30
|
+
|
|
31
|
+
| Pattern | Definition | One-line test |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| Promise / result | Names a concrete outcome the viewer wants | "Would they screenshot this payoff?" |
|
|
34
|
+
| Question | Asks something the viewer has felt | "Do they already have this pain?" |
|
|
35
|
+
| Pattern interrupt | Breaks the expected scroll rhythm | "Is it the opposite of what they expect?" |
|
|
36
|
+
| Contrarian claim | Defensible take against consensus | "Can you back it in the body?" |
|
|
37
|
+
| In medias res | Opens mid-action / mid-result | "Does it start at the climax?" |
|
|
38
|
+
| Stakes / tension | A cost to not knowing | "What do they lose by scrolling on?" |
|
|
39
|
+
|
|
40
|
+
## Beat-sheet template
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
## Script — "<title>" (<runtime>s, 9:16)
|
|
44
|
+
|
|
45
|
+
| Time | VO / spoken | On-screen text | Visual / B-roll |
|
|
46
|
+
|------|-------------|----------------|-----------------|
|
|
47
|
+
| 0:00–0:03 | <hook line> | <4–7 word hook> | <hook frame + micro-cuts> |
|
|
48
|
+
| 0:03–0:?? | <body beat 1> | <4–7 words> | <visual change> |
|
|
49
|
+
| 0:??–0:?? | <body beat 2 (escalate)> | <4–7 words> | <visual change> |
|
|
50
|
+
| 0:??–0:?? | <payoff> | <4–7 words> | <visual> |
|
|
51
|
+
| 0:??–<end> | <loop line = hook> | <hook text> | <match-cut to frame 1> |
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## EDS template
|
|
55
|
+
|
|
56
|
+
```markdown
|
|
57
|
+
## EDS — "<title>"
|
|
58
|
+
- Hook frame: <exact opening still + timecode>
|
|
59
|
+
- Cuts: micro-cuts <range> (count), then 1 cut / ~3s
|
|
60
|
+
- Dead air: trim every gap > 250ms
|
|
61
|
+
- B-roll: <marker @ timecode>, <marker @ timecode>
|
|
62
|
+
- Captions: burned-in, full runtime, <style>, safe-zone respected
|
|
63
|
+
- Loop seam: <last timecode> match-cut to <0:00 frame>; <bridge>
|
|
64
|
+
- CTA: <single action / one benefit / 3–5 words> OR implicit (the loop)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Worked example: long video → short
|
|
68
|
+
|
|
69
|
+
**Source:** a 40-minute podcast on creator burnout.
|
|
70
|
+
|
|
71
|
+
1. **Find the spike.** Skim the transcript/waveform for the one self-contained
|
|
72
|
+
claim that lands without context — here, the guest's line "I posted every day
|
|
73
|
+
for a year and it nearly broke me." That's your payoff seed.
|
|
74
|
+
2. **Build the hook from the spike, not the start.** Don't open with the
|
|
75
|
+
episode's intro. Open with the tension: "I posted every day for a year." (hook,
|
|
76
|
+
stakes pattern).
|
|
77
|
+
3. **Cut to a 28s beat sheet:**
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
## Script — "Posting daily nearly broke me" (28s, 9:16)
|
|
81
|
+
|
|
82
|
+
| Time | VO / spoken | On-screen text | Visual / B-roll |
|
|
83
|
+
|------|-------------|----------------|-----------------|
|
|
84
|
+
| 0:00–0:03 | "I posted every day for a year." | EVERY DAY FOR A YEAR | Guest mid-sentence, fast zoom |
|
|
85
|
+
| 0:03–0:10 | "365 videos. My engagement went up. I went down." | 365 videos. I broke. | Calendar flipping, B-roll |
|
|
86
|
+
| 0:10–0:18 | "The mistake wasn't the schedule — it was no system." | The schedule wasn't the problem | Cut to other speaker reacting |
|
|
87
|
+
| 0:18–0:24 | "Batch a week in a day. Protect the other six." | Batch 7. Rest 6. | Text card, then back to face |
|
|
88
|
+
| 0:24–0:28 | "I posted every day for a year — so you don't have to." | …so you don't have to | Match-cut to 0:00 frame (loop) |
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
4. **EDS:** captions burned-in full runtime; micro-cuts 0:00–0:03; B-roll on the
|
|
92
|
+
"365 videos" beat; loop seam 0:24 → 0:00 on the repeated line.
|
|
93
|
+
5. **One source → multiple shorts:** the same episode yields a second short from a
|
|
94
|
+
different spike (e.g. the "batch 7, rest 6" tactic as a standalone tip). Each
|
|
95
|
+
short gets its own hook and its own loop — never one clip chopped in two.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Specs, safe zones & tooling
|
|
2
|
+
|
|
3
|
+
All facts dated 2026-06-02 (vidIQ Shorts specs; Sprout Social social-video specs;
|
|
4
|
+
YouTube Help three-minute Shorts; OpusClip ideal-length data — vendor-reported,
|
|
5
|
+
directional; Reap state-of-clipping-tools 2026). CapCut capability numbers are
|
|
6
|
+
sourced to CapCut's own product pages (capcut.com/tools/text-to-speech,
|
|
7
|
+
accessed 2026-06-02), not to secondary marketing blogs.
|
|
8
|
+
|
|
9
|
+
## Per-platform spec table
|
|
10
|
+
|
|
11
|
+
One master export covers all three. Differences are length ceilings and the
|
|
12
|
+
Shorts-shelf rule, not the container.
|
|
13
|
+
|
|
14
|
+
| Spec | Reels | Shorts | TikTok |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| Aspect ratio | 9:16 | 9:16 | 9:16 |
|
|
17
|
+
| Resolution | 1080×1920 | 1080×1920 | 1080×1920 |
|
|
18
|
+
| Container | MP4 | MP4 | MP4 |
|
|
19
|
+
| Codec | H.264 + AAC | H.264 + AAC | H.264 + AAC |
|
|
20
|
+
| Frame rate | 30 or 60 fps | 30 or 60 fps | 30 or 60 fps |
|
|
21
|
+
| Max length | up to 3 min | 3 min (180s, since 15 Oct 2024) | up to 10 min |
|
|
22
|
+
| Surfacing rule | — | must stay vertical/square to hit the Shorts shelf | — |
|
|
23
|
+
|
|
24
|
+
**Length-allowed ≠ length-wanted.** The retention sweet spot is 15–30s (vendors
|
|
25
|
+
report high completion in this band); past ~45s drop-off is steep regardless of
|
|
26
|
+
the ceiling. Use the ceiling only when the content genuinely needs it and
|
|
27
|
+
escalates the whole way.
|
|
28
|
+
|
|
29
|
+
## Safe zones
|
|
30
|
+
|
|
31
|
+
Platform UI overlays (caption rail, profile, like/share/comment column, progress
|
|
32
|
+
bar) sit on top of your frame. Keep all on-screen text and the CTA inside the
|
|
33
|
+
safe zone or the UI eats them.
|
|
34
|
+
|
|
35
|
+
Working margins on a 1080×1920 frame (treat as a conservative default; platforms
|
|
36
|
+
shift their chrome, so verify on a real device before final export):
|
|
37
|
+
|
|
38
|
+
| Edge | Keep text out of | Why |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| Bottom | ~250–320 px | Caption/handle bar + progress bar live here |
|
|
41
|
+
| Right | ~140–180 px | Like / comment / share / sound column |
|
|
42
|
+
| Top | ~120–160 px | Search / status / sometimes account chrome |
|
|
43
|
+
| Left | ~50–80 px | Minor; safest gutter |
|
|
44
|
+
|
|
45
|
+
Practical rule: **compose the hook text and CTA in the centre-upper third.** It
|
|
46
|
+
clears every platform's chrome and is where the eye lands first.
|
|
47
|
+
|
|
48
|
+
## Export / repurposing checklist
|
|
49
|
+
|
|
50
|
+
- [ ] 9:16, 1080×1920, MP4, H.264 + AAC, 30 or 60 fps (one master).
|
|
51
|
+
- [ ] Captions burned in (not a sidecar `.srt`) — survives muted autoplay and
|
|
52
|
+
re-uploads.
|
|
53
|
+
- [ ] All text/CTA inside the safe zones above.
|
|
54
|
+
- [ ] Runtime in the 15–30s sweet spot unless content justifies more.
|
|
55
|
+
- [ ] Loop seam intact: last frame match-cuts to the first.
|
|
56
|
+
- [ ] Hook frame is the most arresting still (it's the thumbnail-in-motion).
|
|
57
|
+
- [ ] No platform watermark baked in (a TikTok watermark gets demoted on
|
|
58
|
+
Reels/Shorts) — export clean, add per-platform branding if needed.
|
|
59
|
+
|
|
60
|
+
## Tool capability snapshot (2026)
|
|
61
|
+
|
|
62
|
+
The tool executes; your script + EDS is the brief. None of these invent your
|
|
63
|
+
hook or loop seam.
|
|
64
|
+
|
|
65
|
+
| Tool | What it does well | Hand it |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| CapCut 2026 AI Suite | one-click auto-edit, multilingual captions, hundreds of TTS voices (CapCut's own TTS page lists 200+ AI voices, accessed 2026-06-02), AI avatars (faceless) | script + EDS as the cut/caption brief |
|
|
68
|
+
| OpusClip / Reap / Vizard | long video → clip candidates with auto-captions | the source long video + your extraction picks |
|
|
69
|
+
| Submagic | caption styling / animated captions | a cut video + the caption style spec |
|
|
70
|
+
|
|
71
|
+
**Watch-out:** algorithms now demote obvious low-effort AI clips (raw auto-cut +
|
|
72
|
+
generic TTS + stock B-roll with no structure). The script structure — a hook that
|
|
73
|
+
survives second 3, a loop that earns a replay — is what separates a clip from
|
|
74
|
+
filler. Let the tool do the labour, not the thinking.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# verify.sh — lint a produced video-shorts script (.md) for the structure rules.
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# bash scripts/verify.sh path/to/script.md # lint one emitted script
|
|
6
|
+
# bash scripts/verify.sh # no target -> nothing to check, exit 0
|
|
7
|
+
#
|
|
8
|
+
# What it checks against a timecoded beat-sheet table (the script artifact):
|
|
9
|
+
# 1. A hook beat exists covering 0:00 (the first timecode row starts at zero).
|
|
10
|
+
# 2. Every beat row carries non-empty on-screen text (the sound-off rule).
|
|
11
|
+
# 3. The derived runtime sits in a sane short band (warn >180s, nudge to 15-30s).
|
|
12
|
+
# 4. A loop or CTA beat closes the script (last beat mentions loop / CTA / match-cut).
|
|
13
|
+
#
|
|
14
|
+
# Read-only: it never writes, installs, or touches the network. Pure text parsing.
|
|
15
|
+
# Exits 0 on a clean script AND on an empty/clean target (no false failure):
|
|
16
|
+
# - no argument given -> "nothing to check", exit 0
|
|
17
|
+
# - argument is a directory with no -> scans *.md; if none found, exit 0
|
|
18
|
+
# matching script files
|
|
19
|
+
# Exits non-zero only when a real, parseable script breaks a rule.
|
|
20
|
+
#
|
|
21
|
+
# Portability: stock macOS bash 3.2. No mapfile, no associative arrays, set -u on,
|
|
22
|
+
# set -e intentionally off (each check owns its exit handling).
|
|
23
|
+
|
|
24
|
+
set -u
|
|
25
|
+
|
|
26
|
+
if [ -t 1 ] && command -v tput >/dev/null 2>&1; then
|
|
27
|
+
RED="$(tput setaf 1)"; GREEN="$(tput setaf 2)"; YELLOW="$(tput setaf 3)"; RESET="$(tput sgr0)"
|
|
28
|
+
else
|
|
29
|
+
RED=""; GREEN=""; YELLOW=""; RESET=""
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
fail() { printf '%s\n' "${RED}FAIL: $1${RESET}"; failures=$((failures + 1)); }
|
|
33
|
+
warn() { printf '%s\n' "${YELLOW}WARN: $1${RESET}"; }
|
|
34
|
+
ok() { printf '%s\n' "${GREEN}OK: $1${RESET}"; }
|
|
35
|
+
|
|
36
|
+
# --- collect targets -------------------------------------------------------
|
|
37
|
+
targets=""
|
|
38
|
+
if [ "$#" -eq 0 ]; then
|
|
39
|
+
printf '%s\n' "${YELLOW}Nothing to check (no script path given). Pass a script .md to lint.${RESET}"
|
|
40
|
+
exit 0
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
for arg in "$@"; do
|
|
44
|
+
if [ -d "$arg" ]; then
|
|
45
|
+
for f in "$arg"/*.md; do
|
|
46
|
+
[ -e "$f" ] && targets="${targets}${targets:+
|
|
47
|
+
}$f"
|
|
48
|
+
done
|
|
49
|
+
elif [ -f "$arg" ]; then
|
|
50
|
+
targets="${targets}${targets:+
|
|
51
|
+
}$arg"
|
|
52
|
+
else
|
|
53
|
+
printf '%s\n' "${YELLOW}Skipping '$arg' (not a file or directory).${RESET}"
|
|
54
|
+
fi
|
|
55
|
+
done
|
|
56
|
+
|
|
57
|
+
if [ -z "$targets" ]; then
|
|
58
|
+
printf '%s\n' "${YELLOW}No .md script files found in the target(s). Nothing to check.${RESET}"
|
|
59
|
+
exit 0
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# --- parse one timecode "M:SS" or "MM:SS" into total seconds ----------------
|
|
63
|
+
to_seconds() {
|
|
64
|
+
# echoes seconds, or empty if it does not match
|
|
65
|
+
case "$1" in
|
|
66
|
+
[0-9]*:[0-9][0-9])
|
|
67
|
+
m="${1%%:*}"; s="${1##*:}"
|
|
68
|
+
printf '%s' "$(( m * 60 + 10#$s ))"
|
|
69
|
+
;;
|
|
70
|
+
*) printf '' ;;
|
|
71
|
+
esac
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
# first_tc <cell> -> the START timecode (M:SS) of a "0:00-0:03"-style cell.
|
|
75
|
+
first_tc_of() { printf '%s' "$1" | grep -oE '[0-9]+:[0-9][0-9]' | head -1; }
|
|
76
|
+
# last_tc <cell> -> the END timecode (the last M:SS token in the cell).
|
|
77
|
+
last_tc_of() { printf '%s' "$1" | grep -oE '[0-9]+:[0-9][0-9]' | tail -1; }
|
|
78
|
+
|
|
79
|
+
failures=0
|
|
80
|
+
clean_targets=0
|
|
81
|
+
|
|
82
|
+
for file in $targets; do
|
|
83
|
+
# A "beat row" is a markdown table row whose first cell starts with a timecode
|
|
84
|
+
# like 0:00 or 0:00-0:03. Grab those rows only.
|
|
85
|
+
rows="$(grep -nE '^\|[[:space:]]*[0-9]+:[0-9][0-9]' "$file" 2>/dev/null || true)"
|
|
86
|
+
|
|
87
|
+
if [ -z "$rows" ]; then
|
|
88
|
+
warn "$file: no timecoded beat rows found (expected a '| Time | ... |' table) — not a script artifact, skipping."
|
|
89
|
+
continue
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
clean_targets=$((clean_targets + 1))
|
|
93
|
+
file_fail_start=$failures
|
|
94
|
+
printf '\n%s\n' "Checking: $file"
|
|
95
|
+
|
|
96
|
+
# ---- rule 1: a hook beat at 0:00 ----------------------------------------
|
|
97
|
+
first_row_body="$(printf '%s\n' "$rows" | head -1)"
|
|
98
|
+
first_row_body="${first_row_body#*:}"
|
|
99
|
+
first_cell="$(printf '%s' "$first_row_body" | awk -F'|' '{print $2}')"
|
|
100
|
+
first_start="$(first_tc_of "$first_cell")"
|
|
101
|
+
if [ "$(to_seconds "$first_start")" = "0" ]; then
|
|
102
|
+
ok "hook beat starts at 0:00"
|
|
103
|
+
else
|
|
104
|
+
fail "first beat starts at '$first_start', not 0:00 — the hook must own the first frame."
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
# ---- rule 2 + 3: every beat has on-screen text; track max end time ------
|
|
108
|
+
max_end=0
|
|
109
|
+
missing_text=0
|
|
110
|
+
beat_count=0
|
|
111
|
+
while IFS= read -r line; do
|
|
112
|
+
[ -z "$line" ] && continue
|
|
113
|
+
beat_count=$((beat_count + 1))
|
|
114
|
+
# strip the "lineno:" prefix grep -n added
|
|
115
|
+
body="${line#*:}"
|
|
116
|
+
# split the table row into cells: | Time | VO | On-screen text | Visual |
|
|
117
|
+
tc="$(printf '%s' "$body" | awk -F'|' '{print $2}' | sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//')"
|
|
118
|
+
onscreen="$(printf '%s' "$body" | awk -F'|' '{print $4}' | sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//')"
|
|
119
|
+
if [ -z "$onscreen" ]; then
|
|
120
|
+
missing_text=$((missing_text + 1))
|
|
121
|
+
warn "beat at '$tc' has no on-screen text (sound-off rule: every beat needs burned-in text)."
|
|
122
|
+
fi
|
|
123
|
+
# end time = the last M:SS token in the cell (or the start if there is only one)
|
|
124
|
+
endpart="$(last_tc_of "$tc")"
|
|
125
|
+
esec="$(to_seconds "$endpart")"
|
|
126
|
+
[ -n "$esec" ] && [ "$esec" -gt "$max_end" ] && max_end="$esec"
|
|
127
|
+
done <<EOF
|
|
128
|
+
$rows
|
|
129
|
+
EOF
|
|
130
|
+
|
|
131
|
+
if [ "$missing_text" -eq 0 ]; then
|
|
132
|
+
ok "all $beat_count beats carry on-screen text"
|
|
133
|
+
else
|
|
134
|
+
fail "$missing_text of $beat_count beats lack on-screen text — fails the sound-off rule."
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
# ---- rule 3: runtime band -----------------------------------------------
|
|
138
|
+
if [ "$max_end" -gt 0 ]; then
|
|
139
|
+
if [ "$max_end" -gt 180 ]; then
|
|
140
|
+
warn "runtime ~${max_end}s exceeds the 180s ceiling — this is not a short."
|
|
141
|
+
elif [ "$max_end" -gt 45 ]; then
|
|
142
|
+
warn "runtime ~${max_end}s is past the 15-30s sweet spot — make sure every second escalates."
|
|
143
|
+
else
|
|
144
|
+
ok "runtime ~${max_end}s is within the short band"
|
|
145
|
+
fi
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# ---- rule 4: a loop / CTA closes it -------------------------------------
|
|
149
|
+
last_row="$(printf '%s\n' "$rows" | tail -1)"
|
|
150
|
+
if printf '%s' "$last_row" | grep -qiE 'loop|cta|match[ -]?cut|replay|seam'; then
|
|
151
|
+
ok "closing beat signals a loop / CTA"
|
|
152
|
+
else
|
|
153
|
+
fail "last beat does not signal a loop or CTA (loop|cta|match-cut|seam) — a short should replay, not end on an outro."
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
if [ "$failures" -eq "$file_fail_start" ]; then
|
|
157
|
+
ok "$file passed"
|
|
158
|
+
fi
|
|
159
|
+
done
|
|
160
|
+
|
|
161
|
+
if [ "$clean_targets" -eq 0 ]; then
|
|
162
|
+
printf '\n%s\n' "${YELLOW}No parseable script artifacts among the target(s). Nothing to verify.${RESET}"
|
|
163
|
+
exit 0
|
|
164
|
+
fi
|
|
165
|
+
|
|
166
|
+
printf '\n'
|
|
167
|
+
if [ "$failures" -gt 0 ]; then
|
|
168
|
+
printf '%s\n' "${RED}$failures check(s) failed.${RESET}"
|
|
169
|
+
exit 1
|
|
170
|
+
fi
|
|
171
|
+
printf '%s\n' "${GREEN}All checks passed.${RESET}"
|
|
172
|
+
exit 0
|