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,477 @@
1
+ # GENTYR Deployment Flow Reference
2
+
3
+ Complete deployment pipeline reference for GENTYR-managed projects.
4
+
5
+ ## Infrastructure Architecture
6
+
7
+ ```
8
+ Vercel (Frontend) <--> Render (Backend API) <--> Supabase (Database)
9
+ | |
10
+ Cloudflare (DNS) 1Password (Secrets)
11
+ | |
12
+ GitHub Actions (CI/CD) Elastic Cloud (Logs)
13
+ |
14
+ Resend (Email)
15
+ ```
16
+
17
+ ## 4 Environments
18
+
19
+ | Environment | Branch | Frontend | Backend | Database | CTO Protection |
20
+ |-------------|--------|----------|---------|----------|----------------|
21
+ | **Development** | `feature/*` | localhost | localhost | Supabase preview branch | None |
22
+ | **Preview** | `preview` | Vercel preview | Render staging | Supabase preview branch | None |
23
+ | **Staging** | `staging` | Vercel staging | Render staging | Supabase staging branch | Optional |
24
+ | **Production** | `main` | Vercel production | Render production | Supabase main branch | **Required** |
25
+
26
+ ## Branch Strategy & Merge Chain
27
+
28
+ ### Canonical Chain
29
+
30
+ ```
31
+ feature/* --PR--> preview --PR--> staging --PR--> main (production)
32
+ | | | |
33
+ | No approval | Deputy-CTO | CTO |
34
+ | | approval | approval |
35
+ v v v v
36
+ CI only Vercel preview Vercel staging Vercel prod
37
+ Render staging Render staging Render prod
38
+ Supabase preview Supabase staging Supabase main
39
+ ```
40
+
41
+ ### Merge Rules (ENFORCED)
42
+
43
+ | Source | Target | Allowed | Approval |
44
+ |--------|--------|---------|----------|
45
+ | `feature/*` | `preview` | YES | None (agent autonomous) |
46
+ | `preview` | `staging` | YES | Deputy-CTO |
47
+ | `staging` | `main` | YES | **CTO** |
48
+ | `feature/*` | `staging` | **FORBIDDEN** | - |
49
+ | `feature/*` | `main` | **FORBIDDEN** | - |
50
+ | `preview` | `main` | **FORBIDDEN** | - |
51
+
52
+ Enforcement: `merge-chain-check.yml` CI workflow (required status check) + agent instructions.
53
+
54
+ **Why CI enforcement?** GitHub has NO native rule on any plan (Teams or Enterprise) to restrict which source branch a PR comes from. The `merge-chain-check.yml` workflow fills this gap.
55
+
56
+ ## Local Branch Protection
57
+
58
+ ### Pre-Commit Guard (Unbypassable)
59
+
60
+ GENTYR enforces branch protection at the local level via pre-commit and pre-push hooks. Direct commits to protected branches (`main`, `staging`, `preview`) are blocked:
61
+
62
+ ```
63
+ COMMIT BLOCKED: Direct commits to 'main' are forbidden.
64
+
65
+ Merge chain: feature/* -> preview -> staging -> main
66
+
67
+ Create a feature branch:
68
+ git checkout -b feature/<name> preview
69
+ ```
70
+
71
+ The guard is enforced by `.claude/hooks/pre-commit-review.js` and cannot be bypassed with `--no-verify` (blocked by `block-no-verify.js`).
72
+
73
+ **Exception**: Promotion pipeline agents with `GENTYR_PROMOTION_PIPELINE=true` are allowed to merge PRs to protected branches.
74
+
75
+ ### Pre-Push Guard
76
+
77
+ The pre-push hook (`templates/config/husky/pre-push.template`) blocks direct pushes to protected branches:
78
+
79
+ ```bash
80
+ PUSH BLOCKED: Direct pushes to 'main' are forbidden.
81
+
82
+ Merge chain: feature/* -> preview -> staging -> main
83
+ Push to your feature branch instead, then create a PR to preview.
84
+ ```
85
+
86
+ This provides immediate local feedback before any attempt to push to a protected branch.
87
+
88
+ ## Git Worktrees for Concurrent Agents
89
+
90
+ GENTYR uses git worktrees to enable multiple agents to work concurrently on separate feature branches without checkout conflicts. Each agent gets an isolated working directory.
91
+
92
+ **Worktree lifecycle:**
93
+ 1. Task agent spawns → worktree manager creates `.claude/worktrees/<branch-name>/`
94
+ 2. Worktree provisioned with symlinks to `.claude/agents/`, `.claude/hooks/`, `.husky/`
95
+ 3. Worktree-specific `.mcp.json` generated with `CLAUDE_PROJECT_DIR` pointing to main project
96
+ 4. Agent works in isolation, commits to feature branch
97
+ 5. After branch merged to preview → worktree cleanup (6-hour cycle)
98
+
99
+ **State isolation:** SQLite databases (todo.db, deputy-cto.db, agent-tracker.db) remain in main project directory, shared via `CLAUDE_PROJECT_DIR` environment variable.
100
+
101
+ **Modules:**
102
+ - `.claude/hooks/lib/worktree-manager.js` - Worktree lifecycle (create, provision, cleanup)
103
+ - `.claude/hooks/lib/feature-branch-helper.js` - Branch naming and protection checks
104
+
105
+ ## Feature Branch Workflow
106
+
107
+ ### Creating Feature Branches
108
+
109
+ All work should be organized into descriptive feature branches:
110
+
111
+ ```bash
112
+ # Create from latest preview
113
+ git checkout preview
114
+ git pull origin preview
115
+ git checkout -b feature/add-user-auth
116
+ ```
117
+
118
+ **Automated creation:** When task agents spawn, the worktree manager automatically creates feature branches from `preview` if they don't exist.
119
+
120
+ ### Branch Naming
121
+
122
+ - `feature/<description>` -- New functionality
123
+ - `fix/<description>` -- Bug fixes
124
+ - `refactor/<description>` -- Code refactoring
125
+ - `docs/<description>` -- Documentation changes
126
+
127
+ ### Merging to Preview
128
+
129
+ When the feature is complete and CI passes:
130
+
131
+ ```bash
132
+ # Push feature branch
133
+ git push -u origin feature/add-user-auth
134
+
135
+ # Create PR to preview
136
+ gh pr create --base preview --title "Add user authentication" --body "..."
137
+
138
+ # Merge after CI passes (no approval needed)
139
+ gh pr merge --merge
140
+ ```
141
+
142
+ ### When to Merge
143
+
144
+ - CI passes (lint, type check, unit tests, build)
145
+ - Code review complete
146
+ - No blocking issues
147
+ - Feature is functionally complete
148
+
149
+ ### When NOT to Merge
150
+
151
+ - Tests failing
152
+ - Unresolved code review issues
153
+ - Incomplete feature
154
+ - Blocked by dependencies
155
+
156
+ ## Emergency Hotfix Pathway
157
+
158
+ When production is broken and a fix has already landed on staging, the CTO can trigger immediate promotion bypassing time gates.
159
+
160
+ **Prerequisites:**
161
+ - Fix must be merged to staging
162
+ - CTO authorization required
163
+
164
+ **Workflow:**
165
+ 1. Agent calls `mcp__deputy-cto__request_hotfix_promotion`
166
+ - Validates staging has unreleased commits
167
+ - Returns 6-character approval code (expires in 5 minutes)
168
+ 2. Agent presents code to CTO: `APPROVE HOTFIX <code>`
169
+ 3. CTO types approval in terminal (agents cannot trigger UserPromptSubmit hooks)
170
+ 4. Agent calls `mcp__deputy-cto__execute_hotfix_promotion` with code
171
+ - Validates HMAC-signed token
172
+ - Spawns staging→main promotion agent immediately
173
+
174
+ **What Gets Bypassed:**
175
+ - 24-hour stability requirement
176
+ - Midnight deployment window
177
+
178
+ **What Remains Required:**
179
+ - Code review (via spawned promotion agent)
180
+ - Deputy-CTO approval
181
+ - Isolated worktree (no disruption to other work)
182
+
183
+ **Safety:**
184
+ - One-time codes (HMAC-signed, consumed on use)
185
+ - 5-minute expiration
186
+ - Only CTO can approve (terminal input required)
187
+
188
+ See `.claude/commands/hotfix.md` for usage details.
189
+
190
+ ## Automated Promotion Pipelines
191
+
192
+ ### Preview -> Staging (6-hour cycle)
193
+
194
+ The hourly automation checks every 6 hours for new commits on `preview` not yet in `staging`.
195
+
196
+ **Conditions:**
197
+ 1. New commits exist on `preview` not in `staging`
198
+ 2. >= 24 hours since last staging merge (unless bug-fix commits detected)
199
+ 3. Bug-fix fast-track: Commits with keywords `fix`, `bug`, `hotfix`, `patch`, `critical` bypass the 24h wait
200
+
201
+ **Pipeline:**
202
+ 1. Spawn code-reviewer agent to review commits
203
+ 2. Spawn test-writer agent to assess test quality
204
+ 3. If both pass, deputy-CTO makes the merge decision
205
+ 4. Deputy-CTO creates PR: `gh pr create --base staging --head preview`
206
+ 5. Wait for CI to pass, then merge
207
+
208
+ ### Staging -> Production (midnight cycle)
209
+
210
+ Checked once nightly during the midnight window (00:00-00:30).
211
+
212
+ **Conditions:**
213
+ 1. New commits exist on `staging` not in `main`
214
+ 2. Staging has been stable >= 24 hours (no bypass)
215
+ 3. Midnight time window
216
+
217
+ **Pipeline:**
218
+ 1. Same review pipeline (code-reviewer + test-writer)
219
+ 2. Deputy-CTO creates PR: `gh pr create --base main --head staging`
220
+ 3. Deputy-CTO creates CTO decision task via `add_question`
221
+ 4. CTO approves via `/deputy-cto` slash command
222
+ 5. Merge executed after CTO approval
223
+
224
+ ## Stale Work Detection
225
+
226
+ GENTYR automatically detects stale branches and uncommitted work via `.claude/hooks/stale-work-detector.js`.
227
+
228
+ **Detection categories:**
229
+ 1. **Uncommitted changes** - `git status --porcelain` in project directory
230
+ 2. **Unpushed commits** - `git log origin/<branch>..HEAD --oneline` for each local branch
231
+ 3. **Stale feature branches** - Remote feature branches with no PR activity in 3+ days
232
+
233
+ **Integration:**
234
+ - Runs every 24 hours via hourly automation
235
+ - Reports via `mcp__agent-reports__report_to_deputy_cto` with category `git-hygiene`
236
+ - Surfaced in `/deputy-cto` briefing under "Merge Chain Status"
237
+ - Deputy-CTO either auto-handles (spawns cleanup task) or escalates to CTO
238
+
239
+ **Deputy-CTO MCP tool:** `get_merge_chain_status` returns structured merge chain state for briefing.
240
+
241
+ ## Health Monitoring
242
+
243
+ ### Staging Health Monitor (3-hour cycle)
244
+
245
+ Runs every 3 hours when the `staging` branch exists and has been deployed.
246
+
247
+ **Checks:**
248
+ | Check | MCP Tool | What to Look For |
249
+ |-------|----------|-----------------|
250
+ | Render service status | `mcp__render__render_get_service` | Service health, deploy failures |
251
+ | Render recent deploys | `mcp__render__render_list_deploys` | Failed or stuck deploys |
252
+ | Vercel deployments | `mcp__vercel__vercel_list_deployments` | Build failures, error states |
253
+ | Elasticsearch errors | `mcp__elastic-logs__query_logs` | `level:error` in last 3h |
254
+ | Error rate stats | `mcp__elastic-logs__get_log_stats` | Error count grouped by service |
255
+ | Supabase health | Supabase MCP tools | Migration issues, connectivity |
256
+
257
+ **Reporting:** Issues are reported to deputy-CTO via `mcp__cto-reports__report_to_cto` and fixer tasks are created via `create_task` with `priority: 'urgent'`.
258
+
259
+ ### Production Health Monitor (1-hour cycle)
260
+
261
+ Same checks as staging (targeting production services), plus:
262
+
263
+ | Additional Action | MCP Tool | Purpose |
264
+ |-------------------|----------|---------|
265
+ | CTO escalation | `mcp__deputy-cto__add_question` | Creates CTO decision task |
266
+ | Deputy-CTO report | `mcp__cto-reports__report_to_cto` | Health report for triage |
267
+ | Fixer task | `mcp__todo-db__create_task` (priority: urgent) | Tasks to address issues |
268
+
269
+ Production issues use `priority: "critical"` for reporting and escalation.
270
+
271
+ ### Service IDs
272
+
273
+ Health monitors read service IDs from `.claude/config/services.json`:
274
+
275
+ ```json
276
+ {
277
+ "render": {
278
+ "production": "srv-xxx",
279
+ "staging": "srv-yyy"
280
+ },
281
+ "vercel": {
282
+ "projectId": "prj_xxx"
283
+ }
284
+ }
285
+ ```
286
+
287
+ This file is created during `/setup-gentyr` Phase 4.
288
+
289
+ ## Deployment Pipeline
290
+
291
+ ### Stage 1: Feature Development
292
+
293
+ 1. Create feature branch from `preview`
294
+ 2. Develop and test locally
295
+ 3. CI runs: lint, type check, unit tests, build
296
+ 4. Push to feature branch
297
+
298
+ ### Stage 2: Preview
299
+
300
+ 1. Create PR: `feature/*` -> `preview`
301
+ 2. CI runs (merge-chain-check, lint, tests, build)
302
+ 3. Merge (no approval needed)
303
+ 4. Vercel deploys preview
304
+ 5. Supabase preview branch active
305
+
306
+ ### Stage 3: Staging
307
+
308
+ 1. Automated pipeline creates PR: `preview` -> `staging` (every 6h)
309
+ 2. Code review + test assessment
310
+ 3. Deputy-CTO approves
311
+ 4. CI runs
312
+ 5. Merge
313
+ 6. Vercel deploys staging
314
+ 7. Render deploys staging
315
+
316
+ ### Stage 4: Production
317
+
318
+ 1. Automated pipeline creates PR: `staging` -> `main` (nightly)
319
+ 2. Code review + test assessment
320
+ 3. Deputy-CTO creates CTO decision task
321
+ 4. **CTO approves** via `/deputy-cto`
322
+ 5. CI runs (includes security scan)
323
+ 6. Merge
324
+ 7. Vercel deploys production
325
+ 8. Render deploys production
326
+
327
+ ## CI Pipeline
328
+
329
+ ```
330
+ Merge Chain Check ─────────────────────────────────────────────
331
+ |
332
+ Lint & Type Check ──> Unit Tests ──> Security Scan ──> Build ──|
333
+ | |
334
+ Integration Tests ──> E2E Tests |
335
+ |
336
+ Deploy (per branch target) <───────────────────────────────────
337
+ ```
338
+
339
+ **Required status checks per branch:**
340
+
341
+ | Branch | Required Checks |
342
+ |--------|----------------|
343
+ | `preview` | Validate Merge Chain, Lint & Type Check, Unit Tests, Build |
344
+ | `staging` | Validate Merge Chain, Lint & Type Check, Unit Tests, Build |
345
+ | `main` | Validate Merge Chain, Lint & Type Check, Unit Tests, Build, Security Scan |
346
+
347
+ ## MCP Tools for Deployment & Monitoring
348
+
349
+ | Tool | Action | Approval |
350
+ |------|--------|----------|
351
+ | `mcp__vercel__vercel_list_deployments` | List deployments | None |
352
+ | `mcp__vercel__vercel_promote_deployment` | Promote deployment | `APPROVE DEPLOY` |
353
+ | `mcp__vercel__vercel_rollback` | Rollback deployment | `APPROVE DEPLOY` |
354
+ | `mcp__vercel__vercel_create_env_var` | Set environment variable | `APPROVE DEPLOY` |
355
+ | `mcp__render__render_list_services` | List services | None |
356
+ | `mcp__render__render_get_service` | Get service details | None |
357
+ | `mcp__render__render_trigger_deploy` | Trigger deployment | `APPROVE INFRA` |
358
+ | `mcp__render__render_update_service` | Update service config | `APPROVE INFRA` |
359
+ | `mcp__render__render_create_env_var` | Set environment variable | `APPROVE INFRA` |
360
+ | `mcp__supabase__supabase_sql` | Execute SQL | `APPROVE DATABASE` |
361
+ | `mcp__github__github_merge_pull_request` | Merge PR | `APPROVE GIT` |
362
+ | `mcp__github__github_create_pull_request` | Create PR | `APPROVE GIT` |
363
+ | `mcp__elastic-logs__query_logs` | Query logs | None |
364
+ | `mcp__elastic-logs__get_log_stats` | Log statistics | None |
365
+
366
+ ## GENTYR Approval Gates
367
+
368
+ | Phrase | Scope | When Required |
369
+ |--------|-------|---------------|
370
+ | `APPROVE GIT` | GitHub: merges, secrets, branch protection | Production merges, secret management |
371
+ | `APPROVE DEPLOY` | Vercel: promotions, env vars, rollbacks | Frontend deployment changes |
372
+ | `APPROVE INFRA` | Render: deploys, service changes, env vars | Backend infrastructure changes |
373
+ | `APPROVE DATABASE` | Supabase: SQL, migrations, deletions | Database operations on production |
374
+ | `APPROVE DNS` | Cloudflare: DNS record changes | DNS configuration |
375
+ | `APPROVE VAULT` | 1Password: service account creation | Secret management infrastructure |
376
+ | `APPROVE EMAIL` | Resend: API key management | Email service configuration |
377
+ | `APPROVE BYPASS` | Deputy-CTO: emergency bypass | Bypassing automated protections |
378
+ | `APPROVE HOTFIX` | Deputy-CTO: emergency promotion | Immediate staging→main promotion |
379
+
380
+ ## Rollback Procedures
381
+
382
+ ### Frontend (Vercel)
383
+
384
+ ```bash
385
+ # List recent deployments
386
+ mcp__vercel__vercel_list_deployments
387
+
388
+ # Rollback to previous deployment (requires APPROVE DEPLOY)
389
+ mcp__vercel__vercel_rollback
390
+ ```
391
+
392
+ ### Backend (Render)
393
+
394
+ ```bash
395
+ # View recent deploys
396
+ mcp__render__render_list_deploys
397
+
398
+ # Trigger redeploy of last known good commit (requires APPROVE INFRA)
399
+ mcp__render__render_trigger_deploy
400
+ ```
401
+
402
+ ### Database (Supabase)
403
+
404
+ ```bash
405
+ # Check migration status (requires APPROVE DATABASE for production)
406
+ mcp__supabase__supabase_sql
407
+
408
+ # Rollback migration (requires APPROVE DATABASE)
409
+ # Run the down migration SQL
410
+ ```
411
+
412
+ ### Full Rollback
413
+
414
+ For critical production issues:
415
+ 1. Rollback frontend (Vercel) -- immediate
416
+ 2. Rollback backend (Render) -- redeploy previous commit
417
+ 3. Rollback database -- run down migration if applicable
418
+ 4. Verify health via production health monitor
419
+
420
+ ## Branch Protection Setup
421
+
422
+ ### GitHub Teams Plan (Branch Protection Rules)
423
+
424
+ Go to: Repository > Settings > Branches > Add branch protection rule
425
+
426
+ #### `preview` branch
427
+
428
+ - Branch name pattern: `preview`
429
+ - Require a pull request before merging: YES
430
+ - Required approving reviews: `0` (feature -> preview is autonomous)
431
+ - Dismiss stale pull request approvals: YES
432
+ - Require status checks to pass: YES
433
+ - Required checks: `Validate Merge Chain`, `Lint & Type Check`, `Unit Tests`, `Build`
434
+ - Require branches to be up to date: YES
435
+ - Block force pushes: YES
436
+ - Do not allow bypassing the above settings: YES
437
+
438
+ #### `staging` branch
439
+
440
+ - Branch name pattern: `staging`
441
+ - Require a pull request before merging: YES
442
+ - Required approving reviews: `1` (deputy-CTO review)
443
+ - Dismiss stale pull request approvals: YES
444
+ - Require status checks to pass: YES
445
+ - Required checks: `Validate Merge Chain`, `Lint & Type Check`, `Unit Tests`, `Build`
446
+ - Require branches to be up to date: YES
447
+ - Block force pushes: YES
448
+ - Do not allow bypassing the above settings: YES
449
+
450
+ #### `main` branch
451
+
452
+ - Branch name pattern: `main`
453
+ - Require a pull request before merging: YES
454
+ - Required approving reviews: `1` (CTO review)
455
+ - Dismiss stale pull request approvals: YES
456
+ - Require status checks to pass: YES
457
+ - Required checks: `Validate Merge Chain`, `Lint & Type Check`, `Unit Tests`, `Build`, `Security Scan`
458
+ - Require branches to be up to date: YES
459
+ - Block force pushes: YES
460
+ - Do not allow bypassing the above settings: YES
461
+ - Restrict who can push: (optional, restrict to admins only)
462
+
463
+ ### GitHub Enterprise Cloud (Additional Features)
464
+
465
+ If on Enterprise Cloud, also configure:
466
+ - **Organization Rulesets** (Settings > Rules > Rulesets): Apply merge chain rules across all repos
467
+ - **Deployment Protection Rules**: Require manual approval for `staging` and `production` environments
468
+ - **Merge Queue** for `main`: Automatically rebase and test PRs before merging
469
+ - **Required Team Reviews**: Use rulesets to require specific team approvals
470
+
471
+ ## Prerequisites
472
+
473
+ - `gh` CLI installed and authenticated: `gh auth login`
474
+ - Branch protection configured per above
475
+ - `.claude/config/services.json` populated with service IDs
476
+ - All MCP servers configured via `/setup-gentyr`
477
+ - `merge-chain-check.yml` in `.github/workflows/` (copied from GENTYR template)
@@ -0,0 +1,116 @@
1
+ # GENTYR Developer Guide
2
+
3
+ Local development from the cloned gentyr source repository.
4
+
5
+ ## Prerequisites
6
+
7
+ - Node.js 20+
8
+ - pnpm 8+
9
+ - Claude Code CLI
10
+
11
+ ## Setup: Link gentyr to a target project
12
+
13
+ ```bash
14
+ cd ~/git/my-project # your target project
15
+ pnpm link ~/git/gentyr # creates node_modules/gentyr -> ~/git/gentyr
16
+ npx gentyr init --op-token TOKEN # first-time setup (configs, symlinks, services)
17
+ sudo npx gentyr protect # optional: enable root-owned file protection
18
+ ```
19
+
20
+ `pnpm link` creates a symlink from `node_modules/gentyr` to your local gentyr working tree. All framework changes propagate automatically through this symlink.
21
+
22
+ ## Propagation model
23
+
24
+ After linking, editing anything in `~/git/gentyr` takes effect:
25
+
26
+ | What you edit | When it takes effect | Mechanism |
27
+ |---|---|---|
28
+ | Hook JS code (`.claude/hooks/`) | Immediate | Directory symlink |
29
+ | Command MDs (`.claude/commands/`) | Immediate | Directory symlink |
30
+ | Agent definitions (`.claude/agents/*.md`) | Immediate | File symlinks |
31
+ | MCP docs (`.claude/docs/`) | Immediate | Directory symlink |
32
+ | MCP server dist JS | Immediate (after TS build) | Referenced via node_modules/gentyr in .mcp.json |
33
+ | `settings.json.template` | Next Claude Code session | SessionStart re-merges on config hash change |
34
+ | `.mcp.json.template` | Next Claude Code session | SessionStart regenerates on config hash change |
35
+ | MCP TypeScript source | Next Claude Code session | Auto-rebuild attempted; build explicitly after edits |
36
+ | Husky hooks (`husky/`) | Next Claude Code session | Auto-sync compares and re-copies |
37
+ | `CLAUDE.md.gentyr-section` | Next Claude Code session | SessionStart replaces managed section |
38
+ | New agent definitions | Next Claude Code session | SessionStart symlinks on version change |
39
+ | `rotation-proxy.js` | Next service restart | Launchd plist uses resolved path |
40
+ | `hourly-automation.js` | Next 10-min trigger | Launchd plist uses symlink path |
41
+ | Launchd plist config | `npx gentyr sync` in target project | Developer responsibility (rare) |
42
+
43
+ No manual copy steps are needed. Everything auto-propagates through symlinks or the SessionStart sync hook.
44
+
45
+ ## Migrate an existing project
46
+
47
+ If the target project was previously installed via `.claude-framework`:
48
+
49
+ ```bash
50
+ cd ~/git/my-project
51
+ pnpm link ~/git/gentyr # creates node_modules/gentyr
52
+ npx gentyr migrate # converts symlinks, regenerates .mcp.json
53
+ ```
54
+
55
+ ## Common development tasks
56
+
57
+ ### Edit a hook
58
+
59
+ Edit the file directly in `~/git/gentyr/.claude/hooks/`. Changes are visible immediately in any linked project (directory symlink).
60
+
61
+ ### Edit an MCP server
62
+
63
+ Edit TypeScript in `~/git/gentyr/packages/mcp-servers/src/`. The next Claude Code session will auto-rebuild when it detects `src/` is newer than `dist/`. Or rebuild manually:
64
+
65
+ ```bash
66
+ cd ~/git/gentyr/packages/mcp-servers && npm run build
67
+ ```
68
+
69
+ ### Edit settings.json.template
70
+
71
+ Edit `~/git/gentyr/.claude/settings.json.template`. The next Claude Code session detects the config hash change and re-merges into the target project's `settings.json`.
72
+
73
+ ### Edit husky hooks
74
+
75
+ Edit files in `~/git/gentyr/husky/`. The next Claude Code session compares content and re-copies any changed hooks to `.husky/` in the target project.
76
+
77
+ ### Edit CLAUDE.md section
78
+
79
+ Edit `~/git/gentyr/CLAUDE.md.gentyr-section`. The next Claude Code session replaces the managed section (between `<!-- GENTYR-FRAMEWORK-START -->` and `<!-- GENTYR-FRAMEWORK-END -->` markers) in the target project's `CLAUDE.md`.
80
+
81
+ ### Force sync everything
82
+
83
+ ```bash
84
+ cd ~/git/my-project && npx gentyr sync
85
+ ```
86
+
87
+ Rebuilds MCP servers, re-merges settings.json, regenerates .mcp.json, syncs husky hooks, and regenerates launchd plists.
88
+
89
+ ## Protection
90
+
91
+ Root-owned file protection prevents agent self-modification of critical framework files:
92
+
93
+ ```bash
94
+ sudo npx gentyr protect # enable protection
95
+ sudo npx gentyr unprotect # disable (required before editing protected files)
96
+ ```
97
+
98
+ When protection is active, `.claude/hooks/` is root-owned. You must unprotect before creating new files there.
99
+
100
+ ## Verify installation
101
+
102
+ ```bash
103
+ cd ~/git/my-project && npx gentyr status
104
+ cd ~/git/my-project && claude mcp list # verify all MCP servers start
105
+ ```
106
+
107
+ ## For published package users
108
+
109
+ Non-developers install from npm:
110
+
111
+ ```bash
112
+ pnpm add gentyr
113
+ npx gentyr init --op-token TOKEN
114
+ ```
115
+
116
+ Updates require `pnpm update gentyr`.