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,46 @@
|
|
|
1
|
+
skill: webhooks
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "We need to receive webhooks from a provider and process them without dropping events or double-processing. Where do I start?"
|
|
5
|
+
why: "Core inbound flow: receive + dedupe + safe processing is the skill's whole mandate (verify → timestamp → dedupe → fast-ack)."
|
|
6
|
+
- prompt: "My webhook signature verification keeps failing even though the signing secret is definitely correct. What am I missing?"
|
|
7
|
+
why: "Non-obvious. The classic raw-body trap — verifying over re-serialized JSON instead of the raw bytes. The skill names this exact symptom."
|
|
8
|
+
- prompt: "The provider keeps retrying and our handler ends up running the same event twice. How do we make it idempotent?"
|
|
9
|
+
why: "At-least-once delivery + idempotency on the stable event id is a flagship section; phrased as a symptom, not jargon."
|
|
10
|
+
- prompt: "How do I do a constant-time signature compare and a timestamp/replay check on an incoming webhook?"
|
|
11
|
+
why: "Verify mechanics: timingSafeEqual / compare_digest plus the ~5-min tolerance window are core content."
|
|
12
|
+
- prompt: "Verificar la firma del webhook entrante y evitar procesar el mismo evento dos veces — ¿cómo lo monto en Express?"
|
|
13
|
+
why: "Spanish trigger covering signature verification + idempotency, the two central invariants."
|
|
14
|
+
- prompt: "Our webhook endpoint times out under load and the sender hammers it with retries. How do we ack fast and move the work off the request?"
|
|
15
|
+
why: "Non-obvious framing of the fast-ack-then-queue pattern; the timeout→retry-storm chain is the reason the pattern exists."
|
|
16
|
+
- prompt: "What status code should I return from a webhook handler when the signature is bad versus when my downstream save fails?"
|
|
17
|
+
why: "Status-code semantics (2xx = I own it, 4xx = forged/no-retry, 5xx = genuine retry) is a dedicated decision table."
|
|
18
|
+
|
|
19
|
+
should_not_trigger:
|
|
20
|
+
- prompt: "Verify a Stripe webhook with the Stripe-Signature header and handle checkout.session.completed in my SaaS."
|
|
21
|
+
route_to: stripe
|
|
22
|
+
why: "Stripe's specific t=,v1= scheme, event model and stripe listen CLI belong to the specialized skill; webhooks covers only the generic case."
|
|
23
|
+
- prompt: "Handle Resend and SendGrid bounce and complaint webhooks so our suppression list stays clean."
|
|
24
|
+
route_to: email-connector
|
|
25
|
+
why: "The point is deliverability suppression state, not generic receive-and-verify mechanics."
|
|
26
|
+
- prompt: "Build a client that calls the GitHub REST API with auth, pagination and retries on the requests we initiate."
|
|
27
|
+
route_to: api-connector-builder
|
|
28
|
+
why: "That is the outbound client (we call them), the opposite direction from an inbound receiver."
|
|
29
|
+
- prompt: "After an order webhook lands, branch across Slack, the database and an email in a multi-step flow with conditions."
|
|
30
|
+
route_to: automation-flows
|
|
31
|
+
why: "Post-landing orchestration; webhooks ends at 'enqueued' and the flow engine takes over from there."
|
|
32
|
+
- prompt: "Tune our BullMQ worker concurrency and set up a dead-letter queue in Redis."
|
|
33
|
+
route_to: redis
|
|
34
|
+
why: "Broker/queue operations, not the front-door receiver; webhooks enqueues but does not own broker tuning."
|
|
35
|
+
|
|
36
|
+
capability:
|
|
37
|
+
- scenario: "Implement an inbound webhook endpoint for a generic Standard-Webhooks provider in Node/Express that receives an event, proves it is authentic, refuses to process it twice, and acks fast — then describe where the real work runs."
|
|
38
|
+
must_include:
|
|
39
|
+
- "HMAC is computed over the RAW request body (raw buffer/text), not over JSON.parse(req.body) or a re-serialized object"
|
|
40
|
+
- "constant-time comparison via crypto.timingSafeEqual (not === / ==), with an equal-length guard"
|
|
41
|
+
- "timestamp tolerance check (~5 minutes) rejecting stale/replayed deliveries"
|
|
42
|
+
- "dedupe on the provider's stable event id (webhook-id) via a UNIQUE constraint or Redis SETNX, marked before processing"
|
|
43
|
+
- "dedupe TTL must outlive the provider's retry window (hours to days)"
|
|
44
|
+
- "returns 2xx only after the event is persisted/enqueued, then does the work in a background worker"
|
|
45
|
+
- "signing secret read from an environment variable, never a hard-coded literal"
|
|
46
|
+
- "bad/forged signature returns 400 or 401, not 200"
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Getting the raw body, per framework
|
|
2
|
+
|
|
3
|
+
If your signature check fails but the secret is correct, you are almost always
|
|
4
|
+
verifying over a **re-serialized** body instead of the raw bytes the sender
|
|
5
|
+
signed. Each framework hides the raw body somewhere different. The rule is the
|
|
6
|
+
same everywhere: **capture the raw bytes, verify, and only then parse.**
|
|
7
|
+
|
|
8
|
+
## Express
|
|
9
|
+
|
|
10
|
+
A global `express.json()` consumes the stream, so by the time your handler runs
|
|
11
|
+
the original bytes are gone. Mount `express.raw()` on the webhook route only.
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import express from "express";
|
|
15
|
+
const app = express();
|
|
16
|
+
app.use(express.json()); // fine for the rest of the app
|
|
17
|
+
|
|
18
|
+
// Webhook route gets RAW, mounted before/instead of the global parser for this path.
|
|
19
|
+
app.post("/webhooks", express.raw({ type: "*/*" }), (req, res) => {
|
|
20
|
+
const raw = req.body; // Buffer — exact bytes
|
|
21
|
+
if (!verify(raw, req.headers)) return res.sendStatus(400);
|
|
22
|
+
const event = JSON.parse(raw.toString("utf8"));
|
|
23
|
+
// dedupe + enqueue + res.sendStatus(200)
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If a global parser already ran, recover the bytes with a `verify` callback:
|
|
28
|
+
`express.json({ verify: (req, _res, buf) => { req.rawBody = buf; } })`.
|
|
29
|
+
|
|
30
|
+
## Next.js (App Router)
|
|
31
|
+
|
|
32
|
+
Route handlers do **not** auto-parse, but `await req.json()` reads the stream and
|
|
33
|
+
discards the raw bytes. Read the text instead and parse it yourself after
|
|
34
|
+
verifying.
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
// app/api/webhooks/route.ts
|
|
38
|
+
export async function POST(req: Request) {
|
|
39
|
+
const raw = await req.text(); // raw string; do NOT call req.json() first
|
|
40
|
+
const headers = Object.fromEntries(req.headers);
|
|
41
|
+
if (!verify(raw, headers)) return new Response("bad sig", { status: 400 });
|
|
42
|
+
const event = JSON.parse(raw);
|
|
43
|
+
// dedupe + enqueue
|
|
44
|
+
return new Response("ok", { status: 200 });
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
(Pages Router differs: set `export const config = { api: { bodyParser: false } }`
|
|
49
|
+
and read the stream — prefer the App Router handler above.)
|
|
50
|
+
|
|
51
|
+
## FastAPI / Starlette
|
|
52
|
+
|
|
53
|
+
Typing the parameter as a Pydantic model parses the body for you and throws away
|
|
54
|
+
the bytes. Take the raw `bytes` from the `Request`.
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from fastapi import FastAPI, Request, Response
|
|
58
|
+
app = FastAPI()
|
|
59
|
+
|
|
60
|
+
@app.post("/webhooks")
|
|
61
|
+
async def webhooks(request: Request):
|
|
62
|
+
raw = await request.body() # bytes — do not declare a model param
|
|
63
|
+
if not verify(raw, request.headers):
|
|
64
|
+
return Response(status_code=400)
|
|
65
|
+
event = json.loads(raw)
|
|
66
|
+
# dedupe + enqueue
|
|
67
|
+
return Response(status_code=200)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Hono
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
app.post("/webhooks", async (c) => {
|
|
74
|
+
const raw = await c.req.text(); // before any c.req.json()
|
|
75
|
+
if (!verify(raw, c.req.header())) return c.text("bad sig", 400);
|
|
76
|
+
const event = JSON.parse(raw);
|
|
77
|
+
return c.text("ok", 200);
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Serverless (Lambda / Vercel / Cloudflare Workers)
|
|
82
|
+
|
|
83
|
+
- **AWS Lambda (API Gateway / function URL):** the body arrives as a string in
|
|
84
|
+
`event.body`; if `event.isBase64Encoded` is true, `Buffer.from(event.body,
|
|
85
|
+
"base64")` first. Verify over that, never over a parsed object.
|
|
86
|
+
- **Vercel Functions:** disable the body parser for the route and read the raw
|
|
87
|
+
stream (Edge runtime: `await req.text()`).
|
|
88
|
+
- **Cloudflare Workers:** `await request.text()` / `await request.arrayBuffer()`
|
|
89
|
+
in the `fetch` handler; the body is unbuffered, so read it once.
|
|
90
|
+
|
|
91
|
+
## Common traps
|
|
92
|
+
|
|
93
|
+
- A reverse proxy or middleware that re-encodes the body (gzip, charset
|
|
94
|
+
normalization) changes the bytes after the sender signed them — verify before
|
|
95
|
+
any transform, and disable response/transit re-encoding on the webhook path.
|
|
96
|
+
- Reading the body stream twice: many runtimes let you read it once. Capture the
|
|
97
|
+
raw bytes into a variable and reuse that variable for both verify and parse.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Per-provider signature schemes
|
|
2
|
+
|
|
3
|
+
Every webhook signature is the same primitive — `HMAC-SHA256(secret, message)`
|
|
4
|
+
compared in constant time — wrapped in a different header layout. Map the
|
|
5
|
+
provider onto the generic verify routine in `SKILL.md` by answering three
|
|
6
|
+
questions: **which headers carry the id/timestamp/signature**, **what string is
|
|
7
|
+
signed**, and **how is the signature encoded**.
|
|
8
|
+
|
|
9
|
+
## Comparison table
|
|
10
|
+
|
|
11
|
+
| Provider | Signature header | Signed message | Encoding | Timestamp source |
|
|
12
|
+
|----------|------------------|----------------|----------|------------------|
|
|
13
|
+
| Standard Webhooks | `webhook-signature` (`v1,<sig> …` space-separated) | `{webhook-id}.{webhook-timestamp}.{raw-body}` | base64 | `webhook-timestamp` header (Unix seconds) |
|
|
14
|
+
| Stripe | `Stripe-Signature` (`t=<ts>,v1=<sig>`) | `{t}.{raw-body}` | hex | `t` field inside the header |
|
|
15
|
+
| GitHub | `X-Hub-Signature-256` (`sha256=<sig>`) | raw body only | hex | none — rely on TLS + secret; no replay window |
|
|
16
|
+
| Shopify | `X-Shopify-Hmac-SHA256` | raw body only | base64 | none |
|
|
17
|
+
| Slack | `X-Slack-Signature` (`v0=<sig>`) + `X-Slack-Request-Timestamp` | `v0:{timestamp}:{raw-body}` | hex | `X-Slack-Request-Timestamp` header |
|
|
18
|
+
| Svix | same as Standard Webhooks (`svix-id/timestamp/signature` or `webhook-*`) | `{id}.{timestamp}.{raw-body}` | base64 | timestamp header |
|
|
19
|
+
|
|
20
|
+
Notes that bite:
|
|
21
|
+
|
|
22
|
+
- **Stripe and Standard Webhooks both prefix versions and both allow multiple
|
|
23
|
+
comma/space-separated signatures** for secret rotation — accept the request if
|
|
24
|
+
*any* candidate matches. Never `break` on the first mismatch.
|
|
25
|
+
- **GitHub and Shopify sign the body alone** (no id/timestamp), so they have no
|
|
26
|
+
built-in replay window. Lean on HTTPS and the secret; if you need replay
|
|
27
|
+
protection, dedupe on a delivery id (`X-GitHub-Delivery`).
|
|
28
|
+
- **Slack signs `v0:{ts}:{body}`** with a colon separator and a literal `v0:`
|
|
29
|
+
prefix — different layout from the dot-joined Standard Webhooks string.
|
|
30
|
+
- For the **Stripe** scheme specifically (event model, `stripe listen`, the
|
|
31
|
+
billing flows) use `../../stripe/SKILL.md`; this table only covers verifying
|
|
32
|
+
the signature.
|
|
33
|
+
|
|
34
|
+
## Verify primitives by language
|
|
35
|
+
|
|
36
|
+
The two things that must be language-correct: feed the **raw bytes** to the HMAC,
|
|
37
|
+
and use the **constant-time** comparator.
|
|
38
|
+
|
|
39
|
+
| Language | HMAC-SHA256 | Constant-time compare |
|
|
40
|
+
|----------|-------------|------------------------|
|
|
41
|
+
| Node.js | `crypto.createHmac("sha256", key).update(raw).digest()` | `crypto.timingSafeEqual(a, b)` (equal-length Buffers) |
|
|
42
|
+
| Python | `hmac.new(key, raw, hashlib.sha256).digest()` | `hmac.compare_digest(a, b)` |
|
|
43
|
+
| Go | `hmac.New(sha256.New, key); mac.Write(raw)` | `hmac.Equal(expected, got)` |
|
|
44
|
+
| Ruby | `OpenSSL::HMAC.digest("SHA256", key, raw)` | `Rack::Utils.secure_compare(a, b)` |
|
|
45
|
+
| PHP | `hash_hmac("sha256", $raw, $key, true)` | `hash_equals($a, $b)` |
|
|
46
|
+
|
|
47
|
+
```go
|
|
48
|
+
// Go — Standard Webhooks verify, constant time, raw body in.
|
|
49
|
+
func verify(raw []byte, id, ts, header, secretB64 string) bool {
|
|
50
|
+
key, _ := base64.StdEncoding.DecodeString(secretB64)
|
|
51
|
+
mac := hmac.New(sha256.New, key)
|
|
52
|
+
mac.Write([]byte(id + "." + ts + "."))
|
|
53
|
+
mac.Write(raw)
|
|
54
|
+
expected := base64.StdEncoding.EncodeToString(mac.Sum(nil))
|
|
55
|
+
for _, part := range strings.Fields(header) { // space-separated for rotation
|
|
56
|
+
sig := strings.TrimPrefix(part, "v1,")
|
|
57
|
+
if hmac.Equal([]byte(sig), []byte(expected)) {
|
|
58
|
+
return true
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return false
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Whatever the layout, the order from `SKILL.md` does not change: raw body →
|
|
66
|
+
verify → timestamp window → dedupe → enqueue → `2xx`.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# ============================================================================
|
|
5
|
+
# NAME
|
|
6
|
+
# verify.sh — webhooks inbound-handler invariant linter
|
|
7
|
+
#
|
|
8
|
+
# USAGE
|
|
9
|
+
# ./verify.sh [PATH]
|
|
10
|
+
# Run from the ROOT of YOUR project (the repo containing your webhook
|
|
11
|
+
# handler), NOT from the skills repository. PATH defaults to the current
|
|
12
|
+
# directory. Read-only: it never writes, never fixes, never installs.
|
|
13
|
+
#
|
|
14
|
+
# WHAT IT DOES
|
|
15
|
+
# Heuristically scans candidate webhook-handler files for the five inbound
|
|
16
|
+
# invariants and prints PASS / WARN / FAIL per file:
|
|
17
|
+
# 1. raw body is used for HMAC verification (flags parsed-body verify)
|
|
18
|
+
# 2. a constant-time signature compare is present (flags ==/=== on a sig)
|
|
19
|
+
# 3. a timestamp / tolerance check exists
|
|
20
|
+
# 4. the signing secret comes from env, not a string literal
|
|
21
|
+
# 5. a dedupe step references a stable event id
|
|
22
|
+
#
|
|
23
|
+
# It is a HEURISTIC (grep-based), advisory not a compiler. A WARN means
|
|
24
|
+
# "no evidence found", which is not necessarily a bug.
|
|
25
|
+
#
|
|
26
|
+
# EXIT CODES
|
|
27
|
+
# 0 no candidate files found (clean/empty tree), OR all candidates PASS
|
|
28
|
+
# every hard check. WARN never fails the run.
|
|
29
|
+
# 1 a candidate file FAILS a hard check (parsed-body verify, ==/=== on a
|
|
30
|
+
# signature, or a hard-coded secret).
|
|
31
|
+
# ============================================================================
|
|
32
|
+
|
|
33
|
+
TARGET="${1:-.}"
|
|
34
|
+
|
|
35
|
+
if [ ! -e "$TARGET" ]; then
|
|
36
|
+
echo "verify.sh: target not found: $TARGET" >&2
|
|
37
|
+
exit 0
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# ----------------------------------------------------------------------------
|
|
41
|
+
# Find candidate handler files: source files that look like they touch
|
|
42
|
+
# webhooks / HMAC signatures. Prune dependency + VCS dirs. NUL-delimited so
|
|
43
|
+
# paths with spaces survive.
|
|
44
|
+
# ----------------------------------------------------------------------------
|
|
45
|
+
# Portable (bash 3.2 / macOS + GNU) NUL-safe array build — no mapfile, no
|
|
46
|
+
# process substitution, and -name globs instead of -iregex (BSD/GNU agree on
|
|
47
|
+
# globs). We stage the NUL-delimited find output in a temp file, then read it.
|
|
48
|
+
LISTFILE="$(mktemp -t webhooks-verify.XXXXXX 2>/dev/null || mktemp)"
|
|
49
|
+
trap 'rm -f "$LISTFILE"' EXIT
|
|
50
|
+
|
|
51
|
+
find "$TARGET" \
|
|
52
|
+
\( -name node_modules -o -name .git -o -name dist -o -name build \
|
|
53
|
+
-o -name vendor -o -name .venv -o -name venv -o -name __pycache__ \) -prune \
|
|
54
|
+
-o -type f \( -name '*.js' -o -name '*.cjs' -o -name '*.mjs' \
|
|
55
|
+
-o -name '*.ts' -o -name '*.tsx' -o -name '*.py' \
|
|
56
|
+
-o -name '*.go' -o -name '*.rb' -o -name '*.php' \) \
|
|
57
|
+
-print0 > "$LISTFILE" 2>/dev/null || true
|
|
58
|
+
|
|
59
|
+
CANDIDATES=()
|
|
60
|
+
while IFS= read -r -d '' f; do
|
|
61
|
+
if grep -Eilq 'webhook|x-hub-signature|stripe-signature|x-slack-signature|hmac' "$f" 2>/dev/null; then
|
|
62
|
+
CANDIDATES+=("$f")
|
|
63
|
+
fi
|
|
64
|
+
done < "$LISTFILE"
|
|
65
|
+
|
|
66
|
+
if [ "${#CANDIDATES[@]}" -eq 0 ]; then
|
|
67
|
+
echo "PASS no webhook-handler files found under '$TARGET' — nothing to lint."
|
|
68
|
+
exit 0
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
C_RESET=$'\033[0m'; C_RED=$'\033[31m'; C_GRN=$'\033[32m'; C_YEL=$'\033[33m'
|
|
72
|
+
say_pass() { printf '%sPASS%s %s\n' "$C_GRN" "$C_RESET" "$1"; }
|
|
73
|
+
say_warn() { printf '%sWARN%s %s\n' "$C_YEL" "$C_RESET" "$1"; }
|
|
74
|
+
say_fail() { printf '%sFAIL%s %s\n' "$C_RED" "$C_RESET" "$1"; }
|
|
75
|
+
|
|
76
|
+
# matches lines, case-insensitive, fixed cost
|
|
77
|
+
has() { grep -Eiq "$1" "$2" 2>/dev/null; }
|
|
78
|
+
|
|
79
|
+
exit_code=0
|
|
80
|
+
|
|
81
|
+
for f in "${CANDIDATES[@]}"; do
|
|
82
|
+
echo "── $f"
|
|
83
|
+
|
|
84
|
+
# 1. raw body used / parsed-body verify NOT used --------------------------
|
|
85
|
+
# Hard fail if we see a signature/HMAC built from an obviously parsed
|
|
86
|
+
# body (JSON.stringify(req.body), JSON.parse(...) fed to the digest).
|
|
87
|
+
if has 'createHmac|hmac\.new|OpenSSL::HMAC|hash_hmac|hmac\.New' "$f"; then
|
|
88
|
+
if has 'JSON\.stringify\s*\(\s*req\.body|JSON\.stringify\s*\(\s*request\.body' "$f"; then
|
|
89
|
+
say_fail "(1) HMAC appears to run over re-serialized parsed body (JSON.stringify(req.body)) — verify over the raw bytes"
|
|
90
|
+
exit_code=1
|
|
91
|
+
elif has 'rawbody|raw_body|req\.text\(\)|request\.body\(\)|c\.req\.text\(\)|arraybuffer|express\.raw|isbase64encoded' "$f"; then
|
|
92
|
+
say_pass "(1) raw body captured for HMAC verification"
|
|
93
|
+
else
|
|
94
|
+
say_warn "(1) HMAC found but no clear raw-body capture — confirm you verify over the raw bytes, not parsed JSON"
|
|
95
|
+
fi
|
|
96
|
+
else
|
|
97
|
+
say_warn "(1) no HMAC call detected in this file"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# 2. constant-time compare -----------------------------------------------
|
|
101
|
+
if has 'timingsafeequal|compare_digest|hmac\.equal|secure_compare|hash_equals' "$f"; then
|
|
102
|
+
say_pass "(2) constant-time signature compare present"
|
|
103
|
+
elif has 'signature\s*===|signature\s*==|sig\s*===|sig\s*==|=== *expectedsig|== *expectedsig' "$f"; then
|
|
104
|
+
say_fail "(2) signature compared with ==/=== — timing leak; use a constant-time comparator"
|
|
105
|
+
exit_code=1
|
|
106
|
+
else
|
|
107
|
+
say_warn "(2) no constant-time compare detected — confirm timingSafeEqual / compare_digest is used"
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# 3. timestamp / tolerance check -----------------------------------------
|
|
111
|
+
if has 'webhook-timestamp|x-slack-request-timestamp|timestamp' "$f" \
|
|
112
|
+
&& has '300|5 *\* *60|tolerance|skew|maxage|max_age|window' "$f"; then
|
|
113
|
+
say_pass "(3) timestamp tolerance / replay window check present"
|
|
114
|
+
else
|
|
115
|
+
say_warn "(3) no timestamp tolerance check detected — reject events outside ~5 minutes"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
# 4. secret from env, not a literal --------------------------------------
|
|
119
|
+
if has 'webhook_secret\s*=\s*["'\''][a-z0-9_]{12,}|signing_secret\s*=\s*["'\''][a-z0-9_]{12,}|whsec_[a-z0-9]' "$f"; then
|
|
120
|
+
say_fail "(4) signing secret looks hard-coded — read it from an environment variable"
|
|
121
|
+
exit_code=1
|
|
122
|
+
elif has 'process\.env|os\.environ|os\.getenv|env\(|ENV\[' "$f"; then
|
|
123
|
+
say_pass "(4) signing secret sourced from environment"
|
|
124
|
+
else
|
|
125
|
+
say_warn "(4) no env lookup detected — confirm the signing secret comes from env"
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
# 5. dedupe on event id ---------------------------------------------------
|
|
129
|
+
if has 'unique|setnx|set .* nx|already.processed|already.seen|seen_event|idempoten|webhook-id|event\.id|delivery.id' "$f"; then
|
|
130
|
+
say_pass "(5) dedupe / idempotency on an event id present"
|
|
131
|
+
else
|
|
132
|
+
say_warn "(5) no dedupe step detected — dedupe on the provider's stable event id (UNIQUE / SETNX)"
|
|
133
|
+
fi
|
|
134
|
+
done
|
|
135
|
+
|
|
136
|
+
echo
|
|
137
|
+
if [ "$exit_code" -eq 0 ]; then
|
|
138
|
+
echo "${C_GRN}verify.sh: no hard failures.${C_RESET} WARN lines are advisory — review them."
|
|
139
|
+
else
|
|
140
|
+
echo "${C_RED}verify.sh: hard failures found.${C_RESET} Fix the FAIL lines above."
|
|
141
|
+
fi
|
|
142
|
+
exit "$exit_code"
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: webinar
|
|
3
|
+
description: "Use when planning, promoting, or running a webinar meant to convert — deciding the offer before the title, building the registration + reminder funnel, scripting the run-of-show, or splitting post-event follow-up by segment. Triggers: 'plan a webinar', 'webinar that converts', 'people register but don't show up', 'webinar got attendees but no sales', 'reminder email sequence', 'no-show replay follow-up', non-obvious: 'my live attend rate is only 30%', 'how do I transition into the pitch without it feeling salesy', ES 'montar un webinar que convierta', CA 'fer un webinar que vengui'. NOT the slide visuals themselves (that is presentations), NOT the registration page copy (that is landing-copy)."
|
|
4
|
+
tags: [webinar, conversion-funnel, run-of-show, registration, follow-up, marketing-brand]
|
|
5
|
+
recommends: [presentations, landing-copy, content-engine, newsletter, lead-gen, cold-outreach, sales-pipeline, calendar-scheduling, email-connector]
|
|
6
|
+
profiles: []
|
|
7
|
+
origin: risco
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# webinar
|
|
11
|
+
|
|
12
|
+
Run the webinar as **one conversion event from end to end** — from "we should do a webinar" to "we closed deals from it." You own four coupled phases in order: decide the offer, fill the seats, run it to convert, follow up by segment. You do not own the artifacts the specialists make. The slide visuals, the registration page's final words, the recurring content calendar, the standing newsletter — those get handed to siblings. What you own is the funnel and the run-of-show that stitch them into one timeline. A webinar is a sales conversation scheduled in advance; design the conversation, not the talk.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- Planning from scratch: deciding the offer / single next step before the title or any slide.
|
|
17
|
+
- Choosing live vs automated/on-demand for the goal and audience size.
|
|
18
|
+
- Writing the run-of-show: hook → teaching → permission transition → stack → offer → close → Q&A.
|
|
19
|
+
- Building the 4-week promotion schedule across email + organic + paid social.
|
|
20
|
+
- Writing the pre-event reminder sequence (confirmation → 24h → 1h → 5-min) that drives show-up rate.
|
|
21
|
+
- Designing the segmented post-event follow-up (attendees vs no-shows vs replay) in the 0–72h window.
|
|
22
|
+
- Rescuing a webinar that gets registrations but no-shows, or attendees but no sales — diagnosing which funnel stage leaks.
|
|
23
|
+
- "Montar un webinar que convierta" (ES), "fer un webinar que vengui" (CA).
|
|
24
|
+
|
|
25
|
+
## When NOT to use — route instead
|
|
26
|
+
|
|
27
|
+
| The ask | Route to |
|
|
28
|
+
|---|---|
|
|
29
|
+
| Design the slide deck's visual layout / build the actual slides | `../presentations/SKILL.md` |
|
|
30
|
+
| Write the final words on the registration landing page | `../landing-copy/SKILL.md` |
|
|
31
|
+
| The recurring editorial calendar this webinar is one slot inside | `../content-engine/SKILL.md` |
|
|
32
|
+
| The standing newsletter / general nurture program | `../newsletter/SKILL.md` |
|
|
33
|
+
| Source and score the target list you'd invite | `lead-gen` |
|
|
34
|
+
| Cold DMs/emails inviting individuals one-to-one | `../cold-outreach/SKILL.md` |
|
|
35
|
+
| Work the deals the webinar generates through stages | `sales-pipeline` |
|
|
36
|
+
| The investor/vision deck delivered to a room | `pitch-deck` |
|
|
37
|
+
|
|
38
|
+
The test: if the deliverable is the *event funnel, the run-of-show, or the promote-and-follow-up timeline*, it is webinar. If it is the *slides*, that is presentations. If it is the *registration page's copy*, that is landing-copy.
|
|
39
|
+
|
|
40
|
+
## Decide the offer first
|
|
41
|
+
|
|
42
|
+
**Before the title, before a single slide, write down the ONE thing this webinar sells — or the single next step it asks for.** Why: the teaching only lands if you reverse-build it from the offer. A pitch bolted onto a finished talk feels like an ambush; a talk built backward from the offer feels like the obvious conclusion. The opening story plus the teaching should do ~80% of the selling, so the ask at the end is a small step, not a leap (Graham Cochrane $100k webinar template 2025; Best Seller Publishing 2025).
|
|
43
|
+
|
|
44
|
+
State it in one sentence before anything else:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
This webinar sells: [the $1,500 6-week cohort]
|
|
48
|
+
The single next step we ask for: [book a 15-min enrollment call by Friday]
|
|
49
|
+
The 2–3 false beliefs the teaching must break: [1] ... [2] ... [3] ...
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
If you cannot fill that in, stop. You are not ready to pick a title. Everything downstream — the hook, which beliefs the teaching dismantles, the stack, the follow-up CTA — is derived from these three lines.
|
|
53
|
+
|
|
54
|
+
## The funnel you're optimizing
|
|
55
|
+
|
|
56
|
+
You are optimizing five numbers, not one. Anchor every plan to **registrants**, because roughly half of them never show up live — median live attend rate is ~41.6% of registrants; B2B averages ~35–45% (Univid Webinar Report 2026; ON24 2025 Benchmarks). If you plan for "attendees," you under-fill the top and over-promise the close.
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
Registrants → Show-up (~42%) → Engaged → Converted → Post-event
|
|
60
|
+
reminder interaction offer follow-up replay/segment
|
|
61
|
+
sequence (polls/CTA) + close 0–72h ~25% of sales
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Diagnose by stage when something leaks:
|
|
65
|
+
|
|
66
|
+
| Symptom | Leaking stage | The lever |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| Lots of registrants, weak live turnout | show-up | reminder sequence + SMS (see below) |
|
|
69
|
+
| Good turnout, audience goes passive/drops | engaged | mid-session polls + live resource CTA |
|
|
70
|
+
| Engaged room, no sales | converted | the offer/stack and the permission transition |
|
|
71
|
+
| Live went fine, pipeline went quiet | post-event | segmented 0–72h follow-up |
|
|
72
|
+
|
|
73
|
+
### Live vs automated/on-demand
|
|
74
|
+
|
|
75
|
+
Pick by goal, audience size, and repeatability — not by what feels more "premium."
|
|
76
|
+
|
|
77
|
+
| | Live | Automated / on-demand |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| Best for | launches, high-ticket, real-time Q&A and urgency | evergreen offers, always-on lead gen, time-zone spread |
|
|
80
|
+
| Audience | one concentrated cohort | trickle of registrants over weeks |
|
|
81
|
+
| Conversion driver | live interaction + scarcity | replay reach (40–44% of all views) |
|
|
82
|
+
| Cost | one production, full team | build once, runs unattended |
|
|
83
|
+
| Risk | one shot; weather/tech can sink it | feels canned if you fake "live" |
|
|
84
|
+
|
|
85
|
+
Default to **live for the first run** of any new offer (you learn the objections), then automate the winner.
|
|
86
|
+
|
|
87
|
+
## Run-of-show
|
|
88
|
+
|
|
89
|
+
The skeleton, with the 80/20 selling rule baked in:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
1. Hook (0–5 min) — the promise + the story that earns the room's attention
|
|
93
|
+
2. Teaching (5–40 min) — break the 2–3 false beliefs, one block each, proof per block
|
|
94
|
+
3. Permission transition — explicitly ask to switch modes before you pitch
|
|
95
|
+
4. Stack + offer — what they get, framed against the cost of staying stuck
|
|
96
|
+
5. Close (the ask) — the single next step, with a clean deadline
|
|
97
|
+
6. Q&A — handle the live objections; do NOT re-open the teaching
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The transition is where most webinars die — the speaker lurches from "value" to "buy now" with no bridge, and the room feels sold-at. Ask permission and name the shift:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
Bad: "...and that's the framework. So anyway — I've got something to show you.
|
|
104
|
+
For just three payments of $500 you can..."
|
|
105
|
+
|
|
106
|
+
Good: "That's the whole method. Now — some of you want to implement this alone, and
|
|
107
|
+
these slides are enough to do that. For the rest who'd rather we do it with you
|
|
108
|
+
over the next six weeks, can I take two minutes to show you exactly how that
|
|
109
|
+
works? Then we'll open it up for questions."
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The "Good" version gives the room a choice, which lowers resistance — and it earns the pitch instead of springing it. Place a poll roughly every 10–12 minutes so the teaching stays a conversation. The full annotated, timed template — hook block, the per-belief teaching blocks, the stack/offer mechanics, poll placement, and how the stack changes by offer type — is in `references/run-of-show.md`. Hand the slide *visuals* for all of this to `../presentations/SKILL.md`.
|
|
113
|
+
|
|
114
|
+
## Promote & fill seats
|
|
115
|
+
|
|
116
|
+
Start promotion **~4 weeks out**; email is the dominant channel (~86% of teams), then organic and paid social (Amra & Elma 2025). Earlier start + multi-channel = more registrants. The channel mix, email-led:
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
T-28d announce email to list + organic posts
|
|
120
|
+
T-21d value teaser what they'll learn (one belief preview) + paid social on
|
|
121
|
+
T-14d social proof past-attendee result / agenda reveal
|
|
122
|
+
T-7d urgency builds "one week left", second list email
|
|
123
|
+
T-1d last call final registration push across all channels
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
For the registration page itself, write a **brief** and hand the page to `../landing-copy/SKILL.md` — do not write the final page copy yourself. The brief names: the single promise (matches the offer line above), the 3 belief-shifts as bullets, the date/time with time-zone, the host + credibility line, and the one CTA ("Save my seat"). Where this webinar sits in the wider calendar belongs to `../content-engine/SKILL.md`. The full dated promotion table lives in `references/email-cadence.md`.
|
|
127
|
+
|
|
128
|
+
## Reminder sequence — the show-up lever
|
|
129
|
+
|
|
130
|
+
This is the highest-leverage block in the whole funnel and it is not optional polish. **Day-of reminder emails drive ~38% of total live attendance, and the "5 minutes before" email gives the single biggest boost** (ProperExpression). Adding SMS lifts registrant→attendee from a ~56% baseline to as high as 71% — a ~27% lift (Amra & Elma 2025).
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
Confirmation (instant) calendar invite + what to expect + "add to calendar"
|
|
134
|
+
T-24h email one reason to show up live (the thing replay won't have)
|
|
135
|
+
T-1h email + SMS link + "starts in 1 hour"
|
|
136
|
+
T-5min email + SMS "we're going live now — join link" ← biggest single lever
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Send the calendar invite via `calendar-scheduling`; if you're wiring the sends programmatically, `email-connector` owns the transport. The full row-by-row cadence with the metric each touch moves is in `references/email-cadence.md`.
|
|
140
|
+
|
|
141
|
+
## Run it live
|
|
142
|
+
|
|
143
|
+
Interaction roughly doubles lead conversion: **interactive webinars (mid-session polls + a live resource-download CTA) converted attendees to MQLs at 38% vs 19% for passive slide-only decks** (Amra & Elma 2025). Build the interaction into the run-of-show, don't improvise it:
|
|
144
|
+
|
|
145
|
+
- A poll roughly every 10–12 min — the first inside the first 5 minutes to set the norm that this room participates.
|
|
146
|
+
- One live resource CTA mid-session (a downloadable the offer builds on) — this is also your engagement flag for follow-up segmentation.
|
|
147
|
+
- Watch chat; pull 2–3 questions into the teaching by name. Save the rest for Q&A.
|
|
148
|
+
|
|
149
|
+
Pick the platform from attendee count + session length + budget, not brand (StackScored 2026; Riverside 2026):
|
|
150
|
+
|
|
151
|
+
| Platform | Fits | Note |
|
|
152
|
+
|---|---|---|
|
|
153
|
+
| Demio | small live, ≤50 attendees | Starter ~$49/mo, 3h session cap |
|
|
154
|
+
| Livestorm | mid-size, polished | per-credit ~€2.50/unique-attendee — 3,000 live ≈ €7,500/event, expensive at scale |
|
|
155
|
+
| Zoom Webinars | large, familiar | scales to 10,000+ |
|
|
156
|
+
| Riverside | large + studio-quality recording | scales to 10,000+, strong replay asset |
|
|
157
|
+
|
|
158
|
+
## Follow up by segment
|
|
159
|
+
|
|
160
|
+
**Conversion is segment-specific** — one follow-up does not fit all. High-engagement attendees convert to sales conversations at 12–15%, passive at 3–5%, replay-watching no-shows at 2–3% (Martal 2025). And the window is short: follow-up open rates drop from ~58% within 24h to ~31% after 48h (Default.com). Send the first touch in 0–24h, then 2–4 touches over 5–7 days. The follow-up is half the revenue — **~25% of webinar-related sales happen post-event, and 40–44% of total views come from replay** (DigitalApplied 2026; Cloud Present).
|
|
161
|
+
|
|
162
|
+
| Segment | First touch | CTA matched to readiness |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| Engaged attendee | 0–4h | direct ask — book the call / claim the offer before deadline |
|
|
165
|
+
| Passive attendee | 0–24h | replay + the one objection they likely have, then the offer |
|
|
166
|
+
| No-show registrant | 0–24h | "you missed it — here's the replay", time-boxed |
|
|
167
|
+
| Replay-only viewer | on watch | offer + deadline, lower-commitment next step |
|
|
168
|
+
|
|
169
|
+
Hand the *recurring* nurture program (people who don't convert this cycle) to `../newsletter/SKILL.md`. Hand the *deals* the webinar generated to `sales-pipeline` to work through stages. You own only the 0–72h conversion window.
|
|
170
|
+
|
|
171
|
+
## Metrics scorecard
|
|
172
|
+
|
|
173
|
+
Report these five and judge against benchmark — vanity registration counts hide every real leak:
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
Registration count — top of funnel (necessary, not sufficient)
|
|
177
|
+
Show-up rate — registrants → live; benchmark ~42% (B2B 35–45%)
|
|
178
|
+
Engagement rate — poll responses / live CTA clicks per attendee
|
|
179
|
+
Conversion rate — segment-split: engaged 12–15%, passive 3–5%, replay 2–3%
|
|
180
|
+
Post-event % — share of total sales closed after the live event (~25%)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Anti-patterns
|
|
184
|
+
|
|
185
|
+
| Bad | Why it leaks | Good |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| Pick the title, then figure out what to sell | the teaching can't reverse-build; the pitch feels bolted on | write the one offer + next step before the title |
|
|
188
|
+
| Plan capacity off "attendees" | ~58% of registrants never show; you under-fill | anchor every number to registrants, assume ~42% show-up |
|
|
189
|
+
| One confirmation email, no reminders | day-of reminders drive ~38% of attendance — you forfeit it | confirmation → 24h → 1h → 5-min, add SMS |
|
|
190
|
+
| Slide-only, no interaction | passive converts to MQL at half the rate (19% vs 38%) | a poll every ~10–12 min + one live CTA |
|
|
191
|
+
| Lurch straight into the pitch | the room feels sold-at and resistance spikes | the permission transition — ask, name the mode switch |
|
|
192
|
+
| A 20-minute pitch block | selling should be ~20%, the teaching ~80% | story + teaching do the selling; the ask is a small step |
|
|
193
|
+
| One follow-up email to everyone | conversion is segment-specific; you waste the engaged and annoy the cold | three paths — attendee / no-show / replay |
|
|
194
|
+
| Follow up "next week" | opens halve after 48h; pipeline goes cold | first touch 0–24h, 2–4 touches over 5–7 days |
|
|
195
|
+
| Report registration count as the win | hides which stage actually leaked | the five-number scorecard, judged vs benchmark |
|
|
196
|
+
| Fake "live" on an automated webinar | the moment the audience notices, trust collapses | be honest it's on-demand, or run it genuinely live |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Evals — webinar
|
|
2
|
+
|
|
3
|
+
These cases are run by the catalog's eval harness, not a standalone script. The
|
|
4
|
+
`should_trigger` and `should_not_trigger` prompts validate that the description routes
|
|
5
|
+
correctly — webinar should fire on offer-first planning, show-up/no-sale diagnosis, the
|
|
6
|
+
reminder cadence, and the permission-transition question (incl. the Spanish phrasing),
|
|
7
|
+
and should hand off cleanly to presentations (slide visuals), landing-copy (page words),
|
|
8
|
+
newsletter (recurring program), lead-gen (list sourcing), and sales-pipeline (working
|
|
9
|
+
deals). The single `capability` case checks the body actually produces a complete
|
|
10
|
+
offer-first funnel plan: offer-before-tactics, registrant-anchored math, the 4-week
|
|
11
|
+
promotion + reminder + SMS levers, a run-of-show with the permission transition, the
|
|
12
|
+
segmented 0–72h follow-up, a platform pick sized to the audience, and the hand-offs.
|
|
13
|
+
Run it through whatever harness loads `cases.yaml`; there is no checkable artifact, so
|
|
14
|
+
there is no `verify.sh` — webinar is a process skill and its rigor is the capability rubric.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
skill: webinar
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "Plan a webinar to launch our new course"
|
|
5
|
+
why: "Core plan-from-offer — webinar owns the full conversion-event lifecycle."
|
|
6
|
+
- prompt: "People register for our webinars but barely half show up live"
|
|
7
|
+
why: "Non-obvious symptom that maps to the show-up funnel stage; the reminder sequence is the lever."
|
|
8
|
+
- prompt: "We got 200 attendees but zero sales — what went wrong?"
|
|
9
|
+
why: "Diagnose the converted stage — run-of-show offer/transition plus segmented follow-up."
|
|
10
|
+
- prompt: "Write the reminder email sequence for our Thursday webinar"
|
|
11
|
+
why: "Pre-event reminder cadence (confirmation → 24h → 1h → 5-min) is squarely webinar's show-up block."
|
|
12
|
+
- prompt: "How do I transition into the pitch without it feeling salesy?"
|
|
13
|
+
why: "Non-obvious phrasing — the permission transition inside the run-of-show."
|
|
14
|
+
- prompt: "Montar un webinar para vender nuestro programa"
|
|
15
|
+
why: "Spanish trigger for the full offer-first funnel."
|
|
16
|
+
|
|
17
|
+
should_not_trigger:
|
|
18
|
+
- prompt: "Design the slides for my webinar deck — make them look good"
|
|
19
|
+
route_to: presentations
|
|
20
|
+
why: "Slide visuals/craft, not the funnel or run-of-show."
|
|
21
|
+
- prompt: "Write the registration landing page copy"
|
|
22
|
+
route_to: landing-copy
|
|
23
|
+
why: "The page's final words; webinar only writes the brief and hands it off."
|
|
24
|
+
- prompt: "Set up our monthly newsletter"
|
|
25
|
+
route_to: newsletter
|
|
26
|
+
why: "Recurring email publication, not a one-time conversion event."
|
|
27
|
+
- prompt: "Build me a target list of accounts to invite"
|
|
28
|
+
route_to: lead-gen
|
|
29
|
+
why: "Sourcing and scoring the list, not running the event."
|
|
30
|
+
- prompt: "Move the deals from last week's webinar through our sales stages"
|
|
31
|
+
route_to: sales-pipeline
|
|
32
|
+
why: "Working deals through stages is downstream of webinar's 0–72h window."
|
|
33
|
+
|
|
34
|
+
capability:
|
|
35
|
+
- scenario: "We're running a live webinar in 3 weeks to sell a $1,500 cohort; we have a list of 4,000 and a finished deck. Build the plan."
|
|
36
|
+
must_include:
|
|
37
|
+
- "Confirms or sets the single offer + the single next step before any tactics"
|
|
38
|
+
- "Registrant-anchored funnel math using the ~42% show-up assumption"
|
|
39
|
+
- "4-week promotion schedule with an email-led, multi-channel mix"
|
|
40
|
+
- "Reminder sequence including the day-of and 5-min touches plus the SMS lever"
|
|
41
|
+
- "Run-of-show with the permission transition and at least one poll"
|
|
42
|
+
- "Segmented follow-up across attendee / no-show / replay within the 0–72h window"
|
|
43
|
+
- "Platform note appropriate to the ~1,700 expected live attendees (e.g. Zoom/Riverside scale, not Demio's 50 cap)"
|
|
44
|
+
- "Hands the slide work to presentations and the registration page to landing-copy"
|