@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,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: invoice
|
|
3
|
+
description: "This skill should be used when the founder wants to get paid through their own Stripe account: list who owes them, create and send an invoice behind a human-approval preview, or chase an overdue one. Test-mode only in v1."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- mcp__plugin_soleur_stripe__get_stripe_account_info
|
|
6
|
+
- mcp__plugin_soleur_stripe__stripe_api_read
|
|
7
|
+
- mcp__plugin_soleur_stripe__stripe_api_write
|
|
8
|
+
- mcp__plugin_soleur_stripe__stripe_api_search
|
|
9
|
+
- mcp__plugin_soleur_stripe__stripe_api_details
|
|
10
|
+
disallowed-tools: Bash Read Write Edit
|
|
11
|
+
preconditions:
|
|
12
|
+
- Stripe MCP server is authenticated (mcp__plugin_soleur_stripe__authenticate has been run for this session)
|
|
13
|
+
- The authenticated account is in TEST mode (v1 hard-refuses livemode — see S2)
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<!-- grok-harness-invoke:start -->
|
|
17
|
+
**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.
|
|
18
|
+
<!-- grok-harness-invoke:end -->
|
|
19
|
+
|
|
20
|
+
# Invoice — get paid via your own Stripe
|
|
21
|
+
|
|
22
|
+
This skill is the Finance domain's get-paid workflow. It drives the **hosted Stripe MCP**
|
|
23
|
+
(`mcp.stripe.com`, OAuth) to see who owes the founder money, create + send an invoice behind a
|
|
24
|
+
human-approval preview, and chase overdue ones. It acts on the founder's **own** Stripe account —
|
|
25
|
+
whichever account completed the OAuth — and **must never** touch Soleur's product billing credential
|
|
26
|
+
(`STRIPE_SECRET_KEY`). See [ADR-107](../../../../knowledge-base/engineering/architecture/decisions/ADR-107-stripe-mcp-oauth-plane-vs-product-billing-key.md)
|
|
27
|
+
for the credential-plane boundary and its enforcement model.
|
|
28
|
+
|
|
29
|
+
**Credential isolation is defense-in-depth, NOT a tool sandbox.** A skill's `allowed-tools` is
|
|
30
|
+
*pre-approval only* — per the Claude Code spec it does **not** remove `Bash`/`Read`/`Write` from the
|
|
31
|
+
pool, so a prompt-injection payload in a Stripe-returned field (a customer name/memo) could try to
|
|
32
|
+
`Read('.env')` or `Bash('cat lib/stripe.ts')`. The boundary is three partial layers: (1) `allowed-tools`
|
|
33
|
+
lists only the 5 Stripe MCP tools (minimal declared scope); (2) `disallowed-tools: Bash Read Write Edit`
|
|
34
|
+
removes the exfiltration tools for the duration of each operator turn (the injection window); (3) a
|
|
35
|
+
committed `.claude/settings.json` `Read` deny on `**/.env*` + `**/lib/stripe.ts` covers the cross-turn
|
|
36
|
+
`Read` vector. Residual: a `Bash`-mediated secret read, reachable only if the operator approves a
|
|
37
|
+
permission prompt. Full model + rejected alternatives (`context: fork`) in ADR-107.
|
|
38
|
+
|
|
39
|
+
**v1 scope: TEST mode only.** Livemode invoicing is blocked in v1 (S2 hard-stop) pending the legal
|
|
40
|
+
lockstep tracked in [#6264](https://github.com/jikig-ai/soleur/issues/6264). Building and test-mode
|
|
41
|
+
use are **not** gated on that.
|
|
42
|
+
|
|
43
|
+
## Tool surface (generic, runtime-discovered)
|
|
44
|
+
|
|
45
|
+
The hosted MCP exposes **generic** tools, not named ones (`create_invoice` does not exist). Bind each
|
|
46
|
+
verb to a generic call (op-ids confirmed via `stripe_api_details` / `stripe_api_search` at run time):
|
|
47
|
+
|
|
48
|
+
| Verb | MCP tool | Stripe op-id |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| account info | `get_stripe_account_info` | — |
|
|
51
|
+
| mode probe (livemode, zero-PII) | `stripe_api_read` | `GetBalance` |
|
|
52
|
+
| list customers | `stripe_api_read` | `GetCustomers` |
|
|
53
|
+
| list invoices (open/overdue) | `stripe_api_read` | `GetInvoices` (filter `status=open`) |
|
|
54
|
+
| retrieve invoice | `stripe_api_read` | `GetInvoicesInvoice` |
|
|
55
|
+
| create draft | `stripe_api_write` | `PostInvoices` (body: `customer`, `collection_method=send_invoice`, `days_until_due`, `automatic_tax`, `currency`, `metadata`) |
|
|
56
|
+
| add line item | `stripe_api_write` | `PostInvoiceitems` |
|
|
57
|
+
| finalize | `stripe_api_write` | `PostInvoicesInvoiceFinalize` |
|
|
58
|
+
| send | `stripe_api_write` | `PostInvoicesInvoiceSend` |
|
|
59
|
+
| void | `stripe_api_write` | `PostInvoicesInvoiceVoid` |
|
|
60
|
+
|
|
61
|
+
**Anti-duplicate mechanism = DETERMINISTIC metadata reconciliation, NOT idempotency keys.** The generic
|
|
62
|
+
`stripe_api_write` tool accepts path/query/body params only — it has **no HTTP header slot**, and
|
|
63
|
+
Stripe's `Idempotency-Key` is a header, so it cannot be passed through. Instead, stamp a **deterministic**
|
|
64
|
+
marker in the invoice `metadata` on every create: `metadata[soleur_invoice_key]` = a hash of the invoice's
|
|
65
|
+
**stable inputs** (customer id + currency + total amount + line-item descriptions/amounts + a coarse
|
|
66
|
+
date/period bucket), computed the SAME way on every attempt so a retry regenerates the **byte-identical**
|
|
67
|
+
value. **Never put raw customer PII in the marker — hash it.** Then **list-and-check that exact marker
|
|
68
|
+
before every create/finalize**: if a prior attempt's marker already exists, reconcile to that invoice
|
|
69
|
+
instead of minting a second one. A non-deterministic (per-attempt-random) marker would defeat this — a
|
|
70
|
+
lost-response create followed by a retry would generate a new marker, match nothing, and mint a duplicate.
|
|
71
|
+
|
|
72
|
+
**Two confirmation gates layer — by AUTHORITY (do not conflate them).** `stripe_api_write` may return a
|
|
73
|
+
Stripe-side `human_confirmation` request (an approval id + URL; the human approves at the URL; re-call
|
|
74
|
+
with `approval_token`, which the agent **cannot** self-satisfy). When it fires, **the Stripe URL approval
|
|
75
|
+
is the final authorization that actually executes the write.** State this plainly to the operator and
|
|
76
|
+
**re-display the skill's own computed total inside that instruction**, so the founder approves the Stripe
|
|
77
|
+
page against the same number the skill previewed. The skill's founder-legible preview + typed-`yes`
|
|
78
|
+
(S2/S4/S5) runs first and remains required; do **not** describe the native Stripe gate as subordinate —
|
|
79
|
+
surface both without conflating them, and make explicit which action actually sends.
|
|
80
|
+
|
|
81
|
+
## Re-entrant MCP error table
|
|
82
|
+
|
|
83
|
+
This table applies at **every** MCP call, not just S1. The skill holds **no checkpoint state**, so
|
|
84
|
+
there is never a false "resume" — on a mid-flow failure, re-run from the last **un-sent** step (the
|
|
85
|
+
deterministic `soleur_invoice_key` marker is what makes that re-run safe against duplicates).
|
|
86
|
+
|
|
87
|
+
| Condition | Meaning | Action |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `MCP tool not found` | Stripe MCP not registered this session | Emit: run `mcp__plugin_soleur_stripe__authenticate`; **fail-closed** (stop). |
|
|
90
|
+
| `Token expired` (can fire mid-flow) | OAuth token rotated | Re-authenticate, then **re-run from the last un-sent step** (re-read state from Stripe; reconcile the marker before any re-create). |
|
|
91
|
+
| `403 Forbidden` | Token lacks access to this account/object | Confirm the OAuth account is the intended one; stop. |
|
|
92
|
+
| `429 rate-limit` | Too many requests | Retry a read, or a write **only after** re-checking the `soleur_invoice_key` marker (reconcile-then-retry). **Never** a naive write retry. |
|
|
93
|
+
| Mode indeterminate | The `GetBalance` probe returned no usable `livemode` boolean | **STOP** — never assume test mode (S2 fail-closed). |
|
|
94
|
+
| `finalize-ok / send-failed` | Invoice finalized but `send` failed | Go to **S4.8 recovery**: surface the finalized id + `hosted_invoice_url`; offer resend-same-id or `void`. Never re-create. |
|
|
95
|
+
| `already-finalized` | Finalize called on a finalized invoice | Go to S4.8 recovery (treat as finalized; do not re-create). |
|
|
96
|
+
| Network error | Transient connectivity | Retry a read; for a write, reconcile the `soleur_invoice_key` marker first, else abort. |
|
|
97
|
+
| `requires_location_inputs` (tax) | Customer address missing | **STOP** at S4.4 — do not preview an incomplete total; route to a customer-address fix (S6). |
|
|
98
|
+
| Finalize rejected (tax/currency/entity) | Missing invoice fact | Route to **S6** (refuse-to-fabricate). "Customer has no email" routes to a customer-fix step. |
|
|
99
|
+
|
|
100
|
+
## Workflow
|
|
101
|
+
|
|
102
|
+
### S1 — Auth precondition
|
|
103
|
+
|
|
104
|
+
If the Stripe MCP is not authenticated, emit the instruction to run
|
|
105
|
+
`mcp__plugin_soleur_stripe__authenticate` and **fail-closed** (stop). Do not proceed to any read or
|
|
106
|
+
write. The error table above is re-entrant: a `Token expired` later in the flow returns here.
|
|
107
|
+
|
|
108
|
+
### S2 — Account + mode gate (runs BEFORE any customer read)
|
|
109
|
+
|
|
110
|
+
This gate runs **before S3**, so a live account is refused before any customer PII is surfaced. It is
|
|
111
|
+
a **hard precondition for S3, S4, and S5**; the ack is **session-scoped** (once per session).
|
|
112
|
+
|
|
113
|
+
1. Call `get_stripe_account_info` for the account id + display name (the account echo).
|
|
114
|
+
2. **Determine `livemode` deterministically from a ZERO-PII read**, not from customer data: call
|
|
115
|
+
`stripe_api_read` op-id `GetBalance`. The Balance object carries a `livemode` boolean and contains
|
|
116
|
+
**no customer PII**, so mode can be established before any `GetCustomers`/`GetInvoices` read. **Fail
|
|
117
|
+
closed:** if the probe returns no usable `livemode` boolean (error, empty, unexpected shape), **STOP**
|
|
118
|
+
— never assume test mode.
|
|
119
|
+
3. Echo the **account id** and a **founder-legible plain-language mode line** — NOT the raw `livemode`
|
|
120
|
+
field:
|
|
121
|
+
- TEST: *"TEST mode — nothing real is sent; no customer is emailed and no money moves."*
|
|
122
|
+
- LIVE: *"LIVE mode — real invoices to real customers."*
|
|
123
|
+
4. **If `livemode == true`: STOP.** Emit a plain message that live invoicing is **not enabled yet** and
|
|
124
|
+
point to [#6264](https://github.com/jikig-ai/soleur/issues/6264) (the legal lockstep). Offer **no**
|
|
125
|
+
proceed path — there is no `understood`/`--force`/`--yes` live-send branch in v1.
|
|
126
|
+
5. In **TEST** mode, proceed only after the operator types a single literal `yes`. **Any non-exact
|
|
127
|
+
token** (e.g. `y`, `Yes`, `yes please`) → re-echo the mode line **once**, then abort. No
|
|
128
|
+
`--force`/`--yes` flags.
|
|
129
|
+
|
|
130
|
+
### S3 — Read "who owes you" (test mode only)
|
|
131
|
+
|
|
132
|
+
List customers and open/overdue invoices (`stripe_api_read` → `GetCustomers`, `GetInvoices` with
|
|
133
|
+
`status=open`). Present a scannable table with the minimum the operator needs to act — customer name,
|
|
134
|
+
amount, due date, invoice id (per S7, do not dump full email/address here).
|
|
135
|
+
**Empty-state:** if no customers exist, say so plainly and route to S4's create-customer path rather
|
|
136
|
+
than dead-ending.
|
|
137
|
+
|
|
138
|
+
### S4 — Guarded create + send
|
|
139
|
+
|
|
140
|
+
Ordered to avoid the orphaned-invoice window. **S2 must have passed this session.**
|
|
141
|
+
|
|
142
|
+
1. **Resolve customer.** If none supplied or not found: offer a guarded create-customer step, or emit
|
|
143
|
+
"no customer resolved — create one in Stripe first." **Never finalize with no target.**
|
|
144
|
+
2. **Duplicate guard.** List the customer's existing open/draft invoices AND list-and-check the
|
|
145
|
+
deterministic `metadata[soleur_invoice_key]` marker. If a same-amount / recent match or an existing
|
|
146
|
+
marker match exists, surface it and require an explicit **"not a duplicate"** confirm (or reconcile
|
|
147
|
+
to the existing invoice) before continuing.
|
|
148
|
+
3. **Build draft** (`PostInvoices` + `PostInvoiceitems` for operator-supplied line items). Stamp
|
|
149
|
+
`metadata[soleur_invoice_key]` with the **deterministic** marker (hash of customer id + currency +
|
|
150
|
+
total + line-items + coarse date bucket — byte-identical across retries so a lost-response retry
|
|
151
|
+
reconciles instead of minting a duplicate). Do **not** put raw customer PII in metadata.
|
|
152
|
+
4. **Compute-then-preview (pre-finalize) — ALWAYS.** Re-read the DRAFT (`GetInvoicesInvoice`) to get
|
|
153
|
+
Stripe's authoritative totals, and present a founder-legible preview of the **real total** (line-item
|
|
154
|
+
sum + tax + currency) before finalizing. This applies to **both** the `automatic_tax` path (Stripe
|
|
155
|
+
computes tax) **and** the manual-tax path (operator-supplied rate) — the founder always sees the
|
|
156
|
+
actual total feeding the money-demand before the irreversible finalize. **If `automatic_tax` is
|
|
157
|
+
enabled and tax status is `requires_location_inputs` (missing address): STOP** and route to a
|
|
158
|
+
customer-address fix (S6) — do not preview an incomplete total.
|
|
159
|
+
5. **Typed-`yes`** on that preview. Decline → **abort** (nothing is finalized).
|
|
160
|
+
6. **`finalize`** (`PostInvoicesInvoiceFinalize`) — Stripe mints the invoice `number` (never
|
|
161
|
+
agent-minted). Reconcile the `soleur_invoice_key` marker first if retrying.
|
|
162
|
+
7. **`send`** (`PostInvoicesInvoiceSend`). The **guaranteed deliverable is the `hosted_invoice_url`**
|
|
163
|
+
minted at finalize — always surface it to the operator. In **test mode Stripe does not email the
|
|
164
|
+
customer**, so `send` is **best-effort**; the hosted link is the honest v1 output.
|
|
165
|
+
8. **Recovery.** Finalize mints `hosted_invoice_url` immediately, so a failed `send` is **not** an
|
|
166
|
+
orphan. Surface the finalized invoice id + hosted link and offer **resend the same id** or
|
|
167
|
+
**`void`** (`PostInvoicesInvoiceVoid`) to retire it. **Never re-run create as recovery** — it mints
|
|
168
|
+
a duplicate.
|
|
169
|
+
|
|
170
|
+
### S5 — Chase an overdue invoice
|
|
171
|
+
|
|
172
|
+
For an existing open/overdue invoice, re-trigger `send` (`PostInvoicesInvoiceSend`).
|
|
173
|
+
**S5 MUST run the S2 mode gate + a per-send preview + literal-`yes`** — including when the operator
|
|
174
|
+
opens directly with "chase my overdue." It **inherits the S2 livemode hard-stop**: no dunning against
|
|
175
|
+
a live account in v1.
|
|
176
|
+
|
|
177
|
+
### S6 — Refuse to fabricate
|
|
178
|
+
|
|
179
|
+
If tax rate, currency, or legal entity is unspecified, **STOP** and require an operator fact or
|
|
180
|
+
`automatic_tax` (Stripe Tax) — never guess. **Never mint an invoice number** (finalize does that).
|
|
181
|
+
A finalize rejected for a tax/currency/entity cause routes here; "customer has no email" routes to a
|
|
182
|
+
customer-fix step.
|
|
183
|
+
|
|
184
|
+
### S7 — PII discipline
|
|
185
|
+
|
|
186
|
+
Never write plaintext customer PII (name, address, email, amount tied to an identity) to any committed
|
|
187
|
+
repo artifact or application log. **Note:** the Claude Code conversation transcript persists to local
|
|
188
|
+
disk (`~/.claude/projects/…`), so anything surfaced in-session **is** written to that local file — the
|
|
189
|
+
plan's earlier "not persisted" framing is inaccurate. Therefore surface only the **minimum** the
|
|
190
|
+
operator needs to act: customer name + amount + due date + invoice id for the "who owes you" table;
|
|
191
|
+
email/address only at the moment they are needed to resolve or create a customer, never a full PII dump.
|
|
192
|
+
This mirrors the `recipient_hash` HMAC discipline. The `allowed-tools`/`disallowed-tools` scope prevents
|
|
193
|
+
the skill from itself authoring a committed artifact, but does not change transcript persistence.
|
|
194
|
+
|
|
195
|
+
## Sharp edges
|
|
196
|
+
|
|
197
|
+
- **The credential boundary is defense-in-depth, not a sandbox.** Do NOT re-describe `allowed-tools` as
|
|
198
|
+
isolation, and never introduce `Bash`/secret-`Read`/Doppler into this skill's frontmatter or a blanket
|
|
199
|
+
`Bash`/`Read` allow into `.claude/settings.json` — either re-opens the exfiltration residual (ADR-107).
|
|
200
|
+
- **Do not hardcode Stripe MCP tool names from memory** beyond the binding table — the hosted MCP is
|
|
201
|
+
runtime-discovered; confirm op-ids with `stripe_api_details` / `stripe_api_search` at run time.
|
|
202
|
+
- `stripe_api_write` is a **generic dispatcher for the founder's entire Stripe write surface** (refunds,
|
|
203
|
+
payouts, account updates — not just invoicing). The binding table is a convention, not a limit; bounded
|
|
204
|
+
in v1 only by the S2 test-mode hard-STOP + the typed-`yes` gate (ADR-107 §Consequences).
|
|
205
|
+
- Autonomous/cron sending is **out of v1 scope** — interactive browser OAuth cannot run headless. The
|
|
206
|
+
multi-tenant path (Stripe Connect) and a `context: fork` by-construction tool boundary are deferred to #6264.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kb-glossary
|
|
3
|
+
description: "This skill should be used when a session settles, sharpens, or disputes the meaning of an internal term: write it into knowledge-base/project/glossary.md as a pointer to its definer."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- grok-harness-invoke:start -->
|
|
7
|
+
**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.
|
|
8
|
+
<!-- grok-harness-invoke:end -->
|
|
9
|
+
|
|
10
|
+
<!-- Inspired by mattpocock/skills/skills/engineering/domain-modeling/SKILL.md (MIT, Copyright (c) 2026 Matt Pocock). -->
|
|
11
|
+
|
|
12
|
+
# KB Glossary — the write side of the vocabulary
|
|
13
|
+
|
|
14
|
+
Reading `knowledge-base/project/glossary.md` is a one-line habit that several skills already carry.
|
|
15
|
+
This skill is the other half: the discipline that **changes** the glossary at the moment a session
|
|
16
|
+
works out what a word means, so the next session inherits the answer instead of re-deriving it.
|
|
17
|
+
|
|
18
|
+
The format contract is [glossary-format.md](./references/glossary-format.md) — entry shape, the four
|
|
19
|
+
admission tests, the pointer-not-restatement rule, and the miss path. Read it before writing an
|
|
20
|
+
entry; do not re-derive the rules from the entries already in the file.
|
|
21
|
+
|
|
22
|
+
## When to self-invoke
|
|
23
|
+
|
|
24
|
+
Invoke this skill in the same turn, without being asked by name, when any of these happens:
|
|
25
|
+
|
|
26
|
+
- A term the session is using **conflicts with an existing entry**. Say so immediately, quote both
|
|
27
|
+
readings, and ask which one holds.
|
|
28
|
+
- A term is **fuzzy or overloaded** and the work is about to commit it to a file. Propose one precise
|
|
29
|
+
term and name what the others would have meant.
|
|
30
|
+
- The code and the conversation **disagree** about a word. Surface the contradiction rather than
|
|
31
|
+
picking the reading that makes the sentence work.
|
|
32
|
+
- A session **settles** a word — in a brainstorm, a plan review, a compound pass, an ADR argument.
|
|
33
|
+
That is the moment the entry gets written.
|
|
34
|
+
- An artifact had to **hedge** on an ambiguous term because the glossary had no entry (the miss path).
|
|
35
|
+
The hedge stays in the artifact; the candidate entry comes here.
|
|
36
|
+
|
|
37
|
+
Do **not** invoke it to look a word up, to restate a definition that already exists elsewhere, or to
|
|
38
|
+
record a word that only one skill uses. Reading is the consumers' pointer, not this skill.
|
|
39
|
+
|
|
40
|
+
## The write discipline
|
|
41
|
+
|
|
42
|
+
1. **Write inline, not later.** Update the glossary in the turn the word is settled. A batched entry
|
|
43
|
+
is an entry that never lands, and the reasoning that justified it is gone by then.
|
|
44
|
+
2. **Point, never paraphrase.** Find the file that owns the meaning and give its path with an anchor.
|
|
45
|
+
If nothing owns it, the fix is a definer in the file that owns the behaviour — then an entry
|
|
46
|
+
pointing at it.
|
|
47
|
+
3. **Apply all four admission tests** from the format contract. Three of four is a candidate; record
|
|
48
|
+
the hedge in the artifact and leave the glossary alone.
|
|
49
|
+
4. **Disambiguate rather than choose** when a word genuinely carries several senses here. One body per
|
|
50
|
+
sense, each with its own path. A single-sense entry for an overloaded word reads as settled and
|
|
51
|
+
sends the next reader to the wrong file.
|
|
52
|
+
5. **Steer with `_Avoid_`.** When two words compete for one concept, pick one and list the loser. A
|
|
53
|
+
name that shortens in speech back into the banned word has not solved anything.
|
|
54
|
+
6. **Move `last_reviewed`** whenever the review happens, even when it changed nothing — otherwise an
|
|
55
|
+
old date cannot be told apart from an unread file.
|
|
56
|
+
|
|
57
|
+
## Scope — it is a glossary and nothing else
|
|
58
|
+
|
|
59
|
+
The artifact holds terms and the paths that settle them. It is not a spec, not a design note, not an
|
|
60
|
+
implementation record, and not scratch space for anything that fitted nowhere else. Every one of
|
|
61
|
+
those grows the file an agent loads at decision time and none of them makes a word mean more.
|
|
62
|
+
|
|
63
|
+
Two neighbours it is explicitly not, and the glossary itself says so by path: the public marketing
|
|
64
|
+
glossary page, and the founder-facing register in `knowledge-base/marketing/brand-guide.md` §Voice. Never add an internal machinery noun to either.
|
|
65
|
+
|
|
66
|
+
## Siblings
|
|
67
|
+
|
|
68
|
+
- A **rejected concept** is not a term. Its record is the no-list, and the write contract for that is
|
|
69
|
+
[rejected-request-register.md](./references/rejected-request-register.md).
|
|
70
|
+
- `soleur:operator-rephrase` reads the same entries in the opposite direction — as the stop-list of
|
|
71
|
+
internal words that must be translated before the founder sees them.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<!-- Inspired by mattpocock/skills/skills/engineering/domain-modeling/CONTEXT-FORMAT.md (MIT, Copyright (c) 2026 Matt Pocock). -->
|
|
2
|
+
|
|
3
|
+
# Glossary format
|
|
4
|
+
|
|
5
|
+
The contract for `knowledge-base/project/glossary.md`: what an entry looks like, what earns one, and
|
|
6
|
+
what a reader does when the word they need is not there. The artifact is written to this file, not
|
|
7
|
+
the other way round.
|
|
8
|
+
|
|
9
|
+
## Entry shape
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
**Term**:
|
|
13
|
+
One or two lines saying which file settles this word, and the path to it.
|
|
14
|
+
_Avoid_: word, word
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Three parts, in this order:
|
|
18
|
+
|
|
19
|
+
- **The term**, in bold, in the singular, spelled the way the repository already spells it.
|
|
20
|
+
- **The body**, which names the file that settles the meaning and gives its repo-relative path. An
|
|
21
|
+
anchor (`path/to/file.md` §Heading) beats a bare path, because the reader lands on the sentence
|
|
22
|
+
rather than on a 1,500-line document.
|
|
23
|
+
- **`_Avoid_`**, listing the words that are not to be used for this concept. Omit the line when
|
|
24
|
+
there is nothing to steer away from; never leave it empty.
|
|
25
|
+
|
|
26
|
+
When a word carries more than one legitimate meaning here, the entry is one body per sense, each
|
|
27
|
+
with its own definer path, each sense labelled. A single-sense entry for a genuinely overloaded word
|
|
28
|
+
is worse than no entry: it looks settled and points a reader at the wrong file.
|
|
29
|
+
|
|
30
|
+
## An entry is a pointer, never a restatement
|
|
31
|
+
|
|
32
|
+
If any file in the repository already contains the sentence that settles a term, the entry's job is
|
|
33
|
+
to hand over the path and stop. A second wording of the same definition is a second thing to keep
|
|
34
|
+
true, and the copy that drifts is always the one nobody reads on the way to the code.
|
|
35
|
+
|
|
36
|
+
So: no entry paraphrases its own definer, no entry carries implementation detail, and a term with no
|
|
37
|
+
definer anywhere does not get one invented here — it gets a definer written in the file that owns
|
|
38
|
+
the behaviour, and then an entry pointing at it.
|
|
39
|
+
|
|
40
|
+
## What earns an entry
|
|
41
|
+
|
|
42
|
+
All four must hold. Three of four is a candidate, not an entry.
|
|
43
|
+
|
|
44
|
+
1. **Load-bearing breadth** — the word appears in at least three skill or agent definitions that an
|
|
45
|
+
agent reads while deciding what to do. Below that, the one file it lives in defines it well
|
|
46
|
+
enough.
|
|
47
|
+
2. **No existing definer, or a definer worth pointing at** — if an "an X is …" sentence exists, the
|
|
48
|
+
entry is that path. If nothing anywhere settles the word, fix that first.
|
|
49
|
+
3. **A divergence you can name** — two honest readings send an agent down different paths, and the
|
|
50
|
+
difference ends up in a file that gets committed. "It's a bit ambiguous" does not qualify: name
|
|
51
|
+
the wrong commit the wrong reading produces.
|
|
52
|
+
4. **Not founder-facing** — if the founder should ever read the word, it belongs in the brand guide's
|
|
53
|
+
`## Voice` section instead, which is where the founder-facing register and the audience voice
|
|
54
|
+
profiles live. (There is no section literally called "lexicon" — an earlier revision of this line
|
|
55
|
+
pointed at one, and a pointer whose target does not exist is precisely the defect this file exists
|
|
56
|
+
to prevent.) This glossary is machinery vocabulary, written for the agent that loads it at
|
|
57
|
+
decision time.
|
|
58
|
+
|
|
59
|
+
A term also has to be shared traffic: it belongs here only when two or more skills or agents hand it
|
|
60
|
+
to each other. A word one skill uses privately is that skill's business.
|
|
61
|
+
|
|
62
|
+
## The consumer pointer (defined once, here)
|
|
63
|
+
|
|
64
|
+
Five consumers carry a one-line read-pointer at `knowledge-base/project/glossary.md`: `brainstorm`,
|
|
65
|
+
`plan`, `spec-templates`, `architecture` and `operator-digest`. The instruction those lines cite is
|
|
66
|
+
this one, and it is stated only here so that five copies cannot drift apart:
|
|
67
|
+
|
|
68
|
+
> Before you commit a word that names a concept — in a brainstorm, a plan, a spec, an ADR or a
|
|
69
|
+
> digest — check it against `knowledge-base/project/glossary.md`. If the word has an entry, follow
|
|
70
|
+
> its pointer and use the sense that file settles; if the entry lists the word you were about to
|
|
71
|
+
> write under `_Avoid_`, use the entry's term instead. If the word is materially ambiguous and has
|
|
72
|
+
> no entry, take the miss path below.
|
|
73
|
+
|
|
74
|
+
`knowledge-base/project/constitution.md` carries the same pointer once, so a skill that reads the
|
|
75
|
+
constitution inherits it without a per-file edit.
|
|
76
|
+
|
|
77
|
+
**The founder-facing direction.** `operator-digest` and `operator-rephrase` read the same entries as
|
|
78
|
+
a **stop-list**: an entry's term is a word the founder must not be shown, and the plain clause that
|
|
79
|
+
opens the entry — or each of its senses — is what to say instead. The path in the body is for the
|
|
80
|
+
agent and never reaches the founder. This does not make the glossary a source of approved founder
|
|
81
|
+
words; plain words are chosen, not looked up.
|
|
82
|
+
|
|
83
|
+
## The miss path
|
|
84
|
+
|
|
85
|
+
A term that is materially ambiguous and absent from the glossary is a **candidate entry**, and the
|
|
86
|
+
absence is never a reason to guess quietly.
|
|
87
|
+
|
|
88
|
+
Do all three:
|
|
89
|
+
|
|
90
|
+
1. **Pick a reading and say which one.** Write the artifact in one sense, and state in the artifact
|
|
91
|
+
which sense you took. A committed document that silently chose is the failure this whole
|
|
92
|
+
mechanism exists to prevent.
|
|
93
|
+
2. **Name the ambiguity where the work lands**, in the committed artifact itself — not in the
|
|
94
|
+
session, which nobody re-reads. One sentence: the word, the two readings, and which one this
|
|
95
|
+
document uses.
|
|
96
|
+
3. **Propose the entry** if the four tests above pass, by invoking `soleur:kb-glossary` in the same
|
|
97
|
+
session. If they do not all pass, the hedge in the artifact is the whole fix; do not grow the
|
|
98
|
+
glossary to record a one-off.
|
|
99
|
+
|
|
100
|
+
A missing entry is cheap. A confident entry for a word nobody had settled is expensive, because
|
|
101
|
+
every later reader treats it as decided.
|
|
102
|
+
|
|
103
|
+
## Housekeeping
|
|
104
|
+
|
|
105
|
+
- The file's frontmatter carries `review_cadence` and `last_reviewed`. A review that changes nothing
|
|
106
|
+
still moves `last_reviewed`, so an old date means unreviewed rather than unchanged.
|
|
107
|
+
- Entries are written inline as soon as a session settles a word. Batching them to the end of the
|
|
108
|
+
work is how they get dropped.
|
|
109
|
+
- The glossary is a glossary. It is not a spec, not a design note, not a place to park anything that
|
|
110
|
+
did not fit elsewhere. A rejected *concept* is not a term and does not belong in it; that record
|
|
111
|
+
lives in the no-list, whose write contract is [rejected-request-register.md](./rejected-request-register.md).
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: The no-list — write discipline
|
|
3
|
+
applies_to: knowledge-base/project/rejected/
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- Inspired by mattpocock/skills/skills/engineering/triage/OUT-OF-SCOPE.md (MIT, Copyright (c) 2026 Matt Pocock). -->
|
|
7
|
+
|
|
8
|
+
# The no-list — write discipline
|
|
9
|
+
|
|
10
|
+
`knowledge-base/project/rejected/` holds the **rejected-concepts record**, called **the no-list** in
|
|
11
|
+
conversation. It exists so that a refusal survives the issue it was written on: the issue closes, the
|
|
12
|
+
thread scrolls away, and the reasoning would otherwise have to be rebuilt from memory the next time
|
|
13
|
+
the same ask arrives.
|
|
14
|
+
|
|
15
|
+
The founder-facing convention — the full field table, the naming rule, the write procedure — is
|
|
16
|
+
`knowledge-base/project/rejected/README.md`. This file is the discipline an agent applies when
|
|
17
|
+
writing to it. Read the README before the first write; read this before every write.
|
|
18
|
+
|
|
19
|
+
## One file per concept
|
|
20
|
+
|
|
21
|
+
The unit is a **concept**, not an issue and not a request. Three people asking for the same thing
|
|
22
|
+
produce one file with three entries in `prior_requests`, not three files. Two people asking for
|
|
23
|
+
adjacent things produce two files only if the refusals are genuinely different — and if they are,
|
|
24
|
+
each `scope` has to say where the line between them falls, because a later lookup will land on
|
|
25
|
+
whichever it matches first.
|
|
26
|
+
|
|
27
|
+
The corollary is the one that gets forgotten: a **mechanism** that lost a design comparison is not a
|
|
28
|
+
concept. "We chose SQS over a custom queue" is an architecture decision and belongs in the ADR that
|
|
29
|
+
made it. Filing it here converts "we picked the other tool" into "we don't do queues", which is a
|
|
30
|
+
far wider refusal than anybody agreed to.
|
|
31
|
+
|
|
32
|
+
## Match on the concept, never on the words
|
|
33
|
+
|
|
34
|
+
Requests arrive in the founder's vocabulary, and the vocabulary moves. *Night theme*, *dark theme*,
|
|
35
|
+
*low-light mode* and *stop burning my eyes* are one concept. The `aliases` field is what carries
|
|
36
|
+
that: it is required, and an entry whose alias list holds only a restatement of its own title is a
|
|
37
|
+
matching failure waiting to happen.
|
|
38
|
+
|
|
39
|
+
Write aliases in the words people actually use, including the imprecise ones. An alias is not a
|
|
40
|
+
synonym dictionary; it is a record of how the ask has already been phrased.
|
|
41
|
+
|
|
42
|
+
## The reason has to be durable
|
|
43
|
+
|
|
44
|
+
Before writing, test the reason against time. A refusal that turns on a circumstance is not a
|
|
45
|
+
refusal:
|
|
46
|
+
|
|
47
|
+
- "The architecture puts this outside the product's boundary" — durable. Write it.
|
|
48
|
+
- "Counsel identified liability we cannot carry in this shape" — durable. Write it.
|
|
49
|
+
- "This costs more than the segment it serves is worth" — durable if the arithmetic is in the entry.
|
|
50
|
+
- "Nobody has time this quarter" — **not durable.** That is a deferral, and the roadmap owns it.
|
|
51
|
+
- "The current library cannot do it" — **not durable** unless the library choice is itself the
|
|
52
|
+
boundary. Otherwise it expires the day the library does.
|
|
53
|
+
|
|
54
|
+
Every durable refusal has an `instead`. If nothing goes in that field, stop: either the concept is a
|
|
55
|
+
rare category-level never — which is worth saying out loud, in `why` — or what is really being
|
|
56
|
+
refused is a mechanism, and this is the wrong record for it.
|
|
57
|
+
|
|
58
|
+
The `why`/`public_note` split is about AUDIENCE, not secrecy — and the distinction matters because
|
|
59
|
+
this repository is public, so `why` is world-readable the moment it is committed and its history is
|
|
60
|
+
permanent. Nothing here "stays internal". Write `why` for the team, at whatever length the reasoning
|
|
61
|
+
needs, and write it as something you would be content to have quoted. Write `public_note` as one
|
|
62
|
+
sentence that could be pasted into a reply without editing. An agent quotes `public_note` and never
|
|
63
|
+
`why` — not because `why` is hidden, but because it is addressed to a reader who already has the
|
|
64
|
+
context, and pasting it at someone who does not is how a refusal reads as contempt.
|
|
65
|
+
|
|
66
|
+
## Never write a built feature into the no-list
|
|
67
|
+
|
|
68
|
+
This is the prohibition that protects every future lookup. When a request is declined **because the
|
|
69
|
+
capability already exists**, nothing goes in this directory. The record of that decision is the
|
|
70
|
+
closing comment naming where the implementation lives — which is exactly what the redundancy
|
|
71
|
+
pre-check already produced, so there is nothing new to write.
|
|
72
|
+
|
|
73
|
+
The failure is not cosmetic. An entry claiming a shipped capability is absent seeds the duplicate
|
|
74
|
+
check with a refusal that never happened, and every later match against that entry inherits the
|
|
75
|
+
error and compounds it. The guard cannot catch it either:
|
|
76
|
+
`scripts/lint-rejected-register.sh` proves an entry is internally consistent, not that it is true.
|
|
77
|
+
`redundancy_check: not-implemented` is the only compliant value precisely so that the claim is
|
|
78
|
+
explicit and a reviewer can re-run the `searched` lines against it.
|
|
79
|
+
|
|
80
|
+
`knowledge-base/project/rejected/2026-09-20-server-side-browser-automation.md` is the worked example,
|
|
81
|
+
and it is a near miss on purpose: browser automation ships, the server-side variant was refused, and
|
|
82
|
+
the entry's `scope` names the implemented paths so that a lookup for the broad concept reads the yes
|
|
83
|
+
as readily as the no.
|
|
84
|
+
|
|
85
|
+
## The redundancy pre-check is specified elsewhere
|
|
86
|
+
|
|
87
|
+
How to search for an existing implementation is **not restated here.** It is
|
|
88
|
+
`plugins/soleur/skills/brainstorm/SKILL.md` `#### 1.1 Research (Context Gathering)`, which already
|
|
89
|
+
mandates the functional-noun re-sweep and the report-where-you-looked discipline in sharper terms
|
|
90
|
+
than a summary would. A second copy drifts from the first, and the drifted copy is the one somebody
|
|
91
|
+
follows.
|
|
92
|
+
|
|
93
|
+
## An entry advises; it never acts
|
|
94
|
+
|
|
95
|
+
A match is a finding to hand a human, with the entry named and the doubt stated. It is never grounds
|
|
96
|
+
on its own to close, label or dispose of anything, and `deferred-scope-out` must never be applied
|
|
97
|
+
because a lookup matched. The README carries the two automated hops that make this the strictest
|
|
98
|
+
rule in the record.
|
|
99
|
+
|
|
100
|
+
Where a match is uncertain, **fail open**: surface it, say why it is uncertain, and let the human
|
|
101
|
+
decide. A near-match reported is cheap. A near-match acted on is a closed door nobody chose.
|
|
102
|
+
|
|
103
|
+
## Order of gates
|
|
104
|
+
|
|
105
|
+
The machine gate runs before the human gate, always:
|
|
106
|
+
|
|
107
|
+
1. Both pre-checks — is it built, has it been refused before.
|
|
108
|
+
2. Draft the file.
|
|
109
|
+
3. `bash scripts/lint-rejected-register.sh <path>`.
|
|
110
|
+
4. Confirmation from the founder, given by **typing the concept** rather than `y`. A single keystroke
|
|
111
|
+
is a reflex; spelling out the concept is a decision.
|
|
112
|
+
5. Write.
|
|
113
|
+
|
|
114
|
+
Nothing about a person goes in the file at any step. A role where a role is needed, never a name:
|
|
115
|
+
this repository is public, and git history does not forget.
|