@haposoft/cafekit 0.16.0-rc.7 → 0.16.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 (299) hide show
  1. package/README.md +116 -27
  2. package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
  3. package/bin/__tests__/codex-hooks.test.js +295 -0
  4. package/bin/__tests__/codex-native.test.js +2289 -34
  5. package/bin/__tests__/develop-contract.test.js +400 -23
  6. package/bin/__tests__/installer-safety.test.js +3 -3
  7. package/bin/__tests__/optional-skill-inventory.test.js +249 -0
  8. package/bin/__tests__/output-styles.test.js +214 -0
  9. package/bin/__tests__/package-inventory.test.js +2131 -16
  10. package/bin/__tests__/runtime-schema.test.js +111 -0
  11. package/bin/__tests__/secret-output-guardrail.test.js +122 -0
  12. package/bin/__tests__/skill-routing-source.test.js +172 -0
  13. package/bin/__tests__/specs-v2-execution-closeout.test.js +1 -1
  14. package/bin/install.js +10 -0
  15. package/bin/lib/codex-install.js +170 -5
  16. package/bin/lib/context.js +14 -0
  17. package/bin/lib/i18n.js +12 -6
  18. package/bin/lib/skill-deps.js +5 -5
  19. package/bin/phases/claude-runtime.js +23 -0
  20. package/bin/phases/claude-settings.js +8 -0
  21. package/bin/phases/codex-hooks.js +156 -0
  22. package/bin/phases/codex-runtime.js +29 -38
  23. package/bin/phases/copy-payload.js +8 -2
  24. package/bin/phases/select-skill-bundles.js +96 -0
  25. package/bin/phases/skill-inventory.js +71 -0
  26. package/bin/phases/skills-setup.js +9 -2
  27. package/bin/phases/write-metadata.js +8 -5
  28. package/package.json +8 -2
  29. package/src/claude/CLAUDE.md +3 -3
  30. package/src/claude/agents/brainstormer.md +52 -69
  31. package/src/claude/agents/code-auditor.md +32 -14
  32. package/src/claude/agents/debugger.md +35 -20
  33. package/src/claude/agents/deployer.md +12 -5
  34. package/src/claude/agents/docs-keeper.md +11 -1
  35. package/src/claude/agents/implementer.md +25 -13
  36. package/src/claude/agents/inspector.md +6 -3
  37. package/src/claude/agents/project-manager.md +1 -1
  38. package/src/claude/agents/researcher.md +26 -55
  39. package/src/claude/agents/spec-maker.md +24 -13
  40. package/src/claude/agents/strategist.md +52 -0
  41. package/src/claude/agents/test-runner.md +117 -132
  42. package/src/claude/agents/ui-ux-designer.md +1 -1
  43. package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
  44. package/src/claude/hooks/__tests__/precompact.test.js +158 -0
  45. package/src/claude/hooks/__tests__/spec-gate.test.js +87 -4
  46. package/src/claude/hooks/__tests__/state.test.js +254 -3
  47. package/src/claude/hooks/__tests__/statusline.test.js +196 -0
  48. package/src/claude/hooks/agent.cjs +1 -1
  49. package/src/claude/hooks/docs-sync.cjs +12 -10
  50. package/src/claude/hooks/inspect-block.cjs +1 -1
  51. package/src/claude/hooks/lib/config.cjs +3 -0
  52. package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
  53. package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
  54. package/src/claude/hooks/precompact.cjs +105 -0
  55. package/src/claude/hooks/rules.cjs +1 -1
  56. package/src/claude/hooks/secret-output-guardrail.cjs +43 -0
  57. package/src/claude/hooks/session.cjs +27 -1
  58. package/src/claude/hooks/spec-gate.cjs +3 -3
  59. package/src/claude/hooks/spec-state.cjs +32 -5
  60. package/src/claude/hooks/state.cjs +1 -1
  61. package/src/claude/hooks/task-scaffold-guard.cjs +1 -1
  62. package/src/claude/hooks/usage.cjs +1 -1
  63. package/src/claude/migration-manifest.json +29 -15
  64. package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
  65. package/src/claude/output-styles/coding-level-1-junior.md +124 -0
  66. package/src/claude/output-styles/coding-level-2-mid.md +146 -0
  67. package/src/claude/output-styles/coding-level-3-senior.md +148 -0
  68. package/src/claude/output-styles/coding-level-4-lead.md +159 -0
  69. package/src/claude/output-styles/coding-level-5-god.md +91 -0
  70. package/src/claude/references/debugger/core-philosophy.md +5 -3
  71. package/src/claude/references/debugger/frontend-verification.md +2 -2
  72. package/src/claude/references/debugger/log-ci-analysis.md +13 -1
  73. package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
  74. package/src/claude/references/debugger/performance-diagnostics.md +2 -2
  75. package/src/claude/references/debugger/root-cause-tracing.md +37 -6
  76. package/src/claude/references/debugger/side-effect-gate.md +3 -1
  77. package/src/claude/references/debugger/verification-protocol.md +13 -12
  78. package/src/claude/rules/orchestrator.md +7 -1
  79. package/src/claude/rules/process-management.md +39 -0
  80. package/src/claude/rules/review-audit-self-decision.md +48 -0
  81. package/src/claude/rules/skill-domain-routing.md +26 -24
  82. package/src/claude/rules/skill-workflow-routing.md +22 -14
  83. package/src/claude/rules/workflow.md +3 -3
  84. package/src/claude/runtime.json +1 -0
  85. package/src/claude/runtime.schema.json +205 -0
  86. package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
  87. package/src/claude/scripts/provenance.cjs +18 -5
  88. package/src/claude/scripts/spec-receipt.cjs +76 -21
  89. package/src/claude/scripts/spec-resolver.cjs +144 -4
  90. package/src/claude/scripts/workflow-policy.cjs +1 -1
  91. package/src/claude/settings/settings.json +16 -0
  92. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  93. package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
  94. package/src/claude/skills/brainstorm/SKILL.md +193 -172
  95. package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
  96. package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
  97. package/src/claude/skills/code-review/SKILL.md +43 -25
  98. package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
  99. package/src/claude/skills/code-review/references/verification-gate.md +1 -1
  100. package/src/claude/skills/debug/SKILL.md +48 -19
  101. package/src/claude/skills/delegate/SKILL.md +1 -1
  102. package/src/claude/skills/develop/SKILL.md +92 -65
  103. package/src/claude/skills/develop/references/parallel-waves.md +36 -63
  104. package/src/claude/skills/develop/references/quality-gate.md +31 -4
  105. package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
  106. package/src/claude/skills/docs/SKILL.md +42 -23
  107. package/src/claude/skills/docs/references/init-workflow.md +4 -4
  108. package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
  109. package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
  110. package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
  111. package/src/claude/skills/docs/references/update-workflow.md +9 -7
  112. package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
  113. package/src/claude/skills/docx/SKILL.md +1 -1
  114. package/src/claude/skills/git/SKILL.md +1 -1
  115. package/src/claude/skills/git/references/commit-protocols.md +1 -1
  116. package/src/claude/skills/git/references/finish-branch.md +1 -1
  117. package/src/claude/skills/hotfix/SKILL.md +159 -170
  118. package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
  119. package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
  120. package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
  121. package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
  122. package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
  123. package/src/claude/skills/inspect/SKILL.md +55 -46
  124. package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
  125. package/src/claude/skills/loop/SKILL.md +114 -0
  126. package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
  127. package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
  128. package/src/claude/skills/pdf/SKILL.md +1 -1
  129. package/src/claude/skills/pptx/SKILL.md +1 -1
  130. package/src/claude/skills/question/SKILL.md +16 -13
  131. package/src/claude/skills/research/SKILL.md +70 -43
  132. package/src/claude/skills/route/SKILL.md +94 -0
  133. package/src/claude/skills/route/references/agent-timing.md +46 -0
  134. package/src/claude/skills/route/references/chaining-patterns.md +53 -0
  135. package/src/claude/skills/route/references/task-taxonomy.md +48 -0
  136. package/src/claude/skills/specs/SKILL.md +48 -57
  137. package/src/claude/skills/specs/references/review.md +26 -8
  138. package/src/claude/skills/specs/references/templates.md +76 -31
  139. package/src/claude/skills/specs/templates/requirements-init.md +1 -1
  140. package/src/claude/skills/specs/templates/research.md +2 -2
  141. package/src/claude/skills/sync/SKILL.md +6 -6
  142. package/src/claude/skills/sync/references/sync-protocols.md +1 -1
  143. package/src/claude/skills/test/SKILL.md +120 -120
  144. package/src/claude/skills/test/references/execution-strategy.md +208 -361
  145. package/src/claude/skills/test/references/failure-triage.md +55 -121
  146. package/src/claude/skills/test/references/test-memory.md +20 -34
  147. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  148. package/src/claude/skills/web-testing/SKILL.md +1 -1
  149. package/src/claude/skills/xlsx/SKILL.md +1 -1
  150. package/src/claude/status.cjs +135 -33
  151. package/src/codex/AGENTS.md +14 -4
  152. package/src/codex/hooks/docs-sync.cjs +8 -3
  153. package/src/codex/hooks/lib/hook-context.cjs +18 -4
  154. package/src/codex/hooks/rules.cjs +29 -1
  155. package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
  156. package/src/codex/hooks/spec-gate.cjs +3 -8
  157. package/src/codex/hooks/spec-state.cjs +34 -5
  158. package/src/codex/hooks.json +5 -0
  159. package/src/codex/runtime.json +2 -0
  160. package/src/common/.env.example +1 -1
  161. package/src/claude/skills/backend-development/SKILL.md +0 -101
  162. package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
  163. package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
  164. package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
  165. package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
  166. package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
  167. package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
  168. package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
  169. package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
  170. package/src/claude/skills/backend-development/references/backend-security.md +0 -342
  171. package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
  172. package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
  173. package/src/claude/skills/devops/.env.example +0 -76
  174. package/src/claude/skills/devops/SKILL.md +0 -102
  175. package/src/claude/skills/devops/references/browser-rendering.md +0 -305
  176. package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
  177. package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
  178. package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
  179. package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
  180. package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
  181. package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
  182. package/src/claude/skills/devops/references/docker-basics.md +0 -297
  183. package/src/claude/skills/devops/references/docker-compose.md +0 -292
  184. package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
  185. package/src/claude/skills/devops/references/gcloud-services.md +0 -304
  186. package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
  187. package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
  188. package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
  189. package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
  190. package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
  191. package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
  192. package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
  193. package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
  194. package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
  195. package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
  196. package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
  197. package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
  198. package/src/claude/skills/devops/scripts/requirements.txt +0 -20
  199. package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
  200. package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
  201. package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
  202. package/src/claude/skills/frontend-design/SKILL.md +0 -135
  203. package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
  204. package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
  205. package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
  206. package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
  207. package/src/claude/skills/frontend-design/references/animejs.md +0 -396
  208. package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
  209. package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
  210. package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
  211. package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
  212. package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
  213. package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
  214. package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
  215. package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
  216. package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
  217. package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
  218. package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
  219. package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
  220. package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
  221. package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
  222. package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
  223. package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
  224. package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
  225. package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
  226. package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
  227. package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
  228. package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
  229. package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
  230. package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
  231. package/src/claude/skills/frontend-development/SKILL.md +0 -406
  232. package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
  233. package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
  234. package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
  235. package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
  236. package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
  237. package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
  238. package/src/claude/skills/frontend-development/resources/performance.md +0 -406
  239. package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
  240. package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
  241. package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
  242. package/src/claude/skills/mobile-development/SKILL.md +0 -218
  243. package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
  244. package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
  245. package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
  246. package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
  247. package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
  248. package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
  249. package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
  250. package/src/claude/skills/react-best-practices/README.md +0 -123
  251. package/src/claude/skills/react-best-practices/SKILL.md +0 -128
  252. package/src/claude/skills/react-best-practices/metadata.json +0 -15
  253. package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
  254. package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
  255. package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  256. package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
  257. package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
  258. package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
  259. package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
  260. package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
  261. package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  262. package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  263. package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  264. package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  265. package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  266. package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
  267. package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  268. package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  269. package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  270. package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  271. package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  272. package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  273. package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  274. package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
  275. package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  276. package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
  277. package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  278. package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  279. package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  280. package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  281. package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
  282. package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  283. package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  284. package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  285. package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  286. package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  287. package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  288. package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  289. package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  290. package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  291. package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  292. package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  293. package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
  294. package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  295. package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  296. package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  297. package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
  298. package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
  299. package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
@@ -5,6 +5,7 @@ const fs = require('fs');
5
5
  const path = require('path');
6
6
  const {
7
7
  getHookContext,
8
+ hookStateDir,
8
9
  logCrash,
9
10
  readPayload,
10
11
  resolveProjectPath
@@ -15,7 +16,7 @@ function reservationFile(projectRoot, sessionId) {
15
16
  .update(String(sessionId || 'unknown'))
16
17
  .digest('hex')
17
18
  .slice(0, 16);
18
- return path.join(projectRoot, '.codex', 'hooks', '.logs', `rules-${key}.json`);
19
+ return path.join(hookStateDir(projectRoot), `rules-${key}.json`);
19
20
  }
20
21
 
21
22
  /** Reserve one injection slot per session. Returns null on reservation errors. */
@@ -35,6 +36,28 @@ function reserveSession(projectRoot, sessionId) {
35
36
  }
36
37
  }
37
38
 
39
+ /**
40
+ * Body of the output style for `codingLevel`, or null.
41
+ *
42
+ * Codex CLI has no output-style feature, so the style Claude Code would load natively is
43
+ * injected here instead. The rules hook reserves one injection per session, so this costs
44
+ * the same as a host-loaded style rather than repeating every turn.
45
+ */
46
+ function readCodingStyle(projectRoot, level) {
47
+ if (!Number.isInteger(level) || level < 0 || level > 5) return null;
48
+ try {
49
+ const dir = path.join(projectRoot, '.codex', 'output-styles');
50
+ const match = fs.readdirSync(dir).find((name) => name.startsWith(`coding-level-${level}-`));
51
+ if (!match) return null;
52
+ const raw = fs.readFileSync(path.join(dir, match), 'utf8');
53
+ // Strip the frontmatter Claude Code reads; Codex only needs the instructions.
54
+ const body = raw.replace(/^---\n[\s\S]*?\n---\n/, '').trim();
55
+ return body || null;
56
+ } catch {
57
+ return null;
58
+ }
59
+ }
60
+
38
61
  function readRuntime(projectRoot) {
39
62
  try {
40
63
  const file = path.join(projectRoot, '.codex', 'runtime.json');
@@ -74,6 +97,11 @@ try {
74
97
  `- docs.maxLoc: ${runtime.docs?.maxLoc || 800} lines per doc file`
75
98
  );
76
99
 
100
+ const style = readCodingStyle(projectRoot, runtime.codingLevel);
101
+ if (style) {
102
+ lines.push('', '## Communication style', style);
103
+ }
104
+
77
105
  process.stdout.write(`${lines.join('\n')}\n`);
78
106
  } catch (error) {
79
107
  logCrash('rules', error);
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * Copyright (c) 2026 Haposoft. MIT License.
6
+ *
7
+ * UserPromptSubmit hook — secret-output-guardrail.cjs (Codex)
8
+ *
9
+ * Mirror of the Claude hook. The privacy hook gates whether a sensitive file may be
10
+ * read; nothing gated whether an approved value may then be printed into the
11
+ * transcript, where it survives compaction and is replayed on every later turn.
12
+ *
13
+ * Reads the prompt and never echoes it: no prompt text and no matched value is
14
+ * written out, so the guardrail cannot itself become the leak. Fail-open.
15
+ */
16
+
17
+ const { logCrash, readPayload } = require('./lib/hook-context.cjs');
18
+ const { REMINDER, containsSecretKeyword } = require('./lib/secret-keywords.cjs');
19
+
20
+ try {
21
+ const payload = readPayload();
22
+ if (!payload) process.exit(0);
23
+
24
+ const prompt = String(payload.prompt || payload.user_prompt || '');
25
+ if (!containsSecretKeyword(prompt)) process.exit(0);
26
+
27
+ process.stdout.write(`${REMINDER}\n`);
28
+ } catch (error) {
29
+ logCrash('secret-output-guardrail', error);
30
+ }
@@ -6,6 +6,7 @@ const path = require('path');
6
6
  const {
7
7
  atomicWrite,
8
8
  getHookContext,
9
+ hookStateDir,
9
10
  logCrash,
10
11
  readPayload
11
12
  } = require('./lib/hook-context.cjs');
@@ -132,13 +133,7 @@ try {
132
133
  const currentStatuses = processWorkflow
133
134
  ? Object.fromEntries(Object.entries(registry).map(([taskPath, task]) => [taskPath, task?.status || 'pending']))
134
135
  : taskStatusMap(activeSpec);
135
- const cacheFile = path.join(
136
- projectRoot,
137
- '.codex',
138
- 'hooks',
139
- '.logs',
140
- 'spec-gate-last.json'
141
- );
136
+ const cacheFile = path.join(hookStateDir(projectRoot), 'spec-gate-last.json');
142
137
  const cacheExists = fs.existsSync(cacheFile);
143
138
  let cache = {};
144
139
  if (cacheExists) {
@@ -169,7 +164,7 @@ try {
169
164
  if (staleFlashTasks.length > 0) {
170
165
  process.stdout.write(`${JSON.stringify({
171
166
  decision: 'block',
172
- reason: `Completion gate: ${staleFlashTasks.length} task(s) marked done with FLASH_UNVERIFIED (${staleFlashTasks.join(', ')}). Run /hapo:test, then use explicit sync-finalize.`
167
+ reason: `Completion gate: ${staleFlashTasks.length} task(s) marked done with FLASH_UNVERIFIED (${staleFlashTasks.join(', ')}). Run /cf:test, then use explicit sync-finalize.`
173
168
  })}\n`);
174
169
  process.exit(0);
175
170
  }
@@ -7,6 +7,7 @@ const path = require('path');
7
7
  const {
8
8
  atomicWrite,
9
9
  getHookContext,
10
+ hookStateDir,
10
11
  logCrash,
11
12
  readPayload
12
13
  } = require('./lib/hook-context.cjs');
@@ -21,7 +22,7 @@ function cacheFile(projectRoot, sessionId) {
21
22
  .update(String(sessionId || 'unknown'))
22
23
  .digest('hex')
23
24
  .slice(0, 16);
24
- return path.join(projectRoot, '.codex', 'hooks', '.logs', `tollgate-${key}.txt`);
25
+ return path.join(hookStateDir(projectRoot), `tollgate-${key}.txt`);
25
26
  }
26
27
 
27
28
  try {
@@ -77,15 +78,33 @@ try {
77
78
  result[status] = (result[status] || 0) + 1;
78
79
  return result;
79
80
  }, {});
81
+ const featureDir = path.join(active.specsDir, active.featureName);
80
82
  const statuses = new Map(tasks.map(([taskPath, task]) => [
81
83
  taskPath,
82
84
  task?.status || 'pending'
83
85
  ]));
86
+ const dependencyProof = processWorkflow
87
+ ? RECEIPT.workflowDependencyProofState(featureDir, taskRegistry, runtimeContext, POLICY)
88
+ : {};
89
+ const taskState = tasks.map(([taskPath, task]) => [
90
+ taskPath,
91
+ task?.status || 'pending',
92
+ [...(Array.isArray(task?.dependencies) ? task.dependencies : [])].sort(),
93
+ ]).sort(([left], [right]) => left.localeCompare(right));
94
+ const proofState = Object.entries(dependencyProof).map(([taskPath, proof]) => [
95
+ taskPath,
96
+ proof.done,
97
+ proof.valid,
98
+ proof.eligible,
99
+ proof.signature,
100
+ ]);
84
101
  const next = tasks.find(([, task]) => (
85
- (task?.status || 'pending') === 'pending'
86
- && (task?.dependencies || []).every((dependency) => statuses.get(dependency) === 'done')
102
+ active.queueReady !== false
103
+ && (task?.status || 'pending') === 'pending'
104
+ && (task?.dependencies || []).every((dependency) => (
105
+ processWorkflow ? dependencyProof[dependency]?.eligible === true : statuses.get(dependency) === 'done'
106
+ ))
87
107
  ));
88
- const featureDir = path.join(active.specsDir, active.featureName);
89
108
  const featureReceiptPresent = !processWorkflow
90
109
  && RECEIPT.safeRead(featureDir, 'feature-receipt.md').status === 'ok';
91
110
  const stateKey = JSON.stringify({
@@ -99,6 +118,10 @@ try {
99
118
  Head: runtimeContext.head,
100
119
  context_id: runtimeContext.context_id,
101
120
  phase,
121
+ workflow_contract: active.workflowContract || null,
122
+ queue_ready: active.queueReady !== false,
123
+ task_state: taskState,
124
+ proof_state: proofState,
102
125
  done: counts.done || 0,
103
126
  total: tasks.length,
104
127
  feature_receipt_present: featureReceiptPresent,
@@ -108,9 +131,12 @@ try {
108
131
  try { previous = fs.readFileSync(cache, 'utf8').trim(); } catch { /* first run */ }
109
132
 
110
133
  if (previous === stateKey) {
134
+ const migration = processWorkflow && active.queueReady === false
135
+ ? ' Add `Specs-Contract: process-first-ready-v1` after the plan title before tasks can enter Next.'
136
+ : '';
111
137
  process.stdout.write(
112
138
  `> Spec \`${active.featureName}\` @ \`${phase}\` `
113
- + `(${counts.done || 0}/${tasks.length} tasks done). Tollgate active.\n`
139
+ + `(${counts.done || 0}/${tasks.length} tasks done). Tollgate active.${migration}\n`
114
140
  );
115
141
  process.exit(0);
116
142
  }
@@ -125,6 +151,9 @@ try {
125
151
  lines.push(`- Flash verification pending: ${flashTasks.map((taskPath) => `\`${taskPath}\``).join(', ')}. A PASS proof keeps the persisted task in_progress until explicit sync-finalize.`);
126
152
  }
127
153
  if (processWorkflow) {
154
+ if (active.queueReady === false) {
155
+ lines.push('- Migration required: add `Specs-Contract: process-first-ready-v1` after the plan title before tasks can enter Next.');
156
+ }
128
157
  lines.push(
129
158
  '- Sync each flat task `Status:` only after verified work; task proof belongs in that task\'s inline `## Receipt`.',
130
159
  `- Workflow source: \`specs/${active.featureName}/plan.md\`; Stop revalidates every task currently marked done.`,
@@ -38,6 +38,11 @@
38
38
  "UserPromptSubmit": [
39
39
  {
40
40
  "hooks": [
41
+ {
42
+ "type": "command",
43
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/secret-output-guardrail.cjs\"",
44
+ "commandWindows": "node \".codex/hooks/secret-output-guardrail.cjs\""
45
+ },
41
46
  {
42
47
  "type": "command",
43
48
  "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/privacy-approval.cjs\"",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "$schema": "./runtime.schema.json",
2
3
  "privacyBlock": true,
3
4
  "inspect": {
4
5
  "enabled": true
@@ -23,6 +24,7 @@
23
24
  "thinkingLanguage": null,
24
25
  "responseLanguage": null
25
26
  },
27
+ "codingLevel": 1,
26
28
  "hooks": {},
27
29
  "assertions": []
28
30
  }
@@ -8,7 +8,7 @@
8
8
  # ============================================
9
9
 
10
10
  # Google Gemini / AI Studio API key
11
- # Required for hapo:test Multimodal Visual checks
11
+ # Required for cf:test Multimodal Visual checks
12
12
  # Get from: https://aistudio.google.com/apikey
13
13
  GEMINI_API_KEY=
14
14
 
@@ -1,101 +0,0 @@
1
- ---
2
- name: hapo:backend-development
3
- description: Build backends with Node.js, Python, Go (NestJS, FastAPI, Django). Use for REST/GraphQL/gRPC APIs, auth (OAuth, JWT), databases, microservices, security (OWASP), Docker/K8s.
4
- license: MIT
5
- user-invocable: true
6
- when_to_use: "Invoke to build or modify server APIs, services, and data layers."
7
- category: backend
8
- keywords: [backend, api, server, database]
9
- argument-hint: "[framework] [task]"
10
- metadata:
11
- author: haposoft
12
- version: "1.0.0"
13
- ---
14
- # Backend Development Skill
15
-
16
- Production-ready backend development with modern technologies, best practices, and proven patterns.
17
-
18
- ## When to Use
19
-
20
- - Designing RESTful, GraphQL, or gRPC APIs
21
- - Building authentication/authorization systems
22
- - Optimizing database queries and schemas
23
- - Implementing caching and performance optimization
24
- - OWASP Top 10 security mitigation
25
- - Designing scalable microservices
26
- - Testing strategies (unit, integration, E2E)
27
- - CI/CD pipelines and deployment
28
- - Monitoring and debugging production systems
29
-
30
- ## Technology Selection Guide
31
-
32
- **Languages:** Node.js/TypeScript (full-stack), Python (data/ML), Go (concurrency), Rust (performance)
33
- **Frameworks:** NestJS, FastAPI, Django, Express, Gin
34
- **Databases:** PostgreSQL (ACID), MongoDB (flexible schema), Redis (caching)
35
- **APIs:** REST (simple), GraphQL (flexible), gRPC (performance)
36
-
37
- See: `references/backend-technologies.md` for detailed comparisons
38
-
39
- ## Reference Navigation
40
-
41
- **Core Technologies:**
42
- - `backend-technologies.md` - Languages, frameworks, databases, message queues, ORMs
43
- - `backend-api-design.md` - REST, GraphQL, gRPC patterns and best practices
44
-
45
- **Security & Authentication:**
46
- - `backend-security.md` - OWASP Top 10 2025, security best practices, input validation
47
- - `backend-authentication.md` - OAuth 2.1, JWT, RBAC, MFA, session management
48
-
49
- **Performance & Architecture:**
50
- - `backend-performance.md` - Caching, query optimization, load balancing, scaling
51
- - `backend-architecture.md` - Microservices, event-driven, CQRS, saga patterns
52
-
53
- **Quality & Operations:**
54
- - `backend-testing.md` - Testing strategies, frameworks, tools, CI/CD testing
55
- - `backend-code-quality.md` - SOLID principles, design patterns, clean code
56
- - `backend-devops.md` - Docker, Kubernetes, deployment strategies, monitoring
57
- - `backend-debugging.md` - Debugging strategies, profiling, logging, production debugging
58
- - `backend-mindset.md` - Problem-solving, architectural thinking, collaboration
59
-
60
- ## Key Best Practices (2025)
61
-
62
- **Security:** Argon2id passwords, parameterized queries prevent SQL injection, OAuth 2.1 + PKCE, rate limiting, security headers
63
-
64
- **Performance:** Redis caching reduces DB load, database indexing reduces I/O, CDN cuts latency, connection pooling
65
-
66
- **Testing:** 70-20-10 pyramid (unit-integration-E2E), Vitest or Jest, contract testing for microservices, migration tests
67
-
68
- **DevOps:** Blue-green/canary deployments, feature flags can reduce failures, Kubernetes, Prometheus/Grafana monitoring, OpenTelemetry tracing
69
-
70
- ## Quick Decision Matrix
71
-
72
- | Need | Choose |
73
- |------|--------|
74
- | Fast development | Node.js + NestJS |
75
- | Data/ML integration | Python + FastAPI |
76
- | High concurrency | Go + Gin |
77
- | Max performance | Rust + Axum |
78
- | ACID transactions | PostgreSQL |
79
- | Flexible schema | MongoDB |
80
- | Caching | Redis |
81
- | Internal services | gRPC |
82
- | Public APIs | GraphQL/REST |
83
- | Real-time events | Kafka |
84
-
85
- ## Implementation Checklist
86
-
87
- **API:** Choose style → Design schema → Validate input → Add auth → Rate limiting → Documentation → Error handling
88
-
89
- **Database:** Choose DB → Design schema → Create indexes → Connection pooling → Migration strategy → Backup/restore → Test performance
90
-
91
- **Security:** OWASP Top 10 → Parameterized queries → OAuth 2.1 + JWT → Security headers → Rate limiting → Input validation → Argon2id passwords
92
-
93
- **Testing:** Unit 70% → Integration 20% → E2E 10% → Load tests → Migration tests → Contract tests (microservices)
94
-
95
- **Deployment:** Docker → CI/CD → Blue-green/canary → Feature flags → Monitoring → Logging → Health checks
96
-
97
- ## Resources
98
-
99
- - OWASP Top 10: https://owasp.org/www-project-top-ten/
100
- - OAuth 2.1: https://oauth.net/2.1/
101
- - OpenTelemetry: https://opentelemetry.io/