@soleur/opencode 0.0.0-stage → 3.354.2

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.
Files changed (832) hide show
  1. package/.claude-plugin/agents.manifest.json +476 -0
  2. package/.claude-plugin/plugin.json +42 -0
  3. package/README.md +44 -2
  4. package/agents/community/.gitkeep +0 -0
  5. package/agents/engineering/cto.md +87 -0
  6. package/agents/engineering/design/ddd-architect.md +95 -0
  7. package/agents/engineering/discovery/agent-finder.md +214 -0
  8. package/agents/engineering/discovery/functional-discovery.md +182 -0
  9. package/agents/engineering/infra/infra-security.md +151 -0
  10. package/agents/engineering/infra/platform-strategist.md +109 -0
  11. package/agents/engineering/infra/terraform-architect.md +171 -0
  12. package/agents/engineering/prompt-engineer.md +37 -0
  13. package/agents/engineering/research/best-practices-researcher.md +115 -0
  14. package/agents/engineering/research/framework-docs-researcher.md +93 -0
  15. package/agents/engineering/research/git-history-analyzer.md +53 -0
  16. package/agents/engineering/research/learnings-researcher.md +285 -0
  17. package/agents/engineering/research/repo-research-analyst.md +118 -0
  18. package/agents/engineering/review/agent-native-reviewer.md +279 -0
  19. package/agents/engineering/review/architecture-strategist.md +61 -0
  20. package/agents/engineering/review/code-quality-analyst.md +92 -0
  21. package/agents/engineering/review/code-simplicity-reviewer.md +109 -0
  22. package/agents/engineering/review/data-integrity-guardian.md +82 -0
  23. package/agents/engineering/review/data-migration-expert.md +98 -0
  24. package/agents/engineering/review/deployment-verification-agent.md +183 -0
  25. package/agents/engineering/review/dhh-rails-reviewer.md +46 -0
  26. package/agents/engineering/review/kieran-rails-reviewer.md +87 -0
  27. package/agents/engineering/review/legacy-code-expert.md +55 -0
  28. package/agents/engineering/review/observability-coverage-reviewer.md +147 -0
  29. package/agents/engineering/review/pattern-recognition-specialist.md +59 -0
  30. package/agents/engineering/review/performance-oracle.md +130 -0
  31. package/agents/engineering/review/security-sentinel.md +167 -0
  32. package/agents/engineering/review/semgrep-sast.md +36 -0
  33. package/agents/engineering/review/test-design-reviewer.md +150 -0
  34. package/agents/engineering/review/user-impact-reviewer.md +70 -0
  35. package/agents/engineering/workflow/pr-comment-resolver.md +69 -0
  36. package/agents/finance/budget-analyst.md +29 -0
  37. package/agents/finance/cfo.md +44 -0
  38. package/agents/finance/financial-reporter.md +30 -0
  39. package/agents/finance/revenue-analyst.md +30 -0
  40. package/agents/legal/clo.md +115 -0
  41. package/agents/legal/legal-compliance-auditor.md +110 -0
  42. package/agents/legal/legal-document-generator.md +134 -0
  43. package/agents/marketing/analytics-analyst.md +25 -0
  44. package/agents/marketing/brand-architect.md +181 -0
  45. package/agents/marketing/cmo.md +76 -0
  46. package/agents/marketing/conversion-optimizer.md +19 -0
  47. package/agents/marketing/copywriter.md +20 -0
  48. package/agents/marketing/fact-checker.md +70 -0
  49. package/agents/marketing/growth-strategist.md +145 -0
  50. package/agents/marketing/paid-media-strategist.md +28 -0
  51. package/agents/marketing/pricing-strategist.md +17 -0
  52. package/agents/marketing/programmatic-seo-specialist.md +25 -0
  53. package/agents/marketing/retention-strategist.md +23 -0
  54. package/agents/marketing/seo-aeo-analyst.md +164 -0
  55. package/agents/operations/coo.md +50 -0
  56. package/agents/operations/ops-advisor.md +78 -0
  57. package/agents/operations/ops-provisioner.md +101 -0
  58. package/agents/operations/ops-research.md +52 -0
  59. package/agents/operations/service-automator.md +278 -0
  60. package/agents/product/business-validator.md +206 -0
  61. package/agents/product/competitive-intelligence.md +89 -0
  62. package/agents/product/cpo.md +63 -0
  63. package/agents/product/design/ux-design-lead.md +209 -0
  64. package/agents/product/spec-flow-analyzer.md +122 -0
  65. package/agents/sales/cro.md +44 -0
  66. package/agents/sales/deal-architect.md +29 -0
  67. package/agents/sales/outbound-strategist.md +29 -0
  68. package/agents/sales/pipeline-analyst.md +29 -0
  69. package/agents/support/cco.md +48 -0
  70. package/agents/support/community-manager.md +570 -0
  71. package/agents/support/ticket-triage.md +70 -0
  72. package/bin/soleur-opencode.js +29 -0
  73. package/commands/go.md +660 -0
  74. package/commands/help.md +273 -0
  75. package/commands/sync.md +977 -0
  76. package/commands/version.md +103 -0
  77. package/hooks/antigravity-hooks.json +84 -0
  78. package/hooks/antigravity-session-start.sh +15 -0
  79. package/hooks/bare-root-cwd-guard.sh +131 -0
  80. package/hooks/browser-snapshot-credential-guard.sh +200 -0
  81. package/hooks/codex-session-start.sh +9 -0
  82. package/hooks/compaction-state.sh +525 -0
  83. package/hooks/destructive-command-guard.sh +1387 -0
  84. package/hooks/devin-session-start.sh +90 -0
  85. package/hooks/ext-filter-detect.sh +171 -0
  86. package/hooks/hooks.json +133 -0
  87. package/hooks/lib/hook-tool-kind.sh +24 -0
  88. package/hooks/lib/log-rotation.sh +176 -0
  89. package/hooks/lib/shell-argv.pl +576 -0
  90. package/hooks/memory-backstop.sh +1114 -0
  91. package/hooks/operator-stage-approval.sh +391 -0
  92. package/hooks/stop-hook.sh +367 -0
  93. package/hooks/unkept-promise-hook.sh +383 -0
  94. package/hooks/version-banner.sh +127 -0
  95. package/hooks/welcome-hook.sh +50 -0
  96. package/install.js +29 -0
  97. package/lib/agent-registry.ts +154 -0
  98. package/lib/c4-canonical-cli.mjs +34 -0
  99. package/lib/c4-canonical.mjs +46 -0
  100. package/lib/c4-from-components.ts +554 -0
  101. package/lib/go-routing.ts +81 -0
  102. package/lib/grok-inspect-contract.ts +311 -0
  103. package/lib/harness-model-map.ts +101 -0
  104. package/lib/harness-parity.ts +726 -0
  105. package/lib/harness-tool-map.ts +180 -0
  106. package/lib/harness.ts +716 -0
  107. package/lib/heartbeat-live-reconcile.ts +1153 -0
  108. package/lib/heartbeat-manifest.ts +361 -0
  109. package/lib/kb-coverage.ts +252 -0
  110. package/lib/pr-merge-poll.ts +103 -0
  111. package/lib/workflow-fidelity.ts +388 -0
  112. package/opencode/INSTRUCTIONS.md +171 -0
  113. package/opencode/agents/engineering/cto.md +10 -0
  114. package/opencode/agents/engineering/design/ddd-architect.md +10 -0
  115. package/opencode/agents/engineering/discovery/agent-finder.md +10 -0
  116. package/opencode/agents/engineering/discovery/functional-discovery.md +10 -0
  117. package/opencode/agents/engineering/infra/infra-security.md +10 -0
  118. package/opencode/agents/engineering/infra/platform-strategist.md +10 -0
  119. package/opencode/agents/engineering/infra/terraform-architect.md +10 -0
  120. package/opencode/agents/engineering/prompt-engineer.md +10 -0
  121. package/opencode/agents/engineering/research/best-practices-researcher.md +10 -0
  122. package/opencode/agents/engineering/research/framework-docs-researcher.md +10 -0
  123. package/opencode/agents/engineering/research/git-history-analyzer.md +10 -0
  124. package/opencode/agents/engineering/research/learnings-researcher.md +10 -0
  125. package/opencode/agents/engineering/research/repo-research-analyst.md +10 -0
  126. package/opencode/agents/engineering/review/agent-native-reviewer.md +10 -0
  127. package/opencode/agents/engineering/review/architecture-strategist.md +10 -0
  128. package/opencode/agents/engineering/review/code-quality-analyst.md +10 -0
  129. package/opencode/agents/engineering/review/code-simplicity-reviewer.md +10 -0
  130. package/opencode/agents/engineering/review/data-integrity-guardian.md +10 -0
  131. package/opencode/agents/engineering/review/data-migration-expert.md +10 -0
  132. package/opencode/agents/engineering/review/deployment-verification-agent.md +10 -0
  133. package/opencode/agents/engineering/review/dhh-rails-reviewer.md +10 -0
  134. package/opencode/agents/engineering/review/kieran-rails-reviewer.md +10 -0
  135. package/opencode/agents/engineering/review/legacy-code-expert.md +10 -0
  136. package/opencode/agents/engineering/review/observability-coverage-reviewer.md +10 -0
  137. package/opencode/agents/engineering/review/pattern-recognition-specialist.md +10 -0
  138. package/opencode/agents/engineering/review/performance-oracle.md +10 -0
  139. package/opencode/agents/engineering/review/security-sentinel.md +10 -0
  140. package/opencode/agents/engineering/review/semgrep-sast.md +10 -0
  141. package/opencode/agents/engineering/review/test-design-reviewer.md +10 -0
  142. package/opencode/agents/engineering/review/user-impact-reviewer.md +10 -0
  143. package/opencode/agents/engineering/workflow/pr-comment-resolver.md +10 -0
  144. package/opencode/agents/finance/budget-analyst.md +10 -0
  145. package/opencode/agents/finance/cfo.md +10 -0
  146. package/opencode/agents/finance/financial-reporter.md +10 -0
  147. package/opencode/agents/finance/revenue-analyst.md +10 -0
  148. package/opencode/agents/legal/clo.md +10 -0
  149. package/opencode/agents/legal/legal-compliance-auditor.md +10 -0
  150. package/opencode/agents/legal/legal-document-generator.md +10 -0
  151. package/opencode/agents/marketing/analytics-analyst.md +10 -0
  152. package/opencode/agents/marketing/brand-architect.md +10 -0
  153. package/opencode/agents/marketing/cmo.md +10 -0
  154. package/opencode/agents/marketing/conversion-optimizer.md +10 -0
  155. package/opencode/agents/marketing/copywriter.md +10 -0
  156. package/opencode/agents/marketing/fact-checker.md +10 -0
  157. package/opencode/agents/marketing/growth-strategist.md +10 -0
  158. package/opencode/agents/marketing/paid-media-strategist.md +10 -0
  159. package/opencode/agents/marketing/pricing-strategist.md +10 -0
  160. package/opencode/agents/marketing/programmatic-seo-specialist.md +10 -0
  161. package/opencode/agents/marketing/retention-strategist.md +10 -0
  162. package/opencode/agents/marketing/seo-aeo-analyst.md +10 -0
  163. package/opencode/agents/operations/coo.md +10 -0
  164. package/opencode/agents/operations/ops-advisor.md +10 -0
  165. package/opencode/agents/operations/ops-provisioner.md +10 -0
  166. package/opencode/agents/operations/ops-research.md +10 -0
  167. package/opencode/agents/operations/service-automator.md +10 -0
  168. package/opencode/agents/product/business-validator.md +10 -0
  169. package/opencode/agents/product/competitive-intelligence.md +10 -0
  170. package/opencode/agents/product/cpo.md +10 -0
  171. package/opencode/agents/product/design/ux-design-lead.md +10 -0
  172. package/opencode/agents/product/spec-flow-analyzer.md +10 -0
  173. package/opencode/agents/sales/cro.md +10 -0
  174. package/opencode/agents/sales/deal-architect.md +10 -0
  175. package/opencode/agents/sales/outbound-strategist.md +10 -0
  176. package/opencode/agents/sales/pipeline-analyst.md +10 -0
  177. package/opencode/agents/support/cco.md +10 -0
  178. package/opencode/agents/support/community-manager.md +10 -0
  179. package/opencode/agents/support/ticket-triage.md +10 -0
  180. package/opencode/commands/go.md +10 -0
  181. package/opencode/commands/help.md +10 -0
  182. package/opencode/commands/sync.md +10 -0
  183. package/opencode/commands/version.md +11 -0
  184. package/opencode/opencode.json +8 -0
  185. package/opencode/plugin.ts +818 -0
  186. package/package.json +36 -4
  187. package/scripts/admin-merge-ready.sh +545 -0
  188. package/scripts/admin-merge-ready.test.sh +753 -0
  189. package/scripts/affected-tests.sh +908 -0
  190. package/scripts/affected-tests.test.sh +1797 -0
  191. package/scripts/alpha-metrics.sh +78 -0
  192. package/scripts/alpha-metrics.test.sh +115 -0
  193. package/scripts/ancestor-signal-helpers.baseline.txt +16 -0
  194. package/scripts/audit-flag-flip.sh +107 -0
  195. package/scripts/check-red-on-main.sh +316 -0
  196. package/scripts/ci-head-verdict.sh +411 -0
  197. package/scripts/cloud-detect.sh +193 -0
  198. package/scripts/delegation-verify.sh +657 -0
  199. package/scripts/delegation-verify.test.sh +1424 -0
  200. package/scripts/deploy-arm.sh +475 -0
  201. package/scripts/domain-model-drift.sh +419 -0
  202. package/scripts/emit-decision.sh +144 -0
  203. package/scripts/emit-decision.test.sh +144 -0
  204. package/scripts/ext-filter-divergence-corpus.txt +15 -0
  205. package/scripts/ext-filter-divergence.sh +189 -0
  206. package/scripts/generate-c4-from-components.ts +442 -0
  207. package/scripts/grok-fidelity-gate.sh +68 -0
  208. package/scripts/grok-pre-push-gate.sh +232 -0
  209. package/scripts/harness-discovery-smoke.ts +906 -0
  210. package/scripts/harness-parity-census.ts +92 -0
  211. package/scripts/inngest-luks-alert-armed-probe.ts +29 -0
  212. package/scripts/install-opencode-adapter.ts +509 -0
  213. package/scripts/lib/affected-tests/common.sh +365 -0
  214. package/scripts/lib/affected-tests/go.sh +157 -0
  215. package/scripts/lib/affected-tests/js.sh +188 -0
  216. package/scripts/lib/affected-tests/nx-turbo.sh +98 -0
  217. package/scripts/lib/affected-tests/python.sh +185 -0
  218. package/scripts/lib/context-sanitize.sh +49 -0
  219. package/scripts/lib/domain-model-lib.sh +180 -0
  220. package/scripts/lib/ext-filter-grammar.tsv +34 -0
  221. package/scripts/lib/operator-script.sh +1236 -0
  222. package/scripts/lib/proc.sh +580 -0
  223. package/scripts/lib/session-state.sh +748 -0
  224. package/scripts/lib/tmp-classify.sh +843 -0
  225. package/scripts/lib/wrapper-boundary.sh +47 -0
  226. package/scripts/lint-ratchet.py +1547 -0
  227. package/scripts/monitor-pr-checks.sh +441 -0
  228. package/scripts/pipeline-tally.sh +756 -0
  229. package/scripts/pipeline-tally.test.sh +740 -0
  230. package/scripts/plugin-version.sh +528 -0
  231. package/scripts/precommit-guard.sh +115 -0
  232. package/scripts/precommit-guard.test.sh +254 -0
  233. package/scripts/reconcile-live-heartbeats.ts +705 -0
  234. package/scripts/render-c4-model.sh +217 -0
  235. package/scripts/resolve-git-root.sh +55 -0
  236. package/scripts/resolve-regenerable-conflicts.sh +363 -0
  237. package/scripts/resolve-regenerable-conflicts.test.sh +780 -0
  238. package/scripts/ruff-requirements.txt +22 -0
  239. package/scripts/run-in-pid-namespace.sh +98 -0
  240. package/scripts/run-in-pid-namespace.test.sh +290 -0
  241. package/scripts/scan-ancestor-signal-helpers.py +556 -0
  242. package/scripts/scan-ancestor-signal-helpers.test.sh +670 -0
  243. package/scripts/setup-ralph-loop.sh +238 -0
  244. package/scripts/sync-cursor-name-map.ts +316 -0
  245. package/scripts/sync-grok-agent-compat.ts +188 -0
  246. package/scripts/sync-npm-package.ts +165 -0
  247. package/scripts/sync-opencode-adapter.ts +498 -0
  248. package/scripts/sync-pr-behind.sh +647 -0
  249. package/scripts/sync-pr-behind.test.sh +252 -0
  250. package/scripts/taste-profile-update.sh +180 -0
  251. package/scripts/taste-profile-update.test.sh +167 -0
  252. package/scripts/write-budget-marker.sh +23 -0
  253. package/scripts/write-kb-coverage.ts +113 -0
  254. package/skills/admin-ip-refresh/SKILL.md +81 -0
  255. package/skills/admin-ip-refresh/references/admin-ip-refresh-procedure.md +201 -0
  256. package/skills/agent-browser/SKILL.md +698 -0
  257. package/skills/agent-browser/scripts/playwright-mcp-profile-slot.sh +304 -0
  258. package/skills/agent-browser/scripts/playwright-mcp-redact-proxy.py +964 -0
  259. package/skills/agent-browser/scripts/redact-a11y-snapshot.py +443 -0
  260. package/skills/agent-browser/test/fixtures/capture-playwright-mcp-fixtures.py +217 -0
  261. package/skills/agent-browser/test/fixtures/fake-passthrough-proxy.py +24 -0
  262. package/skills/agent-browser/test/fixtures/fake-playwright-mcp.py +131 -0
  263. package/skills/agent-browser/test/fixtures/make-proxy-mutant.py +48 -0
  264. package/skills/agent-browser/test/fixtures/odd-shapes/dialog-link-injection.json +10 -0
  265. package/skills/agent-browser/test/fixtures/odd-shapes/empty-content.json +5 -0
  266. package/skills/agent-browser/test/fixtures/odd-shapes/error-and-result.json +4 -0
  267. package/skills/agent-browser/test/fixtures/odd-shapes/error-code-bool.json +6 -0
  268. package/skills/agent-browser/test/fixtures/odd-shapes/error-code-string.json +6 -0
  269. package/skills/agent-browser/test/fixtures/odd-shapes/error-message-tree.json +6 -0
  270. package/skills/agent-browser/test/fixtures/odd-shapes/error-no-data.json +6 -0
  271. package/skills/agent-browser/test/fixtures/odd-shapes/error-string.json +4 -0
  272. package/skills/agent-browser/test/fixtures/odd-shapes/error-with-data.json +9 -0
  273. package/skills/agent-browser/test/fixtures/odd-shapes/evaluate-escaped-object.json +10 -0
  274. package/skills/agent-browser/test/fixtures/odd-shapes/invalid-utf8.json +4 -0
  275. package/skills/agent-browser/test/fixtures/odd-shapes/link-result.json +10 -0
  276. package/skills/agent-browser/test/fixtures/odd-shapes/list-two-results.json +6 -0
  277. package/skills/agent-browser/test/fixtures/odd-shapes/meta-in-result.json +13 -0
  278. package/skills/agent-browser/test/fixtures/odd-shapes/no-content.json +5 -0
  279. package/skills/agent-browser/test/fixtures/odd-shapes/quoted-key.json +10 -0
  280. package/skills/agent-browser/test/fixtures/odd-shapes/resource-block.json +18 -0
  281. package/skills/agent-browser/test/fixtures/odd-shapes/result-and-method.json +11 -0
  282. package/skills/agent-browser/test/fixtures/odd-shapes/result-string.json +3 -0
  283. package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped-one-row.json +10 -0
  284. package/skills/agent-browser/test/fixtures/odd-shapes/run-code-escaped.json +10 -0
  285. package/skills/agent-browser/test/fixtures/odd-shapes/structured-content.json +13 -0
  286. package/skills/agent-browser/test/fixtures/odd-shapes/tools-list-no-tools.json +5 -0
  287. package/skills/agent-browser/test/fixtures/odd-shapes/tree-no-credential.json +10 -0
  288. package/skills/agent-browser/test/fixtures/odd-shapes/two-text-blocks.json +14 -0
  289. package/skills/agent-browser/test/fixtures/odd-shapes/unparsable-line.json +3 -0
  290. package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-brace.json +10 -0
  291. package/skills/agent-browser/test/fixtures/odd-shapes/value-contains-link-substring.json +10 -0
  292. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/close.json +12 -0
  293. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/evaluate.json +12 -0
  294. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/find.json +12 -0
  295. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/framing.json +6 -0
  296. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/initialize.json +14 -0
  297. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate-link.json +12 -0
  298. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/navigate.json +12 -0
  299. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/roots-list-request.json +5 -0
  300. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/screenshot.json +17 -0
  301. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-filename.json +12 -0
  302. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-json.json +12 -0
  303. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot-meta-raw.json +12 -0
  304. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/snapshot.json +12 -0
  305. package/skills/agent-browser/test/fixtures/playwright-mcp-0.0.78/tools-list.json +827 -0
  306. package/skills/agent-browser/test/fixtures/proxy-session-driver.py +138 -0
  307. package/skills/agent-browser/test/fixtures/session-facts.py +102 -0
  308. package/skills/agent-browser/test/playwright-mcp-lifetime.test.sh +1620 -0
  309. package/skills/agent-browser/test/playwright-mcp-redact-proxy.test.sh +1599 -0
  310. package/skills/agent-browser/test/redact-a11y-snapshot.test.sh +527 -0
  311. package/skills/agent-native-architecture/SKILL.md +479 -0
  312. package/skills/agent-native-architecture/references/action-parity-discipline.md +430 -0
  313. package/skills/agent-native-architecture/references/agent-execution-patterns.md +483 -0
  314. package/skills/agent-native-architecture/references/agent-native-testing.md +605 -0
  315. package/skills/agent-native-architecture/references/architecture-patterns.md +493 -0
  316. package/skills/agent-native-architecture/references/dynamic-context-injection.md +358 -0
  317. package/skills/agent-native-architecture/references/files-universal-interface.md +314 -0
  318. package/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +381 -0
  319. package/skills/agent-native-architecture/references/mcp-tool-design.md +524 -0
  320. package/skills/agent-native-architecture/references/mobile-patterns.md +897 -0
  321. package/skills/agent-native-architecture/references/product-implications.md +478 -0
  322. package/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +342 -0
  323. package/skills/agent-native-architecture/references/self-modification.md +294 -0
  324. package/skills/agent-native-architecture/references/shared-workspace-architecture.md +700 -0
  325. package/skills/agent-native-architecture/references/system-prompt-design.md +263 -0
  326. package/skills/agent-native-audit/SKILL.md +300 -0
  327. package/skills/agent-native-audit/workflows/agent-native-audit.workflow.js +423 -0
  328. package/skills/andrew-kane-gem-writer/SKILL.md +189 -0
  329. package/skills/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  330. package/skills/andrew-kane-gem-writer/references/module-organization.md +121 -0
  331. package/skills/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  332. package/skills/andrew-kane-gem-writer/references/resources.md +126 -0
  333. package/skills/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  334. package/skills/architecture/SKILL.md +436 -0
  335. package/skills/architecture/references/adr-template.md +154 -0
  336. package/skills/architecture/references/likec4-reference.md +136 -0
  337. package/skills/architecture/references/nfr-reference.md +126 -0
  338. package/skills/archive-kb/SKILL.md +86 -0
  339. package/skills/archive-kb/scripts/archive-kb.sh +300 -0
  340. package/skills/archive-kb/test/archive-kb-partial-run.test.sh +276 -0
  341. package/skills/atdd-developer/SKILL.md +65 -0
  342. package/skills/brainstorm/SKILL.md +701 -0
  343. package/skills/brainstorm/references/brainstorm-brand-workshop.md +153 -0
  344. package/skills/brainstorm/references/brainstorm-domain-config.md +63 -0
  345. package/skills/brainstorm/references/brainstorm-validation-workshop.md +65 -0
  346. package/skills/brainstorm/references/ui-surface-terms.md +42 -0
  347. package/skills/brainstorm-techniques/SKILL.md +231 -0
  348. package/skills/brainstorm-techniques/references/decision-principles.md +150 -0
  349. package/skills/brainstorm-techniques/references/phase-boundaries.md +103 -0
  350. package/skills/brainstorm-techniques/references/standing-delegation.md +407 -0
  351. package/skills/brainstorm-techniques/references/technical-ruling-delegation.md +174 -0
  352. package/skills/campaign-calendar/SKILL.md +145 -0
  353. package/skills/cf-token-scope/SKILL.md +164 -0
  354. package/skills/cf-token-scope/references/widen-playbook.md +114 -0
  355. package/skills/cf-token-scope/scripts/cf-token-scope.sh +253 -0
  356. package/skills/changelog/SKILL.md +142 -0
  357. package/skills/code-to-prd/SKILL.md +66 -0
  358. package/skills/code-to-prd/references/banner-template.md +12 -0
  359. package/skills/code-to-prd/references/prd-template.md +41 -0
  360. package/skills/code-to-prd/scripts/code-to-prd.sh +634 -0
  361. package/skills/code-to-prd/test/code-to-prd.test.sh +447 -0
  362. package/skills/code-to-prd/test/fixture/.env.example +7 -0
  363. package/skills/code-to-prd/test/fixture/app/about/page.tsx +11 -0
  364. package/skills/code-to-prd/test/fixture/app/api/health/route.ts +10 -0
  365. package/skills/code-to-prd/test/fixture/app/page.tsx +14 -0
  366. package/skills/code-to-prd/test/fixture/next.config.mjs +3 -0
  367. package/skills/code-to-prd/test/fixture/package.json +6 -0
  368. package/skills/cohort-status/SKILL.md +62 -0
  369. package/skills/community/SKILL.md +210 -0
  370. package/skills/community/scripts/bsky-community.sh +644 -0
  371. package/skills/community/scripts/bsky-setup.sh +631 -0
  372. package/skills/community/scripts/community-router.sh +93 -0
  373. package/skills/community/scripts/discord-community.sh +487 -0
  374. package/skills/community/scripts/discord-setup.sh +784 -0
  375. package/skills/community/scripts/github-community.sh +706 -0
  376. package/skills/community/scripts/hn-community.sh +233 -0
  377. package/skills/community/scripts/lib/hmac-sha1-b64.sh +126 -0
  378. package/skills/community/scripts/linkedin-community.sh +750 -0
  379. package/skills/community/scripts/linkedin-setup.sh +758 -0
  380. package/skills/community/scripts/x-community.sh +890 -0
  381. package/skills/community/scripts/x-setup.sh +713 -0
  382. package/skills/community/test/community-argv.test.sh +2922 -0
  383. package/skills/community/test/github-community.test.sh +981 -0
  384. package/skills/competitive-analysis/SKILL.md +69 -0
  385. package/skills/competitive-analysis/references/peer-plugin-audit.md +218 -0
  386. package/skills/compound/SKILL.md +673 -0
  387. package/skills/compound/scripts/token-efficiency-report.sh +334 -0
  388. package/skills/compound/test/phase-16.test.sh +379 -0
  389. package/skills/compound-capture/SKILL.md +791 -0
  390. package/skills/compound-capture/assets/critical-pattern-template.md +37 -0
  391. package/skills/compound-capture/assets/resolution-template.md +116 -0
  392. package/skills/compound-capture/references/yaml-schema.md +67 -0
  393. package/skills/compound-capture/schema.yaml +181 -0
  394. package/skills/constraint-scaffold/SKILL.md +175 -0
  395. package/skills/constraint-scaffold/references/boundary-readme.template +35 -0
  396. package/skills/constraint-scaffold/references/constraint-gates-workflow.template +69 -0
  397. package/skills/constraint-scaffold/references/depcruise-config.template +230 -0
  398. package/skills/constraint-scaffold/references/fix-constraints-stage-a.template +240 -0
  399. package/skills/constraint-scaffold/references/fix-constraints-stage-b.template +313 -0
  400. package/skills/constraint-scaffold/references/shared-runner.template +135 -0
  401. package/skills/constraint-scaffold/scripts/constraint-scaffold.sh +589 -0
  402. package/skills/constraint-scaffold/test/bite-proof.test.sh +1338 -0
  403. package/skills/constraint-scaffold/test/boundary.test.sh +734 -0
  404. package/skills/constraint-scaffold/test/emit-fix-constraints.test.sh +193 -0
  405. package/skills/constraint-scaffold/test/generator.test.sh +93 -0
  406. package/skills/constraint-scaffold/test/parity.test.sh +285 -0
  407. package/skills/content-writer/SKILL.md +242 -0
  408. package/skills/content-writer/scripts/blog-jargon-scan.sh +42 -0
  409. package/skills/cron-delete/SKILL.md +56 -0
  410. package/skills/cron-list/SKILL.md +54 -0
  411. package/skills/deepen-plan/SKILL.md +937 -0
  412. package/skills/deepen-plan/workflows/deepen-plan.workflow.js +488 -0
  413. package/skills/deploy/SKILL.md +115 -0
  414. package/skills/deploy/references/hetzner-setup.md +67 -0
  415. package/skills/deploy/scripts/deploy.sh +37 -0
  416. package/skills/deploy-docs/SKILL.md +95 -0
  417. package/skills/dhh-rails-style/SKILL.md +203 -0
  418. package/skills/dhh-rails-style/references/architecture.md +717 -0
  419. package/skills/dhh-rails-style/references/controllers.md +323 -0
  420. package/skills/dhh-rails-style/references/frontend.md +556 -0
  421. package/skills/dhh-rails-style/references/gems.md +316 -0
  422. package/skills/dhh-rails-style/references/models.md +388 -0
  423. package/skills/dhh-rails-style/references/testing.md +354 -0
  424. package/skills/discord-content/SKILL.md +126 -0
  425. package/skills/docs-site/SKILL.md +214 -0
  426. package/skills/drain-labeled-backlog/SKILL.md +203 -0
  427. package/skills/drain-labeled-backlog/scripts/group-by-area.sh +208 -0
  428. package/skills/drain-labeled-backlog/workflows/drain-labeled-backlog.workflow.js +433 -0
  429. package/skills/drain-prs/SKILL.md +143 -0
  430. package/skills/drain-prs/scripts/triage-prs.sh +192 -0
  431. package/skills/drain-prs/test/argv-ceiling.test.sh +183 -0
  432. package/skills/dspy-ruby/SKILL.md +634 -0
  433. package/skills/dspy-ruby/assets/config-template.rb +359 -0
  434. package/skills/dspy-ruby/assets/module-template.rb +326 -0
  435. package/skills/dspy-ruby/assets/signature-template.rb +143 -0
  436. package/skills/dspy-ruby/references/core-concepts.md +268 -0
  437. package/skills/dspy-ruby/references/optimization.md +623 -0
  438. package/skills/dspy-ruby/references/providers.md +335 -0
  439. package/skills/eval-harness/README.md +194 -0
  440. package/skills/eval-harness/SKILL.md +157 -0
  441. package/skills/eval-harness/enums/go-routes.json +13 -0
  442. package/skills/eval-harness/enums/incident-threshold.json +5 -0
  443. package/skills/eval-harness/enums/lane.json +5 -0
  444. package/skills/eval-harness/enums/tool-selection.json +20 -0
  445. package/skills/eval-harness/enums/triage-levels.json +5 -0
  446. package/skills/eval-harness/gated-skills.json +34 -0
  447. package/skills/eval-harness/models.generated.json +5 -0
  448. package/skills/eval-harness/promptfooconfig-go-routing.yaml +35 -0
  449. package/skills/eval-harness/promptfooconfig-incident-threshold.yaml +32 -0
  450. package/skills/eval-harness/promptfooconfig-lane-inference.yaml +33 -0
  451. package/skills/eval-harness/promptfooconfig-ticket-triage.yaml +34 -0
  452. package/skills/eval-harness/promptfooconfig-tool-selection.yaml +33 -0
  453. package/skills/eval-harness/prompts/go-baseline.txt +6 -0
  454. package/skills/eval-harness/prompts/go-skill.txt +21 -0
  455. package/skills/eval-harness/prompts/incident-threshold-baseline.txt +6 -0
  456. package/skills/eval-harness/prompts/incident-threshold-skill.txt +12 -0
  457. package/skills/eval-harness/prompts/lane-inference-baseline.txt +6 -0
  458. package/skills/eval-harness/prompts/lane-inference-skill.txt +15 -0
  459. package/skills/eval-harness/prompts/tool-selection-baseline.txt +19 -0
  460. package/skills/eval-harness/prompts/tool-selection-skill.txt +22 -0
  461. package/skills/eval-harness/prompts/triage-baseline.txt +7 -0
  462. package/skills/eval-harness/prompts/triage-skill.txt +10 -0
  463. package/skills/eval-harness/scripts/eval-gate.cjs +318 -0
  464. package/skills/eval-harness/scripts/extract-block.cjs +87 -0
  465. package/skills/eval-harness/scripts/gate-classification.cjs +28 -0
  466. package/skills/eval-harness/scripts/gen-models.sh +41 -0
  467. package/skills/eval-harness/scripts/gen-skill-prompt.cjs +177 -0
  468. package/skills/eval-harness/scripts/measure-classification.cjs +30 -0
  469. package/skills/eval-harness/scripts/parse-label.cjs +93 -0
  470. package/skills/eval-harness/scripts/verdict.cjs +132 -0
  471. package/skills/eval-harness/tasks/go-routing.jsonl +8 -0
  472. package/skills/eval-harness/tasks/incident-threshold.jsonl +7 -0
  473. package/skills/eval-harness/tasks/lane-inference.jsonl +7 -0
  474. package/skills/eval-harness/tasks/ticket-triage.jsonl +6 -0
  475. package/skills/eval-harness/tasks/tool-selection.jsonl +15 -0
  476. package/skills/eval-harness/test/eval-gate.test.sh +132 -0
  477. package/skills/eval-harness/test/extract-block.test.sh +87 -0
  478. package/skills/eval-harness/test/gate-classification.test.sh +77 -0
  479. package/skills/eval-harness/test/gen-models.test.sh +75 -0
  480. package/skills/eval-harness/test/measure-classification.test.sh +74 -0
  481. package/skills/eval-harness/test/parse-label.test.sh +129 -0
  482. package/skills/eval-harness/test/registry-completeness.test.sh +109 -0
  483. package/skills/eval-harness/test/verdict.test.sh +123 -0
  484. package/skills/every-style-editor/SKILL.md +142 -0
  485. package/skills/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  486. package/skills/feature-tweet/SKILL.md +199 -0
  487. package/skills/feature-video/SKILL.md +412 -0
  488. package/skills/feature-video/scripts/check_deps.sh +281 -0
  489. package/skills/file-todos/SKILL.md +267 -0
  490. package/skills/file-todos/assets/todo-template.md +166 -0
  491. package/skills/fix-issue/SKILL.md +278 -0
  492. package/skills/fix-issue/references/agent-authored-exclusion.md +120 -0
  493. package/skills/fix-issue/references/exclude-label-jq-snippet.md +97 -0
  494. package/skills/flag-bootstrap/SETUP.md +142 -0
  495. package/skills/flag-create/SKILL.md +145 -0
  496. package/skills/flag-create/scripts/create.sh +273 -0
  497. package/skills/flag-delete/SKILL.md +167 -0
  498. package/skills/flag-delete/scripts/delete.sh +288 -0
  499. package/skills/flag-list/SKILL.md +99 -0
  500. package/skills/flag-list/scripts/list.sh +275 -0
  501. package/skills/flag-set-role/SKILL.md +229 -0
  502. package/skills/flag-set-role/scripts/flip.sh +774 -0
  503. package/skills/frontend-anti-slop/SKILL.md +106 -0
  504. package/skills/frontend-anti-slop/references/anti-patterns.md +199 -0
  505. package/skills/frontend-anti-slop/references/slop-rules.md +65 -0
  506. package/skills/frontend-anti-slop/scripts/tier1-scan.ts +525 -0
  507. package/skills/frontend-design/SKILL.md +77 -0
  508. package/skills/gdpr-gate/NOTICE +136 -0
  509. package/skills/gdpr-gate/SKILL.md +341 -0
  510. package/skills/gdpr-gate/references/fields.md +160 -0
  511. package/skills/gdpr-gate/references/layers/api-layer.md +355 -0
  512. package/skills/gdpr-gate/references/layers/auth-sessions.md +290 -0
  513. package/skills/gdpr-gate/references/layers/data-in-transit.md +331 -0
  514. package/skills/gdpr-gate/references/layers/data-lifecycle.md +341 -0
  515. package/skills/gdpr-gate/references/layers/frontend.md +249 -0
  516. package/skills/gdpr-gate/references/layers/testing-seeding.md +256 -0
  517. package/skills/gdpr-gate/references/leakage-vectors.md +248 -0
  518. package/skills/gdpr-gate/references/legacy/legal-consent-v1-prose.md +48 -0
  519. package/skills/gdpr-gate/references/legal-consent.md +140 -0
  520. package/skills/gdpr-gate/references/non-negotiables.md +60 -0
  521. package/skills/gdpr-gate/scripts/gdpr-gate.sh +271 -0
  522. package/skills/gdpr-gate/scripts/notice-frontmatter.sh +337 -0
  523. package/skills/gdpr-gate/scripts/path-denylist.txt +39 -0
  524. package/skills/gdpr-gate/scripts/repo-scan.sh +158 -0
  525. package/skills/gdpr-gate/scripts/vendor-drift-classify.sh +120 -0
  526. package/skills/gdpr-gate/scripts/vendor-pin-integrity.sh +237 -0
  527. package/skills/gemini-imagegen/SKILL.md +283 -0
  528. package/skills/gemini-imagegen/requirements.txt +5 -0
  529. package/skills/gemini-imagegen/scripts/_error_handling.py +146 -0
  530. package/skills/gemini-imagegen/scripts/compose_images.py +150 -0
  531. package/skills/gemini-imagegen/scripts/edit_image.py +137 -0
  532. package/skills/gemini-imagegen/scripts/gemini_images.py +256 -0
  533. package/skills/gemini-imagegen/scripts/generate_image.py +147 -0
  534. package/skills/gemini-imagegen/scripts/multi_turn_chat.py +223 -0
  535. package/skills/gemini-imagegen/scripts/test_error_handling.py +179 -0
  536. package/skills/git-worktree/SKILL.md +534 -0
  537. package/skills/git-worktree/scripts/git-repo-readiness-diag.sh +98 -0
  538. package/skills/git-worktree/scripts/worktree-manager.sh +4773 -0
  539. package/skills/git-worktree/test/create-from-origin-main.test.sh +116 -0
  540. package/skills/git-worktree/test/lease-protects-active.test.sh +1056 -0
  541. package/skills/git-worktree/test/no-repo-fail-loud.test.sh +88 -0
  542. package/skills/git-worktree/test/orphan-reaper-honest-count.test.sh +379 -0
  543. package/skills/git-worktree/test/reap-archive-persistence.test.sh +725 -0
  544. package/skills/git-worktree/test/stale-lock-sweep.test.sh +176 -0
  545. package/skills/go/SKILL.md +54 -0
  546. package/skills/growth/SKILL.md +164 -0
  547. package/skills/harvest-debt/SKILL.md +78 -0
  548. package/skills/harvest-debt/scripts/harvest-debt.sh +114 -0
  549. package/skills/heal-skill/SKILL.md +173 -0
  550. package/skills/help/SKILL.md +46 -0
  551. package/skills/incident/NOTICE +39 -0
  552. package/skills/incident/SKILL.md +395 -0
  553. package/skills/incident/scripts/dry-run.sh +448 -0
  554. package/skills/incident/scripts/redact-engine.py +412 -0
  555. package/skills/incident/scripts/redact-sentinel.sh +44 -0
  556. package/skills/incident/templates/pir.md +139 -0
  557. package/skills/incident/test/fixtures/dry-run-incident.json +26 -0
  558. package/skills/incident/test/fixtures/dry-run-secret-leak.json +26 -0
  559. package/skills/incident/test/fixtures/legacy-bash-scanner.sh +82 -0
  560. package/skills/incident/test/fixtures/positive-corpus.md +87 -0
  561. package/skills/incident/test/redact-sentinel.test.sh +1420 -0
  562. package/skills/invoice/SKILL.md +206 -0
  563. package/skills/kb-glossary/SKILL.md +71 -0
  564. package/skills/kb-glossary/references/glossary-format.md +111 -0
  565. package/skills/kb-glossary/references/rejected-request-register.md +115 -0
  566. package/skills/kb-search/SKILL.md +276 -0
  567. package/skills/kb-search/scripts/kb-search-cache.sh +123 -0
  568. package/skills/legal-audit/SKILL.md +161 -0
  569. package/skills/legal-generate/NOTICE +242 -0
  570. package/skills/legal-generate/SKILL.md +244 -0
  571. package/skills/legal-generate/references/templates/advisor-agreement/template.md +12 -0
  572. package/skills/legal-generate/references/templates/business-associate-agreement/template.md +112 -0
  573. package/skills/legal-generate/references/templates/cookie-notice/template.md +82 -0
  574. package/skills/legal-generate/references/templates/dpa-global/template.md +439 -0
  575. package/skills/legal-generate/references/templates/dpa-us/template.md +222 -0
  576. package/skills/legal-generate/references/templates/employee-offer-letter/template.md +75 -0
  577. package/skills/legal-generate/references/templates/master-services-agreement/template.md +252 -0
  578. package/skills/legal-generate/references/templates/mutual-nda/template.md +66 -0
  579. package/skills/legal-generate/references/templates/one-way-nda/template.md +38 -0
  580. package/skills/legal-generate/references/templates/privacy-policy-gdpr/template.md +427 -0
  581. package/skills/legal-generate/references/templates/privacy-policy-us/template.md +313 -0
  582. package/skills/legal-generate/references/templates/terms-of-use/template.md +75 -0
  583. package/skills/legal-generate/scripts/strip-vendor-credit.sh +96 -0
  584. package/skills/linear-fetch/SKILL.md +247 -0
  585. package/skills/linear-fetch/scripts/assert-no-linear-telemetry.sh +66 -0
  586. package/skills/linear-fetch/scripts/redact-linear-urls.sh +51 -0
  587. package/skills/linear-fetch/scripts/render-caller-template.sh +36 -0
  588. package/skills/linear-fetch/test/assert-no-linear-telemetry.test.sh +113 -0
  589. package/skills/linear-fetch/test/parity.test.sh +112 -0
  590. package/skills/linear-fetch/test/persist-safe-integration.test.sh +191 -0
  591. package/skills/linear-fetch/test/redact-linear-urls.test.sh +226 -0
  592. package/skills/merge-pr/SKILL.md +670 -0
  593. package/skills/model-launch-review/SKILL.md +255 -0
  594. package/skills/model-launch-review/scripts/audit-models.sh +501 -0
  595. package/skills/one-shot/SKILL.md +316 -0
  596. package/skills/one-shot/references/token-discipline.md +74 -0
  597. package/skills/operator-bootstrap/SKILL.md +412 -0
  598. package/skills/operator-bootstrap/template.sh +439 -0
  599. package/skills/operator-digest/SKILL.md +287 -0
  600. package/skills/operator-digest/assets/operator-digest.workflow.yml +175 -0
  601. package/skills/operator-digest/scripts/digest-scrub.sh +119 -0
  602. package/skills/operator-digest/scripts/provision-operator-digest-repo.sh +147 -0
  603. package/skills/operator-rephrase/SKILL.md +98 -0
  604. package/skills/pencil-setup/SKILL.md +201 -0
  605. package/skills/pencil-setup/scripts/check_deps.sh +556 -0
  606. package/skills/pencil-setup/scripts/copy_adapter.sh +80 -0
  607. package/skills/pencil-setup/scripts/package-lock.json +1172 -0
  608. package/skills/pencil-setup/scripts/package.json +14 -0
  609. package/skills/pencil-setup/scripts/pencil-error-enrichment.mjs +21 -0
  610. package/skills/pencil-setup/scripts/pencil-mcp-adapter.mjs +733 -0
  611. package/skills/pencil-setup/scripts/pencil-response-classify.mjs +38 -0
  612. package/skills/pencil-setup/scripts/pencil-save-gate.mjs +26 -0
  613. package/skills/pencil-setup/scripts/sanitize-filename.mjs +25 -0
  614. package/skills/plan/SKILL.md +1140 -0
  615. package/skills/plan/references/differential-migration-testing.md +185 -0
  616. package/skills/plan/references/plan-community-discovery.md +42 -0
  617. package/skills/plan/references/plan-founder-check.md +137 -0
  618. package/skills/plan/references/plan-functional-overlap.md +25 -0
  619. package/skills/plan/references/plan-host-fanout.md +51 -0
  620. package/skills/plan/references/plan-issue-templates.md +779 -0
  621. package/skills/plan/references/plan-network-outage-checklist.md +131 -0
  622. package/skills/plan/references/plan-scope-check.md +126 -0
  623. package/skills/plan/references/plan-sharp-edges.md +331 -0
  624. package/skills/plan/references/plan-signoff-lifecycle.md +12 -0
  625. package/skills/plan/references/webapp-cwv-observability.md +143 -0
  626. package/skills/plan-review/SKILL.md +91 -0
  627. package/skills/plan-review/lib/named-panel.mjs +58 -0
  628. package/skills/plan-review/workflows/plan-review.workflow.js +477 -0
  629. package/skills/postmerge/SKILL.md +642 -0
  630. package/skills/postmerge/references/deploy-status-debugging.md +141 -0
  631. package/skills/postmerge/references/graceful-degradation.md +20 -0
  632. package/skills/postmerge/references/sentry-error-count-delta.md +137 -0
  633. package/skills/preflight/SKILL.md +1553 -0
  634. package/skills/preflight/references/check-13-founder-check.md +286 -0
  635. package/skills/preflight/scripts/founder-check.py +1640 -0
  636. package/skills/preflight/scripts/parse-form-a.awk +107 -0
  637. package/skills/preflight/scripts/probe-verb-gate.sh +108 -0
  638. package/skills/product-roadmap/SKILL.md +357 -0
  639. package/skills/product-roadmap/scripts/roadmap-reconcile.sh +327 -0
  640. package/skills/provision-cloudflare/SKILL.md +67 -0
  641. package/skills/provision-cloudflare/scripts/provision-cloudflare.sh +271 -0
  642. package/skills/provision-doppler/SKILL.md +58 -0
  643. package/skills/provision-doppler/scripts/provision-doppler.sh +358 -0
  644. package/skills/provision-github/SKILL.md +59 -0
  645. package/skills/provision-github/scripts/provision-github.sh +300 -0
  646. package/skills/provision-hetzner/SKILL.md +76 -0
  647. package/skills/provision-hetzner/scripts/provision-hetzner.sh +262 -0
  648. package/skills/provision-hetzner/test/fixture/knowledge-base/legal/tenant-dpa-register.md +26 -0
  649. package/skills/provision-hetzner/test/fixture/provision-hetzner-dry-run.golden +34 -0
  650. package/skills/provision-hetzner/test/provision-hetzner-characterization.test.sh +227 -0
  651. package/skills/qa/SKILL.md +263 -0
  652. package/skills/qa/references/browser-preflight.md +22 -0
  653. package/skills/questionnaire-generate/SKILL.md +328 -0
  654. package/skills/questionnaire-generate/references/questionnaire.template +60 -0
  655. package/skills/rclone/SKILL.md +162 -0
  656. package/skills/rclone/scripts/check_setup.sh +63 -0
  657. package/skills/release-announce/SKILL.md +65 -0
  658. package/skills/release-docs/SKILL.md +92 -0
  659. package/skills/reproduce-bug/SKILL.md +358 -0
  660. package/skills/resolve-debt/SKILL.md +85 -0
  661. package/skills/resolve-debt/scripts/resolve-debt.py +584 -0
  662. package/skills/resolve-parallel/SKILL.md +45 -0
  663. package/skills/resolve-parallel/workflows/resolve-parallel.workflow.js +415 -0
  664. package/skills/resolve-pr-parallel/SKILL.md +68 -0
  665. package/skills/resolve-pr-parallel/workflows/resolve-pr-parallel.workflow.js +419 -0
  666. package/skills/resolve-todo-parallel/SKILL.md +57 -0
  667. package/skills/resolve-todo-parallel/workflows/resolve-todo-parallel.workflow.js +398 -0
  668. package/skills/review/SKILL.md +1620 -0
  669. package/skills/review/references/anti-slop-scanner-hook.md +40 -0
  670. package/skills/review/references/defect-classes-migrations.md +9 -0
  671. package/skills/review/references/generated-input-oracle-surfaces.md +15 -0
  672. package/skills/review/references/review-e2e-testing.md +116 -0
  673. package/skills/review/references/review-evidence-comment.md +36 -0
  674. package/skills/review/references/review-todo-structure.md +165 -0
  675. package/skills/review/references/risk-tier-and-fix-rounds.md +97 -0
  676. package/skills/review/references/semgrep-custom-rules.yaml +174 -0
  677. package/skills/review/references/ultrathink-phases.md +98 -0
  678. package/skills/review/references/wfs.md +6 -0
  679. package/skills/review/scripts/emit-review-trailer.sh +499 -0
  680. package/skills/review/scripts/ensure-semgrep.sh +99 -0
  681. package/skills/review/scripts/fix-round-seats.sh +197 -0
  682. package/skills/review/test/emit-review-trailer.test.sh +387 -0
  683. package/skills/review/test/ensure-semgrep.test.sh +111 -0
  684. package/skills/review/test/fix-round-seats.test.sh +237 -0
  685. package/skills/review/workflows/README.md +147 -0
  686. package/skills/review/workflows/review.workflow.js +667 -0
  687. package/skills/schedule/SKILL.md +796 -0
  688. package/skills/seo-aeo/SKILL.md +139 -0
  689. package/skills/seo-aeo/scripts/validate-csp.sh +233 -0
  690. package/skills/seo-aeo/scripts/validate-seo.sh +262 -0
  691. package/skills/ship/SKILL.md +3023 -0
  692. package/skills/ship/references/adr-ordinal-collision.md +47 -0
  693. package/skills/ship/references/affected-gate-contract.md +115 -0
  694. package/skills/ship/references/ci-run-diagnosis.md +29 -0
  695. package/skills/ship/references/ci-workflow-authoring.md +68 -0
  696. package/skills/ship/references/cleanup-merged-archival.md +39 -0
  697. package/skills/ship/references/counsel-review-clo-attestation.md +38 -0
  698. package/skills/ship/references/cto-ruling-armed-push.md +5 -0
  699. package/skills/ship/references/decision-challenges-render.md +71 -0
  700. package/skills/ship/references/delegated-act-authoring-form.md +7 -0
  701. package/skills/ship/references/detached-battery-verdict.md +13 -0
  702. package/skills/ship/references/epic-close-sweep.md +62 -0
  703. package/skills/ship/references/feature-tweet-draft.md +42 -0
  704. package/skills/ship/references/followthrough-issue-body-template.md +47 -0
  705. package/skills/ship/references/followthrough-stub-template.sh +92 -0
  706. package/skills/ship/references/merge-queue-dequeue.md +39 -0
  707. package/skills/ship/references/operator-holds.md +179 -0
  708. package/skills/ship/references/pipeline-tally-render.md +43 -0
  709. package/skills/ship/references/pr-overlap.md +153 -0
  710. package/skills/ship/references/queue-mode.md +7 -0
  711. package/skills/ship/references/ready-run-wait.md +36 -0
  712. package/skills/ship/references/red-on-main-quarantine.md +110 -0
  713. package/skills/ship/references/register-update-pr-pattern.md +88 -0
  714. package/skills/ship/references/settle-then-admin-merge.md +130 -0
  715. package/skills/ship/references/supabase-column-probe.md +13 -0
  716. package/skills/ship/scripts/auto-close-scan.sh +76 -0
  717. package/skills/ship/scripts/battery-owed.sh +403 -0
  718. package/skills/ship/scripts/hold-gate-eval.sh +410 -0
  719. package/skills/ship/scripts/net-issue-flow.sh +665 -0
  720. package/skills/ship/scripts/pr-overlap-preflight.sh +483 -0
  721. package/skills/ship/scripts/ship-pir-action-items-gate.sh +246 -0
  722. package/skills/ship/scripts/technical-ruling-gate.sh +444 -0
  723. package/skills/skill-creator/SKILL.md +299 -0
  724. package/skills/skill-creator/references/api-security.md +248 -0
  725. package/skills/skill-creator/references/authoring-levers.md +110 -0
  726. package/skills/skill-creator/references/be-clear-and-direct.md +587 -0
  727. package/skills/skill-creator/references/best-practices.md +431 -0
  728. package/skills/skill-creator/references/common-patterns.md +639 -0
  729. package/skills/skill-creator/references/core-principles.md +193 -0
  730. package/skills/skill-creator/references/executable-code.md +188 -0
  731. package/skills/skill-creator/references/iteration-and-testing.md +509 -0
  732. package/skills/skill-creator/references/official-spec.md +193 -0
  733. package/skills/skill-creator/references/recommended-structure.md +180 -0
  734. package/skills/skill-creator/references/skill-structure.md +396 -0
  735. package/skills/skill-creator/references/using-scripts.md +122 -0
  736. package/skills/skill-creator/references/using-templates.md +120 -0
  737. package/skills/skill-creator/references/workflows-and-validation.md +541 -0
  738. package/skills/skill-creator/scripts/init_skill.py +322 -0
  739. package/skills/skill-creator/scripts/package_skill.py +110 -0
  740. package/skills/skill-creator/scripts/quick_validate.py +64 -0
  741. package/skills/skill-creator/templates/router-skill.md +73 -0
  742. package/skills/skill-creator/templates/simple-skill.md +34 -0
  743. package/skills/skill-creator/workflows/add-reference.md +96 -0
  744. package/skills/skill-creator/workflows/add-script.md +104 -0
  745. package/skills/skill-creator/workflows/add-template.md +83 -0
  746. package/skills/skill-creator/workflows/add-workflow.md +128 -0
  747. package/skills/skill-creator/workflows/audit-skill.md +159 -0
  748. package/skills/skill-creator/workflows/create-domain-expertise-skill.md +623 -0
  749. package/skills/skill-creator/workflows/create-new-skill.md +207 -0
  750. package/skills/skill-creator/workflows/get-guidance.md +134 -0
  751. package/skills/skill-creator/workflows/upgrade-to-router.md +170 -0
  752. package/skills/skill-creator/workflows/verify-skill.md +226 -0
  753. package/skills/skill-security-scan/SKILL.md +145 -0
  754. package/skills/skill-security-scan/references/disclaimer.md +21 -0
  755. package/skills/skill-security-scan/references/first-party-allowlist.yaml +38 -0
  756. package/skills/skill-security-scan/references/override-artifact-schema.json +68 -0
  757. package/skills/skill-security-scan/references/override-mechanism.md +171 -0
  758. package/skills/skill-security-scan/references/redirect-domains.yaml +27 -0
  759. package/skills/skill-security-scan/references/regex-patterns.md +136 -0
  760. package/skills/skill-security-scan/references/rules/code-exec.yaml +70 -0
  761. package/skills/skill-security-scan/references/rules/filesystem-boundary.yaml +29 -0
  762. package/skills/skill-security-scan/references/rules/manifest.yaml +44 -0
  763. package/skills/skill-security-scan/references/rules/supply-chain.yaml +36 -0
  764. package/skills/skill-security-scan/references/scan-meta-schema.json +63 -0
  765. package/skills/skill-security-scan/references/test-fixtures/clean-soleur-style.skill.md +23 -0
  766. package/skills/skill-security-scan/references/test-fixtures/clean-third-party.skill.md +26 -0
  767. package/skills/skill-security-scan/references/test-fixtures/malicious-codeexec.skill.md +23 -0
  768. package/skills/skill-security-scan/references/test-fixtures/malicious-curl-pipe-bash.skill.md +69 -0
  769. package/skills/skill-security-scan/references/test-fixtures/malicious-prompt-injection.skill.md +17 -0
  770. package/skills/skill-security-scan/references/test-fixtures/malicious-telemetry-beacon.skill.md +23 -0
  771. package/skills/skill-security-scan/references/typosquat-targets.yaml +65 -0
  772. package/skills/skill-security-scan/scripts/check-codeexec.sh +41 -0
  773. package/skills/skill-security-scan/scripts/check-filesystem-boundary.sh +19 -0
  774. package/skills/skill-security-scan/scripts/check-prompt-injection.sh +95 -0
  775. package/skills/skill-security-scan/scripts/check-supply-chain.sh +219 -0
  776. package/skills/skill-security-scan/scripts/check-telemetry-surface.sh +126 -0
  777. package/skills/skill-security-scan/scripts/lib.sh +197 -0
  778. package/skills/skill-security-scan/scripts/parse-override.sh +231 -0
  779. package/skills/skill-security-scan/scripts/run-scan.sh +342 -0
  780. package/skills/skill-security-scan/scripts/run-self-test.sh +95 -0
  781. package/skills/skill-security-scan/test/argv-ceiling.test.sh +180 -0
  782. package/skills/skill-security-scan/test/meta-dir-reap.test.sh +411 -0
  783. package/skills/skill-security-scan/test/parse-override.test.sh +607 -0
  784. package/skills/skill-security-scan/test/redact-pii-ghs-shape.test.sh +251 -0
  785. package/skills/social-distribute/SKILL.md +485 -0
  786. package/skills/spec-templates/SKILL.md +274 -0
  787. package/skills/sync/SKILL.md +49 -0
  788. package/skills/test-browser/SKILL.md +464 -0
  789. package/skills/test-browser/references/feature-map.md +161 -0
  790. package/skills/test-fix-loop/SKILL.md +159 -0
  791. package/skills/test-fix-loop/references/determinism-checklist.md +154 -0
  792. package/skills/triage/SKILL.md +402 -0
  793. package/skills/trigger-cron/SKILL.md +136 -0
  794. package/skills/trigger-cron/scripts/trigger.sh +198 -0
  795. package/skills/user-set-role/SKILL.md +147 -0
  796. package/skills/user-set-role/scripts/set-role.sh +218 -0
  797. package/skills/user-story-writer/SKILL.md +77 -0
  798. package/skills/ux-audit/SKILL.md +251 -0
  799. package/skills/ux-audit/references/finding.schema.json +62 -0
  800. package/skills/ux-audit/references/route-list.yaml +95 -0
  801. package/skills/ux-audit/scripts/bot-fixture.ts +270 -0
  802. package/skills/ux-audit/scripts/bot-signin.ts +135 -0
  803. package/skills/ux-audit/scripts/dedup-hash.ts +46 -0
  804. package/skills/verification-scaffold/SKILL.md +73 -0
  805. package/skills/verification-scaffold/references/gitleaks.toml.template +13 -0
  806. package/skills/verification-scaffold/references/guardrail-audit.md +156 -0
  807. package/skills/verification-scaffold/references/guards/block-stash-hook.sh.template +72 -0
  808. package/skills/verification-scaffold/references/guards/commit-on-main-hook.sh.template +82 -0
  809. package/skills/verification-scaffold/references/guards/orphan-test-check.sh.template +102 -0
  810. package/skills/verification-scaffold/references/guards/precommit-guard.sh.template +115 -0
  811. package/skills/verification-scaffold/references/guards/secret-scan-hook.sh.template +176 -0
  812. package/skills/verification-scaffold/references/guards/verification-gates.yml.template +49 -0
  813. package/skills/verification-scaffold/references/guards/wrapper-boundary.sh.template +47 -0
  814. package/skills/verification-scaffold/references/guards.tsv +21 -0
  815. package/skills/verification-scaffold/references/verification-readme.template +55 -0
  816. package/skills/verification-scaffold/scripts/verification-scaffold.sh +785 -0
  817. package/skills/verification-scaffold/test/bite-proof.test.sh +159 -0
  818. package/skills/verification-scaffold/test/generator.test.sh +319 -0
  819. package/skills/verification-scaffold/test/manifest.test.sh +144 -0
  820. package/skills/work/SKILL.md +1480 -0
  821. package/skills/work/references/end-of-work-resume.md +7 -0
  822. package/skills/work/references/hook-test-main-cwd.md +24 -0
  823. package/skills/work/references/key-principles.md +83 -0
  824. package/skills/work/references/property-testing.md +122 -0
  825. package/skills/work/references/sql-security-definer-rpc-scaffold.sql +78 -0
  826. package/skills/work/references/work-agent-teams.md +97 -0
  827. package/skills/work/references/work-lifecycle-parallel.md +147 -0
  828. package/skills/work/references/work-lockfile-bumps.md +97 -0
  829. package/skills/work/references/work-scratch-sandboxes.md +212 -0
  830. package/skills/work/references/work-subagent-fanout.md +61 -0
  831. package/skills/work/references/work-test-harness-sharp-edges.md +73 -0
  832. 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.