gentyr 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. package/.claude/agents/antipattern-hunter.md +176 -0
  2. package/.claude/agents/code-reviewer.md +205 -0
  3. package/.claude/agents/code-writer.md +154 -0
  4. package/.claude/agents/deputy-cto.md +309 -0
  5. package/.claude/agents/feedback-agent.md +101 -0
  6. package/.claude/agents/investigator.md +136 -0
  7. package/.claude/agents/product-manager.md +97 -0
  8. package/.claude/agents/project-manager.md +116 -0
  9. package/.claude/agents/repo-hygiene-expert.md +626 -0
  10. package/.claude/agents/secret-manager.md +324 -0
  11. package/.claude/agents/test-writer.md +354 -0
  12. package/.claude/commands/configure-personas.md +144 -0
  13. package/.claude/commands/cto-report.md +36 -0
  14. package/.claude/commands/demo.md +89 -0
  15. package/.claude/commands/deputy-cto.md +345 -0
  16. package/.claude/commands/hotfix.md +31 -0
  17. package/.claude/commands/overdrive-gentyr.md +167 -0
  18. package/.claude/commands/product-manager.md +32 -0
  19. package/.claude/commands/push-migrations.md +86 -0
  20. package/.claude/commands/push-secrets.md +97 -0
  21. package/.claude/commands/services.json.example +30 -0
  22. package/.claude/commands/setup-gentyr.md +396 -0
  23. package/.claude/commands/show.md +42 -0
  24. package/.claude/commands/spawn-tasks.md +79 -0
  25. package/.claude/commands/toggle-automation-gentyr.md +75 -0
  26. package/.claude/commands/toggle-product-manager.md +19 -0
  27. package/.claude/commands/triage.md +69 -0
  28. package/.claude/hooks/README.md +686 -0
  29. package/.claude/hooks/__tests__/README.md +129 -0
  30. package/.claude/hooks/agent-tracker.js +434 -0
  31. package/.claude/hooks/antipattern-hunter-hook.js +401 -0
  32. package/.claude/hooks/api-key-watcher.js +289 -0
  33. package/.claude/hooks/block-no-verify.js +301 -0
  34. package/.claude/hooks/bypass-approval-hook.js +313 -0
  35. package/.claude/hooks/compliance-checker.js +1309 -0
  36. package/.claude/hooks/config-reader.js +143 -0
  37. package/.claude/hooks/credential-file-guard.js +1139 -0
  38. package/.claude/hooks/credential-health-check.js +168 -0
  39. package/.claude/hooks/credential-sync-hook.js +79 -0
  40. package/.claude/hooks/cto-notification-hook.js +656 -0
  41. package/.claude/hooks/feedback-launcher.js +424 -0
  42. package/.claude/hooks/feedback-orchestrator.js +367 -0
  43. package/.claude/hooks/gentyr-splash.js +47 -0
  44. package/.claude/hooks/gentyr-sync.js +389 -0
  45. package/.claude/hooks/hourly-automation.js +3340 -0
  46. package/.claude/hooks/key-sync.js +899 -0
  47. package/.claude/hooks/lib/approval-utils.js +731 -0
  48. package/.claude/hooks/lib/feature-branch-helper.js +102 -0
  49. package/.claude/hooks/lib/worktree-manager.js +330 -0
  50. package/.claude/hooks/mapping-validator.js +285 -0
  51. package/.claude/hooks/plan-executor.js +398 -0
  52. package/.claude/hooks/playwright-cli-guard.js +104 -0
  53. package/.claude/hooks/playwright-health-check.js +71 -0
  54. package/.claude/hooks/pre-commit-review.js +725 -0
  55. package/.claude/hooks/prompts/local-spec-enforcement.md +310 -0
  56. package/.claude/hooks/prompts/mapping-fix.md +92 -0
  57. package/.claude/hooks/prompts/mapping-review.md +140 -0
  58. package/.claude/hooks/prompts/schema-mapper.md +185 -0
  59. package/.claude/hooks/prompts/spec-enforcement.md +233 -0
  60. package/.claude/hooks/protected-action-approval-hook.js +336 -0
  61. package/.claude/hooks/protected-action-gate.js +562 -0
  62. package/.claude/hooks/protected-actions.json +208 -0
  63. package/.claude/hooks/protected-actions.json.template +122 -0
  64. package/.claude/hooks/quota-monitor.js +490 -0
  65. package/.claude/hooks/reporters/jest-failure-reporter.js +401 -0
  66. package/.claude/hooks/reporters/playwright-failure-reporter.js +446 -0
  67. package/.claude/hooks/reporters/vitest-failure-reporter.js +443 -0
  68. package/.claude/hooks/schema-mapper-hook.js +544 -0
  69. package/.claude/hooks/secret-leak-detector.js +216 -0
  70. package/.claude/hooks/session-reviver.js +514 -0
  71. package/.claude/hooks/slash-command-prefetch.js +1145 -0
  72. package/.claude/hooks/stale-work-detector.js +205 -0
  73. package/.claude/hooks/stop-continue-hook.js +414 -0
  74. package/.claude/hooks/todo-maintenance.js +522 -0
  75. package/.claude/hooks/todo-processing-prompt.md +75 -0
  76. package/.claude/hooks/usage-optimizer.js +791 -0
  77. package/.claude/mcp/README.md +246 -0
  78. package/.claude/settings.json.template +168 -0
  79. package/.mcp.json.template +207 -0
  80. package/CLAUDE.md +340 -0
  81. package/CLAUDE.md.gentyr-section +89 -0
  82. package/LICENSE +21 -0
  83. package/README.md +297 -0
  84. package/cli/commands/init.js +471 -0
  85. package/cli/commands/migrate.js +132 -0
  86. package/cli/commands/protect.js +271 -0
  87. package/cli/commands/scaffold.js +48 -0
  88. package/cli/commands/status.js +133 -0
  89. package/cli/commands/sync.js +101 -0
  90. package/cli/commands/uninstall.js +207 -0
  91. package/cli/index.js +111 -0
  92. package/cli/lib/config-gen.js +214 -0
  93. package/cli/lib/resolve-framework.js +97 -0
  94. package/cli/lib/state.js +140 -0
  95. package/cli/lib/symlinks.js +260 -0
  96. package/docs/AUTOMATION-SYSTEMS.md +484 -0
  97. package/docs/BINARY-PATCHING.md +212 -0
  98. package/docs/CHANGELOG.md +2830 -0
  99. package/docs/CREDENTIAL-DETECTION.md +151 -0
  100. package/docs/CTO-DASHBOARD.md +476 -0
  101. package/docs/DEPLOYMENT-FLOW.md +477 -0
  102. package/docs/DEVELOPER.md +116 -0
  103. package/docs/Executive.md +372 -0
  104. package/docs/SECRET-PATHS.md +77 -0
  105. package/docs/SETUP-GUIDE.md +419 -0
  106. package/docs/STACK.md +109 -0
  107. package/docs/TESTING.md +440 -0
  108. package/docs/assets/claude-logo.svg +3 -0
  109. package/docs/sessions/2026-01-24-spec-suite-implementation.md +190 -0
  110. package/docs/sessions/2026-02-15-feedback-e2e-audit.md +484 -0
  111. package/docs/sessions/2026-02-20-credential-rotation-experiments.md +340 -0
  112. package/docs/sessions/TEST-COVERAGE-REPORT-2026-02-20.md +168 -0
  113. package/docs/shared/EPHEMERAL-STATE-FILES.md +115 -0
  114. package/docs/shared/PROTECTION-SYSTEM.md +341 -0
  115. package/husky/post-commit +10 -0
  116. package/husky/pre-commit +40 -0
  117. package/husky/pre-push +94 -0
  118. package/package.json +43 -0
  119. package/packages/cto-dashboard/package-lock.json +3510 -0
  120. package/packages/cto-dashboard/package.json +41 -0
  121. package/packages/cto-dashboard/pnpm-lock.yaml +2168 -0
  122. package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts +220 -0
  123. package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts.map +1 -0
  124. package/packages/mcp-servers/dist/__testUtils__/fixtures.js +376 -0
  125. package/packages/mcp-servers/dist/__testUtils__/fixtures.js.map +1 -0
  126. package/packages/mcp-servers/dist/__testUtils__/index.d.ts +121 -0
  127. package/packages/mcp-servers/dist/__testUtils__/index.d.ts.map +1 -0
  128. package/packages/mcp-servers/dist/__testUtils__/index.js +180 -0
  129. package/packages/mcp-servers/dist/__testUtils__/index.js.map +1 -0
  130. package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts +84 -0
  131. package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts.map +1 -0
  132. package/packages/mcp-servers/dist/__testUtils__/schemas.js +309 -0
  133. package/packages/mcp-servers/dist/__testUtils__/schemas.js.map +1 -0
  134. package/packages/mcp-servers/dist/agent-reports/index.d.ts +7 -0
  135. package/packages/mcp-servers/dist/agent-reports/index.d.ts.map +1 -0
  136. package/packages/mcp-servers/dist/agent-reports/index.js +8 -0
  137. package/packages/mcp-servers/dist/agent-reports/index.js.map +1 -0
  138. package/packages/mcp-servers/dist/agent-reports/server.d.ts +22 -0
  139. package/packages/mcp-servers/dist/agent-reports/server.d.ts.map +1 -0
  140. package/packages/mcp-servers/dist/agent-reports/server.js +535 -0
  141. package/packages/mcp-servers/dist/agent-reports/server.js.map +1 -0
  142. package/packages/mcp-servers/dist/agent-reports/types.d.ts +258 -0
  143. package/packages/mcp-servers/dist/agent-reports/types.d.ts.map +1 -0
  144. package/packages/mcp-servers/dist/agent-reports/types.js +81 -0
  145. package/packages/mcp-servers/dist/agent-reports/types.js.map +1 -0
  146. package/packages/mcp-servers/dist/agent-tracker/index.d.ts +5 -0
  147. package/packages/mcp-servers/dist/agent-tracker/index.d.ts.map +1 -0
  148. package/packages/mcp-servers/dist/agent-tracker/index.js +5 -0
  149. package/packages/mcp-servers/dist/agent-tracker/index.js.map +1 -0
  150. package/packages/mcp-servers/dist/agent-tracker/server.d.ts +12 -0
  151. package/packages/mcp-servers/dist/agent-tracker/server.d.ts.map +1 -0
  152. package/packages/mcp-servers/dist/agent-tracker/server.js +919 -0
  153. package/packages/mcp-servers/dist/agent-tracker/server.js.map +1 -0
  154. package/packages/mcp-servers/dist/agent-tracker/types.d.ts +328 -0
  155. package/packages/mcp-servers/dist/agent-tracker/types.d.ts.map +1 -0
  156. package/packages/mcp-servers/dist/agent-tracker/types.js +128 -0
  157. package/packages/mcp-servers/dist/agent-tracker/types.js.map +1 -0
  158. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts +27 -0
  159. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts.map +1 -0
  160. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js +167 -0
  161. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js.map +1 -0
  162. package/packages/mcp-servers/dist/chrome-bridge/index.d.ts +6 -0
  163. package/packages/mcp-servers/dist/chrome-bridge/index.d.ts.map +1 -0
  164. package/packages/mcp-servers/dist/chrome-bridge/index.js +6 -0
  165. package/packages/mcp-servers/dist/chrome-bridge/index.js.map +1 -0
  166. package/packages/mcp-servers/dist/chrome-bridge/server.d.ts +13 -0
  167. package/packages/mcp-servers/dist/chrome-bridge/server.d.ts.map +1 -0
  168. package/packages/mcp-servers/dist/chrome-bridge/server.js +959 -0
  169. package/packages/mcp-servers/dist/chrome-bridge/server.js.map +1 -0
  170. package/packages/mcp-servers/dist/chrome-bridge/types.d.ts +41 -0
  171. package/packages/mcp-servers/dist/chrome-bridge/types.d.ts.map +1 -0
  172. package/packages/mcp-servers/dist/chrome-bridge/types.js +8 -0
  173. package/packages/mcp-servers/dist/chrome-bridge/types.js.map +1 -0
  174. package/packages/mcp-servers/dist/cloudflare/index.d.ts +8 -0
  175. package/packages/mcp-servers/dist/cloudflare/index.d.ts.map +1 -0
  176. package/packages/mcp-servers/dist/cloudflare/index.js +8 -0
  177. package/packages/mcp-servers/dist/cloudflare/index.js.map +1 -0
  178. package/packages/mcp-servers/dist/cloudflare/server.d.ts +16 -0
  179. package/packages/mcp-servers/dist/cloudflare/server.d.ts.map +1 -0
  180. package/packages/mcp-servers/dist/cloudflare/server.js +253 -0
  181. package/packages/mcp-servers/dist/cloudflare/server.js.map +1 -0
  182. package/packages/mcp-servers/dist/cloudflare/types.d.ts +141 -0
  183. package/packages/mcp-servers/dist/cloudflare/types.d.ts.map +1 -0
  184. package/packages/mcp-servers/dist/cloudflare/types.js +53 -0
  185. package/packages/mcp-servers/dist/cloudflare/types.js.map +1 -0
  186. package/packages/mcp-servers/dist/codecov/index.d.ts +7 -0
  187. package/packages/mcp-servers/dist/codecov/index.d.ts.map +1 -0
  188. package/packages/mcp-servers/dist/codecov/index.js +7 -0
  189. package/packages/mcp-servers/dist/codecov/index.js.map +1 -0
  190. package/packages/mcp-servers/dist/codecov/server.d.ts +21 -0
  191. package/packages/mcp-servers/dist/codecov/server.d.ts.map +1 -0
  192. package/packages/mcp-servers/dist/codecov/server.js +376 -0
  193. package/packages/mcp-servers/dist/codecov/server.js.map +1 -0
  194. package/packages/mcp-servers/dist/codecov/types.d.ts +269 -0
  195. package/packages/mcp-servers/dist/codecov/types.d.ts.map +1 -0
  196. package/packages/mcp-servers/dist/codecov/types.js +128 -0
  197. package/packages/mcp-servers/dist/codecov/types.js.map +1 -0
  198. package/packages/mcp-servers/dist/cto-report/index.d.ts +9 -0
  199. package/packages/mcp-servers/dist/cto-report/index.d.ts.map +1 -0
  200. package/packages/mcp-servers/dist/cto-report/index.js +9 -0
  201. package/packages/mcp-servers/dist/cto-report/index.js.map +1 -0
  202. package/packages/mcp-servers/dist/cto-report/server.d.ts +14 -0
  203. package/packages/mcp-servers/dist/cto-report/server.d.ts.map +1 -0
  204. package/packages/mcp-servers/dist/cto-report/server.js +859 -0
  205. package/packages/mcp-servers/dist/cto-report/server.js.map +1 -0
  206. package/packages/mcp-servers/dist/cto-report/types.d.ts +213 -0
  207. package/packages/mcp-servers/dist/cto-report/types.d.ts.map +1 -0
  208. package/packages/mcp-servers/dist/cto-report/types.js +29 -0
  209. package/packages/mcp-servers/dist/cto-report/types.js.map +1 -0
  210. package/packages/mcp-servers/dist/cto-reports/index.d.ts +7 -0
  211. package/packages/mcp-servers/dist/cto-reports/index.d.ts.map +1 -0
  212. package/packages/mcp-servers/dist/cto-reports/index.js +8 -0
  213. package/packages/mcp-servers/dist/cto-reports/index.js.map +1 -0
  214. package/packages/mcp-servers/dist/cto-reports/server.d.ts +20 -0
  215. package/packages/mcp-servers/dist/cto-reports/server.d.ts.map +1 -0
  216. package/packages/mcp-servers/dist/cto-reports/server.js +538 -0
  217. package/packages/mcp-servers/dist/cto-reports/server.js.map +1 -0
  218. package/packages/mcp-servers/dist/cto-reports/types.d.ts +236 -0
  219. package/packages/mcp-servers/dist/cto-reports/types.d.ts.map +1 -0
  220. package/packages/mcp-servers/dist/cto-reports/types.js +77 -0
  221. package/packages/mcp-servers/dist/cto-reports/types.js.map +1 -0
  222. package/packages/mcp-servers/dist/deputy-cto/index.d.ts +7 -0
  223. package/packages/mcp-servers/dist/deputy-cto/index.d.ts.map +1 -0
  224. package/packages/mcp-servers/dist/deputy-cto/index.js +8 -0
  225. package/packages/mcp-servers/dist/deputy-cto/index.js.map +1 -0
  226. package/packages/mcp-servers/dist/deputy-cto/server.d.ts +23 -0
  227. package/packages/mcp-servers/dist/deputy-cto/server.d.ts.map +1 -0
  228. package/packages/mcp-servers/dist/deputy-cto/server.js +1700 -0
  229. package/packages/mcp-servers/dist/deputy-cto/server.js.map +1 -0
  230. package/packages/mcp-servers/dist/deputy-cto/types.d.ts +439 -0
  231. package/packages/mcp-servers/dist/deputy-cto/types.d.ts.map +1 -0
  232. package/packages/mcp-servers/dist/deputy-cto/types.js +102 -0
  233. package/packages/mcp-servers/dist/deputy-cto/types.js.map +1 -0
  234. package/packages/mcp-servers/dist/elastic-logs/index.d.ts +5 -0
  235. package/packages/mcp-servers/dist/elastic-logs/index.d.ts.map +1 -0
  236. package/packages/mcp-servers/dist/elastic-logs/index.js +5 -0
  237. package/packages/mcp-servers/dist/elastic-logs/index.js.map +1 -0
  238. package/packages/mcp-servers/dist/elastic-logs/server.d.ts +18 -0
  239. package/packages/mcp-servers/dist/elastic-logs/server.d.ts.map +1 -0
  240. package/packages/mcp-servers/dist/elastic-logs/server.js +259 -0
  241. package/packages/mcp-servers/dist/elastic-logs/server.js.map +1 -0
  242. package/packages/mcp-servers/dist/elastic-logs/types.d.ts +107 -0
  243. package/packages/mcp-servers/dist/elastic-logs/types.d.ts.map +1 -0
  244. package/packages/mcp-servers/dist/elastic-logs/types.js +31 -0
  245. package/packages/mcp-servers/dist/elastic-logs/types.js.map +1 -0
  246. package/packages/mcp-servers/dist/feedback-explorer/index.d.ts +2 -0
  247. package/packages/mcp-servers/dist/feedback-explorer/index.d.ts.map +1 -0
  248. package/packages/mcp-servers/dist/feedback-explorer/index.js +2 -0
  249. package/packages/mcp-servers/dist/feedback-explorer/index.js.map +1 -0
  250. package/packages/mcp-servers/dist/feedback-explorer/server.d.ts +21 -0
  251. package/packages/mcp-servers/dist/feedback-explorer/server.d.ts.map +1 -0
  252. package/packages/mcp-servers/dist/feedback-explorer/server.js +580 -0
  253. package/packages/mcp-servers/dist/feedback-explorer/server.js.map +1 -0
  254. package/packages/mcp-servers/dist/feedback-explorer/types.d.ts +331 -0
  255. package/packages/mcp-servers/dist/feedback-explorer/types.d.ts.map +1 -0
  256. package/packages/mcp-servers/dist/feedback-explorer/types.js +40 -0
  257. package/packages/mcp-servers/dist/feedback-explorer/types.js.map +1 -0
  258. package/packages/mcp-servers/dist/feedback-reporter/index.d.ts +9 -0
  259. package/packages/mcp-servers/dist/feedback-reporter/index.d.ts.map +1 -0
  260. package/packages/mcp-servers/dist/feedback-reporter/index.js +9 -0
  261. package/packages/mcp-servers/dist/feedback-reporter/index.js.map +1 -0
  262. package/packages/mcp-servers/dist/feedback-reporter/server.d.ts +36 -0
  263. package/packages/mcp-servers/dist/feedback-reporter/server.d.ts.map +1 -0
  264. package/packages/mcp-servers/dist/feedback-reporter/server.js +392 -0
  265. package/packages/mcp-servers/dist/feedback-reporter/server.js.map +1 -0
  266. package/packages/mcp-servers/dist/feedback-reporter/types.d.ts +152 -0
  267. package/packages/mcp-servers/dist/feedback-reporter/types.d.ts.map +1 -0
  268. package/packages/mcp-servers/dist/feedback-reporter/types.js +67 -0
  269. package/packages/mcp-servers/dist/feedback-reporter/types.js.map +1 -0
  270. package/packages/mcp-servers/dist/github/index.d.ts +7 -0
  271. package/packages/mcp-servers/dist/github/index.d.ts.map +1 -0
  272. package/packages/mcp-servers/dist/github/index.js +7 -0
  273. package/packages/mcp-servers/dist/github/index.js.map +1 -0
  274. package/packages/mcp-servers/dist/github/server.d.ts +15 -0
  275. package/packages/mcp-servers/dist/github/server.d.ts.map +1 -0
  276. package/packages/mcp-servers/dist/github/server.js +686 -0
  277. package/packages/mcp-servers/dist/github/server.js.map +1 -0
  278. package/packages/mcp-servers/dist/github/types.d.ts +660 -0
  279. package/packages/mcp-servers/dist/github/types.d.ts.map +1 -0
  280. package/packages/mcp-servers/dist/github/types.js +209 -0
  281. package/packages/mcp-servers/dist/github/types.js.map +1 -0
  282. package/packages/mcp-servers/dist/index.d.ts +30 -0
  283. package/packages/mcp-servers/dist/index.d.ts.map +1 -0
  284. package/packages/mcp-servers/dist/index.js +32 -0
  285. package/packages/mcp-servers/dist/index.js.map +1 -0
  286. package/packages/mcp-servers/dist/makerkit-docs/index.d.ts +5 -0
  287. package/packages/mcp-servers/dist/makerkit-docs/index.d.ts.map +1 -0
  288. package/packages/mcp-servers/dist/makerkit-docs/index.js +5 -0
  289. package/packages/mcp-servers/dist/makerkit-docs/index.js.map +1 -0
  290. package/packages/mcp-servers/dist/makerkit-docs/server.d.ts +15 -0
  291. package/packages/mcp-servers/dist/makerkit-docs/server.d.ts.map +1 -0
  292. package/packages/mcp-servers/dist/makerkit-docs/server.js +252 -0
  293. package/packages/mcp-servers/dist/makerkit-docs/server.js.map +1 -0
  294. package/packages/mcp-servers/dist/makerkit-docs/types.d.ts +74 -0
  295. package/packages/mcp-servers/dist/makerkit-docs/types.d.ts.map +1 -0
  296. package/packages/mcp-servers/dist/makerkit-docs/types.js +20 -0
  297. package/packages/mcp-servers/dist/makerkit-docs/types.js.map +1 -0
  298. package/packages/mcp-servers/dist/onepassword/index.d.ts +2 -0
  299. package/packages/mcp-servers/dist/onepassword/index.d.ts.map +1 -0
  300. package/packages/mcp-servers/dist/onepassword/index.js +2 -0
  301. package/packages/mcp-servers/dist/onepassword/index.js.map +1 -0
  302. package/packages/mcp-servers/dist/onepassword/server.d.ts +2 -0
  303. package/packages/mcp-servers/dist/onepassword/server.d.ts.map +1 -0
  304. package/packages/mcp-servers/dist/onepassword/server.js +159 -0
  305. package/packages/mcp-servers/dist/onepassword/server.js.map +1 -0
  306. package/packages/mcp-servers/dist/onepassword/types.d.ts +55 -0
  307. package/packages/mcp-servers/dist/onepassword/types.d.ts.map +1 -0
  308. package/packages/mcp-servers/dist/onepassword/types.js +22 -0
  309. package/packages/mcp-servers/dist/onepassword/types.js.map +1 -0
  310. package/packages/mcp-servers/dist/playwright/helpers.d.ts +20 -0
  311. package/packages/mcp-servers/dist/playwright/helpers.d.ts.map +1 -0
  312. package/packages/mcp-servers/dist/playwright/helpers.js +31 -0
  313. package/packages/mcp-servers/dist/playwright/helpers.js.map +1 -0
  314. package/packages/mcp-servers/dist/playwright/index.d.ts +5 -0
  315. package/packages/mcp-servers/dist/playwright/index.d.ts.map +1 -0
  316. package/packages/mcp-servers/dist/playwright/index.js +5 -0
  317. package/packages/mcp-servers/dist/playwright/index.js.map +1 -0
  318. package/packages/mcp-servers/dist/playwright/server.d.ts +13 -0
  319. package/packages/mcp-servers/dist/playwright/server.d.ts.map +1 -0
  320. package/packages/mcp-servers/dist/playwright/server.js +1201 -0
  321. package/packages/mcp-servers/dist/playwright/server.js.map +1 -0
  322. package/packages/mcp-servers/dist/playwright/types.d.ts +216 -0
  323. package/packages/mcp-servers/dist/playwright/types.d.ts.map +1 -0
  324. package/packages/mcp-servers/dist/playwright/types.js +172 -0
  325. package/packages/mcp-servers/dist/playwright/types.js.map +1 -0
  326. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts +39 -0
  327. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts.map +1 -0
  328. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js +71 -0
  329. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js.map +1 -0
  330. package/packages/mcp-servers/dist/playwright-feedback/index.d.ts +5 -0
  331. package/packages/mcp-servers/dist/playwright-feedback/index.d.ts.map +1 -0
  332. package/packages/mcp-servers/dist/playwright-feedback/index.js +5 -0
  333. package/packages/mcp-servers/dist/playwright-feedback/index.js.map +1 -0
  334. package/packages/mcp-servers/dist/playwright-feedback/server.d.ts +34 -0
  335. package/packages/mcp-servers/dist/playwright-feedback/server.d.ts.map +1 -0
  336. package/packages/mcp-servers/dist/playwright-feedback/server.js +538 -0
  337. package/packages/mcp-servers/dist/playwright-feedback/server.js.map +1 -0
  338. package/packages/mcp-servers/dist/playwright-feedback/types.d.ts +305 -0
  339. package/packages/mcp-servers/dist/playwright-feedback/types.d.ts.map +1 -0
  340. package/packages/mcp-servers/dist/playwright-feedback/types.js +123 -0
  341. package/packages/mcp-servers/dist/playwright-feedback/types.js.map +1 -0
  342. package/packages/mcp-servers/dist/product-manager/server.d.ts +17 -0
  343. package/packages/mcp-servers/dist/product-manager/server.d.ts.map +1 -0
  344. package/packages/mcp-servers/dist/product-manager/server.js +690 -0
  345. package/packages/mcp-servers/dist/product-manager/server.js.map +1 -0
  346. package/packages/mcp-servers/dist/product-manager/types.d.ts +286 -0
  347. package/packages/mcp-servers/dist/product-manager/types.d.ts.map +1 -0
  348. package/packages/mcp-servers/dist/product-manager/types.js +99 -0
  349. package/packages/mcp-servers/dist/product-manager/types.js.map +1 -0
  350. package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts +7 -0
  351. package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts.map +1 -0
  352. package/packages/mcp-servers/dist/programmatic-feedback/index.js +7 -0
  353. package/packages/mcp-servers/dist/programmatic-feedback/index.js.map +1 -0
  354. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts +19 -0
  355. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts.map +1 -0
  356. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js +174 -0
  357. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js.map +1 -0
  358. package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts +35 -0
  359. package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts.map +1 -0
  360. package/packages/mcp-servers/dist/programmatic-feedback/server.js +465 -0
  361. package/packages/mcp-servers/dist/programmatic-feedback/server.js.map +1 -0
  362. package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts +127 -0
  363. package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts.map +1 -0
  364. package/packages/mcp-servers/dist/programmatic-feedback/types.js +80 -0
  365. package/packages/mcp-servers/dist/programmatic-feedback/types.js.map +1 -0
  366. package/packages/mcp-servers/dist/render/index.d.ts +8 -0
  367. package/packages/mcp-servers/dist/render/index.d.ts.map +1 -0
  368. package/packages/mcp-servers/dist/render/index.js +8 -0
  369. package/packages/mcp-servers/dist/render/index.js.map +1 -0
  370. package/packages/mcp-servers/dist/render/server.d.ts +15 -0
  371. package/packages/mcp-servers/dist/render/server.d.ts.map +1 -0
  372. package/packages/mcp-servers/dist/render/server.js +428 -0
  373. package/packages/mcp-servers/dist/render/server.js.map +1 -0
  374. package/packages/mcp-servers/dist/render/types.d.ts +273 -0
  375. package/packages/mcp-servers/dist/render/types.d.ts.map +1 -0
  376. package/packages/mcp-servers/dist/render/types.js +102 -0
  377. package/packages/mcp-servers/dist/render/types.js.map +1 -0
  378. package/packages/mcp-servers/dist/resend/index.d.ts +7 -0
  379. package/packages/mcp-servers/dist/resend/index.d.ts.map +1 -0
  380. package/packages/mcp-servers/dist/resend/index.js +7 -0
  381. package/packages/mcp-servers/dist/resend/index.js.map +1 -0
  382. package/packages/mcp-servers/dist/resend/server.d.ts +15 -0
  383. package/packages/mcp-servers/dist/resend/server.d.ts.map +1 -0
  384. package/packages/mcp-servers/dist/resend/server.js +298 -0
  385. package/packages/mcp-servers/dist/resend/server.js.map +1 -0
  386. package/packages/mcp-servers/dist/resend/types.d.ts +222 -0
  387. package/packages/mcp-servers/dist/resend/types.d.ts.map +1 -0
  388. package/packages/mcp-servers/dist/resend/types.js +58 -0
  389. package/packages/mcp-servers/dist/resend/types.js.map +1 -0
  390. package/packages/mcp-servers/dist/review-queue/index.d.ts +6 -0
  391. package/packages/mcp-servers/dist/review-queue/index.d.ts.map +1 -0
  392. package/packages/mcp-servers/dist/review-queue/index.js +6 -0
  393. package/packages/mcp-servers/dist/review-queue/index.js.map +1 -0
  394. package/packages/mcp-servers/dist/review-queue/server.d.ts +17 -0
  395. package/packages/mcp-servers/dist/review-queue/server.d.ts.map +1 -0
  396. package/packages/mcp-servers/dist/review-queue/server.js +348 -0
  397. package/packages/mcp-servers/dist/review-queue/server.js.map +1 -0
  398. package/packages/mcp-servers/dist/review-queue/types.d.ts +162 -0
  399. package/packages/mcp-servers/dist/review-queue/types.d.ts.map +1 -0
  400. package/packages/mcp-servers/dist/review-queue/types.js +56 -0
  401. package/packages/mcp-servers/dist/review-queue/types.js.map +1 -0
  402. package/packages/mcp-servers/dist/secret-sync/server.d.ts +19 -0
  403. package/packages/mcp-servers/dist/secret-sync/server.d.ts.map +1 -0
  404. package/packages/mcp-servers/dist/secret-sync/server.js +1139 -0
  405. package/packages/mcp-servers/dist/secret-sync/server.js.map +1 -0
  406. package/packages/mcp-servers/dist/secret-sync/types.d.ts +442 -0
  407. package/packages/mcp-servers/dist/secret-sync/types.d.ts.map +1 -0
  408. package/packages/mcp-servers/dist/secret-sync/types.js +113 -0
  409. package/packages/mcp-servers/dist/secret-sync/types.js.map +1 -0
  410. package/packages/mcp-servers/dist/session-events/index.d.ts +5 -0
  411. package/packages/mcp-servers/dist/session-events/index.d.ts.map +1 -0
  412. package/packages/mcp-servers/dist/session-events/index.js +5 -0
  413. package/packages/mcp-servers/dist/session-events/index.js.map +1 -0
  414. package/packages/mcp-servers/dist/session-events/server.d.ts +11 -0
  415. package/packages/mcp-servers/dist/session-events/server.d.ts.map +1 -0
  416. package/packages/mcp-servers/dist/session-events/server.js +290 -0
  417. package/packages/mcp-servers/dist/session-events/server.js.map +1 -0
  418. package/packages/mcp-servers/dist/session-events/types.d.ts +213 -0
  419. package/packages/mcp-servers/dist/session-events/types.d.ts.map +1 -0
  420. package/packages/mcp-servers/dist/session-events/types.js +69 -0
  421. package/packages/mcp-servers/dist/session-events/types.js.map +1 -0
  422. package/packages/mcp-servers/dist/session-restart/index.d.ts +9 -0
  423. package/packages/mcp-servers/dist/session-restart/index.d.ts.map +1 -0
  424. package/packages/mcp-servers/dist/session-restart/index.js +9 -0
  425. package/packages/mcp-servers/dist/session-restart/index.js.map +1 -0
  426. package/packages/mcp-servers/dist/session-restart/server.d.ts +20 -0
  427. package/packages/mcp-servers/dist/session-restart/server.d.ts.map +1 -0
  428. package/packages/mcp-servers/dist/session-restart/server.js +411 -0
  429. package/packages/mcp-servers/dist/session-restart/server.js.map +1 -0
  430. package/packages/mcp-servers/dist/session-restart/types.d.ts +26 -0
  431. package/packages/mcp-servers/dist/session-restart/types.d.ts.map +1 -0
  432. package/packages/mcp-servers/dist/session-restart/types.js +16 -0
  433. package/packages/mcp-servers/dist/session-restart/types.js.map +1 -0
  434. package/packages/mcp-servers/dist/setup-helper/index.d.ts +5 -0
  435. package/packages/mcp-servers/dist/setup-helper/index.d.ts.map +1 -0
  436. package/packages/mcp-servers/dist/setup-helper/index.js +5 -0
  437. package/packages/mcp-servers/dist/setup-helper/index.js.map +1 -0
  438. package/packages/mcp-servers/dist/setup-helper/server.d.ts +14 -0
  439. package/packages/mcp-servers/dist/setup-helper/server.d.ts.map +1 -0
  440. package/packages/mcp-servers/dist/setup-helper/server.js +454 -0
  441. package/packages/mcp-servers/dist/setup-helper/server.js.map +1 -0
  442. package/packages/mcp-servers/dist/setup-helper/types.d.ts +81 -0
  443. package/packages/mcp-servers/dist/setup-helper/types.d.ts.map +1 -0
  444. package/packages/mcp-servers/dist/setup-helper/types.js +41 -0
  445. package/packages/mcp-servers/dist/setup-helper/types.js.map +1 -0
  446. package/packages/mcp-servers/dist/shared/audited-server.d.ts +31 -0
  447. package/packages/mcp-servers/dist/shared/audited-server.d.ts.map +1 -0
  448. package/packages/mcp-servers/dist/shared/audited-server.js +126 -0
  449. package/packages/mcp-servers/dist/shared/audited-server.js.map +1 -0
  450. package/packages/mcp-servers/dist/shared/constants.d.ts +26 -0
  451. package/packages/mcp-servers/dist/shared/constants.d.ts.map +1 -0
  452. package/packages/mcp-servers/dist/shared/constants.js +41 -0
  453. package/packages/mcp-servers/dist/shared/constants.js.map +1 -0
  454. package/packages/mcp-servers/dist/shared/index.d.ts +6 -0
  455. package/packages/mcp-servers/dist/shared/index.d.ts.map +1 -0
  456. package/packages/mcp-servers/dist/shared/index.js +6 -0
  457. package/packages/mcp-servers/dist/shared/index.js.map +1 -0
  458. package/packages/mcp-servers/dist/shared/readonly-db.d.ts +11 -0
  459. package/packages/mcp-servers/dist/shared/readonly-db.d.ts.map +1 -0
  460. package/packages/mcp-servers/dist/shared/readonly-db.js +47 -0
  461. package/packages/mcp-servers/dist/shared/readonly-db.js.map +1 -0
  462. package/packages/mcp-servers/dist/shared/resolve-framework.d.ts +20 -0
  463. package/packages/mcp-servers/dist/shared/resolve-framework.d.ts.map +1 -0
  464. package/packages/mcp-servers/dist/shared/resolve-framework.js +65 -0
  465. package/packages/mcp-servers/dist/shared/resolve-framework.js.map +1 -0
  466. package/packages/mcp-servers/dist/shared/server.d.ts +86 -0
  467. package/packages/mcp-servers/dist/shared/server.d.ts.map +1 -0
  468. package/packages/mcp-servers/dist/shared/server.js +291 -0
  469. package/packages/mcp-servers/dist/shared/server.js.map +1 -0
  470. package/packages/mcp-servers/dist/shared/types.d.ts +113 -0
  471. package/packages/mcp-servers/dist/shared/types.d.ts.map +1 -0
  472. package/packages/mcp-servers/dist/shared/types.js +36 -0
  473. package/packages/mcp-servers/dist/shared/types.js.map +1 -0
  474. package/packages/mcp-servers/dist/show/server.d.ts +12 -0
  475. package/packages/mcp-servers/dist/show/server.d.ts.map +1 -0
  476. package/packages/mcp-servers/dist/show/server.js +97 -0
  477. package/packages/mcp-servers/dist/show/server.js.map +1 -0
  478. package/packages/mcp-servers/dist/show/types.d.ts +19 -0
  479. package/packages/mcp-servers/dist/show/types.d.ts.map +1 -0
  480. package/packages/mcp-servers/dist/show/types.js +32 -0
  481. package/packages/mcp-servers/dist/show/types.js.map +1 -0
  482. package/packages/mcp-servers/dist/specs-browser/index.d.ts +5 -0
  483. package/packages/mcp-servers/dist/specs-browser/index.d.ts.map +1 -0
  484. package/packages/mcp-servers/dist/specs-browser/index.js +5 -0
  485. package/packages/mcp-servers/dist/specs-browser/index.js.map +1 -0
  486. package/packages/mcp-servers/dist/specs-browser/server.d.ts +13 -0
  487. package/packages/mcp-servers/dist/specs-browser/server.d.ts.map +1 -0
  488. package/packages/mcp-servers/dist/specs-browser/server.js +692 -0
  489. package/packages/mcp-servers/dist/specs-browser/server.js.map +1 -0
  490. package/packages/mcp-servers/dist/specs-browser/types.d.ts +337 -0
  491. package/packages/mcp-servers/dist/specs-browser/types.d.ts.map +1 -0
  492. package/packages/mcp-servers/dist/specs-browser/types.js +134 -0
  493. package/packages/mcp-servers/dist/specs-browser/types.js.map +1 -0
  494. package/packages/mcp-servers/dist/supabase/index.d.ts +10 -0
  495. package/packages/mcp-servers/dist/supabase/index.d.ts.map +1 -0
  496. package/packages/mcp-servers/dist/supabase/index.js +10 -0
  497. package/packages/mcp-servers/dist/supabase/index.js.map +1 -0
  498. package/packages/mcp-servers/dist/supabase/server.d.ts +20 -0
  499. package/packages/mcp-servers/dist/supabase/server.d.ts.map +1 -0
  500. package/packages/mcp-servers/dist/supabase/server.js +451 -0
  501. package/packages/mcp-servers/dist/supabase/server.js.map +1 -0
  502. package/packages/mcp-servers/dist/supabase/types.d.ts +196 -0
  503. package/packages/mcp-servers/dist/supabase/types.d.ts.map +1 -0
  504. package/packages/mcp-servers/dist/supabase/types.js +76 -0
  505. package/packages/mcp-servers/dist/supabase/types.js.map +1 -0
  506. package/packages/mcp-servers/dist/todo-db/index.d.ts +5 -0
  507. package/packages/mcp-servers/dist/todo-db/index.d.ts.map +1 -0
  508. package/packages/mcp-servers/dist/todo-db/index.js +5 -0
  509. package/packages/mcp-servers/dist/todo-db/index.js.map +1 -0
  510. package/packages/mcp-servers/dist/todo-db/server.d.ts +13 -0
  511. package/packages/mcp-servers/dist/todo-db/server.d.ts.map +1 -0
  512. package/packages/mcp-servers/dist/todo-db/server.js +649 -0
  513. package/packages/mcp-servers/dist/todo-db/server.js.map +1 -0
  514. package/packages/mcp-servers/dist/todo-db/types.d.ts +225 -0
  515. package/packages/mcp-servers/dist/todo-db/types.d.ts.map +1 -0
  516. package/packages/mcp-servers/dist/todo-db/types.js +69 -0
  517. package/packages/mcp-servers/dist/todo-db/types.js.map +1 -0
  518. package/packages/mcp-servers/dist/user-feedback/index.d.ts +7 -0
  519. package/packages/mcp-servers/dist/user-feedback/index.d.ts.map +1 -0
  520. package/packages/mcp-servers/dist/user-feedback/index.js +8 -0
  521. package/packages/mcp-servers/dist/user-feedback/index.js.map +1 -0
  522. package/packages/mcp-servers/dist/user-feedback/server.d.ts +25 -0
  523. package/packages/mcp-servers/dist/user-feedback/server.d.ts.map +1 -0
  524. package/packages/mcp-servers/dist/user-feedback/server.js +914 -0
  525. package/packages/mcp-servers/dist/user-feedback/server.js.map +1 -0
  526. package/packages/mcp-servers/dist/user-feedback/types.d.ts +415 -0
  527. package/packages/mcp-servers/dist/user-feedback/types.d.ts.map +1 -0
  528. package/packages/mcp-servers/dist/user-feedback/types.js +132 -0
  529. package/packages/mcp-servers/dist/user-feedback/types.js.map +1 -0
  530. package/packages/mcp-servers/dist/vercel/index.d.ts +9 -0
  531. package/packages/mcp-servers/dist/vercel/index.d.ts.map +1 -0
  532. package/packages/mcp-servers/dist/vercel/index.js +9 -0
  533. package/packages/mcp-servers/dist/vercel/index.js.map +1 -0
  534. package/packages/mcp-servers/dist/vercel/server.d.ts +17 -0
  535. package/packages/mcp-servers/dist/vercel/server.d.ts.map +1 -0
  536. package/packages/mcp-servers/dist/vercel/server.js +265 -0
  537. package/packages/mcp-servers/dist/vercel/server.js.map +1 -0
  538. package/packages/mcp-servers/dist/vercel/types.d.ts +189 -0
  539. package/packages/mcp-servers/dist/vercel/types.d.ts.map +1 -0
  540. package/packages/mcp-servers/dist/vercel/types.js +65 -0
  541. package/packages/mcp-servers/dist/vercel/types.js.map +1 -0
  542. package/packages/mcp-servers/package-lock.json +3765 -0
  543. package/packages/mcp-servers/package.json +64 -0
  544. package/packages/mcp-servers/test/reporters/test-failure-reporter.ts +372 -0
  545. package/packages/mcp-servers/vitest.config.ts +27 -0
  546. package/scripts/__tests__/README.md +163 -0
  547. package/scripts/apply-credential-hardening.sh +271 -0
  548. package/scripts/credential-providers/manual.js +56 -0
  549. package/scripts/credential-providers/onepassword.js +85 -0
  550. package/scripts/credential-providers/provider-interface.js +104 -0
  551. package/scripts/encrypt-credential.js +337 -0
  552. package/scripts/feedback-launcher.js +338 -0
  553. package/scripts/feedback-orchestrator.js +373 -0
  554. package/scripts/fix-mcp-launcher-issues.sh +97 -0
  555. package/scripts/force-spawn-tasks.js +651 -0
  556. package/scripts/force-triage-reports.js +560 -0
  557. package/scripts/generate-protected-actions-spec.js +142 -0
  558. package/scripts/generate-proxy-certs.sh +158 -0
  559. package/scripts/grant-chrome-ext-permissions.sh +242 -0
  560. package/scripts/mcp-launcher.js +125 -0
  561. package/scripts/merge-settings.cjs +167 -0
  562. package/scripts/patch-clawd.py +844 -0
  563. package/scripts/patch-credential-cache.py +313 -0
  564. package/scripts/patches/credential-file-guard-patched.mjs +573 -0
  565. package/scripts/patches/credential-file-guard.js.patched +573 -0
  566. package/scripts/patches/verify-tokenizer.mjs +132 -0
  567. package/scripts/protect-framework.sh +478 -0
  568. package/scripts/readme-chrome.template +12 -0
  569. package/scripts/reap-completed-agents.js +439 -0
  570. package/scripts/reinstall.sh +86 -0
  571. package/scripts/resign-node.sh +185 -0
  572. package/scripts/rotation-proxy.js +656 -0
  573. package/scripts/rotation-stress-monitor.mjs +862 -0
  574. package/scripts/setup-automation-service.sh +648 -0
  575. package/scripts/setup-check.js +251 -0
  576. package/scripts/watch-claude-version.js +142 -0
  577. package/specs/framework/CORE-INVARIANTS.md +161 -0
  578. package/specs/patterns/AGENT-PATTERNS.md +223 -0
  579. package/specs/patterns/HOOK-PATTERNS.md +242 -0
  580. package/specs/patterns/MCP-SERVER-PATTERNS.md +144 -0
  581. package/templates/config/gitignore.template +14 -0
  582. package/templates/config/merge-chain-check.yml.template +51 -0
  583. package/templates/config/package.json.template +18 -0
  584. package/templates/config/pnpm-workspace.yaml +5 -0
  585. package/templates/config/services.json.template +18 -0
  586. package/templates/config/tsconfig.base.json +17 -0
  587. package/templates/scaffold/integrations/_template/.gitkeep +0 -0
  588. package/templates/scaffold/packages/logger/package.json +17 -0
  589. package/templates/scaffold/packages/logger/src/logger.ts +44 -0
  590. package/templates/scaffold/packages/shared/package.json +17 -0
  591. package/templates/scaffold/packages/shared/src/errors.ts +43 -0
  592. package/templates/scaffold/products/_product/apps/backend/package.json +21 -0
  593. package/templates/scaffold/products/_product/apps/backend/src/index.ts +17 -0
  594. package/templates/scaffold/products/_product/apps/extension/.gitkeep +0 -0
  595. package/templates/scaffold/products/_product/apps/web/.gitkeep +0 -0
  596. package/templates/scaffold/specs/global/.gitkeep +0 -0
  597. package/templates/scaffold/specs/local/.gitkeep +0 -0
  598. package/templates/scaffold/specs/reference/.gitkeep +0 -0
  599. package/version.json +15 -0
@@ -0,0 +1,396 @@
1
+ <!-- HOOK:GENTYR:setup-gentyr -->
2
+ # /setup-gentyr - GENTYR Framework Setup
3
+
4
+ One command for full GENTYR project setup. Runs a programmatic check script, displays results, guides through missing credentials using the setup documentation, and writes vault mappings for the MCP launcher to resolve at runtime.
5
+
6
+ The prefetch hook has pre-run `setup-check.js` and injected its JSON output as `[PREFETCH:setup-gentyr]` context above. Use that data for Phase 1 instead of running the script. If the prefetch data is missing, run the script directly.
7
+
8
+ ## Security Architecture
9
+
10
+ - **No credentials on disk.** Vault mappings (`.claude/vault-mappings.json`) contain only `op://` references and non-secret identifiers, not actual secret values.
11
+ - **Runtime resolution.** The MCP launcher (`scripts/mcp-launcher.js`) resolves credentials from 1Password when each MCP server starts.
12
+ - **Credentials in memory only.** Secret values exist only in the MCP server process memory.
13
+ - **credential-file-guard.js** blocks agents from reading `.mcp.json` (defense-in-depth, since `.mcp.json` contains no credentials with the launcher architecture).
14
+ - **OP_SERVICE_ACCOUNT_TOKEN** is injected into `.mcp.json` by the install script (`--op-token` arg), not stored in vault-mappings.json.
15
+
16
+ ## Credential Classification
17
+
18
+ The `setup-check.js` script is the authoritative source for credential classification. The table below is for human reference.
19
+
20
+ | Key | Type | Predefined Path |
21
+ |-----|------|----------------|
22
+ | GITHUB_TOKEN | secret | op://Production/GitHub/token |
23
+ | GITHUB_PAT | secret | op://Production/GitHub/token |
24
+ | RENDER_API_KEY | secret | op://Production/Render/api-key |
25
+ | VERCEL_TOKEN | secret | op://Production/Vercel/token |
26
+ | CLOUDFLARE_API_TOKEN | secret | op://Production/Cloudflare/api-token |
27
+ | CLOUDFLARE_ZONE_ID | identifier | (direct value) |
28
+ | SUPABASE_SERVICE_ROLE_KEY | secret | op://Production/Supabase/service-role-key |
29
+ | SUPABASE_ANON_KEY | identifier | (direct value — public key, no protected actions) |
30
+ | SUPABASE_URL | identifier | (direct value) |
31
+ | RESEND_API_KEY | secret | op://Production/Resend/api-key |
32
+ | ELASTIC_API_KEY | secret | op://Production/Elastic/api-key-query |
33
+ | ELASTIC_CLOUD_ID | identifier | (direct value — hosted deployments) |
34
+ | ELASTIC_ENDPOINT | identifier | (direct value — Serverless projects, alternative to ELASTIC_CLOUD_ID) |
35
+ | CODECOV_TOKEN | secret | op://Production/Codecov/token |
36
+ | OP_CONNECT_TOKEN | secret | op://Production/1Password/connect-token |
37
+ | SUPABASE_ACCESS_TOKEN | secret | op://Production/Supabase/access-token |
38
+ | OP_SERVICE_ACCOUNT_TOKEN | special | (injected via setup.sh --op-token, not in vault-mappings) |
39
+
40
+ ## Setup Flow
41
+
42
+ **Output Format:** All status output MUST use the exact format templates in this document. Generate dynamically from JSON data — do NOT ad-lib or freestyle formatting. Use ✓ for pass/configured, ✗ for fail/missing, ⚠ for warn, ○ for skip.
43
+
44
+ ### Phase 1: Run Setup Check
45
+
46
+ Run the programmatic setup-check script to get complete project state in one call:
47
+
48
+ ```bash
49
+ node node_modules/gentyr/scripts/setup-check.js 2>/dev/null
50
+ ```
51
+
52
+ Parse the JSON output. This single call determines everything — do NOT run individual `op` commands to check credentials. The script checks:
53
+ - GENTYR installation
54
+ - 1Password CLI availability and authentication
55
+ - Vault-mappings.json current state
56
+ - Each secret's existence at its predefined `op://` path in 1Password
57
+ - Each identifier's presence in vault-mappings.json
58
+
59
+ **Decision tree based on JSON output:**
60
+
61
+ 1. If `gentyrInstalled === false`:
62
+ - Inform the user: "GENTYR is not installed."
63
+ - Provide: `sudo node_modules/gentyr/scripts/reinstall.sh --path $(pwd) --op-token <token>`
64
+ - Stop and wait for user to complete this step and restart their Claude Code session.
65
+
66
+ 2. If `opCliAvailable === false`:
67
+ - Inform the user: "1Password CLI (`op`) is not installed."
68
+ - Provide: `brew install --cask 1password-cli`
69
+ - Then: "Connect to your 1Password account and re-run `/setup-gentyr`"
70
+ - Stop here.
71
+
72
+ 3. If `opAuthenticated === false` and secrets have `existsInOp === null`:
73
+ - Inform the user: "1Password is not authenticated."
74
+ - Provide: `op signin` or "Set OP_SERVICE_ACCOUNT_TOKEN"
75
+ - Stop here and wait for user to authenticate, then re-run `/setup-gentyr`.
76
+
77
+ 4. Display the credential status table from the `credentials` object. Format:
78
+ ```
79
+ Credential Status (X of Y configured):
80
+
81
+ Secrets (1Password):
82
+ [check/x] GITHUB_TOKEN — exists in 1Password / MISSING from 1Password
83
+ [check/x] RENDER_API_KEY — ...
84
+ ...
85
+
86
+ Identifiers (direct values):
87
+ [check/x] CLOUDFLARE_ZONE_ID — configured / not configured
88
+ [check/x] SUPABASE_URL — configured / not configured
89
+ ...
90
+ ```
91
+
92
+ 5. If everything is configured (`summary.secretsMissing === 0` and `summary.identifiersMissing === 0`), skip to Phase 5 (Write Vault Mappings).
93
+
94
+ 6. Otherwise, proceed to Phase 2 (account inventory), Phase 3 (missing secrets), and Phase 4 (missing identifiers).
95
+
96
+ ### Phase 2: Claude Account Inventory
97
+
98
+ The prefetch hook injected account inventory data in `[PREFETCH:setup-gentyr]`.
99
+
100
+ 1. **Display current account inventory** from `gathered.accountInventory`:
101
+ ```
102
+ Claude Accounts ({N} detected):
103
+
104
+ ✓ user@example.com — active (5h: 45%, 7d: 30%) [Max plan]
105
+ ✗ user2@example.com — expired (last seen 2d ago)
106
+ ○ (no other accounts)
107
+
108
+ Active key: a1b2c3d4... | Available quota headroom: ~55%
109
+ ```
110
+
111
+ If `gathered.accountInventory` is null, display: "No account rotation state found. Run `/login` to authenticate your first Claude account."
112
+
113
+ For accounts where `email` is null (profile not yet fetched), show the `keyId` prefix instead.
114
+
115
+ 2. **Ask if user wants to add another account**:
116
+ Use `AskUserQuestion`:
117
+ - "Do you want to add another Claude account for quota rotation?"
118
+ - Options: "Yes, add an account" / "No, continue setup"
119
+
120
+ 3. **If yes — guide through login**:
121
+ a. Instruct: "Run `/login` now. This will open your browser to authenticate with a different Claude account."
122
+ b. Wait for user to confirm they've completed the login.
123
+ c. **Detect the new account** by running:
124
+ ```bash
125
+ node --input-type=module -e "
126
+ import { syncKeys, readRotationState, checkKeyHealth } from './.claude/hooks/key-sync.js';
127
+ const sync = await syncKeys(console.error);
128
+ const state = readRotationState();
129
+ const accounts = new Map();
130
+ for (const [id, k] of Object.entries(state.keys)) {
131
+ if (k.status === 'invalid') continue;
132
+ const key = k.account_uuid || id;
133
+ if (!accounts.has(key)) accounts.set(key, { ...k, keyId: id });
134
+ }
135
+ console.log(JSON.stringify({
136
+ keysAdded: sync.keysAdded,
137
+ tokensRefreshed: sync.tokensRefreshed,
138
+ totalKeys: Object.keys(state.keys).length,
139
+ accounts: [...accounts.values()].map(a => ({
140
+ email: a.account_email, status: a.status,
141
+ usage: a.last_usage, subscription: a.subscriptionType,
142
+ })),
143
+ }));
144
+ "
145
+ ```
146
+ d. **Parse output and confirm to user**:
147
+ - If `keysAdded > 0`: "New account detected! {email}" + updated inventory table
148
+ - If `keysAdded === 0` but `tokensRefreshed > 0`: "Account token refreshed for {email}"
149
+ - If neither: "No new account found. Make sure you logged in with a different account."
150
+ e. **Loop back to step 2** — ask if they want to add another account.
151
+
152
+ 4. **When done** (user says "No, continue setup"), proceed to Phase 3 (Missing Secrets).
153
+
154
+ ### Phase 3: Guide User Through Missing Secrets
155
+
156
+ For each credential in the JSON output where `type === "secret"` AND (`existsInOp === false` OR `mappedInVault === false`):
157
+
158
+ 1. **Group by `setupGuidePhase`** — deduplicate so you show each guide section only once. For example, GITHUB_TOKEN and GITHUB_PAT share `"Phase 2: GitHub Token"`, so show that section once.
159
+
160
+ 2. **Read** `node_modules/gentyr/docs/SETUP-GUIDE.md`.
161
+
162
+ 3. For each unique `setupGuidePhase` value (e.g., `"Phase 5: Cloudflare API Token"`):
163
+ a. Find the section matching the heading `## {setupGuidePhase}` in SETUP-GUIDE.md.
164
+ b. Extract the content from that heading until the next `## Phase` heading (or end of file).
165
+ c. **Present the section's instructions to the user nearly verbatim.** Include both the service creation steps AND the "1Password Storage" block (vault, item title, field names, predefined path).
166
+ d. List which credential keys from the JSON output this section covers.
167
+
168
+ 4. After presenting instructions for a missing secret, wait for the user to confirm they've created the 1Password item.
169
+
170
+ 5. **Re-run the setup-check script** to verify the item was created:
171
+ ```bash
172
+ node node_modules/gentyr/scripts/setup-check.js 2>/dev/null
173
+ ```
174
+ Check the updated `existsInOp` value. If still `false`, inform the user and offer to skip.
175
+
176
+ 6. If the user wants to skip a credential, note it and move on. They can re-run `/setup-gentyr` later.
177
+
178
+ **IMPORTANT:** NEVER read the actual secret value. The setup-check script only checks existence (never reads values). You should only display the credential name and its `op://` reference.
179
+
180
+ ### Phase 4: Collect Non-Secret Identifiers
181
+
182
+ For each credential in the JSON output where `type === "identifier"` AND `mappedInVault === false`:
183
+
184
+ 1. **Read** `node_modules/gentyr/docs/SETUP-GUIDE.md`.
185
+
186
+ 2. Find the `setupGuidePhase` section and locate the **"Non-secret (share in chat during /setup-gentyr):"** subsection within it.
187
+
188
+ 3. **Present the non-secret instructions to the user nearly verbatim.** This tells them where to find the value (e.g., "Cloudflare Dashboard > your domain > right sidebar under API").
189
+
190
+ 4. Use `AskUserQuestion` to collect the value:
191
+ - **Question:** Based on the SETUP-GUIDE.md description (e.g., "What is your Cloudflare Zone ID? (32-character hex string from Cloudflare Dashboard > your domain > API sidebar)")
192
+ - **Header:** The credential name (e.g., "Zone ID")
193
+ - **Options:** "I'll provide it" + "Skip for now"
194
+
195
+ 5. If the user provides a value, note it for Phase 5 (vault-mappings write). These are NOT `op://` references — they are stored as direct values.
196
+
197
+ ### Phase 5: Write Vault Mappings
198
+
199
+ Write `.claude/vault-mappings.json` with:
200
+ - `op://` references for all secrets whose `existsInOp === true` (use the `opPath` from the JSON output)
201
+ - Direct values for non-secret identifiers collected in Phase 4
202
+ - Preserve any existing mappings that are still valid
203
+
204
+ File: `.claude/vault-mappings.json`
205
+ ```json
206
+ {
207
+ "provider": "1password",
208
+ "mappings": {
209
+ "GITHUB_TOKEN": "op://Production/GitHub/token",
210
+ "GITHUB_PAT": "op://Production/GitHub/token",
211
+ "RENDER_API_KEY": "op://Production/Render/api-key",
212
+ "VERCEL_TOKEN": "op://Production/Vercel/token",
213
+ "CLOUDFLARE_API_TOKEN": "op://Production/Cloudflare/api-token",
214
+ "CLOUDFLARE_ZONE_ID": "abc123def456...",
215
+ "SUPABASE_SERVICE_ROLE_KEY": "op://Production/Supabase/service-role-key",
216
+ "SUPABASE_URL": "https://abcdefghijklmnop.supabase.co",
217
+ "SUPABASE_ANON_KEY": "eyJhbGci...",
218
+ "RESEND_API_KEY": "op://Production/Resend/api-key",
219
+ "ELASTIC_API_KEY": "op://Production/Elastic/api-key-query",
220
+ "ELASTIC_CLOUD_ID": "my-deployment:dXMtY2VudH...",
221
+ "CODECOV_TOKEN": "op://Production/Codecov/token",
222
+ "OP_CONNECT_TOKEN": "op://Production/1Password/connect-token",
223
+ "SUPABASE_ACCESS_TOKEN": "op://Production/Supabase/access-token"
224
+ }
225
+ }
226
+ ```
227
+
228
+ **Note:** For Elastic Serverless projects, use `ELASTIC_ENDPOINT` instead of `ELASTIC_CLOUD_ID`:
229
+ ```json
230
+ "ELASTIC_ENDPOINT": "https://my-project-abc123.es.us-central1.gcp.elastic.cloud"
231
+ ```
232
+ Only one of `ELASTIC_CLOUD_ID` or `ELASTIC_ENDPOINT` should be present. The setup-check.js `altKey` mechanism treats them as alternatives.
233
+
234
+ This file is NOT blocked by credential-file-guard (it contains only `op://` references and non-secret identifiers).
235
+
236
+ **Credential-to-server mapping reference:**
237
+
238
+ | Credential | Server(s) | Env Var |
239
+ |-----------|-----------|---------|
240
+ | GitHub Token | `github` | `GITHUB_TOKEN` |
241
+ | GitHub PAT | `github` | `GITHUB_PAT` |
242
+ | Render API Key | `render`, `secret-sync` | `RENDER_API_KEY` |
243
+ | Vercel Token | `vercel`, `secret-sync` | `VERCEL_TOKEN` |
244
+ | Cloudflare Token | `cloudflare` | `CLOUDFLARE_API_TOKEN` |
245
+ | Cloudflare Zone ID | `cloudflare` | `CLOUDFLARE_ZONE_ID` |
246
+ | Supabase URL | `supabase` | `SUPABASE_URL` |
247
+ | Supabase Service Role Key | `supabase` | `SUPABASE_SERVICE_ROLE_KEY` |
248
+ | Supabase Anon Key | `supabase` | `SUPABASE_ANON_KEY` |
249
+ | Supabase Access Token | `supabase` | `SUPABASE_ACCESS_TOKEN` |
250
+ | 1Password Connect Token | `onepassword` | `OP_CONNECT_TOKEN` |
251
+ | Elastic API Key | `elastic-logs` | `ELASTIC_API_KEY` |
252
+ | Elastic Cloud ID | `elastic-logs` | `ELASTIC_CLOUD_ID` (hosted) |
253
+ | Elastic Endpoint | `elastic-logs` | `ELASTIC_ENDPOINT` (Serverless, alternative to Cloud ID) |
254
+ | Resend API Key | `resend` | `RESEND_API_KEY` |
255
+ | Codecov Token | `codecov` | `CODECOV_TOKEN` |
256
+
257
+ ### Phase 6: Service Config
258
+
259
+ If `.claude/config/services.json` does not exist:
260
+
261
+ 1. Use `AskUserQuestion` to collect:
262
+ - Render Production service ID (e.g., `srv-xxx`)
263
+ - Render Staging service ID (e.g., `srv-yyy`)
264
+ - Vercel project ID (e.g., `prj_xxx`)
265
+ 2. Create `.claude/config/services.json` with the provided values and empty secret mappings
266
+ 3. Inform the user they can populate the `secrets` section later for `/push-secrets` to use
267
+
268
+ ### Phase 7: Verify & Validate
269
+
270
+ This phase is **mandatory** — always run both scripts, never ask the user if they want validation.
271
+
272
+ 1. **Re-run setup-check** to confirm final credential state:
273
+ ```bash
274
+ node node_modules/gentyr/scripts/setup-check.js 2>/dev/null
275
+ ```
276
+
277
+ 2. **Run permission validation** (always — do NOT offer this as optional):
278
+ ```bash
279
+ node node_modules/gentyr/scripts/setup-validate.js 2>/dev/null
280
+ ```
281
+
282
+ 3. **Display combined results** using this exact format (dynamically populated from the two JSON outputs):
283
+
284
+ ```
285
+ ═══════════════════════════════════════════════════
286
+ GENTYR Setup Status
287
+ ═══════════════════════════════════════════════════
288
+
289
+ Credential Mapping ({secretsConfigured + identifiersConfigured} of {totalCredentials}):
290
+
291
+ Secrets (1Password):
292
+ ✓ {KEY} → {opPath}
293
+ ✗ {KEY} — MISSING
294
+
295
+ Identifiers:
296
+ ✓ {KEY} → configured
297
+ ✗ {KEY} — not configured
298
+
299
+ Permission Validation ({passed} of {totalServices} services):
300
+ ✓ {service} — {message}
301
+ ⚠ {service} — {message}
302
+ ✗ {service} — {message}
303
+ ○ {service} — {message}
304
+ ```
305
+
306
+ Use ✓ for pass/configured, ✗ for fail/missing, ⚠ for warn, ○ for skip. Populate dynamically from JSON — every credential and every service must appear.
307
+
308
+ 4. **For any missing credentials** (`existsInOp === false` OR `mappedInVault === false`):
309
+ - Read `node_modules/gentyr/docs/SETUP-GUIDE.md`
310
+ - Find the section matching the credential's `setupGuidePhase` heading (e.g., `## Phase 6: Supabase Credentials`)
311
+ - **Output the entire section verbatim** — from the `## Phase N` heading through to the next `## Phase` heading (or end of file). Do NOT paraphrase, summarize, or reformat.
312
+ - List which credential keys from the JSON output this section covers
313
+ - Wait for the user to confirm they've completed the step
314
+ - Re-run `setup-check.js` to verify the item was created
315
+
316
+ 5. **For any failed validations** (status: `fail`):
317
+ - Output the `remediation` text from the validation JSON
318
+ - Also read and output the relevant `node_modules/gentyr/docs/SETUP-GUIDE.md` section for context
319
+ - Wait for user to fix, then re-run `setup-validate.js`
320
+
321
+ 6. **Warnings** (status: `warn`) are informational, not blocking. Display the `remediation` text but proceed.
322
+
323
+ 7. **Proceed to Phase 8** when:
324
+ - All credentials are mapped (`secretsMissing === 0` and `identifiersMissing === 0`)
325
+ - No validation failures (warns are acceptable)
326
+
327
+ 8. Remind the user: **"Restart Claude Code to activate the updated credential mappings."**
328
+
329
+ ### Phase 8: Branch Protection & Deployment Pipeline
330
+
331
+ After verifying MCP servers, set up the deployment pipeline:
332
+
333
+ 1. **Create branches** (if missing):
334
+ ```bash
335
+ # Check if preview and staging branches exist
336
+ git rev-parse --verify origin/preview 2>/dev/null || (git branch preview && git push -u origin preview)
337
+ git rev-parse --verify origin/staging 2>/dev/null || (git branch staging && git push -u origin staging)
338
+ ```
339
+
340
+ 2. **Install merge-chain-check workflow**:
341
+ - Check if `.github/workflows/merge-chain-check.yml` exists
342
+ - If missing, copy from GENTYR template: `${FRAMEWORK_PATH}/templates/config/merge-chain-check.yml.template`
343
+ - This workflow enforces the merge chain: `feature/* -> preview -> staging -> main`
344
+
345
+ 3. **Verify `gh` CLI**:
346
+ ```bash
347
+ gh auth status
348
+ ```
349
+ - If not authenticated, inform the user to run `gh auth login`
350
+
351
+ 4. **Branch protection setup**:
352
+ - Use `AskUserQuestion` to ask: "Which GitHub plan are you on?"
353
+ - Option 1: "Teams" -- Show Teams-compatible branch protection instructions
354
+ - Option 2: "Enterprise Cloud" -- Show Enterprise instructions with additional features
355
+ - Display the branch protection instructions from `node_modules/gentyr/docs/DEPLOYMENT-FLOW.md` (Branch Protection Setup section)
356
+ - Use `AskUserQuestion`: "Have you configured branch protection rules for preview, staging, and main?"
357
+ - Option 1: "Yes, all configured"
358
+ - Option 2: "I'll do it later"
359
+
360
+ 5. **Enable automated promotion**:
361
+ - Read `.claude/autonomous-mode.json`
362
+ - Add/update flags:
363
+ - `previewPromotionEnabled: true`
364
+ - `stagingPromotionEnabled: true`
365
+ - `stagingHealthMonitorEnabled: true`
366
+ - `productionHealthMonitorEnabled: true`
367
+ - Write back to `.claude/autonomous-mode.json`
368
+
369
+ 6. **Update summary** to include:
370
+ ```
371
+ Deployment Pipeline:
372
+ + preview branch exists
373
+ + staging branch exists
374
+ + merge-chain-check.yml installed
375
+ + gh CLI authenticated
376
+ o Branch protection (configure manually in GitHub Settings)
377
+ + Automated promotion enabled
378
+ + Health monitoring enabled
379
+
380
+ Merge chain: feature/* -> preview -> staging -> main
381
+ Promotion: preview->staging (6h), staging->main (nightly)
382
+ Health: staging (3h), production (1h)
383
+ ```
384
+
385
+ ## Important
386
+
387
+ - NEVER echo, log, or display resolved credential values -- only show the credential name and `op://` reference
388
+ - NEVER store actual credential values in any file -- only `op://` references and non-secret identifiers go in `vault-mappings.json`
389
+ - If a user skips a credential, note it and move on -- they can run `/setup-gentyr` again later
390
+ - Re-running `/setup-gentyr` is safe -- it reads existing mappings and only prompts for missing ones
391
+ - All infrastructure MCP servers are designed to fail gracefully if credentials are missing
392
+ - The MCP launcher resolves credentials from 1Password at server startup time
393
+ - Non-secret identifiers (URLs, zone IDs) are stored directly in vault-mappings.json without 1Password
394
+ - OP_SERVICE_ACCOUNT_TOKEN is handled by the install script, not this command
395
+ - Always use `setup-check.js` for evaluation -- do NOT run individual `op` commands
396
+ - Always read SETUP-GUIDE.md and present instructions nearly verbatim -- do NOT paraphrase or summarize
@@ -0,0 +1,42 @@
1
+ <!-- HOOK:GENTYR:show -->
2
+ # /show - Status Display Reference
3
+
4
+ View individual dashboard sections using `mcp__show__*` tools.
5
+
6
+ ## Available Sections
7
+
8
+ | Tool | Description |
9
+ |---|---|
10
+ | `mcp__show__show_quota()` | API quota utilization (5-hour and 7-day usage bars) |
11
+ | `mcp__show__show_accounts()` | Account overview with key status, usage, and subscription info |
12
+ | `mcp__show__show_deputy_cto()` | Deputy-CTO triage pipeline (pending questions, rejections, reports) |
13
+ | `mcp__show__show_usage()` | Usage trends and trajectory projections (line graphs) |
14
+ | `mcp__show__show_automations()` | Running automated agents, token usage by type, and concurrency |
15
+ | `mcp__show__show_testing()` | Test health (pass/fail rates, coverage, Codecov integration) |
16
+ | `mcp__show__show_deployments()` | Recent deployments across Render and Vercel with pipeline status |
17
+ | `mcp__show__show_worktrees()` | Active git worktrees with branch, age, and PR status |
18
+ | `mcp__show__show_infra()` | Infrastructure status (Render, Vercel, Supabase, Elastic, Cloudflare) |
19
+ | `mcp__show__show_logging()` | Log volume, error rates, and top error messages from Elasticsearch |
20
+ | `mcp__show__show_timeline()` | Chronological timeline of recent system events |
21
+ | `mcp__show__show_tasks()` | Task metrics (pending, active, completed) and token usage summary |
22
+ | `mcp__show__show_product_market_fit()` | Product-market-fit analysis with full section content and compliance |
23
+
24
+ ## Usage
25
+
26
+ Call any tool directly. Pass `{ limit: N }` to expand the number of rows shown:
27
+
28
+ ```
29
+ mcp__show__show_deployments() // default rows
30
+ mcp__show__show_deployments({ limit: 20 }) // expanded view
31
+ mcp__show__show_timeline({ limit: 50 }) // more timeline events
32
+ ```
33
+
34
+ ## When to Use
35
+
36
+ - **Before deploying** — check `show_deployments` and `show_infra`
37
+ - **Before heavy work** — check `show_quota` and `show_usage`
38
+ - **Before writing tests** — check `show_testing`
39
+ - **Before spawning agents** — check `show_automations` and `show_tasks`
40
+ - **Before provisioning worktrees** — check `show_worktrees`
41
+
42
+ For the full dashboard, use `/cto-report` instead.
@@ -0,0 +1,79 @@
1
+ <!-- HOOK:GENTYR:spawn-tasks -->
2
+ # /spawn-tasks - Force-Spawn Pending TODO Tasks
3
+
4
+ On-demand command to **force-spawn all pending tasks immediately**, bypassing the hourly automation's age filter, batch limit, cooldowns, and CTO activity gate.
5
+
6
+ The prefetch hook has pre-gathered pending task counts, running agent info, and concurrency limits, injected as `[PREFETCH:spawn-tasks]` context above. Use that data for Step 1.
7
+
8
+ ## Step 1: Display Current State
9
+
10
+ From the prefetch data, display a summary table:
11
+
12
+ | Section | Pending Tasks |
13
+ |---------|--------------|
14
+ | CODE-REVIEWER | N |
15
+ | INVESTIGATOR & PLANNER | N |
16
+ | TEST-WRITER | N |
17
+ | PROJECT-MANAGER | N |
18
+ | DEPUTY-CTO | N |
19
+ | **Total** | **N** |
20
+
21
+ Also show: **Running agents**: N / M (N running, M max concurrent, K available slots)
22
+
23
+ If there are **0 pending tasks**, inform the user and stop — nothing to spawn.
24
+
25
+ ## Step 2: Ask User
26
+
27
+ Use AskUserQuestion with **two questions**:
28
+
29
+ **Question 1** — Which sections to spawn (multiSelect: true):
30
+ - **"Implementation agents"** — CODE-REVIEWER, INVESTIGATOR & PLANNER, TEST-WRITER
31
+ - **"Management agents"** — PROJECT-MANAGER, DEPUTY-CTO
32
+ - **"All sections"** — All 5 sections
33
+ - **"Cancel"** — Do nothing
34
+
35
+ **Question 2** — Concurrency limit (multiSelect: false):
36
+ - **"Current default (N)"** — Use the maxConcurrent value from prefetch (Recommended)
37
+ - **"5"** — Conservative limit
38
+ - **"15"** — Higher limit
39
+ - **"20"** — Maximum limit
40
+
41
+ ## Step 3: Spawn via MCP Tool
42
+
43
+ Map the user's section selection:
44
+ - "Implementation agents" → `["CODE-REVIEWER", "INVESTIGATOR & PLANNER", "TEST-WRITER"]`
45
+ - "Management agents" → `["PROJECT-MANAGER", "DEPUTY-CTO"]`
46
+ - "All sections" → `["CODE-REVIEWER", "INVESTIGATOR & PLANNER", "TEST-WRITER", "PROJECT-MANAGER", "DEPUTY-CTO"]`
47
+ - If both "Implementation agents" and "Management agents" selected → combine both arrays
48
+ - "Cancel" → stop, do nothing
49
+
50
+ If the user chose "Other" and typed specific section names, parse those into the array.
51
+
52
+ Call a single MCP tool:
53
+
54
+ ```
55
+ mcp__agent-tracker__force_spawn_tasks({ sections: [...], maxConcurrent: N })
56
+ ```
57
+
58
+ ## Step 4: Display Results
59
+
60
+ From the tool response, display:
61
+
62
+ - **Spawned** (N): list each task title + agent type + PID
63
+ - **Skipped** (N): list each with reason (e.g., "concurrency limit reached")
64
+ - **Errors** (N): list each with error message
65
+
66
+ ## What This Bypasses
67
+
68
+ - Automation enabled flag (`autonomous-mode.json`)
69
+ - CTO activity gate (24h briefing requirement)
70
+ - Task runner cooldown (1h between cycles)
71
+ - Task age filter (1h minimum age)
72
+ - MAX_TASKS_PER_CYCLE (3 per cycle)
73
+
74
+ ## What This Preserves
75
+
76
+ - Concurrency guard (configurable via maxConcurrent parameter)
77
+ - Task status tracking (marks in_progress, resets on failure)
78
+ - Agent tracker registration (spawned agents appear in `/cto-report`)
79
+ - Tasks already in_progress are excluded
@@ -0,0 +1,75 @@
1
+ <!-- HOOK:GENTYR:toggle-automation -->
2
+ # /toggle-automation-gentyr - Toggle GENTYR Automation
3
+
4
+ Toggles the GENTYR automation service between active and paused states. The persistent service (launchd/systemd) keeps running but does nothing when paused.
5
+
6
+ The prefetch hook has pre-gathered the current automation state and injected it as `[PREFETCH:toggle-automation]` context above. Use that data for Step 1 instead of calling the MCP tool. If the prefetch data is missing, fall back to the MCP call.
7
+
8
+ ## What This Controls
9
+
10
+ The automation service runs every 10 minutes and handles:
11
+ - Report triage (deputy-cto reviews pending agent reports)
12
+ - Lint checking and auto-fixing
13
+ - Task runner (processes pending TODO items)
14
+ - Preview -> Staging promotion pipeline
15
+ - Staging -> Production promotion pipeline
16
+ - Staging health monitoring
17
+ - Production health monitoring
18
+ - Standalone antipattern hunting
19
+ - Standalone compliance checking
20
+ - CLAUDE.md size refactoring
21
+
22
+ When **paused**, the service still fires every 10 minutes but immediately exits without doing anything.
23
+
24
+ ## Flow
25
+
26
+ ### Step 1: Check Current Status
27
+
28
+ ```javascript
29
+ mcp__deputy-cto__get_autonomous_mode_status()
30
+ ```
31
+
32
+ Display the current state to the user:
33
+ - Whether automation is enabled or disabled
34
+ - When it was last modified and by whom
35
+
36
+ ### Step 2: Toggle
37
+
38
+ Use `AskUserQuestion` to confirm the action:
39
+ - **Question:** "Automation is currently {ENABLED/DISABLED}. What would you like to do?"
40
+ - **Header:** "Automation"
41
+ - **Options:**
42
+ - "Pause all automation" (if currently enabled)
43
+ - "Resume all automation" (if currently disabled)
44
+ - "Show detailed status" (shows last log entries)
45
+
46
+ If "Show detailed status":
47
+ - Read the last 30 lines of `.claude/hourly-automation.log`
48
+ - Read `.claude/hourly-automation-state.json` for last run timestamps
49
+ - Display summary of each automation's last run time and next scheduled run
50
+ - Return to Step 2
51
+
52
+ If toggling:
53
+
54
+ ```javascript
55
+ mcp__deputy-cto__toggle_autonomous_mode({ enabled: true/false })
56
+ ```
57
+
58
+ ### Step 3: Confirm
59
+
60
+ Display the new state:
61
+ ```
62
+ GENTYR Automation: {ENABLED/PAUSED}
63
+
64
+ The persistent service (launchd) continues running.
65
+ {If paused: It will check every 10 minutes but take no actions until re-enabled.}
66
+ {If enabled: Automations will resume on the next 10-minute cycle.}
67
+ ```
68
+
69
+ ## Important
70
+
71
+ - This does NOT stop or remove the launchd/systemd service
72
+ - This only sets `enabled: false` in `.claude/autonomous-mode.json`
73
+ - The service reads this config on every run and skips all work when disabled
74
+ - Individual automations can also be toggled separately in `autonomous-mode.json`
75
+ - To fully remove the service: `node_modules/gentyr/scripts/setup-automation-service.sh remove`
@@ -0,0 +1,19 @@
1
+ <!-- HOOK:GENTYR:toggle-product-manager -->
2
+ # /toggle-product-manager - Enable/Disable Product Market Fit Analysis
3
+
4
+ Read the current state from `.claude/autonomous-mode.json` field `productManagerEnabled`.
5
+
6
+ ## If currently DISABLED:
7
+ 1. Show explanation: "Product-market-fit analysis adds a product-manager agent that researches your competitive landscape, buyer personas, pricing models, and user sentiment. It integrates with the persona/feedback system."
8
+ 2. Ask: "Enable product-market-fit analysis?"
9
+ 3. If yes:
10
+ - Read `.claude/autonomous-mode.json`, set `productManagerEnabled: true`, write back
11
+ - Copy the product-manager agent: create symlink at `.claude/agents/product-manager.md` pointing to `../../node_modules/gentyr/.claude/agents/product-manager.md`
12
+ - Inform the user that changes are saved and they should restart Claude Code manually for the agent to take effect
13
+
14
+ ## If currently ENABLED:
15
+ 1. Ask: "Disable product-market-fit analysis? The agent will be removed but your analysis data in `.claude/state/product-manager.db` will be preserved."
16
+ 2. If yes:
17
+ - Read `.claude/autonomous-mode.json`, set `productManagerEnabled: false`, write back
18
+ - Remove `.claude/agents/product-manager.md` symlink
19
+ - Inform the user that changes are saved and they should restart Claude Code manually for the change to take effect