@ketecode/loom 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +616 -2
- package/agents/accessibility-reviewer/AGENT.md +70 -0
- package/agents/accessibility-reviewer/evals/triggers.json +15 -0
- package/agents/agent-evaluator/AGENT.md +74 -0
- package/agents/agent-evaluator/evals/triggers.json +15 -0
- package/agents/architect/AGENT.md +82 -0
- package/agents/architect/evals/triggers.json +17 -0
- package/agents/billing-reviewer/AGENT.md +68 -0
- package/agents/billing-reviewer/evals/triggers.json +16 -0
- package/agents/code-reviewer/AGENT.md +51 -0
- package/agents/code-reviewer/evals/behavior.json +60 -0
- package/agents/code-reviewer/evals/triggers.json +14 -0
- package/agents/code-simplifier/AGENT.md +74 -0
- package/agents/code-simplifier/evals/triggers.json +15 -0
- package/agents/cpp-build-resolver/AGENT.md +73 -0
- package/agents/cpp-build-resolver/evals/triggers.json +16 -0
- package/agents/cpp-reviewer/AGENT.md +59 -0
- package/agents/cpp-reviewer/evals/triggers.json +16 -0
- package/agents/csharp-build-resolver/AGENT.md +84 -0
- package/agents/csharp-build-resolver/evals/triggers.json +17 -0
- package/agents/csharp-reviewer/AGENT.md +88 -0
- package/agents/csharp-reviewer/evals/triggers.json +17 -0
- package/agents/dart-build-resolver/AGENT.md +80 -0
- package/agents/dart-build-resolver/evals/triggers.json +17 -0
- package/agents/dart-reviewer/AGENT.md +66 -0
- package/agents/dart-reviewer/evals/triggers.json +17 -0
- package/agents/database-reviewer/AGENT.md +72 -0
- package/agents/database-reviewer/evals/triggers.json +16 -0
- package/agents/django-reviewer/AGENT.md +61 -0
- package/agents/django-reviewer/evals/triggers.json +15 -0
- package/agents/doc-updater/AGENT.md +92 -0
- package/agents/doc-updater/evals/triggers.json +14 -0
- package/agents/e2e-runner/AGENT.md +88 -0
- package/agents/e2e-runner/evals/triggers.json +16 -0
- package/agents/fastapi-reviewer/AGENT.md +63 -0
- package/agents/fastapi-reviewer/evals/triggers.json +15 -0
- package/agents/flutter-reviewer/AGENT.md +70 -0
- package/agents/flutter-reviewer/evals/triggers.json +15 -0
- package/agents/fsharp-build-resolver/AGENT.md +81 -0
- package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
- package/agents/fsharp-reviewer/AGENT.md +77 -0
- package/agents/fsharp-reviewer/evals/triggers.json +15 -0
- package/agents/go-build-resolver/AGENT.md +85 -0
- package/agents/go-build-resolver/evals/triggers.json +16 -0
- package/agents/go-reviewer/AGENT.md +66 -0
- package/agents/go-reviewer/evals/triggers.json +16 -0
- package/agents/healthcare-reviewer/AGENT.md +65 -0
- package/agents/healthcare-reviewer/evals/triggers.json +16 -0
- package/agents/i18n-reviewer/AGENT.md +64 -0
- package/agents/i18n-reviewer/evals/triggers.json +16 -0
- package/agents/inbox-triager/AGENT.md +98 -0
- package/agents/inbox-triager/evals/triggers.json +16 -0
- package/agents/infra-reviewer/AGENT.md +93 -0
- package/agents/infra-reviewer/evals/triggers.json +15 -0
- package/agents/java-build-resolver/AGENT.md +82 -0
- package/agents/java-build-resolver/evals/triggers.json +16 -0
- package/agents/java-reviewer/AGENT.md +64 -0
- package/agents/java-reviewer/evals/triggers.json +16 -0
- package/agents/kotlin-build-resolver/AGENT.md +89 -0
- package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
- package/agents/kotlin-reviewer/AGENT.md +75 -0
- package/agents/kotlin-reviewer/evals/triggers.json +16 -0
- package/agents/mle-reviewer/AGENT.md +68 -0
- package/agents/mle-reviewer/evals/triggers.json +16 -0
- package/agents/network-config-reviewer/AGENT.md +68 -0
- package/agents/network-config-reviewer/evals/triggers.json +17 -0
- package/agents/payments-reviewer/AGENT.md +64 -0
- package/agents/payments-reviewer/evals/triggers.json +16 -0
- package/agents/performance-optimizer/AGENT.md +86 -0
- package/agents/performance-optimizer/evals/triggers.json +16 -0
- package/agents/perl-build-resolver/AGENT.md +84 -0
- package/agents/perl-build-resolver/evals/triggers.json +15 -0
- package/agents/perl-reviewer/AGENT.md +77 -0
- package/agents/perl-reviewer/evals/triggers.json +15 -0
- package/agents/php-build-resolver/AGENT.md +88 -0
- package/agents/php-build-resolver/evals/triggers.json +16 -0
- package/agents/php-reviewer/AGENT.md +61 -0
- package/agents/php-reviewer/evals/triggers.json +15 -0
- package/agents/planner/AGENT.md +75 -0
- package/agents/planner/evals/triggers.json +17 -0
- package/agents/pr-test-analyzer/AGENT.md +82 -0
- package/agents/pr-test-analyzer/evals/triggers.json +16 -0
- package/agents/python-build-resolver/AGENT.md +87 -0
- package/agents/python-build-resolver/evals/triggers.json +16 -0
- package/agents/python-reviewer/AGENT.md +63 -0
- package/agents/python-reviewer/evals/triggers.json +15 -0
- package/agents/rag-reviewer/AGENT.md +71 -0
- package/agents/rag-reviewer/evals/triggers.json +16 -0
- package/agents/react-reviewer/AGENT.md +70 -0
- package/agents/react-reviewer/evals/triggers.json +16 -0
- package/agents/refactor-cleaner/AGENT.md +82 -0
- package/agents/refactor-cleaner/evals/triggers.json +16 -0
- package/agents/ruby-build-resolver/AGENT.md +93 -0
- package/agents/ruby-build-resolver/evals/triggers.json +16 -0
- package/agents/ruby-reviewer/AGENT.md +62 -0
- package/agents/ruby-reviewer/evals/triggers.json +16 -0
- package/agents/rust-build-resolver/AGENT.md +98 -0
- package/agents/rust-build-resolver/evals/triggers.json +16 -0
- package/agents/rust-reviewer/AGENT.md +78 -0
- package/agents/rust-reviewer/evals/triggers.json +15 -0
- package/agents/security-reviewer/AGENT.md +84 -0
- package/agents/security-reviewer/evals/triggers.json +16 -0
- package/agents/silent-failure-hunter/AGENT.md +66 -0
- package/agents/silent-failure-hunter/evals/triggers.json +16 -0
- package/agents/solidity-reviewer/AGENT.md +70 -0
- package/agents/solidity-reviewer/evals/triggers.json +16 -0
- package/agents/spec-reviewer/AGENT.md +95 -0
- package/agents/spec-reviewer/evals/behavior.json +57 -0
- package/agents/spec-reviewer/evals/triggers.json +16 -0
- package/agents/swift-build-resolver/AGENT.md +85 -0
- package/agents/swift-build-resolver/evals/triggers.json +15 -0
- package/agents/swift-reviewer/AGENT.md +75 -0
- package/agents/swift-reviewer/evals/triggers.json +15 -0
- package/agents/task-implementer/AGENT.md +89 -0
- package/agents/task-implementer/evals/behavior.json +47 -0
- package/agents/task-implementer/evals/triggers.json +16 -0
- package/agents/typescript-build-resolver/AGENT.md +76 -0
- package/agents/typescript-build-resolver/evals/triggers.json +15 -0
- package/agents/typescript-reviewer/AGENT.md +76 -0
- package/agents/typescript-reviewer/evals/triggers.json +15 -0
- package/agents/vue-reviewer/AGENT.md +75 -0
- package/agents/vue-reviewer/evals/triggers.json +15 -0
- package/bin/kete-loom.js +723 -0
- package/commands/aside.md +19 -0
- package/commands/brainstorm.md +25 -0
- package/commands/build-fix.md +26 -0
- package/commands/campaign.md +19 -0
- package/commands/changelog.md +36 -0
- package/commands/checkpoint.md +26 -0
- package/commands/codemap.md +25 -0
- package/commands/commit.md +26 -0
- package/commands/debug.md +27 -0
- package/commands/deps-audit.md +32 -0
- package/commands/dual-review.md +34 -0
- package/commands/epic-decompose.md +21 -0
- package/commands/explain.md +37 -0
- package/commands/feature-dev.md +23 -0
- package/commands/finish-branch.md +26 -0
- package/commands/fix-bug.md +38 -0
- package/commands/hookify.md +23 -0
- package/commands/i18n-check.md +39 -0
- package/commands/issue-sync.md +22 -0
- package/commands/jira.md +19 -0
- package/commands/learn.md +23 -0
- package/commands/loom.md +21 -0
- package/commands/loop.md +20 -0
- package/commands/model-route.md +27 -0
- package/commands/onboard.md +35 -0
- package/commands/orchestrate.md +21 -0
- package/commands/plan-feature.md +36 -0
- package/commands/postmortem.md +42 -0
- package/commands/pr-describe.md +39 -0
- package/commands/pr.md +22 -0
- package/commands/prd.md +41 -0
- package/commands/production-readiness.md +45 -0
- package/commands/project-init.md +21 -0
- package/commands/refactor-clean.md +24 -0
- package/commands/resume-session.md +22 -0
- package/commands/review.md +35 -0
- package/commands/save-session.md +37 -0
- package/commands/security-scan.md +32 -0
- package/commands/sessions.md +21 -0
- package/commands/skill-create.md +21 -0
- package/commands/tdd.md +36 -0
- package/commands/test-coverage.md +24 -0
- package/commands/threat-model.md +36 -0
- package/commands/update-docs.md +25 -0
- package/commands/usage-report.md +43 -0
- package/commands/verify.md +21 -0
- package/hooks/block-dangerous-commands/HOOK.md +30 -0
- package/hooks/block-dangerous-commands/cases.json +50 -0
- package/hooks/block-dangerous-commands/hook.js +75 -0
- package/hooks/block-foreground-servers/HOOK.md +34 -0
- package/hooks/block-foreground-servers/cases.json +31 -0
- package/hooks/block-foreground-servers/hook.js +41 -0
- package/hooks/block-no-verify/HOOK.md +25 -0
- package/hooks/block-no-verify/cases.json +30 -0
- package/hooks/block-no-verify/hook.js +43 -0
- package/hooks/capture-lessons/HOOK.md +24 -0
- package/hooks/capture-lessons/hook.js +48 -0
- package/hooks/format-on-edit/HOOK.md +24 -0
- package/hooks/format-on-edit/hook.js +89 -0
- package/hooks/guard-secrets/HOOK.md +19 -0
- package/hooks/guard-secrets/cases.json +110 -0
- package/hooks/guard-secrets/hook.js +44 -0
- package/hooks/load-session-context/HOOK.md +20 -0
- package/hooks/load-session-context/hook.js +56 -0
- package/hooks/notify-on-stop/HOOK.md +25 -0
- package/hooks/notify-on-stop/hook.js +27 -0
- package/hooks/protect-files/HOOK.md +24 -0
- package/hooks/protect-files/cases.json +27 -0
- package/hooks/protect-files/hook.js +39 -0
- package/hooks/protect-lint-config/HOOK.md +29 -0
- package/hooks/protect-lint-config/cases.json +18 -0
- package/hooks/protect-lint-config/fixtures/.eslintrc.json +1 -0
- package/hooks/protect-lint-config/fixtures/.golangci.yml +1 -0
- package/hooks/protect-lint-config/fixtures/.prettierrc +1 -0
- package/hooks/protect-lint-config/fixtures/.rubocop.yml +1 -0
- package/hooks/protect-lint-config/fixtures/biome.json +1 -0
- package/hooks/protect-lint-config/fixtures/eslint.config.mjs +1 -0
- package/hooks/protect-lint-config/fixtures/ruff.toml +1 -0
- package/hooks/protect-lint-config/hook.js +25 -0
- package/hooks/read-before-edit/HOOK.md +26 -0
- package/hooks/read-before-edit/cases.json +15 -0
- package/hooks/read-before-edit/hook.js +50 -0
- package/hooks/run.js +148 -0
- package/hooks/verify-before-stop/HOOK.md +32 -0
- package/hooks/verify-before-stop/hook.js +70 -0
- package/mcp/atlassian.json +11 -0
- package/mcp/chrome-devtools.json +18 -0
- package/mcp/clickhouse.json +11 -0
- package/mcp/cloudflare.json +11 -0
- package/mcp/context7.json +11 -0
- package/mcp/exa.json +11 -0
- package/mcp/fetch.json +17 -0
- package/mcp/figma.json +11 -0
- package/mcp/firecrawl.json +11 -0
- package/mcp/git.json +17 -0
- package/mcp/github.json +11 -0
- package/mcp/linear.json +11 -0
- package/mcp/memory.json +18 -0
- package/mcp/notion.json +11 -0
- package/mcp/playwright.json +18 -0
- package/mcp/sentry.json +11 -0
- package/mcp/stripe.json +11 -0
- package/mcp/supabase.json +11 -0
- package/mcp/time.json +17 -0
- package/mcp/vercel.json +11 -0
- package/package.json +61 -4
- package/profiles.json +214 -0
- package/rules/common.md +21 -0
- package/rules/cpp.md +29 -0
- package/rules/csharp.md +25 -0
- package/rules/dart.md +29 -0
- package/rules/fsharp.md +28 -0
- package/rules/git.md +26 -0
- package/rules/go.md +29 -0
- package/rules/java.md +29 -0
- package/rules/kotlin.md +27 -0
- package/rules/perl.md +26 -0
- package/rules/php.md +28 -0
- package/rules/python.md +30 -0
- package/rules/ruby.md +27 -0
- package/rules/rust.md +26 -0
- package/rules/security.md +29 -0
- package/rules/swift.md +28 -0
- package/rules/testing.md +25 -0
- package/rules/typescript.md +29 -0
- package/rules/use-skills.md +23 -0
- package/schemas/skill-frontmatter.schema.json +52 -0
- package/scripts/lib/audit.js +96 -0
- package/scripts/lib/behavior.js +52 -0
- package/scripts/lib/frontmatter.js +65 -0
- package/scripts/lib/hooks-install.js +294 -0
- package/scripts/lib/i18n.js +51 -0
- package/scripts/lib/inventory.js +85 -0
- package/scripts/lib/lint.js +180 -0
- package/scripts/lib/mcp-install.js +288 -0
- package/scripts/lib/profiles.js +128 -0
- package/scripts/lib/render.js +92 -0
- package/scripts/lib/rules-install.js +118 -0
- package/scripts/lib/skills.js +87 -0
- package/scripts/lib/targets.js +123 -0
- package/skills/accounting-api-integration/SKILL.md +81 -0
- package/skills/accounting-api-integration/evals/triggers.json +17 -0
- package/skills/accounting-api-integration/references/quickbooks.md +48 -0
- package/skills/accounting-api-integration/references/xero.md +45 -0
- package/skills/agent-failure-debugging/SKILL.md +92 -0
- package/skills/agent-failure-debugging/evals/triggers.json +16 -0
- package/skills/agent-harness-design/SKILL.md +125 -0
- package/skills/agent-harness-design/evals/triggers.json +21 -0
- package/skills/agent-outbound-messaging/SKILL.md +92 -0
- package/skills/agent-outbound-messaging/evals/triggers.json +16 -0
- package/skills/agent-security/SKILL.md +117 -0
- package/skills/agent-security/evals/triggers.json +16 -0
- package/skills/agent-security/references/host-configs.md +37 -0
- package/skills/ai-media-generation/SKILL.md +89 -0
- package/skills/ai-media-generation/evals/triggers.json +16 -0
- package/skills/ai-media-generation/references/job-pipeline.md +76 -0
- package/skills/angular-patterns/SKILL.md +122 -0
- package/skills/angular-patterns/evals/triggers.json +16 -0
- package/skills/api-client-integration/SKILL.md +86 -0
- package/skills/api-client-integration/evals/triggers.json +16 -0
- package/skills/api-client-integration/references/resilience.md +57 -0
- package/skills/api-design/SKILL.md +96 -0
- package/skills/api-design/evals/triggers.json +18 -0
- package/skills/api-design/references/conventions.md +133 -0
- package/skills/architecture-decision-records/SKILL.md +98 -0
- package/skills/architecture-decision-records/evals/triggers.json +17 -0
- package/skills/article-writing/SKILL.md +108 -0
- package/skills/article-writing/evals/triggers.json +16 -0
- package/skills/aspnet-core-patterns/SKILL.md +149 -0
- package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
- package/skills/auth-patterns/SKILL.md +104 -0
- package/skills/auth-patterns/evals/triggers.json +17 -0
- package/skills/auth-patterns/references/oauth-oidc.md +64 -0
- package/skills/autonomous-loops/SKILL.md +99 -0
- package/skills/autonomous-loops/evals/triggers.json +14 -0
- package/skills/aws-patterns/SKILL.md +91 -0
- package/skills/aws-patterns/evals/triggers.json +16 -0
- package/skills/azure-patterns/SKILL.md +86 -0
- package/skills/azure-patterns/evals/triggers.json +16 -0
- package/skills/benchmark-methodology/SKILL.md +88 -0
- package/skills/benchmark-methodology/evals/triggers.json +16 -0
- package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
- package/skills/bgp-diagnostics/SKILL.md +84 -0
- package/skills/bgp-diagnostics/evals/triggers.json +18 -0
- package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
- package/skills/bioinformatics-workflows/SKILL.md +108 -0
- package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
- package/skills/bioinformatics-workflows/references/commands.md +71 -0
- package/skills/bioinformatics-workflows/references/formats.md +24 -0
- package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
- package/skills/blender-automation/SKILL.md +100 -0
- package/skills/blender-automation/evals/triggers.json +16 -0
- package/skills/blender-automation/references/batch-and-render.md +77 -0
- package/skills/blender-automation/references/bpy-inspection.md +91 -0
- package/skills/blender-automation/references/rig-and-retarget-checks.md +23 -0
- package/skills/brand-strategy/SKILL.md +83 -0
- package/skills/brand-strategy/evals/triggers.json +16 -0
- package/skills/brand-voice/SKILL.md +112 -0
- package/skills/brand-voice/evals/triggers.json +16 -0
- package/skills/browser-qa/SKILL.md +99 -0
- package/skills/browser-qa/evals/triggers.json +16 -0
- package/skills/bun-runtime/SKILL.md +93 -0
- package/skills/bun-runtime/evals/triggers.json +16 -0
- package/skills/change-impact-analysis/SKILL.md +89 -0
- package/skills/change-impact-analysis/evals/triggers.json +16 -0
- package/skills/change-impact-analysis/references/graph-commands.md +28 -0
- package/skills/cisco-ios-config/SKILL.md +101 -0
- package/skills/cisco-ios-config/evals/triggers.json +18 -0
- package/skills/cisco-ios-config/references/verification.md +63 -0
- package/skills/clickhouse-patterns/SKILL.md +101 -0
- package/skills/clickhouse-patterns/evals/triggers.json +18 -0
- package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
- package/skills/clinical-decision-support/SKILL.md +90 -0
- package/skills/clinical-decision-support/evals/triggers.json +16 -0
- package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
- package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
- package/skills/code-tour/SKILL.md +97 -0
- package/skills/code-tour/evals/triggers.json +14 -0
- package/skills/codebase-onboarding/SKILL.md +112 -0
- package/skills/codebase-onboarding/evals/triggers.json +14 -0
- package/skills/cold-outreach-sequences/SKILL.md +90 -0
- package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
- package/skills/content-repurposing/SKILL.md +82 -0
- package/skills/content-repurposing/evals/triggers.json +16 -0
- package/skills/context-budget/SKILL.md +84 -0
- package/skills/context-budget/evals/triggers.json +14 -0
- package/skills/contract-drafting/SKILL.md +96 -0
- package/skills/contract-drafting/evals/triggers.json +16 -0
- package/skills/contract-drafting/references/term-sheets.md +68 -0
- package/skills/contract-first-development/SKILL.md +86 -0
- package/skills/contract-first-development/evals/triggers.json +16 -0
- package/skills/contract-first-development/references/tooling.md +46 -0
- package/skills/conventional-commits/SKILL.md +144 -0
- package/skills/conventional-commits/evals/triggers.json +16 -0
- package/skills/cpp-patterns/SKILL.md +129 -0
- package/skills/cpp-patterns/evals/triggers.json +16 -0
- package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
- package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
- package/skills/cpp-testing/SKILL.md +131 -0
- package/skills/cpp-testing/evals/triggers.json +16 -0
- package/skills/csharp-patterns/SKILL.md +110 -0
- package/skills/csharp-patterns/evals/triggers.json +17 -0
- package/skills/csharp-patterns/references/analyzers.md +59 -0
- package/skills/csharp-testing/SKILL.md +85 -0
- package/skills/csharp-testing/evals/triggers.json +17 -0
- package/skills/csharp-testing/references/integration-tests.md +77 -0
- package/skills/css-architecture/SKILL.md +143 -0
- package/skills/css-architecture/evals/triggers.json +16 -0
- package/skills/customs-trade-compliance/SKILL.md +95 -0
- package/skills/customs-trade-compliance/evals/triggers.json +16 -0
- package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
- package/skills/dart-patterns/SKILL.md +157 -0
- package/skills/dart-patterns/evals/triggers.json +18 -0
- package/skills/dart-testing/SKILL.md +164 -0
- package/skills/dart-testing/evals/triggers.json +18 -0
- package/skills/data-analysis-notebooks/SKILL.md +113 -0
- package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
- package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
- package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
- package/skills/data-pipelines/SKILL.md +90 -0
- package/skills/data-pipelines/evals/triggers.json +16 -0
- package/skills/data-pipelines/references/orchestrators.md +64 -0
- package/skills/database-migrations/SKILL.md +102 -0
- package/skills/database-migrations/evals/triggers.json +16 -0
- package/skills/database-migrations/references/recipes.md +98 -0
- package/skills/database-migrations/references/tools.md +21 -0
- package/skills/dbt-patterns/SKILL.md +96 -0
- package/skills/dbt-patterns/evals/triggers.json +16 -0
- package/skills/dbt-patterns/references/yaml-examples.md +114 -0
- package/skills/decision-council/SKILL.md +98 -0
- package/skills/decision-council/evals/triggers.json +16 -0
- package/skills/deep-research/SKILL.md +107 -0
- package/skills/deep-research/evals/triggers.json +14 -0
- package/skills/dependency-audit/SKILL.md +103 -0
- package/skills/dependency-audit/evals/triggers.json +16 -0
- package/skills/dependency-audit/references/tools.md +124 -0
- package/skills/deployment-strategies/SKILL.md +108 -0
- package/skills/deployment-strategies/evals/triggers.json +16 -0
- package/skills/design-brainstorming/SKILL.md +132 -0
- package/skills/design-brainstorming/evals/behavior.json +55 -0
- package/skills/design-brainstorming/evals/triggers.json +16 -0
- package/skills/design-brainstorming/references/visual-mockups.md +34 -0
- package/skills/desktop-app-testing/SKILL.md +104 -0
- package/skills/desktop-app-testing/evals/triggers.json +16 -0
- package/skills/desktop-app-testing/references/drivers.md +81 -0
- package/skills/django-patterns/SKILL.md +123 -0
- package/skills/django-patterns/evals/triggers.json +16 -0
- package/skills/docker-patterns/SKILL.md +132 -0
- package/skills/docker-patterns/evals/triggers.json +16 -0
- package/skills/docker-patterns/references/dockerfiles.md +105 -0
- package/skills/document-processing/SKILL.md +100 -0
- package/skills/document-processing/evals/triggers.json +17 -0
- package/skills/document-processing/references/extraction-and-ocr.md +71 -0
- package/skills/document-processing/references/forms-and-conversion.md +69 -0
- package/skills/document-processing/references/redaction.md +61 -0
- package/skills/e2e-testing-playwright/SKILL.md +94 -0
- package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
- package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
- package/skills/ef-core-patterns/SKILL.md +117 -0
- package/skills/ef-core-patterns/evals/triggers.json +16 -0
- package/skills/email-deliverability/SKILL.md +99 -0
- package/skills/email-deliverability/evals/triggers.json +17 -0
- package/skills/email-deliverability/references/dns-records.md +85 -0
- package/skills/energy-procurement/SKILL.md +106 -0
- package/skills/energy-procurement/evals/triggers.json +16 -0
- package/skills/error-handling-patterns/SKILL.md +112 -0
- package/skills/error-handling-patterns/evals/triggers.json +18 -0
- package/skills/error-handling-patterns/references/language-idioms.md +49 -0
- package/skills/estimation-and-scoping/SKILL.md +97 -0
- package/skills/estimation-and-scoping/evals/triggers.json +14 -0
- package/skills/evm-dapp-integration/SKILL.md +73 -0
- package/skills/evm-dapp-integration/evals/triggers.json +16 -0
- package/skills/fastapi-patterns/SKILL.md +127 -0
- package/skills/fastapi-patterns/evals/triggers.json +16 -0
- package/skills/ffmpeg-media-processing/SKILL.md +94 -0
- package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
- package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
- package/skills/fhir-integration/SKILL.md +81 -0
- package/skills/fhir-integration/evals/triggers.json +16 -0
- package/skills/fhir-integration/references/search-and-bundles.md +73 -0
- package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
- package/skills/finishing-a-branch/SKILL.md +127 -0
- package/skills/finishing-a-branch/evals/behavior.json +49 -0
- package/skills/finishing-a-branch/evals/triggers.json +16 -0
- package/skills/flask-patterns/SKILL.md +132 -0
- package/skills/flask-patterns/evals/triggers.json +16 -0
- package/skills/flutter-patterns/SKILL.md +99 -0
- package/skills/flutter-patterns/evals/triggers.json +16 -0
- package/skills/flutterwave-integration/SKILL.md +75 -0
- package/skills/flutterwave-integration/evals/triggers.json +16 -0
- package/skills/flutterwave-integration/references/api.md +73 -0
- package/skills/flutterwave-integration/references/webhooks.md +49 -0
- package/skills/freight-carrier-management/SKILL.md +107 -0
- package/skills/freight-carrier-management/evals/triggers.json +16 -0
- package/skills/fsharp-patterns/SKILL.md +133 -0
- package/skills/fsharp-patterns/evals/triggers.json +16 -0
- package/skills/fsharp-testing/SKILL.md +136 -0
- package/skills/fsharp-testing/evals/triggers.json +16 -0
- package/skills/gcp-patterns/SKILL.md +86 -0
- package/skills/gcp-patterns/evals/triggers.json +16 -0
- package/skills/git-workflow/SKILL.md +114 -0
- package/skills/git-workflow/evals/triggers.json +16 -0
- package/skills/git-worktrees/SKILL.md +130 -0
- package/skills/git-worktrees/evals/behavior.json +56 -0
- package/skills/git-worktrees/evals/triggers.json +16 -0
- package/skills/github-actions-ci/SKILL.md +117 -0
- package/skills/github-actions-ci/evals/triggers.json +16 -0
- package/skills/github-api-automation/SKILL.md +101 -0
- package/skills/github-api-automation/evals/triggers.json +17 -0
- package/skills/go-patterns/SKILL.md +118 -0
- package/skills/go-patterns/evals/triggers.json +17 -0
- package/skills/go-patterns/references/concurrency.md +162 -0
- package/skills/go-testing/SKILL.md +154 -0
- package/skills/go-testing/evals/triggers.json +17 -0
- package/skills/google-workspace-integration/SKILL.md +65 -0
- package/skills/google-workspace-integration/evals/triggers.json +17 -0
- package/skills/google-workspace-integration/references/api.md +121 -0
- package/skills/harmonyos-arkts/SKILL.md +117 -0
- package/skills/harmonyos-arkts/evals/triggers.json +16 -0
- package/skills/harmonyos-arkts/references/build-errors.md +42 -0
- package/skills/hexagonal-architecture/SKILL.md +89 -0
- package/skills/hexagonal-architecture/evals/triggers.json +17 -0
- package/skills/hipaa-compliance/SKILL.md +91 -0
- package/skills/hipaa-compliance/evals/triggers.json +18 -0
- package/skills/hipaa-compliance/references/safeguards.md +68 -0
- package/skills/hl7v2-integration/SKILL.md +69 -0
- package/skills/hl7v2-integration/evals/triggers.json +16 -0
- package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
- package/skills/homelab-network-setup/SKILL.md +125 -0
- package/skills/homelab-network-setup/evals/triggers.json +18 -0
- package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
- package/skills/homelab-network-setup/references/wireguard.md +72 -0
- package/skills/hubtel-integration/SKILL.md +77 -0
- package/skills/hubtel-integration/evals/triggers.json +16 -0
- package/skills/hubtel-integration/references/api.md +92 -0
- package/skills/i18n-localization/SKILL.md +114 -0
- package/skills/i18n-localization/evals/triggers.json +16 -0
- package/skills/i18n-localization/references/libraries.md +52 -0
- package/skills/implementation-plans/SKILL.md +117 -0
- package/skills/implementation-plans/evals/behavior.json +54 -0
- package/skills/implementation-plans/evals/triggers.json +16 -0
- package/skills/incident-postmortem/SKILL.md +118 -0
- package/skills/incident-postmortem/evals/triggers.json +14 -0
- package/skills/inventory-demand-planning/SKILL.md +89 -0
- package/skills/inventory-demand-planning/evals/triggers.json +16 -0
- package/skills/inventory-demand-planning/references/formulas.md +62 -0
- package/skills/investor-materials/SKILL.md +127 -0
- package/skills/investor-materials/evals/triggers.json +16 -0
- package/skills/investor-materials/references/templates.md +74 -0
- package/skills/invoicing-and-tax/SKILL.md +84 -0
- package/skills/invoicing-and-tax/evals/triggers.json +17 -0
- package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
- package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
- package/skills/invoicing-and-tax/references/rounding.md +26 -0
- package/skills/ios-platform-features/SKILL.md +99 -0
- package/skills/ios-platform-features/evals/triggers.json +16 -0
- package/skills/ios-platform-features/references/foundation-models.md +90 -0
- package/skills/java-patterns/SKILL.md +141 -0
- package/skills/java-patterns/evals/triggers.json +17 -0
- package/skills/java-testing/SKILL.md +142 -0
- package/skills/java-testing/evals/triggers.json +16 -0
- package/skills/jetpack-compose-patterns/SKILL.md +88 -0
- package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
- package/skills/jira-integration/SKILL.md +92 -0
- package/skills/jira-integration/evals/triggers.json +17 -0
- package/skills/jpa-hibernate/SKILL.md +92 -0
- package/skills/jpa-hibernate/evals/triggers.json +18 -0
- package/skills/jpa-hibernate/references/mapping.md +99 -0
- package/skills/jvm-sql-mappers/SKILL.md +98 -0
- package/skills/jvm-sql-mappers/evals/triggers.json +16 -0
- package/skills/jvm-sql-mappers/references/examples.md +129 -0
- package/skills/kotlin-multiplatform/SKILL.md +97 -0
- package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
- package/skills/kotlin-patterns/SKILL.md +128 -0
- package/skills/kotlin-patterns/evals/triggers.json +16 -0
- package/skills/kotlin-testing/SKILL.md +117 -0
- package/skills/kotlin-testing/evals/triggers.json +16 -0
- package/skills/ktor-patterns/SKILL.md +135 -0
- package/skills/ktor-patterns/evals/triggers.json +18 -0
- package/skills/kubernetes-patterns/SKILL.md +106 -0
- package/skills/kubernetes-patterns/evals/triggers.json +16 -0
- package/skills/kubernetes-patterns/references/manifests.md +115 -0
- package/skills/laravel-patterns/SKILL.md +136 -0
- package/skills/laravel-patterns/evals/triggers.json +16 -0
- package/skills/linear-integration/SKILL.md +98 -0
- package/skills/linear-integration/evals/triggers.json +17 -0
- package/skills/literature-review/SKILL.md +109 -0
- package/skills/literature-review/evals/triggers.json +16 -0
- package/skills/literature-review/references/appraisal.md +41 -0
- package/skills/literature-review/references/search-sources.md +39 -0
- package/skills/llm-app-patterns/SKILL.md +97 -0
- package/skills/llm-app-patterns/evals/triggers.json +17 -0
- package/skills/llm-evals/SKILL.md +98 -0
- package/skills/llm-evals/evals/triggers.json +16 -0
- package/skills/llm-evals/references/graders.md +66 -0
- package/skills/logistics-exception-management/SKILL.md +90 -0
- package/skills/logistics-exception-management/evals/triggers.json +16 -0
- package/skills/manim-animations/SKILL.md +106 -0
- package/skills/manim-animations/evals/triggers.json +16 -0
- package/skills/market-research/SKILL.md +117 -0
- package/skills/market-research/evals/triggers.json +16 -0
- package/skills/marketing-campaign/SKILL.md +111 -0
- package/skills/marketing-campaign/evals/triggers.json +16 -0
- package/skills/mcp-server-patterns/SKILL.md +127 -0
- package/skills/mcp-server-patterns/evals/triggers.json +18 -0
- package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
- package/skills/metrics-dashboards/SKILL.md +113 -0
- package/skills/metrics-dashboards/evals/triggers.json +16 -0
- package/skills/ml-experiment-workflow/SKILL.md +125 -0
- package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
- package/skills/mobile-accessibility/SKILL.md +94 -0
- package/skills/mobile-accessibility/evals/triggers.json +16 -0
- package/skills/mongodb-patterns/SKILL.md +115 -0
- package/skills/mongodb-patterns/evals/triggers.json +18 -0
- package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
- package/skills/mpesa-daraja-integration/SKILL.md +70 -0
- package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
- package/skills/mpesa-daraja-integration/references/api.md +103 -0
- package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
- package/skills/mtn-momo-integration/SKILL.md +66 -0
- package/skills/mtn-momo-integration/evals/triggers.json +16 -0
- package/skills/mtn-momo-integration/references/api.md +153 -0
- package/skills/mtn-momo-integration/references/callbacks.md +92 -0
- package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
- package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
- package/skills/mysql-patterns/SKILL.md +96 -0
- package/skills/mysql-patterns/evals/triggers.json +16 -0
- package/skills/mysql-patterns/references/explain.md +34 -0
- package/skills/mysql-patterns/references/online-ddl.md +41 -0
- package/skills/nestjs-patterns/SKILL.md +114 -0
- package/skills/nestjs-patterns/evals/triggers.json +16 -0
- package/skills/nestjs-patterns/references/testing.md +68 -0
- package/skills/network-automation/SKILL.md +107 -0
- package/skills/network-automation/evals/triggers.json +18 -0
- package/skills/network-automation/references/tool-snippets.md +153 -0
- package/skills/network-design/SKILL.md +98 -0
- package/skills/network-design/evals/triggers.json +16 -0
- package/skills/network-troubleshooting/SKILL.md +152 -0
- package/skills/network-troubleshooting/evals/triggers.json +18 -0
- package/skills/network-troubleshooting/references/commands.md +33 -0
- package/skills/nextjs-patterns/SKILL.md +150 -0
- package/skills/nextjs-patterns/evals/triggers.json +18 -0
- package/skills/nextjs-patterns/references/caching.md +87 -0
- package/skills/node-backend-patterns/SKILL.md +103 -0
- package/skills/node-backend-patterns/evals/triggers.json +16 -0
- package/skills/node-backend-patterns/references/templates.md +122 -0
- package/skills/nuxt-patterns/SKILL.md +103 -0
- package/skills/nuxt-patterns/evals/triggers.json +16 -0
- package/skills/observability/SKILL.md +125 -0
- package/skills/observability/evals/triggers.json +17 -0
- package/skills/observability/references/otel-setup.md +87 -0
- package/skills/observability/references/slo-alerts.md +70 -0
- package/skills/open-source-release/SKILL.md +107 -0
- package/skills/open-source-release/evals/triggers.json +15 -0
- package/skills/open-source-release/references/history-scrub.md +65 -0
- package/skills/parallel-agent-orchestration/SKILL.md +106 -0
- package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
- package/skills/patent-research/SKILL.md +94 -0
- package/skills/patent-research/evals/triggers.json +16 -0
- package/skills/patent-research/references/databases-and-queries.md +52 -0
- package/skills/paystack-integration/SKILL.md +59 -0
- package/skills/paystack-integration/evals/triggers.json +14 -0
- package/skills/paystack-integration/references/api.md +73 -0
- package/skills/paystack-integration/references/mobile-money.md +50 -0
- package/skills/paystack-integration/references/webhooks.md +80 -0
- package/skills/pci-dss-scope/SKILL.md +103 -0
- package/skills/pci-dss-scope/evals/triggers.json +18 -0
- package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
- package/skills/perl-patterns/SKILL.md +135 -0
- package/skills/perl-patterns/evals/triggers.json +18 -0
- package/skills/perl-testing/SKILL.md +126 -0
- package/skills/perl-testing/evals/triggers.json +17 -0
- package/skills/php-patterns/SKILL.md +116 -0
- package/skills/php-patterns/evals/triggers.json +16 -0
- package/skills/php-testing/SKILL.md +123 -0
- package/skills/php-testing/evals/triggers.json +16 -0
- package/skills/postgres-patterns/SKILL.md +103 -0
- package/skills/postgres-patterns/evals/triggers.json +17 -0
- package/skills/postgres-patterns/references/explain.md +59 -0
- package/skills/postgres-patterns/references/locks.md +53 -0
- package/skills/prd-writing/SKILL.md +124 -0
- package/skills/prd-writing/evals/triggers.json +15 -0
- package/skills/prisma-patterns/SKILL.md +83 -0
- package/skills/prisma-patterns/evals/triggers.json +18 -0
- package/skills/prisma-patterns/references/prisma-8.md +46 -0
- package/skills/prisma-patterns/references/workflow.md +50 -0
- package/skills/privacy-compliance/SKILL.md +121 -0
- package/skills/privacy-compliance/evals/triggers.json +18 -0
- package/skills/privacy-compliance/references/jurisdictions.md +51 -0
- package/skills/production-scheduling/SKILL.md +98 -0
- package/skills/production-scheduling/evals/triggers.json +16 -0
- package/skills/prompt-engineering/SKILL.md +92 -0
- package/skills/prompt-engineering/evals/triggers.json +16 -0
- package/skills/prospect-research/SKILL.md +87 -0
- package/skills/prospect-research/evals/triggers.json +16 -0
- package/skills/python-app-distribution/SKILL.md +107 -0
- package/skills/python-app-distribution/evals/triggers.json +16 -0
- package/skills/python-app-distribution/references/pypi-trusted-publishing.md +55 -0
- package/skills/python-app-distribution/references/windows-macos-signing.md +70 -0
- package/skills/python-patterns/SKILL.md +107 -0
- package/skills/python-patterns/evals/triggers.json +16 -0
- package/skills/python-patterns/references/tooling.md +101 -0
- package/skills/python-testing/SKILL.md +126 -0
- package/skills/python-testing/evals/triggers.json +16 -0
- package/skills/python-testing/references/mocking.md +71 -0
- package/skills/pytorch-patterns/SKILL.md +139 -0
- package/skills/pytorch-patterns/evals/triggers.json +16 -0
- package/skills/pytorch-patterns/references/debugging.md +39 -0
- package/skills/quality-nonconformance/SKILL.md +107 -0
- package/skills/quality-nonconformance/evals/triggers.json +16 -0
- package/skills/quality-nonconformance/references/8d-and-capa.md +46 -0
- package/skills/quarkus-patterns/SKILL.md +93 -0
- package/skills/quarkus-patterns/evals/triggers.json +18 -0
- package/skills/rag-pipeline-patterns/SKILL.md +117 -0
- package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
- package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
- package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
- package/skills/rails-patterns/SKILL.md +132 -0
- package/skills/rails-patterns/evals/triggers.json +16 -0
- package/skills/react-native-patterns/SKILL.md +101 -0
- package/skills/react-native-patterns/evals/triggers.json +16 -0
- package/skills/react-patterns/SKILL.md +140 -0
- package/skills/react-patterns/evals/triggers.json +18 -0
- package/skills/react-performance/SKILL.md +107 -0
- package/skills/react-performance/evals/triggers.json +18 -0
- package/skills/react-testing/SKILL.md +121 -0
- package/skills/react-testing/evals/triggers.json +18 -0
- package/skills/react-testing/references/msw.md +64 -0
- package/skills/react-testing/references/queries.md +41 -0
- package/skills/react-testing/references/setup.md +74 -0
- package/skills/recommender-systems/SKILL.md +119 -0
- package/skills/recommender-systems/evals/triggers.json +16 -0
- package/skills/recommender-systems/references/evaluation.md +39 -0
- package/skills/redis-patterns/SKILL.md +109 -0
- package/skills/redis-patterns/evals/triggers.json +18 -0
- package/skills/redis-patterns/references/operations.md +61 -0
- package/skills/refactoring-safely/SKILL.md +107 -0
- package/skills/refactoring-safely/evals/behavior.json +57 -0
- package/skills/refactoring-safely/evals/triggers.json +17 -0
- package/skills/release-management/SKILL.md +141 -0
- package/skills/release-management/evals/triggers.json +16 -0
- package/skills/remotion-video/SKILL.md +91 -0
- package/skills/remotion-video/evals/triggers.json +16 -0
- package/skills/remotion-video/references/lambda.md +66 -0
- package/skills/reproducible-dev-environments/SKILL.md +132 -0
- package/skills/reproducible-dev-environments/evals/triggers.json +16 -0
- package/skills/responding-to-code-review/SKILL.md +124 -0
- package/skills/responding-to-code-review/evals/behavior.json +54 -0
- package/skills/responding-to-code-review/evals/triggers.json +16 -0
- package/skills/returns-reverse-logistics/SKILL.md +97 -0
- package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
- package/skills/ruby-patterns/SKILL.md +127 -0
- package/skills/ruby-patterns/evals/triggers.json +18 -0
- package/skills/ruby-testing/SKILL.md +113 -0
- package/skills/ruby-testing/evals/triggers.json +18 -0
- package/skills/runbook-writing/SKILL.md +101 -0
- package/skills/runbook-writing/evals/triggers.json +14 -0
- package/skills/rust-patterns/SKILL.md +118 -0
- package/skills/rust-patterns/evals/triggers.json +16 -0
- package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
- package/skills/rust-patterns/references/errors-and-traits.md +97 -0
- package/skills/rust-testing/SKILL.md +148 -0
- package/skills/rust-testing/evals/triggers.json +16 -0
- package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
- package/skills/search-first/SKILL.md +73 -0
- package/skills/search-first/evals/triggers.json +14 -0
- package/skills/security-review/SKILL.md +58 -0
- package/skills/security-review/evals/behavior.json +56 -0
- package/skills/security-review/evals/triggers.json +14 -0
- package/skills/security-review/references/checklist.md +54 -0
- package/skills/security-review/scripts/scan-secrets.js +79 -0
- package/skills/seo-audit/SKILL.md +111 -0
- package/skills/seo-audit/evals/triggers.json +16 -0
- package/skills/seo-audit/references/checks.md +65 -0
- package/skills/session-handoff/SKILL.md +101 -0
- package/skills/session-handoff/evals/behavior.json +55 -0
- package/skills/session-handoff/evals/triggers.json +14 -0
- package/skills/skill-authoring/SKILL.md +98 -0
- package/skills/skill-authoring/evals/triggers.json +15 -0
- package/skills/skill-authoring/references/frontmatter.md +40 -0
- package/skills/skill-authoring/references/pressure-testing.md +87 -0
- package/skills/slack-app-integration/SKILL.md +108 -0
- package/skills/slack-app-integration/evals/triggers.json +17 -0
- package/skills/slide-decks/SKILL.md +107 -0
- package/skills/slide-decks/evals/triggers.json +18 -0
- package/skills/slide-decks/references/html-decks.md +86 -0
- package/skills/slide-decks/references/layouts.md +45 -0
- package/skills/slide-decks/references/pptx.md +87 -0
- package/skills/smart-contract-security/SKILL.md +110 -0
- package/skills/smart-contract-security/evals/triggers.json +16 -0
- package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
- package/skills/social-media-publishing/SKILL.md +84 -0
- package/skills/social-media-publishing/evals/triggers.json +17 -0
- package/skills/social-media-publishing/references/platform-apis.md +116 -0
- package/skills/solidity-patterns/SKILL.md +95 -0
- package/skills/solidity-patterns/evals/triggers.json +16 -0
- package/skills/spring-boot-patterns/SKILL.md +128 -0
- package/skills/spring-boot-patterns/evals/triggers.json +18 -0
- package/skills/spring-boot-patterns/references/testing.md +72 -0
- package/skills/stripe-integration/SKILL.md +69 -0
- package/skills/stripe-integration/evals/triggers.json +16 -0
- package/skills/stripe-integration/references/api.md +71 -0
- package/skills/stripe-integration/references/billing.md +58 -0
- package/skills/stripe-integration/references/webhooks.md +76 -0
- package/skills/subagent-driven-development/SKILL.md +109 -0
- package/skills/subagent-driven-development/evals/behavior.json +53 -0
- package/skills/subagent-driven-development/evals/triggers.json +15 -0
- package/skills/subagent-driven-development/references/implementer-brief.md +60 -0
- package/skills/subagent-driven-development/references/reviewer-briefs.md +52 -0
- package/skills/subscription-billing-ops/SKILL.md +118 -0
- package/skills/subscription-billing-ops/evals/triggers.json +17 -0
- package/skills/subscription-billing-ops/references/proration.md +47 -0
- package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
- package/skills/svelte-patterns/SKILL.md +122 -0
- package/skills/svelte-patterns/evals/triggers.json +16 -0
- package/skills/swift-patterns/SKILL.md +113 -0
- package/skills/swift-patterns/evals/triggers.json +16 -0
- package/skills/swift-patterns/references/concurrency-migration.md +40 -0
- package/skills/swift-testing/SKILL.md +121 -0
- package/skills/swift-testing/evals/triggers.json +16 -0
- package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
- package/skills/swiftui-patterns/SKILL.md +102 -0
- package/skills/swiftui-patterns/evals/triggers.json +16 -0
- package/skills/systematic-debugging/SKILL.md +92 -0
- package/skills/systematic-debugging/evals/behavior.json +59 -0
- package/skills/systematic-debugging/evals/triggers.json +16 -0
- package/skills/systematic-debugging/references/condition-waiting.md +52 -0
- package/skills/systematic-debugging/references/root-cause-tracing.md +49 -0
- package/skills/systematic-debugging/references/test-pollution.md +46 -0
- package/skills/tdd-workflow/SKILL.md +69 -0
- package/skills/tdd-workflow/evals/behavior.json +55 -0
- package/skills/tdd-workflow/evals/triggers.json +15 -0
- package/skills/tdd-workflow/references/testing-anti-patterns.md +87 -0
- package/skills/technical-writing/SKILL.md +95 -0
- package/skills/technical-writing/evals/triggers.json +14 -0
- package/skills/terraform-patterns/SKILL.md +122 -0
- package/skills/terraform-patterns/evals/triggers.json +16 -0
- package/skills/terraform-patterns/references/backends.md +67 -0
- package/skills/test-coverage-improvement/SKILL.md +107 -0
- package/skills/test-coverage-improvement/evals/triggers.json +16 -0
- package/skills/threat-modeling/SKILL.md +113 -0
- package/skills/threat-modeling/evals/triggers.json +16 -0
- package/skills/transactional-email/SKILL.md +68 -0
- package/skills/transactional-email/evals/triggers.json +17 -0
- package/skills/transactional-email/references/providers.md +63 -0
- package/skills/typescript-patterns/SKILL.md +122 -0
- package/skills/typescript-patterns/evals/triggers.json +16 -0
- package/skills/typescript-testing/SKILL.md +101 -0
- package/skills/typescript-testing/evals/triggers.json +16 -0
- package/skills/ui-demo-recording/SKILL.md +93 -0
- package/skills/ui-demo-recording/evals/triggers.json +16 -0
- package/skills/ui-demo-recording/references/cursor-and-captions.md +48 -0
- package/skills/ui-demo-recording/references/playwright-recording.md +63 -0
- package/skills/ui-demo-recording/references/post-processing.md +57 -0
- package/skills/ui-design-polish/SKILL.md +113 -0
- package/skills/ui-design-polish/evals/triggers.json +18 -0
- package/skills/ui-design-polish/references/detail-checklist.md +45 -0
- package/skills/ui-design-polish/references/tokens.md +68 -0
- package/skills/ui-flow-audit/SKILL.md +112 -0
- package/skills/ui-flow-audit/evals/triggers.json +17 -0
- package/skills/ui-motion/SKILL.md +103 -0
- package/skills/ui-motion/evals/triggers.json +18 -0
- package/skills/ui-motion/references/patterns.md +138 -0
- package/skills/ui-motion/references/tokens.md +52 -0
- package/skills/unicode-text-processing/SKILL.md +103 -0
- package/skills/unicode-text-processing/evals/triggers.json +17 -0
- package/skills/unicode-text-processing/references/apis.md +89 -0
- package/skills/unicode-text-processing/references/script-notes.md +50 -0
- package/skills/verification-loop/SKILL.md +70 -0
- package/skills/verification-loop/evals/behavior.json +52 -0
- package/skills/verification-loop/evals/triggers.json +14 -0
- package/skills/verification-loop/scripts/detect-checks.js +102 -0
- package/skills/video-editing/SKILL.md +111 -0
- package/skills/video-editing/evals/triggers.json +16 -0
- package/skills/video-editing/references/edl-and-logging.md +44 -0
- package/skills/video-editing/references/ffmpeg-edit-recipes.md +92 -0
- package/skills/video-editing/references/resolve-scripting.md +53 -0
- package/skills/vite-patterns/SKILL.md +117 -0
- package/skills/vite-patterns/evals/triggers.json +16 -0
- package/skills/vue-patterns/SKILL.md +104 -0
- package/skills/vue-patterns/evals/triggers.json +16 -0
- package/skills/web-accessibility/SKILL.md +119 -0
- package/skills/web-accessibility/evals/triggers.json +16 -0
- package/skills/web-performance/SKILL.md +107 -0
- package/skills/web-performance/evals/triggers.json +16 -0
- package/skills/web-scraping/SKILL.md +80 -0
- package/skills/web-scraping/evals/triggers.json +16 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: marketing-campaign
|
|
3
|
+
description: Builds a go-to-market or promotional campaign plan with one measurable objective, a defined audience, positioning and core message, a channel mix, a week-by-week calendar, a budget split and the metrics that decide success. Use when a founder or team is planning a product launch, a seasonal promotion, a user-acquisition push or any time-boxed marketing campaign and needs a plan they can execute and measure.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. No tools required; reads product docs or analytics exports if the user provides them.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: business
|
|
9
|
+
kete-loom/risk: read-only
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Marketing campaign plan
|
|
14
|
+
|
|
15
|
+
Produce a plan someone can run on Monday: one objective, one audience, one message, few channels, a calendar, a budget and the numbers that say whether it worked.
|
|
16
|
+
|
|
17
|
+
## 0. Brief: collect before planning
|
|
18
|
+
|
|
19
|
+
Ask for anything missing. Do not invent figures the plan depends on.
|
|
20
|
+
|
|
21
|
+
1. **Product or offer**: what is being promoted and what is new about it.
|
|
22
|
+
2. **Objective**: one primary outcome with a number and a date ("400 paid sign-ups by 30 June"). If the user gives several, ask which one wins when they conflict.
|
|
23
|
+
3. **Audience**: who buys, who uses, where they already spend attention.
|
|
24
|
+
4. **Budget and people**: total spend, and who will create content and run channels.
|
|
25
|
+
5. **Constraints**: dates, regulated claims (finance, health), markets and languages, brand rules.
|
|
26
|
+
6. **History**: past campaigns, current conversion rates, cost per acquisition, list sizes. If there is none, say the first campaign is also a measurement exercise.
|
|
27
|
+
|
|
28
|
+
**Stop and ask** if there is no measurable objective or no budget range. A plan without them cannot be judged.
|
|
29
|
+
|
|
30
|
+
## 1. Audience
|
|
31
|
+
|
|
32
|
+
Write one primary segment (and at most one secondary) as:
|
|
33
|
+
|
|
34
|
+
- Who they are (role, context, market).
|
|
35
|
+
- The problem or trigger that makes them look for a solution now.
|
|
36
|
+
- What they use today instead, and why it falls short.
|
|
37
|
+
- Where they get information (communities, platforms, publications, people they trust).
|
|
38
|
+
|
|
39
|
+
If the user has research or customer interviews, use their words. Otherwise mark the profile as an assumption to test.
|
|
40
|
+
|
|
41
|
+
## 2. Positioning and message
|
|
42
|
+
|
|
43
|
+
- **Positioning statement**: For <audience> who <need>, <product> is the <category> that <key benefit>, unlike <alternative>, because <proof>.
|
|
44
|
+
- **Core message**: one sentence a customer could repeat.
|
|
45
|
+
- **Three proof points**: facts, numbers, customer quotes or demos. No unprovable superlatives.
|
|
46
|
+
- **Call to action**: one action per touchpoint (sign up, book a demo, buy).
|
|
47
|
+
|
|
48
|
+
If the brand has a voice guide, apply it; the `brand-voice` skill covers that.
|
|
49
|
+
|
|
50
|
+
## 3. Channels
|
|
51
|
+
|
|
52
|
+
Pick two to four channels the audience actually uses and the team can sustain. For each, record its role in the funnel:
|
|
53
|
+
|
|
54
|
+
| Channel | Role | Owned / earned / paid | Content needed | Owner |
|
|
55
|
+
|---|---|---|---|---|
|
|
56
|
+
|
|
57
|
+
Decision rules:
|
|
58
|
+
|
|
59
|
+
- Owned first (email list, existing users, website, social accounts): cheapest, fastest feedback.
|
|
60
|
+
- Paid only with tracking in place (UTM parameters on every link, conversion events firing) and a test budget before the main spend.
|
|
61
|
+
- Earned (press, partners, communities, creators) needs lead time; start outreach before launch week.
|
|
62
|
+
- Drop a channel nobody on the team can run every week.
|
|
63
|
+
|
|
64
|
+
## 4. Calendar
|
|
65
|
+
|
|
66
|
+
Lay out the campaign in phases with dates:
|
|
67
|
+
|
|
68
|
+
1. **Prepare** (assets, landing page, tracking, audiences, outreach).
|
|
69
|
+
2. **Warm-up** (teasers, waitlist, partner briefings).
|
|
70
|
+
3. **Launch** (the main push; concentrated activity across channels).
|
|
71
|
+
4. **Sustain** (follow-ups, retargeting, case studies, reminders).
|
|
72
|
+
5. **Review** (results, learnings, decision on what continues).
|
|
73
|
+
|
|
74
|
+
Give each item a date, channel, asset, owner and status. A week-by-week table is enough.
|
|
75
|
+
|
|
76
|
+
## 5. Budget split
|
|
77
|
+
|
|
78
|
+
- Allocate by role: content production, paid media (spend a small test slice first and scale only the channels that hit the cost-per-result ceiling), tools, partners or creators, contingency.
|
|
79
|
+
- State the assumed cost per result for each paid channel and where the assumption came from (history, the user, or a guess to validate).
|
|
80
|
+
- Show the arithmetic from budget to expected results. If the expected results miss the objective, say so and propose either a smaller objective or more budget. Do not pad the numbers to make it fit.
|
|
81
|
+
|
|
82
|
+
## 6. Success metrics
|
|
83
|
+
|
|
84
|
+
- One **primary metric** tied to the objective.
|
|
85
|
+
- Two to four **leading indicators** per stage (reach, click-through, sign-up rate, activation) with a target.
|
|
86
|
+
- **Guardrails**: cost per acquisition ceiling, unsubscribe or complaint rate, refund rate.
|
|
87
|
+
- How each metric is measured (tool, event name, UTM convention) and when it is reviewed.
|
|
88
|
+
- A decision rule: "If cost per sign-up exceeds X after the test budget, pause the channel and reallocate."
|
|
89
|
+
|
|
90
|
+
## Rules
|
|
91
|
+
|
|
92
|
+
- Never fabricate benchmarks, conversion rates or audience sizes. Use the user's data or label a figure as an assumption.
|
|
93
|
+
- Never recommend buying email lists, spamming communities, fake reviews or undisclosed paid endorsements. Follow consent rules for email and SMS in the target markets, and ask the user to confirm them.
|
|
94
|
+
- Keep it executable by the stated team. Fewer channels done well beats many done badly.
|
|
95
|
+
|
|
96
|
+
## Output format
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
# Campaign plan: <name>
|
|
100
|
+
Objective: <metric, target, date>
|
|
101
|
+
Audience: <primary segment>
|
|
102
|
+
Core message: <one sentence> | CTA: <action>
|
|
103
|
+
|
|
104
|
+
## Positioning and proof points
|
|
105
|
+
## Channels (table)
|
|
106
|
+
## Calendar (week-by-week table)
|
|
107
|
+
## Budget (table with arithmetic to expected results)
|
|
108
|
+
## Metrics, guardrails and decision rules
|
|
109
|
+
## Assumptions to validate
|
|
110
|
+
## Risks and open questions
|
|
111
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Plan a launch campaign for our invoicing app, we have $5,000 and six weeks",
|
|
4
|
+
"We're running a Black Friday promotion for the online store. Help me put together the channels, calendar and budget.",
|
|
5
|
+
"I need a go-to-market campaign to get our first 500 paying users in Accra. Who do we target and how?",
|
|
6
|
+
"Make a campaign plan with success metrics for relaunching our newsletter product",
|
|
7
|
+
"How should I split a small marketing budget between Instagram ads, email and influencers for our product launch?"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Run a technical SEO check on our marketing site and list the indexing problems",
|
|
11
|
+
"Define our brand's tone of voice and give do and don't examples for copywriters",
|
|
12
|
+
"Research our three main competitors and estimate the size of the payroll software market in Kenya",
|
|
13
|
+
"Write the blog post announcing our new feature, around 1200 words",
|
|
14
|
+
"Draft the monthly investor update with our MRR and burn"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mcp-server-patterns
|
|
3
|
+
description: Model Context Protocol server construction, from naming tools and writing their JSON Schema inputs to returning isError results, structured output, tool annotations, OAuth-protected Streamable HTTP or local stdio transports, and testing with the MCP Inspector. Use when creating an MCP server, exposing an API or database to agents as MCP tools, or debugging why a client can't connect to, list or call a server's tools.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Testing uses the MCP Inspector via npx (its README lists Node 22.19 or later). Rules are SDK-agnostic; use the official SDK for your language.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: ai
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/requires: "node, npx"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# MCP server patterns
|
|
15
|
+
|
|
16
|
+
An MCP server is an API whose caller is a language model. Design every tool so a model that has only read its name, description and schema calls it correctly the first time, and so a wrong call does no harm.
|
|
17
|
+
|
|
18
|
+
Protocol details move fast. The current revision when this skill was written is `2026-07-28`; `references/protocol-notes.md` covers what changed from the `2025-xx` revisions. Check modelcontextprotocol.io/specification for the revision your SDK targets before relying on a wire detail.
|
|
19
|
+
|
|
20
|
+
## 0. Before you start
|
|
21
|
+
|
|
22
|
+
1. Ask, or find out, who runs the server: **local** (launched by the user's client as a subprocess → stdio) or **remote** (a hosted service many users connect to → Streamable HTTP with OAuth). **Stop and ask the user** if it isn't clear; the auth model depends on it.
|
|
23
|
+
2. Pick the official SDK for the project's language (TypeScript, Python, C#, Go, Rust, Ruby, Java and others are listed at modelcontextprotocol.io/docs/sdk). Do not hand-roll JSON-RPC.
|
|
24
|
+
3. List the user jobs the server must support (e.g. "find a customer and see their open invoices"), not the endpoints of the API you're wrapping.
|
|
25
|
+
|
|
26
|
+
## 1. Design the tool set
|
|
27
|
+
|
|
28
|
+
- One tool per user job, not one per REST endpoint. `find_customer` that searches by name, email or id beats `get_customer_by_id`, `get_customer_by_email`, `list_customers`.
|
|
29
|
+
- Keep the set small (aim for under about 20 tools per server). Every tool's description costs context in every conversation.
|
|
30
|
+
- Separate reads from writes. Never hide a write inside a tool that sounds like a read.
|
|
31
|
+
- Destructive actions (delete, send, pay, deploy) get their own tool with a clear verb, and should support a dry-run or preview argument where the backend allows.
|
|
32
|
+
|
|
33
|
+
### Naming
|
|
34
|
+
|
|
35
|
+
- Names: 1 to 128 characters from `A-Z a-z 0-9 _ - .`, case-sensitive, unique within the server. Use `verb_noun` in one consistent style: `search_issues`, `create_issue`, `close_issue`.
|
|
36
|
+
- Clients that aggregate servers may prefix names; don't rely on your name being globally unique, and don't encode the server name in every tool.
|
|
37
|
+
- Set `title` for a human-friendly display name.
|
|
38
|
+
|
|
39
|
+
### Descriptions
|
|
40
|
+
|
|
41
|
+
Write each description for the model, in this order: what it does, when to use it (and when to use a sibling tool instead), what it returns, side effects and limits.
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Search issues by text, label or assignee. Use before create_issue to avoid duplicates.
|
|
45
|
+
Returns up to `limit` issues (id, title, state, url), newest first. Read-only.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 2. Input schemas
|
|
49
|
+
|
|
50
|
+
- `inputSchema` is JSON Schema (2020-12 unless `$schema` says otherwise) and must be an object schema. For a tool with no inputs use `{"type": "object", "additionalProperties": false}`.
|
|
51
|
+
- Give every property a `description`, and use `enum`, `minimum`/`maximum`, `pattern`, `format` and `default` instead of explaining constraints in prose.
|
|
52
|
+
- Prefer flat, primitive arguments. Deeply nested objects and free-form JSON strings are where models make mistakes.
|
|
53
|
+
- Use the identifiers the model will have (names, emails, URLs) or return ids from a search tool that it can pass on. Never require an internal id the model cannot discover.
|
|
54
|
+
- Paginate or cap list results with `limit` (with a sane default and maximum) and a `cursor`.
|
|
55
|
+
- **Validate every input on the server** regardless of the schema. The schema helps the model; it is not a security boundary.
|
|
56
|
+
|
|
57
|
+
## 3. Results
|
|
58
|
+
|
|
59
|
+
- Return concise text the model can act on: the fields it needs, not the raw upstream payload. Large blobs blow the context window; truncate and say so ("showing 20 of 312; pass cursor=...").
|
|
60
|
+
- When a tool returns structured data, declare `outputSchema`, return conforming `structuredContent`, and also return the serialized JSON in a text content block for older clients.
|
|
61
|
+
- Use `resource_link` content to point at large items (files, reports) instead of inlining them.
|
|
62
|
+
- Set annotations honestly: `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`. Defaults assume the worst (not read-only, destructive, open world). Clients treat annotations from untrusted servers as hints only, so annotations never replace server-side checks.
|
|
63
|
+
|
|
64
|
+
## 4. Errors
|
|
65
|
+
|
|
66
|
+
Two kinds, and the choice matters:
|
|
67
|
+
|
|
68
|
+
| Situation | Return |
|
|
69
|
+
|---|---|
|
|
70
|
+
| Unknown tool, malformed request, server crash | JSON-RPC error (e.g. `-32602` invalid params, `-32603` internal error) |
|
|
71
|
+
| Bad argument values, upstream API failure, not found, business rule, expired handle | A normal result with `isError: true` and a message that tells the model how to recover |
|
|
72
|
+
|
|
73
|
+
Phrase each tool error as an instruction: `"No customer matches 'acme'. Try search by email, or call list_customers with a prefix."` Never return a stack trace, an internal hostname or a secret in an error.
|
|
74
|
+
|
|
75
|
+
## 5. Transports
|
|
76
|
+
|
|
77
|
+
- **stdio** (local): the server reads newline-delimited JSON-RPC from stdin and writes only valid MCP messages to stdout. **All logging goes to stderr.** A single `print`/`console.log` to stdout breaks the connection; this is the most common local bug. Exit promptly when stdin closes.
|
|
78
|
+
- **Streamable HTTP** (remote): one MCP endpoint (e.g. `https://example.com/mcp`) that accepts POST and answers with JSON or a request-scoped SSE stream. You must validate the `Origin` header (403 if invalid) to block DNS rebinding. When running locally, bind to `127.0.0.1`, not `0.0.0.0`.
|
|
79
|
+
- Do not build the old HTTP+SSE transport (2024-11-05) for new servers; it is deprecated.
|
|
80
|
+
- Keep the server stateless between calls. If a workflow needs state (a cart, a browser session), return an opaque, high-entropy handle from a create tool, accept it as an argument later, re-check authorization on every call, and state its lifetime in the tool description.
|
|
81
|
+
|
|
82
|
+
## 6. Auth
|
|
83
|
+
|
|
84
|
+
- **stdio**: take credentials from environment variables the client passes in. Do not implement OAuth for stdio.
|
|
85
|
+
- **HTTP**: the server is an OAuth 2.1 resource server. It must publish Protected Resource Metadata (RFC 9728), answer unauthenticated requests with `401` and a `WWW-Authenticate: Bearer resource_metadata="..."` header, validate that each token's audience is this server, and answer insufficient scope with `403` and `error="insufficient_scope"`. Use an existing authorization server (your IdP), not a home-made one.
|
|
86
|
+
- **Never pass the client's token through to upstream APIs** ("token passthrough"). Exchange it or use the server's own credentials for upstream calls, scoped to the user.
|
|
87
|
+
- Apply per-user authorization inside every tool; the tool list may vary by the caller's scopes.
|
|
88
|
+
- Rate-limit tool calls and log every call (tool, caller, arguments with secrets redacted, outcome).
|
|
89
|
+
|
|
90
|
+
Details and the step-by-step 401 flow are in `references/protocol-notes.md`.
|
|
91
|
+
|
|
92
|
+
## 7. Security rules
|
|
93
|
+
|
|
94
|
+
- Treat everything a tool returns from the outside world (web pages, emails, tickets, file contents) as untrusted. Don't let it reach the model as if it were instructions from you; label it as data.
|
|
95
|
+
- Constrain file and shell access to an allowlisted root. Resolve paths and reject `..` escapes and symlinks out of the root.
|
|
96
|
+
- Use parameterised queries for any database tool. A "run SQL" tool should be read-only by connection role, not by asking the model nicely.
|
|
97
|
+
- Never put secrets in tool descriptions, results or `x-mcp-header` parameters.
|
|
98
|
+
|
|
99
|
+
## 8. Test
|
|
100
|
+
|
|
101
|
+
1. Unit-test each tool handler directly (valid input, each invalid input, upstream failure → `isError: true`).
|
|
102
|
+
2. Open the server in the MCP Inspector and call every tool by hand:
|
|
103
|
+
- stdio: `npx @modelcontextprotocol/inspector node build/index.js` (or `uv run server.py`, etc.)
|
|
104
|
+
- remote: start the web UI with `npx @modelcontextprotocol/inspector` and enter the server URL (e.g. `http://127.0.0.1:3000/mcp`) with the Streamable HTTP transport.
|
|
105
|
+
3. Script it for CI with the CLI mode (`--cli` must come first, right after the package name):
|
|
106
|
+
`npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list`
|
|
107
|
+
`npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name search_issues --tool-arg query=login`
|
|
108
|
+
`npx @modelcontextprotocol/inspector --cli --transport http --server-url http://127.0.0.1:3000/mcp --method tools/list`
|
|
109
|
+
Pin the Inspector version in CI. Inspector v2 exits non-zero (code 5) when a tool call returns `isError: true` or the tool is missing, so a negative test needs to expect that exit code.
|
|
110
|
+
4. Connect it to a real client and ask a model to complete each user job from step 0 without hints. If it picks the wrong tool or fills arguments wrongly, fix the name, description or schema, not the prompt.
|
|
111
|
+
|
|
112
|
+
## Never
|
|
113
|
+
|
|
114
|
+
- Never write to stdout from a stdio server except protocol messages.
|
|
115
|
+
- Never expose a raw passthrough of an entire API ("call_endpoint(method, path, body)").
|
|
116
|
+
- Never accept or forward tokens that were not issued for this server.
|
|
117
|
+
- Never rely on the schema or annotations for security.
|
|
118
|
+
- Never ship a destructive tool without a test that proves it refuses unauthorized callers.
|
|
119
|
+
|
|
120
|
+
## Report format
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Server: <name> Transport: <stdio | streamable HTTP> Auth: <env | OAuth via ...>
|
|
124
|
+
Tools: <name> (read-only | writes | destructive), ...
|
|
125
|
+
Inspector: tools/list OK, <n>/<n> tools called successfully
|
|
126
|
+
Open issues: <anything not tested, spec revision assumptions>
|
|
127
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Build an MCP server that exposes our Jira instance as tools for Claude and Cursor",
|
|
4
|
+
"My stdio MCP server disconnects right after starting, the client says invalid JSON",
|
|
5
|
+
"How should I name and describe the tools on my Model Context Protocol server?",
|
|
6
|
+
"Add OAuth to our remote MCP server running over streamable HTTP",
|
|
7
|
+
"Turn our internal billing REST API into an MCP server agents can call",
|
|
8
|
+
"Test my MCP server's tools with the inspector before publishing it"
|
|
9
|
+
],
|
|
10
|
+
"should_not_trigger": [
|
|
11
|
+
"Design the overall tool set and sandbox for our autonomous coding agent",
|
|
12
|
+
"Add vector search and reranking over our product manuals for the support bot",
|
|
13
|
+
"Design a clean REST API for our orders service with versioning and pagination",
|
|
14
|
+
"Write prompts that make the model call functions more reliably",
|
|
15
|
+
"Set up OAuth login with Google for our web app users",
|
|
16
|
+
"Review our retrieval-augmented generation code for chunking problems"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# MCP protocol notes
|
|
2
|
+
|
|
3
|
+
Read this when a wire-level detail matters: version negotiation, HTTP headers, auth flow, or interop with older clients. The source of truth is modelcontextprotocol.io/specification; these notes follow revision `2026-07-28`.
|
|
4
|
+
|
|
5
|
+
## Revisions and eras
|
|
6
|
+
|
|
7
|
+
- `2024-11-05`: original revision. HTTP+SSE transport (separate SSE and POST endpoints). Now deprecated.
|
|
8
|
+
- `2025-03-26` to `2025-11-25`: Streamable HTTP with optional sessions (`Mcp-Session-Id`), standalone GET stream for server messages, resumable streams, `initialize` handshake.
|
|
9
|
+
- `2026-07-28`: no `initialize` handshake and no protocol-level sessions. Every request carries its protocol version and client capabilities in `params._meta` (`io.modelcontextprotocol/protocolVersion`, `io.modelcontextprotocol/clientCapabilities`, `io.modelcontextprotocol/clientInfo`). Servers no longer send JSON-RPC requests to clients; sampling, elicitation and roots come back as an `InputRequiredResult` the client answers by retrying the call. Change notifications arrive on a `subscriptions/listen` stream.
|
|
10
|
+
|
|
11
|
+
Your SDK handles most of this. What matters to a server author:
|
|
12
|
+
|
|
13
|
+
- Do not keep per-connection state; the protocol has none. Use explicit handles (see SKILL.md section 5).
|
|
14
|
+
- If you must support older clients, check your SDK's backward-compatibility support rather than implementing both eras yourself.
|
|
15
|
+
|
|
16
|
+
## Streamable HTTP (2026-07-28)
|
|
17
|
+
|
|
18
|
+
- Single endpoint, POST only. GET or DELETE from old clients: `405 Method Not Allowed`. Ignore any `Mcp-Session-Id` and `Last-Event-ID` headers.
|
|
19
|
+
- Request headers the client must send: `MCP-Protocol-Version`, `Mcp-Method`, and `Mcp-Name` for `tools/call`, `resources/read`, `prompts/get`. The server must reject a mismatch between header and body with `400` and JSON-RPC error `-32020` (HeaderMismatch).
|
|
20
|
+
- Unsupported protocol version: `400` with an `UnsupportedProtocolVersionError` listing supported versions.
|
|
21
|
+
- Unknown method: `404` with JSON-RPC `-32601`.
|
|
22
|
+
- Notifications POSTed by the client: `202 Accepted`, no body.
|
|
23
|
+
- Responses: `application/json` or `text/event-stream`. Set `X-Accel-Buffering: no` on SSE responses behind nginx-style proxies.
|
|
24
|
+
- Cancellation on HTTP is the client closing the response stream; stop work when that happens.
|
|
25
|
+
- `x-mcp-header` in a property's schema mirrors that argument into an `Mcp-Param-<Name>` header for routing. Only primitive string, integer or boolean properties reachable through `properties` keys. Never on secrets or PII.
|
|
26
|
+
|
|
27
|
+
## stdio
|
|
28
|
+
|
|
29
|
+
- Newline-delimited JSON-RPC, no embedded newlines, UTF-8.
|
|
30
|
+
- stdout carries only MCP messages; stderr is free for logs.
|
|
31
|
+
- Cancellation is a `notifications/cancelled` notification from the client.
|
|
32
|
+
- Exit when stdin reaches end-of-file.
|
|
33
|
+
|
|
34
|
+
## Authorization flow (HTTP servers)
|
|
35
|
+
|
|
36
|
+
1. Client calls the MCP endpoint without a token.
|
|
37
|
+
2. Server returns `401` with `WWW-Authenticate: Bearer resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource", scope="files:read"`.
|
|
38
|
+
3. Client fetches the Protected Resource Metadata (RFC 9728), which lists `authorization_servers` and `scopes_supported`.
|
|
39
|
+
4. Client discovers the authorization server (RFC 8414 or OpenID Connect Discovery), registers (Client ID Metadata Documents preferred; Dynamic Client Registration is deprecated but allowed), and runs authorization code + PKCE with a `resource` parameter (RFC 8707) naming the MCP server's canonical URI.
|
|
40
|
+
5. Client sends `Authorization: Bearer <token>` on every request. Never in the query string.
|
|
41
|
+
6. Server validates the token per OAuth 2.1 and checks its audience is this server. Invalid or expired: `401`. Insufficient scope: `403` with `WWW-Authenticate: Bearer error="insufficient_scope", scope="...", resource_metadata="..."`, listing all scopes the operation needs in one challenge.
|
|
42
|
+
7. Server must not accept or forward tokens issued for anything else.
|
|
43
|
+
|
|
44
|
+
Keep `offline_access` out of the scopes the server advertises; refresh tokens are a client concern.
|
|
45
|
+
|
|
46
|
+
## Error codes
|
|
47
|
+
|
|
48
|
+
| Code | Meaning |
|
|
49
|
+
|---|---|
|
|
50
|
+
| -32700 | Parse error |
|
|
51
|
+
| -32600 | Invalid request |
|
|
52
|
+
| -32601 | Method not found |
|
|
53
|
+
| -32602 | Invalid params (also: unknown tool) |
|
|
54
|
+
| -32603 | Internal error |
|
|
55
|
+
| -32020 | Header mismatch (HTTP) |
|
|
56
|
+
| -32021 | Missing required client capability |
|
|
57
|
+
| -32022 | Unsupported protocol version |
|
|
58
|
+
|
|
59
|
+
Tool execution failures are not JSON-RPC errors: return a result with `isError: true`.
|
|
60
|
+
|
|
61
|
+
## Tool annotation defaults
|
|
62
|
+
|
|
63
|
+
| Hint | Default | Meaning when true |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `readOnlyHint` | false | Does not modify its environment |
|
|
66
|
+
| `destructiveHint` | true | May delete or overwrite (only meaningful if not read-only) |
|
|
67
|
+
| `idempotentHint` | false | Repeating with same args has no extra effect (only meaningful if not read-only) |
|
|
68
|
+
| `openWorldHint` | true | Talks to external systems (web, third-party APIs) |
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metrics-dashboards
|
|
3
|
+
description: Designs business and product metric dashboards that people act on, starting from the decisions the audience makes, writing each metric as a precise definition with formula, grain, filters, time zone and owner, picking a chart type per question, laying out headline numbers then trends then breakdowns, showing data freshness and quality status on the page, and cutting vanity metrics that never change a decision. Use when planning a KPI or operations dashboard, a dashboard nobody trusts or opens, two reports disagree on the same number, or choosing which metrics and charts belong on a Looker, Metabase, Superset, Tableau, Power BI or Grafana board.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Tool-neutral; works with any BI or dashboard tool. Querying data needs the project's warehouse or database client.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: data
|
|
9
|
+
kete-loom/risk: read-only
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Metrics dashboards
|
|
14
|
+
|
|
15
|
+
A dashboard earns its place when a named person looks at it on a schedule and it changes what they do. Design for that person, define every number so two people compute it the same way, and show when the data cannot be trusted.
|
|
16
|
+
|
|
17
|
+
## 1. Start from decisions, not data
|
|
18
|
+
|
|
19
|
+
Ask the user (and **stop until you have answers**):
|
|
20
|
+
|
|
21
|
+
1. **Who** looks at it (role, not "everyone") and **how often** (live, daily stand-up, weekly review, monthly board)?
|
|
22
|
+
2. **What decisions** do they make with it? ("Add support staff", "pause a campaign", "page on-call".)
|
|
23
|
+
3. **What would make them act?** A threshold, a target, or a change versus last period.
|
|
24
|
+
|
|
25
|
+
Write one line per decision: *"<Audience> uses <metric> to decide <action> when <condition>."* Any metric that fits no line is a candidate to cut.
|
|
26
|
+
|
|
27
|
+
## 2. Define every metric precisely
|
|
28
|
+
|
|
29
|
+
Fill this card for each metric before building any chart. Put the cards in the repo or the BI tool's metric layer (dbt semantic layer, LookML, Cube, the tool's own) so they are defined once.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Name: Weekly active customers
|
|
33
|
+
Question: How many paying customers used the product this week?
|
|
34
|
+
Formula: count(distinct customer_id) where event in (core actions) and plan != 'free'
|
|
35
|
+
Grain: one value per ISO week (Mon-Sun)
|
|
36
|
+
Time zone: UTC (state it; local-time reports will differ)
|
|
37
|
+
Filters: excludes internal and test accounts (is_internal = false)
|
|
38
|
+
Source: analytics.fct_events, analytics.dim_customers
|
|
39
|
+
Owner: <person or team who answers questions about it>
|
|
40
|
+
Target/alert: <target or threshold, if any>
|
|
41
|
+
Caveats: events before 2025-03-01 missing mobile app
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Rules:
|
|
45
|
+
|
|
46
|
+
- **Ratios state numerator and denominator** and whether the result is an average of ratios or a ratio of sums.
|
|
47
|
+
- **Counts say what is counted once** (distinct users, sessions, orders) and over what window.
|
|
48
|
+
- **Money states currency, gross or net, and tax and refund treatment.**
|
|
49
|
+
- If two reports disagree, compare their cards line by line; the difference is almost always filters, time zone, or a different window. Do not average them or pick one silently: report the cause to the user.
|
|
50
|
+
|
|
51
|
+
## 3. Cut vanity metrics
|
|
52
|
+
|
|
53
|
+
Remove or demote a metric when:
|
|
54
|
+
|
|
55
|
+
- it only ever goes up (cumulative signups, total page views all time);
|
|
56
|
+
- no one can name an action they would take if it moved;
|
|
57
|
+
- it is easy to game without improving the outcome (raw clicks, time on page alone);
|
|
58
|
+
- it duplicates another metric on the board.
|
|
59
|
+
|
|
60
|
+
Prefer rates and per-unit measures (conversion rate, revenue per active customer, p95 latency) and cohort or period-over-period views over all-time totals. Pair a metric that can be gamed with a counter-metric (tickets closed with reopen rate; signups with activation rate).
|
|
61
|
+
|
|
62
|
+
## 4. Choose the chart for the question
|
|
63
|
+
|
|
64
|
+
| Question | Use | Avoid |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| Where are we now versus target? | Single number with comparison (vs last period, vs target) | Gauges and dials |
|
|
67
|
+
| How is it trending? | Line chart, time on x-axis, consistent intervals | Pie, 3D, dual y-axes |
|
|
68
|
+
| How do categories compare? | Horizontal bar, sorted by value | Pie with more than 3 to 4 slices |
|
|
69
|
+
| What makes up the total? | Stacked bar (few parts) or a table | Donut with many slices |
|
|
70
|
+
| How is it distributed? | Histogram or box plot; show percentiles | Averages alone for skewed data like latency or revenue |
|
|
71
|
+
| Which items need attention? | Sorted table with conditional formatting | Dense heatmap without labels |
|
|
72
|
+
| Did the funnel leak? | Funnel or step bar with conversion between steps | |
|
|
73
|
+
|
|
74
|
+
Chart rules: start bar axes at zero; label units and time zone; mark incomplete periods (the current day or week) so a partial bar is not read as a drop; annotate known events (launch, outage, pricing change); use color for meaning (bad, good, highlighted series), not decoration, and do not rely on color alone.
|
|
75
|
+
|
|
76
|
+
## 5. Layout
|
|
77
|
+
|
|
78
|
+
1. **Top row**: 3 to 6 headline numbers tied to the decisions in step 1, each with its comparison.
|
|
79
|
+
2. **Middle**: trends for those same metrics.
|
|
80
|
+
3. **Bottom**: breakdowns and drill-down tables (by segment, region, channel).
|
|
81
|
+
4. Global filters (date range, segment) at the top, applied to every tile; say so if a tile ignores a filter.
|
|
82
|
+
5. One dashboard per audience and cadence. If it needs scrolling through more than two screens or more than about 12 tiles, split it.
|
|
83
|
+
6. Each tile has a title that is a question or a plain name, plus a short description or link to its metric card.
|
|
84
|
+
|
|
85
|
+
## 6. Freshness and data quality on the page
|
|
86
|
+
|
|
87
|
+
- Show **"Data as of <timestamp, time zone>"** from the actual `max(loaded_at)` of the source, not the page render time.
|
|
88
|
+
- Show a status when an upstream check failed or the data is late ("Orders data delayed: last load 09:10 UTC, expected 06:00"). Pull this from the pipeline's freshness and test results rather than typing it by hand.
|
|
89
|
+
- Match refresh cadence to the decision cadence; a weekly review does not need a 1-minute refresh.
|
|
90
|
+
- Note known gaps and definition changes on the dashboard with the date they took effect.
|
|
91
|
+
|
|
92
|
+
## 7. Build and verify
|
|
93
|
+
|
|
94
|
+
1. Write the query for each metric from its card; reuse the metric layer or a shared model rather than copying SQL per tile.
|
|
95
|
+
2. Check each headline number against an independent count (a direct query, the source system's own report) for one recent period. Report any gap above 1% to the user with its cause.
|
|
96
|
+
3. Check edge cases: empty segments, the current partial period, time-zone boundaries, and a filter combination with no data.
|
|
97
|
+
4. Ask the intended audience to read it once and say what they would do; adjust or cut tiles they skip.
|
|
98
|
+
5. Set a review date (for example quarterly) to delete tiles no one uses; most BI tools report view counts.
|
|
99
|
+
|
|
100
|
+
## Never
|
|
101
|
+
|
|
102
|
+
- Never ship a metric without a written definition and owner.
|
|
103
|
+
- Never present a partial period as a complete one.
|
|
104
|
+
- Never change a metric's definition without a dated note on the dashboard and telling its owner.
|
|
105
|
+
- Never hide a failed data check by showing the last good number with no warning.
|
|
106
|
+
|
|
107
|
+
## Report back
|
|
108
|
+
|
|
109
|
+
- Audience, cadence and the decision lines.
|
|
110
|
+
- Metric cards (one per metric) and the metrics cut, with reasons.
|
|
111
|
+
- Layout: tiles in order with chart type.
|
|
112
|
+
- Verification results: each headline number versus its independent check.
|
|
113
|
+
- Freshness and quality indicators and where they read from.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Help me design a KPI dashboard for our support team's weekly review",
|
|
4
|
+
"Finance and product report different monthly active user numbers, figure out why and fix the definition",
|
|
5
|
+
"Nobody uses our Metabase dashboard, how should we redesign it?",
|
|
6
|
+
"Which chart should I use to show conversion by marketing channel on the growth dashboard?",
|
|
7
|
+
"Add a data freshness indicator to our Looker operations board"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Build the dbt mart that feeds the revenue dashboard",
|
|
11
|
+
"Write the nightly job that loads Stripe charges into the warehouse",
|
|
12
|
+
"Pick the five metrics investors care about for our seed pitch deck",
|
|
13
|
+
"Set up Prometheus alerts for API p99 latency above 500ms",
|
|
14
|
+
"Run a statistical test on last month's A/B experiment results in a notebook"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ml-experiment-workflow
|
|
3
|
+
description: Plans and runs machine learning experiments so results can be trusted, from a dumb baseline and leakage-free train, validation and test splits, through tracked runs, metrics chosen to match the business goal, and ablations, to turning a notebook into a repeatable pipeline. Use when starting a new model, comparing approaches, deciding whether an improvement is real, or productionising notebook experiments.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Framework-agnostic (scikit-learn, PyTorch, XGBoost and others); needs Python to run experiments.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: ai
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/requires: "python, git"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# ML experiment workflow
|
|
15
|
+
|
|
16
|
+
An experiment is only useful if someone else could rerun it and get the same answer, and if the number it reports means what the user thinks it means. Follow these steps in order. For PyTorch training-loop mechanics use the `pytorch-patterns` skill; for evaluating LLM outputs use `llm-evals`.
|
|
17
|
+
|
|
18
|
+
## 1. Pin down the goal
|
|
19
|
+
|
|
20
|
+
Write these down with the user before touching data:
|
|
21
|
+
|
|
22
|
+
1. **Decision.** What will be done differently if the model is good? (Auto-approve claims, rank search results, flag churn risk.)
|
|
23
|
+
2. **Metric that matches it.** Pick from the cost of errors, not habit:
|
|
24
|
+
- Imbalanced classes: precision/recall at an operating threshold, PR-AUC, or cost-weighted error. Accuracy is misleading when one class is 95% of the data.
|
|
25
|
+
- Ranking: NDCG@k, recall@k, MRR at the k the product shows.
|
|
26
|
+
- Probabilities used downstream: log loss and calibration (Brier score, reliability plot).
|
|
27
|
+
- Regression: MAE when all errors cost the same, RMSE when large errors are much worse, MAPE only when targets are never near zero.
|
|
28
|
+
3. **Bar to beat.** The current system's number, or a minimum the decision needs.
|
|
29
|
+
4. **Unit of prediction.** Per user, per transaction, per day? This drives the split.
|
|
30
|
+
|
|
31
|
+
**Stop and ask** if the user cannot name the decision or the metric. Don't pick one silently.
|
|
32
|
+
|
|
33
|
+
## 2. Split without leakage
|
|
34
|
+
|
|
35
|
+
Decide the split before any exploration, then never look at the test set until the end.
|
|
36
|
+
|
|
37
|
+
- **Time-ordered data** (forecasting, anything predicted about the future): split by time. Train on the past, validate and test on later periods. Use `TimeSeriesSplit` or a rolling-origin scheme, not random K-fold. When the label looks ahead (for example "churns in the next 30 days"), leave a gap of at least that horizon between train and validation (`TimeSeriesSplit(gap=...)`) so training labels do not overlap the validation period.
|
|
38
|
+
- **Grouped data** (several rows per patient, user, device, document): split by group so no group appears on both sides. Use `GroupKFold` / `GroupShuffleSplit`.
|
|
39
|
+
- **Imbalanced labels**: stratify (`StratifiedKFold`, `StratifiedGroupKFold`).
|
|
40
|
+
- **Duplicates**: dedupe, or group near-duplicates, before splitting.
|
|
41
|
+
|
|
42
|
+
Leakage checklist (any yes means fix before continuing):
|
|
43
|
+
|
|
44
|
+
- Is any preprocessing (scaling, imputation, target encoding, feature selection, vocabulary, PCA) fitted on data that includes validation or test rows? Fit it inside the training fold only; in scikit-learn, put it in a `Pipeline` passed to cross-validation.
|
|
45
|
+
- Does any feature use information not available at prediction time (a later timestamp, a status set after the outcome, an aggregate over the whole dataset)?
|
|
46
|
+
- Was the test set used to choose features, hyperparameters, thresholds or the stopping epoch?
|
|
47
|
+
- Is a feature suspiciously predictive on its own? Check top-importance features one by one.
|
|
48
|
+
|
|
49
|
+
## 3. Baselines first
|
|
50
|
+
|
|
51
|
+
Before any real model, record:
|
|
52
|
+
|
|
53
|
+
1. A trivial baseline: majority class / mean prediction / "same as last period" / popularity ranking.
|
|
54
|
+
2. A simple model: logistic or linear regression, or gradient-boosted trees for tabular data, with default settings.
|
|
55
|
+
3. The current production system, if there is one.
|
|
56
|
+
|
|
57
|
+
If a complex model does not clearly beat the simple one, report that; it is a result, not a failure.
|
|
58
|
+
|
|
59
|
+
## 4. Track every run
|
|
60
|
+
|
|
61
|
+
Each run records, automatically:
|
|
62
|
+
|
|
63
|
+
- git commit (and whether the tree was dirty), config/hyperparameters, seed
|
|
64
|
+
- dataset version: file hash, snapshot id or query plus date
|
|
65
|
+
- metrics on validation (and test only for the final run), with the split definition
|
|
66
|
+
- environment: Python and key library versions, hardware
|
|
67
|
+
- artifacts: model file, predictions on the validation set
|
|
68
|
+
|
|
69
|
+
Use whatever the project already has (MLflow, Weights & Biases, DVC, a CSV log). If there's nothing, write one JSON line per run to a log file and commit the code that writes it. Don't add a tracking service the user did not ask for.
|
|
70
|
+
|
|
71
|
+
## 5. Decide whether a gain is real
|
|
72
|
+
|
|
73
|
+
- Run the leading candidates with at least 3 seeds (or use cross-validation folds) and report mean and spread, not the best run.
|
|
74
|
+
- A gain smaller than the seed-to-seed spread is noise. Say so.
|
|
75
|
+
- For a single held-out set, use a paired bootstrap over test examples to get an interval on the difference.
|
|
76
|
+
- Compare models on the same split, the same preprocessing and the same eval code.
|
|
77
|
+
- Look at the errors: slice the metric by important segments (region, device, class, new vs returning users). An average gain that hides a regression on a key segment must be reported.
|
|
78
|
+
|
|
79
|
+
## 6. Ablations
|
|
80
|
+
|
|
81
|
+
When a model has several changes stacked together, remove one at a time from the final configuration and rerun. Report a table:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
| Variant | Val metric (mean ± std, n seeds) | Δ vs full |
|
|
85
|
+
|--------------------------|----------------------------------|-----------|
|
|
86
|
+
| Full | 0.812 ± 0.004 | — |
|
|
87
|
+
| − feature group X | 0.809 ± 0.005 | −0.003 |
|
|
88
|
+
| − augmentation | 0.781 ± 0.006 | −0.031 |
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Drop any component whose removal does not hurt beyond noise; it is complexity with no evidence behind it.
|
|
92
|
+
|
|
93
|
+
## 7. From notebook to pipeline
|
|
94
|
+
|
|
95
|
+
Do this once an approach is worth keeping:
|
|
96
|
+
|
|
97
|
+
1. Move code out of cells into modules with functions: `load_data`, `build_features`, `split`, `train`, `evaluate`. The notebook then only imports and calls them.
|
|
98
|
+
2. Put every constant (paths, dates, hyperparameters, seed) in one config file.
|
|
99
|
+
3. Provide one command that runs the whole thing end to end, for example `python -m project.train --config configs/baseline.yaml`.
|
|
100
|
+
4. Add tests for the feature code and the split: a test that train and test share no group ids or overlapping time ranges is cheap and catches the worst bugs.
|
|
101
|
+
5. Rerun from a clean checkout and confirm the metric matches the notebook within seed noise. If it does not, find out why before anything else.
|
|
102
|
+
|
|
103
|
+
## 8. Final evaluation
|
|
104
|
+
|
|
105
|
+
Only after model, features and threshold are frozen: evaluate once on the test set. If the test result is then used to change anything, that set is no longer a test set; say so and hold out new data.
|
|
106
|
+
|
|
107
|
+
## Never
|
|
108
|
+
|
|
109
|
+
- Never report a test-set number that was used for tuning.
|
|
110
|
+
- Never report the best of many seeds as the result.
|
|
111
|
+
- Never fit preprocessing on the full dataset before splitting.
|
|
112
|
+
- Never claim an improvement without the baseline beside it.
|
|
113
|
+
|
|
114
|
+
## Report
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
Goal: <decision> | Metric: <metric @ threshold/k> | Bar: <number>
|
|
118
|
+
Split: <method, sizes, date ranges or group key>
|
|
119
|
+
Results (validation, n seeds):
|
|
120
|
+
baseline: ... | simple model: ... | candidate: ...
|
|
121
|
+
Test (final, once): ...
|
|
122
|
+
Leakage checks: <passed / issues found>
|
|
123
|
+
Caveats: <segments that regressed, what was not checked>
|
|
124
|
+
Reproduce: <exact command and commit>
|
|
125
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"We want to predict customer churn next quarter. How should I set up the experiment and which metric should we use?",
|
|
4
|
+
"My new model is 0.4% better on validation than the old one. Is that a real improvement?",
|
|
5
|
+
"Turn my exploratory Jupyter notebook into a reproducible training pipeline with tracked runs",
|
|
6
|
+
"Plan an ablation study for the three changes we stacked into the fraud model",
|
|
7
|
+
"How do I split patient records into train and test so the same patient never shows up in both?"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"My torch DataLoader is slow and the GPU sits at 20% utilisation",
|
|
11
|
+
"Check this pull request's feature engineering code for target leakage and broadcasting bugs",
|
|
12
|
+
"Write a SQL query that counts weekly active users by country",
|
|
13
|
+
"Score our RAG assistant's answers for faithfulness against the source documents",
|
|
14
|
+
"Benchmark this sorting function against the old version and tell me if it's faster"
|
|
15
|
+
]
|
|
16
|
+
}
|