@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,423 @@
1
+ export const meta = {
2
+ name: 'agent-native-audit-workflow',
3
+ description:
4
+ 'Workflow-backed soleur:agent-native-audit — deterministic parallel fan-out of 8 agent-native principle auditors (Explore sub-agents), each returning a 0-100 sub-score + structured findings, synthesized into one scored report with a weighted overall score and impact-ranked recommendations. Supports a single-principle run via args.',
5
+ // Same phase titles as the phase() calls below so progress groups line up.
6
+ phases: [
7
+ { title: 'Scope', detail: 'load agent-native principles + resolve which principle audits to run' },
8
+ { title: 'Audit', detail: '8 principle auditors (Explore), in parallel — each returns a 0-100 sub-score + findings' },
9
+ { title: 'Synthesize', detail: 'weighted overall score, status tiers, impact-ranked Top-10 recommendations' },
10
+ ],
11
+ }
12
+
13
+ // ---------------------------------------------------------------------------
14
+ // API-BUDGET DISCLOSURE (hr-autonomous-loop-skill-api-budget-disclosure)
15
+ //
16
+ // This workflow fans out ONE Explore sub-agent per principle audit. A full run
17
+ // is 8 principle auditors in parallel + 1 synthesis agent = up to 9 agents
18
+ // (a single-principle run is 1 auditor + 1 synthesis = 2). Each agent is a live
19
+ // model call billed against the Anthropic session key. Under BSL-1.1 the
20
+ // software is provided WITHOUT WARRANTY and Soleur disclaims liability for any
21
+ // runtime/API cost incurred by these calls — the operator owns that spend.
22
+ // CONFIRM the auditor count (printed in the Audit phase log) before the fan-out
23
+ // proceeds; abort the session if the count is unexpected.
24
+ // ---------------------------------------------------------------------------
25
+
26
+
27
+ // ---------------------------------------------------------------------------
28
+ // Input. args may be a bare string (a single principle selector) or an object:
29
+ // { principle, target }
30
+ // principle: optional single-principle selector ('action parity', '5', 'crud', …);
31
+ // when set, only that one auditor runs (SKILL.md §"Single Principle Audit").
32
+ // target: optional human label for the project under review (report header only).
33
+ // ---------------------------------------------------------------------------
34
+ const principleArg = (typeof args === 'string' ? args : args?.principle) || ''
35
+ const projectLabel = (typeof args === 'object' && args?.target) || ''
36
+
37
+ // ---------------------------------------------------------------------------
38
+ // Principle registry. The 8 core agent-native principles audited by SKILL.md,
39
+ // each mapped to: a stable key, the canonical headline, the auditor's task
40
+ // brief (faithful to the source sub-agent prompt), the scoring DENOMINATOR
41
+ // MEANING (so the auditor knows what "X out of Y" counts), and an impact WEIGHT
42
+ // used to compute the weighted overall score. Parity is the foundational
43
+ // principle (agent-native-architecture SKILL.md: "Without it, nothing else
44
+ // matters") so it carries the heaviest weight.
45
+ //
46
+ // Auditors all run as Explore sub-agents (read-only enumeration of the codebase)
47
+ // per SKILL.md Step 2 (`subagent_type: Explore`).
48
+ // ---------------------------------------------------------------------------
49
+ const PRINCIPLES = {
50
+ 'action-parity': {
51
+ title: 'Action Parity',
52
+ tenet: 'Whatever the user can do, the agent can do.',
53
+ weight: 3,
54
+ denom: 'count of user actions; numerator = those with a corresponding agent tool',
55
+ task: `Enumerate ALL user actions in the frontend (API calls, button clicks, form submissions): search API service files, fetch calls, form handlers, routes, and components for user interactions. Then find every agent tool definition and map user actions to agent capabilities. A user action is covered if a tool (or composition of primitives) lets the agent achieve the SAME outcome — not a 1:1 button-to-tool mapping. The anti-pattern is an "orphan UI action": something a user can do that the agent cannot achieve.`,
56
+ },
57
+ 'tools-as-primitives': {
58
+ title: 'Tools as Primitives',
59
+ tenet: 'Tools provide capability, not behavior.',
60
+ weight: 2,
61
+ denom: 'count of agent tools; numerator = those that are proper primitives (not workflow-shaped)',
62
+ task: `Find and read ALL agent tool files. Classify each tool as PRIMITIVE (good — read/write/store/list/bash: enables capability without business logic) or WORKFLOW (bad — encodes business logic, makes decisions, orchestrates a choreographed sequence). The cardinal sin is a tool like process_feedback that categorizes/prioritizes/notifies internally: that is the agent executing your code instead of figuring things out. Flag every workflow-shaped tool that should be decomposed into primitives.`,
63
+ },
64
+ 'context-injection': {
65
+ title: 'Context Injection',
66
+ tenet: 'System prompt includes dynamic context about app state.',
67
+ weight: 2,
68
+ denom: 'count of expected runtime context types; numerator = those actually injected',
69
+ task: `Find context-injection code (search for "context", "system prompt", "inject"). Read agent prompts and system messages. Enumerate what IS injected versus what SHOULD be: available resources (files, drafts, documents, data types), user preferences/settings, recent activity, the available-capabilities list (tools documented in user vocabulary), session history, and workspace state. The anti-pattern is "context starvation" — the agent does not know what resources exist in the app, so it asks "what feed?" instead of acting.`,
70
+ },
71
+ 'shared-workspace': {
72
+ title: 'Shared Workspace',
73
+ tenet: 'Agent and user work in the same data space.',
74
+ weight: 2,
75
+ denom: 'count of data stores/tables/models; numerator = those the agent shares with the user (not isolated)',
76
+ task: `Identify all data stores / tables / models. For each, check whether the agent reads/writes the SAME store the user does, or a separate one. The anti-pattern is "sandbox isolation": the agent has its own data space (e.g. agent_output/ alongside user_files/) so its work never lands where the user sees it. Score how many stores are genuinely shared.`,
77
+ },
78
+ 'crud-completeness': {
79
+ title: 'CRUD Completeness',
80
+ tenet: 'Every entity has full CRUD (Create, Read, Update, Delete).',
81
+ weight: 2,
82
+ denom: 'count of entities/models; numerator = those with all four agent CRUD operations',
83
+ task: `Identify all entities/models in the codebase. For EACH entity, check whether agent tools exist for Create, Read, Update, AND Delete. The anti-pattern is incomplete CRUD — the agent can create a journal entry but has no tool to update or delete it ("I don't have a tool for that"). Score per entity (full CRUD or not) and overall; list every entity's missing operations.`,
84
+ },
85
+ 'ui-integration': {
86
+ title: 'UI Integration',
87
+ tenet: 'Agent actions are immediately reflected in the UI.',
88
+ weight: 2,
89
+ denom: 'count of agent write/mutation paths; numerator = those that propagate to the UI immediately',
90
+ task: `Check how agent writes/changes propagate to the frontend. Look for streaming updates (SSE, WebSocket), polling, shared state/services with reactive binding, event buses, or file watching. The anti-pattern is "silent actions": the agent changes state but the UI does not update, so the user never sees the result. Score how many agent mutation paths surface immediately in the UI.`,
91
+ },
92
+ 'capability-discovery': {
93
+ title: 'Capability Discovery',
94
+ tenet: 'Users can discover what the agent can do.',
95
+ weight: 1,
96
+ denom: '7 discovery mechanisms (FIXED denominator)',
97
+ task: `Check for these SEVEN discovery mechanisms and score against all 7: (1) onboarding flow showing agent capabilities, (2) help documentation, (3) capability hints in the UI, (4) the agent self-describing in its responses, (5) suggested prompts/actions, (6) empty-state guidance, (7) slash commands such as /help or /tools. The denominator is always 7. Rate the quality of each that exists.`,
98
+ },
99
+ 'prompt-native': {
100
+ title: 'Prompt-Native Features',
101
+ tenet: 'Features are prompts defining outcomes, not code.',
102
+ weight: 1,
103
+ denom: 'count of features/behaviors; numerator = those defined in prompts (not hardcoded)',
104
+ task: `Read all agent prompts. Classify each feature/behavior as defined in a PROMPT (good — outcomes described in natural language, behavior changes via prompt edit) or in CODE (bad — business logic hardcoded, behavior changes require a refactor). The test: to change how a feature behaves, do you edit prose or refactor code? Flag every code-defined feature that should be prompt-native.`,
105
+ },
106
+ }
107
+
108
+ // Selector → principle key. Faithful to SKILL.md §"Valid arguments". A bare or
109
+ // unrecognized selector means "run all 8".
110
+ const SELECTOR_TO_KEY = {
111
+ '1': 'action-parity', 'action parity': 'action-parity', 'parity': 'action-parity', 'action-parity': 'action-parity',
112
+ '2': 'tools-as-primitives', 'tools': 'tools-as-primitives', 'primitives': 'tools-as-primitives', 'tools-as-primitives': 'tools-as-primitives',
113
+ '3': 'context-injection', 'context': 'context-injection', 'injection': 'context-injection', 'context-injection': 'context-injection',
114
+ '4': 'shared-workspace', 'shared': 'shared-workspace', 'workspace': 'shared-workspace', 'shared-workspace': 'shared-workspace',
115
+ '5': 'crud-completeness', 'crud': 'crud-completeness', 'crud-completeness': 'crud-completeness',
116
+ '6': 'ui-integration', 'ui': 'ui-integration', 'integration': 'ui-integration', 'ui-integration': 'ui-integration',
117
+ '7': 'capability-discovery', 'discovery': 'capability-discovery', 'capability-discovery': 'capability-discovery',
118
+ '8': 'prompt-native', 'prompt': 'prompt-native', 'features': 'prompt-native', 'prompt-native': 'prompt-native',
119
+ }
120
+
121
+ function selectPrinciples(raw) {
122
+ const key = SELECTOR_TO_KEY[String(raw).trim().toLowerCase()]
123
+ return key ? [key] : Object.keys(PRINCIPLES)
124
+ }
125
+
126
+ // ---------------------------------------------------------------------------
127
+ // Schemas — validated at the tool-call layer, so agents retry on mismatch.
128
+ // additionalProperties:false everywhere: agents return DATA, not prose.
129
+ // ---------------------------------------------------------------------------
130
+ const AUDIT_SCHEMA = {
131
+ type: 'object',
132
+ required: ['scorePct', 'numerator', 'denominator', 'denominatorMeaning', 'summary', 'instances', 'gaps', 'recommendations'],
133
+ additionalProperties: false,
134
+ properties: {
135
+ scorePct: { type: 'integer', minimum: 0, maximum: 100, description: '0-100 compliance sub-score = round(100 * numerator / denominator)' },
136
+ numerator: { type: 'integer', minimum: 0, description: 'count satisfying the principle (e.g. user actions with a matching agent tool)' },
137
+ denominator: { type: 'integer', minimum: 0, description: 'total counted (e.g. user actions found); 0 only when the principle is not applicable to this codebase' },
138
+ denominatorMeaning: { type: 'string', description: 'what the X/Y counts in this codebase' },
139
+ summary: { type: 'string', description: 'one-paragraph verdict for this principle' },
140
+ instances: {
141
+ type: 'array',
142
+ description: 'the enumerated rows (user actions, tools, entities, stores, mechanisms, …) the score is computed over',
143
+ items: {
144
+ type: 'object',
145
+ required: ['name', 'location', 'compliant'],
146
+ additionalProperties: false,
147
+ properties: {
148
+ name: { type: 'string', description: 'the action / tool / entity / store / mechanism' },
149
+ location: { type: 'string', description: 'file path or area where it lives' },
150
+ compliant: { type: 'boolean', description: 'does this instance satisfy the principle?' },
151
+ note: { type: 'string', description: 'e.g. matched agent tool, missing CRUD op, isolated store, …' },
152
+ },
153
+ },
154
+ },
155
+ gaps: {
156
+ type: 'array',
157
+ description: 'specific anti-pattern instances (orphan UI action, workflow-shaped tool, silent action, missing CRUD op, isolated store, …)',
158
+ items: {
159
+ type: 'object',
160
+ required: ['gap', 'severity'],
161
+ additionalProperties: false,
162
+ properties: {
163
+ gap: { type: 'string' },
164
+ location: { type: 'string' },
165
+ severity: { type: 'string', enum: ['high', 'medium', 'low'] },
166
+ },
167
+ },
168
+ },
169
+ recommendations: {
170
+ type: 'array',
171
+ description: 'concrete fixes to raise this sub-score',
172
+ items: {
173
+ type: 'object',
174
+ required: ['action', 'impact', 'effort'],
175
+ additionalProperties: false,
176
+ properties: {
177
+ action: { type: 'string', description: 'imperative fix, e.g. "add delete_note tool"' },
178
+ impact: { type: 'string', enum: ['high', 'medium', 'low'] },
179
+ effort: { type: 'string', enum: ['high', 'medium', 'low'] },
180
+ },
181
+ },
182
+ },
183
+ },
184
+ }
185
+
186
+ const SYNTH_SCHEMA = {
187
+ type: 'object',
188
+ required: ['narrative', 'strengths', 'topRecommendations'],
189
+ additionalProperties: false,
190
+ properties: {
191
+ narrative: { type: 'string', description: 'executive verdict on overall agent-native maturity' },
192
+ strengths: {
193
+ type: 'array',
194
+ description: "what's working excellently (top strengths across all principles)",
195
+ items: { type: 'string' },
196
+ },
197
+ topRecommendations: {
198
+ type: 'array',
199
+ description: 'Top-10 recommendations ranked by impact across all principles',
200
+ items: {
201
+ type: 'object',
202
+ required: ['priority', 'action', 'principle', 'effort'],
203
+ additionalProperties: false,
204
+ properties: {
205
+ priority: { type: 'integer', minimum: 1, description: '1 = highest impact' },
206
+ action: { type: 'string' },
207
+ principle: { type: 'string', description: 'which principle this raises' },
208
+ effort: { type: 'string', enum: ['high', 'medium', 'low'] },
209
+ },
210
+ },
211
+ },
212
+ },
213
+ }
214
+
215
+ // ---------------------------------------------------------------------------
216
+ // Prompt builders.
217
+ // ---------------------------------------------------------------------------
218
+ const targetClause = projectLabel
219
+ ? `Project under review: "${projectLabel}". Audit the codebase at the current working directory.`
220
+ : `Audit the codebase at the current working directory.`
221
+
222
+ function auditPrompt(key) {
223
+ const p = PRINCIPLES[key]
224
+ return `You are a read-only agent-native architecture auditor for ONE principle: ${p.title} — "${p.tenet}"
225
+ ${targetClause}
226
+
227
+ Your task:
228
+ ${p.task}
229
+
230
+ Enumerate exhaustively (do NOT sample — read the actual source: API service files, route/component files, agent tool definitions, system prompts, data models/migrations, UI update plumbing — whichever this principle requires). Then produce a SPECIFIC numeric score.
231
+
232
+ Scoring contract:
233
+ - denominator = ${p.denom}.
234
+ - numerator = the subset that satisfies the principle.
235
+ - scorePct = round(100 * numerator / denominator). If denominator is 0 (principle genuinely not applicable to this codebase), set scorePct 0 and say so in summary.
236
+ - "instances" must contain the enumerated rows the score is computed over, each marked compliant true/false.
237
+ - "gaps" must call out the concrete anti-pattern instances by name and location.
238
+ - "recommendations" must be concrete, imperative fixes with impact + effort.
239
+
240
+ Be precise and conservative: every count must be defensible against the real code. Return the structured audit object.`
241
+ }
242
+
243
+ function synthPrompt(audits) {
244
+ // Pass the auditors' DATA (scores, gaps, recs) to the synthesizer as the
245
+ // material for the executive report. No untrusted shell argv here — this
246
+ // agent only reasons and returns structured data.
247
+ const lines = audits.map(
248
+ (a) =>
249
+ `- ${a.title}: ${a.scorePct}% (${a.numerator}/${a.denominator} — ${a.denominatorMeaning}). ` +
250
+ `Gaps: ${a.gaps.length}. Top rec: ${a.recommendations[0]?.action || '(none)'}.`,
251
+ )
252
+ return `You are synthesizing an agent-native architecture review from completed per-principle audits.
253
+ ${targetClause}
254
+
255
+ Per-principle results:
256
+ ${lines.join('\n')}
257
+
258
+ Full per-principle detail (instances, gaps, recommendations) is in the audit data you have been given. Produce:
259
+ 1. narrative — an executive verdict on overall agent-native maturity, grounded in the scores above (parity is foundational: "without it, nothing else matters").
260
+ 2. strengths — the top things working excellently across principles.
261
+ 3. topRecommendations — the Top-10 fixes ranked by impact (priority 1 = highest), each tagged with the principle it raises and an effort estimate. Front-load high-impact / low-effort wins.
262
+
263
+ Return the structured synthesis object. Do not restate every audit row — distill.`
264
+ }
265
+
266
+ // ---------------------------------------------------------------------------
267
+ // Helpers (self-contained; no imports).
268
+ // ---------------------------------------------------------------------------
269
+ // Status tier per SKILL.md §"Status Legend": ✅ ≥80, ⚠️ 50-79, ❌ <50.
270
+ function statusTier(pct) {
271
+ if (pct >= 80) return 'excellent'
272
+ if (pct >= 50) return 'partial'
273
+ return 'needs-work'
274
+ }
275
+
276
+ // Budget floor: reserve headroom for the synthesis agent so a long audit
277
+ // fan-out never starves the report. NEVER silently skip — log if we degrade.
278
+ const SYNTH_FLOOR = 40_000 // output tokens to reserve past the audit fan-out
279
+ function synthBudgetOk() {
280
+ return !budget.total || budget.remaining() > SYNTH_FLOOR
281
+ }
282
+
283
+ // Weighted overall score: each principle contributes scorePct * weight. Parity
284
+ // is weighted heaviest because the source skill makes it foundational. An audit
285
+ // with denominator 0 (not applicable) is excluded from the weighting so an
286
+ // inapplicable principle does not drag the score to zero.
287
+ function weightedOverall(audits) {
288
+ let num = 0
289
+ let den = 0
290
+ for (const a of audits) {
291
+ if (a.denominator === 0) continue
292
+ const w = PRINCIPLES[a.key].weight
293
+ num += a.scorePct * w
294
+ den += w
295
+ }
296
+ return den ? Math.round(num / den) : 0
297
+ }
298
+
299
+ // ---------------------------------------------------------------------------
300
+ // Run.
301
+ // ---------------------------------------------------------------------------
302
+ phase('Scope')
303
+ const keys = selectPrinciples(principleArg)
304
+ const singlePrinciple = keys.length === 1
305
+ // Budget disclosure / count confirmation (hr-autonomous-loop-skill-api-budget-disclosure):
306
+ // the auditor fan-out count is fixed by the selector and surfaced before fan-out.
307
+ log(
308
+ `Agent-native audit scope: ${keys.length} principle auditor(s)` +
309
+ `${singlePrinciple ? ` (single: ${PRINCIPLES[keys[0]].title})` : ' (full 8-principle pass)'} ` +
310
+ `→ ${keys.length} Explore agent(s) + 1 synthesis = ${keys.length + 1} agents billed to the session key. ` +
311
+ `Principles: ${keys.map((k) => PRINCIPLES[k].title).join(', ')}.`,
312
+ )
313
+
314
+ // Audit: 8 (or 1) Explore auditors in parallel — BARRIER. Each returns its
315
+ // 0-100 sub-score + findings. A failed auditor becomes null → filter(Boolean).
316
+ phase('Audit')
317
+ const auditResults = (
318
+ await parallel(
319
+ keys.map((key) => () =>
320
+ agent(auditPrompt(key), {
321
+ label: `audit:${key}`,
322
+ phase: 'Audit',
323
+ schema: AUDIT_SCHEMA,
324
+ agentType: 'Explore', // SKILL.md Step 2: subagent_type: Explore
325
+ }).then((r) => (r ? { key, title: PRINCIPLES[key].title, tenet: PRINCIPLES[key].tenet, ...r } : null)),
326
+ ),
327
+ )
328
+ ).filter(Boolean)
329
+
330
+ const failed = keys.filter((k) => !auditResults.some((a) => a.key === k))
331
+ if (failed.length) {
332
+ log(`⚠ ${failed.length} auditor(s) did not return: ${failed.map((k) => PRINCIPLES[k].title).join(', ')} — excluded from the overall score.`)
333
+ }
334
+
335
+ // Per-principle scoreboard (deterministic; the SCRIPT owns the tiering + weighting).
336
+ const scoreboard = auditResults
337
+ .map((a) => ({
338
+ principle: a.title,
339
+ tenet: a.tenet,
340
+ scorePct: a.scorePct,
341
+ score: `${a.numerator}/${a.denominator}`,
342
+ status: statusTier(a.scorePct),
343
+ gapCount: a.gaps.length,
344
+ }))
345
+ // Stable, deterministic order: worst score first (most actionable on top), then by title.
346
+ .sort((x, y) => x.scorePct - y.scorePct || x.principle.localeCompare(y.principle))
347
+
348
+ const overallPct = weightedOverall(auditResults)
349
+ const overallStatus = statusTier(overallPct)
350
+
351
+ // Synthesize: one agent distills the executive report. Budget-floored so the
352
+ // fan-out never starves it; degrade to a deterministic summary if floored.
353
+ phase('Synthesize')
354
+ let synthesis = null
355
+ if (auditResults.length && synthBudgetOk()) {
356
+ synthesis = await agent(synthPrompt(auditResults), { label: 'synthesize', phase: 'Synthesize', schema: SYNTH_SCHEMA })
357
+ }
358
+ if (!synthesis) {
359
+ // Deterministic fallback so the report is always complete: rank every
360
+ // recommendation across principles by impact (high>medium>low) and take 10.
361
+ const impactRank = { high: 0, medium: 1, low: 2 }
362
+ const flat = []
363
+ for (const a of auditResults) {
364
+ for (const r of a.recommendations) flat.push({ ...r, principle: a.title })
365
+ }
366
+ flat.sort((x, y) => impactRank[x.impact] - impactRank[y.impact] || impactRank[x.effort] - impactRank[y.effort])
367
+ synthesis = {
368
+ narrative: !auditResults.length
369
+ ? 'No auditors returned results.'
370
+ : `Deterministic synthesis (synthesis agent unavailable or budget-floored). Weighted overall agent-native score: ${overallPct}% (${overallStatus}).`,
371
+ strengths: auditResults
372
+ .filter((a) => a.scorePct >= 80)
373
+ .map((a) => `${a.title}: ${a.scorePct}% — ${a.summary}`),
374
+ topRecommendations: flat.slice(0, 10).map((r, i) => ({ priority: i + 1, action: r.action, principle: r.principle, effort: r.effort })),
375
+ }
376
+ }
377
+
378
+ // ---------------------------------------------------------------------------
379
+ // Return a structured summary (counts + what was done/verified).
380
+ // ---------------------------------------------------------------------------
381
+ const report = {
382
+ project: projectLabel || '(current working directory)',
383
+ mode: singlePrinciple ? `single-principle: ${PRINCIPLES[keys[0]].title}` : 'full 8-principle audit',
384
+ overall: { scorePct: overallPct, status: overallStatus },
385
+ statusLegend: { excellent: '≥80%', partial: '50-79%', needsWork: '<50%' },
386
+ scoreboard,
387
+ counts: {
388
+ principlesRequested: keys.length,
389
+ auditorsReturned: auditResults.length,
390
+ auditorsFailed: failed.length,
391
+ totalInstancesEnumerated: auditResults.reduce((n, a) => n + a.instances.length, 0),
392
+ totalGaps: auditResults.reduce((n, a) => n + a.gaps.length, 0),
393
+ totalRecommendations: auditResults.reduce((n, a) => n + a.recommendations.length, 0),
394
+ excellent: scoreboard.filter((s) => s.status === 'excellent').length,
395
+ partial: scoreboard.filter((s) => s.status === 'partial').length,
396
+ needsWork: scoreboard.filter((s) => s.status === 'needs-work').length,
397
+ },
398
+ narrative: synthesis.narrative,
399
+ strengths: synthesis.strengths,
400
+ topRecommendations: synthesis.topRecommendations,
401
+ // Full per-principle detail for drill-down.
402
+ audits: auditResults.map((a) => ({
403
+ principle: a.title,
404
+ tenet: a.tenet,
405
+ scorePct: a.scorePct,
406
+ score: `${a.numerator}/${a.denominator}`,
407
+ denominatorMeaning: a.denominatorMeaning,
408
+ status: statusTier(a.scorePct),
409
+ summary: a.summary,
410
+ instances: a.instances,
411
+ gaps: a.gaps,
412
+ recommendations: a.recommendations,
413
+ })),
414
+ budget: { total: budget.total, spent: budget.spent() },
415
+ }
416
+
417
+ log(
418
+ `Done: ${auditResults.length}/${keys.length} principle audits → overall ${overallPct}% (${overallStatus}). ` +
419
+ `${report.counts.excellent} excellent / ${report.counts.partial} partial / ${report.counts.needsWork} needs-work, ` +
420
+ `${report.counts.totalGaps} gaps, ${report.counts.totalRecommendations} recommendations.`,
421
+ )
422
+
423
+ return report
@@ -0,0 +1,189 @@
1
+ ---
2
+ name: andrew-kane-gem-writer
3
+ description: "This skill should be used when writing Ruby gems following Andrew Kane's patterns. It applies when creating new gems, refactoring existing gems, or designing gem APIs with clean, minimal, production-ready code."
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
+ # Andrew Kane Gem Writer
11
+
12
+ Write Ruby gems following Andrew Kane's battle-tested patterns from 100+ gems with 374M+ downloads (Searchkick, PgHero, Chartkick, Strong Migrations, Lockbox, Ahoy, Blazer, Groupdate, Neighbor, Blind Index).
13
+
14
+ ## Core Philosophy
15
+
16
+ **Simplicity over cleverness.** Zero or minimal dependencies. Explicit code over metaprogramming. Rails integration without Rails coupling. Every pattern serves production use cases.
17
+
18
+ ## Entry Point Structure
19
+
20
+ Every gem follows this exact pattern in `lib/gemname.rb`:
21
+
22
+ ```ruby
23
+ # 1. Dependencies (stdlib preferred)
24
+ require "forwardable"
25
+
26
+ # 2. Internal modules
27
+ require_relative "gemname/model"
28
+ require_relative "gemname/version"
29
+
30
+ # 3. Conditional Rails (CRITICAL - never require Rails directly)
31
+ require_relative "gemname/railtie" if defined?(Rails)
32
+
33
+ # 4. Module with config and errors
34
+ module GemName
35
+ class Error < StandardError; end
36
+ class InvalidConfigError < Error; end
37
+
38
+ class << self
39
+ attr_accessor :timeout, :logger
40
+ attr_writer :client
41
+ end
42
+
43
+ self.timeout = 10 # Defaults set immediately
44
+ end
45
+ ```
46
+
47
+ ## Class Macro DSL Pattern
48
+
49
+ The signature Kane pattern—single method call configures everything:
50
+
51
+ ```ruby
52
+ # Usage
53
+ class Product < ApplicationRecord
54
+ searchkick word_start: [:name]
55
+ end
56
+
57
+ # Implementation
58
+ module GemName
59
+ module Model
60
+ def gemname(**options)
61
+ unknown = options.keys - KNOWN_KEYWORDS
62
+ raise ArgumentError, "unknown keywords: #{unknown.join(", ")}" if unknown.any?
63
+
64
+ mod = Module.new
65
+ mod.module_eval do
66
+ define_method :some_method do
67
+ # implementation
68
+ end unless method_defined?(:some_method)
69
+ end
70
+ include mod
71
+
72
+ class_eval do
73
+ cattr_reader :gemname_options, instance_reader: false
74
+ class_variable_set :@@gemname_options, options.dup
75
+ end
76
+ end
77
+ end
78
+ end
79
+ ```
80
+
81
+ ## Rails Integration
82
+
83
+ **Always use `ActiveSupport.on_load`—never require Rails gems directly:**
84
+
85
+ ```ruby
86
+ # WRONG
87
+ require "active_record"
88
+ ActiveRecord::Base.include(MyGem::Model)
89
+
90
+ # CORRECT
91
+ ActiveSupport.on_load(:active_record) do
92
+ extend GemName::Model
93
+ end
94
+
95
+ # Use prepend for behavior modification
96
+ ActiveSupport.on_load(:active_record) do
97
+ ActiveRecord::Migration.prepend(GemName::Migration)
98
+ end
99
+ ```
100
+
101
+ ## Configuration Pattern
102
+
103
+ Use `class << self` with `attr_accessor`, not Configuration objects:
104
+
105
+ ```ruby
106
+ module GemName
107
+ class << self
108
+ attr_accessor :timeout, :logger
109
+ attr_writer :master_key
110
+ end
111
+
112
+ def self.master_key
113
+ @master_key ||= ENV["GEMNAME_MASTER_KEY"]
114
+ end
115
+
116
+ self.timeout = 10
117
+ self.logger = nil
118
+ end
119
+ ```
120
+
121
+ ## Error Handling
122
+
123
+ Simple hierarchy with informative messages:
124
+
125
+ ```ruby
126
+ module GemName
127
+ class Error < StandardError; end
128
+ class ConfigError < Error; end
129
+ class ValidationError < Error; end
130
+ end
131
+
132
+ # Validate early with ArgumentError
133
+ def initialize(key:)
134
+ raise ArgumentError, "Key must be 32 bytes" unless key&.bytesize == 32
135
+ end
136
+ ```
137
+
138
+ ## Testing (Minitest Only)
139
+
140
+ ```ruby
141
+ # test/test_helper.rb
142
+ require "bundler/setup"
143
+ Bundler.require(:default)
144
+ require "minitest/autorun"
145
+ require "minitest/pride"
146
+
147
+ # test/model_test.rb
148
+ class ModelTest < Minitest::Test
149
+ def test_basic_functionality
150
+ assert_equal expected, actual
151
+ end
152
+ end
153
+ ```
154
+
155
+ ## Gemspec Pattern
156
+
157
+ Zero runtime dependencies when possible:
158
+
159
+ ```ruby
160
+ Gem::Specification.new do |spec|
161
+ spec.name = "gemname"
162
+ spec.version = GemName::VERSION
163
+ spec.required_ruby_version = ">= 3.1"
164
+ spec.files = Dir["*.{md,txt}", "{lib}/**/*"]
165
+ spec.require_path = "lib"
166
+ # NO add_dependency lines - dev deps go in Gemfile
167
+ end
168
+ ```
169
+
170
+ ## Anti-Patterns to Avoid
171
+
172
+ - `method_missing` (use `define_method` instead)
173
+ - Configuration objects (use class accessors)
174
+ - `@@class_variables` (use `class << self`)
175
+ - Requiring Rails gems directly
176
+ - Many runtime dependencies
177
+ - Committing Gemfile.lock in gems
178
+ - RSpec (use Minitest)
179
+ - Heavy DSLs (prefer explicit Ruby)
180
+
181
+ ## Reference Files
182
+
183
+ For deeper patterns, see:
184
+
185
+ - **[references/module-organization.md](references/module-organization.md)** - Directory layouts, method decomposition
186
+ - **[references/rails-integration.md](references/rails-integration.md)** - Railtie, Engine, on_load patterns
187
+ - **[references/database-adapters.md](references/database-adapters.md)** - Multi-database support patterns
188
+ - **[references/testing-patterns.md](references/testing-patterns.md)** - Multi-version testing, CI setup
189
+ - **[references/resources.md](references/resources.md)** - Links to Kane's repos and articles