@soleur/opencode 0.0.0-stage → 1.0.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/.claude-plugin/agents.manifest.json +476 -0
- package/.claude-plugin/plugin.json +42 -0
- package/README.md +44 -2
- package/agents/community/.gitkeep +0 -0
- package/agents/engineering/cto.md +87 -0
- package/agents/engineering/design/ddd-architect.md +95 -0
- package/agents/engineering/discovery/agent-finder.md +214 -0
- package/agents/engineering/discovery/functional-discovery.md +182 -0
- package/agents/engineering/infra/infra-security.md +151 -0
- package/agents/engineering/infra/platform-strategist.md +109 -0
- package/agents/engineering/infra/terraform-architect.md +171 -0
- package/agents/engineering/prompt-engineer.md +37 -0
- package/agents/engineering/research/best-practices-researcher.md +115 -0
- package/agents/engineering/research/framework-docs-researcher.md +93 -0
- package/agents/engineering/research/git-history-analyzer.md +53 -0
- package/agents/engineering/research/learnings-researcher.md +285 -0
- package/agents/engineering/research/repo-research-analyst.md +118 -0
- package/agents/engineering/review/agent-native-reviewer.md +279 -0
- package/agents/engineering/review/architecture-strategist.md +61 -0
- package/agents/engineering/review/code-quality-analyst.md +92 -0
- package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
- package/agents/engineering/review/data-integrity-guardian.md +82 -0
- package/agents/engineering/review/data-migration-expert.md +98 -0
- package/agents/engineering/review/deployment-verification-agent.md +183 -0
- package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
- package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
- package/agents/engineering/review/legacy-code-expert.md +55 -0
- package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
- package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
- package/agents/engineering/review/performance-oracle.md +130 -0
- package/agents/engineering/review/security-sentinel.md +167 -0
- package/agents/engineering/review/semgrep-sast.md +36 -0
- package/agents/engineering/review/test-design-reviewer.md +150 -0
- package/agents/engineering/review/user-impact-reviewer.md +70 -0
- package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
- package/agents/finance/budget-analyst.md +29 -0
- package/agents/finance/cfo.md +44 -0
- package/agents/finance/financial-reporter.md +30 -0
- package/agents/finance/revenue-analyst.md +30 -0
- package/agents/legal/clo.md +115 -0
- package/agents/legal/legal-compliance-auditor.md +110 -0
- package/agents/legal/legal-document-generator.md +134 -0
- package/agents/marketing/analytics-analyst.md +25 -0
- package/agents/marketing/brand-architect.md +181 -0
- package/agents/marketing/cmo.md +76 -0
- package/agents/marketing/conversion-optimizer.md +19 -0
- package/agents/marketing/copywriter.md +20 -0
- package/agents/marketing/fact-checker.md +70 -0
- package/agents/marketing/growth-strategist.md +145 -0
- package/agents/marketing/paid-media-strategist.md +28 -0
- package/agents/marketing/pricing-strategist.md +17 -0
- package/agents/marketing/programmatic-seo-specialist.md +25 -0
- package/agents/marketing/retention-strategist.md +23 -0
- package/agents/marketing/seo-aeo-analyst.md +164 -0
- package/agents/operations/coo.md +50 -0
- package/agents/operations/ops-advisor.md +78 -0
- package/agents/operations/ops-provisioner.md +101 -0
- package/agents/operations/ops-research.md +52 -0
- package/agents/operations/service-automator.md +278 -0
- package/agents/product/business-validator.md +206 -0
- package/agents/product/competitive-intelligence.md +89 -0
- package/agents/product/cpo.md +63 -0
- package/agents/product/design/ux-design-lead.md +209 -0
- package/agents/product/spec-flow-analyzer.md +122 -0
- package/agents/sales/cro.md +44 -0
- package/agents/sales/deal-architect.md +29 -0
- package/agents/sales/outbound-strategist.md +29 -0
- package/agents/sales/pipeline-analyst.md +29 -0
- package/agents/support/cco.md +48 -0
- package/agents/support/community-manager.md +570 -0
- package/agents/support/ticket-triage.md +70 -0
- package/bin/soleur-opencode.js +29 -0
- package/commands/go.md +659 -0
- package/commands/help.md +273 -0
- package/commands/sync.md +977 -0
- package/commands/version.md +103 -0
- package/hooks/antigravity-hooks.json +84 -0
- package/hooks/antigravity-session-start.sh +15 -0
- package/hooks/bare-root-cwd-guard.sh +131 -0
- package/hooks/browser-snapshot-credential-guard.sh +200 -0
- package/hooks/codex-session-start.sh +9 -0
- package/hooks/compaction-state.sh +525 -0
- package/hooks/destructive-command-guard.sh +1387 -0
- package/hooks/devin-session-start.sh +90 -0
- package/hooks/ext-filter-detect.sh +171 -0
- package/hooks/hooks.json +133 -0
- package/hooks/lib/hook-tool-kind.sh +24 -0
- package/hooks/lib/log-rotation.sh +176 -0
- package/hooks/lib/shell-argv.pl +576 -0
- package/hooks/memory-backstop.sh +1114 -0
- package/hooks/operator-stage-approval.sh +391 -0
- package/hooks/stop-hook.sh +367 -0
- package/hooks/unkept-promise-hook.sh +383 -0
- package/hooks/version-banner.sh +127 -0
- package/hooks/welcome-hook.sh +50 -0
- package/install.js +108 -0
- package/lib/agent-registry.ts +154 -0
- package/lib/c4-canonical-cli.mjs +34 -0
- package/lib/c4-canonical.mjs +46 -0
- package/lib/c4-from-components.ts +554 -0
- package/lib/go-routing.ts +81 -0
- package/lib/grok-inspect-contract.ts +311 -0
- package/lib/harness-model-map.ts +101 -0
- package/lib/harness-parity.ts +726 -0
- package/lib/harness-tool-map.ts +180 -0
- package/lib/harness.ts +716 -0
- package/lib/heartbeat-live-reconcile.ts +1153 -0
- package/lib/heartbeat-manifest.ts +342 -0
- package/lib/kb-coverage.ts +252 -0
- package/lib/pr-merge-poll.ts +103 -0
- package/lib/workflow-fidelity.ts +388 -0
- package/opencode/INSTRUCTIONS.md +152 -0
- package/opencode/agents/engineering/cto.md +10 -0
- package/opencode/agents/engineering/design/ddd-architect.md +10 -0
- package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
- package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
- package/opencode/agents/engineering/infra/infra-security.md +10 -0
- package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
- package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
- package/opencode/agents/engineering/prompt-engineer.md +10 -0
- package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
- package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
- package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
- package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
- package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
- package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
- package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
- package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
- package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
- package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
- package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
- package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
- package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
- package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
- package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
- package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
- package/opencode/agents/engineering/review/performance-oracle.md +10 -0
- package/opencode/agents/engineering/review/security-sentinel.md +10 -0
- package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
- package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
- package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
- package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
- package/opencode/agents/finance/budget-analyst.md +10 -0
- package/opencode/agents/finance/cfo.md +10 -0
- package/opencode/agents/finance/financial-reporter.md +10 -0
- package/opencode/agents/finance/revenue-analyst.md +10 -0
- package/opencode/agents/legal/clo.md +10 -0
- package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
- package/opencode/agents/legal/legal-document-generator.md +10 -0
- package/opencode/agents/marketing/analytics-analyst.md +10 -0
- package/opencode/agents/marketing/brand-architect.md +10 -0
- package/opencode/agents/marketing/cmo.md +10 -0
- package/opencode/agents/marketing/conversion-optimizer.md +10 -0
- package/opencode/agents/marketing/copywriter.md +10 -0
- package/opencode/agents/marketing/fact-checker.md +10 -0
- package/opencode/agents/marketing/growth-strategist.md +10 -0
- package/opencode/agents/marketing/paid-media-strategist.md +10 -0
- package/opencode/agents/marketing/pricing-strategist.md +10 -0
- package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
- package/opencode/agents/marketing/retention-strategist.md +10 -0
- package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
- package/opencode/agents/operations/coo.md +10 -0
- package/opencode/agents/operations/ops-advisor.md +10 -0
- package/opencode/agents/operations/ops-provisioner.md +10 -0
- package/opencode/agents/operations/ops-research.md +10 -0
- package/opencode/agents/operations/service-automator.md +10 -0
- package/opencode/agents/product/business-validator.md +10 -0
- package/opencode/agents/product/competitive-intelligence.md +10 -0
- package/opencode/agents/product/cpo.md +10 -0
- package/opencode/agents/product/design/ux-design-lead.md +10 -0
- package/opencode/agents/product/spec-flow-analyzer.md +10 -0
- package/opencode/agents/sales/cro.md +10 -0
- package/opencode/agents/sales/deal-architect.md +10 -0
- package/opencode/agents/sales/outbound-strategist.md +10 -0
- package/opencode/agents/sales/pipeline-analyst.md +10 -0
- package/opencode/agents/support/cco.md +10 -0
- package/opencode/agents/support/community-manager.md +10 -0
- package/opencode/agents/support/ticket-triage.md +10 -0
- package/opencode/commands/go.md +10 -0
- package/opencode/commands/help.md +10 -0
- package/opencode/commands/sync.md +10 -0
- package/opencode/commands/version.md +11 -0
- package/opencode/opencode.json +8 -0
- package/opencode/plugin.ts +493 -0
- package/package.json +36 -4
- package/scripts/admin-merge-ready.sh +545 -0
- package/scripts/admin-merge-ready.test.sh +753 -0
- package/scripts/affected-tests.sh +908 -0
- package/scripts/affected-tests.test.sh +1797 -0
- package/scripts/alpha-metrics.sh +78 -0
- package/scripts/alpha-metrics.test.sh +115 -0
- package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
- package/scripts/audit-flag-flip.sh +107 -0
- package/scripts/check-red-on-main.sh +316 -0
- package/scripts/ci-head-verdict.sh +363 -0
- package/scripts/cloud-detect.sh +193 -0
- package/scripts/delegation-verify.sh +657 -0
- package/scripts/delegation-verify.test.sh +1424 -0
- package/scripts/deploy-arm.sh +475 -0
- package/scripts/domain-model-drift.sh +419 -0
- package/scripts/emit-decision.sh +144 -0
- package/scripts/emit-decision.test.sh +144 -0
- package/scripts/ext-filter-divergence-corpus.txt +15 -0
- package/scripts/ext-filter-divergence.sh +189 -0
- package/scripts/generate-c4-from-components.ts +442 -0
- package/scripts/grok-fidelity-gate.sh +68 -0
- package/scripts/grok-pre-push-gate.sh +232 -0
- package/scripts/harness-discovery-smoke.ts +906 -0
- package/scripts/harness-parity-census.ts +92 -0
- package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
- package/scripts/install-opencode-adapter.ts +520 -0
- package/scripts/lib/affected-tests/common.sh +365 -0
- package/scripts/lib/affected-tests/go.sh +157 -0
- package/scripts/lib/affected-tests/js.sh +188 -0
- package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
- package/scripts/lib/affected-tests/python.sh +185 -0
- package/scripts/lib/context-sanitize.sh +49 -0
- package/scripts/lib/domain-model-lib.sh +180 -0
- package/scripts/lib/ext-filter-grammar.tsv +34 -0
- package/scripts/lib/operator-script.sh +1236 -0
- package/scripts/lib/proc.sh +580 -0
- package/scripts/lib/session-state.sh +748 -0
- package/scripts/lib/tmp-classify.sh +843 -0
- package/scripts/lib/wrapper-boundary.sh +47 -0
- package/scripts/lint-ratchet.py +1547 -0
- package/scripts/monitor-pr-checks.sh +441 -0
- package/scripts/pipeline-tally.sh +756 -0
- package/scripts/pipeline-tally.test.sh +740 -0
- package/scripts/plugin-version.sh +528 -0
- package/scripts/precommit-guard.sh +113 -0
- package/scripts/precommit-guard.test.sh +254 -0
- package/scripts/reconcile-live-heartbeats.ts +705 -0
- package/scripts/render-c4-model.sh +217 -0
- package/scripts/resolve-git-root.sh +55 -0
- package/scripts/resolve-regenerable-conflicts.sh +363 -0
- package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
- package/scripts/ruff-requirements.txt +22 -0
- package/scripts/run-in-pid-namespace.sh +98 -0
- package/scripts/run-in-pid-namespace.test.sh +290 -0
- package/scripts/scan-ancestor-signal-helpers.py +556 -0
- package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
- package/scripts/setup-ralph-loop.sh +238 -0
- package/scripts/sync-cursor-name-map.ts +316 -0
- package/scripts/sync-grok-agent-compat.ts +188 -0
- package/scripts/sync-npm-package.ts +178 -0
- package/scripts/sync-opencode-adapter.ts +479 -0
- package/scripts/sync-pr-behind.sh +534 -0
- package/scripts/sync-pr-behind.test.sh +252 -0
- package/scripts/taste-profile-update.sh +180 -0
- package/scripts/taste-profile-update.test.sh +167 -0
- package/scripts/write-budget-marker.sh +23 -0
- package/scripts/write-kb-coverage.ts +113 -0
- package/skills/admin-ip-refresh/SKILL.md +81 -0
- package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
- package/skills/agent-browser/SKILL.md +698 -0
- package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
- package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
- package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
- package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
- package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
- package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
- package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
- package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
- package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
- package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
- package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
- package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
- package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
- package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
- package/skills/agent-native-architecture/SKILL.md +479 -0
- package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
- package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
- package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
- package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
- package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
- package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
- package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
- package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
- package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
- package/skills/agent-native-architecture/references/product-implications.md +478 -0
- package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
- package/skills/agent-native-architecture/references/self-modification.md +294 -0
- package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
- package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
- package/skills/agent-native-audit/SKILL.md +300 -0
- package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
- package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
- package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
- package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/skills/architecture/SKILL.md +436 -0
- package/skills/architecture/references/adr-template.md +154 -0
- package/skills/architecture/references/likec4-reference.md +136 -0
- package/skills/architecture/references/nfr-reference.md +126 -0
- package/skills/archive-kb/SKILL.md +86 -0
- package/skills/archive-kb/scripts/archive-kb.sh +300 -0
- package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
- package/skills/atdd-developer/SKILL.md +65 -0
- package/skills/brainstorm/SKILL.md +701 -0
- package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
- package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
- package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
- package/skills/brainstorm/references/ui-surface-terms.md +42 -0
- package/skills/brainstorm-techniques/SKILL.md +231 -0
- package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
- package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
- package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
- package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
- package/skills/campaign-calendar/SKILL.md +145 -0
- package/skills/cf-token-scope/SKILL.md +164 -0
- package/skills/cf-token-scope/references/widen-playbook.md +114 -0
- package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
- package/skills/changelog/SKILL.md +142 -0
- package/skills/code-to-prd/SKILL.md +66 -0
- package/skills/code-to-prd/references/banner-template.md +12 -0
- package/skills/code-to-prd/references/prd-template.md +41 -0
- package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
- package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
- package/skills/code-to-prd/test/fixture/.env.example +7 -0
- package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
- package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
- package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
- package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
- package/skills/code-to-prd/test/fixture/package.json +6 -0
- package/skills/cohort-status/SKILL.md +62 -0
- package/skills/community/SKILL.md +210 -0
- package/skills/community/scripts/bsky-community.sh +644 -0
- package/skills/community/scripts/bsky-setup.sh +631 -0
- package/skills/community/scripts/community-router.sh +93 -0
- package/skills/community/scripts/discord-community.sh +487 -0
- package/skills/community/scripts/discord-setup.sh +784 -0
- package/skills/community/scripts/github-community.sh +706 -0
- package/skills/community/scripts/hn-community.sh +233 -0
- package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
- package/skills/community/scripts/linkedin-community.sh +750 -0
- package/skills/community/scripts/linkedin-setup.sh +758 -0
- package/skills/community/scripts/x-community.sh +890 -0
- package/skills/community/scripts/x-setup.sh +713 -0
- package/skills/community/test/community-argv.test.sh +2922 -0
- package/skills/community/test/github-community.test.sh +981 -0
- package/skills/competitive-analysis/SKILL.md +69 -0
- package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
- package/skills/compound/SKILL.md +673 -0
- package/skills/compound/scripts/token-efficiency-report.sh +334 -0
- package/skills/compound/test/phase-16.test.sh +379 -0
- package/skills/compound-capture/SKILL.md +791 -0
- package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
- package/skills/compound-capture/assets/resolution-template.md +116 -0
- package/skills/compound-capture/references/yaml-schema.md +67 -0
- package/skills/compound-capture/schema.yaml +181 -0
- package/skills/constraint-scaffold/SKILL.md +175 -0
- package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
- package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
- package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
- package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
- package/skills/constraint-scaffold/references/shared-runner.template +135 -0
- package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
- package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
- package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
- package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
- package/skills/constraint-scaffold/test/generator.test.sh +93 -0
- package/skills/constraint-scaffold/test/parity.test.sh +285 -0
- package/skills/content-writer/SKILL.md +242 -0
- package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
- package/skills/cron-delete/SKILL.md +56 -0
- package/skills/cron-list/SKILL.md +54 -0
- package/skills/deepen-plan/SKILL.md +937 -0
- package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
- package/skills/deploy/SKILL.md +115 -0
- package/skills/deploy/references/hetzner-setup.md +65 -0
- package/skills/deploy/scripts/deploy.sh +37 -0
- package/skills/deploy-docs/SKILL.md +95 -0
- package/skills/dhh-rails-style/SKILL.md +203 -0
- package/skills/dhh-rails-style/references/architecture.md +717 -0
- package/skills/dhh-rails-style/references/controllers.md +323 -0
- package/skills/dhh-rails-style/references/frontend.md +556 -0
- package/skills/dhh-rails-style/references/gems.md +316 -0
- package/skills/dhh-rails-style/references/models.md +388 -0
- package/skills/dhh-rails-style/references/testing.md +354 -0
- package/skills/discord-content/SKILL.md +126 -0
- package/skills/docs-site/SKILL.md +214 -0
- package/skills/drain-labeled-backlog/SKILL.md +203 -0
- package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
- package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
- package/skills/drain-prs/SKILL.md +142 -0
- package/skills/drain-prs/scripts/triage-prs.sh +192 -0
- package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
- package/skills/dspy-ruby/SKILL.md +634 -0
- package/skills/dspy-ruby/assets/config-template.rb +359 -0
- package/skills/dspy-ruby/assets/module-template.rb +326 -0
- package/skills/dspy-ruby/assets/signature-template.rb +143 -0
- package/skills/dspy-ruby/references/core-concepts.md +268 -0
- package/skills/dspy-ruby/references/optimization.md +623 -0
- package/skills/dspy-ruby/references/providers.md +335 -0
- package/skills/eval-harness/README.md +194 -0
- package/skills/eval-harness/SKILL.md +157 -0
- package/skills/eval-harness/enums/go-routes.json +13 -0
- package/skills/eval-harness/enums/incident-threshold.json +5 -0
- package/skills/eval-harness/enums/lane.json +5 -0
- package/skills/eval-harness/enums/tool-selection.json +20 -0
- package/skills/eval-harness/enums/triage-levels.json +5 -0
- package/skills/eval-harness/gated-skills.json +34 -0
- package/skills/eval-harness/models.generated.json +5 -0
- package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
- package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
- package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
- package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
- package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
- package/skills/eval-harness/prompts/go-baseline.txt +6 -0
- package/skills/eval-harness/prompts/go-skill.txt +21 -0
- package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
- package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
- package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
- package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
- package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
- package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
- package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
- package/skills/eval-harness/prompts/triage-skill.txt +10 -0
- package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
- package/skills/eval-harness/scripts/extract-block.cjs +87 -0
- package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
- package/skills/eval-harness/scripts/gen-models.sh +41 -0
- package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
- package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
- package/skills/eval-harness/scripts/parse-label.cjs +93 -0
- package/skills/eval-harness/scripts/verdict.cjs +132 -0
- package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
- package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
- package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
- package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
- package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
- package/skills/eval-harness/test/eval-gate.test.sh +132 -0
- package/skills/eval-harness/test/extract-block.test.sh +87 -0
- package/skills/eval-harness/test/gate-classification.test.sh +77 -0
- package/skills/eval-harness/test/gen-models.test.sh +75 -0
- package/skills/eval-harness/test/measure-classification.test.sh +74 -0
- package/skills/eval-harness/test/parse-label.test.sh +129 -0
- package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
- package/skills/eval-harness/test/verdict.test.sh +123 -0
- package/skills/every-style-editor/SKILL.md +142 -0
- package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/skills/feature-tweet/SKILL.md +199 -0
- package/skills/feature-video/SKILL.md +412 -0
- package/skills/feature-video/scripts/check_deps.sh +281 -0
- package/skills/file-todos/SKILL.md +267 -0
- package/skills/file-todos/assets/todo-template.md +166 -0
- package/skills/fix-issue/SKILL.md +278 -0
- package/skills/fix-issue/references/agent-authored-exclusion.md +118 -0
- package/skills/fix-issue/references/exclude-label-jq-snippet.md +96 -0
- package/skills/flag-bootstrap/SETUP.md +142 -0
- package/skills/flag-create/SKILL.md +145 -0
- package/skills/flag-create/scripts/create.sh +273 -0
- package/skills/flag-delete/SKILL.md +167 -0
- package/skills/flag-delete/scripts/delete.sh +288 -0
- package/skills/flag-list/SKILL.md +99 -0
- package/skills/flag-list/scripts/list.sh +275 -0
- package/skills/flag-set-role/SKILL.md +229 -0
- package/skills/flag-set-role/scripts/flip.sh +774 -0
- package/skills/frontend-anti-slop/SKILL.md +106 -0
- package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
- package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
- package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
- package/skills/frontend-design/SKILL.md +77 -0
- package/skills/gdpr-gate/NOTICE +136 -0
- package/skills/gdpr-gate/SKILL.md +341 -0
- package/skills/gdpr-gate/references/fields.md +160 -0
- package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
- package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
- package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
- package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
- package/skills/gdpr-gate/references/layers/frontend.md +249 -0
- package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
- package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
- package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
- package/skills/gdpr-gate/references/legal-consent.md +140 -0
- package/skills/gdpr-gate/references/non-negotiables.md +60 -0
- package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
- package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
- package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
- package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
- package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
- package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
- package/skills/gemini-imagegen/SKILL.md +283 -0
- package/skills/gemini-imagegen/requirements.txt +5 -0
- package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
- package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
- package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
- package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
- package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
- package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
- package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
- package/skills/git-worktree/SKILL.md +534 -0
- package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
- package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
- package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
- package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
- package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
- package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
- package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
- package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
- package/skills/go/SKILL.md +54 -0
- package/skills/growth/SKILL.md +164 -0
- package/skills/harvest-debt/SKILL.md +78 -0
- package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
- package/skills/heal-skill/SKILL.md +173 -0
- package/skills/help/SKILL.md +46 -0
- package/skills/incident/NOTICE +39 -0
- package/skills/incident/SKILL.md +395 -0
- package/skills/incident/scripts/dry-run.sh +448 -0
- package/skills/incident/scripts/redact-engine.py +412 -0
- package/skills/incident/scripts/redact-sentinel.sh +44 -0
- package/skills/incident/templates/pir.md +139 -0
- package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
- package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
- package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
- package/skills/incident/test/fixtures/positive-corpus.md +87 -0
- package/skills/incident/test/redact-sentinel.test.sh +1420 -0
- package/skills/invoice/SKILL.md +206 -0
- package/skills/kb-glossary/SKILL.md +71 -0
- package/skills/kb-glossary/references/glossary-format.md +111 -0
- package/skills/kb-glossary/references/rejected-request-register.md +115 -0
- package/skills/kb-search/SKILL.md +276 -0
- package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
- package/skills/legal-audit/SKILL.md +161 -0
- package/skills/legal-generate/NOTICE +242 -0
- package/skills/legal-generate/SKILL.md +244 -0
- package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
- package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
- package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
- package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
- package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
- package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
- package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
- package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
- package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
- package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
- package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
- package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
- package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
- package/skills/linear-fetch/SKILL.md +247 -0
- package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
- package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
- package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
- package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
- package/skills/linear-fetch/test/parity.test.sh +112 -0
- package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
- package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
- package/skills/merge-pr/SKILL.md +668 -0
- package/skills/model-launch-review/SKILL.md +255 -0
- package/skills/model-launch-review/scripts/audit-models.sh +501 -0
- package/skills/one-shot/SKILL.md +316 -0
- package/skills/one-shot/references/token-discipline.md +74 -0
- package/skills/operator-bootstrap/SKILL.md +412 -0
- package/skills/operator-bootstrap/template.sh +439 -0
- package/skills/operator-digest/SKILL.md +287 -0
- package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
- package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
- package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
- package/skills/operator-rephrase/SKILL.md +98 -0
- package/skills/pencil-setup/SKILL.md +201 -0
- package/skills/pencil-setup/scripts/check_deps.sh +556 -0
- package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
- package/skills/pencil-setup/scripts/package-lock.json +1172 -0
- package/skills/pencil-setup/scripts/package.json +14 -0
- package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
- package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
- package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
- package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
- package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
- package/skills/plan/SKILL.md +1140 -0
- package/skills/plan/references/differential-migration-testing.md +185 -0
- package/skills/plan/references/plan-community-discovery.md +42 -0
- package/skills/plan/references/plan-founder-check.md +137 -0
- package/skills/plan/references/plan-functional-overlap.md +25 -0
- package/skills/plan/references/plan-host-fanout.md +51 -0
- package/skills/plan/references/plan-issue-templates.md +779 -0
- package/skills/plan/references/plan-network-outage-checklist.md +131 -0
- package/skills/plan/references/plan-scope-check.md +126 -0
- package/skills/plan/references/plan-sharp-edges.md +325 -0
- package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
- package/skills/plan/references/webapp-cwv-observability.md +143 -0
- package/skills/plan-review/SKILL.md +91 -0
- package/skills/plan-review/lib/named-panel.mjs +58 -0
- package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
- package/skills/postmerge/SKILL.md +642 -0
- package/skills/postmerge/references/deploy-status-debugging.md +138 -0
- package/skills/postmerge/references/graceful-degradation.md +20 -0
- package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
- package/skills/preflight/SKILL.md +1553 -0
- package/skills/preflight/references/check-13-founder-check.md +286 -0
- package/skills/preflight/scripts/founder-check.py +1640 -0
- package/skills/preflight/scripts/parse-form-a.awk +107 -0
- package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
- package/skills/product-roadmap/SKILL.md +357 -0
- package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
- package/skills/provision-cloudflare/SKILL.md +67 -0
- package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
- package/skills/provision-doppler/SKILL.md +58 -0
- package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
- package/skills/provision-github/SKILL.md +59 -0
- package/skills/provision-github/scripts/provision-github.sh +300 -0
- package/skills/provision-hetzner/SKILL.md +76 -0
- package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
- package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
- package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
- package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
- package/skills/qa/SKILL.md +263 -0
- package/skills/qa/references/browser-preflight.md +22 -0
- package/skills/questionnaire-generate/SKILL.md +328 -0
- package/skills/questionnaire-generate/references/questionnaire.template +60 -0
- package/skills/rclone/SKILL.md +162 -0
- package/skills/rclone/scripts/check_setup.sh +63 -0
- package/skills/release-announce/SKILL.md +65 -0
- package/skills/release-docs/SKILL.md +92 -0
- package/skills/reproduce-bug/SKILL.md +358 -0
- package/skills/resolve-debt/SKILL.md +85 -0
- package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
- package/skills/resolve-parallel/SKILL.md +45 -0
- package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
- package/skills/resolve-pr-parallel/SKILL.md +68 -0
- package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
- package/skills/resolve-todo-parallel/SKILL.md +57 -0
- package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
- package/skills/review/SKILL.md +1621 -0
- package/skills/review/references/anti-slop-scanner-hook.md +40 -0
- package/skills/review/references/defect-classes-migrations.md +9 -0
- package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
- package/skills/review/references/review-e2e-testing.md +116 -0
- package/skills/review/references/review-todo-structure.md +165 -0
- package/skills/review/references/risk-tier-and-fix-rounds.md +95 -0
- package/skills/review/references/semgrep-custom-rules.yaml +174 -0
- package/skills/review/references/ultrathink-phases.md +98 -0
- package/skills/review/references/wfs.md +6 -0
- package/skills/review/scripts/emit-review-trailer.sh +499 -0
- package/skills/review/scripts/ensure-semgrep.sh +99 -0
- package/skills/review/scripts/fix-round-seats.sh +197 -0
- package/skills/review/test/emit-review-trailer.test.sh +387 -0
- package/skills/review/test/ensure-semgrep.test.sh +111 -0
- package/skills/review/test/fix-round-seats.test.sh +237 -0
- package/skills/review/workflows/README.md +147 -0
- package/skills/review/workflows/review.workflow.js +667 -0
- package/skills/schedule/SKILL.md +796 -0
- package/skills/seo-aeo/SKILL.md +139 -0
- package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
- package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
- package/skills/ship/SKILL.md +3022 -0
- package/skills/ship/references/adr-ordinal-collision.md +47 -0
- package/skills/ship/references/affected-gate-contract.md +115 -0
- package/skills/ship/references/ci-run-diagnosis.md +29 -0
- package/skills/ship/references/ci-workflow-authoring.md +68 -0
- package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
- package/skills/ship/references/cto-ruling-armed-push.md +5 -0
- package/skills/ship/references/decision-challenges-render.md +71 -0
- package/skills/ship/references/detached-battery-verdict.md +13 -0
- package/skills/ship/references/feature-tweet-draft.md +42 -0
- package/skills/ship/references/followthrough-issue-body-template.md +47 -0
- package/skills/ship/references/followthrough-stub-template.sh +92 -0
- package/skills/ship/references/merge-queue-dequeue.md +39 -0
- package/skills/ship/references/operator-holds.md +149 -0
- package/skills/ship/references/pipeline-tally-render.md +43 -0
- package/skills/ship/references/pr-overlap.md +153 -0
- package/skills/ship/references/queue-mode.md +7 -0
- package/skills/ship/references/ready-run-wait.md +36 -0
- package/skills/ship/references/red-on-main-quarantine.md +110 -0
- package/skills/ship/references/register-update-pr-pattern.md +88 -0
- package/skills/ship/references/settle-then-admin-merge.md +130 -0
- package/skills/ship/references/supabase-column-probe.md +13 -0
- package/skills/ship/scripts/auto-close-scan.sh +76 -0
- package/skills/ship/scripts/battery-owed.sh +403 -0
- package/skills/ship/scripts/hold-gate-eval.sh +410 -0
- package/skills/ship/scripts/net-issue-flow.sh +665 -0
- package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
- package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
- package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
- package/skills/skill-creator/SKILL.md +299 -0
- package/skills/skill-creator/references/api-security.md +248 -0
- package/skills/skill-creator/references/authoring-levers.md +110 -0
- package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
- package/skills/skill-creator/references/best-practices.md +431 -0
- package/skills/skill-creator/references/common-patterns.md +639 -0
- package/skills/skill-creator/references/core-principles.md +193 -0
- package/skills/skill-creator/references/executable-code.md +188 -0
- package/skills/skill-creator/references/iteration-and-testing.md +509 -0
- package/skills/skill-creator/references/official-spec.md +193 -0
- package/skills/skill-creator/references/recommended-structure.md +180 -0
- package/skills/skill-creator/references/skill-structure.md +396 -0
- package/skills/skill-creator/references/using-scripts.md +122 -0
- package/skills/skill-creator/references/using-templates.md +120 -0
- package/skills/skill-creator/references/workflows-and-validation.md +541 -0
- package/skills/skill-creator/scripts/init_skill.py +322 -0
- package/skills/skill-creator/scripts/package_skill.py +110 -0
- package/skills/skill-creator/scripts/quick_validate.py +64 -0
- package/skills/skill-creator/templates/router-skill.md +73 -0
- package/skills/skill-creator/templates/simple-skill.md +34 -0
- package/skills/skill-creator/workflows/add-reference.md +96 -0
- package/skills/skill-creator/workflows/add-script.md +104 -0
- package/skills/skill-creator/workflows/add-template.md +83 -0
- package/skills/skill-creator/workflows/add-workflow.md +128 -0
- package/skills/skill-creator/workflows/audit-skill.md +159 -0
- package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
- package/skills/skill-creator/workflows/create-new-skill.md +207 -0
- package/skills/skill-creator/workflows/get-guidance.md +134 -0
- package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
- package/skills/skill-creator/workflows/verify-skill.md +226 -0
- package/skills/skill-security-scan/SKILL.md +145 -0
- package/skills/skill-security-scan/references/disclaimer.md +21 -0
- package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
- package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
- package/skills/skill-security-scan/references/override-mechanism.md +171 -0
- package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
- package/skills/skill-security-scan/references/regex-patterns.md +136 -0
- package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
- package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
- package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
- package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
- package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
- package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
- package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
- package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
- package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
- package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
- package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
- package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
- package/skills/skill-security-scan/scripts/lib.sh +197 -0
- package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
- package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
- package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
- package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
- package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
- package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
- package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
- package/skills/social-distribute/SKILL.md +485 -0
- package/skills/spec-templates/SKILL.md +274 -0
- package/skills/sync/SKILL.md +49 -0
- package/skills/test-browser/SKILL.md +464 -0
- package/skills/test-browser/references/feature-map.md +161 -0
- package/skills/test-fix-loop/SKILL.md +159 -0
- package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
- package/skills/triage/SKILL.md +402 -0
- package/skills/trigger-cron/SKILL.md +136 -0
- package/skills/trigger-cron/scripts/trigger.sh +198 -0
- package/skills/user-set-role/SKILL.md +147 -0
- package/skills/user-set-role/scripts/set-role.sh +218 -0
- package/skills/user-story-writer/SKILL.md +77 -0
- package/skills/ux-audit/SKILL.md +251 -0
- package/skills/ux-audit/references/finding.schema.json +62 -0
- package/skills/ux-audit/references/route-list.yaml +95 -0
- package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
- package/skills/ux-audit/scripts/bot-signin.ts +135 -0
- package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
- package/skills/work/SKILL.md +1479 -0
- package/skills/work/references/end-of-work-resume.md +7 -0
- package/skills/work/references/hook-test-main-cwd.md +24 -0
- package/skills/work/references/key-principles.md +83 -0
- package/skills/work/references/property-testing.md +122 -0
- package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
- package/skills/work/references/work-agent-teams.md +97 -0
- package/skills/work/references/work-lifecycle-parallel.md +147 -0
- package/skills/work/references/work-lockfile-bumps.md +97 -0
- package/skills/work/references/work-scratch-sandboxes.md +212 -0
- package/skills/work/references/work-subagent-fanout.md +61 -0
- package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
- package/skills/xcode-test/SKILL.md +360 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-creator
|
|
3
|
+
description: "This skill should be used when creating, refining, or auditing Claude Code Skills, including SKILL.md structure, scaffolding, packaging, and best practices."
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- grok-harness-invoke:start -->
|
|
8
|
+
**Grok Build (`plugins/soleur/lib/harness.ts` `invokeSkill()`):** Read this SKILL.md in this process and run it to completion. A one-segment `soleur:<name>` in this document names a SKILL — on Grok Build, Read `plugins/soleur/skills/<name>/SKILL.md` in this process; it is not a nested tool_use. A multi-segment id such as `soleur:<domain>:<name>` names an AGENT: spawn it, never Read it, and on Grok Build spawn_subagent takes the id with its colons replaced by hyphens (`agentIdToGrokSubagentType`). **Claude Code:** Skill tool for a skill (`soleur:<name>`), Task tool with `subagent_type` for an agent. Forbidden is executing a subset, not the Read.
|
|
9
|
+
<!-- grok-harness-invoke:end -->
|
|
10
|
+
|
|
11
|
+
# Skill Creator
|
|
12
|
+
|
|
13
|
+
This skill provides guidance for creating effective skills.
|
|
14
|
+
|
|
15
|
+
## About Skills
|
|
16
|
+
|
|
17
|
+
Skills are modular, self-contained packages that extend Claude's capabilities by providing
|
|
18
|
+
specialized knowledge, workflows, and tools. Think of them as "onboarding guides" for specific
|
|
19
|
+
domains or tasks—they transform Claude from a general-purpose agent into a specialized agent
|
|
20
|
+
equipped with procedural knowledge that no model can fully possess.
|
|
21
|
+
|
|
22
|
+
### What Skills Provide
|
|
23
|
+
|
|
24
|
+
1. Specialized workflows - Multi-step procedures for specific domains
|
|
25
|
+
2. Tool integrations - Instructions for working with specific file formats or APIs
|
|
26
|
+
3. Domain expertise - Company-specific knowledge, schemas, business logic
|
|
27
|
+
4. Bundled resources - Scripts, references, and assets for complex and repetitive tasks
|
|
28
|
+
|
|
29
|
+
### Anatomy of a Skill
|
|
30
|
+
|
|
31
|
+
Every skill consists of a required SKILL.md file and optional bundled resources:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
skill-name/
|
|
35
|
+
├── SKILL.md (required)
|
|
36
|
+
│ ├── YAML frontmatter metadata (required)
|
|
37
|
+
│ │ ├── name: (required)
|
|
38
|
+
│ │ └── description: (required)
|
|
39
|
+
│ └── Markdown instructions (required)
|
|
40
|
+
└── Bundled Resources (optional)
|
|
41
|
+
├── scripts/ - Executable code (Python/Bash/etc.)
|
|
42
|
+
├── references/ - Documentation intended to be loaded into context as needed
|
|
43
|
+
└── assets/ - Files used in output (templates, icons, fonts, etc.)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
#### SKILL.md (required)
|
|
47
|
+
|
|
48
|
+
**Metadata Quality:** The `name` and `description` in YAML frontmatter determine when Claude will use the skill. Be specific about what the skill does and when to use it. Use the third-person (e.g. "This skill should be used when..." instead of "Use this skill when...").
|
|
49
|
+
|
|
50
|
+
#### Bundled Resources (optional)
|
|
51
|
+
|
|
52
|
+
##### Scripts ([scripts/](./scripts/))
|
|
53
|
+
|
|
54
|
+
Executable code (Python/Bash/etc.) for tasks that require deterministic reliability or are repeatedly rewritten.
|
|
55
|
+
|
|
56
|
+
- **When to include**: When the same code is being rewritten repeatedly or deterministic reliability is needed
|
|
57
|
+
- **Example**: [rotate_pdf.py](./scripts/rotate_pdf.py) for PDF rotation tasks (illustrative -- not included in this skill)
|
|
58
|
+
- **Benefits**: Token efficient, deterministic, may be executed without loading into context
|
|
59
|
+
- **Note**: Scripts may still need to be read by Claude for patching or environment-specific adjustments
|
|
60
|
+
- **Node scripts in this repo**: the repo root `package.json` is `type:module`, so a `.js` file using `module.exports`/`require` (CommonJS) fails at runtime with `MODULE_NOT_FOUND` (not at `tsc`). Name CommonJS helper/assert scripts `.cjs` (e.g. promptfoo custom asserts, which load via `require`); reserve `.js`/`.mjs` for genuine ESM. See `knowledge-base/project/learnings/build-errors/2026-06-15-cjs-required-for-commonjs-scripts-and-promptfoo-harness-gotchas.md`.
|
|
61
|
+
|
|
62
|
+
##### References ([references/](./references/))
|
|
63
|
+
|
|
64
|
+
Documentation and reference material intended to be loaded as needed into context to inform Claude's process and thinking.
|
|
65
|
+
|
|
66
|
+
- **When to include**: For documentation that Claude should reference while working
|
|
67
|
+
- **Examples**: [finance.md](./references/finance.md) for financial schemas, [mnda.md](./references/mnda.md) for company NDA template, [policies.md](./references/policies.md) for company policies, [api_docs.md](./references/api_docs.md) for API specifications
|
|
68
|
+
- **Use cases**: Database schemas, API documentation, domain knowledge, company policies, detailed workflow guides
|
|
69
|
+
- **Benefits**: Keeps SKILL.md lean, loaded only when Claude determines it's needed
|
|
70
|
+
- **Best practice**: If files are large (>10k words), include grep search patterns in SKILL.md
|
|
71
|
+
- **Avoid duplication**: Information should live in either SKILL.md or references files, not both. Prefer references files for detailed information unless it's truly core to the skill—this keeps SKILL.md lean while making information discoverable without hogging the context window. Keep only essential procedural instructions and workflow guidance in SKILL.md; move detailed reference material, schemas, and examples to references files.
|
|
72
|
+
|
|
73
|
+
##### Assets ([assets/](./assets/))
|
|
74
|
+
|
|
75
|
+
Files not intended to be loaded into context, but rather used within the output Claude produces.
|
|
76
|
+
|
|
77
|
+
- **When to include**: When the skill needs files that will be used in the final output
|
|
78
|
+
- **Examples**: [logo.png](./assets/logo.png) for brand assets, [slides.pptx](./assets/slides.pptx) for PowerPoint templates, [frontend-template/](./assets/frontend-template/) for HTML/React boilerplate, [font.ttf](./assets/font.ttf) for typography
|
|
79
|
+
- **Use cases**: Templates, images, icons, boilerplate code, fonts, sample documents that get copied or modified
|
|
80
|
+
- **Benefits**: Separates output resources from documentation, enables Claude to use files without loading them into context
|
|
81
|
+
|
|
82
|
+
### Progressive Disclosure Design Principle
|
|
83
|
+
|
|
84
|
+
Skills use a three-level loading system to manage context efficiently:
|
|
85
|
+
|
|
86
|
+
1. **Metadata (name + description)** - Always in context (~100 words)
|
|
87
|
+
2. **SKILL.md body** - When skill triggers (<5k words)
|
|
88
|
+
3. **Bundled resources** - As needed by Claude (Unlimited*)
|
|
89
|
+
|
|
90
|
+
*Unlimited because scripts can be executed without reading into context window.
|
|
91
|
+
|
|
92
|
+
## Skill Creation Process
|
|
93
|
+
|
|
94
|
+
Before creating a new skill, agent, or user-facing capability, run its domain assessment (brainstorm Phase 0.5, or plan Phase 2.5 on a pipeline run) with CPO and CMO in the room (CTO when architectural); CMO may be omitted with a one-line rationale for operator-facing-only capabilities, CPO never. The rule's canonical text is `plugins/soleur/skills/brainstorm/references/brainstorm-domain-config.md` under `## New-capability leader mandate`.
|
|
95
|
+
|
|
96
|
+
To create a skill, follow the "Skill Creation Process" in order, skipping steps only if there is a clear reason why they are not applicable.
|
|
97
|
+
|
|
98
|
+
### Step 1: Understanding the Skill with Concrete Examples
|
|
99
|
+
|
|
100
|
+
Skip this step only when the skill's usage patterns are already clearly understood. It remains valuable even when working with an existing skill.
|
|
101
|
+
|
|
102
|
+
To create an effective skill, clearly understand concrete examples of how the skill will be used. This understanding can come from either direct user examples or generated examples that are validated with user feedback.
|
|
103
|
+
|
|
104
|
+
For example, when building an image-editor skill, relevant questions include:
|
|
105
|
+
|
|
106
|
+
- "What functionality should the image-editor skill support? Editing, rotating, anything else?"
|
|
107
|
+
- "Can you give some examples of how this skill would be used?"
|
|
108
|
+
- "I can imagine users asking for things like 'Remove the red-eye from this image' or 'Rotate this image'. Are there other ways you imagine this skill being used?"
|
|
109
|
+
- "What would a user say that should trigger this skill?"
|
|
110
|
+
|
|
111
|
+
To avoid overwhelming users, avoid asking too many questions in a single message. Start with the most important questions and follow up as needed for better effectiveness.
|
|
112
|
+
|
|
113
|
+
Conclude this step when there is a clear sense of the functionality the skill should support.
|
|
114
|
+
|
|
115
|
+
### Step 2: Planning the Reusable Skill Contents
|
|
116
|
+
|
|
117
|
+
To turn concrete examples into an effective skill, analyze each example by:
|
|
118
|
+
|
|
119
|
+
1. Considering how to execute on the example from scratch
|
|
120
|
+
2. Identifying what scripts, references, and assets would be helpful when executing these workflows repeatedly
|
|
121
|
+
|
|
122
|
+
Example: When building a `pdf-editor` skill to handle queries like "Help me rotate this PDF," the analysis shows:
|
|
123
|
+
|
|
124
|
+
1. Rotating a PDF requires re-writing the same code each time
|
|
125
|
+
2. A [scripts/rotate_pdf.py](./scripts/rotate_pdf.py) script would be helpful to store in the skill
|
|
126
|
+
|
|
127
|
+
Example: When designing a `frontend-webapp-builder` skill for queries like "Build me a todo app" or "Build me a dashboard to track my steps," the analysis shows:
|
|
128
|
+
|
|
129
|
+
1. Writing a frontend webapp requires the same boilerplate HTML/React each time
|
|
130
|
+
2. An [assets/hello-world/](./assets/hello-world/) template containing the boilerplate HTML/React project files would be helpful to store in the skill
|
|
131
|
+
|
|
132
|
+
Example: When building a `big-query` skill to handle queries like "How many users have logged in today?" the analysis shows:
|
|
133
|
+
|
|
134
|
+
1. Querying BigQuery requires re-discovering the table schemas and relationships each time
|
|
135
|
+
2. A [references/schema.md](./references/schema.md) file documenting the table schemas would be helpful to store in the skill
|
|
136
|
+
|
|
137
|
+
To establish the skill's contents, analyze each concrete example to create a list of the reusable resources to include: scripts, references, and assets.
|
|
138
|
+
|
|
139
|
+
### Step 3: Initializing the Skill
|
|
140
|
+
|
|
141
|
+
At this point, it is time to actually create the skill.
|
|
142
|
+
|
|
143
|
+
Skip this step only if the skill being developed already exists, and iteration or packaging is needed. In this case, continue to the next step.
|
|
144
|
+
|
|
145
|
+
When creating a new skill from scratch, always run the `init_skill.py` script. The script conveniently generates a new template skill directory that automatically includes everything a skill requires, making the skill creation process much more efficient and reliable.
|
|
146
|
+
|
|
147
|
+
Usage:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
"${CLAUDE_PLUGIN_ROOT}/skills/skill-creator/scripts/init_skill.py" <skill-name> --path <output-directory>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
The script:
|
|
154
|
+
|
|
155
|
+
- Creates the skill directory at the specified path
|
|
156
|
+
- Generates a SKILL.md template with proper frontmatter and TODO placeholders
|
|
157
|
+
- Creates example resource directories: `scripts/`, `references/`, and `assets/`
|
|
158
|
+
- Adds example files in each directory that can be customized or deleted
|
|
159
|
+
|
|
160
|
+
After initialization, customize or remove the generated SKILL.md and example files as needed.
|
|
161
|
+
|
|
162
|
+
- Before writing a new skill description, run `bun test plugins/soleur/test/components.test.ts` to check the current word budget; the cap is `SKILL_DESCRIPTION_WORD_BUDGET` in that file, which is the enforcing gate and the only authority on the number. Target 12-15 words for new skill descriptions, and assume **zero headroom until measured** — the budget has run at or near capacity for most of its life, and the cap itself has been raised several times, so any figure quoted from memory or from an older document is stale by default.
|
|
163
|
+
- After creating a new skill, manually add it to `plugins/soleur/docs/_data/skills.js` in the `SKILL_CATEGORIES` map -- skills are NOT auto-discovered, and missing this step silently removes the skill from the docs site with no build error.
|
|
164
|
+
- New agent files created mid-session cannot be invoked via `subagent_type` because the plugin registry is stale at session start; for live testing, use `general-purpose` agent type and embed the full instructions in the task prompt.
|
|
165
|
+
|
|
166
|
+
### Step 4: Edit the Skill
|
|
167
|
+
|
|
168
|
+
When editing the (newly-generated or existing) skill, remember that the skill is being created for another instance of Claude to use. Focus on including information that would be beneficial and non-obvious to Claude. Consider what procedural knowledge, domain-specific details, or reusable assets would help another Claude instance execute these tasks more effectively.
|
|
169
|
+
|
|
170
|
+
#### Start with Reusable Skill Contents
|
|
171
|
+
|
|
172
|
+
To begin implementation, start with the reusable resources identified above: `scripts/`, `references/`, and `assets/` files. Note that this step may require user input. For example, when implementing a `brand-guidelines` skill, the user may need to provide brand assets or templates to store in `assets/`, or documentation to store in `references/`.
|
|
173
|
+
|
|
174
|
+
Also, delete any example files and directories not needed for the skill. The initialization script creates example files in `scripts/`, `references/`, and `assets/` to demonstrate structure, but most skills won't need all of them.
|
|
175
|
+
|
|
176
|
+
#### Update SKILL.md
|
|
177
|
+
|
|
178
|
+
**Writing Style:** Write the entire skill using **imperative/infinitive form** (verb-first instructions), not second person. Use objective, instructional language (e.g., "To accomplish X, do Y" rather than "You should do X" or "If you need to do X"). This maintains consistency and clarity for AI consumption.
|
|
179
|
+
|
|
180
|
+
To complete SKILL.md, answer the following questions:
|
|
181
|
+
|
|
182
|
+
1. What is the purpose of the skill, in a few sentences?
|
|
183
|
+
2. When should the skill be used?
|
|
184
|
+
3. In practice, how should Claude use the skill? All reusable skill contents developed above should be referenced so that Claude knows how to use them.
|
|
185
|
+
|
|
186
|
+
### Step 5: Packaging a Skill
|
|
187
|
+
|
|
188
|
+
Once the skill is ready, it should be packaged into a distributable zip file that gets shared with the user. The packaging process automatically validates the skill first to ensure it meets all requirements:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
"${CLAUDE_PLUGIN_ROOT}/skills/skill-creator/scripts/package_skill.py" <path/to/skill-folder>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Optional output directory specification:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
"${CLAUDE_PLUGIN_ROOT}/skills/skill-creator/scripts/package_skill.py" <path/to/skill-folder> ./dist
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
The packaging script will:
|
|
201
|
+
|
|
202
|
+
1. **Validate** the skill automatically, checking:
|
|
203
|
+
- YAML frontmatter format and required fields
|
|
204
|
+
- Skill naming conventions and directory structure
|
|
205
|
+
- Description completeness and quality
|
|
206
|
+
- File organization and resource references
|
|
207
|
+
|
|
208
|
+
2. **Package** the skill if validation passes, creating a zip file named after the skill (e.g., `my-skill.zip`) that includes all files and maintains the proper directory structure for distribution.
|
|
209
|
+
|
|
210
|
+
If validation fails, the script will report the errors and exit without creating a package. Fix any validation errors and run the packaging command again.
|
|
211
|
+
|
|
212
|
+
### Step 5b: Security scan (cooperative-fast-path)
|
|
213
|
+
|
|
214
|
+
After `package_skill.py` validates the structure but BEFORE the zip is
|
|
215
|
+
distributed, invoke the `skill-security-scan` advisory gate against the
|
|
216
|
+
newly-scaffolded SKILL.md:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
bash "${CLAUDE_PLUGIN_ROOT}/skills/skill-security-scan/scripts/run-scan.sh" < <skill-folder>/SKILL.md
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Operator handling:
|
|
223
|
+
|
|
224
|
+
- **`LOW-RISK`** — proceed with packaging.
|
|
225
|
+
- **No verdict line** (a crash, or `No such file or directory` on an unresolved plugin root) — treat as
|
|
226
|
+
**`REVIEW`**, never `LOW-RISK`.
|
|
227
|
+
- **`REVIEW`** — present findings as informational; ask operator to confirm
|
|
228
|
+
before packaging.
|
|
229
|
+
- **`HIGH-RISK`** — present findings + override instructions referencing
|
|
230
|
+
[skill-security-scan/references/override-mechanism.md](../skill-security-scan/references/override-mechanism.md).
|
|
231
|
+
Block packaging until either (a) the SKILL.md is revised, or (b) a valid
|
|
232
|
+
override artifact is committed under `knowledge-base/engineering/security/skill-overrides/`.
|
|
233
|
+
|
|
234
|
+
The PreToolUse hook on `Write` (`.claude/hooks/skill-security-scan-write.sh`)
|
|
235
|
+
is the load-bearing gate at the tool layer — this Step 5b is the
|
|
236
|
+
operator-friendly cooperative-fast-path that surfaces findings early.
|
|
237
|
+
|
|
238
|
+
### Step 6: Iterate
|
|
239
|
+
|
|
240
|
+
After testing the skill, users may request improvements. Often this happens right after using the skill, with fresh context of how the skill performed.
|
|
241
|
+
|
|
242
|
+
**Iteration workflow:**
|
|
243
|
+
|
|
244
|
+
1. Use the skill on real tasks
|
|
245
|
+
2. Notice struggles or inefficiencies
|
|
246
|
+
3. Identify how SKILL.md or bundled resources should be updated
|
|
247
|
+
4. Implement changes and test again
|
|
248
|
+
|
|
249
|
+
### Sharp Edges
|
|
250
|
+
|
|
251
|
+
- **Name a skill or command as `soleur:<name>` and an agent by its registry id, nothing else** — no slash, dollar or at-sign prefix, no bare agent leaf — the adapter renders the harness form (`formatSkillInvocation` / `spawnAgent`, `plugins/soleur/lib/harness.ts`); a doc that writes one harness's form names a component the other three cannot resolve (ADR-226). If a shell variable or glob collides with a skill name, brace or rename it (`"${work}"`) — never widen the gate's boundary set. `plugins/soleur/test/harness-parity-tree.test.ts` is the gate; `bun plugins/soleur/scripts/harness-parity-census.ts --fix` repairs the mechanical shapes.
|
|
252
|
+
|
|
253
|
+
- When a SKILL.md prose fence documents shell-active patterns by design (e.g., `bash -c "$VAR"`, process substitution, an eval-style invocation), label the fence ` ```text ` instead of ` ```bash ` and document the load-bearing mitigations (timeout, reject-regex, env scrub, trust source) in a per-skill Sharp Edges section. Otherwise the `skill-security-scan` calibration suite fails the first-party SKILL.md with HIGH-RISK on `code-execution` — there is no per-finding override mechanism for first-party legitimate uses. The fence is documentation; the orchestrator still dispatches via the Bash tool when it reads the prose, so runtime behavior is unchanged. See `knowledge-base/project/learnings/2026-05-20-skill-md-shell-active-prose-calibration-carve-out.md`.
|
|
254
|
+
|
|
255
|
+
## Auditing Existing Skills
|
|
256
|
+
|
|
257
|
+
For auditing and improving existing skills, see the [audit-skill workflow](./workflows/audit-skill.md).
|
|
258
|
+
|
|
259
|
+
## Reference Files
|
|
260
|
+
|
|
261
|
+
For detailed guidance on skill authoring, see:
|
|
262
|
+
|
|
263
|
+
- [official-spec.md](./references/official-spec.md) - Anthropic's official skill specification
|
|
264
|
+
- [best-practices.md](./references/best-practices.md) - Skill authoring best practices
|
|
265
|
+
- [core-principles.md](./references/core-principles.md) - Core principles for skill design
|
|
266
|
+
- [authoring-levers.md](./references/authoring-levers.md) - Leading words, the two loads and the invocation choice, co-location, criterion demand
|
|
267
|
+
- [skill-structure.md](./references/skill-structure.md) - Skill structure and organization
|
|
268
|
+
- [recommended-structure.md](./references/recommended-structure.md) - Recommended file structure
|
|
269
|
+
- [common-patterns.md](./references/common-patterns.md) - Common skill patterns (template, workflow, conditional)
|
|
270
|
+
- [be-clear-and-direct.md](./references/be-clear-and-direct.md) - Writing clear skill instructions
|
|
271
|
+
- [executable-code.md](./references/executable-code.md) - Working with executable code in skills
|
|
272
|
+
- [using-scripts.md](./references/using-scripts.md) - Using scripts in skills
|
|
273
|
+
- [using-templates.md](./references/using-templates.md) - Using templates in skills
|
|
274
|
+
- [iteration-and-testing.md](./references/iteration-and-testing.md) - Iteration and testing guidance
|
|
275
|
+
- [workflows-and-validation.md](./references/workflows-and-validation.md) - Workflow and validation patterns
|
|
276
|
+
- [api-security.md](./references/api-security.md) - API security considerations
|
|
277
|
+
- [fail-closed redaction pattern](../../../../knowledge-base/project/learnings/2026-05-15-fail-closed-redaction-enables-committed-default-output.md) - Designing output paths for skills that generate user-derived artifacts intended for external sharing
|
|
278
|
+
|
|
279
|
+
## Workflows
|
|
280
|
+
|
|
281
|
+
Step-by-step guides for specific skill authoring tasks:
|
|
282
|
+
|
|
283
|
+
- [create-new-skill.md](./workflows/create-new-skill.md) - Create a new skill from scratch
|
|
284
|
+
- [audit-skill.md](./workflows/audit-skill.md) - Audit an existing skill against best practices
|
|
285
|
+
- [add-reference.md](./workflows/add-reference.md) - Add a reference file to a skill
|
|
286
|
+
- [add-script.md](./workflows/add-script.md) - Add a script to a skill
|
|
287
|
+
- [add-template.md](./workflows/add-template.md) - Add a template to a skill
|
|
288
|
+
- [add-workflow.md](./workflows/add-workflow.md) - Add a workflow to a skill
|
|
289
|
+
- [create-domain-expertise-skill.md](./workflows/create-domain-expertise-skill.md) - Create a domain expertise skill
|
|
290
|
+
- [upgrade-to-router.md](./workflows/upgrade-to-router.md) - Upgrade a simple skill to a router skill
|
|
291
|
+
- [verify-skill.md](./workflows/verify-skill.md) - Verify a skill meets requirements
|
|
292
|
+
- [get-guidance.md](./workflows/get-guidance.md) - Get guidance on skill design decisions
|
|
293
|
+
|
|
294
|
+
## Templates
|
|
295
|
+
|
|
296
|
+
Starter templates for common skill types:
|
|
297
|
+
|
|
298
|
+
- [simple-skill.md](./templates/simple-skill.md) - Template for a simple single-file skill
|
|
299
|
+
- [router-skill.md](./templates/router-skill.md) - Template for a multi-workflow router skill
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
<overview>
|
|
2
|
+
When building skills that make API calls requiring credentials (API keys, tokens, secrets), follow this protocol to prevent credentials from appearing in chat.
|
|
3
|
+
</overview>
|
|
4
|
+
|
|
5
|
+
<the_problem>
|
|
6
|
+
Raw curl commands with environment variables expose credentials:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
# ❌ BAD - API key visible in chat
|
|
10
|
+
curl -H "Authorization: Bearer $API_KEY" https://api.example.com/data
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
When Claude executes this, the full command with expanded `$API_KEY` appears in the conversation.
|
|
14
|
+
</the_problem>
|
|
15
|
+
|
|
16
|
+
<the_solution>
|
|
17
|
+
Use `~/.claude/scripts/secure-api.sh` - a wrapper that loads credentials internally.
|
|
18
|
+
|
|
19
|
+
<for_supported_services>
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# ✅ GOOD - No credentials visible
|
|
23
|
+
~/.claude/scripts/secure-api.sh <service> <operation> [args]
|
|
24
|
+
|
|
25
|
+
# Examples:
|
|
26
|
+
~/.claude/scripts/secure-api.sh facebook list-campaigns
|
|
27
|
+
~/.claude/scripts/secure-api.sh ghl search-contact "email@example.com"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
</for_supported_services>
|
|
31
|
+
|
|
32
|
+
<adding_new_services>
|
|
33
|
+
When building a new skill that requires API calls:
|
|
34
|
+
|
|
35
|
+
1. **Add operations to the wrapper** (`~/.claude/scripts/secure-api.sh`):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
case "$SERVICE" in
|
|
39
|
+
yourservice)
|
|
40
|
+
case "$OPERATION" in
|
|
41
|
+
list-items)
|
|
42
|
+
curl -s -G \
|
|
43
|
+
-H "Authorization: Bearer $YOUR_API_KEY" \
|
|
44
|
+
"https://api.yourservice.com/items"
|
|
45
|
+
;;
|
|
46
|
+
get-item)
|
|
47
|
+
ITEM_ID=$1
|
|
48
|
+
curl -s -G \
|
|
49
|
+
-H "Authorization: Bearer $YOUR_API_KEY" \
|
|
50
|
+
"https://api.yourservice.com/items/$ITEM_ID"
|
|
51
|
+
;;
|
|
52
|
+
*)
|
|
53
|
+
echo "Unknown operation: $OPERATION" >&2
|
|
54
|
+
exit 1
|
|
55
|
+
;;
|
|
56
|
+
esac
|
|
57
|
+
;;
|
|
58
|
+
esac
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
2. **Add profile support to the wrapper** (if service needs multiple accounts):
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
# In secure-api.sh, add to profile remapping section:
|
|
65
|
+
yourservice)
|
|
66
|
+
SERVICE_UPPER="YOURSERVICE"
|
|
67
|
+
# Dynamically resolve the env var name using the profile:
|
|
68
|
+
# YOURSERVICE_API_KEY = value of YOURSERVICE_<PROFILE>_API_KEY
|
|
69
|
+
# YOURSERVICE_ACCOUNT_ID = value of YOURSERVICE_<PROFILE>_ACCOUNT_ID
|
|
70
|
+
;;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
3. **Add credential placeholders to `~/.claude/.env`** using profile naming:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Check if entries already exist
|
|
77
|
+
grep -q "YOURSERVICE_MAIN_API_KEY=" ~/.claude/.env 2>/dev/null || \
|
|
78
|
+
echo -e "\n# Your Service - Main profile\nYOURSERVICE_MAIN_API_KEY=\nYOURSERVICE_MAIN_ACCOUNT_ID=" >> ~/.claude/.env
|
|
79
|
+
|
|
80
|
+
echo "Added credential placeholders to ~/.claude/.env - user needs to fill them in"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
4. **Document profile workflow in your SKILL.md**:
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Profile Selection Workflow
|
|
87
|
+
|
|
88
|
+
**CRITICAL:** Always use profile selection to prevent using wrong account credentials.
|
|
89
|
+
|
|
90
|
+
### When user requests YourService operation:
|
|
91
|
+
|
|
92
|
+
1. **Check for saved profile:**
|
|
93
|
+
```bash
|
|
94
|
+
~/.claude/scripts/profile-state get yourservice
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
2. **If no profile saved, discover available profiles:**
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
~/.claude/scripts/list-profiles yourservice
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
3. **If only ONE profile:** Use it automatically and announce:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
"Using YourService profile 'main' to list items..."
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
4. **If MULTIPLE profiles:** Ask user which one:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
"Which YourService profile: main, clienta, or clientb?"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
5. **Save user's selection:**
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
~/.claude/scripts/profile-state set yourservice <selected_profile>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
6. **Always announce which profile before calling API:**
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
"Using YourService profile 'main' to list items..."
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
7. **Make API call with profile:**
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
~/.claude/scripts/secure-api.sh yourservice:<profile> list-items
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Secure API Calls
|
|
134
|
+
|
|
135
|
+
All API calls use profile syntax:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
~/.claude/scripts/secure-api.sh yourservice:<profile> <operation> [args]
|
|
139
|
+
|
|
140
|
+
# Examples:
|
|
141
|
+
~/.claude/scripts/secure-api.sh yourservice:main list-items
|
|
142
|
+
~/.claude/scripts/secure-api.sh yourservice:main get-item <ITEM_ID>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Profile persists for session:** Once selected, use same profile for subsequent operations unless user explicitly changes it.
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
</adding_new_services>
|
|
149
|
+
</the_solution>
|
|
150
|
+
|
|
151
|
+
<pattern_guidelines>
|
|
152
|
+
<simple_get_requests>
|
|
153
|
+
```bash
|
|
154
|
+
curl -s -G \
|
|
155
|
+
-H "Authorization: Bearer $API_KEY" \
|
|
156
|
+
"https://api.example.com/endpoint"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
</simple_get_requests>
|
|
160
|
+
|
|
161
|
+
<post_with_json_body>
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
ITEM_ID=$1
|
|
165
|
+
curl -s -X POST \
|
|
166
|
+
-H "Authorization: Bearer $API_KEY" \
|
|
167
|
+
-H "Content-Type: application/json" \
|
|
168
|
+
-d @- \
|
|
169
|
+
"https://api.example.com/items/$ITEM_ID"
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Usage:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
echo '{"name":"value"}' | ~/.claude/scripts/secure-api.sh service create-item
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
</post_with_json_body>
|
|
179
|
+
|
|
180
|
+
<post_with_form_data>
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
curl -s -X POST \
|
|
184
|
+
-F "field1=value1" \
|
|
185
|
+
-F "field2=value2" \
|
|
186
|
+
-F "access_token=$API_TOKEN" \
|
|
187
|
+
"https://api.example.com/endpoint"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
</post_with_form_data>
|
|
191
|
+
</pattern_guidelines>
|
|
192
|
+
|
|
193
|
+
<credential_storage>
|
|
194
|
+
**Location:** `~/.claude/.env` (global for all skills, accessible from any directory)
|
|
195
|
+
|
|
196
|
+
**Format:**
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Service credentials
|
|
200
|
+
SERVICE_API_KEY=your-key-here
|
|
201
|
+
SERVICE_ACCOUNT_ID=account-id-here
|
|
202
|
+
|
|
203
|
+
# Another service
|
|
204
|
+
OTHER_API_TOKEN=token-here
|
|
205
|
+
OTHER_BASE_URL=https://api.other.com
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Loading in script:**
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
set -a
|
|
212
|
+
source ~/.claude/.env 2>/dev/null || { echo "Error: ~/.claude/.env not found" >&2; exit 1; }
|
|
213
|
+
set +a
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
</credential_storage>
|
|
217
|
+
|
|
218
|
+
<best_practices>
|
|
219
|
+
|
|
220
|
+
1. **Never use raw curl with `$VARIABLE` in skill examples** - always use the wrapper
|
|
221
|
+
2. **Add all operations to the wrapper** - don't make users figure out curl syntax
|
|
222
|
+
3. **Auto-create credential placeholders** - add empty fields to `~/.claude/.env` immediately when creating the skill
|
|
223
|
+
4. **Keep credentials in `~/.claude/.env`** - one central location, works everywhere
|
|
224
|
+
5. **Document each operation** - show examples in SKILL.md
|
|
225
|
+
6. **Handle errors gracefully** - check for missing env vars, show helpful error messages
|
|
226
|
+
</best_practices>
|
|
227
|
+
|
|
228
|
+
<testing>
|
|
229
|
+
Test the wrapper without exposing credentials:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# This command appears in chat
|
|
233
|
+
~/.claude/scripts/secure-api.sh facebook list-campaigns
|
|
234
|
+
|
|
235
|
+
# But API keys never appear - they're loaded inside the script
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Verify credentials are loaded:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Check .env exists
|
|
242
|
+
ls -la ~/.claude/.env
|
|
243
|
+
|
|
244
|
+
# Check specific variables (without showing values)
|
|
245
|
+
grep -q "YOUR_API_KEY=" ~/.claude/.env && echo "API key configured" || echo "API key missing"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
</testing>
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<!-- Inspired by mattpocock/skills/skills/productivity/writing-for-agents/SKILL.md, mattpocock/skills/skills/productivity/writing-for-agents/SKILL-MECHANICS.md and mattpocock/skills/.agents/invocation.md (MIT, Copyright (c) 2026 Matt Pocock). -->
|
|
2
|
+
# Authoring Levers
|
|
3
|
+
|
|
4
|
+
Four levers decide whether an agent runs a skill the same way twice. Reach for this file when
|
|
5
|
+
drafting or reviewing a `SKILL.md`, a reference, an agent file, or an always-loaded rule. The
|
|
6
|
+
running example is a synthetic skill, `my-deploy-skill`, that ships a container to a server.
|
|
7
|
+
|
|
8
|
+
## Leading words
|
|
9
|
+
|
|
10
|
+
A leading word is one short token for a concept the model already learned in pretraining. Used
|
|
11
|
+
consistently, it carries a whole behaviour in a single word, so the prose around it can shrink.
|
|
12
|
+
|
|
13
|
+
Soleur already runs on a few. `red` in `reproduce-bug` turns "a check you trust" into a binary state:
|
|
14
|
+
the command either goes red on this bug or it does not. `drain` in `drain-prs` and
|
|
15
|
+
`drain-labeled-backlog` says "empty the queue, item by item, until nothing is left" without a
|
|
16
|
+
paragraph of explanation.
|
|
17
|
+
|
|
18
|
+
How to use the lever:
|
|
19
|
+
|
|
20
|
+
- Look for a phrase that recurs, or a sentence that circles one idea. Replace it with a single
|
|
21
|
+
word the model already knows, then use that word every time.
|
|
22
|
+
- Prefer an existing word to a coined one. A coined word brings no prior meaning, so you pay for its
|
|
23
|
+
definition in tokens.
|
|
24
|
+
- Put the word in both places it works: the body (so each step pulls the same behaviour) and the
|
|
25
|
+
description (so the prompt that should fire the skill shares its vocabulary).
|
|
26
|
+
|
|
27
|
+
For `my-deploy-skill`, "verify the new container answers health checks, and roll back if it does
|
|
28
|
+
not" becomes one word used at every step: the deploy is **green** or it is rolled back.
|
|
29
|
+
|
|
30
|
+
**Negation.** A prohibition names the behaviour it forbids, and naming it puts that behaviour in
|
|
31
|
+
front of the model. Pair every prohibition with the positive target, and lead with the target:
|
|
32
|
+
"write the health-check result to the PR body" beats "do not skip the health check". Keep a bare
|
|
33
|
+
prohibition only as a hard guardrail with no positive form, and even then state what to do instead.
|
|
34
|
+
This lever comes from the model vendors' prompting guidance, not from a Soleur measurement.
|
|
35
|
+
Soleur's attempt to measure it on its own always-loaded rules (B5, #8290) was inconclusive with
|
|
36
|
+
limited instrument validity. ADR-236 records it and #8497 tracks a rerun. Apply the lever to new
|
|
37
|
+
text; do not rewrite existing rules for phrasing alone.
|
|
38
|
+
|
|
39
|
+
## The two loads (context vs cognitive)
|
|
40
|
+
|
|
41
|
+
Each pointer you add is paid from one of two budgets.
|
|
42
|
+
|
|
43
|
+
- **Context load** is what the model carries on every turn: each skill description, each line of
|
|
44
|
+
an always-loaded rule. It costs tokens and attention whether or not the skill fires.
|
|
45
|
+
- **Cognitive load** is what a human carries: knowing a thing exists and when to reach for it. It is
|
|
46
|
+
the right cost where human judgement should gate the action, and the wrong one anywhere else.
|
|
47
|
+
|
|
48
|
+
A skill with no path to it from the model rides entirely on the human remembering it.
|
|
49
|
+
|
|
50
|
+
### The invocation choice
|
|
51
|
+
|
|
52
|
+
Ask one question of every skill: **could the model usefully reach for this on its own, or must
|
|
53
|
+
another skill reach it?** If either is true, the skill stays model-invocable. If only a human ever
|
|
54
|
+
fires it, mark it user-invoked and stop paying context load for it.
|
|
55
|
+
|
|
56
|
+
`disable-model-invocation: true` removes the description from the model's always-loaded skill
|
|
57
|
+
listing. Measured on Claude Code 2.1.278:
|
|
58
|
+
|
|
59
|
+
- the description is absent from the listing;
|
|
60
|
+
- the Skill tool refuses with a `tool_use_error` that tells the model to ask the user to type
|
|
61
|
+
`/plugin:skill`;
|
|
62
|
+
- the user's slash command still runs, both headless and in the interactive TUI.
|
|
63
|
+
|
|
64
|
+
ADR-236 holds the rest and is the single source for it: the three necessary conditions (K1-K3,
|
|
65
|
+
where K3 means the model can still reach the capability another way, or it is deliberately
|
|
66
|
+
operator-only), each harness's behaviour (the flag is inert on Codex and Grok), the headless-refusal
|
|
67
|
+
policy (stop and file an `action-required` issue naming the command; never re-run the skill's steps
|
|
68
|
+
by hand), and the sites that move together when a skill is flipped.
|
|
69
|
+
|
|
70
|
+
"Operator tooling" and "only a human should fire it" are different properties. A skill that an
|
|
71
|
+
always-loaded rule lists as the agent's own tool, a skill plans prescribe as an agent step, or a
|
|
72
|
+
read-only audit the agent must pull itself before acting, stays model-invocable however
|
|
73
|
+
operator-flavoured it looks. `my-deploy-skill` would qualify for the flag only if no other skill's
|
|
74
|
+
steps call it and no founder reaches it from the web.
|
|
75
|
+
|
|
76
|
+
## Co-location (vs duplication, single source of truth)
|
|
77
|
+
|
|
78
|
+
Co-location is about placement inside one file: a concept's definition, its rules, and its caveats
|
|
79
|
+
sit under one heading. Reading any part of it brings the rest along. Scattering the same concept
|
|
80
|
+
across three sections makes the model assemble it, and it will sometimes assemble it wrong.
|
|
81
|
+
|
|
82
|
+
Duplication is a different failure: one meaning written in two places. The copies drift, both cost
|
|
83
|
+
tokens, and the repetition inflates the concept's apparent importance. Give every meaning exactly
|
|
84
|
+
one authoritative home, a single source of truth, and point at it. For `my-deploy-skill`, the
|
|
85
|
+
rollback rule lives once, under `## Rollback`, and the deploy steps link to that section instead
|
|
86
|
+
of restating it.
|
|
87
|
+
|
|
88
|
+
The repository itself is also authoritative. A command's `--help`, a `package.json` script, or the
|
|
89
|
+
directory layout answers a lookup better than a copy in prose, which goes stale silently. Write
|
|
90
|
+
down what the agent cannot discover by looking: the convention nobody encoded, the reason behind a
|
|
91
|
+
choice, the trap the config hides.
|
|
92
|
+
|
|
93
|
+
Structure follows the same rule. Markdown headings structure a skill body; XML tags are optional
|
|
94
|
+
semantic wrappers inside a section and never replace headings (see `skill-structure.md`).
|
|
95
|
+
|
|
96
|
+
## Criterion demand (clarity AND demand)
|
|
97
|
+
|
|
98
|
+
Every step ends on a completion criterion, and a criterion has two independent properties.
|
|
99
|
+
|
|
100
|
+
- **Clarity**: is the finished state unambiguous to the agent? "The deploy looks healthy" invites
|
|
101
|
+
stopping early. "`curl -fsS $HOST/health` returned 200 three times, 10 seconds apart" does not.
|
|
102
|
+
- **Demand**: how much the criterion asks for. "Report the deploy status" asks for a sentence.
|
|
103
|
+
"Every service in the compose file answered its health check, and each result is in the PR body"
|
|
104
|
+
forces the agent to enumerate the services, check each one, and write the results.
|
|
105
|
+
|
|
106
|
+
A clear criterion that demands little still produces thin work, and a demanding one that is vague
|
|
107
|
+
still ends early. Write criteria that are both: checkable by a command or a count, and exhaustive
|
|
108
|
+
over the set the step covers. When a fuzzy criterion keeps ending a step early, sharpen the
|
|
109
|
+
criterion first; moving the later steps out of view helps only across a real context boundary, such
|
|
110
|
+
as a subagent dispatch or a hand-off.
|