syntaur 0.1.14 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +5 -0
  2. package/dashboard/dist/assets/{_basePickBy-eih-KlEh.js → _basePickBy-BhaCV7eH.js} +1 -1
  3. package/dashboard/dist/assets/{_baseUniq-M21wg9ZQ.js → _baseUniq-CDPcqrs2.js} +1 -1
  4. package/dashboard/dist/assets/{arc-uKZMelpQ.js → arc-BP0RxLwl.js} +1 -1
  5. package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-CpMG5exj.js → architectureDiagram-2XIMDMQ5-BDzvaeJp.js} +1 -1
  6. package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-BHnCCKl_.js → blockDiagram-WCTKOSBZ-ZeL9mROo.js} +1 -1
  7. package/dashboard/dist/assets/{c4Diagram-IC4MRINW-B-n3zU9i.js → c4Diagram-IC4MRINW-7S5bvFLp.js} +1 -1
  8. package/dashboard/dist/assets/channel-CcB_wcgb.js +1 -0
  9. package/dashboard/dist/assets/{chunk-4BX2VUAB-ChD9Iuih.js → chunk-4BX2VUAB-Ca7R4nv5.js} +1 -1
  10. package/dashboard/dist/assets/{chunk-55IACEB6-B3vP9Psg.js → chunk-55IACEB6-flEv13FB.js} +1 -1
  11. package/dashboard/dist/assets/{chunk-FMBD7UC4-CIhWgxPS.js → chunk-FMBD7UC4-CfcYWBM6.js} +1 -1
  12. package/dashboard/dist/assets/{chunk-JSJVCQXG-DiGIV_cB.js → chunk-JSJVCQXG-Dw4yL0VS.js} +1 -1
  13. package/dashboard/dist/assets/{chunk-KX2RTZJC-DnGsx5jo.js → chunk-KX2RTZJC-B2cDe40G.js} +1 -1
  14. package/dashboard/dist/assets/{chunk-NQ4KR5QH-BFBu1fmg.js → chunk-NQ4KR5QH-LZVm0IWg.js} +1 -1
  15. package/dashboard/dist/assets/{chunk-QZHKN3VN-DYtumHth.js → chunk-QZHKN3VN-Dg0EeHNI.js} +1 -1
  16. package/dashboard/dist/assets/{chunk-WL4C6EOR-BzCrQPuw.js → chunk-WL4C6EOR-v3rXNwXc.js} +1 -1
  17. package/dashboard/dist/assets/classDiagram-VBA2DB6C-BJr38z2g.js +1 -0
  18. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BJr38z2g.js +1 -0
  19. package/dashboard/dist/assets/clone-Cfs2GUGt.js +1 -0
  20. package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-Bl8mb5eY.js → cose-bilkent-S5V4N54A-D-3JzLoS.js} +1 -1
  21. package/dashboard/dist/assets/{dagre-KLK3FWXG-BHffcOgo.js → dagre-KLK3FWXG-d_mbczhU.js} +1 -1
  22. package/dashboard/dist/assets/{diagram-E7M64L7V-Ib83qzT_.js → diagram-E7M64L7V-BUyAp8pW.js} +1 -1
  23. package/dashboard/dist/assets/{diagram-IFDJBPK2-hOdh63_T.js → diagram-IFDJBPK2-C8doXcyQ.js} +1 -1
  24. package/dashboard/dist/assets/{diagram-P4PSJMXO-D4ocLmc5.js → diagram-P4PSJMXO-BUSmHa55.js} +1 -1
  25. package/dashboard/dist/assets/{erDiagram-INFDFZHY-CHJ6zqnJ.js → erDiagram-INFDFZHY-Bn5_0LPU.js} +1 -1
  26. package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-DEz5g2Ye.js → flowDiagram-PKNHOUZH-CnEjerQM.js} +1 -1
  27. package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-BSftxDHA.js → ganttDiagram-A5KZAMGK-CL94fbyy.js} +1 -1
  28. package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-Cr3vGf07.js → gitGraphDiagram-K3NZZRJ6-4i_PeG8V.js} +1 -1
  29. package/dashboard/dist/assets/{graph-D4us8trI.js → graph-BtoFhoAd.js} +1 -1
  30. package/dashboard/dist/assets/index-DZUGYrvE.css +1 -0
  31. package/dashboard/dist/assets/index-Dv_-SxuL.js +481 -0
  32. package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-CH_jVfru.js → infoDiagram-LFFYTUFH-CdUsuNgZ.js} +1 -1
  33. package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-BdKLa5GC.js → ishikawaDiagram-PHBUUO56-BjggRlUx.js} +1 -1
  34. package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-C_SMzNGF.js → journeyDiagram-4ABVD52K-V4AgexlR.js} +1 -1
  35. package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-BeA-egRW.js → kanban-definition-K7BYSVSG-ChlylQRf.js} +1 -1
  36. package/dashboard/dist/assets/{layout-B8tDmL4j.js → layout-DLcz9AmA.js} +1 -1
  37. package/dashboard/dist/assets/{linear-CeGJyrHS.js → linear-l2xnSHze.js} +1 -1
  38. package/dashboard/dist/assets/{mermaid.core-DyEs-LPd.js → mermaid.core-DKO1ytRW.js} +4 -4
  39. package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-DCxzAr8m.js → mindmap-definition-YRQLILUH-DTmTPHrT.js} +1 -1
  40. package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CEj5dRDi.js → pieDiagram-SKSYHLDU-CwK80y8Y.js} +1 -1
  41. package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-CKfvAEQg.js → quadrantDiagram-337W2JSQ-Be1xqW_w.js} +1 -1
  42. package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-CTRqKPtJ.js → requirementDiagram-Z7DCOOCP-JcspXCs0.js} +1 -1
  43. package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-BlYbz8UR.js → sankeyDiagram-WA2Y5GQK-nJb1BInq.js} +1 -1
  44. package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-PT2t7ryQ.js → sequenceDiagram-2WXFIKYE-DUrclEgA.js} +1 -1
  45. package/dashboard/dist/assets/{stateDiagram-RAJIS63D-eDX7IUuV.js → stateDiagram-RAJIS63D-CjinnNtF.js} +1 -1
  46. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-yfclw-nM.js +1 -0
  47. package/dashboard/dist/assets/{timeline-definition-YZTLITO2-By11B1Ow.js → timeline-definition-YZTLITO2-kM-oVLNz.js} +1 -1
  48. package/dashboard/dist/assets/{treemap-KZPCXAKY-rvdLeWWV.js → treemap-KZPCXAKY-CYziFlrQ.js} +1 -1
  49. package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-Br_oZ1wv.js → vennDiagram-LZ73GAT5-DX0DbxBN.js} +1 -1
  50. package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-D-MWVqrT.js → xychartDiagram-JWTSCODW-BGqM42ZM.js} +1 -1
  51. package/dashboard/dist/index.html +2 -2
  52. package/dist/dashboard/server.d.ts +6 -1
  53. package/dist/dashboard/server.js +2427 -1089
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.js +6139 -2624
  56. package/dist/index.js.map +1 -1
  57. package/examples/playbooks/keep-records-updated.md +15 -9
  58. package/examples/playbooks/read-before-plan.md +13 -10
  59. package/examples/{sample-mission → sample-project}/_index-assignments.md +1 -1
  60. package/examples/{sample-mission → sample-project}/_index-decisions.md +1 -1
  61. package/examples/{sample-mission → sample-project}/_index-plans.md +1 -1
  62. package/examples/{sample-mission → sample-project}/_status.md +4 -4
  63. package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/assignment.md +8 -18
  64. package/examples/sample-project/assignments/design-auth-schema/comments.md +26 -0
  65. package/examples/sample-project/assignments/design-auth-schema/progress.md +20 -0
  66. package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/assignment.md +8 -18
  67. package/examples/sample-project/assignments/implement-jwt-middleware/comments.md +17 -0
  68. package/examples/sample-project/assignments/implement-jwt-middleware/progress.md +20 -0
  69. package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/assignment.md +8 -9
  70. package/examples/sample-project/assignments/write-auth-tests/comments.md +10 -0
  71. package/examples/sample-project/assignments/write-auth-tests/progress.md +10 -0
  72. package/examples/{sample-mission → sample-project}/manifest.md +3 -3
  73. package/examples/{sample-mission → sample-project}/memories/_index.md +2 -2
  74. package/examples/{sample-mission → sample-project}/memories/postgres-connection-pooling.md +1 -1
  75. package/examples/{sample-mission → sample-project}/resources/_index.md +1 -1
  76. package/package.json +5 -3
  77. package/platforms/README.md +7 -7
  78. package/platforms/claude-code/README.md +1 -1
  79. package/platforms/claude-code/agents/syntaur-expert.md +94 -66
  80. package/platforms/claude-code/commands/doctor-syntaur/doctor-syntaur.md +112 -0
  81. package/platforms/claude-code/commands/track-session/track-session.md +8 -8
  82. package/platforms/claude-code/hooks/enforce-boundaries.sh +4 -4
  83. package/platforms/claude-code/hooks/hooks.json +1 -1
  84. package/platforms/claude-code/hooks/session-cleanup.sh +5 -5
  85. package/platforms/claude-code/references/file-ownership.md +20 -8
  86. package/platforms/claude-code/references/protocol-summary.md +24 -9
  87. package/platforms/claude-code/skills/complete-assignment/SKILL.md +35 -17
  88. package/platforms/claude-code/skills/create-assignment/SKILL.md +22 -19
  89. package/platforms/claude-code/skills/grab-assignment/SKILL.md +56 -49
  90. package/platforms/claude-code/skills/plan-assignment/SKILL.md +57 -10
  91. package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +38 -24
  92. package/platforms/codex/.codex-plugin/plugin.json +3 -3
  93. package/platforms/codex/README.md +1 -1
  94. package/platforms/codex/adapters/AGENTS.md.template +3 -3
  95. package/platforms/codex/agents/openai.yaml +2 -2
  96. package/platforms/codex/agents/syntaur-operator.md +58 -43
  97. package/platforms/codex/references/file-ownership.md +19 -8
  98. package/platforms/codex/references/protocol-summary.md +28 -9
  99. package/platforms/codex/scripts/enforce-boundaries.sh +2 -2
  100. package/platforms/codex/scripts/session-cleanup.sh +2 -2
  101. package/platforms/codex/skills/complete-assignment/SKILL.md +7 -6
  102. package/platforms/codex/skills/create-assignment/SKILL.md +18 -12
  103. package/platforms/codex/skills/grab-assignment/SKILL.md +30 -20
  104. package/platforms/codex/skills/plan-assignment/SKILL.md +19 -11
  105. package/platforms/codex/skills/syntaur-protocol/SKILL.md +46 -28
  106. package/platforms/cursor/README.md +1 -1
  107. package/platforms/cursor/adapters/syntaur-protocol.mdc +1 -1
  108. package/platforms/opencode/README.md +1 -1
  109. package/platforms/opencode/adapters/opencode.json.template +1 -1
  110. package/dashboard/dist/assets/channel-DVBgSlOI.js +0 -1
  111. package/dashboard/dist/assets/classDiagram-VBA2DB6C-B7dxBacd.js +0 -1
  112. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-B7dxBacd.js +0 -1
  113. package/dashboard/dist/assets/clone-DAOrHcCC.js +0 -1
  114. package/dashboard/dist/assets/index-AXntWS_w.css +0 -1
  115. package/dashboard/dist/assets/index-CEMjexkj.js +0 -460
  116. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO--yuSBnLh.js +0 -1
  117. package/examples/sample-mission/agent.md +0 -33
  118. package/examples/sample-mission/claude.md +0 -13
  119. package/platforms/claude-code/skills/create-mission/SKILL.md +0 -51
  120. package/platforms/codex/skills/create-mission/SKILL.md +0 -35
  121. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/decision-record.md +0 -0
  122. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/handoff.md +0 -0
  123. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/plan.md +0 -0
  124. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/scratchpad.md +0 -0
  125. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/decision-record.md +0 -0
  126. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/handoff.md +0 -0
  127. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/plan.md +0 -0
  128. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/scratchpad.md +0 -0
  129. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/decision-record.md +0 -0
  130. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/handoff.md +0 -0
  131. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/plan.md +0 -0
  132. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/scratchpad.md +0 -0
  133. /package/examples/{sample-mission/mission.md → sample-project/project.md} +0 -0
  134. /package/examples/{sample-mission → sample-project}/resources/auth-requirements.md +0 -0
@@ -6,7 +6,7 @@ model: opus
6
6
  maxTurns: 20
7
7
  ---
8
8
 
9
- You are the authoritative expert on the Syntaur platform — the markdown-based, filesystem-hosted protocol for multi-agent mission coordination. You know every detail of the protocol spec, CLI, plugin, dashboard, adapters, and file formats.
9
+ You are the authoritative expert on the Syntaur platform — the markdown-based, filesystem-hosted protocol for multi-agent project coordination. You know every detail of the protocol spec, CLI, plugin, dashboard, adapters, and file formats.
10
10
 
11
11
  When answering questions, read the actual source files rather than relying solely on this prompt. The codebase is your ground truth.
12
12
 
@@ -42,20 +42,20 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
42
42
  ~/.syntaur/
43
43
  config.md # Global config (optional)
44
44
  syntaur.db # SQLite database for agent sessions
45
- missions/
46
- <mission-slug>/
45
+ projects/
46
+ <project-slug>/
47
47
  manifest.md # Derived: root navigation
48
- mission.md # Human-authored: goal, context, success criteria
49
- agent.md # Human-authored: universal agent instructions
50
- claude.md # Human-authored: Claude Code-specific instructions
48
+ project.md # Human-authored: goal, context, success criteria
51
49
  _index-assignments.md # Derived: assignment summary table
52
50
  _index-plans.md # Derived: plan status summary
53
51
  _index-decisions.md # Derived: decision record summary
54
- _status.md # Derived: mission status rollup
52
+ _status.md # Derived: project status rollup
55
53
  assignments/
56
54
  <assignment-slug>/
57
- assignment.md # Agent-writable: source of truth for state
58
- plan.md # Agent-writable: implementation plan
55
+ assignment.md # Agent-writable: source of truth for state (includes ## Todos)
56
+ plan*.md # Agent-writable: versioned implementation plans (0+, optional)
57
+ progress.md # Agent-writable, append-only: timestamped progress log
58
+ comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
59
59
  scratchpad.md # Agent-writable: working notes
60
60
  handoff.md # Agent-writable: append-only handoff log
61
61
  decision-record.md # Agent-writable: append-only decision log
@@ -65,6 +65,15 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
65
65
  memories/
66
66
  _index.md # Derived
67
67
  <memory-slug>.md # Shared-writable
68
+ assignments/
69
+ <assignment-id>/ # Standalone assignments — folder = UUID, project: null, slug display-only
70
+ assignment.md
71
+ plan*.md
72
+ progress.md
73
+ comments.md
74
+ scratchpad.md
75
+ handoff.md
76
+ decision-record.md
68
77
  ```
69
78
 
70
79
  ---
@@ -72,19 +81,22 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
72
81
  ## File Ownership Model
73
82
 
74
83
  ### Human-Authored (READ-ONLY for agents)
75
- - `mission.md` — mission overview, goal, context, success criteria
76
- - `agent.md` — universal agent instructions
77
- - `claude.md` — Claude Code-specific instructions
84
+ - `project.md` — project overview, goal, context, success criteria
78
85
 
79
86
  ### Agent-Writable (single-writer per assignment)
80
- - `assignment.md` — source of truth for assignment state
81
- - `plan.md` — implementation plan
87
+ - `assignment.md` — source of truth for assignment state (includes `## Todos` checklist). `## Todos` is also the landing spot for cross-assignment requests.
88
+ - `plan*.md` — versioned implementation plans (optional, one per `## Todos` entry: `plan.md`, `plan-v2.md`, ...)
89
+ - `progress.md` — append-only timestamped progress log (newest first). Replaces the old `## Progress` body section.
82
90
  - `scratchpad.md` — unstructured working notes
83
91
  - `handoff.md` — append-only handoff log
84
92
  - `decision-record.md` — append-only decision log
85
93
 
86
94
  Only the assigned agent may write to its own assignment folder.
87
95
 
96
+ ### CLI-Mediated Shared-Writable
97
+ - `comments.md` — threaded questions/notes/feedback. Writes via `syntaur comment <slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>]`. Never edit directly.
98
+ - Another assignment's `## Todos` — writes via `syntaur request <source> <target> "text"`. Appends annotated `(from: <source>)`.
99
+
88
100
  ### Shared-Writable (any agent or human)
89
101
  - `resources/<slug>.md` — reference material
90
102
  - `memories/<slug>.md` — learnings discovered
@@ -128,8 +140,8 @@ Only the assigned agent may write to its own assignment folder.
128
140
  - `pending` + unmet dependencies = structural wait (automatic, no action needed)
129
141
  - `blocked` = runtime obstacle requiring human intervention (must set `blockedReason`)
130
142
 
131
- ### Mission Status Rollup (computed, first-match-wins)
132
- 1. `archived: true` in mission.md → `archived`
143
+ ### Project Status Rollup (computed, first-match-wins)
144
+ 1. `archived: true` in project.md → `archived`
133
145
  2. ALL assignments `completed` → `completed`
134
146
  3. ANY `in_progress` or `review` → `active`
135
147
  4. ANY `failed` → `failed`
@@ -151,31 +163,37 @@ Only the assigned agent may write to its own assignment folder.
151
163
  | `syntaur setup-adapter <framework>` | Generate adapter files for cursor, codex, or opencode |
152
164
  | `syntaur uninstall [--all]` | Remove plugins and optionally `~/.syntaur` data |
153
165
 
154
- ### Mission & Assignment Creation
166
+ ### Project & Assignment Creation
167
+ | Command | Description |
168
+ |---------|-------------|
169
+ | `syntaur create-project <title> [--slug S] [--dir D]` | Create new project with full scaffolding |
170
+ | `syntaur create-assignment <title> --project M [--priority P] [--depends-on D] [--slug S] [--type T]` | Create assignment in a project |
171
+ | `syntaur create-assignment <title> --one-off [--type T]` | Create standalone assignment at `~/.syntaur/assignments/<uuid>/` (project: null, slug display-only) |
172
+
173
+ ### Coordination (CLI-mediated writes)
155
174
  | Command | Description |
156
175
  |---------|-------------|
157
- | `syntaur create-mission <title> [--slug S] [--dir D]` | Create new mission with full scaffolding |
158
- | `syntaur create-assignment <title> --mission M [--priority P] [--depends-on D] [--slug S]` | Create assignment in a mission |
159
- | `syntaur create-assignment <title> --one-off` | Create standalone one-off assignment |
176
+ | `syntaur comment <slug-or-uuid> "body" --type question\|note\|feedback [--reply-to <id>] [--project <slug>]` | Append to `comments.md`. Questions carry a resolve flag toggleable in the dashboard. |
177
+ | `syntaur request <target> "text" [--from <source>] [--project <slug>]` | Append a todo to another assignment's `## Todos`, annotated `(from: <source>)`. |
160
178
 
161
179
  ### State Transitions
162
180
  | Command | Description |
163
181
  |---------|-------------|
164
- | `syntaur assign <slug> --agent <name> --mission <mission>` | Set assignee |
165
- | `syntaur start <slug> --mission <mission>` | pending → in_progress |
166
- | `syntaur review <slug> --mission <mission>` | in_progress → review |
167
- | `syntaur complete <slug> --mission <mission>` | in_progress/review → completed |
168
- | `syntaur block <slug> --mission <mission> --reason <text>` | → blocked |
169
- | `syntaur unblock <slug> --mission <mission>` | blocked → in_progress |
170
- | `syntaur fail <slug> --mission <mission>` | → failed |
171
- | `syntaur reopen <slug> --mission <mission>` | completed/failed → in_progress |
182
+ | `syntaur assign <slug> --agent <name> --project <project>` | Set assignee |
183
+ | `syntaur start <slug> --project <project>` | pending → in_progress |
184
+ | `syntaur review <slug> --project <project>` | in_progress → review |
185
+ | `syntaur complete <slug> --project <project>` | in_progress/review → completed |
186
+ | `syntaur block <slug> --project <project> --reason <text>` | → blocked |
187
+ | `syntaur unblock <slug> --project <project>` | blocked → in_progress |
188
+ | `syntaur fail <slug> --project <project>` | → failed |
189
+ | `syntaur reopen <slug> --project <project>` | completed/failed → in_progress |
172
190
 
173
191
  ### Session Tracking
174
192
  | Command | Description |
175
193
  |---------|-------------|
176
- | `syntaur track-session --mission M --assignment A --agent N` | Register agent session |
194
+ | `syntaur track-session --project M --assignment A --agent N` | Register agent session |
177
195
 
178
- All commands support `--dir <path>` to override the default `~/.syntaur/missions/` directory.
196
+ All commands support `--dir <path>` to override the default `~/.syntaur/projects/` directory.
179
197
 
180
198
  ---
181
199
 
@@ -192,7 +210,7 @@ plugin/
192
210
  skills/
193
211
  syntaur-protocol/SKILL.md # Core protocol rules (background)
194
212
  grab-assignment/SKILL.md # Claim a pending assignment
195
- create-mission/SKILL.md # Create new mission
213
+ create-project/SKILL.md # Create new project
196
214
  create-assignment/SKILL.md # Create new assignment
197
215
  plan-assignment/SKILL.md # Write implementation plan
198
216
  complete-assignment/SKILL.md # Handoff and complete
@@ -212,17 +230,17 @@ plugin/
212
230
  | Skill | Trigger | Purpose |
213
231
  |-------|---------|---------|
214
232
  | `/syntaur-protocol` | Background — auto-loaded when working with Syntaur files | Core write boundary rules and protocol knowledge |
215
- | `/grab-assignment` | User says "grab assignment" or starts work on a mission | Discover pending assignments, claim one, create context.json |
216
- | `/create-mission` | User wants to create a new mission | Run CLI scaffolding, guide through editing mission files |
217
- | `/create-assignment` | User wants to add an assignment to a mission | Create assignment with all supporting files |
218
- | `/plan-assignment` | User wants to plan current assignment | Explore workspace, write detailed plan.md |
233
+ | `/grab-assignment` | User says "grab assignment" or starts work on a project | Discover pending assignments, claim one, create context.json |
234
+ | `/create-project` | User wants to create a new project | Run CLI scaffolding, guide through editing project files |
235
+ | `/create-assignment` | User wants to add an assignment to a project | Create assignment with all supporting files |
236
+ | `/plan-assignment` | User wants to plan current assignment | Explore workspace, write the next `plan-v<N>.md`, append a linked todo to `## Todos` (supersede prior plan todo) |
219
237
  | `/complete-assignment` | User is done with assignment work | Verify criteria, write handoff, transition state, close session |
220
238
 
221
239
  ### Hooks
222
240
 
223
241
  | Hook | Event | Behavior |
224
242
  |------|-------|----------|
225
- | PostToolUse: ExitPlanMode | User exits plan mode | Prompts to update plan.md with the plan just created |
243
+ | PostToolUse: ExitPlanMode | User exits plan mode | Prompts to write the plan to the next unused `plan-v<N>.md` (or `plan.md` if none exists) and append a linked todo in the `## Todos` section of `assignment.md` |
226
244
  | SessionEnd | Claude Code session exits | Runs session-cleanup.sh to mark session as stopped |
227
245
  | PreToolUse: enforce-boundaries | Edit/Write/MultiEdit | Validates target path is within assignment boundaries |
228
246
 
@@ -240,27 +258,27 @@ syntaur # Dashboard is the default command
240
258
  ```
241
259
 
242
260
  ### Features
243
- - **Overview page:** Mission stats, quick actions, attention items
244
- - **Mission detail:** Assignment listing, resources, memories, status
261
+ - **Overview page:** Project stats, quick actions, attention items
262
+ - **Project detail:** Assignment listing, resources, memories, status
245
263
  - **Assignment detail:** Full assignment view with all fields, criteria checklist
246
264
  - **Kanban board:** Drag assignments between status columns
247
265
  - **Agent sessions:** Track active/completed/stopped agent sessions
248
266
  - **Server tracking:** Discover running dev servers via tmux session scanning
249
267
  - **Real-time updates:** WebSocket pushes file changes to the browser
250
- - **Markdown editing:** Edit mission.md, assignment.md, plan.md, scratchpad.md in-browser
268
+ - **Markdown editing:** Edit project.md, assignment.md, plan files, scratchpad.md in-browser
251
269
  - **Attention queue:** Highlights blocked, failed, and review-pending items
252
270
 
253
271
  ### API Endpoints
254
272
  - `GET /api/overview` — Dashboard summary stats
255
- - `GET /api/missions` — List all missions
256
- - `GET /api/missions/:slug` — Mission detail with assignments
257
- - `GET /api/missions/:slug/assignments/:aslug` — Assignment detail
258
- - `GET /api/assignments` — All assignments across missions
273
+ - `GET /api/projects` — List all projects
274
+ - `GET /api/projects/:slug` — Project detail with assignments
275
+ - `GET /api/projects/:slug/assignments/:aslug` — Assignment detail
276
+ - `GET /api/assignments` — All assignments across projects
259
277
  - `GET /api/attention` — Items needing attention
260
278
  - `GET /api/agent-sessions` — Agent session list
261
- - `POST /api/missions` — Create mission
262
- - `POST /api/missions/:slug/assignments` — Create assignment
263
- - `PATCH /api/missions/:slug/assignments/:aslug` — Update assignment
279
+ - `POST /api/projects` — Create project
280
+ - `POST /api/projects/:slug/assignments` — Create assignment
281
+ - `PATCH /api/projects/:slug/assignments/:aslug` — Update assignment
264
282
  - WebSocket at `/ws` for real-time file change notifications
265
283
 
266
284
  ### Architecture
@@ -276,9 +294,9 @@ syntaur # Dashboard is the default command
276
294
  Syntaur supports Cursor, Codex, and OpenCode via generated adapter files.
277
295
 
278
296
  ```bash
279
- syntaur setup-adapter cursor --mission <slug> --assignment <slug>
280
- syntaur setup-adapter codex --mission <slug> --assignment <slug>
281
- syntaur setup-adapter opencode --mission <slug> --assignment <slug>
297
+ syntaur setup-adapter cursor --project <slug> --assignment <slug>
298
+ syntaur setup-adapter codex --project <slug> --assignment <slug>
299
+ syntaur setup-adapter opencode --project <slug> --assignment <slug>
282
300
  ```
283
301
 
284
302
  | Framework | Generated Files | Discovery |
@@ -295,25 +313,29 @@ Adapters embed protocol knowledge (write boundaries, lifecycle states, CLI comma
295
313
 
296
314
  ### Frontmatter Fields by File Type
297
315
 
298
- **assignment.md:** id, slug, title, status, priority, created, updated, assignee, externalIds, dependsOn, blockedReason, workspace (repository, worktreePath, branch, parentBranch), tags
316
+ **assignment.md:** id, slug, title, **project (slug or null)**, **type (string or null)**, status, priority, created, updated, assignee, externalIds, dependsOn, blockedReason, workspace (repository, worktreePath, branch, parentBranch), tags
299
317
 
300
- **plan.md:** assignment, status (draft/approved/in_progress/completed), created, updated
318
+ **plan files (plan.md, plan-v2.md, ...):** assignment, status (draft/approved/in_progress/completed), created, updated — zero or more per assignment, each linked from a todo in `assignment.md`'s `## Todos` section
319
+
320
+ **progress.md:** assignment, entryCount, generated, updated — body is reverse-chron `## <timestamp>` entries
321
+
322
+ **comments.md:** assignment, entryCount, generated, updated — body entries are `## <id>` with structured metadata lines (Recorded, Author, Type, optional Reply to, optional Resolved)
301
323
 
302
324
  **handoff.md:** assignment, updated, handoffCount
303
325
 
304
326
  **decision-record.md:** assignment, updated, decisionCount
305
327
 
306
- **mission.md:** id, slug, title, archived, archivedAt, archivedReason, created, updated, externalIds, tags
328
+ **project.md:** id, slug, title, archived, archivedAt, archivedReason, created, updated, externalIds, tags
307
329
 
308
- **manifest.md:** version, mission, generated
330
+ **manifest.md:** version, project, generated
309
331
 
310
- **_status.md:** mission, generated, status, progress (total/completed/in_progress/blocked/pending/review/failed), needsAttention (blockedCount/failedCount/unansweredQuestions)
332
+ **_status.md:** project, generated, status, progress (total/completed/in_progress/blocked/pending/review/failed), needsAttention (blockedCount/failedCount/**openQuestions**). `openQuestions` is counted from every assignment's `comments.md` (entries where `Type: question` and `Resolved: false` or absent).
311
333
 
312
334
  ### Conventions
313
335
  - **Timestamps:** RFC 3339 / ISO 8601 with UTC: `2026-03-18T14:30:00Z`
314
336
  - **Paths:** Absolute expanded form in YAML (never `~`), relative in markdown links
315
- - **Slugs:** Lowercase, hyphen-separated, match folder names
316
- - **Protocol version:** `"1.0"` (string, not number)
337
+ - **Slugs:** Lowercase, hyphen-separated, match folder names (project-nested). For standalone assignments, the folder is named by UUID and `slug` is display-only.
338
+ - **Protocol version:** `"2.0"` (string, not number)
317
339
 
318
340
  ---
319
341
 
@@ -324,12 +346,12 @@ Adapters embed protocol knowledge (write boundaries, lifecycle states, CLI comma
324
346
  # 1. Run guided setup
325
347
  npx syntaur@latest setup
326
348
 
327
- # 2. Create your first mission
328
- syntaur create-mission "My First Mission"
349
+ # 2. Create your first project
350
+ syntaur create-project "My First Project"
329
351
 
330
352
  # 3. Create assignments
331
- syntaur create-assignment "Design the schema" --mission my-first-mission --priority high
332
- syntaur create-assignment "Implement the API" --mission my-first-mission --depends-on design-the-schema
353
+ syntaur create-assignment "Design the schema" --project my-first-project --priority high
354
+ syntaur create-assignment "Implement the API" --project my-first-project --depends-on design-the-schema
333
355
 
334
356
  # 4. Start the dashboard
335
357
  syntaur dashboard
@@ -338,7 +360,7 @@ syntaur dashboard
338
360
  ### Agent Workflow
339
361
  ```bash
340
362
  # In Claude Code, use skills:
341
- /grab-assignment my-first-mission # Claim a pending assignment
363
+ /grab-assignment my-first-project # Claim a pending assignment
342
364
  /plan-assignment # Write implementation plan
343
365
  # ... do the work ...
344
366
  /complete-assignment # Handoff and complete
@@ -351,10 +373,10 @@ syntaur dashboard
351
373
  Created by `/grab-assignment` in the current working directory. Contains:
352
374
  ```json
353
375
  {
354
- "missionSlug": "my-first-mission",
376
+ "projectSlug": "my-first-project",
355
377
  "assignmentSlug": "design-the-schema",
356
- "missionDir": "/Users/you/.syntaur/missions/my-first-mission",
357
- "assignmentDir": "/Users/you/.syntaur/missions/my-first-mission/assignments/design-the-schema",
378
+ "projectDir": "/Users/you/.syntaur/projects/my-first-project",
379
+ "assignmentDir": "/Users/you/.syntaur/projects/my-first-project/assignments/design-the-schema",
358
380
  "workspaceRoot": "/Users/you/projects/my-app",
359
381
  "title": "Design the schema",
360
382
  "branch": "feature/design-the-schema",
@@ -370,13 +392,19 @@ Read by `/plan-assignment`, `/complete-assignment`, and the write boundary hook
370
392
  ## Common Questions
371
393
 
372
394
  **Q: How do I see what assignments are available?**
373
- A: Use `/grab-assignment <mission-slug>` — it lists pending assignments. Or check the dashboard, or read `_index-assignments.md`.
395
+ A: Use `/grab-assignment <project-slug>` — it lists pending assignments. Or check the dashboard, or read `_index-assignments.md`.
374
396
 
375
397
  **Q: Can two agents work on the same assignment?**
376
398
  A: No. Single-writer guarantee — one agent per assignment folder. Use separate assignments for parallel work.
377
399
 
378
400
  **Q: What if I need to ask the human a question?**
379
- A: Add it to the Q&A section of assignment.md. Do NOT set status to `blocked` for questions — `blocked` is for runtime obstacles only.
401
+ A: Run `syntaur comment <slug> "question text" --type question`. It appends to `comments.md`, which replaces the old `## Questions & Answers` body section. The question rolls up into `_status.md`'s `openQuestions` counter and shows on the dashboard. Do NOT set status to `blocked` for questions — `blocked` is for runtime obstacles only.
402
+
403
+ **Q: What goes in `progress.md` vs `handoff.md`?**
404
+ A: `progress.md` is a continuous reverse-chron log of what you've done — append an entry per meaningful work unit. `handoff.md` is only written when you hand off work (to another agent or human), and summarizes the state at that transition.
405
+
406
+ **Q: How do I route work to another assignment without breaking the single-writer rule?**
407
+ A: Run `syntaur request <target> "text"` — it appends a todo to the target's `## Todos` annotated `(from: <source>)`. This is a CLI-mediated exception to the single-writer rule.
380
408
 
381
409
  **Q: How do indexes get updated?**
382
410
  A: Derived files are rebuilt by tooling. They are projections of assignment frontmatter. When divergence occurs, re-run rebuild.
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: doctor-syntaur
3
+ description: Diagnose and help recover from common Syntaur bad states
4
+ arguments:
5
+ - name: args
6
+ description: "Optional flags: --verbose, --only <check-id>"
7
+ required: false
8
+ ---
9
+
10
+ # /doctor-syntaur
11
+
12
+ Run `syntaur doctor` and help the user interpret the results, remediating issues where appropriate. Respect Syntaur write boundaries throughout.
13
+
14
+ ## Usage
15
+
16
+ - `/doctor-syntaur` — run all checks
17
+ - `/doctor-syntaur --verbose` — include passing checks in the summary
18
+ - `/doctor-syntaur --only <check-id>` — re-run one check after remediation (e.g. `--only assignment.workspace-missing`)
19
+
20
+ ## Instructions
21
+
22
+ When the user runs this command:
23
+
24
+ ### Step 1: Parse arguments
25
+
26
+ From the argument string, extract optional flags:
27
+
28
+ - `--verbose` — pass through to the CLI and include passing checks in the summary
29
+ - `--only <check-id>` — pass through to the CLI to restrict to a single check
30
+
31
+ ### Step 2: Run the CLI and capture output + exit code
32
+
33
+ Exit code 1 is expected (means issues were found). Do NOT let a non-zero exit fail the turn. Use a pattern like:
34
+
35
+ ```bash
36
+ output=$(syntaur doctor --json [--only <check-id>] 2>&1); exit_code=$?
37
+ ```
38
+
39
+ Then parse `$output` as JSON. If the JSON fails to parse, surface the raw output — that means the CLI itself broke.
40
+
41
+ ### Step 3: Handle exit codes and severity
42
+
43
+ - **Exit 2** — Syntaur isn't initialized. Tell the user to run `syntaur init` and stop.
44
+ - **Exit 1** (one or more errors) — continue to step 4; report both errors and warnings.
45
+ - **Exit 0 and `summary.warn === 0`** — everything passed. Say so in one line (e.g. "All checks passed — no issues found.") and stop.
46
+ - **Exit 0 and `summary.warn > 0`** — no errors but warnings exist. Continue to step 4; report the warnings. The CLI only exits 1 on errors, so warn-only runs still need to be surfaced to the user.
47
+
48
+ ### Step 4: Summarize results
49
+
50
+ Group the `checks` array from the JSON by `category`. For each category:
51
+
52
+ - Show errors first, then warnings.
53
+ - Skip passes unless `--verbose` was passed.
54
+ - Always include the `check.id` so the user can reference a specific issue in follow-up.
55
+
56
+ Format each issue like:
57
+
58
+ ```
59
+ [category] check.id — title
60
+ detail line
61
+ affected: path (truncate long lists)
62
+ fix: remediation.suggestion
63
+ ```
64
+
65
+ ### Step 5: Establish your write boundary (before offering any edit)
66
+
67
+ Doctor reports issues from anywhere under `~/.syntaur/`. You are NOT allowed to edit most of those files. Before offering any remediation edit, compute your current write boundary:
68
+
69
+ 1. Read `.syntaur/context.json` in the current working directory (the same `cwd` you ran the CLI from).
70
+ 2. If the file does not exist, or exists but has no assignment fields (`projectSlug`, `assignmentSlug`, `projectDir`, `assignmentDir`):
71
+ - You have NO assignment context.
72
+ - Your only permitted edit target is the literal file `<cwd>/.syntaur/context.json` itself.
73
+ - For every other issue, show the `suggestion` text verbatim and do NOT offer to edit.
74
+ 3. If the file has assignment fields, record these paths:
75
+ - `assignmentDir` — your per-assignment write zone.
76
+ - `workspaceRoot` — your code write zone (may be absent).
77
+ - `<cwd>/.syntaur/context.json` — always editable.
78
+
79
+ ### Step 6: Offer remediation (issue by issue)
80
+
81
+ For each error or warning, determine what kind of offer is appropriate.
82
+
83
+ **First, use `remediation.kind`:**
84
+
85
+ - **`auto-safe`** — offer to run `syntaur doctor --fix --only <id>`. Ask the user to confirm before running. (v1 has no auto-safe remediations yet — this is a placeholder for future versions.)
86
+ - **`auto-destructive`** — never auto-run. Describe the impact and wait for the user.
87
+ - **`manual`** — apply the path check below before offering an edit.
88
+
89
+ **For `manual` remediations, compare each path in `affected[]` against your boundary from Step 5:**
90
+
91
+ 1. Let `allowed = [assignmentDir, workspaceRoot, <cwd>/.syntaur/context.json]` (dropping any undefined entries).
92
+ 2. A path is within boundary if and only if it equals `<cwd>/.syntaur/context.json` OR it is a strict path-prefix descendant of `assignmentDir` or `workspaceRoot`. Use path-segment comparison, not substring matching.
93
+ 3. If **every** path in `affected[]` is within boundary, you may offer to make the edit. Show a diff first; wait for confirmation; then write.
94
+ 4. If **any** path in `affected[]` is outside your boundary, do NOT offer to edit. Show the `suggestion` text verbatim and tell the user they or another tool must apply it.
95
+
96
+ **Hard stop list — never write to these regardless of what doctor reports:**
97
+
98
+ - `project.md`, `agent.md`, `claude.md`, `manifest.md`, `_status.md`
99
+ - Any file starting with `_index-` or ending in `_index.md`
100
+ - Any file in a project's `resources/` or `memories/` directory
101
+ - Any file inside a different assignment's folder (i.e. `projects/<m>/assignments/<other>/...` where `<other> !== assignmentSlug`)
102
+
103
+ ### Step 7: Suggest a follow-up
104
+
105
+ After proposing fixes, suggest the user re-run `/doctor-syntaur --only <check-id>` (or the whole command) to verify that issues resolved.
106
+
107
+ ## Guardrails
108
+
109
+ - Always invoke `syntaur doctor --json`. Do not re-derive checks from the filesystem yourself.
110
+ - Never pass `--fix` without explicit user confirmation.
111
+ - Always show each issue's `check.id` so the user can reference it.
112
+ - If the CLI output isn't valid JSON, show the raw output and stop — something is wrong with the install.
@@ -3,20 +3,20 @@ name: track-session
3
3
  description: Register this Claude Code session as an agent session in the Syntaur dashboard
4
4
  arguments:
5
5
  - name: args
6
- description: "Optional flags: --description, --mission, --assignment"
6
+ description: "Optional flags: --description, --project, --assignment"
7
7
  required: false
8
8
  ---
9
9
 
10
10
  # /track-session
11
11
 
12
- Register the current Claude Code session as an agent session in the Syntaur dashboard. Works standalone or linked to a mission/assignment.
12
+ Register the current Claude Code session as an agent session in the Syntaur dashboard. Works standalone or linked to a project/assignment.
13
13
 
14
14
  ## Usage
15
15
 
16
16
  - `/track-session` — register a standalone session
17
17
  - `/track-session --description "exploring auth patterns"` — with a description
18
- - `/track-session --mission <slug> --assignment <slug>` — linked to a mission
19
- - `/track-session --description "auth work" --mission <slug> --assignment <slug>` — both
18
+ - `/track-session --project <slug> --assignment <slug>` — linked to a project
19
+ - `/track-session --description "auth work" --project <slug> --assignment <slug>` — both
20
20
 
21
21
  ## Instructions
22
22
 
@@ -26,7 +26,7 @@ When the user runs this command:
26
26
 
27
27
  Extract optional flags from the argument string:
28
28
  - `--description "<text>"` or `--description <text>` — session description
29
- - `--mission <slug>` — mission to link to
29
+ - `--project <slug>` — project to link to
30
30
  - `--assignment <slug>` — assignment to link to
31
31
 
32
32
  ### Step 2: Run the CLI command
@@ -34,14 +34,14 @@ Extract optional flags from the argument string:
34
34
  Run the track-session CLI command via Bash (use `dangerouslyDisableSandbox: true` since it writes to `~/.syntaur/`):
35
35
 
36
36
  ```bash
37
- syntaur track-session --agent claude --path $(pwd) [--description "<text>"] [--mission <slug>] [--assignment <slug>]
37
+ syntaur track-session --agent claude --path $(pwd) [--description "<text>"] [--project <slug>] [--assignment <slug>]
38
38
  ```
39
39
 
40
40
  ### Step 3: Parse the session ID
41
41
 
42
42
  The CLI output will be one of:
43
43
  - `Registered standalone agent session <sessionId>.`
44
- - `Registered agent session <sessionId> for <assignment> in <mission>.`
44
+ - `Registered agent session <sessionId> for <assignment> in <project>.`
45
45
 
46
46
  Extract the session ID from the output.
47
47
 
@@ -62,4 +62,4 @@ Write the session ID to `.syntaur/context.json` so the SessionEnd hook can mark
62
62
  Tell the user:
63
63
  - The session was registered (include the short session ID)
64
64
  - It will be auto-stopped when this conversation ends
65
- - If linked to a mission, mention which mission/assignment
65
+ - If linked to a project, mention which project/assignment
@@ -64,7 +64,7 @@ fi
64
64
 
65
65
  # --- Step 8: Read context ---
66
66
  ASSIGNMENT_DIR=$(jq -r '.assignmentDir // empty' "$CONTEXT_FILE" 2>/dev/null)
67
- MISSION_DIR=$(jq -r '.missionDir // empty' "$CONTEXT_FILE" 2>/dev/null)
67
+ MISSION_DIR=$(jq -r '.projectDir // empty' "$CONTEXT_FILE" 2>/dev/null)
68
68
  WORKSPACE_ROOT=$(jq -r '.workspaceRoot // empty' "$CONTEXT_FILE" 2>/dev/null)
69
69
 
70
70
  if [ -z "$ASSIGNMENT_DIR" ] || [ -z "$MISSION_DIR" ]; then
@@ -88,7 +88,7 @@ if [[ "$FILE_PATH" == "$ASSIGNMENT_DIR"/* ]]; then
88
88
  allow_and_exit
89
89
  fi
90
90
 
91
- # Allow: files in mission resources/ directory (but NOT derived _index.md)
91
+ # Allow: files in project resources/ directory (but NOT derived _index.md)
92
92
  if [[ "$FILE_PATH" == "$MISSION_DIR/resources/"* ]]; then
93
93
  BASENAME=$(basename "$FILE_PATH")
94
94
  if [[ "$BASENAME" == _* ]]; then
@@ -99,7 +99,7 @@ if [[ "$FILE_PATH" == "$MISSION_DIR/resources/"* ]]; then
99
99
  fi
100
100
  fi
101
101
 
102
- # Allow: files in mission memories/ directory (but NOT derived _index.md)
102
+ # Allow: files in project memories/ directory (but NOT derived _index.md)
103
103
  if [[ "$FILE_PATH" == "$MISSION_DIR/memories/"* ]]; then
104
104
  BASENAME=$(basename "$FILE_PATH")
105
105
  if [[ "$BASENAME" == _* ]]; then
@@ -122,7 +122,7 @@ if [ -n "$WORKSPACE_ROOT" ] && [[ "$FILE_PATH" == "$WORKSPACE_ROOT"/* ]]; then
122
122
  fi
123
123
 
124
124
  # --- Step 11: Block the write ---
125
- REASON="Syntaur write boundary violation: Cannot write to '$FILE_PATH'. Allowed paths: assignment dir ($ASSIGNMENT_DIR), mission resources/memories, workspace ($WORKSPACE_ROOT)."
125
+ REASON="Syntaur write boundary violation: Cannot write to '$FILE_PATH'. Allowed paths: assignment dir ($ASSIGNMENT_DIR), project resources/memories, workspace ($WORKSPACE_ROOT)."
126
126
 
127
127
  # Escape for JSON
128
128
  REASON_ESCAPED=$(echo "$REASON" | jq -Rs '.' 2>/dev/null)
@@ -7,7 +7,7 @@
7
7
  "hooks": [
8
8
  {
9
9
  "type": "prompt",
10
- "prompt": "You just exited plan mode. If there is an active Syntaur assignment (check for a workspace field in assignment.md), update the assignment's plan.md with the plan you just created and update assignment.md to reflect that planning is complete."
10
+ "prompt": "You just exited plan mode. If there is an active Syntaur assignment (check for a workspace field in assignment.md), pick the next unused `plan-v<N>.md` filename (or `plan.md` if no plan*.md exists yet) under the assignment dir, write the plan you just created there, and append a `- [ ] Execute [plan](./plan.md)` (or versioned equivalent, e.g. `- [ ] Execute [plan v2](./plan-v2.md)`) entry to the `## Todos` section of assignment.md — marking any prior active plan todo as superseded (`- [x] ~~...~~ (superseded by plan-v<N>)`). Never delete superseded todos."
11
11
  }
12
12
  ]
13
13
  }
@@ -31,14 +31,14 @@ fi
31
31
 
32
32
  # --- Step 4: Extract context info ---
33
33
  SESSION_ID=$(jq -r '.sessionId // empty' "$CONTEXT_FILE" 2>/dev/null)
34
- MISSION_SLUG=$(jq -r '.missionSlug // empty' "$CONTEXT_FILE" 2>/dev/null)
34
+ MISSION_SLUG=$(jq -r '.projectSlug // empty' "$CONTEXT_FILE" 2>/dev/null)
35
35
  ASSIGNMENT_SLUG=$(jq -r '.assignmentSlug // empty' "$CONTEXT_FILE" 2>/dev/null)
36
36
 
37
37
  PORT=$(cat "$HOME/.syntaur/dashboard-port" 2>/dev/null || echo "4800")
38
38
 
39
- # --- Step 5: If no session was registered, try to auto-register (requires mission+assignment) ---
39
+ # --- Step 5: If no session was registered, try to auto-register (requires project+assignment) ---
40
40
  if [ -z "$SESSION_ID" ]; then
41
- # Can only auto-register if we have mission and assignment context
41
+ # Can only auto-register if we have project and assignment context
42
42
  if [ -z "$MISSION_SLUG" ] || [ -z "$ASSIGNMENT_SLUG" ]; then
43
43
  exit 0
44
44
  fi
@@ -50,7 +50,7 @@ if [ -z "$SESSION_ID" ]; then
50
50
 
51
51
  RESPONSE=$(curl -sf -X POST "http://localhost:${PORT}/api/agent-sessions" \
52
52
  -H "Content-Type: application/json" \
53
- -d "{\"missionSlug\": \"${MISSION_SLUG}\", \"assignmentSlug\": \"${ASSIGNMENT_SLUG}\", \"agent\": \"claude\", \"sessionId\": \"${SESSION_ID}\", \"path\": \"${CWD}\"}" \
53
+ -d "{\"projectSlug\": \"${MISSION_SLUG}\", \"assignmentSlug\": \"${ASSIGNMENT_SLUG}\", \"agent\": \"claude\", \"sessionId\": \"${SESSION_ID}\", \"path\": \"${CWD}\"}" \
54
54
  2>/dev/null) || true
55
55
 
56
56
  # If registration succeeded, update the context file with the session ID
@@ -63,7 +63,7 @@ fi
63
63
  # --- Step 6: Mark session as stopped via dashboard API ---
64
64
  BODY="{\"status\": \"stopped\"}"
65
65
  if [ -n "$MISSION_SLUG" ]; then
66
- BODY="{\"status\": \"stopped\", \"missionSlug\": \"${MISSION_SLUG}\"}"
66
+ BODY="{\"status\": \"stopped\", \"projectSlug\": \"${MISSION_SLUG}\"}"
67
67
  fi
68
68
 
69
69
  curl -sf -X PATCH "http://localhost:${PORT}/api/agent-sessions/${SESSION_ID}/status" \
@@ -6,9 +6,7 @@ Agents must NEVER modify these files:
6
6
 
7
7
  | File | Location |
8
8
  |------|----------|
9
- | `mission.md` | `<mission>/mission.md` |
10
- | `agent.md` | `<mission>/agent.md` |
11
- | `claude.md` | `<mission>/claude.md` |
9
+ | `project.md` | `<project>/project.md` |
12
10
 
13
11
  ## Agent-Writable (YOUR assignment folder ONLY)
14
12
 
@@ -16,20 +14,34 @@ You may ONLY write to files inside your assigned assignment folder:
16
14
 
17
15
  | File | Purpose |
18
16
  |------|---------|
19
- | `assignment.md` | Assignment record, source of truth for state |
20
- | `plan.md` | Your implementation plan |
17
+ | `assignment.md` | Assignment record, source of truth for state (includes `## Todos` checklist) |
18
+ | `plan*.md` | Versioned implementation plans (optional, 0 or more: `plan.md`, `plan-v2.md`, ...) — each linked from a todo in `assignment.md` |
19
+ | `progress.md` | Append-only timestamped progress log (newest first). Replaces the old `## Progress` body section. |
21
20
  | `scratchpad.md` | Working notes |
22
21
  | `handoff.md` | Append-only handoff log |
23
22
  | `decision-record.md` | Append-only decision log |
24
23
 
25
- Path pattern: `~/.syntaur/missions/<mission>/assignments/<your-assignment>/`
24
+ Path pattern (project-nested): `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
25
+ Path pattern (standalone): `~/.syntaur/assignments/<your-assignment-uuid>/`
26
+
27
+ ## CLI-Mediated Shared-Writable
28
+
29
+ Do NOT edit these files directly. Use the listed CLI commands:
30
+
31
+ | File | Mediator |
32
+ |------|----------|
33
+ | `comments.md` (any assignment) | `syntaur comment <slug-or-uuid> "body" [--type question\|note\|feedback] [--reply-to <id>]` |
34
+ | `## Todos` in another assignment's `assignment.md` (cross-assignment request) | `syntaur request <source> <target> "text"` |
35
+ | Question resolution | `PATCH /api/.../comments/:id/resolved` (dashboard) or toggle in dashboard UI |
36
+
37
+ These are bounded exceptions to the single-writer rule for assignment folders — the CLI serializes writes to avoid conflicts.
26
38
 
27
39
  ## Shared-Writable (any agent or human)
28
40
 
29
41
  | Location | Purpose |
30
42
  |----------|---------|
31
- | `<mission>/resources/<slug>.md` | Reference material |
32
- | `<mission>/memories/<slug>.md` | Learnings and patterns |
43
+ | `<project>/resources/<slug>.md` | Reference material |
44
+ | `<project>/memories/<slug>.md` | Learnings and patterns |
33
45
 
34
46
  ## Derived (NEVER edit)
35
47