cohorte 2.10.1 → 3.0.0-dev.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.
Files changed (213) hide show
  1. package/README.md +7 -0
  2. package/assets/manifest.json +193 -0
  3. package/assets/migrations/config/README.md +12 -0
  4. package/assets/migrations/state/0001_init.sql +154 -0
  5. package/assets/prompts/README.md +11 -0
  6. package/assets/prompts/agents/fixer.md +7 -0
  7. package/assets/prompts/agents/implementer.md +12 -0
  8. package/assets/prompts/agents/reviewer.md +8 -0
  9. package/assets/prompts/agents/security-reviewer.md +7 -0
  10. package/assets/prompts/phases/build.md +5 -0
  11. package/assets/prompts/phases/review.md +5 -0
  12. package/assets/prompts/phases/test.md +5 -0
  13. package/assets/prompts/system.md +11 -0
  14. package/assets/schemas/agent-output.schema.json +225 -0
  15. package/assets/schemas/auth-status.schema.json +87 -0
  16. package/assets/schemas/command-result.schema.json +192 -0
  17. package/assets/schemas/commands.schema.json +952 -0
  18. package/assets/schemas/config.schema.json +2259 -0
  19. package/assets/schemas/doctor-report.schema.json +104 -0
  20. package/assets/schemas/events.schema.json +8514 -0
  21. package/assets/schemas/fake-script.schema.json +549 -0
  22. package/assets/schemas/inspect.schema.json +3133 -0
  23. package/assets/schemas/manifest.schema.json +79 -0
  24. package/assets/schemas/ownership.schema.json +52 -0
  25. package/assets/schemas/policy-verdict.schema.json +282 -0
  26. package/assets/schemas/project-model.schema.json +783 -0
  27. package/assets/schemas/project-status.schema.json +217 -0
  28. package/assets/schemas/reconcile-plan.schema.json +154 -0
  29. package/assets/schemas/run-diff.schema.json +177 -0
  30. package/assets/schemas/run-snapshot-manifest.schema.json +2104 -0
  31. package/assets/schemas/run-state.schema.json +1755 -0
  32. package/assets/schemas/runtime-capabilities.schema.json +1545 -0
  33. package/assets/schemas/sandbox-capabilities.schema.json +116 -0
  34. package/assets/schemas/skill.schema.json +87 -0
  35. package/assets/schemas/spec.schema.json +202 -0
  36. package/assets/schemas/tool-catalogue.schema.json +655 -0
  37. package/assets/schemas/trust-record.schema.json +38 -0
  38. package/assets/skills/README.md +9 -0
  39. package/assets/skills/inspect-surface.md +4 -0
  40. package/dist/agent-host.mjs +2187 -0
  41. package/dist/agent-host.mjs.map +1 -0
  42. package/dist/bundle-manifest.json +104 -0
  43. package/dist/chunks/__host-DgGPyco9.mjs +18 -0
  44. package/dist/chunks/__host-DgGPyco9.mjs.map +1 -0
  45. package/dist/chunks/approve-Cv135UqI.mjs +19 -0
  46. package/dist/chunks/approve-Cv135UqI.mjs.map +1 -0
  47. package/dist/chunks/auth-BT5oVp76.mjs +132 -0
  48. package/dist/chunks/auth-BT5oVp76.mjs.map +1 -0
  49. package/dist/chunks/auth-CYOh60KG.mjs +93 -0
  50. package/dist/chunks/auth-CYOh60KG.mjs.map +1 -0
  51. package/dist/chunks/brainstorm-BwKA6yZP.mjs +7 -0
  52. package/dist/chunks/brainstorm-BwKA6yZP.mjs.map +1 -0
  53. package/dist/chunks/cancel-KV_cpsqS.mjs +15 -0
  54. package/dist/chunks/cancel-KV_cpsqS.mjs.map +1 -0
  55. package/dist/chunks/canonical-C8UxeEmB.mjs +57 -0
  56. package/dist/chunks/canonical-C8UxeEmB.mjs.map +1 -0
  57. package/dist/chunks/catalogue-BvwSrM_j.mjs +1549 -0
  58. package/dist/chunks/catalogue-BvwSrM_j.mjs.map +1 -0
  59. package/dist/chunks/compose-Dvxunpto.mjs +7307 -0
  60. package/dist/chunks/compose-Dvxunpto.mjs.map +1 -0
  61. package/dist/chunks/config-DefHA2Lw.mjs +96 -0
  62. package/dist/chunks/config-DefHA2Lw.mjs.map +1 -0
  63. package/dist/chunks/contract-BkMjU1kR.mjs +295 -0
  64. package/dist/chunks/contract-BkMjU1kR.mjs.map +1 -0
  65. package/dist/chunks/contract-bQ9FJl4N.mjs +123 -0
  66. package/dist/chunks/contract-bQ9FJl4N.mjs.map +1 -0
  67. package/dist/chunks/deny-ClTxSvHJ.mjs +15 -0
  68. package/dist/chunks/deny-ClTxSvHJ.mjs.map +1 -0
  69. package/dist/chunks/diff-Qw0II0sj.mjs +101 -0
  70. package/dist/chunks/diff-Qw0II0sj.mjs.map +1 -0
  71. package/dist/chunks/discover-eS01-me1.mjs +21 -0
  72. package/dist/chunks/discover-eS01-me1.mjs.map +1 -0
  73. package/dist/chunks/doctor-B-H2UK5e.mjs +222 -0
  74. package/dist/chunks/doctor-B-H2UK5e.mjs.map +1 -0
  75. package/dist/chunks/fix-D4Tj8RVA.mjs +18 -0
  76. package/dist/chunks/fix-D4Tj8RVA.mjs.map +1 -0
  77. package/dist/chunks/gc-BBXlBF5w.mjs +161 -0
  78. package/dist/chunks/gc-BBXlBF5w.mjs.map +1 -0
  79. package/dist/chunks/init-BUnzIkeE.mjs +63 -0
  80. package/dist/chunks/init-BUnzIkeE.mjs.map +1 -0
  81. package/dist/chunks/inspect-Buby4cQD.mjs +22 -0
  82. package/dist/chunks/inspect-Buby4cQD.mjs.map +1 -0
  83. package/dist/chunks/logs-Giq5sUau.mjs +25 -0
  84. package/dist/chunks/logs-Giq5sUau.mjs.map +1 -0
  85. package/dist/chunks/migrate-DybihKzZ.mjs +33 -0
  86. package/dist/chunks/migrate-DybihKzZ.mjs.map +1 -0
  87. package/dist/chunks/models-Btp6X2YZ.mjs +24 -0
  88. package/dist/chunks/models-Btp6X2YZ.mjs.map +1 -0
  89. package/dist/chunks/pause-BASBfKLO.mjs +16 -0
  90. package/dist/chunks/pause-BASBfKLO.mjs.map +1 -0
  91. package/dist/chunks/policy-DUIgzF3W.mjs +139 -0
  92. package/dist/chunks/policy-DUIgzF3W.mjs.map +1 -0
  93. package/dist/chunks/providers-Dx78imKj.mjs +19 -0
  94. package/dist/chunks/providers-Dx78imKj.mjs.map +1 -0
  95. package/dist/chunks/reconcile-Bhy3IIYo.mjs +50 -0
  96. package/dist/chunks/reconcile-Bhy3IIYo.mjs.map +1 -0
  97. package/dist/chunks/render-DyZr5Lgi.mjs +53 -0
  98. package/dist/chunks/render-DyZr5Lgi.mjs.map +1 -0
  99. package/dist/chunks/resume-GJQRb2Eb.mjs +15 -0
  100. package/dist/chunks/resume-GJQRb2Eb.mjs.map +1 -0
  101. package/dist/chunks/retry-CLrUem1H.mjs +15 -0
  102. package/dist/chunks/retry-CLrUem1H.mjs.map +1 -0
  103. package/dist/chunks/review-BDdjb6kB.mjs +17 -0
  104. package/dist/chunks/review-BDdjb6kB.mjs.map +1 -0
  105. package/dist/chunks/run-CgTWYlcd.mjs +82 -0
  106. package/dist/chunks/run-CgTWYlcd.mjs.map +1 -0
  107. package/dist/chunks/run-tool-C3rAv4XF.mjs +26 -0
  108. package/dist/chunks/run-tool-C3rAv4XF.mjs.map +1 -0
  109. package/dist/chunks/scan-8Gy_B6kI.mjs +122 -0
  110. package/dist/chunks/scan-8Gy_B6kI.mjs.map +1 -0
  111. package/dist/chunks/schema-C9QbUW4H.mjs +578 -0
  112. package/dist/chunks/schema-C9QbUW4H.mjs.map +1 -0
  113. package/dist/chunks/send-BdnJ85Nz.mjs +19 -0
  114. package/dist/chunks/send-BdnJ85Nz.mjs.map +1 -0
  115. package/dist/chunks/ship-DTuLGoaJ.mjs +19 -0
  116. package/dist/chunks/ship-DTuLGoaJ.mjs.map +1 -0
  117. package/dist/chunks/shutdown-BM92Iyv2.mjs +15 -0
  118. package/dist/chunks/shutdown-BM92Iyv2.mjs.map +1 -0
  119. package/dist/chunks/skip-DZG5kpcH.mjs +18 -0
  120. package/dist/chunks/skip-DZG5kpcH.mjs.map +1 -0
  121. package/dist/chunks/spec-Bq0P3jVh.mjs +20 -0
  122. package/dist/chunks/spec-Bq0P3jVh.mjs.map +1 -0
  123. package/dist/chunks/src-CId6kMsY.mjs +1689 -0
  124. package/dist/chunks/src-CId6kMsY.mjs.map +1 -0
  125. package/dist/chunks/src-CfAOde7C.mjs +5403 -0
  126. package/dist/chunks/src-CfAOde7C.mjs.map +1 -0
  127. package/dist/chunks/src-CmFjh4M0.mjs +928 -0
  128. package/dist/chunks/src-CmFjh4M0.mjs.map +1 -0
  129. package/dist/chunks/src-Cu3TxNob.mjs +783 -0
  130. package/dist/chunks/src-Cu3TxNob.mjs.map +1 -0
  131. package/dist/chunks/src-DcU4IXMe.mjs +117 -0
  132. package/dist/chunks/src-DcU4IXMe.mjs.map +1 -0
  133. package/dist/chunks/src-s7YRvk0t.mjs +2116 -0
  134. package/dist/chunks/src-s7YRvk0t.mjs.map +1 -0
  135. package/dist/chunks/status-SMjiOMYy.mjs +29 -0
  136. package/dist/chunks/status-SMjiOMYy.mjs.map +1 -0
  137. package/dist/chunks/tail-BuhT-2PH.mjs +25 -0
  138. package/dist/chunks/tail-BuhT-2PH.mjs.map +1 -0
  139. package/dist/chunks/update-BXIppsbi.mjs +16 -0
  140. package/dist/chunks/update-BXIppsbi.mjs.map +1 -0
  141. package/dist/cli.mjs +175 -0
  142. package/dist/cli.mjs.map +1 -0
  143. package/package.json +17 -32
  144. package/CHANGELOG.md +0 -1461
  145. package/bin/cli.js +0 -817
  146. package/bin/report.js +0 -141
  147. package/core/adapter/render.js +0 -415
  148. package/core/agents/implementer.template.md +0 -142
  149. package/core/agents/profile-reader.md +0 -50
  150. package/core/agents/release.md +0 -58
  151. package/core/agents/review.md +0 -179
  152. package/core/commands/cohorte-align-ds.md +0 -33
  153. package/core/commands/cohorte-audit.md +0 -58
  154. package/core/commands/cohorte-brainstorm.md +0 -70
  155. package/core/commands/cohorte-build.md +0 -219
  156. package/core/commands/cohorte-doctor.md +0 -194
  157. package/core/commands/cohorte-fix.md +0 -80
  158. package/core/commands/cohorte-fleet.md +0 -103
  159. package/core/commands/cohorte-init-pipeline.md +0 -31
  160. package/core/commands/cohorte-intake.md +0 -92
  161. package/core/commands/cohorte-patch.md +0 -118
  162. package/core/commands/cohorte-refactor.md +0 -59
  163. package/core/commands/cohorte-retro.md +0 -85
  164. package/core/commands/cohorte-review.md +0 -270
  165. package/core/commands/cohorte-ship.md +0 -122
  166. package/core/commands/cohorte-spec.md +0 -101
  167. package/core/commands/cohorte-update-pipeline.md +0 -165
  168. package/core/hooks/gate.py +0 -588
  169. package/core/runtimes/claude.json +0 -74
  170. package/core/runtimes/codex.json +0 -85
  171. package/core/runtimes/cursor.json +0 -76
  172. package/core/runtimes/gemini.json +0 -76
  173. package/core/runtimes/opencode.json +0 -73
  174. package/core/templates/agent-handoff.md +0 -34
  175. package/core/templates/brainstorm-return.md +0 -36
  176. package/core/templates/decisions.template.md +0 -42
  177. package/core/templates/design-brief.md +0 -44
  178. package/core/templates/patch.template.md +0 -86
  179. package/core/templates/pr-body.md +0 -25
  180. package/core/templates/review-feedback.md +0 -38
  181. package/core/templates/spec.template.md +0 -87
  182. package/core/templates/steps/init-pipeline/01-detect-stack.md +0 -44
  183. package/core/templates/steps/init-pipeline/02-interview-gaps.md +0 -55
  184. package/core/templates/steps/init-pipeline/03-draft-profile.md +0 -10
  185. package/core/templates/steps/init-pipeline/04-write-render.md +0 -145
  186. package/core/templates/steps/init-pipeline/05-report.md +0 -12
  187. package/core/workflows/audit.js +0 -240
  188. package/core/workflows/loop.js +0 -641
  189. package/core/workflows/refactor.js +0 -276
  190. package/core/workflows/review.js +0 -456
  191. package/install.ps1 +0 -103
  192. package/install.sh +0 -114
  193. package/lib/doctor.js +0 -534
  194. package/lib/runtime.js +0 -139
  195. package/lib/versions.js +0 -149
  196. package/lib/yaml.js +0 -129
  197. package/profile/PIPELINE.template.md +0 -259
  198. package/profile/SCHEMA.md +0 -735
  199. package/profile/cohorte.config.template.yaml +0 -43
  200. package/scripts/assert-gate-hook.mjs +0 -75
  201. package/scripts/kanban-move.sh +0 -313
  202. package/scripts/metrics/collect.mjs +0 -531
  203. package/scripts/metrics/prices.json +0 -42
  204. package/scripts/new-feature.sh.template +0 -98
  205. package/scripts/preflight.sh +0 -124
  206. package/scripts/remove-feature.sh.template +0 -56
  207. package/scripts/test-adapter.mjs +0 -437
  208. package/scripts/test-gate.mjs +0 -443
  209. package/scripts/test-kanban.mjs +0 -304
  210. package/scripts/test-lib.mjs +0 -356
  211. package/scripts/test-metrics.mjs +0 -156
  212. package/scripts/test-workflows.mjs +0 -758
  213. package/scripts/validate-core.mjs +0 -325
@@ -1,85 +0,0 @@
1
- {
2
- "id": "codex",
3
- "label": "Codex CLI (OpenAI)",
4
- "docs": "https://learn.chatgpt.com/docs/build-skills",
5
- "detect": [
6
- "~/.codex"
7
- ],
8
- "notes": [
9
- "Commands ship as SKILLS (.agents/skills/<name>/SKILL.md), not as custom prompts. Prompts are",
10
- "deprecated, and they are user-scoped only (~/.codex/prompts) \u2014 so a teammate cloning the repo",
11
- "would get the profile but none of the commands. Skills are discovered from `.agents/skills` in",
12
- "the repo, which means they travel with it. Invoked as $<name>, or implicitly from `description`.",
13
- "Skills do NOT substitute arguments, so the preamble explains $ARGUMENTS rather than rewriting it.",
14
- "Subagents are TOML, one file per agent, and the body lives in `developer_instructions`.",
15
- "Hooks use the SAME PreToolUse envelope as Claude Code, with one difference that matters:",
16
- "`permissionDecision: ask` is parsed but not honoured, so gate.py escalates ask to deny here.",
17
- "Anthropic model aliases are dropped and default to inheritance. Explicit Codex model and model_reasoning_effort values are preserved. Surface agents always live in the current project's .codex/agents, even with a global core; CODEX_HOME does not change."
18
- ],
19
- "scopes": {
20
- "global": {
21
- "root": "~/.codex",
22
- "core": "~/.cohorte/codex",
23
- "commands": "~/.agents/skills",
24
- "agents": "~/.codex/agents",
25
- "hooks": "~/.cohorte/codex/hooks",
26
- "hooks_config": "~/.codex/hooks.json",
27
- "workflows": null,
28
- "settings": null
29
- },
30
- "project": {
31
- "root": ".codex",
32
- "core": ".cohorte/codex",
33
- "commands": ".agents/skills",
34
- "agents": ".codex/agents",
35
- "hooks": ".cohorte/codex/hooks",
36
- "hooks_config": ".codex/hooks.json",
37
- "workflows": null,
38
- "settings": null
39
- }
40
- },
41
- "exclude_commands": [],
42
- "command": {
43
- "format": "skill",
44
- "ext": "/SKILL.md",
45
- "frontmatter": [
46
- "name",
47
- "description"
48
- ],
49
- "args": null,
50
- "args_note": "the text you typed after the skill name",
51
- "invoke": "$<name>"
52
- },
53
- "agent": {
54
- "format": "toml",
55
- "ext": ".toml",
56
- "body_key": "developer_instructions",
57
- "frontmatter": [
58
- "name",
59
- "description",
60
- "model",
61
- "model_reasoning_effort"
62
- ],
63
- "readonly_key": "sandbox_mode",
64
- "readonly_value": "read-only",
65
- "dispatch": "spawn the named agent; several run in parallel and Codex returns a consolidated result",
66
- "address": "<name>"
67
- },
68
- "hook": {
69
- "format": "claude",
70
- "event": "PreToolUse",
71
- "matcher": "Bash|shell|spawn_agent|Agent",
72
- "supports_ask": false,
73
- "config_shape": "json"
74
- },
75
- "capabilities": {
76
- "subagents": true,
77
- "hooks": true,
78
- "workflows": false,
79
- "inline_design": false,
80
- "mcp": true,
81
- "tool_restriction": true
82
- },
83
- "memory": "AGENTS.md",
84
- "headless": "codex exec"
85
- }
@@ -1,76 +0,0 @@
1
- {
2
- "id": "cursor",
3
- "label": "Cursor",
4
- "docs": "https://cursor.com/docs/cli/overview",
5
- "detect": [
6
- "~/.cursor"
7
- ],
8
- "notes": [
9
- "Cursor commands are plain markdown with NO placeholder substitution: whatever the human",
10
- "types after the command name is appended to the prompt. The adapter therefore explains the",
11
- "argument placeholder in the preamble rather than rewriting it to a token.",
12
- "Subagents are markdown + frontmatter, and `readonly: true` is a real tool restriction \u2014",
13
- "the review agent gets it. Cursor also reads .claude/agents and .codex/agents.",
14
- "Hooks use Cursor's own envelope ({\"permission\": \u2026}), not Claude's.",
15
- "Model pins are NOT carried across: the profile names Anthropic aliases (sonnet/haiku), which are meaningless here and would either error or be silently ignored. Agents and commands inherit this runtime's own model selection instead."
16
- ],
17
- "scopes": {
18
- "global": {
19
- "root": "~/.cursor",
20
- "core": "~/.cohorte/cursor",
21
- "commands": "~/.cursor/commands",
22
- "agents": "~/.cursor/agents",
23
- "hooks": "~/.cohorte/cursor/hooks",
24
- "hooks_config": "~/.cursor/hooks.json",
25
- "workflows": null,
26
- "settings": null
27
- },
28
- "project": {
29
- "root": ".cursor",
30
- "core": ".cohorte/cursor",
31
- "commands": ".cursor/commands",
32
- "agents": ".cursor/agents",
33
- "hooks": ".cohorte/cursor/hooks",
34
- "hooks_config": ".cursor/hooks.json",
35
- "workflows": null,
36
- "settings": null
37
- }
38
- },
39
- "exclude_commands": [],
40
- "command": {
41
- "format": "md",
42
- "ext": ".md",
43
- "frontmatter": [],
44
- "args": null,
45
- "args_note": "the text you typed after the command name",
46
- "invoke": "/<name>"
47
- },
48
- "agent": {
49
- "format": "md",
50
- "ext": ".md",
51
- "frontmatter": [
52
- "name",
53
- "description"
54
- ],
55
- "readonly_key": "readonly",
56
- "readonly_value": "true",
57
- "dispatch": "invoke it as /<name> <brief>, or name it in the prompt; several run in parallel",
58
- "address": "/<name>"
59
- },
60
- "hook": {
61
- "format": "cursor",
62
- "event": "beforeShellExecution",
63
- "supports_ask": true,
64
- "config_shape": "json"
65
- },
66
- "capabilities": {
67
- "subagents": true,
68
- "hooks": true,
69
- "workflows": false,
70
- "inline_design": false,
71
- "mcp": true,
72
- "tool_restriction": true
73
- },
74
- "memory": "AGENTS.md",
75
- "headless": "cursor-agent -p"
76
- }
@@ -1,76 +0,0 @@
1
- {
2
- "id": "gemini",
3
- "label": "Gemini CLI",
4
- "docs": "https://geminicli.com/docs/",
5
- "detect": [
6
- "~/.gemini"
7
- ],
8
- "notes": [
9
- "Commands are TOML, not markdown: the whole prompt body becomes the `prompt` key, and the",
10
- "argument placeholder is {{args}}. Sub-directories namespace with ':'.",
11
- "Subagents ARE markdown + frontmatter (.gemini/agents), and are exposed to the main agent as",
12
- "a tool of the same name; @agent-name forces one. They cannot call other subagents.",
13
- "Hooks live in settings.json under `hooks`, event `BeforeTool`, matched on the tool name",
14
- "(run_shell_command). The envelope is {\"decision\": \"deny\", \"reason\": \u2026} with no ask tier.",
15
- "Model pins are NOT carried across: the profile names Anthropic aliases (sonnet/haiku), which are meaningless here and would either error or be silently ignored. Agents and commands inherit this runtime's own model selection instead."
16
- ],
17
- "scopes": {
18
- "global": {
19
- "root": "~/.gemini",
20
- "core": "~/.cohorte/gemini",
21
- "commands": "~/.gemini/commands",
22
- "agents": "~/.gemini/agents",
23
- "hooks": "~/.cohorte/gemini/hooks",
24
- "hooks_config": "~/.gemini/settings.json",
25
- "workflows": null,
26
- "settings": "~/.gemini/settings.json"
27
- },
28
- "project": {
29
- "root": ".gemini",
30
- "core": ".cohorte/gemini",
31
- "commands": ".gemini/commands",
32
- "agents": ".gemini/agents",
33
- "hooks": ".cohorte/gemini/hooks",
34
- "hooks_config": ".gemini/settings.json",
35
- "workflows": null,
36
- "settings": ".gemini/settings.json"
37
- }
38
- },
39
- "exclude_commands": [],
40
- "command": {
41
- "format": "toml",
42
- "ext": ".toml",
43
- "frontmatter": [
44
- "description"
45
- ],
46
- "args": "{{args}}",
47
- "invoke": "/<name>"
48
- },
49
- "agent": {
50
- "format": "md",
51
- "ext": ".md",
52
- "frontmatter": [
53
- "name",
54
- "description"
55
- ],
56
- "dispatch": "the subagent is exposed as a tool of the same name; @<name> forces it",
57
- "address": "@<name>"
58
- },
59
- "hook": {
60
- "format": "gemini",
61
- "event": "BeforeTool",
62
- "matcher": "run_shell_command",
63
- "supports_ask": false,
64
- "config_shape": "settings"
65
- },
66
- "capabilities": {
67
- "subagents": true,
68
- "hooks": true,
69
- "workflows": false,
70
- "inline_design": false,
71
- "mcp": true,
72
- "tool_restriction": false
73
- },
74
- "memory": "GEMINI.md",
75
- "headless": "gemini -p"
76
- }
@@ -1,73 +0,0 @@
1
- {
2
- "id": "opencode",
3
- "label": "OpenCode",
4
- "docs": "https://opencode.ai/docs/cli/",
5
- "detect": [
6
- "~/.config/opencode",
7
- "~/.opencode"
8
- ],
9
- "notes": [
10
- "Markdown agents in agents/ with `mode: subagent`, addressed with @<name>.",
11
- "The one runtime here with NO hook mechanism \u2014 extension is via plugins (.opencode/plugin/*.js),",
12
- "which is a different contract from a blocking PreToolUse hook. The gate therefore runs in",
13
- "explicit --check mode, which is advisory by construction.",
14
- "`opencode run` is the headless primitive; --agent selects an agent.",
15
- "Model pins are NOT carried across: the profile names Anthropic aliases (sonnet/haiku), which are meaningless here and would either error or be silently ignored. Agents and commands inherit this runtime's own model selection instead."
16
- ],
17
- "scopes": {
18
- "global": {
19
- "root": "~/.config/opencode",
20
- "core": "~/.cohorte/opencode",
21
- "commands": "~/.config/opencode/commands",
22
- "agents": "~/.config/opencode/agents",
23
- "hooks": null,
24
- "workflows": null,
25
- "settings": null
26
- },
27
- "project": {
28
- "root": ".opencode",
29
- "core": ".cohorte/opencode",
30
- "commands": ".opencode/commands",
31
- "agents": ".opencode/agents",
32
- "hooks": null,
33
- "workflows": null,
34
- "settings": null
35
- }
36
- },
37
- "exclude_commands": [],
38
- "command": {
39
- "format": "md",
40
- "ext": ".md",
41
- "frontmatter": [
42
- "description",
43
- "agent",
44
- "subtask"
45
- ],
46
- "args": "$ARGUMENTS",
47
- "invoke": "/<name>"
48
- },
49
- "agent": {
50
- "format": "md",
51
- "frontmatter": [
52
- "description",
53
- "mode"
54
- ],
55
- "defaults": {
56
- "mode": "subagent"
57
- },
58
- "dispatch": "address the subagent with @<name> and give it the full brief in one message",
59
- "address": "@<name>",
60
- "ext": ".md"
61
- },
62
- "capabilities": {
63
- "subagents": true,
64
- "hooks": false,
65
- "workflows": false,
66
- "inline_design": false,
67
- "mcp": true,
68
- "tool_restriction": false
69
- },
70
- "memory": "AGENTS.md",
71
- "headless": "opencode run",
72
- "hook": null
73
- }
@@ -1,34 +0,0 @@
1
- # HANDOFF — <surface> · <feature_id>
2
-
3
- <!-- REFERENCE COPY — not read at runtime. The AUTHORITATIVE shape is inlined in
4
- core/agents/implementer.template.md (§"Your return"), because a rendered agent must
5
- not need a second file read to know its own output format. This file exists for humans
6
- reading the core; keep it byte-aligned with the template, or delete both together.
7
-
8
- Keep it tight: the lead only acts on mismatches, test failures, remediation ticks, and TODOs.
9
- Never list files one by one — the lead has `git diff --stat`. Never paste code excerpts —
10
- a file:line reference is enough, the code is on disk. One line per item. -->
11
-
12
- ## Summary
13
-
14
- <2–4 lines: what you built and the approach>
15
-
16
- ## Migrations / schema (only if any)
17
-
18
- - `<name>` — <additive change>
19
-
20
- ## Tests
21
-
22
- - Run: <this surface's test_cmd> · result: <pass/fail + counts>
23
-
24
- ## Contract mismatches / assumptions
25
-
26
- <none, or describe — NEVER edit the contract; report here instead>
27
-
28
- ## Remediation addressed (fix loops only)
29
-
30
- - <which `## Remediation` items you fixed, by file:line>
31
-
32
- ## TODO / not done
33
-
34
- - <anything deferred, blocked, or out of scope — or "none">
@@ -1,36 +0,0 @@
1
- # BRAINSTORM RETURN — <feature title>
2
-
3
- > Paste this into `/cohorte-spec`.
4
-
5
- **One-liner:** <what we're building, in one sentence>
6
-
7
- ## Problem & value
8
-
9
- <the problem, who has it, why it matters>
10
-
11
- ## Scope
12
-
13
- - **In:** <…>
14
- - **Out (non-goals):** <…>
15
-
16
- ## Roles affected
17
-
18
- > Only if the profile has `rbac.enabled` — list the roles from `PIPELINE.md` §rbac and what each does;
19
- > explicitly note the lowest-privilege experience. Omit this section if there is no RBAC.
20
-
21
- <which roles do what>
22
-
23
- ## Rough shape
24
-
25
- - **Data:** <entities / fields touched>
26
- - **Screens:** <key screens/flows — mobile-first if the project has UI>
27
- - **Interface (rough):** <endpoints / methods we'll need — refined into the contract in /cohorte-spec>
28
-
29
- ## Risks & open questions
30
-
31
- - <risk / unknown>
32
- - <open question for /cohorte-spec to resolve>
33
-
34
- ## Panel dissent (what was contested)
35
-
36
- <the strongest disagreement the panel surfaced — so /cohorte-spec doesn't paper over it>
@@ -1,42 +0,0 @@
1
- # Decisions
2
-
3
- > The project's **transverse decision journal** — the non-obvious rules a stateless agent would
4
- > otherwise re-discover or contradict, one feature at a time. `PIPELINE.md` says *how this repo is
5
- > built* (surfaces, commands, conventions); this file says *what was decided and why*.
6
- >
7
- > **Append-only. One line per decision. No prose blocks, no code.** The bound is the point: this file
8
- > is read by `/cohorte-spec`, `/cohorte-brainstorm` and `/cohorte-audit` — the deciding stages — and by **nothing else**.
9
- > Implementers and reviewers never read it: they work from the frozen contract, which already tells
10
- > them what to do; handing them the rationale too would cost `surfaces × dispatches` tokens per
11
- > feature for a fact they cannot act on.
12
- >
13
- > Line shape (≤ ~160 chars, `·`-separated, no wrapping):
14
- >
15
- > ```
16
- > - <YYYY-MM-DD> · <area> · <the decision, imperative> — because <the reason> · <feature_id>
17
- > ```
18
- >
19
- > `<area>` is a short tag, not a path: `auth`, `data`, `api`, `ui`, `deploy`, `naming`, `surfaces`…
20
- >
21
- > **Reversing a decision** never edits or deletes a line — append a superseding one and move the old
22
- > one to `## Superseded`:
23
- >
24
- > ```
25
- > - <YYYY-MM-DD> · <area> · <the new decision> — because <reason> · supersedes <YYYY-MM-DD> <area> · <feature_id>
26
- > ```
27
- >
28
- > **Keep it bounded:** when `## Live` passes ~100 lines, move every superseded line into
29
- > `## Superseded` (the audit trail survives; the section the deciding stages actually read stays
30
- > short). Never summarize or merge live lines — a decision either holds or has been superseded.
31
- >
32
- > **What does NOT belong here:** anything the code, the tests, `PIPELINE.md` §Conventions or a spec
33
- > already states; a feature-local choice (that lives in its spec); a task, a TODO or a finding (those
34
- > are `## Remediation` and `specs/refactor-backlog.md`).
35
-
36
- ## Live
37
-
38
- <!-- newest last -->
39
-
40
- ## Superseded
41
-
42
- <!-- moved here when a line above supersedes them; never deleted -->
@@ -1,44 +0,0 @@
1
- # DESIGN BRIEF — <feature title> (`<feature_id>`)
2
-
3
- > The "spec return". This is §8 of the frozen spec, standalone — `/cohorte-spec` writes it to
4
- > `specs/design/<feature_id>.md` on freeze. Omit entirely if the project has no UI.
5
- >
6
- > **Getting it into the design tool.** By default: paste it there yourself (see `PIPELINE.md` §design).
7
- > With `design.inline: true`, `/cohorte-spec` instead offers to hand this file straight to `/design`,
8
- > which reads the codebase, matches the existing UI style, and returns editable artboards in-session.
9
- >
10
- > Inline changes who does the pasting, and nothing else. This file is still written to disk first and
11
- > is still what `/cohorte-build` reads — the artboards are an aid to the human, not an input to the
12
- > pipeline, and `/design` is a research preview that does not save them for you. Export anything worth
13
- > keeping before the session ends. If the design floor is unmet, the flag degrades to the paste-it-
14
- > yourself path with a note, never to an error: a brief that exists is worth more than a step that ran.
15
-
16
- **Goal:** <one line — what the user accomplishes>
17
-
18
- **Design system:** use the existing UI kit (`PIPELINE.md` §design → `ui_kit_path`). Mobile-first.
19
-
20
- ## Screens / views
21
-
22
- For each: purpose, who sees it (role, if RBAC), and the key elements.
23
-
24
- - **<screen name>** — <purpose> · roles: <…>
25
- - Elements: <…>
26
- - States: empty · loading · error · success
27
-
28
- ## Flows
29
-
30
- <step-by-step of the main user journey, and any role-specific variation>
31
-
32
- ## Responsive
33
-
34
- - Mobile (base): <layout>
35
- - Tablet (`md:`): <changes>
36
- - Desktop (`lg:`): <changes>
37
-
38
- ## Data shown
39
-
40
- <what fields/values appear on screen — must match the contract in spec §5>
41
-
42
- ## Notes / constraints
43
-
44
- <accessibility · copy in the profile's `ui_language` · edge cases · theming constraints>
@@ -1,86 +0,0 @@
1
- ---
2
- feature_id: patch-<slug>
3
- kind: patch # a bug fix, not a feature — /cohorte-build skips contract authoring, /cohorte-ship commits `fix(…)`
4
- title: <one line: the bug, from the user's side>
5
- status: draft # draft → frozen → in-progress → in-review → shipped · blocked (see SCHEMA.md §Spec status)
6
- severity: <critical | major | minor> # drives nothing mechanical; it is what the human triages on
7
- branch: <patch_branch_prefix><feature_id>
8
- created: <YYYY-MM-DD>
9
- reviewed_base: # merge-base sha at the last SHIP verdict — freshness-gate anchor (written by /cohorte-review)
10
- reviewed_digest: # sha256 (16 hex) of the reviewed source diff vs reviewed_base, specs excluded — /cohorte-ship re-checks
11
- design_files: [] # omit unless the fix is itself visual
12
- ---
13
-
14
- # <one line: the bug, from the user's side>
15
-
16
- ## 1. Symptom & repro
17
-
18
- > What the user sees, and the shortest deterministic path to see it. A repro nobody can run is a
19
- > hypothesis, not a bug — say so here rather than pretending otherwise.
20
-
21
- - **Observed:** …
22
- - **Expected:** …
23
- - **Repro:** 1. … 2. … 3. …
24
- - **Since / trigger:** <version, commit, or "unknown">
25
-
26
- ## 2. Impact
27
-
28
- > Who is affected, how often, and whether there is a workaround. This is what justifies the patch
29
- > jumping the feature queue — one or two lines.
30
-
31
- ## 3. Cause
32
-
33
- > Confirmed or hypothesis — label which. Name the `file:line` if you have it. If the cause is
34
- > unknown at freeze, say so: the implementer's first job is then to find it, and the review will
35
- > check that the stated cause matches the diff.
36
-
37
- ## 4. Regression test (red first)
38
-
39
- > The heart of a patch spec — it replaces §5 CONTRACT as the thing the diff is checked against.
40
- > Name the test file and what it asserts. It must fail on the current code and pass after the fix.
41
-
42
- - **Test:** `<path/to/test>` · asserts: …
43
- - **Fails today because:** …
44
-
45
- ## 5. Contract delta
46
-
47
- > Usually `none`. A fix that *changes* an existing contract entry describes the change here and
48
- > `/cohorte-build` propagates it to every surface that names it. A fix that needs **new** contract
49
- > surface area is not a patch — stop and run `/cohorte-spec` instead.
50
-
51
- `none`
52
-
53
- ## 6. Surface tasks
54
-
55
- > One `###` subsection per surface the fix touches — a patch may legitimately span several (an
56
- > unvalidated field on the API *and* the form that sends it). Each TDD: the §4 test first.
57
-
58
- ### <surface.key>
59
-
60
- - …
61
-
62
- ## 7. Out of scope
63
-
64
- > The adjacent things this patch deliberately does NOT fix. This is the section that keeps a bug fix
65
- > from turning into a refactor — the reviewer reads it before flagging what you left alone. Real but
66
- > out-of-scope findings belong in `specs/refactor-backlog.md`, not in this diff.
67
-
68
- - …
69
-
70
- ## 9. Acceptance criteria / DoD
71
-
72
- > §9, not §8 — the number is load-bearing, so don't renumber it. `review.md` and
73
- > `implementer.template.md` both name "contract §5, acceptance §9" verbatim, so a patch spec pins
74
- > those two sections to the feature spec's numbers and just has no §8 (the feature spec has no §7 —
75
- > a gap in the sequence is normal here).
76
-
77
- - [ ] The §4 regression test exists, and failed before the fix
78
- - [ ] Each touched surface's tests (TDD) green
79
- - [ ] `PIPELINE.md` commands.lint · typecheck · test green
80
- - [ ] The repro in §1 no longer reproduces
81
- - [ ] Nothing outside §6's surfaces changed
82
-
83
- ## Remediation
84
-
85
- > Filled by `/cohorte-fix` from a REVIEW REPORT; empty otherwise. Each item:
86
- > `[ ] <SEVERITY> · <file:line> · <spec-violation|quality|security> · <concrete fix>`
@@ -1,25 +0,0 @@
1
- ## <type>(<scope>): <feature title>
2
-
3
- **feature_id:** `<feature_id>` · closes/relates: <issue if any>
4
-
5
- ### What & why
6
-
7
- <2–4 lines: what this ships and the value, from the spec goal>
8
-
9
- ### Changes
10
-
11
- > One bullet per surface (from `PIPELINE.md` §surfaces), plus the shared contract.
12
-
13
- - **<surface.key>:** <what changed>
14
- - **Shared:** `<contract.path>/<feature_id>.<ext>` <(new/changed types: names only; omit if contract.enabled is false)>
15
-
16
- ### Tests
17
-
18
- - <per surface: test runner · coverage>
19
- - <PIPELINE.md commands.lint · typecheck · test> — green
20
-
21
- ### Review
22
-
23
- Verdict: **SHIP** · remediation rounds: <n>
24
-
25
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
@@ -1,38 +0,0 @@
1
- # REVIEW REPORT
2
-
3
- <!-- REFERENCE COPY — not read at runtime. The AUTHORITATIVE shape is inlined in
4
- core/agents/review.md (§"Your return"), because an agent must not need a second
5
- file read to know its own output format. This file exists for humans reading the
6
- core; keep it byte-aligned with the agent, or delete both together.
7
-
8
- Everything in an HTML comment is guidance — do NOT emit it.
9
- Verdict rules live in the review agent's instructions (SHIP = no CRITICAL/security;
10
- REVISE = ≥1 CRITICAL; BLOCK = security vulnerability).
11
- CAPPED: max 20 findings, ONE line each (severity · file:line · type · concrete fix),
12
- ZERO code excerpts — file:line is enough, the source is on disk. Overflow ⇒ keep all
13
- CRITICAL/HIGH/security, fill by severity, close with one `+<n> more …` line. -->
14
-
15
- feature_id: <feature_id> · scope: <surface.key>
16
-
17
- | Severity | Count |
18
- | -------- | ----- |
19
- | CRITICAL | 0 |
20
- | HIGH | 0 |
21
- | MEDIUM | 0 |
22
- | LOW | 0 |
23
-
24
- Verdict: <SHIP | REVISE | BLOCK>
25
-
26
- ## Findings
27
-
28
- <!-- Every finding self-sufficient for a stateless agent; order by severity; "None." if none.
29
- The line format pastes straight into the spec's `## Remediation`. -->
30
-
31
- - **[CRITICAL]** `<surface.path>/...:42` · spec-violation · <what's wrong vs spec §X> → **Fix:** <concrete change>
32
- - **[HIGH]** `<path>:88` · quality · <issue> → **Fix:** <concrete change>
33
- - **[BLOCK/security]** `<path>:line` · security · <vuln> → **Fix:** <concrete change>
34
-
35
- ## Notes
36
-
37
- <!-- ONLY the RBAC / mobile-first assessment when the profile enables them; omit the section
38
- otherwise. Never list things verified clean. -->