@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,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vue-patterns
|
|
3
|
+
description: Vue 3 Composition API guidance for writing and fixing single-file components with script setup, covering ref versus reactive, reactivity lost by destructuring, computed and watch rules, composables with cleanup, typed defineProps, defineEmits and defineModel, Pinia stores with storeToRefs, and component tests with Vue Test Utils. Use when building or refactoring a Vue 3 component, writing a composable or Pinia store, or debugging a value that stopped updating in a Vue view.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Targets Vue 3.4+ with script setup and TypeScript; notes call out 3.5-only APIs. Tests assume Vitest and @vue/test-utils.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: writes-files
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Vue 3 patterns
|
|
14
|
+
|
|
15
|
+
Write Vue 3 components whose state stays reactive, whose side effects clean up, and whose contracts (props, emits, models) are typed. For Nuxt-specific concerns (useFetch, server routes, SSR), use `nuxt-patterns` alongside this skill.
|
|
16
|
+
|
|
17
|
+
## 0. Before you write
|
|
18
|
+
|
|
19
|
+
1. Read `package.json` for the Vue version, Pinia, Vue Router, Vitest and `@vue/test-utils`. APIs marked 3.5 below need Vue 3.5 or later.
|
|
20
|
+
2. Match the house style: `<script setup lang="ts">` versus Options API, store layout, file naming. Do not convert a codebase's Options API components to Composition API unless asked.
|
|
21
|
+
3. Find an existing component or composable that does something similar and copy its structure.
|
|
22
|
+
|
|
23
|
+
## 1. Reactivity rules
|
|
24
|
+
|
|
25
|
+
| Situation | Use |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Primitive, or a value you replace wholesale | `ref()` |
|
|
28
|
+
| Object you only mutate in place, never reassign | `reactive()` (or just `ref()` everywhere for consistency) |
|
|
29
|
+
| Large immutable data (API payloads, lists you replace) | `shallowRef()` and assign a new value |
|
|
30
|
+
| Derived value | `computed()`, never a watcher that writes another ref |
|
|
31
|
+
| Side effect when something changes | `watch()` / `watchEffect()` |
|
|
32
|
+
|
|
33
|
+
Reactivity breaks in predictable places. Check each one:
|
|
34
|
+
|
|
35
|
+
1. **Destructuring a `reactive` object** gives plain values: `const { count } = state` never updates. Use `toRefs(state)` or keep `state.count`.
|
|
36
|
+
2. **Reassigning a `reactive` variable** (`state = reactive({...})`) disconnects the template. Mutate fields or switch to `ref`.
|
|
37
|
+
3. **Destructuring a Pinia store** loses reactivity for state and getters. Use `const { items, total } = storeToRefs(store)`; take actions directly from the store.
|
|
38
|
+
4. **Passing `props.x` into a composable** passes a snapshot. Pass `() => props.x` or `toRef(props, 'x')` and read it with `toValue()` inside.
|
|
39
|
+
5. **Props destructure**: on Vue 3.5+, `const { size = 'md' } = defineProps<...>()` stays reactive, but `watch(size, ...)` does not work; watch `() => size`. On earlier versions, do not destructure props.
|
|
40
|
+
6. **`.value`**: needed in script, never in templates for top-level refs. A ref nested inside a plain object in the template is not unwrapped.
|
|
41
|
+
|
|
42
|
+
## 2. Computed and watchers
|
|
43
|
+
|
|
44
|
+
- `computed` getters must be pure: no requests, no mutation, no writes to other refs.
|
|
45
|
+
- Prefer `watch(source, cb)` with an explicit source over `watchEffect` when the effect does async work, so the dependencies are obvious.
|
|
46
|
+
- Cancel stale async work. Use the `onCleanup` argument (`watch(id, async (v, _old, onCleanup) => { const ctl = new AbortController(); onCleanup(() => ctl.abort()); ... })`), or `onWatcherCleanup()` on 3.5+.
|
|
47
|
+
- Watchers created synchronously in `setup` stop with the component. A watcher created after an `await` or inside a timeout does not: keep the returned stop handle and call it in `onUnmounted`.
|
|
48
|
+
- Use `{ immediate: true }` instead of calling the handler once by hand. Use `{ deep: true }` only when you truly need nested changes; it walks the whole object.
|
|
49
|
+
|
|
50
|
+
## 3. Composables
|
|
51
|
+
|
|
52
|
+
1. Name them `useX`, put them in `composables/`, and return an object of refs (not a `reactive`) so callers can destructure.
|
|
53
|
+
2. Accept `MaybeRefOrGetter<T>` arguments and read them with `toValue()` inside a `watch` or `computed`.
|
|
54
|
+
3. Every listener, interval, observer or subscription a composable starts gets torn down in `onUnmounted` (or `onScopeDispose` when it may run outside a component).
|
|
55
|
+
4. Call composables synchronously at the top of `setup`, never inside an event handler, `if`, or after `await`.
|
|
56
|
+
5. Keep shared module-level state deliberate: a `ref` declared outside the function is a singleton across every component and, under SSR, across every request. For SSR apps put shared state in Pinia instead.
|
|
57
|
+
|
|
58
|
+
## 4. Component contracts
|
|
59
|
+
|
|
60
|
+
```vue
|
|
61
|
+
<script setup lang="ts">
|
|
62
|
+
const props = withDefaults(defineProps<{ items: Item[]; pageSize?: number }>(), { pageSize: 20 })
|
|
63
|
+
const emit = defineEmits<{ select: [id: string]; close: [] }>()
|
|
64
|
+
const query = defineModel<string>('query', { default: '' })
|
|
65
|
+
</script>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- Never mutate a prop. To edit a parent's value, use `defineModel` (3.4+) or emit an event. For a local editable copy, `const draft = ref(structuredClone(toRaw(props.item)))` and say when it resyncs.
|
|
69
|
+
- Type emits so callers get checked payloads. Emit names are camelCase in script, listened to as `@select` or `@update:query`.
|
|
70
|
+
- Use `v-for` with a stable `:key` from the data, never the index for lists that reorder.
|
|
71
|
+
- Never put `v-if` and `v-for` on the same element; filter with a `computed` first.
|
|
72
|
+
- Use `useTemplateRef('name')` (3.5+) or a `ref(null)` with a matching `ref="name"` for DOM access, and only touch it after `onMounted`.
|
|
73
|
+
- Render untrusted HTML only after sanitising it; `v-html` with user content is an XSS bug.
|
|
74
|
+
|
|
75
|
+
## 5. Pinia
|
|
76
|
+
|
|
77
|
+
- Prefer setup stores (`defineStore('cart', () => { ... return { items, total, add } })`) when the codebase has no preference. Return every piece of state, or SSR hydration and devtools miss it.
|
|
78
|
+
- Keep server calls in actions, not in components, and handle errors there.
|
|
79
|
+
- Use `storeToRefs` when destructuring (rule 1.3).
|
|
80
|
+
- Do not call `useCartStore()` at module top level; call it inside `setup`, a composable, an action, or a function that runs after `app.use(pinia)`. Under SSR, a top-level call shares one store across requests.
|
|
81
|
+
|
|
82
|
+
## 6. Tests
|
|
83
|
+
|
|
84
|
+
1. Use Vitest with `@vue/test-utils` (`mount`, or `shallowMount` only when children are heavy).
|
|
85
|
+
2. Test through the rendered output and emitted events: `wrapper.find('[data-test="save"]').trigger('click')`, then `await nextTick()` or `await flushPromises()`, then assert on `wrapper.text()` or `wrapper.emitted('select')`.
|
|
86
|
+
3. For components using Pinia, mount with `global: { plugins: [createTestingPinia({ createSpy: vi.fn })] }` from `@pinia/testing`, or a fresh `createPinia()` per test.
|
|
87
|
+
4. Test composables by calling them inside a tiny host component, or directly when they use no lifecycle hooks.
|
|
88
|
+
5. Mock the network at the boundary (fetch or the API module), not the component under test.
|
|
89
|
+
|
|
90
|
+
## Stop and ask the user
|
|
91
|
+
|
|
92
|
+
- The fix requires switching state management (Vuex to Pinia, Options to Composition API).
|
|
93
|
+
- A prop needs two-way binding but the parent is outside the files you were asked to touch.
|
|
94
|
+
- Upgrading Vue to get a 3.5 API would be the simplest fix.
|
|
95
|
+
|
|
96
|
+
## Never
|
|
97
|
+
|
|
98
|
+
- Never mutate props or a store's state from a template expression.
|
|
99
|
+
- Never silence a reactivity bug with `forceUpdate`, `key` bumping or `setTimeout`; find the lost reference.
|
|
100
|
+
- Never leave a listener, interval or watcher without a teardown path.
|
|
101
|
+
|
|
102
|
+
## Report back
|
|
103
|
+
|
|
104
|
+
List the files changed, which reactivity or contract rule each change applies, the test command you ran and its result, and anything you could not verify in a browser.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"My Vue component stops updating after I destructure the reactive state object, why?",
|
|
4
|
+
"Write a useDebouncedSearch composable in Vue 3 that cancels stale requests",
|
|
5
|
+
"Convert this Vue child component to defineModel instead of mutating the prop",
|
|
6
|
+
"Set up a Pinia setup store for the cart and use it from a script setup component",
|
|
7
|
+
"Add Vue Test Utils tests for the dropdown component's select event"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"My Nuxt page shows a hydration mismatch warning after useFetch",
|
|
11
|
+
"Review this Vue pull request for watcher leaks and prop mutation",
|
|
12
|
+
"Migrate this Svelte 4 store to Svelte 5 runes",
|
|
13
|
+
"Convert this Angular component to signals and standalone",
|
|
14
|
+
"Write a React custom hook that debounces search input"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-accessibility
|
|
3
|
+
description: Builds and fixes web UI so it meets WCAG 2.2 Level AA, starting from semantic HTML and adding keyboard support, focus management, labelled forms with announced errors, sufficient colour contrast and ARIA only where native elements fall short, then checks the result with axe and a screen reader. Use when writing or changing components, forms, dialogs, menus or pages that people must be able to use with a keyboard, screen reader, zoom or voice control.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Works on any HTML-producing stack (plain HTML, React, Vue, Svelte, Angular, server templates). Automated checks need Node and a browser.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: writes-files
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Web accessibility (WCAG 2.2 AA)
|
|
14
|
+
|
|
15
|
+
Goal: every user can perceive, operate and understand the UI. Fix the markup first; ARIA and JavaScript come last.
|
|
16
|
+
|
|
17
|
+
## 0. Before you start
|
|
18
|
+
|
|
19
|
+
1. Find what the project already has: a component library (does it ship accessible primitives?), an a11y lint plugin (`eslint-plugin-jsx-a11y`, `eslint-plugin-vuejs-accessibility`, `@angular-eslint` template rules), axe in tests (`@axe-core/playwright`, `jest-axe`, `vitest-axe`, `cypress-axe`).
|
|
20
|
+
2. Reuse the project's accessible primitives (dialog, menu, tabs, combobox) instead of building new ones.
|
|
21
|
+
3. If the design requires something that cannot meet AA (text over a busy image with no overlay, a drag-only interaction, a hover-only reveal), **stop and tell the user** which criterion it fails and propose an alternative. Do not ship it silently.
|
|
22
|
+
|
|
23
|
+
## 1. Semantic HTML first
|
|
24
|
+
|
|
25
|
+
Decision rule: if a native element does the job, use it. It brings role, name, keyboard behaviour and focus for free.
|
|
26
|
+
|
|
27
|
+
| Need | Use | Never |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| Action | `<button type="button">` | `<div onclick>`, `<a href="#">` |
|
|
30
|
+
| Navigation | `<a href="/path">` | `<button>` that changes location |
|
|
31
|
+
| Page regions | `<header> <nav> <main> <aside> <footer>`, one `<main>` | div soup |
|
|
32
|
+
| Headings | `<h1>`–`<h6>` in order, no skipped levels for styling | bold `<div>` as heading |
|
|
33
|
+
| Lists, tables | `<ul>/<ol>`, `<table>` with `<th scope>` and `<caption>` | grid of divs for tabular data |
|
|
34
|
+
| Toggle | `<input type="checkbox">` or `<button aria-pressed>` | clickable span |
|
|
35
|
+
| Disclosure | `<details><summary>` | custom JS when native fits |
|
|
36
|
+
| Modal | `<dialog>` opened with `showModal()` | positioned div without focus trap |
|
|
37
|
+
|
|
38
|
+
- Set `<html lang="...">` and a unique, descriptive `<title>` per page or route.
|
|
39
|
+
- Images: meaningful → `alt` describing purpose; decorative → `alt=""`. Icon-only buttons need an accessible name (visible text, `aria-label`, or visually hidden text).
|
|
40
|
+
- Add a "Skip to main content" link as the first focusable element on pages with repeated navigation.
|
|
41
|
+
|
|
42
|
+
## 2. Keyboard and focus
|
|
43
|
+
|
|
44
|
+
1. Everything that works with a mouse works with the keyboard: Tab/Shift+Tab to move, Enter/Space to activate, Escape to close, arrow keys inside composite widgets (tabs, menus, listboxes, radio groups).
|
|
45
|
+
2. Tab order follows visual order. Never use positive `tabindex`. Use `tabindex="0"` only on custom interactive elements, `tabindex="-1"` for elements you focus from script.
|
|
46
|
+
3. Focus is always visible. Never `outline: none` without a replacement; prefer `:focus-visible` styles with at least 3:1 contrast against the background.
|
|
47
|
+
4. Focused elements must not be fully hidden by sticky headers, cookie banners or chat widgets (WCAG 2.4.11). Use `scroll-padding-top` for sticky headers.
|
|
48
|
+
5. Focus management in dynamic UI:
|
|
49
|
+
- Opening a dialog moves focus into it; Tab stays inside; Escape closes; closing returns focus to the trigger.
|
|
50
|
+
- After client-side route changes, move focus to the new page's `<h1>` (or main) and update `<title>`.
|
|
51
|
+
- When an item is deleted, move focus to a sensible neighbour, not `<body>`.
|
|
52
|
+
6. No keyboard traps, no actions that fire on focus alone.
|
|
53
|
+
|
|
54
|
+
## 3. ARIA only when needed
|
|
55
|
+
|
|
56
|
+
Rules, in order:
|
|
57
|
+
1. No ARIA is better than wrong ARIA. Don't add `role="button"` to a `<button>`.
|
|
58
|
+
2. If you build a custom widget, follow the matching WAI-ARIA Authoring Practices pattern completely: role, states (`aria-expanded`, `aria-selected`, `aria-checked`), keyboard model, and focus handling.
|
|
59
|
+
3. Names: prefer visible text or `<label>`; then `aria-labelledby`; `aria-label` last. The accessible name must contain the visible label text (WCAG 2.5.3).
|
|
60
|
+
4. Live updates (toasts, async results, form status): an `aria-live="polite"` region (or `role="status"`) that exists in the DOM **before** the message is inserted. Use `role="alert"` only for urgent errors.
|
|
61
|
+
5. `aria-hidden="true"` never on focusable elements or their ancestors. Use `inert` to disable background content behind a non-native modal.
|
|
62
|
+
|
|
63
|
+
## 4. Forms and errors
|
|
64
|
+
|
|
65
|
+
- Every input has a programmatic label: `<label for>` or wrapping `<label>`. Placeholder is not a label.
|
|
66
|
+
- Group related controls (radios, checkboxes, address parts) in `<fieldset>` with `<legend>`.
|
|
67
|
+
- Use correct `type` and `autocomplete` tokens (`email`, `tel`, `given-name`, `current-password`, `one-time-code`) so browsers and password managers can fill fields.
|
|
68
|
+
- Mark required fields in text or with a visible symbol explained on the page, plus `required` or `aria-required="true"`.
|
|
69
|
+
- Errors:
|
|
70
|
+
1. Show the error text next to the field, linked with `aria-describedby`; set `aria-invalid="true"`.
|
|
71
|
+
2. Say what is wrong and how to fix it ("Enter a date like 31/12/2026"), not just "Invalid".
|
|
72
|
+
3. On submit with errors, move focus to the first invalid field or to an error summary that links to each field.
|
|
73
|
+
4. Never rely on colour alone (add an icon or text).
|
|
74
|
+
- Don't ask again for information the user already entered in the same flow; prefill or offer to reuse it (3.3.7).
|
|
75
|
+
- Login must not require a cognitive test such as solving a puzzle or transcribing characters unless there is an alternative; allow paste and password managers (3.3.8).
|
|
76
|
+
|
|
77
|
+
## 5. Visual: contrast, size, zoom, motion
|
|
78
|
+
|
|
79
|
+
- Text contrast at least 4.5:1; large text (at least 24px, or 18.66px bold) at least 3:1.
|
|
80
|
+
- UI component boundaries, focus indicators, icons and chart lines that carry meaning: at least 3:1 against adjacent colours.
|
|
81
|
+
- Pointer targets at least 24×24 CSS px, or enough spacing that a 24px circle around each does not overlap another (2.5.8). Inline links in sentences are exempt.
|
|
82
|
+
- Content reflows at 320 CSS px wide (400% zoom) without two-dimensional scrolling; text resizes to 200% without loss. Use relative units and avoid fixed heights on text containers.
|
|
83
|
+
- Respect `prefers-reduced-motion`: disable parallax, autoplay and large transitions. Anything that moves for more than 5 seconds needs pause/stop.
|
|
84
|
+
- Dragging (sliders, sortable lists, maps) needs a single-pointer alternative such as buttons or inputs (2.5.7).
|
|
85
|
+
- Check both light and dark themes, and hover, focus, disabled and error states.
|
|
86
|
+
|
|
87
|
+
## 6. Test
|
|
88
|
+
|
|
89
|
+
Run all three; automated tools catch only part of the problems.
|
|
90
|
+
|
|
91
|
+
1. **Automated**: run the project's a11y lint, then axe against rendered pages or components. Example with Playwright:
|
|
92
|
+
```ts
|
|
93
|
+
import AxeBuilder from '@axe-core/playwright';
|
|
94
|
+
const results = await new AxeBuilder({ page }).withTags(['wcag2a','wcag2aa','wcag21aa','wcag22aa']).analyze();
|
|
95
|
+
expect(results.violations).toEqual([]);
|
|
96
|
+
```
|
|
97
|
+
Lighthouse's accessibility category also runs axe rules.
|
|
98
|
+
2. **Keyboard pass**: unplug the mouse. Tab through the changed flow end to end. Check visible focus, order, traps, Escape, and return focus.
|
|
99
|
+
3. **Screen reader pass** on the changed flow: VoiceOver (macOS/iOS), NVDA (Windows, free) or TalkBack (Android). Check names, roles, states, headings list, landmarks, and that errors and status messages are announced.
|
|
100
|
+
4. Zoom to 200% and 400%, and check at 320px width.
|
|
101
|
+
|
|
102
|
+
If you cannot run a screen reader in this environment, say so in the report; don't claim it passed.
|
|
103
|
+
|
|
104
|
+
## Never
|
|
105
|
+
|
|
106
|
+
- Never remove focus outlines without a visible replacement.
|
|
107
|
+
- Never hide content from assistive tech that sighted users get, or the reverse, unless it is purely decorative.
|
|
108
|
+
- Never disable zoom (`user-scalable=no`, `maximum-scale=1`).
|
|
109
|
+
- Never add an accessibility overlay script as the fix.
|
|
110
|
+
- Never claim "WCAG compliant" from an automated scan alone.
|
|
111
|
+
|
|
112
|
+
## Report back
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
Changed: <files and components>
|
|
116
|
+
Fixed: <WCAG criterion> — <what was wrong> → <what changed> (one line each)
|
|
117
|
+
Checks: axe <n violations before → after>, keyboard pass <done/not done>, screen reader <which one / not run>
|
|
118
|
+
Open: <issues needing design or product decisions>
|
|
119
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Make this custom dropdown work with the keyboard and screen readers",
|
|
4
|
+
"Our signup form errors aren't announced by VoiceOver, fix the markup so they are",
|
|
5
|
+
"Build an accessible modal dialog component that traps focus and returns it on close",
|
|
6
|
+
"The grey button text fails contrast, help me get this page to WCAG 2.2 AA",
|
|
7
|
+
"Add axe checks to our Playwright tests and fix whatever violations they find"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Audit this pull request for accessibility problems and list findings, don't change anything",
|
|
11
|
+
"Our LCP is 4 seconds on mobile, find out why the hero image loads so late",
|
|
12
|
+
"Set up design tokens and dark mode theming for our stylesheet",
|
|
13
|
+
"Write Playwright end-to-end tests for the checkout flow",
|
|
14
|
+
"Review this React component for unnecessary re-renders"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-performance
|
|
3
|
+
description: Measures and improves page speed against Core Web Vitals (LCP, INP, CLS) using field data from CrUX or real-user monitoring and lab runs in Lighthouse and DevTools, then fixes the actual bottleneck, whether that is image and font delivery, render-blocking resources, HTTP caching, or too much JavaScript on the main thread. Use when a site or page feels slow, a Lighthouse or PageSpeed Insights score dropped, Search Console flags poor Core Web Vitals, or a bundle or asset change needs a before-and-after measurement.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Lab measurement needs Node and Chrome (Lighthouse CLI). Field data needs network access to PageSpeed Insights or the project's RUM tool.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Web performance
|
|
14
|
+
|
|
15
|
+
Measure, find the one thing that dominates, fix it, measure again. Never optimise from intuition.
|
|
16
|
+
|
|
17
|
+
## Targets
|
|
18
|
+
|
|
19
|
+
Core Web Vitals, judged at the 75th percentile of real page loads, split by mobile and desktop:
|
|
20
|
+
|
|
21
|
+
| Metric | What it measures | Good | Poor |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| LCP (Largest Contentful Paint) | when the main content appears | ≤ 2.5 s | > 4.0 s |
|
|
24
|
+
| INP (Interaction to Next Paint) | delay from input to the next frame | ≤ 200 ms | > 500 ms |
|
|
25
|
+
| CLS (Cumulative Layout Shift) | unexpected movement of content | ≤ 0.1 | > 0.25 |
|
|
26
|
+
|
|
27
|
+
TTFB and FCP are diagnostics for LCP, not goals on their own. A Lighthouse navigation run (the default, and what PageSpeed Insights' lab section shows) cannot measure INP because nobody interacts; use Total Blocking Time as the lab proxy, record a Lighthouse user-flow timespan or a DevTools Performance trace of the interaction to debug it, and confirm INP in the field.
|
|
28
|
+
|
|
29
|
+
## 1. Measure first
|
|
30
|
+
|
|
31
|
+
1. **Field data** (what users get): PageSpeed Insights for the URL and origin (CrUX), Search Console's Core Web Vitals report, or the project's RUM. If the project has none, suggest the `web-vitals` library sending `onLCP`, `onINP`, `onCLS` to an analytics endpoint.
|
|
32
|
+
2. **Lab data** (to debug): `npx lighthouse <url> --preset=desktop` or the default mobile throttling, run 3–5 times and take the median. Use a production build, never the dev server.
|
|
33
|
+
3. Record a baseline: metric values, page, device, build commit. Without a baseline, **stop**: you cannot prove the fix.
|
|
34
|
+
4. If field and lab disagree, trust the field and find which pages, devices or interactions are slow.
|
|
35
|
+
|
|
36
|
+
## 2. Diagnose by metric
|
|
37
|
+
|
|
38
|
+
### LCP
|
|
39
|
+
Break it into: TTFB → resource load delay → resource load time → render delay (DevTools Performance panel shows the LCP element and phases).
|
|
40
|
+
- Slow TTFB: cache HTML at the CDN, fix slow server work, avoid redirect chains.
|
|
41
|
+
- LCP image discovered late: put it in the HTML as `<img>` (not a CSS background or JS-inserted), add `fetchpriority="high"`, never `loading="lazy"` on it. Preload only if it can't be in the markup.
|
|
42
|
+
- Large image: serve AVIF/WebP, `srcset` and `sizes` sized to the slot, compress.
|
|
43
|
+
- Render delay: inline critical CSS or keep CSS small; `defer` or `async` non-critical scripts; avoid client-only rendering of above-the-fold content.
|
|
44
|
+
|
|
45
|
+
### INP
|
|
46
|
+
Find the slow interaction (RUM attribution or DevTools Performance with CPU throttling). Split it into input delay, processing time, presentation delay.
|
|
47
|
+
- Long tasks (> 50 ms) block input: break work up and yield (`await scheduler.yield()` where supported, otherwise `setTimeout`), move heavy work to a Web Worker.
|
|
48
|
+
- Do the visible update first, defer analytics and non-urgent work.
|
|
49
|
+
- Large DOM and expensive re-renders: virtualise long lists, avoid layout thrash (read layout, then write), use `content-visibility: auto` for off-screen sections.
|
|
50
|
+
- Third-party scripts (tag managers, chat, A/B tools) are frequent culprits: load them later or remove them.
|
|
51
|
+
|
|
52
|
+
### CLS
|
|
53
|
+
DevTools "Layout shift" track or RUM attribution names the shifting element.
|
|
54
|
+
- Images, video, iframes and ads: set `width`/`height` attributes or `aspect-ratio`; reserve space for embeds and banners.
|
|
55
|
+
- Web fonts: `font-display: swap` or `optional`, preload only the one or two critical font files, and use metric overrides (`size-adjust`, `ascent-override`) on the fallback to reduce reflow.
|
|
56
|
+
- Never insert content above existing content after load unless it responds to user input.
|
|
57
|
+
- Animate `transform` and `opacity`, not `top`, `height` or `margin`.
|
|
58
|
+
- Make pages eligible for the back/forward cache (no `unload` handlers, no `Cache-Control: no-store` on HTML unless required).
|
|
59
|
+
|
|
60
|
+
## 3. Common fixes across metrics
|
|
61
|
+
|
|
62
|
+
**Images**: modern formats, responsive `srcset`, explicit dimensions, `loading="lazy"` and `decoding="async"` below the fold only.
|
|
63
|
+
|
|
64
|
+
**Fonts**: self-host WOFF2, subset, limit families and weights, `preconnect` if a font CDN is used.
|
|
65
|
+
|
|
66
|
+
**Caching**:
|
|
67
|
+
- Fingerprinted static assets (`app.3f9a1c.js`): `Cache-Control: public, max-age=31536000, immutable`.
|
|
68
|
+
- HTML: short `max-age` or `no-cache` with revalidation (`ETag`), so deploys show up.
|
|
69
|
+
- Enable Brotli or gzip compression and HTTP/2 or HTTP/3 at the server or CDN.
|
|
70
|
+
- `preconnect` to critical third-party origins, and no more than a few.
|
|
71
|
+
|
|
72
|
+
**JavaScript cost**:
|
|
73
|
+
1. Measure bundles with the build tool's analyzer (`vite-bundle-visualizer`, `webpack-bundle-analyzer`, `next build` output, `source-map-explorer`).
|
|
74
|
+
2. Code-split by route and load rarely used features with dynamic `import()`.
|
|
75
|
+
3. Replace heavy dependencies with smaller ones or platform APIs; check tree shaking works (ES modules, `sideEffects` set).
|
|
76
|
+
4. Ship less hydration: server-render static parts and hydrate only interactive islands where the framework supports it.
|
|
77
|
+
5. Set a budget (for example, JS per route in KB compressed) and fail CI when it is exceeded, if the project agrees.
|
|
78
|
+
|
|
79
|
+
## 4. Verify
|
|
80
|
+
|
|
81
|
+
1. Rebuild for production and repeat the exact measurement from step 1 (same URL, device, run count).
|
|
82
|
+
2. Report before → after per metric. If a change didn't move the target metric, revert it unless it has another justification.
|
|
83
|
+
3. Field data takes up to 28 days to show changes in CrUX; say so instead of claiming a field win from lab results.
|
|
84
|
+
|
|
85
|
+
## Stop and ask the user
|
|
86
|
+
|
|
87
|
+
- Before removing or delaying a third-party script (analytics, consent, ads, chat): it is usually a business decision.
|
|
88
|
+
- Before changing CDN, cache headers on HTML, or server config you can't test locally.
|
|
89
|
+
- Before swapping a framework or major dependency.
|
|
90
|
+
|
|
91
|
+
## Never
|
|
92
|
+
|
|
93
|
+
- Never optimise for the Lighthouse score while field metrics get worse.
|
|
94
|
+
- Never lazy-load the LCP image or hide content to "improve" LCP.
|
|
95
|
+
- Never measure on the dev server or with browser extensions active.
|
|
96
|
+
- Never cache HTML as `immutable`.
|
|
97
|
+
|
|
98
|
+
## Report back
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Page/route: <url> Device: <mobile|desktop> Data: <field|lab>
|
|
102
|
+
Baseline: LCP <s> INP/TBT <ms> CLS <n> (commit <sha>)
|
|
103
|
+
Bottleneck: <metric> — <element or task> — <cause>
|
|
104
|
+
Changes: <file> — <what changed> (one line each)
|
|
105
|
+
After: LCP <s> INP/TBT <ms> CLS <n>
|
|
106
|
+
Not verified: <e.g. field INP pending CrUX update>
|
|
107
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"PageSpeed Insights says our INP is poor on mobile, what is blocking the main thread?",
|
|
4
|
+
"The product page jumps around while loading, fix the layout shift",
|
|
5
|
+
"Our Lighthouse performance score dropped from 92 to 61 after the last release",
|
|
6
|
+
"Set long-lived cache headers for our hashed JS bundles and check the fonts aren't render-blocking",
|
|
7
|
+
"Search Console flags 300 URLs with poor Core Web Vitals, where do we start?"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Benchmark these two JSON parsers in Node and tell me which is faster",
|
|
11
|
+
"Optimise this slow SQL query that powers the dashboard",
|
|
12
|
+
"Our page fails colour contrast and keyboard navigation checks",
|
|
13
|
+
"Reorganise our CSS with cascade layers so we can stop using !important",
|
|
14
|
+
"Reduce re-renders in this React list using memo and useCallback"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-scraping
|
|
3
|
+
description: Responsible, reliable website scraping and crawling, checking robots.txt and the site's terms before fetching, looking for an official API or feed first, throttling requests with backoff and an identifying User-Agent, parsing static HTML with selectors versus driving a headless browser only when the page needs JavaScript, walking pagination, detecting layout changes, and storing raw responses separately from parsed records. Use when writing or fixing a scraper or crawler, extracting listings, prices or tables from web pages, a scraper suddenly returns empty fields or gets 429 or 403 responses, or deciding whether a site may be scraped at all.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Needs network access to the target site and the project's language runtime; examples name Python (httpx, BeautifulSoup/lxml, Playwright) and Node (fetch, cheerio, Playwright) libraries.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: data
|
|
9
|
+
kete-loom/risk: network
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Web scraping
|
|
14
|
+
|
|
15
|
+
Collect data from websites in a way the site owner would tolerate, that keeps working when the page changes, and that never loses what was fetched.
|
|
16
|
+
|
|
17
|
+
## 1. May we scrape this? (do this first)
|
|
18
|
+
|
|
19
|
+
1. **Look for an official route**: a public API, data export, RSS/Atom feed, sitemap, or open-data download. If one exists, use it and stop here.
|
|
20
|
+
2. **Read `robots.txt`** (`https://<host>/robots.txt`, format in RFC 9309). Follow the groups whose `User-agent` matches your crawler's product token (several matching groups are combined); use the `*` group only if no group matches. The longest matching path rule wins, and `Allow` should win a tie. If robots.txt returns 4xx, it places no restrictions; if it returns 5xx or cannot be reached, treat the whole site as disallowed. Fetch robots.txt separately for each scheme and host (with port): each serves its own file. Do not cache it for more than 24 hours. Honour `Crawl-delay` if present, even though RFC 9309 does not define it.
|
|
21
|
+
3. **Read the terms of service** for clauses on automated access, scraping or reuse.
|
|
22
|
+
4. **Stop and ask the user** before going further if any of these hold:
|
|
23
|
+
- robots.txt disallows the paths, or the terms forbid automated access;
|
|
24
|
+
- the data sits behind a login, paywall or CAPTCHA;
|
|
25
|
+
- the pages contain personal data (names, emails, phone numbers, profiles);
|
|
26
|
+
- the user plans to republish or sell the content, or to scrape at large volume.
|
|
27
|
+
These raise legal questions (contract terms, copyright and database rights, computer-misuse laws, data-protection laws such as GDPR) that vary by country. This skill does not give legal advice; tell the user a lawyer should review commercial or large-scale use.
|
|
28
|
+
|
|
29
|
+
**Never**: bypass CAPTCHAs, logins you were not given, IP bans or other access controls; rotate proxies or spoof browsers to evade a block; collect personal data without a lawful reason the user has confirmed; or ignore a site's request to stop.
|
|
30
|
+
|
|
31
|
+
## 2. Be polite
|
|
32
|
+
|
|
33
|
+
- Identify yourself: a `User-Agent` such as `ExampleBot/1.0 (+https://example.com/bot; ops@example.com)`. Ask the user for the contact details.
|
|
34
|
+
- One request at a time per host by default, with a delay (start at 1 to 2 seconds or the `Crawl-delay`). Never run parallel workers against one small site.
|
|
35
|
+
- On `429` or `503`, honour `Retry-After`; otherwise back off exponentially with jitter, and stop after a few attempts. On repeated `403`, stop and report: it usually means you are blocked, and evading it is off the table.
|
|
36
|
+
- Use conditional requests (`If-None-Match` / `If-Modified-Since` with the stored `ETag` / `Last-Modified`) and cache responses so reruns do not re-download.
|
|
37
|
+
- Scrape off-peak for the site's time zone when volume is large.
|
|
38
|
+
|
|
39
|
+
## 3. Choose the fetch method
|
|
40
|
+
|
|
41
|
+
Decide in this order and take the first that works:
|
|
42
|
+
|
|
43
|
+
1. **JSON behind the page**: open the browser's network panel; many sites load data from an XHR/fetch endpoint. If it is public and allowed, request it directly.
|
|
44
|
+
2. **Static HTML**: if the data is in the raw response (`curl -s <url> | grep '<a known value>'`), use an HTTP client plus a parser (Python `httpx` + `selectolax`, `lxml` or BeautifulSoup; Node `fetch` + `cheerio`).
|
|
45
|
+
3. **Embedded data**: look for `<script type="application/ld+json">`, `__NEXT_DATA__` or similar JSON in the HTML; parse that instead of the markup.
|
|
46
|
+
4. **Headless browser** (Playwright) only when content is rendered by JavaScript and none of the above work. Wait for a specific selector, not a fixed sleep; block images and fonts to cut load; close pages and contexts.
|
|
47
|
+
|
|
48
|
+
## 4. Parse robustly
|
|
49
|
+
|
|
50
|
+
- Prefer stable hooks: `id`, `data-*` attributes, semantic tags, structured data. Avoid long positional XPaths and generated class names like `css-1x2y3z`.
|
|
51
|
+
- Parse each record into a typed schema (dataclass, Pydantic, zod) and validate it; a missing required field is an error, not an empty string.
|
|
52
|
+
- Normalize as a separate step: trim whitespace, parse prices into integer minor units plus currency, dates into ISO 8601 with time zone, resolve relative URLs against the page URL.
|
|
53
|
+
- Keep the source URL and fetch timestamp on every record.
|
|
54
|
+
|
|
55
|
+
## 5. Pagination and crawling
|
|
56
|
+
|
|
57
|
+
- Follow the site's own next link or cursor parameter; stop when it disappears, a page returns zero items, or a page repeats the previous one's items.
|
|
58
|
+
- Set a hard maximum page count and total request budget per run.
|
|
59
|
+
- For crawls, keep a visited set keyed by normalized URL (lowercase host, drop fragments and tracking parameters), stay within the allowed host and path prefix, and prefer the sitemap for discovery.
|
|
60
|
+
- Make runs resumable: persist the frontier and the last cursor.
|
|
61
|
+
|
|
62
|
+
## 6. Store raw and parsed separately
|
|
63
|
+
|
|
64
|
+
- **Raw**: the response body, status, headers, URL and fetch time, written once to object storage or disk (for example `raw/<host>/<YYYY-MM-DD>/<sha256 of URL>.html.gz`). Never overwrite it. Parser bugs are then fixed by re-parsing, not re-fetching.
|
|
65
|
+
- **Parsed**: validated records in a table with a natural key (the site's item ID or canonical URL), upserted so reruns do not duplicate. Keep `first_seen` and `last_seen`.
|
|
66
|
+
- Set a retention period for raw pages with the user, especially if they contain personal data.
|
|
67
|
+
|
|
68
|
+
## 7. Detect change and breakage
|
|
69
|
+
|
|
70
|
+
- After each run, compare against the previous run: record count, share of records with each required field, and new parse errors. Alert when they move beyond a threshold (for example count down 30% or a field's fill rate below 90%).
|
|
71
|
+
- Keep a few saved HTML fixtures per page type and unit-test the parser against them; when the site changes, add the new page as a fixture before fixing the parser.
|
|
72
|
+
- For content change monitoring, hash the normalized extracted content, not the whole page (ads and timestamps change every load).
|
|
73
|
+
|
|
74
|
+
## Report back
|
|
75
|
+
|
|
76
|
+
- Target site, permission findings (official API, robots.txt result, terms, personal data) and what the user decided.
|
|
77
|
+
- Fetch method chosen and why; rate limit and User-Agent used.
|
|
78
|
+
- Output schema, storage locations for raw and parsed data.
|
|
79
|
+
- A sample run: pages fetched, records parsed, errors, and how long it took.
|
|
80
|
+
- Known fragile selectors and the change-detection checks in place.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Scrape job listings from this careers site into a CSV, including all pages",
|
|
4
|
+
"My BeautifulSoup scraper suddenly returns empty titles since the site redesign",
|
|
5
|
+
"Am I allowed to scrape this marketplace, and how do I check robots.txt properly?",
|
|
6
|
+
"The crawler keeps getting HTTP 429 from the target site, how should I throttle it?",
|
|
7
|
+
"This page renders its table with JavaScript, should I use Playwright to extract it?"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Click through our staging site and report any broken forms before the release",
|
|
11
|
+
"Audit our website's robots.txt and sitemap so Google indexes the right pages",
|
|
12
|
+
"Write Playwright end-to-end tests for our signup flow",
|
|
13
|
+
"Research and compare three vector databases with cited sources",
|
|
14
|
+
"Schedule the ingestion of our vendor's SFTP drop files into the warehouse every night"
|
|
15
|
+
]
|
|
16
|
+
}
|