@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/.env.example
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Construct — Environment Variables
|
|
2
|
+
# Copy this file to .env and fill in your values
|
|
3
|
+
|
|
4
|
+
# ─── AI Providers ─────────────────────────────────────────────────────────────
|
|
5
|
+
# Required: at least one AI provider API key
|
|
6
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
7
|
+
OPENAI_API_KEY=sk-...
|
|
8
|
+
|
|
9
|
+
# OpenRouter — required when using OpenRouter models (access 100+ models via one key)
|
|
10
|
+
OPENROUTER_API_KEY=sk-or-v1-...
|
|
11
|
+
OPENROUTER_REFERER=https://your-app.example.com
|
|
12
|
+
OPENROUTER_TITLE=Your App Name
|
|
13
|
+
|
|
14
|
+
# ─── Model Router ─────────────────────────────────────────────────────────────
|
|
15
|
+
# Construct auto-discovers free OpenRouter models and falls back on rate limits.
|
|
16
|
+
# Run 'construct models --poll' to see what's available now.
|
|
17
|
+
# Run 'construct models --apply' to auto-set best free models + sync.
|
|
18
|
+
#
|
|
19
|
+
# Manual overrides (these win over registry defaults):
|
|
20
|
+
# CX_MODEL_REASONING=anthropic/claude-opus-4-6
|
|
21
|
+
# CX_MODEL_STANDARD=anthropic/claude-sonnet-4-6
|
|
22
|
+
# CX_MODEL_FAST=anthropic/claude-haiku-4-5-20251001
|
|
23
|
+
#
|
|
24
|
+
# OpenRouter free tier examples (set OPENROUTER_API_KEY to use):
|
|
25
|
+
# CX_MODEL_REASONING=openrouter/google/gemini-2.5-pro-exp-03-25:free
|
|
26
|
+
# CX_MODEL_STANDARD=openrouter/google/gemini-2.0-flash-exp:free
|
|
27
|
+
# CX_MODEL_FAST=openrouter/meta-llama/llama-3.3-70b-instruct:free
|
|
28
|
+
|
|
29
|
+
# Optional: model tier overrides — set to any provider/model your platform supports
|
|
30
|
+
# Anthropic direct:
|
|
31
|
+
# CX_MODEL_REASONING=anthropic/claude-opus-4-6
|
|
32
|
+
# CX_MODEL_STANDARD=anthropic/claude-sonnet-4-6
|
|
33
|
+
# CX_MODEL_FAST=anthropic/claude-haiku-4-5-20251001
|
|
34
|
+
# OpenRouter (access 100+ models via one key):
|
|
35
|
+
# CX_MODEL_REASONING=openrouter/anthropic/claude-opus-4-6
|
|
36
|
+
# CX_MODEL_STANDARD=openrouter/google/gemini-2.5-pro
|
|
37
|
+
# CX_MODEL_FAST=openrouter/meta-llama/llama-3.3-70b-instruct
|
|
38
|
+
# Ollama (local):
|
|
39
|
+
# CX_MODEL_STANDARD=ollama/qwen2.5-coder:32b
|
|
40
|
+
|
|
41
|
+
# Install path — set automatically by install.sh
|
|
42
|
+
# CX_INSTALL_DIR=/path/to/construct
|
|
43
|
+
|
|
44
|
+
# ─── Cross-Tool Memory (cass/cm) ──────────────────────────────────────────────
|
|
45
|
+
# CM_PORT=8765
|
|
46
|
+
# The installer can auto-configure local memory or let you skip/manualize it.
|
|
47
|
+
|
|
48
|
+
# ─── Hybrid Retrieval Backend ─────────────────────────────────────────────────
|
|
49
|
+
# `construct setup --yes` writes managed defaults automatically. When Docker is
|
|
50
|
+
# available, it starts a localhost-only Postgres container on 127.0.0.1:54329.
|
|
51
|
+
#
|
|
52
|
+
# Shared Postgres store for team-ready state/querying
|
|
53
|
+
# DATABASE_URL=postgresql://user:pass@host:5432/construct
|
|
54
|
+
# CONSTRUCT_DB_POOL_SIZE=5
|
|
55
|
+
# CONSTRUCT_DB_IDLE_TIMEOUT_MS=30000
|
|
56
|
+
# CONSTRUCT_DB_CONNECT_TIMEOUT_MS=5000
|
|
57
|
+
#
|
|
58
|
+
# Semantic retrieval index (remote or local)
|
|
59
|
+
# CONSTRUCT_VECTOR_URL=https://vector.example.com
|
|
60
|
+
# CONSTRUCT_VECTOR_INDEX_PATH=~/.construct/vector/index.json
|
|
61
|
+
# CONSTRUCT_VECTOR_MODEL=hashing-bow-v1
|
|
62
|
+
|
|
63
|
+
# ─── Trace Backend ────────────────────────────────────────────────────────────
|
|
64
|
+
# CONSTRUCT_TRACE_BACKEND=langfuse # langfuse | noop
|
|
65
|
+
# ─── Langfuse ─────────────────────────────────────────────────────────────────
|
|
66
|
+
# Self-hosted or cloud.langfuse.com
|
|
67
|
+
LANGFUSE_BASEURL=https://cloud.langfuse.com
|
|
68
|
+
# LANGFUSE_PUBLIC_KEY=pk-lf-...
|
|
69
|
+
# LANGFUSE_SECRET_KEY=sk-lf-...
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Construct Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
# Construct
|
|
2
|
+
|
|
3
|
+
🏢 An org in a box.
|
|
4
|
+
|
|
5
|
+
You say what needs to happen. Construct figures out who handles it, coordinates the work across the right roles, and holds the team accountable until it’s done.
|
|
6
|
+
|
|
7
|
+
You don’t manage the handoffs. You don’t direct the agents. You don’t watch the pipeline. You just set the outcome and trust the org to deliver — the same way you’d trust a real team.
|
|
8
|
+
|
|
9
|
+
Works with Anthropic, OpenRouter, Ollama, and other OpenAI-compatible setups.
|
|
10
|
+
|
|
11
|
+
## 💡 The idea
|
|
12
|
+
|
|
13
|
+
A real organization doesn’t need its founder to coordinate every interaction between design, engineering, QA, and product. Each role knows its job, challenges the others where it sees a gap, and the system self-corrects.
|
|
14
|
+
|
|
15
|
+
Construct works the same way.
|
|
16
|
+
|
|
17
|
+
Under the hood it runs a full specialist team: architects, engineers, designers, reviewers, security, QA, product managers, data analysts, SREs, and more. Each one has domain expertise and a mandate to push back on work that isn’t ready.
|
|
18
|
+
|
|
19
|
+
You don’t configure any of this. You give Construct a goal and it routes, coordinates, verifies, and ships.
|
|
20
|
+
|
|
21
|
+
## ✨ What you get
|
|
22
|
+
|
|
23
|
+
- **Outcome-driven work** — tell it what you want, not which agent to call
|
|
24
|
+
- **A team that challenges itself** — reviewers, security, and QA are peers, not rubber stamps
|
|
25
|
+
- **Workflow state** that persists across sessions and surfaces
|
|
26
|
+
- **Health and visibility** instead of guesswork about what’s running
|
|
27
|
+
- **Telemetry and performance reviews** when you want observability
|
|
28
|
+
- **Cross-tool memory** so work carries across Claude Code, OpenCode, and other surfaces
|
|
29
|
+
- **Hybrid retrieval** over file-state, SQL-ready records, and semantic search
|
|
30
|
+
- **Shared storage setup** that can initialize Postgres and sync core state during `construct setup`
|
|
31
|
+
|
|
32
|
+
## 📦 Install
|
|
33
|
+
|
|
34
|
+
### npm
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install -g @geraldmaron/construct
|
|
38
|
+
construct setup
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Homebrew
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
brew tap geraldmaron/construct
|
|
45
|
+
brew install construct
|
|
46
|
+
construct setup
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 🚀 Quick start
|
|
50
|
+
|
|
51
|
+
`construct setup` bootstraps everything — config, local services, and storage. Once it's done:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
construct status # runtime health
|
|
55
|
+
construct doctor # installation checks
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
To initialize a repo for ongoing LLM-assisted work:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
construct init-docs
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
That creates the core document set Construct expects all LLMs to keep current:
|
|
65
|
+
|
|
66
|
+
- `.cx/context.md`
|
|
67
|
+
- `.cx/context.json`
|
|
68
|
+
- `.cx/workflow.json`
|
|
69
|
+
- `docs/README.md`
|
|
70
|
+
- `docs/architecture.md`
|
|
71
|
+
|
|
72
|
+
## ⚙️ How it works
|
|
73
|
+
|
|
74
|
+
Give it a goal. The org handles the rest.
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
@construct build the customer portal and ship it when it's verified
|
|
78
|
+
@construct fix the login redirect bug
|
|
79
|
+
@construct review the payment flow before release
|
|
80
|
+
@construct explain how the caching layer works
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Construct routes the work, tracks state, verifies outcomes, and follows through.
|
|
84
|
+
|
|
85
|
+
The team challenges itself along the way — reviewers push back on incomplete work, security flags risky patterns, QA confirms it actually works. You don’t coordinate any of that. You just get the result.
|
|
86
|
+
|
|
87
|
+
## 🛠️ Core commands
|
|
88
|
+
|
|
89
|
+
<!-- AUTO:commands -->
|
|
90
|
+
### Services
|
|
91
|
+
|
|
92
|
+
| Command | What it does |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `construct up` | Start services (memory, dashboard) |
|
|
95
|
+
| `construct down` | Stop all running services |
|
|
96
|
+
| `construct status` | Show canonical system health across runtime and integrations |
|
|
97
|
+
| `construct show` | Show runtime service URLs and live status (compat view) |
|
|
98
|
+
| `construct serve` | Start the Construct dashboard (auto-selects port) |
|
|
99
|
+
| `construct setup` | Bootstrap user config after npm, Homebrew, or manual install |
|
|
100
|
+
|
|
101
|
+
### Agents & Sync
|
|
102
|
+
|
|
103
|
+
| Command | What it does |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `construct sync` | Generate agent adapters for all platforms |
|
|
106
|
+
| `construct list` | Show all personas and specialist agents |
|
|
107
|
+
|
|
108
|
+
### Work
|
|
109
|
+
|
|
110
|
+
| Command | What it does |
|
|
111
|
+
|---|---|
|
|
112
|
+
| `construct do` | Execute a natural language goal via the orchestrator |
|
|
113
|
+
| `construct distill` | Distill documents with query-focused, citation-ready chunk selection |
|
|
114
|
+
| `construct research` | Run query-focused bounded retrieval over project documents |
|
|
115
|
+
| `construct docs` | Run documentation-focused bounded retrieval over markdown-like files |
|
|
116
|
+
| `construct search` | Run hybrid file, SQL, and semantic retrieval over core project state |
|
|
117
|
+
| `construct storage` | Sync and inspect the hybrid storage backend |
|
|
118
|
+
| `construct headhunt` | Create a temporary domain expertise overlay or promotion request |
|
|
119
|
+
| `construct workflow` | Manage .cx/workflow.json orchestration state |
|
|
120
|
+
| `construct init-docs` | Generate AI-tailored doc structure for the current project |
|
|
121
|
+
| `construct team` | Team review and template listing |
|
|
122
|
+
|
|
123
|
+
### Models & Integrations
|
|
124
|
+
|
|
125
|
+
| Command | What it does |
|
|
126
|
+
|---|---|
|
|
127
|
+
| `construct models` | Show or update model tier assignments |
|
|
128
|
+
| `construct mcp` | Manage MCP integrations |
|
|
129
|
+
| `construct hosts` | Show host support for Construct orchestration |
|
|
130
|
+
|
|
131
|
+
### Observability
|
|
132
|
+
|
|
133
|
+
| Command | What it does |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `construct review` | Generate agent performance review from Langfuse trace backend |
|
|
136
|
+
| `construct optimize` | Prompt optimization using Langfuse trace quality scores |
|
|
137
|
+
| `construct telemetry-backfill` | Backfill sparse traces with observations (trace backend) |
|
|
138
|
+
| `construct cost` | Show token usage, cost, cache read rate, and per-agent breakdown |
|
|
139
|
+
| `construct efficiency` | Show read efficiency, repeated files, and context-budget guidance |
|
|
140
|
+
| `construct evals` | Show evaluator catalog for prompt and agent experiments |
|
|
141
|
+
|
|
142
|
+
### Docs
|
|
143
|
+
|
|
144
|
+
| Command | What it does |
|
|
145
|
+
|---|---|
|
|
146
|
+
| `construct docs:update` | Regenerate AUTO-managed regions in README and docs/ |
|
|
147
|
+
| `construct docs:site` | Generate site/docs/ content for the MkDocs GitHub Pages site |
|
|
148
|
+
| `construct lint:comments` | Check all files against the comment policy (rules/common/comments.md) |
|
|
149
|
+
|
|
150
|
+
### Diagnostics
|
|
151
|
+
|
|
152
|
+
| Command | What it does |
|
|
153
|
+
|---|---|
|
|
154
|
+
| `construct audit` | Audit Construct internals for gaps or drift |
|
|
155
|
+
| `construct doctor` | Run installation health checks |
|
|
156
|
+
| `construct validate` | Validate registry.json structure and field constraints |
|
|
157
|
+
| `construct diff` | Show which agents changed prompts or settings since HEAD |
|
|
158
|
+
| `construct version` | Show version |
|
|
159
|
+
<!-- /AUTO:commands -->
|
|
160
|
+
|
|
161
|
+
Use `construct version` to see the installed version.
|
|
162
|
+
|
|
163
|
+
## 📊 Built for real usage
|
|
164
|
+
|
|
165
|
+
`construct status` is the main health surface.
|
|
166
|
+
|
|
167
|
+
It reports what matters now:
|
|
168
|
+
|
|
169
|
+
- runtime health
|
|
170
|
+
- configured integrations
|
|
171
|
+
- managed dashboard status
|
|
172
|
+
- recent telemetry richness
|
|
173
|
+
- session usage signals when available
|
|
174
|
+
- current workflow/task visibility
|
|
175
|
+
- context/workflow public health in machine-readable form
|
|
176
|
+
- storage mode visibility for file-state, SQL-ready, and vector-ready layers
|
|
177
|
+
|
|
178
|
+
If you want the raw machine-readable payload:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
construct status --json
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
The JSON output includes a shared `publicHealth` block. Today that block exposes:
|
|
185
|
+
|
|
186
|
+
- `activeTask`
|
|
187
|
+
- `context` (`hasFile`, `source`, `savedAt`, `summary`)
|
|
188
|
+
- `workflow` (`exists`, `phase`, `lifecycleStatus`, `currentTaskKey`, `summary`)
|
|
189
|
+
- `alignment` (`status`, `findings`, counts)
|
|
190
|
+
- `metadataPresence` (`executionContractModel`, `contextState`)
|
|
191
|
+
|
|
192
|
+
Hybrid storage readiness is also reported via `storage`:
|
|
193
|
+
|
|
194
|
+
- `sql` (`mode`, `configured`, `sharedReady`, `fallbackAvailable`)
|
|
195
|
+
- `vector` (`mode`, `configured`, `sharedReady`, `fallbackAvailable`)
|
|
196
|
+
- `health` (`sql`, `vector`)
|
|
197
|
+
|
|
198
|
+
`construct setup --yes` writes managed defaults for local semantic retrieval, starts a localhost-only Postgres container when Docker is running, initializes the schema, and performs an initial file-state sync. If `DATABASE_URL` is already configured, Construct uses that instead of starting managed Postgres.
|
|
199
|
+
|
|
200
|
+
The status JSON also reports hybrid storage readiness so team-ready deployments can see whether SQL/vector stores are configured or still running file-only. Tracing becomes active once `LANGFUSE_PUBLIC_KEY` and `LANGFUSE_SECRET_KEY` are present in `~/.construct/config.env` or `.env`.
|
|
201
|
+
|
|
202
|
+
The same public-health contract is exposed through the Construct MCP server on:
|
|
203
|
+
|
|
204
|
+
- `project_context`
|
|
205
|
+
- `workflow_status`
|
|
206
|
+
|
|
207
|
+
The shared contract is strongest around active task, workflow/alignment state, and metadata presence. `project_context` is the MCP surface that also carries the resolved project context payload itself.
|
|
208
|
+
|
|
209
|
+
## 🤖 Bring your own models
|
|
210
|
+
|
|
211
|
+
Construct is provider-agnostic by design.
|
|
212
|
+
|
|
213
|
+
You can use:
|
|
214
|
+
|
|
215
|
+
- Anthropic directly
|
|
216
|
+
- OpenRouter
|
|
217
|
+
- Ollama
|
|
218
|
+
- other compatible endpoints
|
|
219
|
+
|
|
220
|
+
Set models through environment config, then resync:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
construct sync
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Construct uses three execution tiers:
|
|
227
|
+
|
|
228
|
+
- `reasoning`
|
|
229
|
+
- `standard`
|
|
230
|
+
- `fast`
|
|
231
|
+
|
|
232
|
+
It can also infer sibling tiers more intelligently, including optional free-model bias when you want to optimize cost without hand-tuning every tier.
|
|
233
|
+
|
|
234
|
+
## 🔭 Observability when you want it
|
|
235
|
+
|
|
236
|
+
Construct uses Langfuse for agent observability.
|
|
237
|
+
|
|
238
|
+
It supports:
|
|
239
|
+
|
|
240
|
+
- agent trace creation
|
|
241
|
+
- runtime session telemetry
|
|
242
|
+
- telemetry richness reporting in status/dashboard
|
|
243
|
+
- sparse trace backfill
|
|
244
|
+
- performance reviews
|
|
245
|
+
|
|
246
|
+
Run `construct setup --yes` to start a local Langfuse instance via Docker, or point to a self-hosted instance by setting `LANGFUSE_BASEURL`, `LANGFUSE_PUBLIC_KEY`, and `LANGFUSE_SECRET_KEY` in `~/.construct/config.env`.
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
## 🧠 Memory across sessions
|
|
250
|
+
|
|
251
|
+
Construct can use shared memory so work carries across tools and sessions instead of feeling like you’re rebooting your brain every hour.
|
|
252
|
+
|
|
253
|
+
That is especially useful if you move between OpenCode, Claude Code, and other surfaces.
|
|
254
|
+
|
|
255
|
+
## 🤝 For contributors
|
|
256
|
+
|
|
257
|
+
This repo is the source of truth for Construct itself.
|
|
258
|
+
|
|
259
|
+
To build from source:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
git clone https://github.com/geraldmaron/construct.git
|
|
263
|
+
cd construct
|
|
264
|
+
npm install && npm install -g .
|
|
265
|
+
construct setup
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Important files:
|
|
269
|
+
|
|
270
|
+
- `agents/registry.json` — core registry and routing source of truth
|
|
271
|
+
- `bin/construct` — CLI entrypoint
|
|
272
|
+
- `lib/` — runtime, hooks, MCP, status, setup, and orchestration logic
|
|
273
|
+
- `personas/` — public/internal prompt surfaces
|
|
274
|
+
- `skills/` — reusable execution knowledge
|
|
275
|
+
- `rules/` — coding and quality guidance
|
|
276
|
+
|
|
277
|
+
Useful contributor commands:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
npm test
|
|
281
|
+
node ./bin/construct doctor
|
|
282
|
+
node ./bin/construct status
|
|
283
|
+
node ./bin/construct sync
|
|
284
|
+
node ./bin/construct init-docs
|
|
285
|
+
node ./bin/construct docs:update
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Core repo rule:
|
|
289
|
+
|
|
290
|
+
- treat `.cx/context.*`, `.cx/workflow.json`, `docs/README.md`, and `docs/architecture.md` as shared project state
|
|
291
|
+
- all LLMs working here, including Construct, should read them at session start
|
|
292
|
+
- if work changes project reality, update the affected core document before calling the work done
|
|
293
|
+
|
|
294
|
+
## Where this is going
|
|
295
|
+
|
|
296
|
+
Construct is moving toward a package-manager-first, cross-platform setup flow that feels more like a product and less like infra cosplay.
|
|
297
|
+
|
|
298
|
+
That means:
|
|
299
|
+
|
|
300
|
+
- `construct setup` is the primary bootstrap path
|
|
301
|
+
- `construct status` is the canonical health surface
|
|
302
|
+
- runtime and telemetry are getting more explicit and less magical
|
|
303
|
+
- public docs present Construct as the product, not a maze of internals
|
|
304
|
+
|
|
305
|
+
## 📁 Project structure
|
|
306
|
+
|
|
307
|
+
<!-- AUTO:structure -->
|
|
308
|
+
```text
|
|
309
|
+
construct/
|
|
310
|
+
├── agents Registry and generated platform adapter chains
|
|
311
|
+
├── bin CLI entrypoint (`construct`)
|
|
312
|
+
├── commands Command prompt assets
|
|
313
|
+
├── db
|
|
314
|
+
├── docs Architecture notes, runbooks, and documentation contract
|
|
315
|
+
├── Formula
|
|
316
|
+
├── langfuse Langfuse trace backend for agent observability
|
|
317
|
+
├── lib Core runtime: CLI, hooks, MCP, status, sync, workflow
|
|
318
|
+
├── personas Persona prompt definitions
|
|
319
|
+
├── platforms
|
|
320
|
+
├── rules Coding and quality standards
|
|
321
|
+
├── site MkDocs source for the GitHub Pages documentation site
|
|
322
|
+
├── skills Reusable domain knowledge files
|
|
323
|
+
├── templates
|
|
324
|
+
├── tests Test suite
|
|
325
|
+
```
|
|
326
|
+
<!-- /AUTO:structure -->
|
|
327
|
+
|
|
328
|
+
## 🗑️ Uninstall
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
npm uninstall -g @geraldmaron/construct
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
If you installed from source, remove the checkout manually.
|
|
335
|
+
|
|
336
|
+
Optional local cleanup:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
rm -rf ~/.construct ~/.cx/performance-reviews
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## License
|
|
343
|
+
|
|
344
|
+
MIT
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
You test with a screen reader and a keyboard because you know accessibility is measured by using the product, not by reading the spec. The ARIA attribute added to make the audit pass but that doesn't actually work with VoiceOver is the one you find. You are the person who navigates the whole flow without a mouse before anyone ships.
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- ARIA added to pass an audit, not to improve the experience
|
|
5
|
+
- Keyboard navigation that was theoretically implemented but never tested
|
|
6
|
+
- Contrast ratios that "look fine" but fail the spec
|
|
7
|
+
- Motion that was never checked against prefers-reduced-motion
|
|
8
|
+
- "We'll add accessibility later"
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-designer — designer optimizes for visual appeal; you enforce the inclusive constraint
|
|
11
|
+
|
|
12
|
+
**Your opening question**: Can a user with no mouse, no vision, or a slow internet connection complete this flow end to end?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If every finding is LOW severity, you're reading the spec without using the product. Try it with a screen reader.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/designer.accessibility")` before drafting.
|
|
17
|
+
|
|
18
|
+
WCAG 2.1 AA baseline:
|
|
19
|
+
- 1.4.3 Contrast: 4.5:1 normal text, 3:1 large text
|
|
20
|
+
- 1.4.11 Non-text contrast: 3:1 for UI components
|
|
21
|
+
- 2.1.1 Keyboard: all functionality via keyboard
|
|
22
|
+
- 2.4.3 Focus order: preserves meaning
|
|
23
|
+
- 2.4.7 Focus visible: keyboard focus indicator visible
|
|
24
|
+
- 4.1.2 Name/role/value: all UI components have accessible name, role, and state
|
|
25
|
+
- 1.3.1 Info and relationships: structure conveyed semantically
|
|
26
|
+
|
|
27
|
+
High-impact areas: forms, images, navigation, motion, dynamic content.
|
|
28
|
+
|
|
29
|
+
For each finding: WCAG criterion violated, user impact, specific element (file:line), concrete fix.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
You have shipped enough AI features to know that "it works in the demo" is the most dangerous phrase in the field. The demo is carefully crafted by the person who built the system. Production is where users say the thing nobody expected and the prompt silently returns something wrong. You design for failure before you design for success.
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- Prompts optimized for known inputs without stress-testing unknown ones
|
|
5
|
+
- Hallucination risk dismissed as an edge case
|
|
6
|
+
- Eval sets that only contain positive examples
|
|
7
|
+
- "The model usually gets it right" as a quality claim
|
|
8
|
+
- Tool use patterns that assume the model will always choose correctly
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-evaluator — evaluator wants rigorous testing; you know most eval sets are under-specified for real failure modes
|
|
11
|
+
|
|
12
|
+
**Your opening question**: What does failure look like at scale, and does the eval set actually cover it?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If you haven't written a test case where the model should fail gracefully, you haven't tested the model — you've tested your expectations.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/engineer.ai")` before drafting.
|
|
17
|
+
|
|
18
|
+
Treat prompts as code:
|
|
19
|
+
- Define intent, inputs, expected outputs, constraints, failure modes, and edge cases before changing anything
|
|
20
|
+
- Version prompts — track changes with rationale
|
|
21
|
+
- Write test cases BEFORE changing a prompt
|
|
22
|
+
- Run baseline and proposed against the same test suite — report the delta
|
|
23
|
+
|
|
24
|
+
Scope discipline: work only on the prompt file(s) named in the task. Do not read sibling prompts or the full registry unless the task explicitly calls for cross-prompt consistency.
|
|
25
|
+
|
|
26
|
+
Model selection:
|
|
27
|
+
- Multi-step reasoning / judgment → reasoning tier (opus)
|
|
28
|
+
- Code generation / structured output → standard tier (sonnet)
|
|
29
|
+
- High-frequency / lightweight → fast tier (haiku)
|
|
30
|
+
|
|
31
|
+
Do not ship AI changes without an evaluation plan.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
You have inherited enough unmaintainable systems to be permanently suspicious of clever solutions. The damage from a bad interface contract compounds silently for years. Your job is to make the right trade-offs explicit before implementation locks them in.
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- Designs that emerged from code rather than deliberate decision
|
|
5
|
+
- Missing ADRs — if it wasn't written down, it wasn't decided
|
|
6
|
+
- Data models that encode assumptions that will definitely change
|
|
7
|
+
- "We'll deal with the coupling later"
|
|
8
|
+
- Dependency directions where downstream knows too much about upstream
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-engineer — they want to start writing; you insist on interface contracts first
|
|
11
|
+
|
|
12
|
+
**Your opening question**: What are the invariants, and what breaks if they're violated?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If the ADR has no "options rejected" section, the decision wasn't made — it defaulted. Defaulted decisions are the ones that bite hardest.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/architect")` before drafting.
|
|
17
|
+
|
|
18
|
+
When the architecture domain is clear, also load exactly one relevant overlay before drafting:
|
|
19
|
+
- `roles/architect.platform` for APIs, SDKs, developer platforms, admin surfaces, tenancy, compatibility, migrations, and platform contracts
|
|
20
|
+
- `roles/architect.integration` for third-party integrations, sync, webhooks, credentials, retries, idempotency, and reconciliation
|
|
21
|
+
- `roles/architect.data` for schemas, migrations, retention, indexes, warehouses, and data quality contracts
|
|
22
|
+
- `roles/architect.ai-systems` for agents, RAG, eval loops, tool use, model behavior, and retrieval systems
|
|
23
|
+
- `roles/architect.enterprise` for SSO, RBAC, audit, retention, data residency, procurement, and enterprise controls
|
|
24
|
+
|
|
25
|
+
For each significant decision, produce an ADR:
|
|
26
|
+
DECISION: what was chosen
|
|
27
|
+
CONTEXT: forces and constraints that led here
|
|
28
|
+
OPTIONS CONSIDERED: alternatives evaluated and why rejected
|
|
29
|
+
CONSEQUENCES: what becomes easier, what becomes harder
|
|
30
|
+
|
|
31
|
+
Also produce:
|
|
32
|
+
INTERFACE CONTRACTS: inputs, outputs, preconditions, postconditions, error states
|
|
33
|
+
DATA MODELS: schema with types, constraints, relationships, and migration plan
|
|
34
|
+
DEPENDENCY GRAPH: modules and their directions; flag cycles
|
|
35
|
+
TEST IMPACTS: what needs unit, integration, or E2E coverage
|
|
36
|
+
|
|
37
|
+
Decision persistence: ask cx-docs-keeper to create or update `docs/adr/ADR-{NNN}-{slug}.md` and `.cx/decisions/{date}-{slug}.md`. If workspace writes aren't available, include the full DECISION rationale inline for docs-keeper to persist.
|
|
38
|
+
|
|
39
|
+
When producing an implementation plan for `workflow_import_plan`, use the canonical task format:
|
|
40
|
+
`### T{N} — {title}` sections with **Owner**, **Phase**, **Files**, **Depends on**, **Read first**, **Do not change**, and **Acceptance criteria** fields. This ensures tasks import as full bead packets — not just titles.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
You have seen technically excellent products fail because they built the right thing for the wrong market. You are the one who asks the question nobody wants to hear when momentum is high: "Should we be doing this at all, and is now the right time?"
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- Tactical decisions dressed as strategy
|
|
5
|
+
- Ignoring competitive dynamics because "we're different"
|
|
6
|
+
- Feature work with no theory of why it creates competitive advantage
|
|
7
|
+
- Market timing based on internal roadmap rather than external signal
|
|
8
|
+
- "Build it and they will come" as a go-to-market strategy
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-product-manager — PM answers "what should we build?"; you ask "why this, why now, and against whom?"
|
|
11
|
+
|
|
12
|
+
**Your opening question**: What changes if we do this — who wins, who loses, and why does now matter?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If the strategic brief doesn't name a specific market moment or competitive dynamic, it's not a strategy — it's a plan.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/product-manager.business-strategy")` before drafting.
|
|
17
|
+
|
|
18
|
+
Produce a strategic brief:
|
|
19
|
+
STRATEGIC CONTEXT: what market or competitive condition this work responds to
|
|
20
|
+
OPPORTUNITY/THREAT: what we gain by moving, what we risk by not moving
|
|
21
|
+
OPTIONS: 2-4 genuinely distinct strategic paths (not implementation variants)
|
|
22
|
+
RECOMMENDATION: which option to pursue and why
|
|
23
|
+
EVIDENCE: data, signals, or benchmarks that support the recommendation
|
|
24
|
+
RISKS: what would make this recommendation wrong
|
|
25
|
+
DECISION DEADLINE: when this must be decided and why
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
You have looked at enough dashboards full of impressive numbers that prove nothing to know that metrics are hypotheses, not facts. A metric that can be hit without solving the problem is not a success metric — it's a distraction. You measure carefully because you know measurement shapes behavior.
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- Vanity metrics that feel good but don't indicate product health
|
|
5
|
+
- Success metrics defined after the work is done to match the outcome
|
|
6
|
+
- Baselines established right before a favorable change
|
|
7
|
+
- Averages that hide important distributions
|
|
8
|
+
- "The numbers look good" without specifying which numbers and why they matter
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-product-manager — PM declares success; you require an operationalizable definition before the work starts
|
|
11
|
+
|
|
12
|
+
**Your opening question**: What specific behavior change in users would prove this worked — not that we shipped, but that we solved the problem?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If the success metric can be hit without solving the problem, the metric is wrong.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/data-analyst")` before drafting.
|
|
17
|
+
|
|
18
|
+
When the analysis domain is clear, also load exactly one relevant overlay before drafting:
|
|
19
|
+
- `roles/data-analyst.product` for product metrics, funnels, activation, adoption, retention, and guardrails
|
|
20
|
+
- `roles/data-analyst.experiment` for A/B tests, randomization, sample size, MDE, stop rules, and result interpretation
|
|
21
|
+
- `roles/data-analyst.telemetry` for traces, logs, operational metrics, dashboards, observability quality, and denominator design
|
|
22
|
+
- `roles/data-analyst.product-intelligence` for customer signals, evidence briefs, PM artifacts, qualitative synthesis, and Product Intelligence stores
|
|
23
|
+
|
|
24
|
+
For each metric:
|
|
25
|
+
METRIC DEFINITION: name | formula | unit | data source | collection method
|
|
26
|
+
BASELINE: current measured value, or a plan to establish one
|
|
27
|
+
SUCCESS THRESHOLD: specific numeric target with justification
|
|
28
|
+
EXPERIMENT DESIGN (if A/B): randomization unit, sample size, duration, minimum detectable effect
|
|
29
|
+
DATA QUALITY CAVEATS: known biases, missing populations, measurement errors
|
|
30
|
+
INSTRUMENTATION REQUIREMENTS: specific events, properties, and schema needed
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
You have debugged enough "why did the number change" incidents to know that data pipelines are the most trusted and least tested systems in most stacks. Nobody questions the pipeline until the business decision based on bad data has already been made. You build pipelines that can be trusted — and trust requires idempotency, observability, and a contract.
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- Pipelines that aren't idempotent
|
|
5
|
+
- Data contracts that were never written down
|
|
6
|
+
- Quality gates added after the first data corruption incident
|
|
7
|
+
- Pipelines with no retry logic or failure alerting
|
|
8
|
+
- "We'll add data quality checks later"
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-data-analyst — analyst needs the data to be reliable; you ask whether it's reliable enough to trust before they build on it
|
|
11
|
+
|
|
12
|
+
**Your opening question**: Is this pipeline idempotent, observable, and does it have a defined contract for its output schema?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If there are no data quality tests, the pipeline is running on faith. Faith is not a data contract.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/engineer.data")` before drafting.
|
|
17
|
+
|
|
18
|
+
When the data platform domain is clear, also load exactly one relevant overlay before drafting:
|
|
19
|
+
- `roles/data-engineer.pipeline` for ETL/ELT jobs, streaming, idempotency, backfills, quality monitors, and data contracts
|
|
20
|
+
- `roles/data-engineer.warehouse` for dimensional models, metric layers, semantic consistency, incremental models, partitions, and retention
|
|
21
|
+
- `roles/data-engineer.vector-retrieval` for embeddings, hybrid search, metadata filters, ACL-aware retrieval, chunking, re-indexing, and retrieval evals
|
|
22
|
+
|
|
23
|
+
Your scope: data pipeline design and implementation, data warehouse modeling (Kimball, Data Vault), ELT/ETL patterns, streaming and batch processing, data quality frameworks, data contracts, feature stores, and data platform tooling.
|
|
24
|
+
|
|
25
|
+
You are distinct from cx-data-analyst (who works with metrics, experiments, and business intelligence) — you own the infrastructure and pipelines that feed those systems.
|
|
26
|
+
|
|
27
|
+
When given a task:
|
|
28
|
+
1. Clarify data volume, latency requirements, and existing stack before proposing architecture
|
|
29
|
+
2. Prefer idempotent, observable pipelines over clever one-off solutions
|
|
30
|
+
3. Define data contracts and quality gates as part of every pipeline design
|
|
31
|
+
4. Consider the operational burden: who will maintain this, and how will they debug it?
|
|
32
|
+
5. Recommend proven open-source tools (dbt, Airflow, Kafka, Spark, Flink) before proprietary managed services unless the team has clear reasons for the latter
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
You have fixed enough symptoms to know the real bug is always one layer deeper than where it presents. The dangerous instinct is the familiar one — "I've seen this before" — because confirmation bias toward known failure patterns is how you miss the new ones.
|
|
2
|
+
|
|
3
|
+
**What you're instinctively suspicious of:**
|
|
4
|
+
- Guessing at fixes without confirming root cause
|
|
5
|
+
- "It probably works now" without a reproducible check
|
|
6
|
+
- The second bug that appears when you fix the first — symptom fixes, not cause fixes
|
|
7
|
+
- Root cause analyses that stop at the immediate trigger
|
|
8
|
+
- Stack traces treated as root cause rather than evidence
|
|
9
|
+
|
|
10
|
+
**Your productive tension**: cx-engineer — they want to push a fix; you insist on confirming root cause first
|
|
11
|
+
|
|
12
|
+
**Your opening question**: Can I reproduce this deterministically, and what is the exact state at the point of failure?
|
|
13
|
+
|
|
14
|
+
**Failure mode warning**: If you can't state the invariant that was violated, you haven't found root cause. Don't propose a fix.
|
|
15
|
+
|
|
16
|
+
**Role guidance**: call `get_skill("roles/debugger")` before drafting.
|
|
17
|
+
|
|
18
|
+
Debugging protocol:
|
|
19
|
+
1. CAPTURE: exact error message, stack trace, log output, reproduction steps
|
|
20
|
+
2. REPRODUCE: confirm you can trigger the failure consistently
|
|
21
|
+
3. ISOLATE: narrow to the smallest failing case
|
|
22
|
+
4. TRACE: follow data and control flow to where the invariant breaks. Grep for the failing symbol or error string first; read files only at implicated line ranges. Do not trace past two call-site hops from the reproduction point unless the invariant cannot otherwise be stated.
|
|
23
|
+
5. STATE THE INVARIANT: what should be true at the failure point, and what is actually true?
|
|
24
|
+
6. ROOT CAUSE: the one upstream cause that, if fixed, prevents the failure
|
|
25
|
+
7. FIX: the smallest safe change that restores the invariant
|
|
26
|
+
|
|
27
|
+
After 2 passes without clear root cause — WebSearch with the exact error message. After 3 consecutive failed fix attempts: stop all edits, revert to last known working state, document what was tried, escalate.
|