@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.
- package/.env.example +69 -0
- package/LICENSE +21 -0
- package/README.md +344 -0
- package/agents/prompts/cx-accessibility.md +29 -0
- package/agents/prompts/cx-ai-engineer.md +31 -0
- package/agents/prompts/cx-architect.md +40 -0
- package/agents/prompts/cx-business-strategist.md +25 -0
- package/agents/prompts/cx-data-analyst.md +30 -0
- package/agents/prompts/cx-data-engineer.md +32 -0
- package/agents/prompts/cx-debugger.md +27 -0
- package/agents/prompts/cx-designer.md +33 -0
- package/agents/prompts/cx-devil-advocate.md +36 -0
- package/agents/prompts/cx-docs-keeper.md +50 -0
- package/agents/prompts/cx-engineer.md +36 -0
- package/agents/prompts/cx-evaluator.md +26 -0
- package/agents/prompts/cx-explorer.md +38 -0
- package/agents/prompts/cx-legal-compliance.md +25 -0
- package/agents/prompts/cx-operations.md +28 -0
- package/agents/prompts/cx-orchestrator.md +30 -0
- package/agents/prompts/cx-platform-engineer.md +25 -0
- package/agents/prompts/cx-product-manager.md +30 -0
- package/agents/prompts/cx-qa.md +42 -0
- package/agents/prompts/cx-rd-lead.md +25 -0
- package/agents/prompts/cx-release-manager.md +31 -0
- package/agents/prompts/cx-researcher.md +31 -0
- package/agents/prompts/cx-reviewer.md +36 -0
- package/agents/prompts/cx-security.md +37 -0
- package/agents/prompts/cx-sre.md +26 -0
- package/agents/prompts/cx-test-automation.md +35 -0
- package/agents/prompts/cx-trace-reviewer.md +76 -0
- package/agents/prompts/cx-ux-researcher.md +30 -0
- package/agents/registry.json +879 -0
- package/agents/teams.json +94 -0
- package/bin/construct +613 -0
- package/commands/build/feature.md +21 -0
- package/commands/build/fix.md +20 -0
- package/commands/design/access.md +19 -0
- package/commands/design/flow.md +16 -0
- package/commands/design/ui.md +18 -0
- package/commands/measure/experiment.md +18 -0
- package/commands/measure/metrics.md +18 -0
- package/commands/measure/results.md +18 -0
- package/commands/plan/api.md +19 -0
- package/commands/plan/challenge.md +18 -0
- package/commands/plan/decide.md +20 -0
- package/commands/plan/feature.md +49 -0
- package/commands/plan/requirements.md +24 -0
- package/commands/remember/context.md +26 -0
- package/commands/remember/handoff.md +19 -0
- package/commands/remember/runbook.md +20 -0
- package/commands/review/code.md +21 -0
- package/commands/review/quality.md +19 -0
- package/commands/review/security.md +16 -0
- package/commands/ship/ready.md +19 -0
- package/commands/ship/release.md +19 -0
- package/commands/ship/status.md +18 -0
- package/commands/understand/docs.md +22 -0
- package/commands/understand/research.md +22 -0
- package/commands/understand/this.md +23 -0
- package/commands/understand/why.md +18 -0
- package/commands/work/clean.md +32 -0
- package/commands/work/drive.md +69 -0
- package/commands/work/optimize-prompts.md +46 -0
- package/commands/work/parallel-review.md +40 -0
- package/db/migrations/001_init.sql +38 -0
- package/langfuse/docker-compose.yml +82 -0
- package/lib/audit-skills.mjs +118 -0
- package/lib/auto-docs.mjs +293 -0
- package/lib/cli-commands.mjs +409 -0
- package/lib/codex-config.mjs +114 -0
- package/lib/comment-lint.mjs +191 -0
- package/lib/completions.mjs +170 -0
- package/lib/context-state.mjs +99 -0
- package/lib/cost.mjs +213 -0
- package/lib/distill.mjs +403 -0
- package/lib/efficiency.mjs +139 -0
- package/lib/env-config.mjs +53 -0
- package/lib/eval-harness.mjs +59 -0
- package/lib/features.mjs +209 -0
- package/lib/headhunt.mjs +597 -0
- package/lib/hooks/adaptive-lint.mjs +112 -0
- package/lib/hooks/agent-tracker.mjs +50 -0
- package/lib/hooks/bootstrap-guard.mjs +90 -0
- package/lib/hooks/comment-lint.mjs +26 -0
- package/lib/hooks/config-protection.mjs +52 -0
- package/lib/hooks/console-warn.mjs +43 -0
- package/lib/hooks/context-window-recovery.mjs +90 -0
- package/lib/hooks/continuation-enforcer.mjs +72 -0
- package/lib/hooks/dep-audit.mjs +155 -0
- package/lib/hooks/drive-guard.mjs +89 -0
- package/lib/hooks/edit-accumulator.mjs +36 -0
- package/lib/hooks/edit-error-recovery.mjs +46 -0
- package/lib/hooks/edit-guard.mjs +109 -0
- package/lib/hooks/env-check.mjs +80 -0
- package/lib/hooks/guard-bash.mjs +83 -0
- package/lib/hooks/mcp-audit.mjs +57 -0
- package/lib/hooks/mcp-health-check.mjs +51 -0
- package/lib/hooks/mcp-task-scope.mjs +47 -0
- package/lib/hooks/model-fallback.mjs +105 -0
- package/lib/hooks/pre-compact.mjs +212 -0
- package/lib/hooks/pre-push-gate.mjs +129 -0
- package/lib/hooks/read-tracker.mjs +129 -0
- package/lib/hooks/registry-sync.mjs +23 -0
- package/lib/hooks/scan-secrets.mjs +76 -0
- package/lib/hooks/session-start.mjs +95 -0
- package/lib/hooks/stop-notify.mjs +191 -0
- package/lib/hooks/stop-typecheck.mjs +83 -0
- package/lib/hooks/task-completed-guard.mjs +43 -0
- package/lib/hooks/teammate-idle-guard.mjs +54 -0
- package/lib/hooks/workflow-guard.mjs +62 -0
- package/lib/host-capabilities.mjs +123 -0
- package/lib/init-docs.mjs +382 -0
- package/lib/mcp/server.mjs +1123 -0
- package/lib/mcp-catalog.json +243 -0
- package/lib/mcp-manager.mjs +433 -0
- package/lib/mcp-platform-config.mjs +104 -0
- package/lib/model-router.mjs +810 -0
- package/lib/opencode-config.mjs +44 -0
- package/lib/opencode-runtime-plugin.mjs +909 -0
- package/lib/opencode-telemetry.mjs +433 -0
- package/lib/orchestration-policy.mjs +258 -0
- package/lib/prompt-composer.mjs +196 -0
- package/lib/prompt-metadata.mjs +68 -0
- package/lib/review.mjs +429 -0
- package/lib/role-preload.mjs +52 -0
- package/lib/schemas/decision.json +50 -0
- package/lib/schemas/implementation.json +51 -0
- package/lib/schemas/review-report.json +32 -0
- package/lib/schemas/test-report.json +43 -0
- package/lib/server/index.mjs +334 -0
- package/lib/server/static/app.js +841 -0
- package/lib/server/static/index.html +820 -0
- package/lib/service-manager.mjs +225 -0
- package/lib/setup.mjs +319 -0
- package/lib/status.mjs +707 -0
- package/lib/storage/backend.mjs +44 -0
- package/lib/storage/embeddings.mjs +70 -0
- package/lib/storage/hybrid-query.mjs +184 -0
- package/lib/storage/sql-store.mjs +55 -0
- package/lib/storage/state-source.mjs +101 -0
- package/lib/storage/sync.mjs +164 -0
- package/lib/storage/vector-store.mjs +59 -0
- package/lib/telemetry/backends/langfuse.mjs +58 -0
- package/lib/telemetry/backends/noop.mjs +16 -0
- package/lib/telemetry/langfuse-ingest.mjs +108 -0
- package/lib/telemetry/langfuse-model-sync.mjs +270 -0
- package/lib/telemetry/team-rollup.mjs +143 -0
- package/lib/toolkit-env.mjs +30 -0
- package/lib/validator.mjs +181 -0
- package/lib/workflow-state.mjs +794 -0
- package/package.json +53 -0
- package/personas/construct.md +94 -0
- package/platforms/claude/CLAUDE.md +30 -0
- package/platforms/claude/settings.template.json +472 -0
- package/platforms/opencode/config.template.json +65 -0
- package/platforms/opencode/plugins/construct-fallback.js +5 -0
- package/platforms/opencode/sync-config.mjs +69 -0
- package/rules/common/agents.md +55 -0
- package/rules/common/code-review.md +129 -0
- package/rules/common/coding-style.md +95 -0
- package/rules/common/comments.md +139 -0
- package/rules/common/cx-agent-routing.md +61 -0
- package/rules/common/cx-skill-routing.md +11 -0
- package/rules/common/development-workflow.md +49 -0
- package/rules/common/git-workflow.md +29 -0
- package/rules/common/hooks.md +35 -0
- package/rules/common/patterns.md +36 -0
- package/rules/common/performance.md +71 -0
- package/rules/common/security.md +34 -0
- package/rules/common/testing.md +62 -0
- package/rules/golang/coding-style.md +37 -0
- package/rules/golang/hooks.md +22 -0
- package/rules/golang/patterns.md +50 -0
- package/rules/golang/security.md +39 -0
- package/rules/golang/testing.md +36 -0
- package/rules/python/coding-style.md +47 -0
- package/rules/python/hooks.md +24 -0
- package/rules/python/patterns.md +44 -0
- package/rules/python/security.md +35 -0
- package/rules/python/testing.md +43 -0
- package/rules/swift/coding-style.md +52 -0
- package/rules/swift/hooks.md +25 -0
- package/rules/swift/patterns.md +71 -0
- package/rules/swift/security.md +38 -0
- package/rules/swift/testing.md +50 -0
- package/rules/typescript/coding-style.md +204 -0
- package/rules/typescript/hooks.md +27 -0
- package/rules/typescript/patterns.md +57 -0
- package/rules/typescript/security.md +33 -0
- package/rules/typescript/testing.md +23 -0
- package/rules/web/coding-style.md +101 -0
- package/rules/web/design-quality.md +68 -0
- package/rules/web/hooks.md +125 -0
- package/rules/web/patterns.md +84 -0
- package/rules/web/performance.md +69 -0
- package/rules/web/security.md +62 -0
- package/rules/web/testing.md +60 -0
- package/rules/zh/README.md +113 -0
- package/rules/zh/agents.md +55 -0
- package/rules/zh/code-review.md +129 -0
- package/rules/zh/coding-style.md +53 -0
- package/rules/zh/development-workflow.md +49 -0
- package/rules/zh/git-workflow.md +29 -0
- package/rules/zh/hooks.md +35 -0
- package/rules/zh/patterns.md +36 -0
- package/rules/zh/performance.md +60 -0
- package/rules/zh/security.md +34 -0
- package/rules/zh/testing.md +34 -0
- package/skills/ai/agent-dev.md +102 -0
- package/skills/ai/llm-security.md +105 -0
- package/skills/ai/ml-ops.md +169 -0
- package/skills/ai/orchestration-workflow.md +87 -0
- package/skills/ai/prompt-and-eval.md +114 -0
- package/skills/ai/prompt-optimizer.md +114 -0
- package/skills/ai/rag-system.md +104 -0
- package/skills/architecture/api-design.md +100 -0
- package/skills/architecture/caching.md +101 -0
- package/skills/architecture/cloud-native.md +97 -0
- package/skills/architecture/message-queue.md +100 -0
- package/skills/architecture/security-arch.md +105 -0
- package/skills/development/cpp.md +127 -0
- package/skills/development/go.md +129 -0
- package/skills/development/java.md +134 -0
- package/skills/development/kotlin.md +140 -0
- package/skills/development/mobile-crossplatform.md +144 -0
- package/skills/development/python.md +109 -0
- package/skills/development/rust.md +127 -0
- package/skills/development/shell.md +127 -0
- package/skills/development/swift.md +129 -0
- package/skills/development/typescript.md +129 -0
- package/skills/devops/ci-cd.md +108 -0
- package/skills/devops/containerization.md +106 -0
- package/skills/devops/cost-optimization.md +105 -0
- package/skills/devops/data-engineering.md +181 -0
- package/skills/devops/database.md +95 -0
- package/skills/devops/dependency-management.md +91 -0
- package/skills/devops/devsecops.md +96 -0
- package/skills/devops/git-workflow.md +100 -0
- package/skills/devops/incident-response.md +167 -0
- package/skills/devops/monorepo.md +87 -0
- package/skills/devops/observability.md +103 -0
- package/skills/devops/performance.md +104 -0
- package/skills/devops/testing.md +104 -0
- package/skills/docs/adr-workflow.md +32 -0
- package/skills/docs/backlog-proposal-workflow.md +19 -0
- package/skills/docs/customer-profile-workflow.md +22 -0
- package/skills/docs/evidence-ingest-workflow.md +23 -0
- package/skills/docs/init-docs.md +160 -0
- package/skills/docs/init-project.md +50 -0
- package/skills/docs/prd-workflow.md +57 -0
- package/skills/docs/prfaq-workflow.md +25 -0
- package/skills/docs/product-intelligence-review.md +22 -0
- package/skills/docs/product-intelligence-workflow.md +62 -0
- package/skills/docs/product-signal-workflow.md +27 -0
- package/skills/docs/research-workflow.md +28 -0
- package/skills/docs/runbook-workflow.md +24 -0
- package/skills/exploration/repo-map.md +297 -0
- package/skills/frameworks/django.md +159 -0
- package/skills/frameworks/nextjs.md +148 -0
- package/skills/frameworks/react.md +132 -0
- package/skills/frameworks/spring-boot.md +165 -0
- package/skills/frontend-design/accessibility.md +153 -0
- package/skills/frontend-design/component-patterns.md +111 -0
- package/skills/frontend-design/engineering.md +122 -0
- package/skills/frontend-design/state-management.md +118 -0
- package/skills/frontend-design/ui-aesthetics.md +102 -0
- package/skills/frontend-design/ux-principles.md +126 -0
- package/skills/quality-gates/review-work.md +90 -0
- package/skills/quality-gates/verify-change.md +94 -0
- package/skills/quality-gates/verify-module.md +96 -0
- package/skills/quality-gates/verify-quality.md +93 -0
- package/skills/quality-gates/verify-security.md +95 -0
- package/skills/roles/architect.ai-systems.md +37 -0
- package/skills/roles/architect.data.md +37 -0
- package/skills/roles/architect.enterprise.md +37 -0
- package/skills/roles/architect.integration.md +37 -0
- package/skills/roles/architect.md +68 -0
- package/skills/roles/architect.platform.md +37 -0
- package/skills/roles/data-analyst.experiment.md +37 -0
- package/skills/roles/data-analyst.md +68 -0
- package/skills/roles/data-analyst.product-intelligence.md +37 -0
- package/skills/roles/data-analyst.product.md +37 -0
- package/skills/roles/data-analyst.telemetry.md +37 -0
- package/skills/roles/data-engineer.pipeline.md +37 -0
- package/skills/roles/data-engineer.vector-retrieval.md +37 -0
- package/skills/roles/data-engineer.warehouse.md +37 -0
- package/skills/roles/debugger.md +68 -0
- package/skills/roles/designer.accessibility.md +43 -0
- package/skills/roles/designer.md +68 -0
- package/skills/roles/engineer.ai.md +49 -0
- package/skills/roles/engineer.data.md +49 -0
- package/skills/roles/engineer.md +85 -0
- package/skills/roles/engineer.platform.md +49 -0
- package/skills/roles/operator.docs.md +43 -0
- package/skills/roles/operator.md +68 -0
- package/skills/roles/operator.release.md +43 -0
- package/skills/roles/operator.sre.md +43 -0
- package/skills/roles/orchestrator.md +66 -0
- package/skills/roles/product-manager.ai-product.md +37 -0
- package/skills/roles/product-manager.business-strategy.md +43 -0
- package/skills/roles/product-manager.enterprise.md +37 -0
- package/skills/roles/product-manager.growth.md +37 -0
- package/skills/roles/product-manager.md +67 -0
- package/skills/roles/product-manager.platform.md +37 -0
- package/skills/roles/product-manager.product.md +37 -0
- package/skills/roles/qa.ai-eval.md +37 -0
- package/skills/roles/qa.api-contract.md +37 -0
- package/skills/roles/qa.data-pipeline.md +37 -0
- package/skills/roles/qa.md +68 -0
- package/skills/roles/qa.test-automation.md +49 -0
- package/skills/roles/qa.web-ui.md +37 -0
- package/skills/roles/researcher.explorer.md +43 -0
- package/skills/roles/researcher.md +68 -0
- package/skills/roles/researcher.ux.md +43 -0
- package/skills/roles/reviewer.devil-advocate.md +43 -0
- package/skills/roles/reviewer.evaluator.md +43 -0
- package/skills/roles/reviewer.md +68 -0
- package/skills/roles/reviewer.trace.md +43 -0
- package/skills/roles/security.ai.md +37 -0
- package/skills/roles/security.appsec.md +37 -0
- package/skills/roles/security.cloud.md +37 -0
- package/skills/roles/security.legal-compliance.md +49 -0
- package/skills/roles/security.md +68 -0
- package/skills/roles/security.privacy.md +37 -0
- package/skills/roles/security.supply-chain.md +37 -0
- package/skills/routing.md +139 -0
- package/skills/security/blue-team.md +83 -0
- package/skills/security/code-audit.md +94 -0
- package/skills/security/pentest.md +84 -0
- package/skills/security/red-team.md +81 -0
- package/skills/security/threat-intel.md +89 -0
- package/skills/security/vuln-research.md +87 -0
- package/skills/utility/clean-code.md +165 -0
- package/sync-agents.mjs +899 -0
- package/templates/docs/adr.md +27 -0
- package/templates/docs/backlog-proposal.md +26 -0
- package/templates/docs/customer-profile.md +34 -0
- package/templates/docs/evidence-brief.md +37 -0
- package/templates/docs/incident-report.md +46 -0
- package/templates/docs/memo.md +27 -0
- package/templates/docs/meta-prd.md +56 -0
- package/templates/docs/one-pager.md +24 -0
- package/templates/docs/prd-business.md +61 -0
- package/templates/docs/prd-platform.md +62 -0
- package/templates/docs/prd.md +47 -0
- package/templates/docs/prfaq.md +31 -0
- package/templates/docs/product-intelligence-report.md +31 -0
- package/templates/docs/research-brief.md +29 -0
- package/templates/docs/rfc-platform.md +60 -0
- package/templates/docs/rfc.md +46 -0
- package/templates/docs/runbook.md +33 -0
- 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
|
+
}
|