@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,46 @@
|
|
|
1
|
+
# Prisma 8 differences
|
|
2
|
+
|
|
3
|
+
Prisma 8 replaces the generated `PrismaClient` with a contract-based client. At the time this was written (October 2026) it was a **release candidate** and the docs said details may still change. Check https://www.prisma.io/docs/orm/release-status and the "Coming from Prisma ORM 7" guide before relying on anything here, and keep using the 6/7 rules in `SKILL.md` for projects that haven't migrated.
|
|
4
|
+
|
|
5
|
+
Prisma 7 remains supported (bug fixes and security updates for 18 months after Prisma 8 reaches general availability). Do not migrate a project to Prisma 8 unless the user asks.
|
|
6
|
+
|
|
7
|
+
## Databases
|
|
8
|
+
|
|
9
|
+
PostgreSQL, SQLite and MongoDB. There is no MySQL support, so a MySQL project stays on Prisma 7.
|
|
10
|
+
|
|
11
|
+
## Files
|
|
12
|
+
|
|
13
|
+
- Contract: `src/prisma/contract.prisma`, first line `// use prisma-8`. No `generator` or `datasource` block; connection settings go in the `orm` section of `prisma.config.ts`.
|
|
14
|
+
- Database types are field types: `VarChar(255)` instead of `String @db.VarChar(255)`. `Json` means PostgreSQL `json`; use `Jsonb` for `jsonb`.
|
|
15
|
+
- SQL defaults use `` sql`...` `` instead of `dbgenerated(...)`. `cuid()` is written `cuid(2)`.
|
|
16
|
+
- Implicit many-to-many relations need an explicit join model.
|
|
17
|
+
|
|
18
|
+
## Commands
|
|
19
|
+
|
|
20
|
+
| Prisma 7 | Prisma 8 |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `prisma generate` | `prisma contract emit` |
|
|
23
|
+
| `prisma migrate dev` | `prisma db update`, or `prisma migration plan` then `prisma db migrate` |
|
|
24
|
+
| `prisma migrate deploy` | `prisma db migrate` |
|
|
25
|
+
| `prisma db pull` | `prisma contract infer` |
|
|
26
|
+
| `prisma migrate diff` | `prisma db update --dry-run` or `prisma migration show` |
|
|
27
|
+
| `prisma migrate reset`, `prisma db seed` | none |
|
|
28
|
+
|
|
29
|
+
## Client and queries
|
|
30
|
+
|
|
31
|
+
- Create `db` once (for PostgreSQL in `src/prisma/db.ts`, with `postgres<Contract>(...)` from `@prisma/orm-postgres/runtime`).
|
|
32
|
+
- Models live under `db.orm.<schema>.<Model>`, for example `db.orm.public.User`.
|
|
33
|
+
- `findMany` → `.where(...).all()`; `findFirst`/`findUnique` → `.first()` (returns `null`); `select` → `.select("id", "email")`; `take`/`skip` → `.limit()`/`.offset()`.
|
|
34
|
+
- Relations: `.include("posts")`. Nested writes are limited to `create`, `connect` and `disconnect`. `relationLoadStrategy` is gone.
|
|
35
|
+
- Errors carry codes such as `RUNTIME.NO_ROWS` and `error.sqlState`; the `P2002`-style codes are gone.
|
|
36
|
+
|
|
37
|
+
## Transactions
|
|
38
|
+
|
|
39
|
+
- `db.transaction(async (tx) => { ... })`, querying through `tx.orm`. There is no array form; write the steps one after another in the callback.
|
|
40
|
+
- No `timeout`, `maxWait` or `isolationLevel` options and no automatic retries. Set a database-side limit (PostgreSQL `idle_in_transaction_session_timeout`, or `transaction_timeout` on PostgreSQL 17+) and run `SET TRANSACTION ISOLATION LEVEL ...` as the first statement when you need another level.
|
|
41
|
+
- Transactions don't nest: pass `tx` into helpers instead of starting another transaction.
|
|
42
|
+
- The MongoDB client has no `db.transaction`; use the MongoDB driver's session API.
|
|
43
|
+
|
|
44
|
+
## Raw SQL
|
|
45
|
+
|
|
46
|
+
`$queryRaw`, `$executeRaw`, `Prisma.sql`, `Prisma.join`, `Prisma.raw` and TypedSQL are gone. Raw SQL goes through the `db.raw.sql` tagged template: reads end in `.returnsRow({...}).build()` and run with `db.runtime().query(...)`; writes end in `.affectedCount()` and run with `db.runtime().execute(...)`. The injection rule stays the same: values are parameters, identifiers come from an allow-list.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Prisma migration workflow (Prisma 6 and 7)
|
|
2
|
+
|
|
3
|
+
Read this before creating, editing or deploying a migration. For Prisma 8, use `references/prisma-8.md` instead.
|
|
4
|
+
|
|
5
|
+
## Local development
|
|
6
|
+
|
|
7
|
+
1. Edit `schema.prisma`.
|
|
8
|
+
2. Create and apply the migration on your **local** database:
|
|
9
|
+
```
|
|
10
|
+
npx prisma migrate dev --name add_order_status
|
|
11
|
+
```
|
|
12
|
+
It diffs the schema against the migration history using a shadow database, writes `prisma/migrations/<timestamp>_add_order_status/migration.sql`, and applies it.
|
|
13
|
+
3. On Prisma 7, run `npx prisma generate` afterwards; `migrate dev` no longer generates the client for you.
|
|
14
|
+
4. Read the generated SQL. Edit it before committing when Prisma can't infer intent:
|
|
15
|
+
- A renamed column shows up as drop plus add, which loses data. Replace it with `ALTER TABLE ... RENAME COLUMN`.
|
|
16
|
+
- A new required column on a table with rows needs a default or a backfill step.
|
|
17
|
+
- Large tables: on PostgreSQL, change `CREATE INDEX` to `CREATE INDEX CONCURRENTLY` in its own migration file (it can't run inside a transaction).
|
|
18
|
+
5. Use `npx prisma migrate dev --create-only` to write the file without applying it, when you need to edit it first.
|
|
19
|
+
6. Commit the migration folder together with the schema change.
|
|
20
|
+
|
|
21
|
+
## Deploy (CI, staging, production)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
npx prisma migrate deploy
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- Applies pending migrations in order. It never creates migrations, never resets, and needs no shadow database.
|
|
28
|
+
- Run it once per deploy, from one place (a release step or job), not from every app instance at boot.
|
|
29
|
+
- Use a direct, unpooled connection.
|
|
30
|
+
- Check state first with `npx prisma migrate status`.
|
|
31
|
+
|
|
32
|
+
## Expand and contract for zero downtime
|
|
33
|
+
|
|
34
|
+
Old and new app versions run side by side during a deploy, so split breaking changes:
|
|
35
|
+
|
|
36
|
+
1. **Expand**: add the new column or table (nullable or with a default). Deploy code that writes both and reads the old.
|
|
37
|
+
2. **Backfill** in batches from a script.
|
|
38
|
+
3. Deploy code that reads the new column.
|
|
39
|
+
4. **Contract**: drop the old column in a later migration.
|
|
40
|
+
|
|
41
|
+
## When things go wrong
|
|
42
|
+
|
|
43
|
+
| Situation | Action |
|
|
44
|
+
|---|---|
|
|
45
|
+
| Drift detected in development | `npx prisma migrate dev` offers a reset; fine only on a local throwaway database |
|
|
46
|
+
| A deploy failed half way | Fix the database by hand, then `npx prisma migrate resolve --applied <name>` or `--rolled-back <name>` |
|
|
47
|
+
| Existing database with no migration history | Baseline: write `prisma/migrations/0_init/migration.sql` with `prisma migrate diff --from-empty --to-schema prisma/schema.prisma --script` (older Prisma 6 releases call this flag `--to-schema-datamodel`; check `npx prisma migrate diff --help`), then `prisma migrate resolve --applied 0_init` |
|
|
48
|
+
| Need the SQL between two states | `prisma migrate diff` with `--from-*` and `--to-*` flags. Prisma 7 removed the URL flags; use `--from-config-datasource` / `--to-config-datasource`, and treat "No difference detected" as suspect until you've confirmed the datasource is configured |
|
|
49
|
+
|
|
50
|
+
Never run `migrate reset` or `db push` on a shared database; both can drop data. Ask the user before running `migrate resolve` anywhere except locally.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: privacy-compliance
|
|
3
|
+
description: Turns data protection law (EU/UK GDPR, Ghana Data Protection Act 2012, Nigeria Data Protection Act 2023, Kenya Data Protection Act 2019) into engineering work on personal data, covering data mapping, lawful basis and consent records, retention and deletion jobs, subject access and erasure requests, cross-border transfers to cloud vendors, and breach notice timelines. It is engineering guidance, not legal advice. Use when a feature collects or shares personal data, when adding consent banners or account deletion, when answering a data subject request, or when preparing for a privacy audit in Europe or Africa.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Works on any codebase; no CLI needed. Statutory detail lives in references/jurisdictions.md and must be checked against the regulator's current text.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: compliance
|
|
9
|
+
kete-loom/risk: writes-files
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Privacy compliance
|
|
14
|
+
|
|
15
|
+
Build systems that know what personal data they hold, why they hold it, where it goes and how to delete it. Most privacy failures are engineering failures: data nobody mapped, logs nobody purged, a vendor nobody listed.
|
|
16
|
+
|
|
17
|
+
## Boundary: this is not legal advice
|
|
18
|
+
|
|
19
|
+
- You help with design and code. You do not decide whether processing is lawful, which law applies, or whether a breach must be reported. A lawyer or the organisation's data protection officer (DPO) decides those.
|
|
20
|
+
- Say this once, plainly, when the user asks a legal question, then carry on with the engineering work.
|
|
21
|
+
- **Stop and ask the user** who their DPO or privacy counsel is before you write a privacy notice, a consent text, a breach notice, or a reply to a regulator. Draft it for their review; never present it as final.
|
|
22
|
+
|
|
23
|
+
## Step 1: find out which laws are in play
|
|
24
|
+
|
|
25
|
+
Ask, or find in the codebase and docs:
|
|
26
|
+
|
|
27
|
+
1. Where the organisation is established, and where its users live (GDPR, for example, reaches non-EU companies that target people in the EU).
|
|
28
|
+
2. Which countries the data is stored or processed in (cloud regions, vendors, support teams).
|
|
29
|
+
3. Whether it processes special categories: health, biometrics, religion, ethnicity, sexual life, children's data, financial or national ID numbers. These raise the bar everywhere.
|
|
30
|
+
4. Whether the processing is high risk (large-scale special category data, profiling, systematic monitoring, new tech such as biometrics). GDPR and the Nigerian and Kenyan Acts all expect a data protection impact assessment (DPIA) for this. **Stop and ask the user** whether a DPIA exists before building such a feature; offer to supply the data map and controls for it.
|
|
31
|
+
|
|
32
|
+
Then read `references/jurisdictions.md` for the regulator, registration duty, breach clock and transfer rules of each law. If the user's country is not listed, say so and do not guess its rules.
|
|
33
|
+
|
|
34
|
+
## Step 2: map the data
|
|
35
|
+
|
|
36
|
+
Search the codebase for personal data before changing anything. Look at:
|
|
37
|
+
|
|
38
|
+
- Database schemas and migrations (names, emails, phone numbers, addresses, IPs, device IDs, national IDs such as Ghana Card or NIN, location, photos).
|
|
39
|
+
- API request and response types, form fields, analytics events, logs, error trackers, backups, data warehouse exports, queues and caches.
|
|
40
|
+
- Every third-party SDK or API the data reaches (email, SMS, payments, analytics, crash reporting, AI APIs).
|
|
41
|
+
|
|
42
|
+
Write the map as a table and keep it in the repo (for example `docs/privacy/data-map.md`):
|
|
43
|
+
|
|
44
|
+
| Data item | Where stored | Purpose | Lawful basis | Retention | Shared with (country) |
|
|
45
|
+
|---|---|---|---|---|---|
|
|
46
|
+
|
|
47
|
+
A row with an empty purpose is a finding: data with no purpose should not be collected. This table is also the core of a GDPR Article 30 record of processing.
|
|
48
|
+
|
|
49
|
+
## Step 3: lawful basis and consent
|
|
50
|
+
|
|
51
|
+
1. Every purpose needs one lawful basis. The usual six are consent, contract, legal obligation, vital interests, public task and legitimate interests; the African laws use the same family of grounds. Record the basis per purpose, not per user.
|
|
52
|
+
2. Use consent only when the user has a real choice. If the service cannot work without the data, the basis is usually contract, not consent.
|
|
53
|
+
3. When consent is the basis, build it properly:
|
|
54
|
+
- Opt-in, unticked by default, separate for each purpose (marketing email, analytics, personalised ads).
|
|
55
|
+
- Store a consent record: user id, purpose, the text or version shown, timestamp, channel, and withdrawal timestamp.
|
|
56
|
+
- Withdrawal must be as easy as giving consent and must stop the processing (unsubscribe the list, stop the analytics tag).
|
|
57
|
+
- Non-essential cookies and trackers load only after consent. Check that the tag manager actually waits.
|
|
58
|
+
4. Children: if the product may be used by children, **stop and ask the user** for the age threshold their counsel has set, and build age checks and parental consent to that rule.
|
|
59
|
+
|
|
60
|
+
## Step 4: minimise and protect
|
|
61
|
+
|
|
62
|
+
- Collect only the fields the purpose needs. Drop "nice to have" fields such as date of birth when an over-18 checkbox will do.
|
|
63
|
+
- Never write personal data into logs, URLs, analytics event names or error messages. Log user ids, not emails or phone numbers. Add a redaction filter to the logger and the error tracker.
|
|
64
|
+
- Encrypt in transit (TLS) and at rest. Put national IDs and special category data in separate columns or tables with stricter access.
|
|
65
|
+
- Use pseudonymous ids in analytics and data warehouses.
|
|
66
|
+
- Restrict production data access by role, and keep an audit log of who read or exported personal data.
|
|
67
|
+
- Never copy production personal data into development, test or staging. Use synthetic or masked data.
|
|
68
|
+
|
|
69
|
+
## Step 5: retention and deletion
|
|
70
|
+
|
|
71
|
+
1. Give every data item a retention period with a reason (for example "invoices: as long as tax law requires; ask finance for the number").
|
|
72
|
+
2. Build a scheduled deletion or anonymisation job per table. Make it idempotent, log counts (not contents), and alert when it fails.
|
|
73
|
+
3. Account deletion must reach every copy: primary database, search index, caches, object storage, analytics, the CRM and email vendors (via their deletion APIs), and backups. Backups may age out on their normal cycle if restores re-apply deletions; record that rule.
|
|
74
|
+
4. Where you must keep records (tax, fraud, legal holds), keep the minimum, restrict access, and document why.
|
|
75
|
+
5. Test deletion: create a user, use every feature, delete the account, then search every store for their id and email.
|
|
76
|
+
|
|
77
|
+
## Step 6: data subject requests
|
|
78
|
+
|
|
79
|
+
Build one internal workflow that handles access, correction, deletion, objection and portability requests:
|
|
80
|
+
|
|
81
|
+
1. Verify identity using what you already hold (signed-in session, email or SMS code). Do not demand new documents you would then have to store.
|
|
82
|
+
2. Log the request with a received timestamp and a due date from the applicable law (see `references/jurisdictions.md`).
|
|
83
|
+
3. Access and portability: export the user's data from every system in the data map as JSON or CSV, with a readable summary.
|
|
84
|
+
4. Deletion: run the Step 5 deletion path, then confirm to the user what was deleted and what was kept and why.
|
|
85
|
+
5. Keep a record that the request was handled, without keeping the exported data.
|
|
86
|
+
|
|
87
|
+
## Step 7: cross-border transfers and vendors
|
|
88
|
+
|
|
89
|
+
- For each vendor in the data map, record its processing country and the contract that covers it (a data processing agreement, and for transfers a recognised mechanism such as an adequacy decision or standard contractual clauses).
|
|
90
|
+
- Prefer cloud regions in the user's country or region when the law or the customer demands it. Check `references/jurisdictions.md` for transfer limits, and **stop and ask the user** before moving data to a new country.
|
|
91
|
+
- Sending personal data to an AI or LLM API is a transfer to a processor. Check its data retention and training terms, and strip identifiers you don't need.
|
|
92
|
+
|
|
93
|
+
## Step 8: breach readiness
|
|
94
|
+
|
|
95
|
+
- Breach clocks are short (72 hours to the regulator is common). Build for it before it happens:
|
|
96
|
+
- Audit logs that show what data was accessed, by whom, and when.
|
|
97
|
+
- An incident runbook naming who decides on notification (DPO or counsel, not the engineer on call).
|
|
98
|
+
- A way to list affected users and their contact details quickly.
|
|
99
|
+
- On a suspected breach: contain it, preserve logs, record the time the organisation became aware, and escalate to the decision maker immediately. Do not delete evidence, contact users, or post publicly unless that person tells you to.
|
|
100
|
+
|
|
101
|
+
## Never
|
|
102
|
+
|
|
103
|
+
- Never claim a system "is GDPR compliant" or "is NDPA compliant". Say what controls exist and what gaps remain.
|
|
104
|
+
- Never invent statute numbers, deadlines or fines. If it's not in `references/jurisdictions.md` and you can't check the official text, say it is unknown.
|
|
105
|
+
- Never ship pre-ticked consent boxes, dark-pattern banners, or tracking that fires before consent.
|
|
106
|
+
- Never log, export or paste real user personal data into tickets, prompts or chat while doing this work.
|
|
107
|
+
|
|
108
|
+
## Report format
|
|
109
|
+
|
|
110
|
+
When reviewing a codebase or feature, return:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
Privacy review: <feature or repo>
|
|
114
|
+
Laws considered: <list, with why>
|
|
115
|
+
Data map: <path to table, or inline table>
|
|
116
|
+
Findings (highest risk first):
|
|
117
|
+
1. [High|Medium|Low] <what> at <file:line or system>: <why it matters> -> <fix>
|
|
118
|
+
Gaps needing legal input: <questions for the DPO or counsel>
|
|
119
|
+
Not checked: <systems or vendors you could not see>
|
|
120
|
+
This is engineering guidance, not legal advice.
|
|
121
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"We're launching our fintech app in Nigeria and Kenya, what do we need to build for the NDPA and the Kenya Data Protection Act?",
|
|
4
|
+
"Add a cookie consent banner that actually blocks Google Analytics until the user opts in",
|
|
5
|
+
"A user emailed asking for a copy of all the data we hold about them under GDPR, how do we export it?",
|
|
6
|
+
"Build an account deletion flow that removes the user from Postgres, S3, Mailchimp and our analytics",
|
|
7
|
+
"Map all the personal data our Django app stores and tell me what retention we should set for each table",
|
|
8
|
+
"Is it okay to store Ghanaian customers' data in an AWS region in Europe? What does the Data Protection Act 843 require?"
|
|
9
|
+
],
|
|
10
|
+
"should_not_trigger": [
|
|
11
|
+
"Our telehealth app stores patient visit notes, what HIPAA safeguards and BAAs do we need?",
|
|
12
|
+
"How do we keep card numbers out of our servers so we only need SAQ A?",
|
|
13
|
+
"Review this login endpoint for SQL injection and broken access control",
|
|
14
|
+
"Draw a threat model for our new file upload service",
|
|
15
|
+
"Write a migration that adds a nullable phone_number column to the users table",
|
|
16
|
+
"Implement JWT refresh tokens with rotation in our Express API"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Jurisdiction notes
|
|
2
|
+
|
|
3
|
+
Engineering summary only, not legal advice. Laws, regulations and regulator guidance change: before you rely on a figure here in code, a runbook or a notice, check the regulator's current text and have the DPO or counsel confirm it. Where a cell says "confirm", this skill could not verify the figure, so do not hard-code a value.
|
|
4
|
+
|
|
5
|
+
## Quick comparison
|
|
6
|
+
|
|
7
|
+
| | EU / UK GDPR | Ghana: Data Protection Act, 2012 (Act 843) | Nigeria: Data Protection Act, 2023 (NDPA) | Kenya: Data Protection Act, 2019 |
|
|
8
|
+
|---|---|---|---|---|
|
|
9
|
+
| Regulator | National supervisory authority (UK: ICO) | Data Protection Commission (DPC) | Nigeria Data Protection Commission (NDPC) | Office of the Data Protection Commissioner (ODPC) |
|
|
10
|
+
| Register with regulator | No general duty (UK: ICO data protection fee) | Yes, data controllers register with the DPC | Data controllers and processors "of major importance" register with the NDPC | Yes, controllers and processors register with the ODPC (s.18), with a small-entity exemption |
|
|
11
|
+
| Breach notice to regulator | Within 72 hours of awareness, unless unlikely to risk individuals (Art. 33) | s.31 (security compromises): notify the Commission; timing and strength of the duty disputed, confirm | Within 72 hours of awareness where likely to risk individuals' rights (s.40) | Within 72 hours of awareness (s.43) |
|
|
12
|
+
| Breach notice to individuals | Without undue delay when high risk (Art. 34) | s.31 also names the data subject; confirm | Required where high risk; confirm wording with counsel | In writing, within a reasonably practicable period, where there is a real risk of harm |
|
|
13
|
+
| Subject access deadline | One month, extendable by two more for complex requests (Art. 12(3)) | Confirm (rights in ss.32 to 35) | Confirm | Confirm (see the Data Protection (General) Regulations, 2021) |
|
|
14
|
+
| Cross-border transfer | Chapter V: adequacy, SCCs, BCRs, or narrow derogations | Confirm with counsel | Part VIII (ss.41 to 43): adequacy of protection or another listed basis | Part VI: appropriate safeguards or another listed basis; some processing may need to stay in Kenya under the regulations |
|
|
15
|
+
|
|
16
|
+
## EU and UK GDPR
|
|
17
|
+
|
|
18
|
+
- Lawful bases (Art. 6): consent, contract, legal obligation, vital interests, public task, legitimate interests. Special category data needs an extra condition (Art. 9).
|
|
19
|
+
- Consent must be freely given, specific, informed, unambiguous and as easy to withdraw as to give (Art. 4(11), Art. 7).
|
|
20
|
+
- Children and online services (Art. 8): default age 16; member states may lower it to no less than 13. The UK uses 13.
|
|
21
|
+
- Records of processing (Art. 30), processor contracts (Art. 28), DPIA for high-risk processing (Art. 35), DPO in certain cases (Art. 37).
|
|
22
|
+
- Rights: access (Art. 15), rectification (16), erasure (17), restriction (18), portability (20), objection (21), automated decisions (22).
|
|
23
|
+
- Engineering impact: consent records, DSAR export, erasure across systems, a vendor list with transfer mechanisms, 72-hour breach runbook.
|
|
24
|
+
|
|
25
|
+
## Ghana: Data Protection Act, 2012 (Act 843)
|
|
26
|
+
|
|
27
|
+
- Regulator: Data Protection Commission (dataprotection.org.gh). Controllers register with the Commission, and registration is renewed periodically; confirm the current fee and renewal cycle there.
|
|
28
|
+
- Security (s.28): appropriate, reasonable technical and organisational measures against loss, damage and unauthorised access.
|
|
29
|
+
- Security compromise (s.31): where there are reasonable grounds to believe personal data was accessed or acquired by an unauthorised person, the Act provides for notifying the Commission and the data subject. Commentators disagree on how strong this duty is (some privacy maps say there is no explicit statutory requirement, only Commission guidance) and on its timing, so confirm with counsel and the DPC. Build for prompt notice anyway; do not hard-code a deadline.
|
|
30
|
+
- Data subject access and correction: ss.32 to 35. Confirm the response deadline before building a due-date timer.
|
|
31
|
+
- Engineering impact: registration evidence, security controls, a breach runbook with a named decision maker, access and correction workflow.
|
|
32
|
+
|
|
33
|
+
## Nigeria: Data Protection Act, 2023 (NDPA)
|
|
34
|
+
|
|
35
|
+
- Regulator: Nigeria Data Protection Commission (ndpc.gov.ng). It replaced the NDPR 2019 regime; check the NDPC site for its General Application and Implementation Directive (GAID) and current filing duties.
|
|
36
|
+
- Data controllers and processors of major importance must register with the NDPC; the NDPC publishes a register.
|
|
37
|
+
- Breach (s.40): processors notify the controller that engaged them; controllers notify the NDPC within 72 hours of becoming aware where the breach is likely to risk individuals' rights; keep a record of all breaches. The NDPC may make a public communication if the controller's notice to individuals is inadequate.
|
|
38
|
+
- Cross-border transfer (Part VIII, ss.41 to 43): allowed where the recipient is subject to adequate protection, or on another basis the Act lists. Record the basis for each vendor outside Nigeria.
|
|
39
|
+
- Engineering impact: breach records table, 72-hour runbook, transfer basis per vendor, registration status.
|
|
40
|
+
|
|
41
|
+
## Kenya: Data Protection Act, 2019
|
|
42
|
+
|
|
43
|
+
- Regulator: Office of the Data Protection Commissioner (odpc.go.ke).
|
|
44
|
+
- Registration (s.18 and the Registration Regulations, 2021): controllers and processors must register before processing. The ODPC states an exemption for entities with turnover under KES 5 million and fewer than 10 employees, unless they process for listed purposes such as health care, education or financial services. Certificates are time-limited and must be renewed.
|
|
45
|
+
- Breach (s.43): notify the Data Commissioner within 72 hours of becoming aware; tell affected data subjects in writing within a reasonably practicable period where there is a real risk of harm. The ODPC has enforced the 72-hour window strictly; a short preliminary notice followed by details is common practice.
|
|
46
|
+
- Cross-border transfer: Part VI of the Act and the Data Protection (General) Regulations, 2021. Some processing may be required to happen in Kenya; ask counsel before choosing a non-Kenyan region for that data.
|
|
47
|
+
- Engineering impact: registration before launch, 72-hour runbook, region choice, written notice templates.
|
|
48
|
+
|
|
49
|
+
## Countries not listed
|
|
50
|
+
|
|
51
|
+
Say so. Ask the user for the law and the regulator, and do not borrow another country's deadlines.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: production-scheduling
|
|
3
|
+
description: Production and job-shop scheduling for factories, print shops, kitchens and other work centres, covering capacity checks, finding the bottleneck, dispatching rules such as SPT, EDD and Johnson's rule, sequence-dependent changeovers, time and WIP buffers, rescheduling after a breakdown or rush order, and when to move from heuristics to a constraint solver like OR-Tools CP-SAT. Use when building or fixing a production schedule or scheduling tool, deciding job order across machines or lines, or replanning after a disruption.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Works in a spreadsheet or code; the solver path assumes Python with the ortools package, installed only if the user agrees.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: business
|
|
9
|
+
kete-loom/risk: writes-files
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Production scheduling
|
|
14
|
+
|
|
15
|
+
Produce a schedule that is feasible first (capacity, routing, calendars), good second (the user's objective), and stable third (small changes when something breaks).
|
|
16
|
+
|
|
17
|
+
## 0. Model the shop, or stop and ask
|
|
18
|
+
|
|
19
|
+
Collect:
|
|
20
|
+
|
|
21
|
+
1. **Jobs**: ID, product, quantity, release date (material available), due date, priority.
|
|
22
|
+
2. **Routings**: ordered operations per product, which machine or machine group each can run on, run time per unit, setup time.
|
|
23
|
+
3. **Resources**: machines, lines, people with skills, tooling; shift calendars, planned maintenance.
|
|
24
|
+
4. **Changeovers**: setup matrix from product family to product family if setups depend on sequence.
|
|
25
|
+
5. **Objective**: on-time delivery (minimise lateness or late jobs), throughput (minimise makespan), or cost (minimise changeovers or overtime). If more than one, ask for the order of priority.
|
|
26
|
+
|
|
27
|
+
If the objective or the routing data is missing, **stop and ask the user**. A schedule optimised for the wrong goal looks fine and fails on the floor.
|
|
28
|
+
|
|
29
|
+
## 1. Check capacity before sequencing
|
|
30
|
+
|
|
31
|
+
- Load per resource per period = sum of (setup + run time) of operations assigned there. Compare with available hours from the calendar after maintenance and expected downtime.
|
|
32
|
+
- Any resource above ~85 to 90% load will queue badly; any above 100% makes the due dates impossible. Report it now: options are overtime, alternate routing, outsourcing, splitting lots or moving due dates. The user decides.
|
|
33
|
+
- The **bottleneck** is the resource with the highest load. Its schedule sets the plant's output.
|
|
34
|
+
|
|
35
|
+
## 2. Pick a method
|
|
36
|
+
|
|
37
|
+
| Situation | Method |
|
|
38
|
+
|---|---|
|
|
39
|
+
| One machine or one bottleneck dominates | Sequence that resource with a dispatching rule, then schedule others around it |
|
|
40
|
+
| Two machines in series, same order for all jobs | Johnson's rule (optimal for makespan) |
|
|
41
|
+
| Many jobs, real-time dispatch on the floor | Priority rules at each machine when it frees up |
|
|
42
|
+
| Sequence-dependent setups matter | Group by family (campaigns), then order families to minimise total changeover |
|
|
43
|
+
| Many machines, alternative routings, hard constraints, tens to thousands of operations | Constraint solver (section 4) |
|
|
44
|
+
|
|
45
|
+
Dispatching rules and what they are good for:
|
|
46
|
+
- **SPT** (shortest processing time first): minimises average flow time and WIP on a single machine; can starve long jobs.
|
|
47
|
+
- **EDD** (earliest due date first): minimises maximum lateness on a single machine.
|
|
48
|
+
- **Critical ratio** (time to due / remaining work): balances urgency and work left; recompute at each dispatch.
|
|
49
|
+
- **FIFO**: fair and simple, ignores due dates.
|
|
50
|
+
- **Moore-Hodgson** (add jobs in EDD order; whenever the last added job is late, remove the longest job scheduled so far and put it at the end): minimises the number of late jobs on one machine.
|
|
51
|
+
|
|
52
|
+
Johnson's rule: list jobs with times on M1 and M2. Repeatedly take the smallest remaining time; if it is on M1, put that job as early as possible; if on M2, as late as possible.
|
|
53
|
+
|
|
54
|
+
## 3. Changeovers and buffers
|
|
55
|
+
|
|
56
|
+
- Build the setup matrix; sequence light to dark, small to large, or by tooling family as the shop does. Big batches cut setups but raise WIP and lateness; show the trade-off.
|
|
57
|
+
- Protect the bottleneck (drum-buffer-rope): a time buffer of work queued before it so it never starves, release material at the bottleneck's pace, and keep non-bottleneck resources free to catch up.
|
|
58
|
+
- Add buffers before due dates for high-risk jobs rather than padding every operation.
|
|
59
|
+
|
|
60
|
+
## 4. Solver path
|
|
61
|
+
|
|
62
|
+
Use when heuristics break the constraints or the user needs a provably better plan. With OR-Tools CP-SAT (Python, `pip install ortools`, ask first):
|
|
63
|
+
|
|
64
|
+
Current releases use snake_case names (older code shows the CamelCase aliases, such as `NewIntervalVar`); confirm against the installed `cp_model` module.
|
|
65
|
+
|
|
66
|
+
1. One `new_interval_var` per operation (start, size, end); for alternative machines, one `new_optional_interval_var` per machine with its own Boolean presence literal, and `add_exactly_one` over those literals.
|
|
67
|
+
2. `add_no_overlap` per machine over its intervals.
|
|
68
|
+
3. Precedence: `end(op_k) <= start(op_k+1)` in each routing; release dates as lower bounds on start.
|
|
69
|
+
4. Calendars: block non-working time with fixed intervals in the machine's no-overlap set.
|
|
70
|
+
5. Sequence-dependent setups: use `add_circuit` over the jobs on a machine with setup-time arcs, or a simpler family-level model.
|
|
71
|
+
6. Objective: makespan (`add_max_equality`), weighted tardiness (`max(0, end - due)`), or a weighted sum. Set a time limit (`solver.parameters.max_time_in_seconds`); if the status is `FEASIBLE` rather than `OPTIMAL`, report the gap between `solver.objective_value` and `solver.best_objective_bound`.
|
|
72
|
+
7. Validate the solution independently: no overlaps, precedence held, calendars respected.
|
|
73
|
+
|
|
74
|
+
Keep a heuristic schedule as the fallback and as a sanity check; if the solver is worse on the objective, the model is wrong.
|
|
75
|
+
|
|
76
|
+
## 5. Rescheduling on disruption
|
|
77
|
+
|
|
78
|
+
Breakdown, late material, rush order, absent operator:
|
|
79
|
+
|
|
80
|
+
1. Freeze what is running and a short frozen window (for example the current shift) unless the user says otherwise.
|
|
81
|
+
2. Right-shift affected operations as the default; it keeps the plan recognisable.
|
|
82
|
+
3. Re-optimise only the unfrozen part if lateness grows past a threshold, adding a penalty for moving jobs between machines to keep stability.
|
|
83
|
+
4. Report which jobs moved, new due-date risk, and what the user must tell customers.
|
|
84
|
+
|
|
85
|
+
## Rules
|
|
86
|
+
|
|
87
|
+
- Never schedule beyond a resource's calendar or ignore a precedence to make the plan look on time.
|
|
88
|
+
- Never quietly move a committed due date; flag it for the user.
|
|
89
|
+
- Never write a schedule into an MES or ERP without the user's confirmation.
|
|
90
|
+
- Do not claim optimality from a heuristic; say which rule was used.
|
|
91
|
+
|
|
92
|
+
## Report
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
resource | job | operation | start | end | setup | due | lateness
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Then: objective value (makespan, late jobs, total tardiness, total setup time), bottleneck load %, infeasibilities found, assumptions, and for a reschedule the list of changed jobs.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Sequence these 40 orders across our two injection moulding machines to minimise late jobs",
|
|
4
|
+
"Our paint line loses hours on colour changeovers, find a better job order for the week",
|
|
5
|
+
"Model our job shop in OR-Tools CP-SAT with alternative machines and shift calendars",
|
|
6
|
+
"Machine 3 just broke down for six hours, reschedule the rest of the day with minimal disruption",
|
|
7
|
+
"Which machine is our bottleneck and can we hit all the due dates this month?"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Forecast next quarter's demand for our spare parts and set reorder points",
|
|
11
|
+
"Write an on-call rota for our SRE team across three time zones",
|
|
12
|
+
"Write a runbook for restarting the factory's MES database server",
|
|
13
|
+
"Set up a schedule in our CI to run nightly integration tests",
|
|
14
|
+
"Estimate how many sprints the new scheduling feature will take"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prompt-engineering
|
|
3
|
+
description: Writes, diagnoses and rewrites production prompts for language models, using clear task instructions with the context the model lacks, a few well-chosen examples, an explicit output format, splitting a hard job into chained steps, and proving each revision against a fixed set of test inputs before it ships. Use when drafting a system prompt for a new feature, fixing a prompt that gives inconsistent or off-format answers, shortening a bloated prompt, or comparing two prompt versions.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Model- and provider-neutral.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: ai
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Prompt engineering
|
|
14
|
+
|
|
15
|
+
A production prompt is code: it has a spec, a version and tests. This skill is for the words sent to the model. For the surrounding code (retries, schemas, caching) use `llm-app-patterns`; for building a full eval suite and graders use `llm-evals`.
|
|
16
|
+
|
|
17
|
+
## 0. Gather before writing
|
|
18
|
+
|
|
19
|
+
1. Find the current prompt in the codebase (search for the system prompt string, prompt templates or a `prompts/` folder) and how it is versioned and called.
|
|
20
|
+
2. Collect 5 to 20 real inputs: a few typical, a few hard, at least one adversarial or empty. Pull them from logs or ask the user. If none exist and the user can't provide any, write them yourself and say so.
|
|
21
|
+
3. Write down what a good output looks like for each input (or the rule that decides it). If you can't say what "good" is, **stop and ask the user**; no rewrite can fix an undefined target.
|
|
22
|
+
4. Run the current prompt on that set and record the outputs. This is the baseline.
|
|
23
|
+
|
|
24
|
+
## 1. Structure of a prompt
|
|
25
|
+
|
|
26
|
+
Write in this order, keeping stable parts first so they can be cached:
|
|
27
|
+
|
|
28
|
+
1. **Role and goal**: one or two sentences on who the output is for and what it is used for. Purpose beats persona.
|
|
29
|
+
2. **Context**: facts the model can't know: the product, the audience, definitions of domain terms, policies. Leave out what any capable model already knows.
|
|
30
|
+
3. **Instructions**: numbered steps or rules. Say what to do, not only what to avoid. Give the reason for a rule when it isn't obvious; models generalise from reasons.
|
|
31
|
+
4. **Examples** (section 3).
|
|
32
|
+
5. **Output format** (section 4).
|
|
33
|
+
6. **Input**: the variable content, inside delimiters such as `<document>...</document>`, with a note that text inside is data, not instructions.
|
|
34
|
+
|
|
35
|
+
## 2. Rules for instructions
|
|
36
|
+
|
|
37
|
+
- Be specific: "Reply in 2 to 4 sentences" beats "be concise". "Use British spelling" beats "use proper English".
|
|
38
|
+
- One instruction per line; no contradictions. Search the prompt for rules that conflict (for example "be brief" and "explain fully") and decide which wins.
|
|
39
|
+
- Handle the edge cases you found in step 0 explicitly: missing data, off-topic input, ambiguous requests. Tell the model what to output then (for example `{"status": "insufficient_input"}`), so it doesn't invent an answer.
|
|
40
|
+
- Don't shout. Emphatic wording (ALL CAPS, "CRITICAL", "you MUST") can make recent models over-apply a rule in cases where it doesn't fit. State the rule plainly, once, and add emphasis only if tests show the rule being ignored.
|
|
41
|
+
- Remove instructions that no test case depends on. Shorter prompts are easier to debug.
|
|
42
|
+
- Give the model room to think when the task needs reasoning: ask it to reason before the final answer, and put the answer in a separate tagged block or field your code can extract.
|
|
43
|
+
|
|
44
|
+
## 3. Examples
|
|
45
|
+
|
|
46
|
+
- Use 2 to 5 examples that differ from each other in the ways real inputs differ. Identical-looking examples get copied too literally.
|
|
47
|
+
- Include at least one edge case example (missing field, refusal, "none found").
|
|
48
|
+
- Wrap them in tags (`<example>`) so the model can tell them from instructions.
|
|
49
|
+
- **Never reuse test-set inputs as examples.** That makes the evaluation meaningless.
|
|
50
|
+
|
|
51
|
+
## 4. Output format
|
|
52
|
+
|
|
53
|
+
- Specify the exact shape: a JSON schema, a template with headings, or a fixed list of labels. Show one complete example output.
|
|
54
|
+
- For output that code parses, prefer the provider's structured output or tool calling (see `llm-app-patterns`) over asking nicely for JSON.
|
|
55
|
+
- For classification, list every allowed label and what each means, plus an "other/unknown" label.
|
|
56
|
+
- Say what must not appear (no preamble, no Markdown fences) only if tests show it appearing.
|
|
57
|
+
|
|
58
|
+
## 5. Decomposition
|
|
59
|
+
|
|
60
|
+
Split a prompt into a chain when one call is doing several jobs and failing at one of them:
|
|
61
|
+
|
|
62
|
+
1. Typical split: extract → decide → write. Each step gets its own prompt, its own output schema and its own test cases.
|
|
63
|
+
2. Pass only the previous step's structured output forward, not its whole transcript.
|
|
64
|
+
3. Validate between steps in code; stop the chain on invalid output.
|
|
65
|
+
4. Don't split when one call already passes the tests; chains add latency and cost.
|
|
66
|
+
|
|
67
|
+
## 6. Iterate against the fixed set
|
|
68
|
+
|
|
69
|
+
1. Change one thing at a time (an instruction, an example, the format section).
|
|
70
|
+
2. Re-run the **same** inputs. Compare against the baseline case by case, not by eyeballing one output.
|
|
71
|
+
3. Keep the change only if it fixes failures without breaking cases that passed. Model outputs vary, so run each case more than once (3 runs is a reasonable start) when results are close.
|
|
72
|
+
4. When a new failure shows up in production, add it to the set before fixing it.
|
|
73
|
+
5. Bump the prompt version and record what changed and the before/after pass counts.
|
|
74
|
+
|
|
75
|
+
If after three focused revisions a case still fails, stop and report: the case, what you tried, and whether the fix needs code (decomposition, retrieval, a tool) or a different model rather than more wording.
|
|
76
|
+
|
|
77
|
+
## Never
|
|
78
|
+
|
|
79
|
+
- Never claim a prompt is "better" without running it on the fixed set.
|
|
80
|
+
- Never tune the prompt on the same cases you report the score on and call it a fair result; keep a held-out portion (see `llm-evals`).
|
|
81
|
+
- Never put secrets, internal URLs or personal data into a prompt as examples.
|
|
82
|
+
- Never rely on the prompt alone to enforce security or permissions.
|
|
83
|
+
|
|
84
|
+
## Report back
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Prompt: <file or identifier> version <old> → <new>
|
|
88
|
+
Test set: <n> cases (<where they came from>)
|
|
89
|
+
Baseline: <passed>/<n> New: <passed>/<n> (runs per case: <k>)
|
|
90
|
+
Changes: <one line each>
|
|
91
|
+
Still failing: <case ids and why>
|
|
92
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"The system prompt for our refund bot keeps answering in the wrong tone, rewrite it",
|
|
4
|
+
"Write a prompt that extracts invoice fields into JSON and handles missing totals",
|
|
5
|
+
"This 3000-word prompt is a mess, tighten it up without losing behaviour",
|
|
6
|
+
"Should I add few-shot examples to this classification prompt? Try it and show me the difference",
|
|
7
|
+
"Compare prompt v3 and v4 on these twenty sample tickets and tell me which to ship"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Wrap the Anthropic API call in retries and a timeout",
|
|
11
|
+
"Set up a regression dashboard that scores every model release on our eval set",
|
|
12
|
+
"Grade our agent's last 100 transcripts against the rubric and summarise failures",
|
|
13
|
+
"Write the marketing copy for our launch email",
|
|
14
|
+
"Design how the planner and worker agents hand off tasks in our harness"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prospect-research
|
|
3
|
+
description: B2B prospect list building and enrichment from public sources such as company websites, filings, job posts, press and public directories, with a written ideal-customer-fit scorecard, a 0-100 fit score and a cited reason per account, buying-committee roles to contact, and warm-introduction paths found in the user's own contacts and investors, while keeping to platform terms and privacy law with no scraping behind logins. Use when a founder or sales team needs a target account list researched, scored and enriched before any outreach is written, or wants to know who in their network can introduce them to a target company.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Web access helps for public research; the user supplies their own contact exports. Not legal advice on data protection.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: business
|
|
9
|
+
kete-loom/risk: network
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Prospect research
|
|
14
|
+
|
|
15
|
+
Produce a short, ranked list of accounts that fit, the people to approach at each, and the warmest way in, with a source for every fact. Writing the outreach itself is the job of `cold-outreach-sequences`; sizing the whole market is `market-research`.
|
|
16
|
+
|
|
17
|
+
## Ground rules
|
|
18
|
+
|
|
19
|
+
1. **Public and permitted sources only.** Company websites, annual reports and company registries, regulator registers, press releases and news, job postings, conference speaker lists, public GitHub orgs, app store listings, and data providers the user already licenses. Never log in to a site to collect data, never bypass a paywall, rate limit or robots.txt, and never automate collection from a platform whose terms forbid it (LinkedIn's User Agreement forbids scraping and automated access; the user may look profiles up by hand).
|
|
20
|
+
2. **Cite or drop.** Every fact on the list carries a source URL or document and an access date. A guess is marked as a guess or left out.
|
|
21
|
+
3. **Business data, minimum personal data.** Collect name, role, company and a business contact route only. No home addresses, personal phone numbers, family details, photos or anything about health, religion, politics or other special categories.
|
|
22
|
+
4. **No guessed emails sent blind.** Pattern-guessed addresses are marked "unverified" and are not a substitute for a lawful basis to contact someone.
|
|
23
|
+
5. **The user's network data stays theirs.** Contact exports the user shares are used for matching only, are not added to the prospect file wholesale, and are not sent to any third-party service without the user's say-so.
|
|
24
|
+
|
|
25
|
+
## Step 1: Write the ideal-customer-fit scorecard
|
|
26
|
+
|
|
27
|
+
Ask the user for their best five to ten current customers (or design partners) and what made each a good fit. From that, agree on four to six criteria with weights that sum to 100, for example:
|
|
28
|
+
|
|
29
|
+
| Criterion | Weight | Evidence that counts |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Industry / segment | 25 | registry SIC/NAICS code, website |
|
|
32
|
+
| Size (staff or revenue band) | 20 | filings, registry, headcount on careers page |
|
|
33
|
+
| Trigger event in last 6 months | 25 | funding, new market, hiring for a role, regulation change |
|
|
34
|
+
| Tech or process fit | 20 | job posts naming tools, public integrations, docs |
|
|
35
|
+
| Geography / language | 10 | registered office, markets served |
|
|
36
|
+
|
|
37
|
+
Add **disqualifiers** (too small, existing competitor customer under contract, sanctioned country, already a customer). Stop and ask the user to confirm the scorecard before researching any account.
|
|
38
|
+
|
|
39
|
+
## Step 2: Build the account list
|
|
40
|
+
|
|
41
|
+
1. Start from sources that list many companies at once: industry association member lists, registries filtered by code and region, event exhibitor lists, investor portfolio pages, marketplace or integration directories.
|
|
42
|
+
2. Deduplicate by legal entity and domain; note parent companies and subsidiaries.
|
|
43
|
+
3. Aim for 1.5 to 2 times the number of accounts the user wants, because scoring will cut some.
|
|
44
|
+
|
|
45
|
+
## Step 3: Enrich and score each account
|
|
46
|
+
|
|
47
|
+
For each account record: legal name, domain, country, size band, segment, the trigger (with date and source), tech or process signals, and any disqualifier. Score each criterion 0, half or full weight from the evidence, sum to a 0-100 fit score, and write one line saying why. Mark accounts with fewer than three sourced criteria as "thin evidence" instead of scoring them high.
|
|
48
|
+
|
|
49
|
+
Tiers: **A** 75+, **B** 50-74, **C** below 50 (park, don't contact).
|
|
50
|
+
|
|
51
|
+
## Step 4: Map the buying committee
|
|
52
|
+
|
|
53
|
+
For A and B accounts, list the roles that matter (economic buyer, champion or user, technical evaluator, possible blocker) and the named person only where a public source shows them in that role now. Note the source and date; people move, so anything older than 12 months is "check before contact".
|
|
54
|
+
|
|
55
|
+
## Step 5: Find warm-intro paths
|
|
56
|
+
|
|
57
|
+
Ask the user for what they are willing to share: a contacts export, a list of investors, advisers, past employers, customers who would refer, alumni groups. Match on company domain and past employers. For each A account, rank the paths:
|
|
58
|
+
|
|
59
|
+
1. A current customer or investor who knows someone at the account.
|
|
60
|
+
2. A former colleague who now works there or recently did.
|
|
61
|
+
3. A shared investor, adviser or community.
|
|
62
|
+
4. A public route: speaking at the same event, a mutual open-source project.
|
|
63
|
+
|
|
64
|
+
For each path, write who to ask, what to ask them for, and a two-line forwardable blurb. Never contact anyone on the user's behalf.
|
|
65
|
+
|
|
66
|
+
## Privacy and compliance checks
|
|
67
|
+
|
|
68
|
+
- **EU and UK prospects:** personal data about named people is covered by the GDPR and UK GDPR even in a B2B context. The user needs a lawful basis (usually legitimate interests, with a documented balancing test), and Article 14 requires telling a person whose data you collected from elsewhere, at the latest within one month or at the first communication. Keep a record of the source of each person's data.
|
|
69
|
+
- **Electronic marketing rules differ by country** (for example PECR in the UK, national rules in Germany that are stricter about unsolicited email). Flag the country; leave the decision on whether to email to the user and `cold-outreach-sequences`.
|
|
70
|
+
- **Opt-outs and existing suppression lists** from the user's CRM must be checked before anyone is added.
|
|
71
|
+
- This skill is not legal advice; for a large programme or a regulated sector, recommend the user's data protection lead or counsel reviews the basis and notices.
|
|
72
|
+
|
|
73
|
+
## Stop and ask the user
|
|
74
|
+
|
|
75
|
+
- Before research starts, to confirm the scorecard, target count and regions.
|
|
76
|
+
- If a requested source needs a login, a paid seat the user has not mentioned, or automated collection from a platform that forbids it.
|
|
77
|
+
- If the user asks for personal data beyond business contact details, or for people in a country whose rules you have not checked.
|
|
78
|
+
|
|
79
|
+
## Output
|
|
80
|
+
|
|
81
|
+
Return a table (or a CSV the user can import) and a summary:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
Account | Domain | Country | Size | Fit | Tier | Why (one line) | Trigger (date, source) | Roles / named people (source, date) | Warm path | Evidence gaps
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Then: the scorecard used, how many accounts were found, scored and parked, the sources used with access dates, accounts marked "thin evidence", and the privacy points the user must act on before outreach.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Build me a list of 50 mid-size logistics companies in Kenya that fit our ICP, scored and with sources",
|
|
4
|
+
"Define our ideal customer profile from these ten customers and score this list of target accounts against it",
|
|
5
|
+
"Who in my LinkedIn connections export or our investor list could introduce me to people at these 20 target companies?",
|
|
6
|
+
"Enrich this account list with company size, recent funding and hiring signals before our sales team starts outreach",
|
|
7
|
+
"Find the economic buyer and technical evaluator at each of these fintechs using public sources only"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Write a four-step cold email sequence to the heads of operations on our prospect list",
|
|
11
|
+
"Size the market for fleet management software in East Africa with TAM, SAM and SOM",
|
|
12
|
+
"Our outbound emails are going to spam since we started a new sending domain, fix our DMARC",
|
|
13
|
+
"Plan our launch campaign channels, calendar and budget for next quarter",
|
|
14
|
+
"Triage my inbox this morning and draft replies to the urgent ones"
|
|
15
|
+
]
|
|
16
|
+
}
|