@geraldmaron/construct 1.0.0 → 1.0.1
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 +10 -7
- package/LICENSE +201 -21
- package/README.md +132 -257
- package/agents/contracts.json +387 -0
- package/agents/prompts/cx-accessibility.md +8 -0
- package/agents/prompts/cx-ai-engineer.md +92 -0
- package/agents/prompts/cx-architect.md +10 -2
- package/agents/prompts/cx-business-strategist.md +13 -0
- package/agents/prompts/cx-data-analyst.md +80 -0
- package/agents/prompts/cx-data-engineer.md +4 -0
- package/agents/prompts/cx-debugger.md +8 -0
- package/agents/prompts/cx-designer.md +19 -0
- package/agents/prompts/cx-devil-advocate.md +4 -0
- package/agents/prompts/cx-docs-keeper.md +128 -0
- package/agents/prompts/cx-engineer.md +13 -0
- package/agents/prompts/cx-evaluator.md +4 -0
- package/agents/prompts/cx-explorer.md +12 -0
- package/agents/prompts/cx-legal-compliance.md +13 -0
- package/agents/prompts/cx-operations.md +13 -0
- package/agents/prompts/cx-orchestrator.md +107 -4
- package/agents/prompts/cx-platform-engineer.md +75 -0
- package/agents/prompts/cx-product-manager.md +8 -0
- package/agents/prompts/cx-qa.md +100 -0
- package/agents/prompts/cx-rd-lead.md +13 -0
- package/agents/prompts/cx-release-manager.md +8 -0
- package/agents/prompts/cx-researcher.md +21 -1
- package/agents/prompts/cx-reviewer.md +8 -0
- package/agents/prompts/cx-security.md +104 -0
- package/agents/prompts/cx-sre.md +104 -0
- package/agents/prompts/cx-test-automation.md +4 -0
- package/agents/prompts/cx-trace-reviewer.md +7 -3
- package/agents/prompts/cx-ux-researcher.md +4 -0
- package/agents/registry.json +365 -90
- package/agents/role-manifests.json +217 -0
- package/bin/construct +3345 -141
- package/bin/construct-postinstall.mjs +87 -0
- package/commands/build/feature.md +6 -6
- package/commands/plan/feature.md +6 -5
- package/commands/plan/requirements.md +1 -1
- package/commands/ship/status.md +1 -1
- package/commands/work/drive.md +3 -3
- package/commands/work/optimize-prompts.md +3 -3
- package/db/{migrations → schema}/001_init.sql +2 -0
- package/db/schema/002_pgvector.sql +182 -0
- package/db/schema/003_intake.sql +47 -0
- package/examples/README.md +85 -0
- package/examples/internal/roles/architect/bad/clever-plan-without-contracts.md +30 -0
- package/examples/internal/roles/architect/golden/explicit-tradeoff-before-plan.md +23 -0
- package/examples/internal/roles/engineer/bad/speculative-abstraction.md +30 -0
- package/examples/internal/roles/engineer/golden/read-before-write.md +28 -0
- package/examples/internal/roles/orchestrator/bad/everything-becomes-multi-agent.md +29 -0
- package/examples/internal/roles/orchestrator/golden/minimal-dispatch.md +22 -0
- package/examples/internal/roles/qa/bad/coverage-theater.md +30 -0
- package/examples/internal/roles/qa/golden/regression-gate.md +23 -0
- package/examples/internal/roles/reviewer/bad/lgtm-without-verification.md +29 -0
- package/examples/internal/roles/reviewer/golden/find-structural-risk-first.md +28 -0
- package/examples/personas/construct/adversarial/ignore-instruction-to-skip-approval.md +22 -0
- package/examples/personas/construct/bad/commit-without-approval.md +30 -0
- package/examples/personas/construct/boundary/blocked-needs-main-input.md +29 -0
- package/examples/personas/construct/golden/branch-approval-before-mutation.md +36 -0
- package/examples/personas/construct/golden/focused-direct-answer.md +28 -0
- package/examples/provider-plugin/README.md +34 -0
- package/examples/provider-plugin/index.mjs +74 -0
- package/examples/provider-plugin/package.json +15 -0
- package/examples/seed-observations/README.md +38 -0
- package/examples/seed-observations/anti-patterns.md +44 -0
- package/examples/seed-observations/decisions.md +36 -0
- package/examples/seed-observations/patterns.md +42 -0
- package/lib/agent-contracts-enforce.mjs +158 -0
- package/lib/agent-contracts.mjs +231 -0
- package/lib/agents/postconditions.mjs +126 -0
- package/lib/agents/schema.mjs +124 -0
- package/lib/artifact-capture.mjs +183 -0
- package/lib/audit-trail.mjs +149 -0
- package/lib/auto-docs.mjs +245 -65
- package/lib/beads/auto-close.mjs +126 -0
- package/lib/beads/drift.mjs +171 -0
- package/lib/beads-automation.mjs +542 -0
- package/lib/beads-client.mjs +518 -0
- package/lib/beads-lock.mjs +377 -0
- package/lib/beads-optimistic.mjs +365 -0
- package/lib/bootstrap/built-ins.mjs +136 -0
- package/lib/bootstrap/lazy-install.mjs +161 -0
- package/lib/bootstrap/resources.mjs +120 -0
- package/lib/bootstrap.mjs +105 -0
- package/lib/cache-governor.js +213 -0
- package/lib/cache-strategy-anthropic.js +62 -0
- package/lib/cache-strategy-google.js +79 -0
- package/lib/cache-strategy-none.js +30 -0
- package/lib/cache-strategy-openai.js +48 -0
- package/lib/cache-strategy.js +91 -0
- package/lib/claude-allow.mjs +149 -0
- package/lib/cli-commands.mjs +413 -258
- package/lib/codex-config.mjs +3 -1
- package/lib/comment-lint.mjs +55 -6
- package/lib/completions.mjs +21 -6
- package/lib/config/alias.mjs +56 -0
- package/lib/config/project-config.mjs +335 -0
- package/lib/config/schema.mjs +159 -0
- package/lib/context-router.mjs +308 -0
- package/lib/cost-ledger.mjs +177 -0
- package/lib/cost.mjs +171 -10
- package/lib/dashboard-static.mjs +158 -0
- package/lib/deployment-mode.mjs +86 -0
- package/lib/deprecate.mjs +49 -0
- package/lib/dispatch-batch.js +183 -0
- package/lib/distill.mjs +21 -8
- package/lib/doc-stamp.mjs +164 -0
- package/lib/doc-verify.mjs +119 -0
- package/lib/docs-routing.mjs +89 -0
- package/lib/docs-verify.mjs +417 -0
- package/lib/doctor/audit.mjs +71 -0
- package/lib/doctor/cli.mjs +99 -0
- package/lib/doctor/escalate.mjs +29 -0
- package/lib/doctor/index.mjs +140 -0
- package/lib/doctor/report.mjs +170 -0
- package/lib/doctor/watchers/bd-watch.mjs +117 -0
- package/lib/doctor/watchers/cost.mjs +130 -0
- package/lib/doctor/watchers/disk.mjs +122 -0
- package/lib/doctor/watchers/handoffs.mjs +33 -0
- package/lib/doctor/watchers/process-pressure.mjs +60 -0
- package/lib/doctor/watchers/service-health.mjs +188 -0
- package/lib/document-extract.mjs +288 -0
- package/lib/document-ingest.mjs +230 -0
- package/lib/drop.mjs +282 -0
- package/lib/embed/approval-queue.mjs +176 -0
- package/lib/embed/artifact.mjs +349 -0
- package/lib/embed/authority-guard.mjs +155 -0
- package/lib/embed/cli.mjs +408 -0
- package/lib/embed/config.mjs +355 -0
- package/lib/embed/conflict-detection.mjs +264 -0
- package/lib/embed/customer-profiles.mjs +480 -0
- package/lib/embed/daemon.mjs +1309 -0
- package/lib/embed/demand-fetch.mjs +449 -0
- package/lib/embed/docs-lifecycle.mjs +349 -0
- package/lib/embed/inbox-live-watcher.mjs +119 -0
- package/lib/embed/inbox.mjs +343 -0
- package/lib/embed/intake-metrics.mjs +190 -0
- package/lib/embed/jobs/vector-sync.mjs +198 -0
- package/lib/embed/notifications.mjs +75 -0
- package/lib/embed/output.mjs +79 -0
- package/lib/embed/providers/github.mjs +295 -0
- package/lib/embed/providers/jira.mjs +192 -0
- package/lib/embed/providers/linear.mjs +186 -0
- package/lib/embed/providers/registry.mjs +115 -0
- package/lib/embed/providers/slack.mjs +203 -0
- package/lib/embed/recommendation-store.mjs +378 -0
- package/lib/embed/roadmap.mjs +374 -0
- package/lib/embed/role-framing.mjs +110 -0
- package/lib/embed/scheduler.mjs +99 -0
- package/lib/embed/semantic.mjs +325 -0
- package/lib/embed/snapshot.mjs +191 -0
- package/lib/embed/supervision.mjs +235 -0
- package/lib/embed/target-resolver.mjs +186 -0
- package/lib/embed/worker.mjs +62 -0
- package/lib/embed/workspaces.mjs +297 -0
- package/lib/engine/chunker-headings.mjs +110 -0
- package/lib/engine/compressor-heuristic.mjs +100 -0
- package/lib/engine/consolidate.mjs +287 -0
- package/lib/engine/contracts.mjs +126 -0
- package/lib/engine/defaults.mjs +129 -0
- package/lib/engine/eval-retrieval.mjs +148 -0
- package/lib/engine/fuser-rrf.mjs +62 -0
- package/lib/engine/index.mjs +37 -0
- package/lib/engine/registry.mjs +146 -0
- package/lib/engine/reranker-mmr.mjs +90 -0
- package/lib/engine/tokens.mjs +77 -0
- package/lib/entity-store.mjs +280 -0
- package/lib/env-config.mjs +69 -4
- package/lib/evals/retrieval-bench.mjs +159 -0
- package/lib/evaluator-optimizer.mjs +317 -0
- package/lib/features.mjs +159 -29
- package/lib/gates-audit.mjs +236 -0
- package/lib/git-hooks/prepare-commit-msg +58 -0
- package/lib/handoffs/cleanup.mjs +159 -0
- package/lib/handoffs/contract.mjs +162 -0
- package/lib/handoffs/inventory.mjs +120 -0
- package/lib/headhunt.mjs +28 -47
- package/lib/health-check.mjs +399 -0
- package/lib/hook-health.mjs +442 -0
- package/lib/hooks/_lib/log.mjs +82 -0
- package/lib/hooks/adaptive-lint.mjs +26 -2
- package/lib/hooks/agent-tracker.mjs +171 -14
- package/lib/hooks/audit-reads.mjs +109 -0
- package/lib/hooks/audit-trail.mjs +153 -0
- package/lib/hooks/bash-output-logger.mjs +71 -0
- package/lib/hooks/block-no-verify.mjs +41 -0
- package/lib/hooks/ci-status-check.mjs +82 -0
- package/lib/hooks/comment-lint.mjs +29 -7
- package/lib/hooks/config-protection.mjs +39 -18
- package/lib/hooks/context-watch.mjs +137 -0
- package/lib/hooks/context-window-recovery.mjs +4 -20
- package/lib/hooks/dep-audit.mjs +16 -0
- package/lib/hooks/doc-coupling-check.mjs +80 -0
- package/lib/hooks/edit-accumulator.mjs +3 -0
- package/lib/hooks/edit-error-recovery.mjs +3 -0
- package/lib/hooks/edit-guard.mjs +45 -4
- package/lib/hooks/env-check.mjs +3 -0
- package/lib/hooks/guard-bash.mjs +58 -1
- package/lib/hooks/mcp-audit.mjs +18 -20
- package/lib/hooks/mcp-health-check.mjs +36 -0
- package/lib/hooks/model-fallback.mjs +42 -56
- package/lib/hooks/policy-engine.mjs +209 -0
- package/lib/hooks/post-merge-docs-check.mjs +63 -0
- package/lib/hooks/pre-compact.mjs +4 -24
- package/lib/hooks/pre-push-gate.mjs +200 -37
- package/lib/hooks/proactive-activation.mjs +284 -0
- package/lib/hooks/read-tracker.mjs +27 -4
- package/lib/hooks/readme-age-check.mjs +77 -0
- package/lib/hooks/registry-sync.mjs +12 -5
- package/lib/hooks/scan-secrets.mjs +50 -7
- package/lib/hooks/session-optimize.mjs +311 -0
- package/lib/hooks/session-start.mjs +287 -28
- package/lib/hooks/stop-notify.mjs +236 -96
- package/lib/hooks/stop-typecheck.mjs +13 -1
- package/lib/hooks/test-watch.mjs +68 -0
- package/lib/host-capabilities.mjs +31 -10
- package/lib/init-docs.mjs +731 -291
- package/lib/init-unified.mjs +1116 -0
- package/lib/init-update.mjs +168 -0
- package/lib/init.mjs +107 -0
- package/lib/install/first-invocation.mjs +119 -0
- package/lib/install/stage-project.mjs +69 -0
- package/lib/intake/classify.mjs +278 -0
- package/lib/intake/feedback.mjs +273 -0
- package/lib/intake/filesystem-queue.mjs +158 -0
- package/lib/intake/intake-config.mjs +132 -0
- package/lib/intake/postgres-queue.mjs +198 -0
- package/lib/intake/prepare.mjs +139 -0
- package/lib/intake/queue.mjs +83 -0
- package/lib/intake/session-prelude.mjs +50 -0
- package/lib/integrations/intake-integrations.mjs +740 -0
- package/lib/intent-classifier.mjs +253 -0
- package/lib/knowledge/layout.mjs +72 -0
- package/lib/knowledge/rag.mjs +331 -0
- package/lib/knowledge/search.mjs +315 -0
- package/lib/knowledge/trends.mjs +261 -0
- package/lib/logger.mjs +85 -0
- package/lib/mcp/broker.mjs +124 -0
- package/lib/mcp/server.mjs +554 -854
- package/lib/mcp/tools/document.mjs +132 -0
- package/lib/mcp/tools/memory.mjs +209 -0
- package/lib/mcp/tools/project.mjs +349 -0
- package/lib/mcp/tools/skills.mjs +409 -0
- package/lib/mcp/tools/storage.mjs +60 -0
- package/lib/mcp/tools/telemetry.mjs +315 -0
- package/lib/mcp/tools/workflow.mjs +112 -0
- package/lib/mcp-catalog.json +54 -3
- package/lib/mcp-manager.mjs +96 -48
- package/lib/mcp-platform-config.mjs +22 -22
- package/lib/memory-stats.mjs +121 -0
- package/lib/mode-commands.mjs +124 -0
- package/lib/model-free-selector.mjs +184 -0
- package/lib/model-pricing.mjs +152 -0
- package/lib/model-registry.mjs +226 -0
- package/lib/model-router.mjs +362 -386
- package/lib/observation-store.mjs +391 -0
- package/lib/ollama-manager.mjs +428 -0
- package/lib/opencode-config.mjs +13 -3
- package/lib/opencode-runtime-plugin.mjs +70 -38
- package/lib/opencode-telemetry.mjs +64 -6
- package/lib/orchestration-policy.mjs +509 -6
- package/lib/overrides/resolver.mjs +207 -0
- package/lib/parity.mjs +147 -0
- package/lib/paths.mjs +33 -0
- package/lib/performance/generate.mjs +212 -0
- package/lib/plugin-registry.mjs +268 -0
- package/lib/policy/engine.mjs +130 -0
- package/lib/policy/unified-gates.mjs +96 -0
- package/lib/project-detection.mjs +129 -0
- package/lib/project-init-shared.mjs +272 -0
- package/lib/project-profile.mjs +447 -0
- package/lib/prompt-composer.js +434 -0
- package/lib/prompt-metadata.mjs +1 -1
- package/lib/provider-capabilities-anthropic.js +44 -0
- package/lib/provider-capabilities-deepseek.js +37 -0
- package/lib/provider-capabilities-generic.js +26 -0
- package/lib/provider-capabilities-google.js +47 -0
- package/lib/provider-capabilities-openai.js +45 -0
- package/lib/provider-capabilities.js +142 -0
- package/lib/providers/atlassian-confluence/index.mjs +103 -0
- package/lib/providers/atlassian-jira/index.mjs +100 -0
- package/lib/providers/auth-manager.mjs +126 -0
- package/lib/providers/circuit-breaker.mjs +124 -0
- package/lib/providers/contract.mjs +93 -0
- package/lib/providers/github/index.mjs +126 -0
- package/lib/providers/registry.mjs +184 -0
- package/lib/providers/salesforce/index.mjs +100 -0
- package/lib/providers/slack/index.mjs +80 -0
- package/lib/reflect.mjs +137 -0
- package/lib/research-lint.mjs +164 -0
- package/lib/resources/budget.mjs +259 -0
- package/lib/role-preload.mjs +21 -6
- package/lib/roles/approval-surface.mjs +54 -0
- package/lib/roles/cli.mjs +118 -0
- package/lib/roles/event-bus.mjs +79 -0
- package/lib/roles/fence.mjs +84 -0
- package/lib/roles/gateway.mjs +260 -0
- package/lib/roles/hook-emit.mjs +37 -0
- package/lib/roles/manifest.mjs +48 -0
- package/lib/roles/router.mjs +27 -0
- package/lib/runtime-pressure.mjs +360 -0
- package/lib/schema-artifact.mjs +134 -0
- package/lib/schema-infer.mjs +551 -0
- package/lib/server/auth.mjs +168 -0
- package/lib/server/chat.mjs +336 -0
- package/lib/server/cors.mjs +77 -0
- package/lib/server/csrf.mjs +91 -0
- package/lib/server/index.mjs +1927 -78
- package/lib/server/insights.mjs +765 -0
- package/lib/server/rate-limit.mjs +91 -0
- package/lib/server/static/assets/index-ab25c707.js +70 -0
- package/lib/server/static/assets/index-f0c80a2b.css +1 -0
- package/lib/server/static/index.html +12 -817
- package/lib/server/telemetry-login.mjs +108 -0
- package/lib/server/webhook.mjs +510 -0
- package/lib/service-manager.mjs +522 -58
- package/lib/services/pattern-promotion-service.mjs +167 -0
- package/lib/services/telemetry-backend.mjs +178 -0
- package/lib/session-store.mjs +374 -0
- package/lib/setup-prompts.mjs +96 -0
- package/lib/setup.mjs +525 -38
- package/lib/skills-apply.mjs +280 -0
- package/lib/skills-scope.mjs +118 -0
- package/lib/status.mjs +261 -70
- package/lib/storage/admin.mjs +355 -0
- package/lib/storage/backend.mjs +2 -1
- package/lib/storage/backup.mjs +347 -0
- package/lib/storage/embeddings-engine.mjs +133 -0
- package/lib/storage/embeddings-legacy.mjs +85 -0
- package/lib/storage/embeddings-local.mjs +108 -0
- package/lib/storage/embeddings-ollama.mjs +78 -0
- package/lib/storage/embeddings-openai.mjs +85 -0
- package/lib/storage/embeddings.mjs +92 -33
- package/lib/storage/file-lock.mjs +130 -0
- package/lib/storage/fusion.mjs +95 -0
- package/lib/storage/hybrid-query.mjs +34 -27
- package/lib/storage/migrations.mjs +187 -0
- package/lib/storage/postgres-backup.mjs +124 -0
- package/lib/storage/sql-store.mjs +5 -15
- package/lib/storage/state-source.mjs +12 -13
- package/lib/storage/store-version.mjs +115 -0
- package/lib/storage/sync.mjs +144 -35
- package/lib/storage/unified-storage.mjs +550 -0
- package/lib/storage/vector-client.mjs +286 -0
- package/lib/storage/vector-store.mjs +71 -30
- package/lib/task-graph/generate.mjs +135 -0
- package/lib/task-graph/schema.mjs +81 -0
- package/lib/task-graph/store.mjs +71 -0
- package/lib/telemetry/backends/local.mjs +62 -0
- package/lib/telemetry/backends/{langfuse.mjs → remote.mjs} +27 -14
- package/lib/telemetry/backfill.mjs +180 -0
- package/lib/telemetry/eval-datasets.mjs +203 -0
- package/lib/telemetry/{langfuse-ingest.mjs → ingest.mjs} +26 -20
- package/lib/telemetry/intent-verifications.mjs +86 -0
- package/lib/telemetry/llm-judge.mjs +350 -0
- package/lib/telemetry/model-pricing-catalog.mjs +557 -0
- package/lib/telemetry/setup.mjs +151 -0
- package/lib/telemetry/skill-calls.mjs +78 -0
- package/lib/telemetry/team-rollup.mjs +4 -4
- package/lib/token-engine.js +117 -0
- package/lib/token-estimator-anthropic.js +15 -0
- package/lib/token-estimator-deepseek.js +13 -0
- package/lib/token-estimator-default.js +13 -0
- package/lib/token-estimator-google.js +13 -0
- package/lib/token-estimator-openai.js +13 -0
- package/lib/toolkit-env.mjs +1 -1
- package/lib/tty-prompts.mjs +211 -0
- package/lib/uninstall/uninstall.mjs +423 -0
- package/lib/update.mjs +115 -0
- package/lib/upgrade.mjs +141 -0
- package/lib/validator.mjs +51 -2
- package/lib/validators/skills.mjs +142 -0
- package/lib/wireframe.mjs +422 -0
- package/lib/worker/entrypoint.mjs +241 -0
- package/lib/worker/evidence.mjs +107 -0
- package/lib/worker/run.mjs +154 -0
- package/lib/worker/trace.mjs +182 -0
- package/lib/workflow-state.mjs +14 -18
- package/package.json +21 -8
- package/personas/construct.md +53 -51
- package/platforms/claude/CLAUDE.md +1 -1
- package/platforms/claude/settings.template.json +115 -68
- package/platforms/opencode/config.template.json +3 -7
- package/rules/common/agents.md +11 -38
- package/rules/common/beads-hygiene.md +75 -0
- package/rules/common/code-review.md +11 -100
- package/rules/common/coding-style.md +5 -3
- package/rules/common/comments.md +30 -111
- package/rules/common/commit-approval.md +53 -0
- package/rules/common/cx-agent-routing.md +1 -0
- package/rules/common/development-workflow.md +23 -41
- package/rules/common/doc-ownership.md +54 -0
- package/rules/common/efficiency.md +57 -0
- package/rules/common/framing.md +76 -0
- package/rules/common/git-workflow.md +2 -4
- package/rules/common/patterns.md +3 -7
- package/rules/common/performance.md +15 -31
- package/rules/common/release-gates.md +69 -0
- package/rules/common/research.md +107 -0
- package/rules/common/security.md +6 -6
- package/rules/common/skill-composition.md +67 -0
- package/rules/common/testing.md +15 -27
- package/rules/golang/hooks.md +0 -4
- package/rules/policy/bootstrap.yaml +11 -0
- package/rules/policy/drive.yaml +8 -0
- package/rules/policy/task.yaml +9 -0
- package/rules/policy/workflow.yaml +9 -0
- package/rules/python/hooks.md +0 -4
- package/rules/swift/hooks.md +0 -4
- package/rules/typescript/hooks.md +0 -4
- package/rules/web/hooks.md +0 -2
- package/{sync-agents.mjs → scripts/sync-agents.mjs} +306 -61
- package/skills/ai/prompt-optimizer.md +7 -7
- package/skills/compliance/ai-disclosure.md +58 -0
- package/skills/compliance/data-privacy.md +46 -0
- package/skills/compliance/license-audit.md +40 -0
- package/skills/compliance/regulatory-review.md +61 -0
- package/skills/docs/document-ingest-workflow.md +52 -0
- package/skills/docs/evidence-ingest-workflow.md +9 -0
- package/skills/docs/init-docs.md +51 -18
- package/skills/docs/product-intelligence-workflow.md +12 -0
- package/skills/docs/product-signal-workflow.md +4 -0
- package/skills/docs/research-workflow.md +23 -8
- package/skills/docs/runbook-workflow.md +1 -1
- package/skills/operating/orchestration-reference.md +151 -0
- package/skills/roles/architect.md +5 -0
- package/skills/roles/engineer.md +32 -0
- package/skills/roles/operator.md +12 -0
- package/skills/roles/reviewer.md +23 -0
- package/skills/routing.md +1 -1
- package/templates/devcontainer/Dockerfile.devcontainer +38 -0
- package/templates/devcontainer/devcontainer.json +31 -0
- package/templates/distribution/bootstrap.ps1 +142 -0
- package/templates/distribution/bootstrap.sh +196 -0
- package/templates/distribution/run.mjs +187 -0
- package/templates/docs/adr.md +44 -8
- package/templates/docs/changelog-entry.md +43 -0
- package/templates/docs/construct_guide.md +149 -0
- package/templates/docs/evidence-brief.md +2 -2
- package/templates/docs/meta-prd.md +140 -19
- package/templates/docs/onboarding.md +57 -0
- package/templates/docs/prd.md +159 -15
- package/templates/docs/research-brief.md +4 -4
- package/templates/homebrew/construct.rb +67 -0
- package/langfuse/docker-compose.yml +0 -82
- package/lib/eval-harness.mjs +0 -59
- package/lib/hooks/bootstrap-guard.mjs +0 -90
- package/lib/hooks/console-warn.mjs +0 -43
- package/lib/hooks/continuation-enforcer.mjs +0 -72
- package/lib/hooks/drive-guard.mjs +0 -89
- package/lib/hooks/mcp-task-scope.mjs +0 -47
- package/lib/hooks/task-completed-guard.mjs +0 -43
- package/lib/hooks/teammate-idle-guard.mjs +0 -54
- package/lib/hooks/workflow-guard.mjs +0 -62
- package/lib/prompt-composer.mjs +0 -196
- package/lib/review.mjs +0 -429
- package/lib/server/static/app.js +0 -841
- package/lib/telemetry/langfuse-model-sync.mjs +0 -270
- package/rules/common/hooks.md +0 -35
- package/rules/zh/README.md +0 -113
- package/rules/zh/agents.md +0 -55
- package/rules/zh/code-review.md +0 -129
- package/rules/zh/coding-style.md +0 -53
- package/rules/zh/development-workflow.md +0 -49
- package/rules/zh/git-workflow.md +0 -29
- package/rules/zh/hooks.md +0 -35
- package/rules/zh/patterns.md +0 -36
- package/rules/zh/performance.md +0 -60
- package/rules/zh/security.md +0 -34
- package/rules/zh/testing.md +0 -34
package/agents/registry.json
CHANGED
|
@@ -3,26 +3,34 @@
|
|
|
3
3
|
"system": "construct",
|
|
4
4
|
"prefix": "cx",
|
|
5
5
|
"models": {
|
|
6
|
-
"reasoning": {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
6
|
+
"reasoning": { "primary": null, "fallback": [] },
|
|
7
|
+
"standard": { "primary": null, "fallback": [] },
|
|
8
|
+
"fast": { "primary": null, "fallback": [] },
|
|
9
|
+
"embeddings": {
|
|
10
|
+
"local": {
|
|
11
|
+
"provider": "onnx",
|
|
12
|
+
"model": "Xenova/all-MiniLM-L6-v2",
|
|
13
|
+
"dimensions": 384,
|
|
14
|
+
"description": "Free, offline, runs locally via ONNX Runtime"
|
|
15
|
+
},
|
|
16
|
+
"openai": {
|
|
17
|
+
"provider": "openai",
|
|
18
|
+
"model": "text-embedding-3-small",
|
|
19
|
+
"dimensions": 1536,
|
|
20
|
+
"description": "Best quality, requires OPENAI_API_KEY"
|
|
21
|
+
},
|
|
22
|
+
"ollama": {
|
|
23
|
+
"provider": "ollama",
|
|
24
|
+
"model": "nomic-embed-text",
|
|
25
|
+
"dimensions": 768,
|
|
26
|
+
"description": "Local Ollama server, requires OLLAMA_BASE_URL"
|
|
27
|
+
},
|
|
28
|
+
"hashing": {
|
|
29
|
+
"provider": "local",
|
|
30
|
+
"model": "hashing-bow-v1",
|
|
31
|
+
"dimensions": 256,
|
|
32
|
+
"description": "Legacy deterministic hash — fast but no semantic understanding"
|
|
33
|
+
}
|
|
26
34
|
}
|
|
27
35
|
},
|
|
28
36
|
"providers": {
|
|
@@ -54,11 +62,8 @@
|
|
|
54
62
|
},
|
|
55
63
|
"mcpServers": {
|
|
56
64
|
"memory": {
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"-y",
|
|
60
|
-
"@modelcontextprotocol/server-memory"
|
|
61
|
-
],
|
|
65
|
+
"type": "url",
|
|
66
|
+
"url": "http://127.0.0.1:8765/",
|
|
62
67
|
"description": "Persistent cross-session knowledge graph for agent memory and handoffs"
|
|
63
68
|
},
|
|
64
69
|
"context7": {
|
|
@@ -98,48 +103,29 @@
|
|
|
98
103
|
"args": [
|
|
99
104
|
"__CX_TOOLKIT_DIR__/lib/mcp/server.mjs"
|
|
100
105
|
],
|
|
101
|
-
"description": "Agent health, diff summary, file scanner, project context,
|
|
106
|
+
"description": "Agent health, diff summary, file scanner, project context, telemetry trace write"
|
|
102
107
|
}
|
|
103
108
|
},
|
|
104
109
|
"sharedGuidance": [
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"Use this execution contract for every non-trivial task: classify intent, create or update .cx/workflow.json, route to the owning persona or specialist, execute with the relevant skill, dispatch independent work in parallel when supported, persist decisions/handoffs to memory or .cx, validate through the validation phase before release.",
|
|
110
|
-
"Classify intent before routing: research (read-only investigation) | implementation (code changes) | investigation (debugging, tracing) | evaluation (quality gates, review) | fix (bug repair). Tag every workflow task with its intent class. Let intent drive agent selection and depth of work.",
|
|
111
|
-
"Tag each task with a work category: visual (UI/CSS/design), deep (complex reasoning, architecture), quick (single-file, trivial), writing (docs, prose), analysis (data, metrics, review). Category drives model tier: visual→standard, deep→reasoning, quick→fast, writing→fast, analysis→standard.",
|
|
112
|
-
"Workflow state is load-bearing. Task packets include an optional mcpScope field: list MCP server names relevant to this task (e.g. [\"github\", \"context7\"]). The mcp-task-scope hook warns when out-of-scope MCPs are called. The mcp-audit hook records all MCP usage per task key to .cx/mcp-audit.json. Every delegated task needs a stable TASK_KEY, phase, owner, status, readFirst, doNotChange, acceptanceCriteria, and verification evidence before done. Run `construct workflow align` at phase transitions.",
|
|
113
|
-
"Use native skills, plugins, slash commands, MCP tools, and project instructions when they exist and match the task. Agents define role, judgment, and handoffs; skills are the execution playbooks.",
|
|
114
|
-
"If a native skill or project instruction conflicts with this registry, obey the higher-priority system, tool, and repository instructions. Surface the conflict, the decision made, and any follow-up needed.",
|
|
115
|
-
"Do not duplicate skill internals inside agent prompts. Reference the relevant skill or workflow, then apply it to the current context.",
|
|
116
|
-
"For every non-trivial handoff: TASK (one atomic goal) | EXPECTED OUTCOME (deliverable + acceptance signal) | REQUIRED TOOLS | MUST DO (exhaustive) | MUST NOT DO (anticipate drift) | CONTEXT (files, decisions, constraints) | READ FIRST | DO NOT CHANGE. Missing required fields mean the handoff is incomplete.",
|
|
117
|
-
"Worker task contract: specialists receive bounded task packets and return exactly one terminal state: DONE with files changed and verification evidence, BLOCKED with the concrete blocker and attempted steps, or NEEDS_MAIN_INPUT with { taskKey, worker, blocker, question, safeDefault, context }. Specialists must not conduct open-ended user interviews from child sessions. Output schemas are defined in lib/schemas/: decision.json (cx-architect), implementation.json (cx-engineer), review-report.json (cx-reviewer/cx-security), test-report.json (cx-qa). Return structured output matching the relevant schema when feasible.",
|
|
118
|
-
"Primary persona contract: personas own user interaction. When a worker returns NEEDS_MAIN_INPUT, ask the question in the main session, update .cx/workflow.json to blocked_needs_user, then resume or re-dispatch the worker after the user answers.",
|
|
119
|
-
"Loop guard: if you observe the same command or tool call being attempted more than 3 times with identical arguments and no state change, stop immediately and surface a clear summary of what you tried, what blocked progress, and what decision is needed from the user.",
|
|
110
|
+
"Session Resumption: start every new chat by grounding in project_context, memory_search, AGENTS.md, plan.md, and the relevant repo docs. Apply results silently — never ask the user to repeat information that memory already holds.",
|
|
111
|
+
"Memory recording: after completing meaningful work, call memory_add_observations to record what you learned. Record: patterns discovered (category: pattern), decisions made with rationale (category: decision), anti-patterns found (category: anti-pattern), and open questions (category: insight). Summaries must be ≥30 characters and specific — avoid placeholders like 'task done' or 'completed'.",
|
|
112
|
+
"Project Identification: identify the current project from the workspace (basename of CWD) or memory MCP. Focus your expertise on the target repository you are currently in.",
|
|
113
|
+
"Loop guard: if you observe the same command or tool call being attempted more than 3 times with identical arguments and no state change, stop immediately and surface what blocked progress and what decision is needed.",
|
|
120
114
|
"Circuit breaker: after 3 failed attempts at the same approach, stop all edits. Revert to last known working state. Document what was tried and escalate to the user with full context.",
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"Probe before bulk read: before Reading any file with limit > 200 or no limit, verify size first via Glob, wc -l, or a limit=50 probe. A 220-line read on a 74-line file is the tell that this rule was skipped.",
|
|
129
|
-
"Dispatch-first test: if work touches 3+ files across 2+ modules, or introduces a new contract/dependency/SDK, the persona must not produce the implementation plan itself — dispatch cx-architect. In-persona implementation planning for complex work is the primary failure mode this rule exists to prevent.",
|
|
130
|
-
"Tool naming contract: always use the exact tool names exposed by the current host — do NOT emit names from other vendors catalogs. OpenCode/Codex/Copilot hosts expose edit, write, read, bash, grep, glob; never str_replace_editor, str_replace, str_replace_based_edit_tool, create_file, apply_patch, functions.edit, python, or shell. Claude-trained models map: edits → edit, full-file writes → write, shell → bash. OpenAI-trained models map: python/code interpreter → unavailable, shell → bash, apply_patch → edit/write. OpenRouter relays the host schema verbatim regardless of underlying model (Anthropic, OpenAI, Google, Mistral, Meta, DeepSeek, Qwen) — trust the tool list shown, not training priors. The bash tool requires both command and description string fields: {\"command\":\"...\",\"description\":\"why this command is needed\"}. Never emit XML-style (<function=...>) or partial tool calls. Prefer rg over find/grep. If a needed tool is not listed, use the closest available primitive — do not invent a name.",
|
|
131
|
-
"Executive Communication: treat the user as the Customer and Executive. This means proactive reporting on status, immediate escalation of strategic blockers, and seeking input on all user-facing changes (UX/UI). When in doubt, clarify intent rather than assuming a product decision.",
|
|
132
|
-
"Observability: you MUST call cx_trace at the start of every new task. Use your agent name as the name field and include the user goal in input. Do not include full production prompt text in trace metadata; Construct attaches promptName, promptFile, promptHash, and promptVersion automatically. This records the span in Langfuse for system-wide observability. If the tool is unavailable or returns an error, log the failure and continue — telemetry must never block execution.",
|
|
133
|
-
"Quality scoring: after producing a significant deliverable, you MUST call cx_score with name='quality', a value from 0.0 to 1.0, and a brief comment explaining the score. Use the trace_id returned by cx_trace. The validation phase runs this after every verification pass to close the learning loop.",
|
|
134
|
-
"Horizontal routing: when your output directly feeds another specialist (e.g. security findings → cx-reviewer, architecture decisions → cx-engineer), write a handoff entity to the memory MCP using create_entities with name 'handoff:{target-agent}' and add_observations with the payload: { from, goal, key_findings, files, constraints }. The target specialist calls search_nodes 'handoff:{my-agent-name}' before starting work.",
|
|
135
|
-
"Model failover: if you encounter a rate limit error (HTTP 429), provider quota message, 'specified API usage limits', model unavailability, or timeout, the PostToolUseFailure hook may run 'construct models --apply'. Surface whether fallback ran, then retry only after the model assignment has changed."
|
|
115
|
+
"Worker task contract: specialists return exactly one terminal state: DONE (with files changed and verification evidence), BLOCKED (with concrete blocker and attempted steps), or NEEDS_MAIN_INPUT ({ taskKey, worker, blocker, question, safeDefault, context }). Never conduct user interviews from child sessions.",
|
|
116
|
+
"Tool naming contract: use the exact tool names exposed by the current host — never emit names from other vendors catalogs. Claude-trained models map edits→edit, writes→write, shell→bash. OpenAI-trained models map python/code interpreter→unavailable, shell→bash, apply_patch→edit/write. The bash tool requires both command and description string fields: {\"command\":\"...\",\"description\":\"why this command is needed\"}. Prefer rg over find/grep. If a needed tool is not listed, use the closest available primitive.",
|
|
117
|
+
"Observability: you MUST call cx_trace at the start of every new task using your agent name as the name field and the user goal as input. Construct attaches promptName/promptFile/promptHash automatically. If the tool is unavailable, log the failure and continue — telemetry must never block execution.",
|
|
118
|
+
"Quality scoring: after producing a significant deliverable, you MUST call cx_score with name=quality, value 0.0-1.0, and a brief comment explaining the score. Use the trace_id returned by cx_trace.",
|
|
119
|
+
"Model failover: if you hit a rate-limit error (HTTP 429), provider quota message, or model unavailability, the PostToolUseFailure hook may run construct models --apply. Surface whether fallback ran, then retry only after the model assignment changed.",
|
|
120
|
+
"Detailed orchestration reference (execution contract, handoff template, intent/category classification, parallel dispatch, horizontal routing, efficiency discipline) is in skills/operating/orchestration-reference.md — call get_skill(\"operating/orchestration-reference\") when you need it.",
|
|
121
|
+
"Agent contracts: explicit producer→consumer service contracts live in agents/contracts.json (loaded via lib/agent-contracts.mjs). Call the agent_contract MCP tool at handoff time to look up input.mustContain, preconditions, output shape, and postconditions for the current pair. routeRequest returns contractChain alongside specialists."
|
|
136
122
|
],
|
|
137
123
|
"platformGuidance": {
|
|
138
124
|
"opencode": [
|
|
139
125
|
"You are running inside OpenCode. Construct is the primary entry point. Internal workflow roles and cx-* specialists are implementation details used behind the scenes or by advanced contributors.",
|
|
140
126
|
"Construct routes to internal specialists automatically based on intent. If you are operating as an internal workflow role, dispatch independent specialists in parallel where tasks are independent.",
|
|
141
127
|
"OpenCode subagents are not primary chat surfaces. If you are running as a subagent and you need user input, do not prompt the user from the child session. Return a concise NEEDS_MAIN_INPUT packet containing the blocker, exact question, safe default, and current task/session context so the primary persona can ask the user and resume.",
|
|
142
|
-
"If a subagent returns NEEDS_MAIN_INPUT, the primary persona must ask the user in the main session, update
|
|
128
|
+
"If a subagent returns NEEDS_MAIN_INPUT, the primary persona must ask the user in the main session, update the tracker or plan with the blocker, then resume or re-dispatch the specialist with the answer.",
|
|
143
129
|
"Provider fallback is not guaranteed inside OpenCode provider/session failures. If you see a provider quota or usage-limit error, run or ask the main session to run `construct models --apply` after confirming an OpenRouter key is available, then retry after sync changes model assignments.",
|
|
144
130
|
"Use OpenCode's native plugin, agent, command, and hook surfaces as the orchestration substrate. Visible handoff blocks are fallback/debug artifacts, not the workflow itself.",
|
|
145
131
|
"Loop guard: if you observe the same command or tool call being attempted more than 3 times with identical arguments and no state change, stop immediately and surface what blocked progress.",
|
|
@@ -152,7 +138,7 @@
|
|
|
152
138
|
],
|
|
153
139
|
"codex": [
|
|
154
140
|
"Construct is the primary Codex profile for normal use. Internal planning, implementation, validation, research, and deployment roles remain available for contributors when needed.",
|
|
155
|
-
"Codex profile switching is not automatic. The Construct contract still applies: route internally, use available skills/MCP/tools, maintain
|
|
141
|
+
"Codex profile switching is not automatic. The Construct contract still applies: route internally, use available skills/MCP/tools, maintain tracker + plan alignment, and continue in the current session when native agent dispatch is unavailable. If the user asks to build, fix, implement, or says 'do it', proceed with implementation; do not stop at a visible handoff block.",
|
|
156
142
|
"Keep orchestration internals internal. Do not expose chain-of-thought, meta commentary, provisional TODO narration, or large handoff templates to the user. Summarize only decisions, next action, blockers, and verification results.",
|
|
157
143
|
"Follow the relevant session skill before inventing process."
|
|
158
144
|
],
|
|
@@ -173,7 +159,7 @@
|
|
|
173
159
|
"bash": "allow",
|
|
174
160
|
"webfetch": "allow"
|
|
175
161
|
},
|
|
176
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,WebSearch,WebFetch,
|
|
162
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,WebSearch,WebFetch,summarize_diff,scan_file,project_context,memory_create_entities,list_skills,get_skill,search_skills,list_teams,get_team,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
177
163
|
"promptFile": "personas/construct.md",
|
|
178
164
|
"injectAgentRoster": true
|
|
179
165
|
}
|
|
@@ -186,9 +172,14 @@
|
|
|
186
172
|
"modelTier": "standard",
|
|
187
173
|
"reasoningEffort": "medium",
|
|
188
174
|
"codexSandbox": "read-only",
|
|
189
|
-
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,list_teams,get_team,
|
|
175
|
+
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,list_teams,get_team,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
190
176
|
"injectAgentRoster": true,
|
|
191
177
|
"promptFile": "agents/prompts/cx-orchestrator.md",
|
|
178
|
+
"embedOrientation": {
|
|
179
|
+
"focusAreas": ["routing accuracy", "workload balance", "handoff completeness", "specialist utilization"],
|
|
180
|
+
"riskSignals": ["misrouted tasks", "overloaded specialists", "dropped handoffs", "stale queued work"],
|
|
181
|
+
"artifactBias": ["notes", "memos"]
|
|
182
|
+
},
|
|
192
183
|
"skills": [
|
|
193
184
|
"ai/orchestration-workflow"
|
|
194
185
|
],
|
|
@@ -208,8 +199,13 @@
|
|
|
208
199
|
"modelTier": "standard",
|
|
209
200
|
"reasoningEffort": "medium",
|
|
210
201
|
"codexSandbox": "read-only",
|
|
211
|
-
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,
|
|
202
|
+
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
|
|
212
203
|
"promptFile": "agents/prompts/cx-rd-lead.md",
|
|
204
|
+
"embedOrientation": {
|
|
205
|
+
"focusAreas": ["hypothesis validation", "experiment progress", "assumption tracking", "learning velocity"],
|
|
206
|
+
"riskSignals": ["untested assumptions", "premature hardening", "stalled experiments", "unfalsifiable claims"],
|
|
207
|
+
"artifactBias": ["adrs", "notes"]
|
|
208
|
+
},
|
|
213
209
|
"skills": [
|
|
214
210
|
"ai/agent-dev",
|
|
215
211
|
"ai/prompt-and-eval"
|
|
@@ -229,8 +225,13 @@
|
|
|
229
225
|
"modelTier": "reasoning",
|
|
230
226
|
"reasoningEffort": "high",
|
|
231
227
|
"codexSandbox": "read-only",
|
|
232
|
-
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,
|
|
228
|
+
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
|
|
233
229
|
"promptFile": "agents/prompts/cx-product-manager.md",
|
|
230
|
+
"embedOrientation": {
|
|
231
|
+
"focusAreas": ["requirements coverage", "delivery risk", "user-facing gaps", "scope clarity"],
|
|
232
|
+
"riskSignals": ["untraced requirements", "scope creep", "blocked dependencies", "missing acceptance criteria"],
|
|
233
|
+
"artifactBias": ["prds", "intake", "memos"]
|
|
234
|
+
},
|
|
234
235
|
"skills": [
|
|
235
236
|
"docs/product-intelligence-workflow",
|
|
236
237
|
"docs/evidence-ingest-workflow",
|
|
@@ -259,8 +260,13 @@
|
|
|
259
260
|
"modelTier": "standard",
|
|
260
261
|
"reasoningEffort": "medium",
|
|
261
262
|
"codexSandbox": "read-only",
|
|
262
|
-
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,
|
|
263
|
+
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
263
264
|
"promptFile": "agents/prompts/cx-ux-researcher.md",
|
|
265
|
+
"embedOrientation": {
|
|
266
|
+
"focusAreas": ["user evidence freshness", "friction points", "persona coverage", "research gaps"],
|
|
267
|
+
"riskSignals": ["stale user data", "untested assumptions about users", "missing friction analysis", "internal-only validation"],
|
|
268
|
+
"artifactBias": ["notes", "memos"]
|
|
269
|
+
},
|
|
264
270
|
"skills": [
|
|
265
271
|
"docs/research-workflow"
|
|
266
272
|
],
|
|
@@ -287,8 +293,13 @@
|
|
|
287
293
|
"modelTier": "standard",
|
|
288
294
|
"reasoningEffort": "medium",
|
|
289
295
|
"codexSandbox": "workspace-write",
|
|
290
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,get_template,list_templates,
|
|
296
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
|
|
291
297
|
"promptFile": "agents/prompts/cx-operations.md",
|
|
298
|
+
"embedOrientation": {
|
|
299
|
+
"focusAreas": ["dependency sequencing", "ownership clarity", "blocker resolution", "delivery cadence"],
|
|
300
|
+
"riskSignals": ["hidden dependencies", "unowned tasks", "blocked work aging", "parallel plans with serial reality"],
|
|
301
|
+
"artifactBias": ["notes", "memos"]
|
|
302
|
+
},
|
|
292
303
|
"skills": [
|
|
293
304
|
"docs/init-project"
|
|
294
305
|
],
|
|
@@ -307,8 +318,13 @@
|
|
|
307
318
|
"modelTier": "standard",
|
|
308
319
|
"reasoningEffort": "medium",
|
|
309
320
|
"codexSandbox": "read-only",
|
|
310
|
-
"claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,
|
|
321
|
+
"claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
311
322
|
"promptFile": "agents/prompts/cx-researcher.md",
|
|
323
|
+
"embedOrientation": {
|
|
324
|
+
"focusAreas": ["source freshness", "citation coverage", "dependency versions", "conflicting evidence"],
|
|
325
|
+
"riskSignals": ["undated sources", "unverified claims", "outdated dependencies", "single-source conclusions"],
|
|
326
|
+
"artifactBias": ["notes", "memos"]
|
|
327
|
+
},
|
|
312
328
|
"skills": [
|
|
313
329
|
"docs/research-workflow",
|
|
314
330
|
"devops/dependency-management"
|
|
@@ -328,8 +344,13 @@
|
|
|
328
344
|
"modelTier": "standard",
|
|
329
345
|
"reasoningEffort": "medium",
|
|
330
346
|
"codexSandbox": "read-only",
|
|
331
|
-
"claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,
|
|
347
|
+
"claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
332
348
|
"promptFile": "agents/prompts/cx-business-strategist.md",
|
|
349
|
+
"embedOrientation": {
|
|
350
|
+
"focusAreas": ["market positioning", "competitive shifts", "timing relevance", "strategic coherence"],
|
|
351
|
+
"riskSignals": ["tactics dressed as strategy", "ignored competitive moves", "undifferentiated positioning", "missing market timing"],
|
|
352
|
+
"artifactBias": ["memos", "notes"]
|
|
353
|
+
},
|
|
333
354
|
"skills": [
|
|
334
355
|
"architecture/api-design"
|
|
335
356
|
],
|
|
@@ -353,8 +374,13 @@
|
|
|
353
374
|
"modelTier": "standard",
|
|
354
375
|
"reasoningEffort": "medium",
|
|
355
376
|
"codexSandbox": "read-only",
|
|
356
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
377
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
357
378
|
"promptFile": "agents/prompts/cx-data-analyst.md",
|
|
379
|
+
"embedOrientation": {
|
|
380
|
+
"focusAreas": ["metric validity", "measurement coverage", "behavioral indicators", "distribution analysis"],
|
|
381
|
+
"riskSignals": ["vanity metrics", "averages hiding variance", "post-hoc success definitions", "ungamed metrics becoming gamed"],
|
|
382
|
+
"artifactBias": ["notes", "memos"]
|
|
383
|
+
},
|
|
358
384
|
"skills": [
|
|
359
385
|
"devops/observability",
|
|
360
386
|
"devops/database"
|
|
@@ -381,8 +407,13 @@
|
|
|
381
407
|
"modelTier": "standard",
|
|
382
408
|
"reasoningEffort": "medium",
|
|
383
409
|
"codexSandbox": "read-only",
|
|
384
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
410
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
385
411
|
"promptFile": "agents/prompts/cx-evaluator.md",
|
|
412
|
+
"embedOrientation": {
|
|
413
|
+
"focusAreas": ["eval coverage", "regression detection", "baseline drift", "failure case representation"],
|
|
414
|
+
"riskSignals": ["eval sets matching known outputs", "cherry-picked baselines", "missing failure cases", "promotion on too few traces"],
|
|
415
|
+
"artifactBias": ["notes", "adrs"]
|
|
416
|
+
},
|
|
386
417
|
"skills": [
|
|
387
418
|
"ai/prompt-and-eval",
|
|
388
419
|
"quality-gates/verify-quality"
|
|
@@ -407,8 +438,13 @@
|
|
|
407
438
|
"modelTier": "reasoning",
|
|
408
439
|
"reasoningEffort": "high",
|
|
409
440
|
"codexSandbox": "workspace-write",
|
|
410
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,
|
|
441
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
411
442
|
"promptFile": "agents/prompts/cx-ai-engineer.md",
|
|
443
|
+
"embedOrientation": {
|
|
444
|
+
"focusAreas": ["model reliability", "failure mode coverage", "prompt stability", "eval health"],
|
|
445
|
+
"riskSignals": ["untested failure paths", "hallucination risk dismissed", "prompt drift", "demo-only validation"],
|
|
446
|
+
"artifactBias": ["adrs", "notes"]
|
|
447
|
+
},
|
|
412
448
|
"skills": [
|
|
413
449
|
"ai/agent-dev",
|
|
414
450
|
"ai/rag-system",
|
|
@@ -439,8 +475,13 @@
|
|
|
439
475
|
"modelTier": "reasoning",
|
|
440
476
|
"reasoningEffort": "high",
|
|
441
477
|
"codexSandbox": "read-only",
|
|
442
|
-
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,
|
|
478
|
+
"claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
|
|
443
479
|
"promptFile": "agents/prompts/cx-architect.md",
|
|
480
|
+
"embedOrientation": {
|
|
481
|
+
"focusAreas": ["coupling and cohesion", "unvalidated assumptions", "interface contracts", "tech debt accumulation"],
|
|
482
|
+
"riskSignals": ["missing ADRs", "implicit contracts", "data model drift", "undocumented invariants"],
|
|
483
|
+
"artifactBias": ["adrs", "notes"]
|
|
484
|
+
},
|
|
444
485
|
"skills": [
|
|
445
486
|
"architecture/api-design",
|
|
446
487
|
"architecture/caching",
|
|
@@ -467,8 +508,13 @@
|
|
|
467
508
|
"description": "Reads before writing — understanding the existing pattern matters more than having the better one.",
|
|
468
509
|
"modelTier": "standard",
|
|
469
510
|
"reasoningEffort": "medium",
|
|
511
|
+
"embedOrientation": {
|
|
512
|
+
"focusAreas": ["implementation progress", "test coverage gaps", "build health", "PR velocity"],
|
|
513
|
+
"riskSignals": ["failing CI", "stale PRs", "untested paths", "pattern drift"],
|
|
514
|
+
"artifactBias": ["notes", "adrs"]
|
|
515
|
+
},
|
|
470
516
|
"codexSandbox": "workspace-write",
|
|
471
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,WebSearch,WebFetch,list_skills,get_skill,search_skills,
|
|
517
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
472
518
|
"promptFile": "agents/prompts/cx-engineer.md",
|
|
473
519
|
"skills": [
|
|
474
520
|
"development/typescript",
|
|
@@ -503,8 +549,13 @@
|
|
|
503
549
|
"modelTier": "reasoning",
|
|
504
550
|
"reasoningEffort": "high",
|
|
505
551
|
"codexSandbox": "read-only",
|
|
506
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
552
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
507
553
|
"promptFile": "agents/prompts/cx-devil-advocate.md",
|
|
554
|
+
"embedOrientation": {
|
|
555
|
+
"focusAreas": ["plan survivability", "hidden failure modes", "scope stability", "assumption stress-testing"],
|
|
556
|
+
"riskSignals": ["plans too elegant to survive contact", "unlikely failures unaddressed", "scope drift", "unanimous agreement without challenge"],
|
|
557
|
+
"artifactBias": ["notes", "memos"]
|
|
558
|
+
},
|
|
508
559
|
"skills": [
|
|
509
560
|
"quality-gates/review-work"
|
|
510
561
|
],
|
|
@@ -523,8 +574,13 @@
|
|
|
523
574
|
"modelTier": "reasoning",
|
|
524
575
|
"reasoningEffort": "high",
|
|
525
576
|
"codexSandbox": "read-only",
|
|
526
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
577
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
527
578
|
"promptFile": "agents/prompts/cx-reviewer.md",
|
|
579
|
+
"embedOrientation": {
|
|
580
|
+
"focusAreas": ["edge case coverage", "error handling completeness", "test fidelity", "code quality trends"],
|
|
581
|
+
"riskSignals": ["happy-path-only reviews", "excessive mocking", "missing error handlers", "review without reproduction"],
|
|
582
|
+
"artifactBias": ["notes"]
|
|
583
|
+
},
|
|
528
584
|
"skills": [
|
|
529
585
|
"quality-gates/verify-quality",
|
|
530
586
|
"quality-gates/review-work",
|
|
@@ -545,8 +601,13 @@
|
|
|
545
601
|
"modelTier": "reasoning",
|
|
546
602
|
"reasoningEffort": "high",
|
|
547
603
|
"codexSandbox": "read-only",
|
|
548
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
604
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
549
605
|
"promptFile": "agents/prompts/cx-security.md",
|
|
606
|
+
"embedOrientation": {
|
|
607
|
+
"focusAreas": ["attack surface changes", "dependency vulnerabilities", "auth boundary integrity", "secret exposure"],
|
|
608
|
+
"riskSignals": ["new unauthed endpoints", "unaudited dependencies", "implicit trust boundaries", "hardcoded credentials"],
|
|
609
|
+
"artifactBias": ["adrs", "notes"]
|
|
610
|
+
},
|
|
550
611
|
"skills": [
|
|
551
612
|
"security/red-team",
|
|
552
613
|
"security/blue-team",
|
|
@@ -572,8 +633,13 @@
|
|
|
572
633
|
"modelTier": "standard",
|
|
573
634
|
"reasoningEffort": "medium",
|
|
574
635
|
"codexSandbox": "workspace-write",
|
|
575
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,
|
|
636
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
576
637
|
"promptFile": "agents/prompts/cx-qa.md",
|
|
638
|
+
"embedOrientation": {
|
|
639
|
+
"focusAreas": ["test effectiveness", "behavioral coverage", "regression risk", "acceptance criteria traceability"],
|
|
640
|
+
"riskSignals": ["tests that never fail", "coverage without behavioral assertions", "untested acceptance criteria", "flaky tests ignored"],
|
|
641
|
+
"artifactBias": ["notes"]
|
|
642
|
+
},
|
|
577
643
|
"skills": [
|
|
578
644
|
"devops/testing",
|
|
579
645
|
"quality-gates/verify-change",
|
|
@@ -594,8 +660,13 @@
|
|
|
594
660
|
"modelTier": "reasoning",
|
|
595
661
|
"reasoningEffort": "high",
|
|
596
662
|
"codexSandbox": "workspace-write",
|
|
597
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,WebSearch,WebFetch,list_skills,get_skill,search_skills,
|
|
663
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
598
664
|
"promptFile": "agents/prompts/cx-debugger.md",
|
|
665
|
+
"embedOrientation": {
|
|
666
|
+
"focusAreas": ["root cause identification", "reproduction reliability", "fix verification", "regression prevention"],
|
|
667
|
+
"riskSignals": ["symptom fixes without root cause", "non-reproducible bugs closed", "missing regression tests", "repeated failure patterns"],
|
|
668
|
+
"artifactBias": ["notes"]
|
|
669
|
+
},
|
|
599
670
|
"skills": [
|
|
600
671
|
"quality-gates/verify-change",
|
|
601
672
|
"devops/observability",
|
|
@@ -616,8 +687,13 @@
|
|
|
616
687
|
"modelTier": "standard",
|
|
617
688
|
"reasoningEffort": "medium",
|
|
618
689
|
"codexSandbox": "workspace-write",
|
|
619
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,list_skills,get_skill,search_skills,get_template,list_templates,
|
|
690
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
|
|
620
691
|
"promptFile": "agents/prompts/cx-sre.md",
|
|
692
|
+
"embedOrientation": {
|
|
693
|
+
"focusAreas": ["reliability posture", "observability coverage", "incident readiness", "SLO adherence"],
|
|
694
|
+
"riskSignals": ["missing alerts", "untested rollbacks", "observability gaps", "SLOs defined post-incident"],
|
|
695
|
+
"artifactBias": ["adrs", "notes"]
|
|
696
|
+
},
|
|
621
697
|
"skills": [
|
|
622
698
|
"devops/observability",
|
|
623
699
|
"devops/ci-cd",
|
|
@@ -647,8 +723,13 @@
|
|
|
647
723
|
"modelTier": "standard",
|
|
648
724
|
"reasoningEffort": "medium",
|
|
649
725
|
"codexSandbox": "workspace-write",
|
|
650
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,
|
|
726
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
651
727
|
"promptFile": "agents/prompts/cx-platform-engineer.md",
|
|
728
|
+
"embedOrientation": {
|
|
729
|
+
"focusAreas": ["developer friction", "pipeline health", "dependency freshness", "build reliability"],
|
|
730
|
+
"riskSignals": ["slow CI", "stale dependencies", "manual steps in pipelines", "config only author understands"],
|
|
731
|
+
"artifactBias": ["adrs", "notes"]
|
|
732
|
+
},
|
|
652
733
|
"skills": [
|
|
653
734
|
"devops/ci-cd",
|
|
654
735
|
"devops/monorepo",
|
|
@@ -679,9 +760,19 @@
|
|
|
679
760
|
"modelTier": "standard",
|
|
680
761
|
"reasoningEffort": "medium",
|
|
681
762
|
"codexSandbox": "read-only",
|
|
682
|
-
"claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,
|
|
763
|
+
"claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
683
764
|
"promptFile": "agents/prompts/cx-legal-compliance.md",
|
|
684
|
-
"
|
|
765
|
+
"embedOrientation": {
|
|
766
|
+
"focusAreas": ["license compliance", "data privacy posture", "AI disclosure obligations", "regulatory changes"],
|
|
767
|
+
"riskSignals": ["unreviewed dependency licenses", "undisclosed AI processing", "missing data basis documentation", "new jurisdiction exposure"],
|
|
768
|
+
"artifactBias": ["adrs", "memos"]
|
|
769
|
+
},
|
|
770
|
+
"skills": [
|
|
771
|
+
"compliance/license-audit",
|
|
772
|
+
"compliance/data-privacy",
|
|
773
|
+
"compliance/ai-disclosure",
|
|
774
|
+
"compliance/regulatory-review"
|
|
775
|
+
],
|
|
685
776
|
"perspective": {
|
|
686
777
|
"bias": "'Just logging' as a data review bypass, first-layer-only license checks, AI features without disclosure strategy",
|
|
687
778
|
"tension": "cx-product-manager",
|
|
@@ -697,8 +788,13 @@
|
|
|
697
788
|
"modelTier": "standard",
|
|
698
789
|
"reasoningEffort": "medium",
|
|
699
790
|
"codexSandbox": "workspace-write",
|
|
700
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,
|
|
791
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
701
792
|
"promptFile": "agents/prompts/cx-release-manager.md",
|
|
793
|
+
"embedOrientation": {
|
|
794
|
+
"focusAreas": ["release readiness", "rollback viability", "changelog completeness", "migration safety"],
|
|
795
|
+
"riskSignals": ["untested rollback", "irreversible migrations", "missing changelog entries", "canary without rollback trigger"],
|
|
796
|
+
"artifactBias": ["notes", "adrs"]
|
|
797
|
+
},
|
|
702
798
|
"skills": [
|
|
703
799
|
"devops/git-workflow",
|
|
704
800
|
"quality-gates/verify-change"
|
|
@@ -718,8 +814,13 @@
|
|
|
718
814
|
"modelTier": "standard",
|
|
719
815
|
"reasoningEffort": "medium",
|
|
720
816
|
"codexSandbox": "workspace-write",
|
|
721
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,
|
|
817
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
722
818
|
"promptFile": "agents/prompts/cx-docs-keeper.md",
|
|
819
|
+
"embedOrientation": {
|
|
820
|
+
"focusAreas": ["documentation freshness", "decision traceability", "context completeness", "onboarding clarity"],
|
|
821
|
+
"riskSignals": ["stale docs", "undocumented decisions", "missing context updates", "tribal knowledge growing"],
|
|
822
|
+
"artifactBias": ["adrs", "notes", "memos"]
|
|
823
|
+
},
|
|
723
824
|
"skills": [
|
|
724
825
|
"docs/adr-workflow",
|
|
725
826
|
"docs/runbook-workflow",
|
|
@@ -740,8 +841,13 @@
|
|
|
740
841
|
"modelTier": "standard",
|
|
741
842
|
"reasoningEffort": "medium",
|
|
742
843
|
"codexSandbox": "workspace-write",
|
|
743
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,
|
|
844
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
744
845
|
"promptFile": "agents/prompts/cx-designer.md",
|
|
846
|
+
"embedOrientation": {
|
|
847
|
+
"focusAreas": ["interaction completeness", "state coverage", "design consistency", "accessibility compliance"],
|
|
848
|
+
"riskSignals": ["missing error states", "no empty states", "inconsistent patterns", "untested responsive breakpoints"],
|
|
849
|
+
"artifactBias": ["notes", "memos"]
|
|
850
|
+
},
|
|
745
851
|
"skills": [
|
|
746
852
|
"frontend-design/ui-aesthetics",
|
|
747
853
|
"frontend-design/ux-principles",
|
|
@@ -765,8 +871,13 @@
|
|
|
765
871
|
"modelTier": "standard",
|
|
766
872
|
"reasoningEffort": "medium",
|
|
767
873
|
"codexSandbox": "read-only",
|
|
768
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
874
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
769
875
|
"promptFile": "agents/prompts/cx-accessibility.md",
|
|
876
|
+
"embedOrientation": {
|
|
877
|
+
"focusAreas": ["keyboard navigability", "screen reader compatibility", "contrast compliance", "ARIA correctness"],
|
|
878
|
+
"riskSignals": ["ARIA added without testing", "keyboard traps", "contrast failures", "missing focus indicators"],
|
|
879
|
+
"artifactBias": ["notes"]
|
|
880
|
+
},
|
|
770
881
|
"skills": [
|
|
771
882
|
"frontend-design/accessibility"
|
|
772
883
|
],
|
|
@@ -792,8 +903,13 @@
|
|
|
792
903
|
"modelTier": "fast",
|
|
793
904
|
"reasoningEffort": "medium",
|
|
794
905
|
"codexSandbox": "read-only",
|
|
795
|
-
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,
|
|
906
|
+
"claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
|
|
796
907
|
"promptFile": "agents/prompts/cx-explorer.md",
|
|
908
|
+
"embedOrientation": {
|
|
909
|
+
"focusAreas": ["codebase understanding", "pattern discovery", "dependency mapping", "drift detection"],
|
|
910
|
+
"riskSignals": ["assumptions without verification", "incomplete investigation", "outdated mental models", "undiscovered code paths"],
|
|
911
|
+
"artifactBias": ["notes"]
|
|
912
|
+
},
|
|
797
913
|
"skills": [
|
|
798
914
|
"exploration/repo-map"
|
|
799
915
|
],
|
|
@@ -811,8 +927,13 @@
|
|
|
811
927
|
"description": "Tracks fleet-level performance patterns — stable median scores can hide high-variance agents that are failing silently.",
|
|
812
928
|
"modelTier": "reasoning",
|
|
813
929
|
"reasoningEffort": "high",
|
|
814
|
-
"claudeTools": "Read,Write,Bash,list_skills,get_skill,search_skills,
|
|
930
|
+
"claudeTools": "Read,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
815
931
|
"promptFile": "agents/prompts/cx-trace-reviewer.md",
|
|
932
|
+
"embedOrientation": {
|
|
933
|
+
"focusAreas": ["agent performance trends", "variance detection", "degradation signals", "fleet health"],
|
|
934
|
+
"riskSignals": ["stable median hiding variance", "silent degradation", "promotion on few traces", "unreviewed failure clusters"],
|
|
935
|
+
"artifactBias": ["notes", "memos"]
|
|
936
|
+
},
|
|
816
937
|
"skills": [
|
|
817
938
|
"ai/prompt-optimizer"
|
|
818
939
|
],
|
|
@@ -830,13 +951,17 @@
|
|
|
830
951
|
"description": "Builds pipelines that can be trusted — trust requires idempotency, observability, and a contract.",
|
|
831
952
|
"modelTier": "standard",
|
|
832
953
|
"codexSandbox": "read-only",
|
|
833
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,
|
|
954
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
834
955
|
"promptFile": "agents/prompts/cx-data-engineer.md",
|
|
956
|
+
"embedOrientation": {
|
|
957
|
+
"focusAreas": ["pipeline reliability", "data quality", "schema contract adherence", "idempotency"],
|
|
958
|
+
"riskSignals": ["non-idempotent pipelines", "missing data quality tests", "schema drift", "uncontracted outputs"],
|
|
959
|
+
"artifactBias": ["adrs", "notes"]
|
|
960
|
+
},
|
|
835
961
|
"skills": [
|
|
836
962
|
"devops/data-engineering",
|
|
837
963
|
"devops/database",
|
|
838
|
-
"devops/observability"
|
|
839
|
-
"ai/ml-ops"
|
|
964
|
+
"devops/observability"
|
|
840
965
|
],
|
|
841
966
|
"perspective": {
|
|
842
967
|
"bias": "Non-idempotent pipelines, unwritten data contracts, quality gates added after the first corruption incident",
|
|
@@ -852,8 +977,13 @@
|
|
|
852
977
|
"description": "Knows that bad automation is worse than no automation — flaky tests teach teams to ignore red builds.",
|
|
853
978
|
"modelTier": "standard",
|
|
854
979
|
"codexSandbox": "read-only",
|
|
855
|
-
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,
|
|
980
|
+
"claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
|
|
856
981
|
"promptFile": "agents/prompts/cx-test-automation.md",
|
|
982
|
+
"embedOrientation": {
|
|
983
|
+
"focusAreas": ["test determinism", "flakiness trends", "automation ROI", "behavioral coverage"],
|
|
984
|
+
"riskSignals": ["flaky tests ignored", "arbitrary sleeps", "tests that never caught a bug", "intermittent failures dismissed"],
|
|
985
|
+
"artifactBias": ["notes"]
|
|
986
|
+
},
|
|
857
987
|
"skills": [
|
|
858
988
|
"devops/testing",
|
|
859
989
|
"quality-gates/verify-change",
|
|
@@ -868,6 +998,151 @@
|
|
|
868
998
|
"canEdit": true
|
|
869
999
|
}
|
|
870
1000
|
],
|
|
1001
|
+
"departments": {
|
|
1002
|
+
"rnd": {
|
|
1003
|
+
"name": "R&D (Research & Development)",
|
|
1004
|
+
"description": "The entire product-building organization. You are the founder/CEO; R&D executes your vision.",
|
|
1005
|
+
"subDepartments": {
|
|
1006
|
+
"product": {
|
|
1007
|
+
"name": "Product Department",
|
|
1008
|
+
"mission": "Define what to build and why. Own the user outcome.",
|
|
1009
|
+
"roles": ["product-manager", "designer", "ux-researcher", "accessibility"]
|
|
1010
|
+
},
|
|
1011
|
+
"engineering": {
|
|
1012
|
+
"name": "Engineering Department",
|
|
1013
|
+
"mission": "Build it right. Own the implementation.",
|
|
1014
|
+
"roles": ["architect", "engineer", "debugger", "qa", "sre", "platform-engineer"]
|
|
1015
|
+
},
|
|
1016
|
+
"intelligence": {
|
|
1017
|
+
"name": "Intelligence Department",
|
|
1018
|
+
"mission": "Discover what's possible and what's broken. Own the learning loop.",
|
|
1019
|
+
"roles": ["researcher", "data-analyst", "ai-engineer", "evaluator", "trace-reviewer"]
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
"governance": {
|
|
1024
|
+
"name": "Governance",
|
|
1025
|
+
"description": "Oversight, risk management, and compliance — independent from R&D.",
|
|
1026
|
+
"subDepartments": {
|
|
1027
|
+
"security": {
|
|
1028
|
+
"name": "Security",
|
|
1029
|
+
"mission": "Keep it safe. Own the threat surface.",
|
|
1030
|
+
"roles": ["security", "legal-compliance"]
|
|
1031
|
+
},
|
|
1032
|
+
"quality": {
|
|
1033
|
+
"name": "Quality Assurance",
|
|
1034
|
+
"mission": "Challenge assumptions. Own the critical eye.",
|
|
1035
|
+
"roles": ["reviewer", "devil-advocate"]
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
},
|
|
1039
|
+
"operations": {
|
|
1040
|
+
"name": "Operations",
|
|
1041
|
+
"description": "Shipping, documentation, and release management.",
|
|
1042
|
+
"subDepartments": {
|
|
1043
|
+
"release": {
|
|
1044
|
+
"name": "Release Management",
|
|
1045
|
+
"mission": "Ship smoothly. Own the release process.",
|
|
1046
|
+
"roles": ["release-manager"]
|
|
1047
|
+
},
|
|
1048
|
+
"documentation": {
|
|
1049
|
+
"name": "Documentation",
|
|
1050
|
+
"mission": "Maintain institutional knowledge. Own the record.",
|
|
1051
|
+
"roles": ["docs-keeper"]
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
},
|
|
1055
|
+
"strategy": {
|
|
1056
|
+
"name": "Strategy",
|
|
1057
|
+
"description": "Business alignment and execution planning.",
|
|
1058
|
+
"subDepartments": {
|
|
1059
|
+
"business": {
|
|
1060
|
+
"name": "Business Strategy",
|
|
1061
|
+
"mission": "Ensure market fit. Own the business model.",
|
|
1062
|
+
"roles": ["business-strategist"]
|
|
1063
|
+
},
|
|
1064
|
+
"planning": {
|
|
1065
|
+
"name": "Operations Planning",
|
|
1066
|
+
"mission": "Map dependencies. Own the execution plan.",
|
|
1067
|
+
"roles": ["operations"]
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
},
|
|
1072
|
+
"consolidatedRoles": {
|
|
1073
|
+
"description": "Simplified 12-role structure for smaller projects. Each consolidated role absorbs multiple specialists.",
|
|
1074
|
+
"roles": [
|
|
1075
|
+
{
|
|
1076
|
+
"id": "product-lead",
|
|
1077
|
+
"absorbs": ["product-manager", "designer", "ux-researcher"],
|
|
1078
|
+
"whenToUse": "Small teams, early-stage products"
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
"id": "tech-lead",
|
|
1082
|
+
"absorbs": ["architect", "engineer", "debugger"],
|
|
1083
|
+
"whenToUse": "Startups, MVP development"
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
"id": "quality-lead",
|
|
1087
|
+
"absorbs": ["qa", "accessibility", "reviewer"],
|
|
1088
|
+
"whenToUse": "Projects with compliance needs"
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"id": "reliability-lead",
|
|
1092
|
+
"absorbs": ["sre", "platform-engineer", "release-manager"],
|
|
1093
|
+
"whenToUse": "Production systems"
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
"id": "research-lead",
|
|
1097
|
+
"absorbs": ["researcher", "data-analyst", "evaluator"],
|
|
1098
|
+
"whenToUse": "Data-driven products"
|
|
1099
|
+
},
|
|
1100
|
+
{
|
|
1101
|
+
"id": "ai-lead",
|
|
1102
|
+
"absorbs": ["ai-engineer", "trace-reviewer"],
|
|
1103
|
+
"whenToUse": "AI/ML products"
|
|
1104
|
+
},
|
|
1105
|
+
{
|
|
1106
|
+
"id": "security-lead",
|
|
1107
|
+
"absorbs": ["security", "legal-compliance"],
|
|
1108
|
+
"whenToUse": "Regulated industries"
|
|
1109
|
+
},
|
|
1110
|
+
{
|
|
1111
|
+
"id": "strategy-lead",
|
|
1112
|
+
"absorbs": ["business-strategist", "operations"],
|
|
1113
|
+
"whenToUse": "Growth-stage companies"
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
"id": "docs-lead",
|
|
1117
|
+
"absorbs": ["docs-keeper"],
|
|
1118
|
+
"whenToUse": "Documentation-heavy projects"
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
"id": "orchestrator",
|
|
1122
|
+
"absorbs": ["orchestrator", "rd-lead"],
|
|
1123
|
+
"whenToUse": "Complex multi-team initiatives"
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
"id": "critic",
|
|
1127
|
+
"absorbs": ["devil-advocate", "evaluator"],
|
|
1128
|
+
"whenToUse": "High-stakes decisions"
|
|
1129
|
+
},
|
|
1130
|
+
{
|
|
1131
|
+
"id": "generalist",
|
|
1132
|
+
"absorbs": ["engineer"],
|
|
1133
|
+
"whenToUse": "General purpose, default role"
|
|
1134
|
+
}
|
|
1135
|
+
]
|
|
1136
|
+
},
|
|
1137
|
+
"roleSelection": {
|
|
1138
|
+
"description": "User-configurable primary/secondary role preferences. Set via dashboard or CLI.",
|
|
1139
|
+
"defaults": {
|
|
1140
|
+
"primary": null,
|
|
1141
|
+
"secondary": null
|
|
1142
|
+
},
|
|
1143
|
+
"perConversationOverride": true,
|
|
1144
|
+
"cliSyntax": "@construct --primary=cx-pm --secondary=cx-arch"
|
|
1145
|
+
},
|
|
871
1146
|
"modelGuidance": {
|
|
872
1147
|
"claude": "If you are a Claude model: leverage extended thinking for deep analysis. Use artifact outputs for structured deliverables. You have strong tool-use — prefer parallel tool calls when tasks are independent.",
|
|
873
1148
|
"deepseek": "If you are a DeepSeek model: use explicit chain-of-thought reasoning. Break complex logic into numbered steps before implementing. You excel at code generation — write complete implementations rather than pseudocode.",
|