@geraldmaron/construct 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/README.md +39 -34
  2. package/bin/construct +1403 -96
  3. package/commands/build/feature.md +1 -1
  4. package/commands/build/fix.md +1 -1
  5. package/commands/design/access.md +1 -1
  6. package/commands/design/flow.md +1 -1
  7. package/commands/design/ui.md +1 -1
  8. package/commands/measure/experiment.md +1 -1
  9. package/commands/measure/metrics.md +1 -1
  10. package/commands/measure/results.md +1 -1
  11. package/commands/plan/api.md +1 -1
  12. package/commands/plan/challenge.md +1 -1
  13. package/commands/plan/decide.md +1 -1
  14. package/commands/plan/feature.md +1 -1
  15. package/commands/plan/requirements.md +1 -1
  16. package/commands/remember/context.md +1 -1
  17. package/commands/remember/handoff.md +1 -1
  18. package/commands/remember/runbook.md +1 -1
  19. package/commands/review/code.md +1 -1
  20. package/commands/review/quality.md +1 -1
  21. package/commands/review/security.md +1 -1
  22. package/commands/ship/ready.md +1 -1
  23. package/commands/ship/release.md +1 -1
  24. package/commands/ship/status.md +1 -1
  25. package/commands/understand/docs.md +1 -1
  26. package/commands/understand/this.md +1 -1
  27. package/commands/understand/why.md +1 -1
  28. package/commands/work/clean.md +1 -1
  29. package/commands/work/drive.md +1 -1
  30. package/commands/work/optimize-prompts.md +2 -2
  31. package/commands/work/parallel-review.md +1 -1
  32. package/db/schema/007_tags.sql +30 -0
  33. package/db/schema/008_skill_usage.sql +24 -0
  34. package/db/schema/009_scheduler.sql +14 -0
  35. package/examples/internal/roles/architect/bad/clever-plan-without-contracts.md +1 -1
  36. package/examples/internal/roles/architect/golden/explicit-tradeoff-before-plan.md +1 -1
  37. package/examples/internal/roles/engineer/bad/speculative-abstraction.md +1 -1
  38. package/examples/internal/roles/engineer/golden/read-before-write.md +1 -1
  39. package/examples/internal/roles/qa/bad/coverage-theater.md +1 -1
  40. package/examples/internal/roles/qa/golden/regression-gate.md +1 -1
  41. package/examples/seed-observations/decisions.md +1 -1
  42. package/lib/audit-skills.mjs +3 -3
  43. package/lib/auto-docs.mjs +8 -8
  44. package/lib/boundary.mjs +126 -0
  45. package/lib/cache-strategy-google.js +26 -31
  46. package/lib/cli-commands.mjs +276 -122
  47. package/lib/comment-lint.mjs +139 -1
  48. package/lib/completions.mjs +1 -1
  49. package/lib/config/schema.mjs +15 -1
  50. package/lib/contracts/validate.mjs +371 -0
  51. package/lib/daemons/contract.mjs +210 -0
  52. package/lib/distill.mjs +22 -4
  53. package/lib/doc-stamp.mjs +48 -0
  54. package/lib/docs-verify.mjs +59 -6
  55. package/lib/doctor/cli.mjs +16 -1
  56. package/lib/doctor/index.mjs +3 -1
  57. package/lib/doctor/watchers/consistency.mjs +360 -0
  58. package/lib/doctor/watchers/mcp-protocol.mjs +232 -0
  59. package/lib/document-extract.mjs +420 -17
  60. package/lib/document-ingest.mjs +2 -0
  61. package/lib/embed/cli.mjs +124 -3
  62. package/lib/embed/daemon.mjs +43 -4
  63. package/lib/embed/docs-lifecycle.mjs +1 -1
  64. package/lib/embed/inbox.mjs +50 -3
  65. package/lib/embed/role-framing.mjs +3 -3
  66. package/lib/embed/scheduler.mjs +33 -5
  67. package/lib/env-config.mjs +9 -3
  68. package/lib/evaluator-optimizer.mjs +2 -3
  69. package/lib/extractors/calendar.mjs +173 -0
  70. package/lib/extractors/shared/drop-info.mjs +22 -0
  71. package/lib/extractors/transcript.mjs +0 -0
  72. package/lib/gates-audit.mjs +8 -2
  73. package/lib/git-hooks/prepare-commit-msg +1 -1
  74. package/lib/headhunt.mjs +2 -2
  75. package/lib/hooks/agent-tracker.mjs +6 -11
  76. package/lib/hooks/comment-lint.mjs +16 -0
  77. package/lib/hooks/guard-bash.mjs +35 -14
  78. package/lib/hooks/mcp-audit.mjs +14 -1
  79. package/lib/hooks/pre-compact.mjs +92 -5
  80. package/lib/hooks/pre-push-gate.mjs +41 -8
  81. package/lib/hooks/proactive-activation.mjs +0 -14
  82. package/lib/hooks/registry-sync.mjs +2 -2
  83. package/lib/hooks/rule-verifier.mjs +217 -0
  84. package/lib/hooks/session-optimize.mjs +2 -1
  85. package/lib/hooks/stop-notify.mjs +7 -6
  86. package/lib/host-capabilities.mjs +10 -1
  87. package/lib/hygiene/scan.mjs +141 -0
  88. package/lib/init-unified.mjs +73 -65
  89. package/lib/install/stage-project.mjs +4 -4
  90. package/lib/intake/classify.mjs +309 -58
  91. package/lib/intake/daemon.mjs +121 -0
  92. package/lib/intake/filesystem-queue.mjs +31 -6
  93. package/lib/intake/intake-config.mjs +2 -1
  94. package/lib/intake/postgres-queue.mjs +45 -3
  95. package/lib/intake/prepare.mjs +3 -1
  96. package/lib/intake/quarantine.mjs +205 -0
  97. package/lib/intake/session-prelude.mjs +7 -1
  98. package/lib/intake/traceability.mjs +90 -0
  99. package/lib/knowledge/postgres-search.mjs +132 -0
  100. package/lib/knowledge/research-store.mjs +2 -0
  101. package/lib/knowledge/search.mjs +14 -4
  102. package/lib/maintenance/cleanup.mjs +315 -0
  103. package/lib/mcp/memory-bridge.mjs +276 -0
  104. package/lib/mcp/server.mjs +11 -3
  105. package/lib/mcp/tools/skills.mjs +32 -11
  106. package/lib/mcp/tools/workflow.mjs +25 -0
  107. package/lib/mcp-catalog.json +12 -8
  108. package/lib/mcp-platform-config.mjs +16 -8
  109. package/lib/migrations/index.mjs +106 -0
  110. package/lib/migrations/v1-baseline.mjs +33 -0
  111. package/lib/model-registry.mjs +1 -1
  112. package/lib/observation-store.mjs +9 -4
  113. package/lib/opencode-runtime-plugin.mjs +1 -1
  114. package/lib/orchestration-policy.mjs +4 -4
  115. package/lib/outcomes/record.mjs +2 -0
  116. package/lib/overrides/resolver.mjs +3 -3
  117. package/lib/parity.mjs +4 -4
  118. package/lib/policy/engine.mjs +2 -2
  119. package/lib/profiles/lifecycle.mjs +1 -1
  120. package/lib/profiles/rebrand.mjs +46 -0
  121. package/lib/project-init-shared.mjs +12 -0
  122. package/lib/prompt-metadata.mjs +4 -4
  123. package/lib/provider-capabilities.js +20 -7
  124. package/lib/providers/auth-manager.mjs +58 -17
  125. package/lib/providers/circuit-breaker.mjs +14 -0
  126. package/lib/providers/contract.mjs +67 -3
  127. package/lib/providers/creds.mjs +219 -0
  128. package/lib/providers/scaffold.mjs +107 -0
  129. package/lib/reflect.mjs +49 -12
  130. package/lib/role-preload.mjs +5 -0
  131. package/lib/roles/catalog.mjs +1 -1
  132. package/lib/roles/manifest.mjs +2 -2
  133. package/lib/scheduler/index.mjs +112 -0
  134. package/lib/scheduler/solo.mjs +183 -0
  135. package/lib/server/index.mjs +29 -29
  136. package/lib/server/insights.mjs +14 -12
  137. package/lib/server/langfuse-login.mjs +58 -0
  138. package/lib/server/static/assets/index-ab25c707.js +1 -1
  139. package/lib/session-store.mjs +6 -4
  140. package/lib/setup.mjs +14 -3
  141. package/lib/{agent-contracts-enforce.mjs → specialist-contracts-enforce.mjs} +4 -4
  142. package/lib/{agent-contracts.mjs → specialist-contracts.mjs} +9 -8
  143. package/lib/{agents → specialists}/postconditions.mjs +3 -3
  144. package/lib/{agents → specialists}/schema.mjs +6 -6
  145. package/lib/status.mjs +13 -11
  146. package/lib/storage/backup.mjs +2 -2
  147. package/lib/tags/lifecycle.mjs +278 -0
  148. package/lib/tags/vocabulary.mjs +140 -0
  149. package/lib/telemetry/client.mjs +5 -1
  150. package/lib/telemetry/otel-tracer.mjs +184 -0
  151. package/lib/telemetry/skill-calls.mjs +73 -12
  152. package/lib/uninstall/uninstall.mjs +1 -1
  153. package/lib/update.mjs +1 -1
  154. package/lib/validator.mjs +57 -56
  155. package/lib/version.mjs +51 -0
  156. package/lib/worker/trace.mjs +5 -1
  157. package/lib/workflows/instantiate.mjs +320 -0
  158. package/package.json +16 -3
  159. package/personas/construct.md +5 -3
  160. package/platforms/claude/CLAUDE.md +1 -1
  161. package/rules/common/development-workflow.md +2 -1
  162. package/rules/common/no-fabrication.md +69 -0
  163. package/rules/common/review-before-change.md +58 -0
  164. package/scripts/{sync-agents.mjs → sync-specialists.mjs} +171 -68
  165. package/skills/ai/prompt-optimizer.md +3 -3
  166. package/skills/exploration/dependency-graph-reading.md +98 -0
  167. package/skills/exploration/tracer-bullet-method.md +71 -0
  168. package/skills/exploration/unknown-codebase-onboarding.md +91 -0
  169. package/skills/operating/change-management.md +91 -0
  170. package/skills/operating/incident-response.md +75 -0
  171. package/skills/operating/oncall-rotation.md +95 -0
  172. package/skills/operating/orchestration-reference.md +2 -2
  173. package/skills/strategy/competitive-landscape.md +75 -0
  174. package/skills/strategy/market-research-methods.md +87 -0
  175. package/skills/strategy/narrative-arc.md +77 -0
  176. package/skills/strategy/pricing-positioning.md +94 -0
  177. package/specialists/contracts.json +1002 -0
  178. package/specialists/contracts.schema.json +83 -0
  179. package/specialists/policy-inventory.json +160 -0
  180. package/{agents → specialists}/prompts/cx-accessibility.md +3 -1
  181. package/{agents → specialists}/prompts/cx-ai-engineer.md +3 -1
  182. package/{agents → specialists}/prompts/cx-architect.md +3 -1
  183. package/{agents → specialists}/prompts/cx-business-strategist.md +3 -1
  184. package/{agents → specialists}/prompts/cx-data-analyst.md +3 -1
  185. package/{agents → specialists}/prompts/cx-data-engineer.md +3 -1
  186. package/{agents → specialists}/prompts/cx-debugger.md +3 -1
  187. package/{agents → specialists}/prompts/cx-designer.md +3 -1
  188. package/{agents → specialists}/prompts/cx-devil-advocate.md +3 -1
  189. package/{agents → specialists}/prompts/cx-docs-keeper.md +4 -2
  190. package/{agents → specialists}/prompts/cx-engineer.md +4 -2
  191. package/{agents → specialists}/prompts/cx-evaluator.md +3 -1
  192. package/{agents → specialists}/prompts/cx-explorer.md +3 -1
  193. package/{agents → specialists}/prompts/cx-legal-compliance.md +3 -1
  194. package/{agents → specialists}/prompts/cx-operations.md +3 -1
  195. package/{agents → specialists}/prompts/cx-orchestrator.md +4 -2
  196. package/{agents → specialists}/prompts/cx-platform-engineer.md +3 -1
  197. package/{agents → specialists}/prompts/cx-product-manager.md +3 -1
  198. package/{agents → specialists}/prompts/cx-qa.md +3 -1
  199. package/{agents → specialists}/prompts/cx-rd-lead.md +3 -1
  200. package/{agents → specialists}/prompts/cx-release-manager.md +3 -1
  201. package/{agents → specialists}/prompts/cx-researcher.md +3 -1
  202. package/{agents → specialists}/prompts/cx-reviewer.md +4 -2
  203. package/{agents → specialists}/prompts/cx-security.md +3 -1
  204. package/{agents → specialists}/prompts/cx-sre.md +4 -2
  205. package/{agents → specialists}/prompts/cx-test-automation.md +3 -1
  206. package/{agents → specialists}/prompts/cx-trace-reviewer.md +5 -3
  207. package/{agents → specialists}/prompts/cx-ux-researcher.md +3 -1
  208. package/{agents → specialists}/registry.json +651 -418
  209. package/{agents → specialists}/role-manifests.json +8 -8
  210. package/templates/docs/construct_guide.md +6 -6
  211. package/templates/docs/skill-artifact.md +1 -1
  212. package/templates/provider-scaffold/health.test.mjs +30 -0
  213. package/templates/provider-scaffold/index.mjs +48 -0
  214. package/templates/workflows/cross-team-handoff.yml +85 -0
  215. package/templates/workflows/engineering-onboarding.yml +77 -0
  216. package/templates/workflows/new-feature.yml +53 -0
  217. package/agents/contracts.json +0 -387
  218. /package/{agents → specialists}/teams.json +0 -0
@@ -2,169 +2,23 @@
2
2
  "version": 1,
3
3
  "system": "construct",
4
4
  "prefix": "cx",
5
- "models": {
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
- }
34
- }
35
- },
36
- "providers": {
37
- "openrouter": {
38
- "npm": "@ai-sdk/openai-compatible",
39
- "name": "OpenRouter",
40
- "options": {
41
- "baseURL": "https://openrouter.ai/api/v1",
42
- "headers": {
43
- "HTTP-Referer": "__OPENROUTER_REFERER__",
44
- "X-Title": "__OPENROUTER_TITLE__"
45
- }
46
- },
47
- "models": {
48
- "google/gemma-3-27b-it:free": {
49
- "name": "Google: Gemma 3 27B (free)"
50
- },
51
- "meta-llama/llama-3.3-70b-instruct:free": {
52
- "name": "Meta: Llama 3.3 70B Instruct (free)"
53
- },
54
- "mistralai/mistral-7b-instruct:free": {
55
- "name": "Mistral: Mistral 7B Instruct (free)"
56
- },
57
- "qwen/qwen3-coder:free": {
58
- "name": "Qwen: Qwen3 Coder 480B A35B (free)"
59
- }
60
- }
61
- }
62
- },
63
- "mcpServers": {
64
- "memory": {
65
- "type": "url",
66
- "url": "http://127.0.0.1:8765/",
67
- "description": "Persistent cross-session knowledge graph for agent memory and handoffs"
68
- },
69
- "context7": {
70
- "command": "npx",
71
- "args": [
72
- "-y",
73
- "@upstash/context7-mcp@latest"
74
- ],
75
- "description": "Library and framework documentation lookup"
5
+ "orchestrator": {
6
+ "name": "construct",
7
+ "displayName": "Construct",
8
+ "role": "Your AI co-pilot",
9
+ "description": "Single entry point for all work — plans, builds, validates, and ships. Route everything through Construct.",
10
+ "modelTier": "standard",
11
+ "reasoningEffort": "medium",
12
+ "permissions": {
13
+ "edit": "allow",
14
+ "bash": "allow",
15
+ "webfetch": "allow"
76
16
  },
77
- "playwright": {
78
- "command": "npx",
79
- "args": [
80
- "-y",
81
- "@playwright/mcp@latest"
82
- ],
83
- "description": "Browser automation and E2E testing"
84
- },
85
- "github": {
86
- "type": "url",
87
- "url": "https://api.githubcopilot.com/mcp/",
88
- "headers": {
89
- "Authorization": "Bearer __GITHUB_TOKEN__"
90
- },
91
- "description": "GitHub API: issues, PRs, code search"
92
- },
93
- "sequential-thinking": {
94
- "command": "npx",
95
- "args": [
96
- "-y",
97
- "@modelcontextprotocol/server-sequential-thinking"
98
- ],
99
- "description": "Complex multi-step reasoning chains"
100
- },
101
- "construct-mcp": {
102
- "command": "node",
103
- "args": [
104
- "__CX_TOOLKIT_DIR__/lib/mcp/server.mjs"
105
- ],
106
- "description": "Agent health, diff summary, file scanner, project context, telemetry trace write"
107
- }
108
- },
109
- "sharedGuidance": [
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.",
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.",
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."
122
- ],
123
- "platformGuidance": {
124
- "opencode": [
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.",
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.",
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.",
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.",
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.",
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.",
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.",
132
- "If the memory MCP is available, call search_nodes with the current project name before starting work to retrieve prior session context."
133
- ],
134
- "claude": [
135
- "Follow workspace instructions, project-level CLAUDE.md, agent definitions in ~/.claude/agents/, slash commands, and hooks. Project-level instructions override global ones.",
136
- "At session start, check for .cx/context.md in the project root and incorporate prior context.",
137
- "Construct is the primary entry point. Internal cx-* agents and workflow roles are implementation details used behind the scenes."
138
- ],
139
- "codex": [
140
- "Construct is the primary Codex profile for normal use. Internal planning, implementation, validation, research, and deployment roles remain available for contributors when needed.",
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.",
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.",
143
- "Follow the relevant session skill before inventing process."
144
- ],
145
- "copilot": [
146
- "Copilot has no spawnable subagents. Use the Construct prompt/profile for normal use; internal role-specific profiles are contributor-facing implementation details."
147
- ]
17
+ "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",
18
+ "promptFile": "personas/construct.md",
19
+ "injectAgentRoster": true
148
20
  },
149
- "personas": [
150
- {
151
- "name": "construct",
152
- "displayName": "Construct",
153
- "role": "Your AI co-pilot",
154
- "description": "Single entry point for all work — plans, builds, validates, and ships. Route everything through Construct.",
155
- "modelTier": "standard",
156
- "reasoningEffort": "medium",
157
- "permissions": {
158
- "edit": "allow",
159
- "bash": "allow",
160
- "webfetch": "allow"
161
- },
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",
163
- "promptFile": "personas/construct.md",
164
- "injectAgentRoster": true
165
- }
166
- ],
167
- "agents": [
21
+ "specialists": [
168
22
  {
169
23
  "internal": true,
170
24
  "name": "orchestrator",
@@ -174,14 +28,29 @@
174
28
  "codexSandbox": "read-only",
175
29
  "claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,list_teams,get_team,memory_search,memory_add_observations,cx_trace,cx_score",
176
30
  "injectAgentRoster": true,
177
- "promptFile": "agents/prompts/cx-orchestrator.md",
31
+ "promptFile": "specialists/prompts/cx-orchestrator.md",
178
32
  "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"]
33
+ "focusAreas": [
34
+ "routing accuracy",
35
+ "workload balance",
36
+ "handoff completeness",
37
+ "specialist utilization"
38
+ ],
39
+ "riskSignals": [
40
+ "misrouted tasks",
41
+ "overloaded specialists",
42
+ "dropped handoffs",
43
+ "stale queued work"
44
+ ],
45
+ "artifactBias": [
46
+ "notes",
47
+ "memos"
48
+ ]
182
49
  },
183
50
  "skills": [
184
- "ai/orchestration-workflow"
51
+ "ai/orchestration-workflow",
52
+ "operating/orchestration-reference",
53
+ "operating/change-management"
185
54
  ],
186
55
  "perspective": {
187
56
  "bias": "Over-routing to cx-engineer, false simplicity, plans where every task runs in parallel",
@@ -200,11 +69,24 @@
200
69
  "reasoningEffort": "medium",
201
70
  "codexSandbox": "read-only",
202
71
  "claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
203
- "promptFile": "agents/prompts/cx-rd-lead.md",
72
+ "promptFile": "specialists/prompts/cx-rd-lead.md",
204
73
  "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"]
74
+ "focusAreas": [
75
+ "hypothesis validation",
76
+ "experiment progress",
77
+ "assumption tracking",
78
+ "learning velocity"
79
+ ],
80
+ "riskSignals": [
81
+ "untested assumptions",
82
+ "premature hardening",
83
+ "stalled experiments",
84
+ "unfalsifiable claims"
85
+ ],
86
+ "artifactBias": [
87
+ "adrs",
88
+ "notes"
89
+ ]
208
90
  },
209
91
  "skills": [
210
92
  "ai/agent-dev",
@@ -226,11 +108,25 @@
226
108
  "reasoningEffort": "high",
227
109
  "codexSandbox": "read-only",
228
110
  "claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
229
- "promptFile": "agents/prompts/cx-product-manager.md",
111
+ "promptFile": "specialists/prompts/cx-product-manager.md",
230
112
  "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"]
113
+ "focusAreas": [
114
+ "requirements coverage",
115
+ "delivery risk",
116
+ "user-facing gaps",
117
+ "scope clarity"
118
+ ],
119
+ "riskSignals": [
120
+ "untraced requirements",
121
+ "scope creep",
122
+ "blocked dependencies",
123
+ "missing acceptance criteria"
124
+ ],
125
+ "artifactBias": [
126
+ "prds",
127
+ "intake",
128
+ "memos"
129
+ ]
234
130
  },
235
131
  "skills": [
236
132
  "docs/product-intelligence-workflow",
@@ -261,11 +157,24 @@
261
157
  "reasoningEffort": "medium",
262
158
  "codexSandbox": "read-only",
263
159
  "claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
264
- "promptFile": "agents/prompts/cx-ux-researcher.md",
160
+ "promptFile": "specialists/prompts/cx-ux-researcher.md",
265
161
  "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"]
162
+ "focusAreas": [
163
+ "user evidence freshness",
164
+ "friction points",
165
+ "persona coverage",
166
+ "research gaps"
167
+ ],
168
+ "riskSignals": [
169
+ "stale user data",
170
+ "untested assumptions about users",
171
+ "missing friction analysis",
172
+ "internal-only validation"
173
+ ],
174
+ "artifactBias": [
175
+ "notes",
176
+ "memos"
177
+ ]
269
178
  },
270
179
  "skills": [
271
180
  "docs/research-workflow"
@@ -294,14 +203,30 @@
294
203
  "reasoningEffort": "medium",
295
204
  "codexSandbox": "workspace-write",
296
205
  "claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
297
- "promptFile": "agents/prompts/cx-operations.md",
206
+ "promptFile": "specialists/prompts/cx-operations.md",
298
207
  "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"]
208
+ "focusAreas": [
209
+ "dependency sequencing",
210
+ "ownership clarity",
211
+ "blocker resolution",
212
+ "delivery cadence"
213
+ ],
214
+ "riskSignals": [
215
+ "hidden dependencies",
216
+ "unowned tasks",
217
+ "blocked work aging",
218
+ "parallel plans with serial reality"
219
+ ],
220
+ "artifactBias": [
221
+ "notes",
222
+ "memos"
223
+ ]
302
224
  },
303
225
  "skills": [
304
- "docs/init-project"
226
+ "docs/init-project",
227
+ "operating/incident-response",
228
+ "operating/oncall-rotation",
229
+ "operating/change-management"
305
230
  ],
306
231
  "perspective": {
307
232
  "bias": "Plans where every task runs in parallel, tasks that sound atomic but aren't, work starting before blockers clear",
@@ -319,11 +244,24 @@
319
244
  "reasoningEffort": "medium",
320
245
  "codexSandbox": "read-only",
321
246
  "claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
322
- "promptFile": "agents/prompts/cx-researcher.md",
247
+ "promptFile": "specialists/prompts/cx-researcher.md",
323
248
  "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"]
249
+ "focusAreas": [
250
+ "source freshness",
251
+ "citation coverage",
252
+ "dependency versions",
253
+ "conflicting evidence"
254
+ ],
255
+ "riskSignals": [
256
+ "undated sources",
257
+ "unverified claims",
258
+ "outdated dependencies",
259
+ "single-source conclusions"
260
+ ],
261
+ "artifactBias": [
262
+ "notes",
263
+ "memos"
264
+ ]
327
265
  },
328
266
  "skills": [
329
267
  "docs/research-workflow",
@@ -345,14 +283,30 @@
345
283
  "reasoningEffort": "medium",
346
284
  "codexSandbox": "read-only",
347
285
  "claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
348
- "promptFile": "agents/prompts/cx-business-strategist.md",
286
+ "promptFile": "specialists/prompts/cx-business-strategist.md",
349
287
  "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"]
288
+ "focusAreas": [
289
+ "market positioning",
290
+ "competitive shifts",
291
+ "timing relevance",
292
+ "strategic coherence"
293
+ ],
294
+ "riskSignals": [
295
+ "tactics dressed as strategy",
296
+ "ignored competitive moves",
297
+ "undifferentiated positioning",
298
+ "missing market timing"
299
+ ],
300
+ "artifactBias": [
301
+ "memos",
302
+ "notes"
303
+ ]
353
304
  },
354
305
  "skills": [
355
- "architecture/api-design"
306
+ "strategy/competitive-landscape",
307
+ "strategy/market-research-methods",
308
+ "strategy/pricing-positioning",
309
+ "strategy/narrative-arc"
356
310
  ],
357
311
  "perspective": {
358
312
  "bias": "Tactical decisions dressed as strategy, ignoring competitive dynamics, 'build it and they will come'",
@@ -375,11 +329,24 @@
375
329
  "reasoningEffort": "medium",
376
330
  "codexSandbox": "read-only",
377
331
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
378
- "promptFile": "agents/prompts/cx-data-analyst.md",
332
+ "promptFile": "specialists/prompts/cx-data-analyst.md",
379
333
  "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"]
334
+ "focusAreas": [
335
+ "metric validity",
336
+ "measurement coverage",
337
+ "behavioral indicators",
338
+ "distribution analysis"
339
+ ],
340
+ "riskSignals": [
341
+ "vanity metrics",
342
+ "averages hiding variance",
343
+ "post-hoc success definitions",
344
+ "ungamed metrics becoming gamed"
345
+ ],
346
+ "artifactBias": [
347
+ "notes",
348
+ "memos"
349
+ ]
383
350
  },
384
351
  "skills": [
385
352
  "devops/observability",
@@ -408,11 +375,24 @@
408
375
  "reasoningEffort": "medium",
409
376
  "codexSandbox": "read-only",
410
377
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
411
- "promptFile": "agents/prompts/cx-evaluator.md",
378
+ "promptFile": "specialists/prompts/cx-evaluator.md",
412
379
  "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"]
380
+ "focusAreas": [
381
+ "eval coverage",
382
+ "regression detection",
383
+ "baseline drift",
384
+ "failure case representation"
385
+ ],
386
+ "riskSignals": [
387
+ "eval sets matching known outputs",
388
+ "cherry-picked baselines",
389
+ "missing failure cases",
390
+ "promotion on too few traces"
391
+ ],
392
+ "artifactBias": [
393
+ "notes",
394
+ "adrs"
395
+ ]
416
396
  },
417
397
  "skills": [
418
398
  "ai/prompt-and-eval",
@@ -439,11 +419,24 @@
439
419
  "reasoningEffort": "high",
440
420
  "codexSandbox": "workspace-write",
441
421
  "claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
442
- "promptFile": "agents/prompts/cx-ai-engineer.md",
422
+ "promptFile": "specialists/prompts/cx-ai-engineer.md",
443
423
  "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"]
424
+ "focusAreas": [
425
+ "model reliability",
426
+ "failure mode coverage",
427
+ "prompt stability",
428
+ "eval health"
429
+ ],
430
+ "riskSignals": [
431
+ "untested failure paths",
432
+ "hallucination risk dismissed",
433
+ "prompt drift",
434
+ "demo-only validation"
435
+ ],
436
+ "artifactBias": [
437
+ "adrs",
438
+ "notes"
439
+ ]
447
440
  },
448
441
  "skills": [
449
442
  "ai/agent-dev",
@@ -476,11 +469,24 @@
476
469
  "reasoningEffort": "high",
477
470
  "codexSandbox": "read-only",
478
471
  "claudeTools": "Read,Grep,Glob,LS,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
479
- "promptFile": "agents/prompts/cx-architect.md",
472
+ "promptFile": "specialists/prompts/cx-architect.md",
480
473
  "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"]
474
+ "focusAreas": [
475
+ "coupling and cohesion",
476
+ "unvalidated assumptions",
477
+ "interface contracts",
478
+ "tech debt accumulation"
479
+ ],
480
+ "riskSignals": [
481
+ "missing ADRs",
482
+ "implicit contracts",
483
+ "data model drift",
484
+ "undocumented invariants"
485
+ ],
486
+ "artifactBias": [
487
+ "adrs",
488
+ "notes"
489
+ ]
484
490
  },
485
491
  "skills": [
486
492
  "architecture/api-design",
@@ -509,13 +515,26 @@
509
515
  "modelTier": "standard",
510
516
  "reasoningEffort": "medium",
511
517
  "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"]
518
+ "focusAreas": [
519
+ "implementation progress",
520
+ "test coverage gaps",
521
+ "build health",
522
+ "PR velocity"
523
+ ],
524
+ "riskSignals": [
525
+ "failing CI",
526
+ "stale PRs",
527
+ "untested paths",
528
+ "pattern drift"
529
+ ],
530
+ "artifactBias": [
531
+ "notes",
532
+ "adrs"
533
+ ]
515
534
  },
516
535
  "codexSandbox": "workspace-write",
517
536
  "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",
518
- "promptFile": "agents/prompts/cx-engineer.md",
537
+ "promptFile": "specialists/prompts/cx-engineer.md",
519
538
  "skills": [
520
539
  "development/typescript",
521
540
  "development/python",
@@ -532,7 +551,10 @@
532
551
  "frameworks/react",
533
552
  "frameworks/nextjs",
534
553
  "frameworks/django",
535
- "frameworks/spring-boot"
554
+ "frameworks/spring-boot",
555
+ "exploration/unknown-codebase-onboarding",
556
+ "exploration/tracer-bullet-method",
557
+ "exploration/dependency-graph-reading"
536
558
  ],
537
559
  "perspective": {
538
560
  "bias": "Implementations that ignore existing conventions, abstractions that complicate the simple case",
@@ -550,11 +572,24 @@
550
572
  "reasoningEffort": "high",
551
573
  "codexSandbox": "read-only",
552
574
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
553
- "promptFile": "agents/prompts/cx-devil-advocate.md",
575
+ "promptFile": "specialists/prompts/cx-devil-advocate.md",
554
576
  "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"]
577
+ "focusAreas": [
578
+ "plan survivability",
579
+ "hidden failure modes",
580
+ "scope stability",
581
+ "assumption stress-testing"
582
+ ],
583
+ "riskSignals": [
584
+ "plans too elegant to survive contact",
585
+ "unlikely failures unaddressed",
586
+ "scope drift",
587
+ "unanimous agreement without challenge"
588
+ ],
589
+ "artifactBias": [
590
+ "notes",
591
+ "memos"
592
+ ]
558
593
  },
559
594
  "skills": [
560
595
  "quality-gates/review-work"
@@ -575,11 +610,23 @@
575
610
  "reasoningEffort": "high",
576
611
  "codexSandbox": "read-only",
577
612
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
578
- "promptFile": "agents/prompts/cx-reviewer.md",
613
+ "promptFile": "specialists/prompts/cx-reviewer.md",
579
614
  "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"]
615
+ "focusAreas": [
616
+ "edge case coverage",
617
+ "error handling completeness",
618
+ "test fidelity",
619
+ "code quality trends"
620
+ ],
621
+ "riskSignals": [
622
+ "happy-path-only reviews",
623
+ "excessive mocking",
624
+ "missing error handlers",
625
+ "review without reproduction"
626
+ ],
627
+ "artifactBias": [
628
+ "notes"
629
+ ]
583
630
  },
584
631
  "skills": [
585
632
  "quality-gates/verify-quality",
@@ -602,11 +649,24 @@
602
649
  "reasoningEffort": "high",
603
650
  "codexSandbox": "read-only",
604
651
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
605
- "promptFile": "agents/prompts/cx-security.md",
652
+ "promptFile": "specialists/prompts/cx-security.md",
606
653
  "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"]
654
+ "focusAreas": [
655
+ "attack surface changes",
656
+ "dependency vulnerabilities",
657
+ "auth boundary integrity",
658
+ "secret exposure"
659
+ ],
660
+ "riskSignals": [
661
+ "new unauthed endpoints",
662
+ "unaudited dependencies",
663
+ "implicit trust boundaries",
664
+ "hardcoded credentials"
665
+ ],
666
+ "artifactBias": [
667
+ "adrs",
668
+ "notes"
669
+ ]
610
670
  },
611
671
  "skills": [
612
672
  "security/red-team",
@@ -634,11 +694,23 @@
634
694
  "reasoningEffort": "medium",
635
695
  "codexSandbox": "workspace-write",
636
696
  "claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
637
- "promptFile": "agents/prompts/cx-qa.md",
697
+ "promptFile": "specialists/prompts/cx-qa.md",
638
698
  "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"]
699
+ "focusAreas": [
700
+ "test effectiveness",
701
+ "behavioral coverage",
702
+ "regression risk",
703
+ "acceptance criteria traceability"
704
+ ],
705
+ "riskSignals": [
706
+ "tests that never fail",
707
+ "coverage without behavioral assertions",
708
+ "untested acceptance criteria",
709
+ "flaky tests ignored"
710
+ ],
711
+ "artifactBias": [
712
+ "notes"
713
+ ]
642
714
  },
643
715
  "skills": [
644
716
  "devops/testing",
@@ -661,11 +733,23 @@
661
733
  "reasoningEffort": "high",
662
734
  "codexSandbox": "workspace-write",
663
735
  "claudeTools": "Read,Grep,Glob,LS,Bash,Edit,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
664
- "promptFile": "agents/prompts/cx-debugger.md",
736
+ "promptFile": "specialists/prompts/cx-debugger.md",
665
737
  "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"]
738
+ "focusAreas": [
739
+ "root cause identification",
740
+ "reproduction reliability",
741
+ "fix verification",
742
+ "regression prevention"
743
+ ],
744
+ "riskSignals": [
745
+ "symptom fixes without root cause",
746
+ "non-reproducible bugs closed",
747
+ "missing regression tests",
748
+ "repeated failure patterns"
749
+ ],
750
+ "artifactBias": [
751
+ "notes"
752
+ ]
669
753
  },
670
754
  "skills": [
671
755
  "quality-gates/verify-change",
@@ -688,11 +772,24 @@
688
772
  "reasoningEffort": "medium",
689
773
  "codexSandbox": "workspace-write",
690
774
  "claudeTools": "Read,Grep,Glob,LS,Bash,Edit,list_skills,get_skill,search_skills,get_template,list_templates,memory_search,memory_add_observations",
691
- "promptFile": "agents/prompts/cx-sre.md",
775
+ "promptFile": "specialists/prompts/cx-sre.md",
692
776
  "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"]
777
+ "focusAreas": [
778
+ "reliability posture",
779
+ "observability coverage",
780
+ "incident readiness",
781
+ "SLO adherence"
782
+ ],
783
+ "riskSignals": [
784
+ "missing alerts",
785
+ "untested rollbacks",
786
+ "observability gaps",
787
+ "SLOs defined post-incident"
788
+ ],
789
+ "artifactBias": [
790
+ "adrs",
791
+ "notes"
792
+ ]
696
793
  },
697
794
  "skills": [
698
795
  "devops/observability",
@@ -724,11 +821,24 @@
724
821
  "reasoningEffort": "medium",
725
822
  "codexSandbox": "workspace-write",
726
823
  "claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
727
- "promptFile": "agents/prompts/cx-platform-engineer.md",
824
+ "promptFile": "specialists/prompts/cx-platform-engineer.md",
728
825
  "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"]
826
+ "focusAreas": [
827
+ "developer friction",
828
+ "pipeline health",
829
+ "dependency freshness",
830
+ "build reliability"
831
+ ],
832
+ "riskSignals": [
833
+ "slow CI",
834
+ "stale dependencies",
835
+ "manual steps in pipelines",
836
+ "config only author understands"
837
+ ],
838
+ "artifactBias": [
839
+ "adrs",
840
+ "notes"
841
+ ]
732
842
  },
733
843
  "skills": [
734
844
  "devops/ci-cd",
@@ -761,11 +871,24 @@
761
871
  "reasoningEffort": "medium",
762
872
  "codexSandbox": "read-only",
763
873
  "claudeTools": "Read,Grep,Glob,LS,WebSearch,WebFetch,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
764
- "promptFile": "agents/prompts/cx-legal-compliance.md",
874
+ "promptFile": "specialists/prompts/cx-legal-compliance.md",
765
875
  "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"]
876
+ "focusAreas": [
877
+ "license compliance",
878
+ "data privacy posture",
879
+ "AI disclosure obligations",
880
+ "regulatory changes"
881
+ ],
882
+ "riskSignals": [
883
+ "unreviewed dependency licenses",
884
+ "undisclosed AI processing",
885
+ "missing data basis documentation",
886
+ "new jurisdiction exposure"
887
+ ],
888
+ "artifactBias": [
889
+ "adrs",
890
+ "memos"
891
+ ]
769
892
  },
770
893
  "skills": [
771
894
  "compliance/license-audit",
@@ -789,11 +912,24 @@
789
912
  "reasoningEffort": "medium",
790
913
  "codexSandbox": "workspace-write",
791
914
  "claudeTools": "Read,Grep,Glob,LS,Bash,Edit,Write,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
792
- "promptFile": "agents/prompts/cx-release-manager.md",
915
+ "promptFile": "specialists/prompts/cx-release-manager.md",
793
916
  "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"]
917
+ "focusAreas": [
918
+ "release readiness",
919
+ "rollback viability",
920
+ "changelog completeness",
921
+ "migration safety"
922
+ ],
923
+ "riskSignals": [
924
+ "untested rollback",
925
+ "irreversible migrations",
926
+ "missing changelog entries",
927
+ "canary without rollback trigger"
928
+ ],
929
+ "artifactBias": [
930
+ "notes",
931
+ "adrs"
932
+ ]
797
933
  },
798
934
  "skills": [
799
935
  "devops/git-workflow",
@@ -815,11 +951,25 @@
815
951
  "reasoningEffort": "medium",
816
952
  "codexSandbox": "workspace-write",
817
953
  "claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
818
- "promptFile": "agents/prompts/cx-docs-keeper.md",
954
+ "promptFile": "specialists/prompts/cx-docs-keeper.md",
819
955
  "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"]
956
+ "focusAreas": [
957
+ "documentation freshness",
958
+ "decision traceability",
959
+ "context completeness",
960
+ "onboarding clarity"
961
+ ],
962
+ "riskSignals": [
963
+ "stale docs",
964
+ "undocumented decisions",
965
+ "missing context updates",
966
+ "tribal knowledge growing"
967
+ ],
968
+ "artifactBias": [
969
+ "adrs",
970
+ "notes",
971
+ "memos"
972
+ ]
823
973
  },
824
974
  "skills": [
825
975
  "docs/adr-workflow",
@@ -842,11 +992,24 @@
842
992
  "reasoningEffort": "medium",
843
993
  "codexSandbox": "workspace-write",
844
994
  "claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
845
- "promptFile": "agents/prompts/cx-designer.md",
995
+ "promptFile": "specialists/prompts/cx-designer.md",
846
996
  "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"]
997
+ "focusAreas": [
998
+ "interaction completeness",
999
+ "state coverage",
1000
+ "design consistency",
1001
+ "accessibility compliance"
1002
+ ],
1003
+ "riskSignals": [
1004
+ "missing error states",
1005
+ "no empty states",
1006
+ "inconsistent patterns",
1007
+ "untested responsive breakpoints"
1008
+ ],
1009
+ "artifactBias": [
1010
+ "notes",
1011
+ "memos"
1012
+ ]
850
1013
  },
851
1014
  "skills": [
852
1015
  "frontend-design/ui-aesthetics",
@@ -872,11 +1035,23 @@
872
1035
  "reasoningEffort": "medium",
873
1036
  "codexSandbox": "read-only",
874
1037
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
875
- "promptFile": "agents/prompts/cx-accessibility.md",
1038
+ "promptFile": "specialists/prompts/cx-accessibility.md",
876
1039
  "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"]
1040
+ "focusAreas": [
1041
+ "keyboard navigability",
1042
+ "screen reader compatibility",
1043
+ "contrast compliance",
1044
+ "ARIA correctness"
1045
+ ],
1046
+ "riskSignals": [
1047
+ "ARIA added without testing",
1048
+ "keyboard traps",
1049
+ "contrast failures",
1050
+ "missing focus indicators"
1051
+ ],
1052
+ "artifactBias": [
1053
+ "notes"
1054
+ ]
880
1055
  },
881
1056
  "skills": [
882
1057
  "frontend-design/accessibility"
@@ -904,14 +1079,29 @@
904
1079
  "reasoningEffort": "medium",
905
1080
  "codexSandbox": "read-only",
906
1081
  "claudeTools": "Read,Grep,Glob,LS,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations",
907
- "promptFile": "agents/prompts/cx-explorer.md",
1082
+ "promptFile": "specialists/prompts/cx-explorer.md",
908
1083
  "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"]
1084
+ "focusAreas": [
1085
+ "codebase understanding",
1086
+ "pattern discovery",
1087
+ "dependency mapping",
1088
+ "drift detection"
1089
+ ],
1090
+ "riskSignals": [
1091
+ "assumptions without verification",
1092
+ "incomplete investigation",
1093
+ "outdated mental models",
1094
+ "undiscovered code paths"
1095
+ ],
1096
+ "artifactBias": [
1097
+ "notes"
1098
+ ]
912
1099
  },
913
1100
  "skills": [
914
- "exploration/repo-map"
1101
+ "exploration/repo-map",
1102
+ "exploration/unknown-codebase-onboarding",
1103
+ "exploration/tracer-bullet-method",
1104
+ "exploration/dependency-graph-reading"
915
1105
  ],
916
1106
  "perspective": {
917
1107
  "bias": "'I know where this is' without verifying, grep results without context, 5-minute investigations",
@@ -928,11 +1118,24 @@
928
1118
  "modelTier": "reasoning",
929
1119
  "reasoningEffort": "high",
930
1120
  "claudeTools": "Read,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
931
- "promptFile": "agents/prompts/cx-trace-reviewer.md",
1121
+ "promptFile": "specialists/prompts/cx-trace-reviewer.md",
932
1122
  "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"]
1123
+ "focusAreas": [
1124
+ "agent performance trends",
1125
+ "variance detection",
1126
+ "degradation signals",
1127
+ "fleet health"
1128
+ ],
1129
+ "riskSignals": [
1130
+ "stable median hiding variance",
1131
+ "silent degradation",
1132
+ "promotion on few traces",
1133
+ "unreviewed failure clusters"
1134
+ ],
1135
+ "artifactBias": [
1136
+ "notes",
1137
+ "memos"
1138
+ ]
936
1139
  },
937
1140
  "skills": [
938
1141
  "ai/prompt-optimizer"
@@ -952,11 +1155,24 @@
952
1155
  "modelTier": "standard",
953
1156
  "codexSandbox": "read-only",
954
1157
  "claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
955
- "promptFile": "agents/prompts/cx-data-engineer.md",
1158
+ "promptFile": "specialists/prompts/cx-data-engineer.md",
956
1159
  "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"]
1160
+ "focusAreas": [
1161
+ "pipeline reliability",
1162
+ "data quality",
1163
+ "schema contract adherence",
1164
+ "idempotency"
1165
+ ],
1166
+ "riskSignals": [
1167
+ "non-idempotent pipelines",
1168
+ "missing data quality tests",
1169
+ "schema drift",
1170
+ "uncontracted outputs"
1171
+ ],
1172
+ "artifactBias": [
1173
+ "adrs",
1174
+ "notes"
1175
+ ]
960
1176
  },
961
1177
  "skills": [
962
1178
  "devops/data-engineering",
@@ -978,11 +1194,23 @@
978
1194
  "modelTier": "standard",
979
1195
  "codexSandbox": "read-only",
980
1196
  "claudeTools": "Read,Grep,Glob,LS,Edit,Write,Bash,list_skills,get_skill,search_skills,memory_search,memory_add_observations,cx_trace,cx_score",
981
- "promptFile": "agents/prompts/cx-test-automation.md",
1197
+ "promptFile": "specialists/prompts/cx-test-automation.md",
982
1198
  "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"]
1199
+ "focusAreas": [
1200
+ "test determinism",
1201
+ "flakiness trends",
1202
+ "automation ROI",
1203
+ "behavioral coverage"
1204
+ ],
1205
+ "riskSignals": [
1206
+ "flaky tests ignored",
1207
+ "arbitrary sleeps",
1208
+ "tests that never caught a bug",
1209
+ "intermittent failures dismissed"
1210
+ ],
1211
+ "artifactBias": [
1212
+ "notes"
1213
+ ]
986
1214
  },
987
1215
  "skills": [
988
1216
  "devops/testing",
@@ -998,157 +1226,162 @@
998
1226
  "canEdit": true
999
1227
  }
1000
1228
  ],
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
- }
1229
+ "models": {
1230
+ "reasoning": {
1231
+ "primary": null,
1232
+ "fallback": []
1022
1233
  },
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
- }
1234
+ "standard": {
1235
+ "primary": null,
1236
+ "fallback": []
1038
1237
  },
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
- }
1238
+ "fast": {
1239
+ "primary": null,
1240
+ "fallback": []
1054
1241
  },
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"]
1242
+ "embeddings": {
1243
+ "local": {
1244
+ "provider": "onnx",
1245
+ "model": "Xenova/all-MiniLM-L6-v2",
1246
+ "dimensions": 384,
1247
+ "description": "Free, offline, runs locally via ONNX Runtime"
1248
+ },
1249
+ "openai": {
1250
+ "provider": "openai",
1251
+ "model": "text-embedding-3-small",
1252
+ "dimensions": 1536,
1253
+ "description": "Best quality, requires OPENAI_API_KEY"
1254
+ },
1255
+ "ollama": {
1256
+ "provider": "ollama",
1257
+ "model": "nomic-embed-text",
1258
+ "dimensions": 768,
1259
+ "description": "Local Ollama server, requires OLLAMA_BASE_URL"
1260
+ },
1261
+ "hashing": {
1262
+ "provider": "local",
1263
+ "model": "hashing-bow-v1",
1264
+ "dimensions": 256,
1265
+ "description": "Legacy deterministic hash — fast but no semantic understanding"
1266
+ }
1267
+ }
1268
+ },
1269
+ "providers": {
1270
+ "openrouter": {
1271
+ "npm": "@ai-sdk/openai-compatible",
1272
+ "name": "OpenRouter",
1273
+ "options": {
1274
+ "baseURL": "https://openrouter.ai/api/v1",
1275
+ "headers": {
1276
+ "HTTP-Referer": "__OPENROUTER_REFERER__",
1277
+ "X-Title": "__OPENROUTER_TITLE__"
1278
+ }
1279
+ },
1280
+ "models": {
1281
+ "google/gemma-3-27b-it:free": {
1282
+ "name": "Google: Gemma 3 27B (free)"
1063
1283
  },
1064
- "planning": {
1065
- "name": "Operations Planning",
1066
- "mission": "Map dependencies. Own the execution plan.",
1067
- "roles": ["operations"]
1284
+ "meta-llama/llama-3.3-70b-instruct:free": {
1285
+ "name": "Meta: Llama 3.3 70B Instruct (free)"
1286
+ },
1287
+ "mistralai/mistral-7b-instruct:free": {
1288
+ "name": "Mistral: Mistral 7B Instruct (free)"
1289
+ },
1290
+ "qwen/qwen3-coder:free": {
1291
+ "name": "Qwen: Qwen3 Coder 480B A35B (free)"
1068
1292
  }
1069
1293
  }
1070
1294
  }
1071
1295
  },
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"
1296
+ "mcpServers": {
1297
+ "memory": {
1298
+ "command": "node",
1299
+ "args": [
1300
+ "__CX_TOOLKIT_DIR__/lib/mcp/memory-bridge.mjs"
1301
+ ],
1302
+ "env": {
1303
+ "CONSTRUCT_MEMORY_BRIDGE_URL": "http://127.0.0.1:__MEMORY_PORT__/"
1124
1304
  },
1125
- {
1126
- "id": "critic",
1127
- "absorbs": ["devil-advocate", "evaluator"],
1128
- "whenToUse": "High-stakes decisions"
1305
+ "description": "Stdio MCP bridge for cass-memory: persistent cross-session knowledge graph for agent memory and handoffs"
1306
+ },
1307
+ "context7": {
1308
+ "command": "npx",
1309
+ "args": [
1310
+ "-y",
1311
+ "@upstash/context7-mcp@latest"
1312
+ ],
1313
+ "description": "Library and framework documentation lookup"
1314
+ },
1315
+ "playwright": {
1316
+ "command": "npx",
1317
+ "args": [
1318
+ "-y",
1319
+ "@playwright/mcp@latest"
1320
+ ],
1321
+ "description": "Browser automation and E2E testing"
1322
+ },
1323
+ "github": {
1324
+ "type": "url",
1325
+ "url": "https://api.githubcopilot.com/mcp/",
1326
+ "headers": {
1327
+ "Authorization": "Bearer __GITHUB_TOKEN__"
1129
1328
  },
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
1329
+ "description": "GitHub API: issues, PRs, code search"
1330
+ },
1331
+ "sequential-thinking": {
1332
+ "command": "npx",
1333
+ "args": [
1334
+ "-y",
1335
+ "@modelcontextprotocol/server-sequential-thinking"
1336
+ ],
1337
+ "description": "Complex multi-step reasoning chains"
1142
1338
  },
1143
- "perConversationOverride": true,
1144
- "cliSyntax": "@construct --primary=cx-pm --secondary=cx-arch"
1339
+ "construct-mcp": {
1340
+ "command": "node",
1341
+ "args": [
1342
+ "__CX_TOOLKIT_DIR__/lib/mcp/server.mjs"
1343
+ ],
1344
+ "description": "Agent health, diff summary, file scanner, project context, telemetry trace write"
1345
+ }
1145
1346
  },
1146
- "modelGuidance": {
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.",
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 generationwrite complete implementations rather than pseudocode.",
1149
- "gemini": "If you are a Gemini model: leverage grounding for documentation lookups. Use structured output mode for data transformations. You have strong multimodal capabilities reference visual context when available.",
1150
- "qwen": "If you are a Qwen model: you have strong multilingual and code capabilities. Use step-by-step reasoning for complex tasks. Be explicit about trade-offs when proposing solutions.",
1151
- "llama": "If you are a Llama model: be explicit about uncertainty. Prefer shorter, focused responses over long narratives. Break complex tasks into smaller verifiable steps.",
1152
- "gpt": "If you are a GPT model: use structured JSON mode for data transformations. Leverage system message for persistent context. You handle function calling well use tools proactively."
1347
+ "sharedGuidance": [
1348
+ "Session Resumption: start every new chat by grounding in project_context, memory_search, AGENTS.md, plan.md, and the relevant repo docs. Apply results silentlynever ask the user to repeat information that memory already holds.",
1349
+ "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'.",
1350
+ "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.",
1351
+ "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.",
1352
+ "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.",
1353
+ "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.",
1354
+ "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.",
1355
+ "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.",
1356
+ "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.",
1357
+ "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.",
1358
+ "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.",
1359
+ "Agent contracts: explicit producer→consumer service contracts live in specialists/contracts.json (loaded via lib/specialist-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."
1360
+ ],
1361
+ "platformGuidance": {
1362
+ "opencode": [
1363
+ "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.",
1364
+ "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.",
1365
+ "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.",
1366
+ "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.",
1367
+ "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.",
1368
+ "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.",
1369
+ "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.",
1370
+ "If the memory MCP is available, call search_nodes with the current project name before starting work to retrieve prior session context."
1371
+ ],
1372
+ "claude": [
1373
+ "Follow workspace instructions, project-level CLAUDE.md, agent definitions in ~/.claude/specialists/, slash commands, and hooks. Project-level instructions override global ones.",
1374
+ "At session start, check for .cx/context.md in the project root and incorporate prior context.",
1375
+ "Construct is the primary entry point. Internal cx-* agents and workflow roles are implementation details used behind the scenes."
1376
+ ],
1377
+ "codex": [
1378
+ "Construct is the primary Codex profile for normal use. Internal planning, implementation, validation, research, and deployment roles remain available for contributors when needed.",
1379
+ "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.",
1380
+ "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.",
1381
+ "Follow the relevant session skill before inventing process."
1382
+ ],
1383
+ "copilot": [
1384
+ "Copilot has no spawnable subagents. Use the Construct prompt/profile for normal use; internal role-specific profiles are contributor-facing implementation details."
1385
+ ]
1153
1386
  }
1154
1387
  }