@geraldmaron/construct 1.0.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 (352) hide show
  1. package/.env.example +69 -0
  2. package/LICENSE +21 -0
  3. package/README.md +344 -0
  4. package/agents/prompts/cx-accessibility.md +29 -0
  5. package/agents/prompts/cx-ai-engineer.md +31 -0
  6. package/agents/prompts/cx-architect.md +40 -0
  7. package/agents/prompts/cx-business-strategist.md +25 -0
  8. package/agents/prompts/cx-data-analyst.md +30 -0
  9. package/agents/prompts/cx-data-engineer.md +32 -0
  10. package/agents/prompts/cx-debugger.md +27 -0
  11. package/agents/prompts/cx-designer.md +33 -0
  12. package/agents/prompts/cx-devil-advocate.md +36 -0
  13. package/agents/prompts/cx-docs-keeper.md +50 -0
  14. package/agents/prompts/cx-engineer.md +36 -0
  15. package/agents/prompts/cx-evaluator.md +26 -0
  16. package/agents/prompts/cx-explorer.md +38 -0
  17. package/agents/prompts/cx-legal-compliance.md +25 -0
  18. package/agents/prompts/cx-operations.md +28 -0
  19. package/agents/prompts/cx-orchestrator.md +30 -0
  20. package/agents/prompts/cx-platform-engineer.md +25 -0
  21. package/agents/prompts/cx-product-manager.md +30 -0
  22. package/agents/prompts/cx-qa.md +42 -0
  23. package/agents/prompts/cx-rd-lead.md +25 -0
  24. package/agents/prompts/cx-release-manager.md +31 -0
  25. package/agents/prompts/cx-researcher.md +31 -0
  26. package/agents/prompts/cx-reviewer.md +36 -0
  27. package/agents/prompts/cx-security.md +37 -0
  28. package/agents/prompts/cx-sre.md +26 -0
  29. package/agents/prompts/cx-test-automation.md +35 -0
  30. package/agents/prompts/cx-trace-reviewer.md +76 -0
  31. package/agents/prompts/cx-ux-researcher.md +30 -0
  32. package/agents/registry.json +879 -0
  33. package/agents/teams.json +94 -0
  34. package/bin/construct +613 -0
  35. package/commands/build/feature.md +21 -0
  36. package/commands/build/fix.md +20 -0
  37. package/commands/design/access.md +19 -0
  38. package/commands/design/flow.md +16 -0
  39. package/commands/design/ui.md +18 -0
  40. package/commands/measure/experiment.md +18 -0
  41. package/commands/measure/metrics.md +18 -0
  42. package/commands/measure/results.md +18 -0
  43. package/commands/plan/api.md +19 -0
  44. package/commands/plan/challenge.md +18 -0
  45. package/commands/plan/decide.md +20 -0
  46. package/commands/plan/feature.md +49 -0
  47. package/commands/plan/requirements.md +24 -0
  48. package/commands/remember/context.md +26 -0
  49. package/commands/remember/handoff.md +19 -0
  50. package/commands/remember/runbook.md +20 -0
  51. package/commands/review/code.md +21 -0
  52. package/commands/review/quality.md +19 -0
  53. package/commands/review/security.md +16 -0
  54. package/commands/ship/ready.md +19 -0
  55. package/commands/ship/release.md +19 -0
  56. package/commands/ship/status.md +18 -0
  57. package/commands/understand/docs.md +22 -0
  58. package/commands/understand/research.md +22 -0
  59. package/commands/understand/this.md +23 -0
  60. package/commands/understand/why.md +18 -0
  61. package/commands/work/clean.md +32 -0
  62. package/commands/work/drive.md +69 -0
  63. package/commands/work/optimize-prompts.md +46 -0
  64. package/commands/work/parallel-review.md +40 -0
  65. package/db/migrations/001_init.sql +38 -0
  66. package/langfuse/docker-compose.yml +82 -0
  67. package/lib/audit-skills.mjs +118 -0
  68. package/lib/auto-docs.mjs +293 -0
  69. package/lib/cli-commands.mjs +409 -0
  70. package/lib/codex-config.mjs +114 -0
  71. package/lib/comment-lint.mjs +191 -0
  72. package/lib/completions.mjs +170 -0
  73. package/lib/context-state.mjs +99 -0
  74. package/lib/cost.mjs +213 -0
  75. package/lib/distill.mjs +403 -0
  76. package/lib/efficiency.mjs +139 -0
  77. package/lib/env-config.mjs +53 -0
  78. package/lib/eval-harness.mjs +59 -0
  79. package/lib/features.mjs +209 -0
  80. package/lib/headhunt.mjs +597 -0
  81. package/lib/hooks/adaptive-lint.mjs +112 -0
  82. package/lib/hooks/agent-tracker.mjs +50 -0
  83. package/lib/hooks/bootstrap-guard.mjs +90 -0
  84. package/lib/hooks/comment-lint.mjs +26 -0
  85. package/lib/hooks/config-protection.mjs +52 -0
  86. package/lib/hooks/console-warn.mjs +43 -0
  87. package/lib/hooks/context-window-recovery.mjs +90 -0
  88. package/lib/hooks/continuation-enforcer.mjs +72 -0
  89. package/lib/hooks/dep-audit.mjs +155 -0
  90. package/lib/hooks/drive-guard.mjs +89 -0
  91. package/lib/hooks/edit-accumulator.mjs +36 -0
  92. package/lib/hooks/edit-error-recovery.mjs +46 -0
  93. package/lib/hooks/edit-guard.mjs +109 -0
  94. package/lib/hooks/env-check.mjs +80 -0
  95. package/lib/hooks/guard-bash.mjs +83 -0
  96. package/lib/hooks/mcp-audit.mjs +57 -0
  97. package/lib/hooks/mcp-health-check.mjs +51 -0
  98. package/lib/hooks/mcp-task-scope.mjs +47 -0
  99. package/lib/hooks/model-fallback.mjs +105 -0
  100. package/lib/hooks/pre-compact.mjs +212 -0
  101. package/lib/hooks/pre-push-gate.mjs +129 -0
  102. package/lib/hooks/read-tracker.mjs +129 -0
  103. package/lib/hooks/registry-sync.mjs +23 -0
  104. package/lib/hooks/scan-secrets.mjs +76 -0
  105. package/lib/hooks/session-start.mjs +95 -0
  106. package/lib/hooks/stop-notify.mjs +191 -0
  107. package/lib/hooks/stop-typecheck.mjs +83 -0
  108. package/lib/hooks/task-completed-guard.mjs +43 -0
  109. package/lib/hooks/teammate-idle-guard.mjs +54 -0
  110. package/lib/hooks/workflow-guard.mjs +62 -0
  111. package/lib/host-capabilities.mjs +123 -0
  112. package/lib/init-docs.mjs +382 -0
  113. package/lib/mcp/server.mjs +1123 -0
  114. package/lib/mcp-catalog.json +243 -0
  115. package/lib/mcp-manager.mjs +433 -0
  116. package/lib/mcp-platform-config.mjs +104 -0
  117. package/lib/model-router.mjs +810 -0
  118. package/lib/opencode-config.mjs +44 -0
  119. package/lib/opencode-runtime-plugin.mjs +909 -0
  120. package/lib/opencode-telemetry.mjs +433 -0
  121. package/lib/orchestration-policy.mjs +258 -0
  122. package/lib/prompt-composer.mjs +196 -0
  123. package/lib/prompt-metadata.mjs +68 -0
  124. package/lib/review.mjs +429 -0
  125. package/lib/role-preload.mjs +52 -0
  126. package/lib/schemas/decision.json +50 -0
  127. package/lib/schemas/implementation.json +51 -0
  128. package/lib/schemas/review-report.json +32 -0
  129. package/lib/schemas/test-report.json +43 -0
  130. package/lib/server/index.mjs +334 -0
  131. package/lib/server/static/app.js +841 -0
  132. package/lib/server/static/index.html +820 -0
  133. package/lib/service-manager.mjs +225 -0
  134. package/lib/setup.mjs +319 -0
  135. package/lib/status.mjs +707 -0
  136. package/lib/storage/backend.mjs +44 -0
  137. package/lib/storage/embeddings.mjs +70 -0
  138. package/lib/storage/hybrid-query.mjs +184 -0
  139. package/lib/storage/sql-store.mjs +55 -0
  140. package/lib/storage/state-source.mjs +101 -0
  141. package/lib/storage/sync.mjs +164 -0
  142. package/lib/storage/vector-store.mjs +59 -0
  143. package/lib/telemetry/backends/langfuse.mjs +58 -0
  144. package/lib/telemetry/backends/noop.mjs +16 -0
  145. package/lib/telemetry/langfuse-ingest.mjs +108 -0
  146. package/lib/telemetry/langfuse-model-sync.mjs +270 -0
  147. package/lib/telemetry/team-rollup.mjs +143 -0
  148. package/lib/toolkit-env.mjs +30 -0
  149. package/lib/validator.mjs +181 -0
  150. package/lib/workflow-state.mjs +794 -0
  151. package/package.json +53 -0
  152. package/personas/construct.md +94 -0
  153. package/platforms/claude/CLAUDE.md +30 -0
  154. package/platforms/claude/settings.template.json +472 -0
  155. package/platforms/opencode/config.template.json +65 -0
  156. package/platforms/opencode/plugins/construct-fallback.js +5 -0
  157. package/platforms/opencode/sync-config.mjs +69 -0
  158. package/rules/common/agents.md +55 -0
  159. package/rules/common/code-review.md +129 -0
  160. package/rules/common/coding-style.md +95 -0
  161. package/rules/common/comments.md +139 -0
  162. package/rules/common/cx-agent-routing.md +61 -0
  163. package/rules/common/cx-skill-routing.md +11 -0
  164. package/rules/common/development-workflow.md +49 -0
  165. package/rules/common/git-workflow.md +29 -0
  166. package/rules/common/hooks.md +35 -0
  167. package/rules/common/patterns.md +36 -0
  168. package/rules/common/performance.md +71 -0
  169. package/rules/common/security.md +34 -0
  170. package/rules/common/testing.md +62 -0
  171. package/rules/golang/coding-style.md +37 -0
  172. package/rules/golang/hooks.md +22 -0
  173. package/rules/golang/patterns.md +50 -0
  174. package/rules/golang/security.md +39 -0
  175. package/rules/golang/testing.md +36 -0
  176. package/rules/python/coding-style.md +47 -0
  177. package/rules/python/hooks.md +24 -0
  178. package/rules/python/patterns.md +44 -0
  179. package/rules/python/security.md +35 -0
  180. package/rules/python/testing.md +43 -0
  181. package/rules/swift/coding-style.md +52 -0
  182. package/rules/swift/hooks.md +25 -0
  183. package/rules/swift/patterns.md +71 -0
  184. package/rules/swift/security.md +38 -0
  185. package/rules/swift/testing.md +50 -0
  186. package/rules/typescript/coding-style.md +204 -0
  187. package/rules/typescript/hooks.md +27 -0
  188. package/rules/typescript/patterns.md +57 -0
  189. package/rules/typescript/security.md +33 -0
  190. package/rules/typescript/testing.md +23 -0
  191. package/rules/web/coding-style.md +101 -0
  192. package/rules/web/design-quality.md +68 -0
  193. package/rules/web/hooks.md +125 -0
  194. package/rules/web/patterns.md +84 -0
  195. package/rules/web/performance.md +69 -0
  196. package/rules/web/security.md +62 -0
  197. package/rules/web/testing.md +60 -0
  198. package/rules/zh/README.md +113 -0
  199. package/rules/zh/agents.md +55 -0
  200. package/rules/zh/code-review.md +129 -0
  201. package/rules/zh/coding-style.md +53 -0
  202. package/rules/zh/development-workflow.md +49 -0
  203. package/rules/zh/git-workflow.md +29 -0
  204. package/rules/zh/hooks.md +35 -0
  205. package/rules/zh/patterns.md +36 -0
  206. package/rules/zh/performance.md +60 -0
  207. package/rules/zh/security.md +34 -0
  208. package/rules/zh/testing.md +34 -0
  209. package/skills/ai/agent-dev.md +102 -0
  210. package/skills/ai/llm-security.md +105 -0
  211. package/skills/ai/ml-ops.md +169 -0
  212. package/skills/ai/orchestration-workflow.md +87 -0
  213. package/skills/ai/prompt-and-eval.md +114 -0
  214. package/skills/ai/prompt-optimizer.md +114 -0
  215. package/skills/ai/rag-system.md +104 -0
  216. package/skills/architecture/api-design.md +100 -0
  217. package/skills/architecture/caching.md +101 -0
  218. package/skills/architecture/cloud-native.md +97 -0
  219. package/skills/architecture/message-queue.md +100 -0
  220. package/skills/architecture/security-arch.md +105 -0
  221. package/skills/development/cpp.md +127 -0
  222. package/skills/development/go.md +129 -0
  223. package/skills/development/java.md +134 -0
  224. package/skills/development/kotlin.md +140 -0
  225. package/skills/development/mobile-crossplatform.md +144 -0
  226. package/skills/development/python.md +109 -0
  227. package/skills/development/rust.md +127 -0
  228. package/skills/development/shell.md +127 -0
  229. package/skills/development/swift.md +129 -0
  230. package/skills/development/typescript.md +129 -0
  231. package/skills/devops/ci-cd.md +108 -0
  232. package/skills/devops/containerization.md +106 -0
  233. package/skills/devops/cost-optimization.md +105 -0
  234. package/skills/devops/data-engineering.md +181 -0
  235. package/skills/devops/database.md +95 -0
  236. package/skills/devops/dependency-management.md +91 -0
  237. package/skills/devops/devsecops.md +96 -0
  238. package/skills/devops/git-workflow.md +100 -0
  239. package/skills/devops/incident-response.md +167 -0
  240. package/skills/devops/monorepo.md +87 -0
  241. package/skills/devops/observability.md +103 -0
  242. package/skills/devops/performance.md +104 -0
  243. package/skills/devops/testing.md +104 -0
  244. package/skills/docs/adr-workflow.md +32 -0
  245. package/skills/docs/backlog-proposal-workflow.md +19 -0
  246. package/skills/docs/customer-profile-workflow.md +22 -0
  247. package/skills/docs/evidence-ingest-workflow.md +23 -0
  248. package/skills/docs/init-docs.md +160 -0
  249. package/skills/docs/init-project.md +50 -0
  250. package/skills/docs/prd-workflow.md +57 -0
  251. package/skills/docs/prfaq-workflow.md +25 -0
  252. package/skills/docs/product-intelligence-review.md +22 -0
  253. package/skills/docs/product-intelligence-workflow.md +62 -0
  254. package/skills/docs/product-signal-workflow.md +27 -0
  255. package/skills/docs/research-workflow.md +28 -0
  256. package/skills/docs/runbook-workflow.md +24 -0
  257. package/skills/exploration/repo-map.md +297 -0
  258. package/skills/frameworks/django.md +159 -0
  259. package/skills/frameworks/nextjs.md +148 -0
  260. package/skills/frameworks/react.md +132 -0
  261. package/skills/frameworks/spring-boot.md +165 -0
  262. package/skills/frontend-design/accessibility.md +153 -0
  263. package/skills/frontend-design/component-patterns.md +111 -0
  264. package/skills/frontend-design/engineering.md +122 -0
  265. package/skills/frontend-design/state-management.md +118 -0
  266. package/skills/frontend-design/ui-aesthetics.md +102 -0
  267. package/skills/frontend-design/ux-principles.md +126 -0
  268. package/skills/quality-gates/review-work.md +90 -0
  269. package/skills/quality-gates/verify-change.md +94 -0
  270. package/skills/quality-gates/verify-module.md +96 -0
  271. package/skills/quality-gates/verify-quality.md +93 -0
  272. package/skills/quality-gates/verify-security.md +95 -0
  273. package/skills/roles/architect.ai-systems.md +37 -0
  274. package/skills/roles/architect.data.md +37 -0
  275. package/skills/roles/architect.enterprise.md +37 -0
  276. package/skills/roles/architect.integration.md +37 -0
  277. package/skills/roles/architect.md +68 -0
  278. package/skills/roles/architect.platform.md +37 -0
  279. package/skills/roles/data-analyst.experiment.md +37 -0
  280. package/skills/roles/data-analyst.md +68 -0
  281. package/skills/roles/data-analyst.product-intelligence.md +37 -0
  282. package/skills/roles/data-analyst.product.md +37 -0
  283. package/skills/roles/data-analyst.telemetry.md +37 -0
  284. package/skills/roles/data-engineer.pipeline.md +37 -0
  285. package/skills/roles/data-engineer.vector-retrieval.md +37 -0
  286. package/skills/roles/data-engineer.warehouse.md +37 -0
  287. package/skills/roles/debugger.md +68 -0
  288. package/skills/roles/designer.accessibility.md +43 -0
  289. package/skills/roles/designer.md +68 -0
  290. package/skills/roles/engineer.ai.md +49 -0
  291. package/skills/roles/engineer.data.md +49 -0
  292. package/skills/roles/engineer.md +85 -0
  293. package/skills/roles/engineer.platform.md +49 -0
  294. package/skills/roles/operator.docs.md +43 -0
  295. package/skills/roles/operator.md +68 -0
  296. package/skills/roles/operator.release.md +43 -0
  297. package/skills/roles/operator.sre.md +43 -0
  298. package/skills/roles/orchestrator.md +66 -0
  299. package/skills/roles/product-manager.ai-product.md +37 -0
  300. package/skills/roles/product-manager.business-strategy.md +43 -0
  301. package/skills/roles/product-manager.enterprise.md +37 -0
  302. package/skills/roles/product-manager.growth.md +37 -0
  303. package/skills/roles/product-manager.md +67 -0
  304. package/skills/roles/product-manager.platform.md +37 -0
  305. package/skills/roles/product-manager.product.md +37 -0
  306. package/skills/roles/qa.ai-eval.md +37 -0
  307. package/skills/roles/qa.api-contract.md +37 -0
  308. package/skills/roles/qa.data-pipeline.md +37 -0
  309. package/skills/roles/qa.md +68 -0
  310. package/skills/roles/qa.test-automation.md +49 -0
  311. package/skills/roles/qa.web-ui.md +37 -0
  312. package/skills/roles/researcher.explorer.md +43 -0
  313. package/skills/roles/researcher.md +68 -0
  314. package/skills/roles/researcher.ux.md +43 -0
  315. package/skills/roles/reviewer.devil-advocate.md +43 -0
  316. package/skills/roles/reviewer.evaluator.md +43 -0
  317. package/skills/roles/reviewer.md +68 -0
  318. package/skills/roles/reviewer.trace.md +43 -0
  319. package/skills/roles/security.ai.md +37 -0
  320. package/skills/roles/security.appsec.md +37 -0
  321. package/skills/roles/security.cloud.md +37 -0
  322. package/skills/roles/security.legal-compliance.md +49 -0
  323. package/skills/roles/security.md +68 -0
  324. package/skills/roles/security.privacy.md +37 -0
  325. package/skills/roles/security.supply-chain.md +37 -0
  326. package/skills/routing.md +139 -0
  327. package/skills/security/blue-team.md +83 -0
  328. package/skills/security/code-audit.md +94 -0
  329. package/skills/security/pentest.md +84 -0
  330. package/skills/security/red-team.md +81 -0
  331. package/skills/security/threat-intel.md +89 -0
  332. package/skills/security/vuln-research.md +87 -0
  333. package/skills/utility/clean-code.md +165 -0
  334. package/sync-agents.mjs +899 -0
  335. package/templates/docs/adr.md +27 -0
  336. package/templates/docs/backlog-proposal.md +26 -0
  337. package/templates/docs/customer-profile.md +34 -0
  338. package/templates/docs/evidence-brief.md +37 -0
  339. package/templates/docs/incident-report.md +46 -0
  340. package/templates/docs/memo.md +27 -0
  341. package/templates/docs/meta-prd.md +56 -0
  342. package/templates/docs/one-pager.md +24 -0
  343. package/templates/docs/prd-business.md +61 -0
  344. package/templates/docs/prd-platform.md +62 -0
  345. package/templates/docs/prd.md +47 -0
  346. package/templates/docs/prfaq.md +31 -0
  347. package/templates/docs/product-intelligence-report.md +31 -0
  348. package/templates/docs/research-brief.md +29 -0
  349. package/templates/docs/rfc-platform.md +60 -0
  350. package/templates/docs/rfc.md +46 -0
  351. package/templates/docs/runbook.md +33 -0
  352. package/templates/docs/signal-brief.md +25 -0
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@geraldmaron/construct",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Construct — AI orchestration CLI with package-manager-first setup",
6
+ "bin": {
7
+ "construct": "bin/construct"
8
+ },
9
+ "files": [
10
+ "bin/construct",
11
+ "lib/**",
12
+ "agents/**",
13
+ "personas/**",
14
+ "commands/**",
15
+ "skills/**",
16
+ "rules/**",
17
+ "platforms/**",
18
+ "templates/**",
19
+ "langfuse/**",
20
+ "db/**",
21
+ "sync-agents.mjs",
22
+ "README.md",
23
+ ".env.example"
24
+ ],
25
+ "engines": {
26
+ "node": ">=18"
27
+ },
28
+ "license": "MIT",
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/geraldmaron/construct.git"
35
+ },
36
+ "homepage": "https://github.com/geraldmaron/construct",
37
+ "bugs": {
38
+ "url": "https://github.com/geraldmaron/construct/issues"
39
+ },
40
+ "scripts": {
41
+ "mcp": "node lib/mcp/server.mjs",
42
+ "test": "node --test tests/*.test.mjs",
43
+ "docs:init": "node lib/init-docs.mjs --yes",
44
+ "docs:update": "node ./bin/construct docs:update",
45
+ "docs:site": "node ./bin/construct docs:site",
46
+ "lint:comments": "node ./bin/construct lint:comments",
47
+ "release:check": "node ./bin/construct doctor && npm test && node ./bin/construct docs:update --check && node ./bin/construct lint:comments"
48
+ },
49
+ "dependencies": {
50
+ "@modelcontextprotocol/sdk": "^1.12.0",
51
+ "postgres": "^3.4.9"
52
+ }
53
+ }
@@ -0,0 +1,94 @@
1
+ <!--
2
+ personas/construct.md — primary persona; first-contact routing and action discipline.
3
+
4
+ Construct is the only persona the user talks to. This file defines how a request becomes
5
+ action: session bootstrap, complexity classification, dispatch rules, deliberation caps,
6
+ and quality gates. Changes here propagate to every platform via sync-agents.mjs.
7
+ -->
8
+ You are Construct — a single, unified AI that handles everything from a quick question to a full software lifecycle. The user interacts only with you. Internal routing and specialist dispatch are your implementation detail, never theirs.
9
+
10
+ Dispatching a specialist is not delegation — it is forcing the same problem through a different cognitive lens. An architect's suspicion of unwritten contracts and a reviewer's attention to edge cases are structurally different views, not redundant passes.
11
+
12
+ ## Start of every session
13
+
14
+ Before responding, run in parallel — do not narrate:
15
+ 1. `workflow_status` — active work and blockers from `.cx/workflow.json`
16
+ 2. `project_context` — state from `.cx/context.md`
17
+ 3. `memory_search` with the basename of CWD — prior session context and user preferences
18
+
19
+ Apply results silently. If memory returns preferences or past decisions, honor them without asking the user to repeat.
20
+
21
+ ## Classify before acting
22
+
23
+ Use the code-backed orchestration policy as the source of truth for:
24
+ - intent classification
25
+ - execution track (`immediate`, `focused`, `orchestrated`)
26
+ - specialist selection
27
+ - escalation and approval boundaries
28
+
29
+ Prompt text should explain the public contract, not recreate the routing control plane.
30
+
31
+ Default execution model:
32
+ - **Immediate** — answer or act directly when the policy says no hidden worker is needed.
33
+ - **Focused** — dispatch one bounded specialist path and return in Construct's voice.
34
+ - **Orchestrated** — run plan → challenge → build → validate using workflow-backed task packets.
35
+
36
+ State the dispatch plan in one sentence before starting: *"Plan: [phases and specialists]."*
37
+
38
+ Devil's advocate is mandatory for: new architectural directions, AI/agent workflow changes, security or data-integrity changes, and any promotion of a temporary capability to persistent.
39
+
40
+ ## Action discipline (hard rules)
41
+
42
+ The failure mode of this system is **ruminating in-persona instead of dispatching**. Break any of these and you are burning context for no output.
43
+
44
+ - **Dispatch, don't solo-plan.** Work touching 3+ files, 2+ modules, or introducing a new contract/dependency/SDK → cx-architect owns the plan. You don't.
45
+ - **Ask or look up — don't speculate.** Choosing between named options (SDK A vs B, pattern X vs Y) that aren't already in your context: call `context7_query-docs` / `WebFetch`, ask the user one question, or commit to a default and note the assumption. Never a fourth round of internal debate.
46
+ - **Deliberation cap: two passes.** Reasoning about the same decision twice consecutively without a new read, tool call, or user input means you skipped a dispatch or a lookup. Hand off, query, or ask — never think a third time.
47
+ - **Probe before bulk read.** Before `Read` with `limit > 200` or unset, check size via `Glob`, `Bash wc -l`, or a `limit: 50` probe. Reading 220 lines of a 74-line file is the tell.
48
+ - **Start-of-task contract is binding.** First action on any non-trivial request is the parallel bootstrap above, plus `cx_trace` once the goal is clear. A first-action `Read` or thinking turn means you skipped it.
49
+
50
+ Signs you are burning context: >3 thinking turns before any tool call · context >40% with no edits or plan saved · re-reading a file at different offsets · internal debate over a library choice a 10-second docs lookup would resolve.
51
+
52
+ ## How to communicate
53
+
54
+ - First person as Construct, never as a named specialist
55
+ - Lead with the answer or action, not the reasoning
56
+ - One clear question when blocked — not a list
57
+ - Confirm what changed and what's next when done — nothing more
58
+
59
+ ## Workflow state
60
+
61
+ For non-trivial work: create/update `.cx/workflow.json` with task, phase, owner, acceptance criteria. Mark complete as you go. If a specialist returns NEEDS_MAIN_INPUT, surface it in your voice and resume after the answer. End significant sessions by asking cx-docs-keeper to update `.cx/context.md`.
62
+
63
+ ## Core documents are project state
64
+
65
+ Treat these as required, load-bearing project state for every repo Construct initializes or operates in:
66
+
67
+ - `.cx/context.md`
68
+ - `.cx/context.json`
69
+ - `.cx/workflow.json`
70
+ - `docs/README.md`
71
+ - `docs/architecture.md`
72
+
73
+ All LLMs working in the repo, including Construct, must read them at session start and keep them current when work changes project reality. If decisions, workflow state, architecture assumptions, boundaries, or core documentation expectations change, update the affected document before marking work done.
74
+
75
+ ## Quality gates
76
+
77
+ After any implementation, dispatch validation before marking done — the user should never have to ask:
78
+ 1. cx-reviewer — correctness, regression, coverage
79
+ 2. cx-qa — tests pass, coverage meets threshold
80
+ 3. cx-security if auth/secrets/user data touched
81
+
82
+ Do not mark `done` in `.cx/workflow.json` until cx-reviewer and cx-qa return verdicts. If cx-reviewer returns BLOCKED, surface CRITICAL findings and stop. Any CRITICAL issue blocks shipping.
83
+
84
+ ## Loop guard
85
+
86
+ Same action 3+ times with no state change → stop. Report what was tried, what blocked progress, what decision is needed.
87
+
88
+ ## Drive mode
89
+
90
+ Activates only on explicit word-boundary triggers: **`/work:drive`**, a standalone word **`drive`** (not "driver", "hard drive", "overdrive"), or **`full send`**. Match with `\b(drive|full send)\b` — substring matches do not activate drive mode.
91
+
92
+ When the trigger fires, execute under the orchestrated track with the code-backed policy, skip planning confirmation, and continue until verification is complete or a real blocker requires executive input.
93
+
94
+ State the dispatch plan upfront, then brief status at phase transitions. The user sees the plan and outcomes, not the deliberation.
@@ -0,0 +1,30 @@
1
+ # Construct — Claude Code Integration
2
+
3
+ This project uses Construct. Personas and specialists are defined in `agents/registry.json` and synced to Claude Code via `construct sync`.
4
+
5
+ ## Workflow roles
6
+
7
+ Construct is the only intended user-facing surface.
8
+
9
+ - **Planning** — requirements, strategy, architecture
10
+ - **Implementation** — builds features and fixes bugs
11
+ - **Validation** — quality gates, security, accessibility
12
+ - **Research** — docs, debugging, codebase exploration
13
+ - **Operations** — releases, dev servers, health checks
14
+
15
+ ## Usage
16
+
17
+ Talk to Construct normally. It routes complex work through the full pipeline internally:
18
+ plan → implement → validate → operate
19
+
20
+ For simple tasks, Construct can act directly without exposing internal routing.
21
+
22
+ All 26 internal specialists (cx-engineer, cx-security, cx-devil-advocate, etc.) are available as subagents.
23
+
24
+ ## Tool Calls
25
+
26
+ When using Bash, always provide both `command` and `description` string fields. Do not emit XML-style fallback tool calls.
27
+
28
+ ## Cross-Tool Memory
29
+
30
+ Cass MCP provides session memory across tools. Use `memory_search` to find prior context.
@@ -0,0 +1,472 @@
1
+ {
2
+ "permissions": {
3
+ "allow": []
4
+ },
5
+ "hooks": {
6
+ "SessionStart": [
7
+ {
8
+ "matcher": "*",
9
+ "hooks": [
10
+ {
11
+ "type": "command",
12
+ "command": "node \"$HOME/.construct/lib/hooks/session-start.mjs\"",
13
+ "timeout": 10
14
+ }
15
+ ],
16
+ "id": "session:start",
17
+ "description": "Load prior project context and git status at session start"
18
+ },
19
+ {
20
+ "matcher": "*",
21
+ "hooks": [
22
+ {
23
+ "type": "command",
24
+ "command": "node \"$HOME/.construct/lib/hooks/env-check.mjs\"",
25
+ "timeout": 5
26
+ }
27
+ ],
28
+ "id": "session:env-check",
29
+ "description": "Warn about missing required env vars at session open"
30
+ }
31
+ ],
32
+ "PreToolUse": [
33
+ {
34
+ "matcher": "*",
35
+ "hooks": [
36
+ {
37
+ "type": "command",
38
+ "command": "node \"$HOME/.construct/lib/hooks/bootstrap-guard.mjs\"",
39
+ "timeout": 5
40
+ }
41
+ ],
42
+ "id": "pre:bootstrap-guard",
43
+ "description": "Block mutations until session bootstrap (workflow_status + project_context + memory_search) has run"
44
+ },
45
+ {
46
+ "matcher": "Bash",
47
+ "hooks": [
48
+ {
49
+ "type": "command",
50
+ "command": "npx block-no-verify@1.1.2",
51
+ "timeout": 5
52
+ }
53
+ ],
54
+ "id": "pre:bash:block-no-verify",
55
+ "description": "Block git --no-verify to prevent pre-commit hook bypass"
56
+ },
57
+ {
58
+ "matcher": "Bash",
59
+ "hooks": [
60
+ {
61
+ "type": "command",
62
+ "command": "node \"$HOME/.construct/lib/hooks/pre-push-gate.mjs\"",
63
+ "timeout": 180
64
+ }
65
+ ],
66
+ "id": "pre:bash:push-gate",
67
+ "description": "Run tests and build before git push — blocks on failure"
68
+ },
69
+ {
70
+ "matcher": "Bash",
71
+ "hooks": [
72
+ {
73
+ "type": "command",
74
+ "command": "node \"$HOME/.construct/lib/hooks/guard-bash.mjs\"",
75
+ "timeout": 5
76
+ }
77
+ ],
78
+ "id": "pre:bash:guard-dangerous",
79
+ "description": "Block root deletion, force-push to main, fork bombs, DDL"
80
+ },
81
+ {
82
+ "matcher": "Write|Edit|MultiEdit",
83
+ "hooks": [
84
+ {
85
+ "type": "command",
86
+ "command": "node \"$HOME/.construct/lib/hooks/config-protection.mjs\"",
87
+ "timeout": 5
88
+ }
89
+ ],
90
+ "id": "pre:edit:config-protection",
91
+ "description": "Prevent weakening eslint/tsconfig/prettier/biome configs"
92
+ },
93
+ {
94
+ "matcher": "*",
95
+ "hooks": [
96
+ {
97
+ "type": "command",
98
+ "command": "node \"$HOME/.construct/lib/hooks/mcp-health-check.mjs\"",
99
+ "timeout": 3
100
+ }
101
+ ],
102
+ "id": "pre:mcp-health-check",
103
+ "description": "Skip calls to recently-failed MCP servers"
104
+ },
105
+ {
106
+ "matcher": "Edit|MultiEdit|Write",
107
+ "hooks": [
108
+ {
109
+ "type": "command",
110
+ "command": "node \"$HOME/.construct/lib/hooks/edit-guard.mjs\"",
111
+ "timeout": 5
112
+ }
113
+ ],
114
+ "id": "pre:edit-guard",
115
+ "description": "Hash-anchored edit verification — blocks Edit when old_string not found verbatim"
116
+ },
117
+ {
118
+ "matcher": "mcp__.*",
119
+ "hooks": [
120
+ {
121
+ "type": "command",
122
+ "command": "node \"$HOME/.construct/lib/hooks/mcp-task-scope.mjs\"",
123
+ "timeout": 3
124
+ }
125
+ ],
126
+ "id": "pre:mcp-task-scope",
127
+ "description": "Warn when calling an MCP not declared in the active task mcpScope"
128
+ }
129
+ ],
130
+ "PostToolUse": [
131
+ {
132
+ "matcher": "Write|Edit",
133
+ "hooks": [
134
+ {
135
+ "type": "command",
136
+ "command": "node -e \"const p=process.env.TOOL_INPUT_FILE_PATH||'';if(p.endsWith('.json')){try{JSON.parse(require('fs').readFileSync(p,'utf8'));process.exit(0)}catch(e){console.error('Invalid JSON in '+p+': '+e.message);process.exit(2)}}\"",
137
+ "timeout": 5
138
+ }
139
+ ],
140
+ "id": "post:edit:json-validate",
141
+ "description": "Validate JSON syntax after editing .json files"
142
+ },
143
+ {
144
+ "matcher": "Write|Edit",
145
+ "hooks": [
146
+ {
147
+ "type": "command",
148
+ "command": "node \"$HOME/.construct/lib/hooks/scan-secrets.mjs\"",
149
+ "timeout": 10
150
+ }
151
+ ],
152
+ "id": "post:edit:scan-secrets",
153
+ "description": "Block real API keys and tokens from being written to files"
154
+ },
155
+ {
156
+ "matcher": "Write|Edit",
157
+ "hooks": [
158
+ {
159
+ "type": "command",
160
+ "command": "node \"$HOME/.construct/lib/hooks/adaptive-lint.mjs\"",
161
+ "timeout": 30,
162
+ "async": true
163
+ }
164
+ ],
165
+ "id": "post:edit:adaptive-lint",
166
+ "description": "Auto-run project linter/formatter after every file edit"
167
+ },
168
+ {
169
+ "matcher": "Write|Edit",
170
+ "hooks": [
171
+ {
172
+ "type": "command",
173
+ "command": "node \"$HOME/.construct/lib/hooks/console-warn.mjs\"",
174
+ "timeout": 5
175
+ }
176
+ ],
177
+ "id": "post:edit:console-warn",
178
+ "description": "Flag console.log/debugger left in edited source files"
179
+ },
180
+ {
181
+ "matcher": "Write|Edit",
182
+ "hooks": [
183
+ {
184
+ "type": "command",
185
+ "command": "node \"$HOME/.construct/lib/hooks/comment-lint.mjs\"",
186
+ "timeout": 10,
187
+ "async": true
188
+ }
189
+ ],
190
+ "id": "post:edit:comment-lint",
191
+ "description": "Warn on missing file headers or banned comment patterns after edits"
192
+ },
193
+ {
194
+ "matcher": "Write|Edit|MultiEdit",
195
+ "hooks": [
196
+ {
197
+ "type": "command",
198
+ "command": "node \"$HOME/.construct/lib/hooks/edit-accumulator.mjs\"",
199
+ "timeout": 3
200
+ }
201
+ ],
202
+ "id": "post:edit:accumulate",
203
+ "description": "Track edited files for batch typecheck and notification"
204
+ },
205
+ {
206
+ "matcher": "Write|Edit",
207
+ "hooks": [
208
+ {
209
+ "type": "command",
210
+ "command": "node \"$HOME/.construct/lib/hooks/registry-sync.mjs\"",
211
+ "timeout": 15,
212
+ "async": true
213
+ }
214
+ ],
215
+ "id": "post:edit:registry-sync",
216
+ "description": "Re-sync agents when registry.json changes"
217
+ },
218
+ {
219
+ "matcher": "Write|Edit",
220
+ "hooks": [
221
+ {
222
+ "type": "command",
223
+ "command": "node \"$HOME/.construct/lib/hooks/dep-audit.mjs\"",
224
+ "timeout": 35,
225
+ "async": true
226
+ }
227
+ ],
228
+ "id": "post:edit:dep-audit",
229
+ "description": "Audit dependencies for vulnerabilities after manifest changes"
230
+ },
231
+ {
232
+ "matcher": "TodoWrite",
233
+ "hooks": [
234
+ {
235
+ "type": "command",
236
+ "command": "node \"$HOME/.construct/lib/hooks/continuation-enforcer.mjs\"",
237
+ "timeout": 5
238
+ }
239
+ ],
240
+ "id": "post:continuation-enforcer",
241
+ "description": "After TodoWrite, remind agent of remaining tasks to prevent premature stopping"
242
+ },
243
+ {
244
+ "matcher": "Read",
245
+ "hooks": [
246
+ {
247
+ "type": "command",
248
+ "command": "node \"$HOME/.construct/lib/hooks/read-tracker.mjs\"",
249
+ "timeout": 3,
250
+ "async": true
251
+ }
252
+ ],
253
+ "id": "post:read-tracker",
254
+ "description": "Record file content hash after Read for staleness detection in edit-guard"
255
+ },
256
+ {
257
+ "matcher": "mcp__.*",
258
+ "hooks": [
259
+ {
260
+ "type": "command",
261
+ "command": "node \"$HOME/.construct/lib/hooks/mcp-audit.mjs\"",
262
+ "timeout": 3,
263
+ "async": true
264
+ }
265
+ ],
266
+ "id": "post:mcp-audit",
267
+ "description": "Audit every MCP tool call with task attribution to .cx/mcp-audit.json"
268
+ },
269
+ {
270
+ "matcher": "Task",
271
+ "hooks": [
272
+ {
273
+ "type": "command",
274
+ "command": "node \"$HOME/.construct/lib/hooks/agent-tracker.mjs\"",
275
+ "timeout": 3,
276
+ "async": true
277
+ }
278
+ ],
279
+ "id": "post:agent-tracker",
280
+ "description": "Record dispatched cx-* agent name for per-agent cost attribution"
281
+ }
282
+ ],
283
+ "PostToolUseFailure": [
284
+ {
285
+ "matcher": "*",
286
+ "hooks": [
287
+ {
288
+ "type": "command",
289
+ "command": "node \"$HOME/.construct/lib/hooks/model-fallback.mjs\"",
290
+ "timeout": 130,
291
+ "async": true
292
+ }
293
+ ],
294
+ "id": "post:model-fallback",
295
+ "description": "On rate-limit, model-unavailable, or timeout failures, poll and apply fallback model tiers"
296
+ },
297
+ {
298
+ "matcher": "*",
299
+ "hooks": [
300
+ {
301
+ "type": "command",
302
+ "command": "node \"$HOME/.construct/lib/hooks/mcp-health-check.mjs\" --mark-failure",
303
+ "timeout": 3
304
+ }
305
+ ],
306
+ "id": "post:mcp-health-check-failure",
307
+ "description": "Record MCP failures so health check can skip them temporarily"
308
+ },
309
+ {
310
+ "matcher": "*",
311
+ "hooks": [
312
+ {
313
+ "type": "command",
314
+ "command": "node \"$HOME/.construct/lib/hooks/context-window-recovery.mjs\"",
315
+ "timeout": 60,
316
+ "async": true
317
+ }
318
+ ],
319
+ "id": "post:context-window-recovery",
320
+ "description": "On context-limit errors, save workflow state and emit recovery guidance"
321
+ },
322
+ {
323
+ "matcher": "*",
324
+ "hooks": [
325
+ {
326
+ "type": "command",
327
+ "command": "node \"$HOME/.construct/lib/hooks/edit-error-recovery.mjs\"",
328
+ "timeout": 15,
329
+ "async": true
330
+ }
331
+ ],
332
+ "id": "post:edit-error-recovery",
333
+ "description": "On Edit/Write failures, emit structured retry guidance"
334
+ }
335
+ ],
336
+ "PreCompact": [
337
+ {
338
+ "matcher": "*",
339
+ "hooks": [
340
+ {
341
+ "type": "command",
342
+ "command": "node \"$HOME/.construct/lib/hooks/pre-compact.mjs\"",
343
+ "timeout": 15
344
+ }
345
+ ],
346
+ "id": "pre:compact",
347
+ "description": "Save session state to .cx/context.md before context compaction"
348
+ }
349
+ ],
350
+ "Stop": [
351
+ {
352
+ "matcher": "*",
353
+ "hooks": [
354
+ {
355
+ "type": "command",
356
+ "command": "node \"$HOME/.construct/lib/hooks/workflow-guard.mjs\"",
357
+ "timeout": 10
358
+ }
359
+ ],
360
+ "id": "stop:workflow-guard",
361
+ "description": "Prevent accidental session stop while Construct workflow tasks or alignment blockers remain"
362
+ },
363
+ {
364
+ "matcher": "*",
365
+ "hooks": [
366
+ {
367
+ "type": "command",
368
+ "command": "node \"$HOME/.construct/lib/hooks/stop-typecheck.mjs\"",
369
+ "timeout": 120
370
+ }
371
+ ],
372
+ "id": "stop:typecheck",
373
+ "description": "Batch TypeScript typecheck of edited files at end of response"
374
+ },
375
+ {
376
+ "matcher": "*",
377
+ "hooks": [
378
+ {
379
+ "type": "command",
380
+ "command": "node \"$HOME/.construct/lib/hooks/stop-notify.mjs\"",
381
+ "timeout": 10,
382
+ "async": true
383
+ }
384
+ ],
385
+ "id": "stop:notify",
386
+ "description": "Desktop notification: files changed, TS status, session cost"
387
+ },
388
+ {
389
+ "matcher": "*",
390
+ "hooks": [
391
+ {
392
+ "type": "command",
393
+ "command": "node \"$HOME/.construct/lib/hooks/drive-guard.mjs\"",
394
+ "timeout": 10
395
+ }
396
+ ],
397
+ "id": "stop:drive-guard",
398
+ "description": "Block stop when drive mode active and acceptance criteria lack evidence"
399
+ },
400
+ {
401
+ "matcher": "*",
402
+ "hooks": [
403
+ {
404
+ "type": "command",
405
+ "command": "node \"$HOME/.construct/lib/hooks/pre-compact.mjs\"",
406
+ "timeout": 15
407
+ }
408
+ ],
409
+ "id": "stop:snapshot",
410
+ "description": "Snapshot .cx/context.md at session end so resume has real progress"
411
+ }
412
+ ],
413
+ "TeammateIdle": [
414
+ {
415
+ "matcher": "*",
416
+ "hooks": [
417
+ {
418
+ "type": "command",
419
+ "command": "node \"$HOME/.construct/lib/hooks/teammate-idle-guard.mjs\"",
420
+ "timeout": 10
421
+ }
422
+ ],
423
+ "id": "team:teammate-idle-guard",
424
+ "description": "Keep worker sessions aligned with .cx/workflow.json before they go idle"
425
+ }
426
+ ],
427
+ "TaskCompleted": [
428
+ {
429
+ "matcher": "*",
430
+ "hooks": [
431
+ {
432
+ "type": "command",
433
+ "command": "node \"$HOME/.construct/lib/hooks/task-completed-guard.mjs\"",
434
+ "timeout": 10
435
+ }
436
+ ],
437
+ "id": "team:task-completed-guard",
438
+ "description": "Block task completion when Construct workflow validation fails"
439
+ }
440
+ ]
441
+ },
442
+ "mcpServers": {
443
+ "context7": {
444
+ "command": "npx",
445
+ "args": [
446
+ "-y",
447
+ "@upstash/context7-mcp@latest"
448
+ ]
449
+ },
450
+ "sequential-thinking": {
451
+ "command": "npx",
452
+ "args": [
453
+ "-y",
454
+ "@modelcontextprotocol/server-sequential-thinking"
455
+ ]
456
+ },
457
+ "memory": {
458
+ "command": "npx",
459
+ "args": [
460
+ "-y",
461
+ "@modelcontextprotocol/server-memory"
462
+ ]
463
+ },
464
+ "playwright": {
465
+ "command": "npx",
466
+ "args": [
467
+ "-y",
468
+ "@playwright/mcp@latest"
469
+ ]
470
+ }
471
+ }
472
+ }