@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,335 @@
|
|
|
1
|
+
# DSPy.rb LLM Providers
|
|
2
|
+
|
|
3
|
+
## Supported Providers
|
|
4
|
+
|
|
5
|
+
DSPy.rb provides unified support across multiple LLM providers through adapter gems that automatically load when installed.
|
|
6
|
+
|
|
7
|
+
### Provider Overview
|
|
8
|
+
|
|
9
|
+
- **OpenAI**: GPT-4, GPT-4o, GPT-4o-mini, GPT-3.5-turbo
|
|
10
|
+
- **Anthropic**: Claude Opus 5.5, Sonnet 5.5, Haiku 5.5
|
|
11
|
+
- **Google Gemini**: Gemini 1.5 Pro, Gemini 1.5 Flash, other versions
|
|
12
|
+
- **Ollama**: Local model support via OpenAI compatibility layer
|
|
13
|
+
- **OpenRouter**: Unified multi-provider API for 200+ models
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
### Basic Setup
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
require 'dspy'
|
|
21
|
+
|
|
22
|
+
DSPy.configure do |c|
|
|
23
|
+
c.lm = DSPy::LM.new('provider/model-name', api_key: ENV['API_KEY'])
|
|
24
|
+
end
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### OpenAI Configuration
|
|
28
|
+
|
|
29
|
+
**Required gem**: `dspy-openai`
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
DSPy.configure do |c|
|
|
33
|
+
# GPT-4o Mini (recommended for development)
|
|
34
|
+
c.lm = DSPy::LM.new('openai/gpt-4o-mini', api_key: ENV['OPENAI_API_KEY'])
|
|
35
|
+
|
|
36
|
+
# GPT-4o (more capable)
|
|
37
|
+
c.lm = DSPy::LM.new('openai/gpt-4o', api_key: ENV['OPENAI_API_KEY'])
|
|
38
|
+
|
|
39
|
+
# GPT-4 Turbo
|
|
40
|
+
c.lm = DSPy::LM.new('openai/gpt-4-turbo', api_key: ENV['OPENAI_API_KEY'])
|
|
41
|
+
end
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Environment variable**: `OPENAI_API_KEY`
|
|
45
|
+
|
|
46
|
+
### Anthropic Configuration
|
|
47
|
+
|
|
48
|
+
**Required gem**: `dspy-anthropic`
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
DSPy.configure do |c|
|
|
52
|
+
# Claude Opus 5.5 (most intelligent, best for agents and coding)
|
|
53
|
+
c.lm = DSPy::LM.new('anthropic/claude-opus-5-5',
|
|
54
|
+
api_key: ENV['ANTHROPIC_API_KEY'])
|
|
55
|
+
|
|
56
|
+
# Claude Sonnet 5.5 (best speed/intelligence balance)
|
|
57
|
+
c.lm = DSPy::LM.new('anthropic/claude-sonnet-5-5',
|
|
58
|
+
api_key: ENV['ANTHROPIC_API_KEY'])
|
|
59
|
+
|
|
60
|
+
# Claude Haiku 5.5 (fastest, cost-effective)
|
|
61
|
+
c.lm = DSPy::LM.new('anthropic/claude-haiku-5-5',
|
|
62
|
+
api_key: ENV['ANTHROPIC_API_KEY'])
|
|
63
|
+
end
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Environment variable**: `ANTHROPIC_API_KEY`
|
|
67
|
+
|
|
68
|
+
### Google Gemini Configuration
|
|
69
|
+
|
|
70
|
+
**Required gem**: `dspy-gemini`
|
|
71
|
+
|
|
72
|
+
```ruby
|
|
73
|
+
DSPy.configure do |c|
|
|
74
|
+
# Gemini 1.5 Pro (most capable)
|
|
75
|
+
c.lm = DSPy::LM.new('gemini/gemini-1.5-pro',
|
|
76
|
+
api_key: ENV['GOOGLE_API_KEY'])
|
|
77
|
+
|
|
78
|
+
# Gemini 1.5 Flash (faster, cost-effective)
|
|
79
|
+
c.lm = DSPy::LM.new('gemini/gemini-1.5-flash',
|
|
80
|
+
api_key: ENV['GOOGLE_API_KEY'])
|
|
81
|
+
end
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Environment variable**: `GOOGLE_API_KEY` or `GEMINI_API_KEY`
|
|
85
|
+
|
|
86
|
+
### Ollama Configuration
|
|
87
|
+
|
|
88
|
+
**Required gem**: None (uses OpenAI compatibility layer)
|
|
89
|
+
|
|
90
|
+
```ruby
|
|
91
|
+
DSPy.configure do |c|
|
|
92
|
+
# Local Ollama instance
|
|
93
|
+
c.lm = DSPy::LM.new('ollama/llama3.1',
|
|
94
|
+
base_url: 'http://localhost:11434')
|
|
95
|
+
|
|
96
|
+
# Other Ollama models
|
|
97
|
+
c.lm = DSPy::LM.new('ollama/mistral')
|
|
98
|
+
c.lm = DSPy::LM.new('ollama/codellama')
|
|
99
|
+
end
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Note**: Ensure Ollama is running locally: `ollama serve`
|
|
103
|
+
|
|
104
|
+
### OpenRouter Configuration
|
|
105
|
+
|
|
106
|
+
**Required gem**: `dspy-openai` (uses OpenAI adapter)
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
DSPy.configure do |c|
|
|
110
|
+
# Access 200+ models through OpenRouter
|
|
111
|
+
c.lm = DSPy::LM.new('openrouter/anthropic/claude-sonnet-5-5',
|
|
112
|
+
api_key: ENV['OPENROUTER_API_KEY'],
|
|
113
|
+
base_url: 'https://openrouter.ai/api/v1')
|
|
114
|
+
|
|
115
|
+
# Other examples
|
|
116
|
+
c.lm = DSPy::LM.new('openrouter/google/gemini-pro')
|
|
117
|
+
c.lm = DSPy::LM.new('openrouter/meta-llama/llama-3.1-70b-instruct')
|
|
118
|
+
end
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Environment variable**: `OPENROUTER_API_KEY`
|
|
122
|
+
|
|
123
|
+
## Provider Compatibility Matrix
|
|
124
|
+
|
|
125
|
+
### Feature Support
|
|
126
|
+
|
|
127
|
+
| Feature | OpenAI | Anthropic | Gemini | Ollama |
|
|
128
|
+
|---------|--------|-----------|--------|--------|
|
|
129
|
+
| Structured Output | ✅ | ✅ | ✅ | ✅ |
|
|
130
|
+
| Vision (Images) | ✅ | ✅ | ✅ | ⚠️ Limited |
|
|
131
|
+
| Image URLs | ✅ | ❌ | ❌ | ❌ |
|
|
132
|
+
| Tool Calling | ✅ | ✅ | ✅ | Varies |
|
|
133
|
+
| Streaming | ❌ | ❌ | ❌ | ❌ |
|
|
134
|
+
| Function Calling | ✅ | ✅ | ✅ | Varies |
|
|
135
|
+
|
|
136
|
+
**Legend**: ✅ Full support | ⚠️ Partial support | ❌ Not supported
|
|
137
|
+
|
|
138
|
+
### Vision Capabilities
|
|
139
|
+
|
|
140
|
+
**Image URLs**: Only OpenAI supports direct URL references. For other providers, load images as base64 or from files.
|
|
141
|
+
|
|
142
|
+
```ruby
|
|
143
|
+
# OpenAI - supports URLs
|
|
144
|
+
DSPy::Image.from_url("https://example.com/image.jpg")
|
|
145
|
+
|
|
146
|
+
# Anthropic, Gemini - use file or base64
|
|
147
|
+
DSPy::Image.from_file("path/to/image.jpg")
|
|
148
|
+
DSPy::Image.from_base64(base64_data, mime_type: "image/jpeg")
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Ollama**: Limited multimodal functionality. Check specific model capabilities.
|
|
152
|
+
|
|
153
|
+
## Advanced Configuration
|
|
154
|
+
|
|
155
|
+
### Custom Parameters
|
|
156
|
+
|
|
157
|
+
Pass provider-specific parameters during configuration:
|
|
158
|
+
|
|
159
|
+
```ruby
|
|
160
|
+
DSPy.configure do |c|
|
|
161
|
+
c.lm = DSPy::LM.new('openai/gpt-4o',
|
|
162
|
+
api_key: ENV['OPENAI_API_KEY'],
|
|
163
|
+
temperature: 0.7,
|
|
164
|
+
max_tokens: 2000,
|
|
165
|
+
top_p: 0.9
|
|
166
|
+
)
|
|
167
|
+
end
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Multiple Providers
|
|
171
|
+
|
|
172
|
+
Use different models for different tasks:
|
|
173
|
+
|
|
174
|
+
```ruby
|
|
175
|
+
# Fast model for simple tasks
|
|
176
|
+
fast_lm = DSPy::LM.new('openai/gpt-4o-mini', api_key: ENV['OPENAI_API_KEY'])
|
|
177
|
+
|
|
178
|
+
# Powerful model for complex tasks
|
|
179
|
+
powerful_lm = DSPy::LM.new('anthropic/claude-sonnet-5-5',
|
|
180
|
+
api_key: ENV['ANTHROPIC_API_KEY'])
|
|
181
|
+
|
|
182
|
+
# Use different models in different modules
|
|
183
|
+
class SimpleClassifier < DSPy::Module
|
|
184
|
+
def initialize
|
|
185
|
+
super
|
|
186
|
+
DSPy.configure { |c| c.lm = fast_lm }
|
|
187
|
+
@predictor = DSPy::Predict.new(SimpleSignature)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
class ComplexAnalyzer < DSPy::Module
|
|
192
|
+
def initialize
|
|
193
|
+
super
|
|
194
|
+
DSPy.configure { |c| c.lm = powerful_lm }
|
|
195
|
+
@predictor = DSPy::ChainOfThought.new(ComplexSignature)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Per-Request Configuration
|
|
201
|
+
|
|
202
|
+
Override configuration for specific predictions:
|
|
203
|
+
|
|
204
|
+
```ruby
|
|
205
|
+
predictor = DSPy::Predict.new(MySignature)
|
|
206
|
+
|
|
207
|
+
# Use default configuration
|
|
208
|
+
result1 = predictor.forward(input: "data")
|
|
209
|
+
|
|
210
|
+
# Override temperature for this request
|
|
211
|
+
result2 = predictor.forward(
|
|
212
|
+
input: "data",
|
|
213
|
+
config: { temperature: 0.2 } # More deterministic
|
|
214
|
+
)
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Cost Optimization
|
|
218
|
+
|
|
219
|
+
### Model Selection Strategy
|
|
220
|
+
|
|
221
|
+
1. **Development**: Use cheaper, faster models (gpt-4o-mini, claude-haiku-5-5, gemini-1.5-flash)
|
|
222
|
+
2. **Production Simple Tasks**: Continue with cheaper models if quality is sufficient
|
|
223
|
+
3. **Production Complex Tasks**: Upgrade to more capable models (gpt-4o, claude-sonnet-5-5, gemini-1.5-pro)
|
|
224
|
+
4. **Local Development**: Use Ollama for privacy and zero API costs
|
|
225
|
+
|
|
226
|
+
### Example Cost-Conscious Setup
|
|
227
|
+
|
|
228
|
+
```ruby
|
|
229
|
+
# Development environment
|
|
230
|
+
if Rails.env.development?
|
|
231
|
+
DSPy.configure do |c|
|
|
232
|
+
c.lm = DSPy::LM.new('ollama/llama3.1') # Free, local
|
|
233
|
+
end
|
|
234
|
+
elsif Rails.env.test?
|
|
235
|
+
DSPy.configure do |c|
|
|
236
|
+
c.lm = DSPy::LM.new('openai/gpt-4o-mini', # Cheap for testing
|
|
237
|
+
api_key: ENV['OPENAI_API_KEY'])
|
|
238
|
+
end
|
|
239
|
+
else # production
|
|
240
|
+
DSPy.configure do |c|
|
|
241
|
+
c.lm = DSPy::LM.new('anthropic/claude-sonnet-5-5',
|
|
242
|
+
api_key: ENV['ANTHROPIC_API_KEY'])
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Provider-Specific Best Practices
|
|
248
|
+
|
|
249
|
+
### OpenAI
|
|
250
|
+
|
|
251
|
+
- Use `gpt-4o-mini` for development and simple tasks
|
|
252
|
+
- Use `gpt-4o` for production complex tasks
|
|
253
|
+
- Best vision support including URL loading
|
|
254
|
+
- Excellent function calling capabilities
|
|
255
|
+
|
|
256
|
+
### Anthropic
|
|
257
|
+
|
|
258
|
+
- Claude Sonnet 5.5 offers the best speed/intelligence balance
|
|
259
|
+
- Claude Opus 5.5 is the most intelligent for agents and coding
|
|
260
|
+
- Excellent for complex reasoning and analysis
|
|
261
|
+
- Strong safety features and helpful outputs
|
|
262
|
+
- Requires base64 for images (no URL support)
|
|
263
|
+
|
|
264
|
+
### Google Gemini
|
|
265
|
+
|
|
266
|
+
- Gemini 1.5 Pro for complex tasks, Flash for speed
|
|
267
|
+
- Strong multimodal capabilities
|
|
268
|
+
- Good balance of cost and performance
|
|
269
|
+
- Requires base64 for images
|
|
270
|
+
|
|
271
|
+
### Ollama
|
|
272
|
+
|
|
273
|
+
- Best for privacy-sensitive applications
|
|
274
|
+
- Zero API costs
|
|
275
|
+
- Requires local hardware resources
|
|
276
|
+
- Limited multimodal support depending on model
|
|
277
|
+
- Good for development and testing
|
|
278
|
+
|
|
279
|
+
## Troubleshooting
|
|
280
|
+
|
|
281
|
+
### API Key Issues
|
|
282
|
+
|
|
283
|
+
```ruby
|
|
284
|
+
# Verify API key is set
|
|
285
|
+
if ENV['OPENAI_API_KEY'].nil?
|
|
286
|
+
raise "OPENAI_API_KEY environment variable not set"
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# Test connection
|
|
290
|
+
begin
|
|
291
|
+
DSPy.configure { |c| c.lm = DSPy::LM.new('openai/gpt-4o-mini',
|
|
292
|
+
api_key: ENV['OPENAI_API_KEY']) }
|
|
293
|
+
predictor = DSPy::Predict.new(TestSignature)
|
|
294
|
+
predictor.forward(test: "data")
|
|
295
|
+
puts "✅ Connection successful"
|
|
296
|
+
rescue => e
|
|
297
|
+
puts "❌ Connection failed: #{e.message}"
|
|
298
|
+
end
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Rate Limiting
|
|
302
|
+
|
|
303
|
+
Handle rate limits gracefully:
|
|
304
|
+
|
|
305
|
+
```ruby
|
|
306
|
+
def call_with_retry(predictor, input, max_retries: 3)
|
|
307
|
+
retries = 0
|
|
308
|
+
begin
|
|
309
|
+
predictor.forward(input)
|
|
310
|
+
rescue RateLimitError => e
|
|
311
|
+
retries += 1
|
|
312
|
+
if retries < max_retries
|
|
313
|
+
sleep(2 ** retries) # Exponential backoff
|
|
314
|
+
retry
|
|
315
|
+
else
|
|
316
|
+
raise
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Model Not Found
|
|
323
|
+
|
|
324
|
+
Ensure the correct gem is installed:
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
# For OpenAI
|
|
328
|
+
gem install dspy-openai
|
|
329
|
+
|
|
330
|
+
# For Anthropic
|
|
331
|
+
gem install dspy-anthropic
|
|
332
|
+
|
|
333
|
+
# For Gemini
|
|
334
|
+
gem install dspy-gemini
|
|
335
|
+
```
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# eval-harness
|
|
2
|
+
|
|
3
|
+
A [promptfoo](https://www.promptfoo.dev) harness that empirically measures whether a Soleur skill
|
|
4
|
+
or agent edit improves classification behavior. v1 ships two targets — `soleur:go` routing accuracy
|
|
5
|
+
and ticket-triage P-level accuracy — adapting the [ponytail](https://github.com/DietrichGebert/ponytail)
|
|
6
|
+
(MIT) benchmark methodology.
|
|
7
|
+
|
|
8
|
+
## Prerequisites
|
|
9
|
+
|
|
10
|
+
- Node `>=22.22` (the worktree ships v22.22.1) — no dependency is added to any `package.json`;
|
|
11
|
+
the harness runs via `npx promptfoo`.
|
|
12
|
+
- `ANTHROPIC_API_KEY` in the environment (promptfoo's `anthropic:messages:*` providers read it).
|
|
13
|
+
In this repository, take it from Doppler `ci`: `doppler run -p soleur -c ci -- <command>`. That
|
|
14
|
+
key lives in the spend-capped `soleur-ci-eval` Console workspace ($100/month), so a grid can
|
|
15
|
+
never drain the balance production draws on. Never run a grid under a `prd*` config (#8505).
|
|
16
|
+
|
|
17
|
+
## Reproduce
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cd plugins/soleur/skills/eval-harness
|
|
21
|
+
|
|
22
|
+
# 1. Refresh the model IDs from the TS registry (writes models.generated.json).
|
|
23
|
+
bash scripts/gen-models.sh
|
|
24
|
+
|
|
25
|
+
# 2. (No-spend) sanity-check the configs — zero API calls.
|
|
26
|
+
npx promptfoo validate config -c promptfooconfig-go-routing.yaml
|
|
27
|
+
npx promptfoo validate config -c promptfooconfig-ticket-triage.yaml
|
|
28
|
+
|
|
29
|
+
# 3. Run a target (SPENDS — see cost below). `--repeat 3` runs each cell 3×.
|
|
30
|
+
npx promptfoo eval -c promptfooconfig-go-routing.yaml --repeat 3
|
|
31
|
+
npx promptfoo eval -c promptfooconfig-ticket-triage.yaml --repeat 3
|
|
32
|
+
|
|
33
|
+
# 4. Inspect results in the browser.
|
|
34
|
+
npx promptfoo view
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Projection-regen (run on any source-block edit)
|
|
38
|
+
|
|
39
|
+
The skill-arm prompts are mechanical projections of the production classifier blocks, not
|
|
40
|
+
hand-copies. After editing the `/go` routing table (`plugins/soleur/commands/go.md`) or the
|
|
41
|
+
ticket-triage rubric (`plugins/soleur/agents/support/ticket-triage.md`), regenerate the prompts:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cd plugins/soleur/skills/eval-harness
|
|
45
|
+
node scripts/gen-skill-prompt.cjs --all # rewrites prompts/go-skill.txt + prompts/triage-skill.txt
|
|
46
|
+
bash test/extract-block.test.sh # AC4: generated projection == committed (no API)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Gate mode — validation-gated block edits (reproduce)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
cd plugins/soleur/skills/eval-harness
|
|
53
|
+
|
|
54
|
+
# Is a file a gated classifier source? (lookup-only, no API)
|
|
55
|
+
node scripts/eval-gate.cjs --check ../../commands/go.md
|
|
56
|
+
|
|
57
|
+
# What would a gate run cost? (skill-arm-only estimate, no API)
|
|
58
|
+
node scripts/eval-gate.cjs --dry-run --target go-routing --repeat 5
|
|
59
|
+
|
|
60
|
+
# Gate an edit (SPENDS): current block on disk vs the candidate edit; the targeted case must pass
|
|
61
|
+
# and the corpus must not regress. Append the synthesized golden task to the corpus only on accept.
|
|
62
|
+
node scripts/eval-gate.cjs --target go-routing \
|
|
63
|
+
--candidate-file /path/to/edited-go.md \
|
|
64
|
+
--target-task '{"vars":{"input":"...","golden_label":"fix"}}' \
|
|
65
|
+
--repeat 5 --append-on-accept
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The verdict math is the pure [scripts/verdict.cjs](./scripts/verdict.cjs) (`computeVerdict`); the gate
|
|
69
|
+
fails closed (non-zero exit + NOT accept on any error). See [SKILL.md](./SKILL.md) §"Gate mode" and
|
|
70
|
+
ADR-069 for the decision and the projection precondition.
|
|
71
|
+
|
|
72
|
+
> **Use `validate config`, never bare `validate` or `validate target`** — the latter two spend API
|
|
73
|
+
> credits. `validate config` is config-only and free.
|
|
74
|
+
>
|
|
75
|
+
> **`--repeat N` is a CLI flag, not a config key.** A `repeat:` key in `promptfooconfig.yaml` is
|
|
76
|
+
> silently ignored (each cell runs once). Pass `--repeat 3` on the command line to get N runs per
|
|
77
|
+
> cell for the median.
|
|
78
|
+
|
|
79
|
+
## Per-run cost
|
|
80
|
+
|
|
81
|
+
Each target's grid is **2 arms × 3 models × (its golden tasks) × `--repeat`**. At the current task
|
|
82
|
+
counts and `--repeat 3`: ≈ **126 API calls** for go-routing (7 tasks) and ≈ **108** for
|
|
83
|
+
ticket-triage (6 tasks) — ≈ **230 to run both**. One arm runs on Opus, so cost is dominated by the
|
|
84
|
+
Opus cells, but outputs are single tokens so per-call cost is small (the first full run was well
|
|
85
|
+
under $1). This is why the harness is **opt-in and manual** and is NOT wired into per-PR CI. See the
|
|
86
|
+
`<decision_gate>` in [SKILL.md](./SKILL.md) for the billing disclosure.
|
|
87
|
+
|
|
88
|
+
Before any paid grid that asks for free-text generation, smoke it with
|
|
89
|
+
`--filter-first-n 1 --repeat 1 --no-cache` and read each row's output length and `finishReason`.
|
|
90
|
+
Opus 5.5 and Sonnet 5.5 think by default, so a small `ANTHROPIC_MAX_TOKENS` (300 measured) spends the whole
|
|
91
|
+
budget on thinking and returns empty text, which a lexical scorer reads as compliant (#8290 needed
|
|
92
|
+
3000). Estimate spend from a measured prompt size rather than from file bytes (the #8290 estimate ran
|
|
93
|
+
39% low). promptfoo prints no progress when it isn't writing to a terminal, so poll
|
|
94
|
+
`sqlite3 ~/.promptfoo/promptfoo.db "select count(*) from eval_results where eval_id like '<id>%'"`.
|
|
95
|
+
|
|
96
|
+
## First recorded delta (2026-06-15, `--repeat 3`, opus-4-8 / sonnet-4-6 / haiku-4-5)
|
|
97
|
+
|
|
98
|
+
The baseline run that proved the rig pays off (point-in-time; model updates will shift these):
|
|
99
|
+
|
|
100
|
+
| Target | Skill arm | Baseline arm | Delta |
|
|
101
|
+
|--------|-----------|--------------|-------|
|
|
102
|
+
| `soleur:go` routing | 100% (63/63) | 81% (51/63) | **+19 pts** |
|
|
103
|
+
| ticket-triage P-level | 94% (51/54) | 89% (48/54) | **+6 pts** |
|
|
104
|
+
|
|
105
|
+
Read: the `/go` routing table produces a clean, consistent advantage across all three models (the
|
|
106
|
+
Sonnet baseline scored only 71% on the routing-rule cases → 100% with the table). The triage rubric
|
|
107
|
+
adds a smaller, real delta — priority is more inferable from raw impact than routing is from intent.
|
|
108
|
+
The takeaway for expanding the harness: it discriminates routing-type classifiers strongly, prose
|
|
109
|
+
rubrics modestly, so prioritize new targets by how much the rule adds beyond the label names.
|
|
110
|
+
|
|
111
|
+
## Reading the baseline-vs-skill delta
|
|
112
|
+
|
|
113
|
+
Each run produces, per (arm × model) cell, the **classification-correct rate** recorded by the
|
|
114
|
+
measurement assert (mean of the per-task 1.0/0.0 scores; promptfoo has no native median, so read
|
|
115
|
+
the aggregate score promptfoo reports per cell, or compute the median across the `--repeat` runs from
|
|
116
|
+
the JSON output).
|
|
117
|
+
|
|
118
|
+
> **delta = (skill-arm correct rate) − (baseline-arm correct rate)**
|
|
119
|
+
|
|
120
|
+
A **positive delta** is the evidence that the classifier prose (the `/go` routing table, the triage
|
|
121
|
+
rubric) *produces* the routing/triage behavior — not merely that the text is present. A delta near
|
|
122
|
+
zero means the model classifies just as well without the prose (the prose is not adding signal for
|
|
123
|
+
these tasks). The **gate assert** is orthogonal: it fails any cell whose emitted label is malformed
|
|
124
|
+
or outside the closed enum, independent of correctness — a baseline arm that hallucinates a
|
|
125
|
+
non-existent route is caught here even when its correct rate looks fine.
|
|
126
|
+
|
|
127
|
+
> **Golden tasks must be *discriminating*, not just correct.** The first POC run used easy,
|
|
128
|
+
> unambiguous tasks and the baseline arm scored ~89–100% — so the delta was ~0 and the harness
|
|
129
|
+
> proved nothing. The discriminating tasks are the ones where the *rule* matters but the label
|
|
130
|
+
> *name* alone misleads a label-only baseline: a live production outage that reads like a "fix"
|
|
131
|
+
> (→ `incident`), a "close out the whole backlog" that reads like a "fix" (→ `drain`), a
|
|
132
|
+
> data-deletion request that reads like "default" (→ `legal-threshold`), an `URGENT!!`-titled
|
|
133
|
+
> cosmetic typo (→ `P3`), a "no new user can activate" with no scary keywords (→ `P1`). When adding
|
|
134
|
+
> tasks, bias toward these adversarial cases — that is where the delta lives.
|
|
135
|
+
|
|
136
|
+
To regression-check a future edit to `/go` or ticket-triage: run the relevant config before and
|
|
137
|
+
after the edit and compare the skill-arm correct rate. A drop is a behavioral regression the prose
|
|
138
|
+
change introduced.
|
|
139
|
+
|
|
140
|
+
## Adding a new target (the additive recipe)
|
|
141
|
+
|
|
142
|
+
The two-target v1 exists to prove this is cheap. To add target N:
|
|
143
|
+
|
|
144
|
+
1. Add an enum SSOT `enums/<target>.json` (the closed label set).
|
|
145
|
+
2. Add two arm prompts `prompts/<target>-skill.txt` (embeds the production classifier prose) and
|
|
146
|
+
`prompts/<target>-baseline.txt` (label set only, no rules). Each uses the `{{input}}` placeholder.
|
|
147
|
+
3. Add golden tasks `tasks/<target>.jsonl` — `{"vars": {"input": "...", "golden_label": "..."}}` per
|
|
148
|
+
line, synthesized fixtures only.
|
|
149
|
+
4. Add `promptfooconfig-<target>.yaml` mirroring the existing configs: `providers: file://models.generated.json`,
|
|
150
|
+
the two prompts, `defaultTest.vars.enum: file://enums/<target>.json`, and the two shared asserts
|
|
151
|
+
([measure-classification.cjs](./scripts/measure-classification.cjs),
|
|
152
|
+
[gate-classification.cjs](./scripts/gate-classification.cjs)).
|
|
153
|
+
|
|
154
|
+
The generic asserts and `models.generated.json` are reused unchanged — no new script is needed
|
|
155
|
+
unless the target's output is not a single-token label (prose-output surfaces need an LLM-judge
|
|
156
|
+
assert, deferred out of v1).
|
|
157
|
+
|
|
158
|
+
**Multi-label surface? Gate its single-token output slice first.** A classifier that emits a
|
|
159
|
+
*set* (e.g. `pdr-*` passive-domain-routing → which leaders to spawn) is multi-label and would
|
|
160
|
+
need a set-membership assert. Before building one, check whether the surface also has a
|
|
161
|
+
single-token output factor — a count, tier, or breadth — that captures most of the regression
|
|
162
|
+
risk. `pdr`'s breadth factor is exactly the `lane-inference` enum (`procedural`/`single-domain`/
|
|
163
|
+
`cross-domain`), so gating lane-inference covers the verifiable slice with zero new code and
|
|
164
|
+
defers only the irreducible set factor. Half-covering a multi-label surface with a single-label
|
|
165
|
+
harness ships false confidence — defer it whole instead. See
|
|
166
|
+
`knowledge-base/project/learnings/2026-06-29-multi-label-classifier-gateable-core-is-its-single-token-output-slice.md`.
|
|
167
|
+
|
|
168
|
+
## Archived measurement: `rule-phrasing` (B5, #8290)
|
|
169
|
+
|
|
170
|
+
B5 measured positive-led vs prohibition-led phrasing of four always-loaded rules (648 calls,
|
|
171
|
+
2026-09-21). The verdict was INCONCLUSIVE with limited instrument validity, and the machinery was
|
|
172
|
+
archived rather than kept: see `knowledge-base/project/specs/archive/20260921-162911-feat-one-shot-8290-invocation-axis-budget-relief/b5-eval-results.md`
|
|
173
|
+
for the record and the recovery command, and #8497 for the rerun conditions.
|
|
174
|
+
|
|
175
|
+
## Files
|
|
176
|
+
|
|
177
|
+
| Path | Role |
|
|
178
|
+
|------|------|
|
|
179
|
+
| [promptfooconfig-go-routing.yaml](./promptfooconfig-go-routing.yaml) | `/go` routing target config |
|
|
180
|
+
| [promptfooconfig-ticket-triage.yaml](./promptfooconfig-ticket-triage.yaml) | ticket-triage target config |
|
|
181
|
+
| [scripts/gen-models.sh](./scripts/gen-models.sh) | single-sources the 3 model IDs → `models.generated.json` |
|
|
182
|
+
| [scripts/extract-block.cjs](./scripts/extract-block.cjs) | extracts a gated source block between sentinels (the projection seam) |
|
|
183
|
+
| [scripts/gen-skill-prompt.cjs](./scripts/gen-skill-prompt.cjs) | projects a block into a skill-arm prompt (regenerate on source edit) |
|
|
184
|
+
| [scripts/verdict.cjs](./scripts/verdict.cjs) | pure `computeVerdict` (no I/O) — the accept/reject seam |
|
|
185
|
+
| [scripts/eval-gate.cjs](./scripts/eval-gate.cjs) | gate orchestrator (`--check`, `--dry-run`, real run, `--append-on-accept`) |
|
|
186
|
+
| [gated-skills.json](./gated-skills.json) | registry of gated source blocks (source_file, markers, target, projected prompt) |
|
|
187
|
+
| [scripts/parse-label.cjs](./scripts/parse-label.cjs) | shared label parser |
|
|
188
|
+
| [scripts/measure-classification.cjs](./scripts/measure-classification.cjs) | MEASUREMENT assert (always passes, records the rate) |
|
|
189
|
+
| [scripts/gate-classification.cjs](./scripts/gate-classification.cjs) | GATE assert (fails on out-of-enum label) |
|
|
190
|
+
| [enums/go-routes.json](./enums/go-routes.json) · [enums/triage-levels.json](./enums/triage-levels.json) | closed label sets |
|
|
191
|
+
| [prompts/](./prompts/go-skill.txt) | skill + baseline arm templates per target |
|
|
192
|
+
| [tasks/go-routing.jsonl](./tasks/go-routing.jsonl) · [tasks/ticket-triage.jsonl](./tasks/ticket-triage.jsonl) | synthesized golden tasks |
|
|
193
|
+
| [test/](./test/gen-models.test.sh) | deterministic `.test.sh` unit tests (no live LLM) |
|
|
194
|
+
| [test/registry-completeness.test.sh](./test/registry-completeness.test.sh) | parity gate: `eval-gate:block` source markers ↔ `gated-skills.json` `block_id`s (DEDUP + set-equality + charset) |
|