syntaur 0.1.13 → 0.2.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 (128) hide show
  1. package/README.md +5 -0
  2. package/dashboard/dist/assets/{_basePickBy-DXzhD14q.js → _basePickBy-CHKX1r7P.js} +1 -1
  3. package/dashboard/dist/assets/{_baseUniq-gxypqvP5.js → _baseUniq-CTxTc4MS.js} +1 -1
  4. package/dashboard/dist/assets/{arc-Ce7nYKSm.js → arc-BUo5zftd.js} +1 -1
  5. package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-zX4f4_Mf.js → architectureDiagram-2XIMDMQ5-CrJLm-P0.js} +1 -1
  6. package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-auOdy7nH.js → blockDiagram-WCTKOSBZ-BK60lBBJ.js} +1 -1
  7. package/dashboard/dist/assets/{c4Diagram-IC4MRINW-C2kkjPbW.js → c4Diagram-IC4MRINW-C7oJEvA0.js} +1 -1
  8. package/dashboard/dist/assets/channel-DdltvFFH.js +1 -0
  9. package/dashboard/dist/assets/{chunk-4BX2VUAB-B7dfpnbG.js → chunk-4BX2VUAB-CjUPlzHz.js} +1 -1
  10. package/dashboard/dist/assets/{chunk-55IACEB6-r1_jHZYp.js → chunk-55IACEB6-6HmWguiO.js} +1 -1
  11. package/dashboard/dist/assets/{chunk-FMBD7UC4-5mMONjMK.js → chunk-FMBD7UC4-CLuJnd1b.js} +1 -1
  12. package/dashboard/dist/assets/{chunk-JSJVCQXG-CwKj-Es4.js → chunk-JSJVCQXG-B4d62qWV.js} +1 -1
  13. package/dashboard/dist/assets/{chunk-KX2RTZJC-ByoW-HgN.js → chunk-KX2RTZJC-AsEKRPq2.js} +1 -1
  14. package/dashboard/dist/assets/{chunk-NQ4KR5QH-D1olOovd.js → chunk-NQ4KR5QH-DQhHHvwY.js} +1 -1
  15. package/dashboard/dist/assets/{chunk-QZHKN3VN-CB8_FC8w.js → chunk-QZHKN3VN-Ds1TtI3E.js} +1 -1
  16. package/dashboard/dist/assets/{chunk-WL4C6EOR-CFEqRrE1.js → chunk-WL4C6EOR-C7jE3-cR.js} +1 -1
  17. package/dashboard/dist/assets/classDiagram-VBA2DB6C-BHqdFE-8.js +1 -0
  18. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BHqdFE-8.js +1 -0
  19. package/dashboard/dist/assets/clone-CBJOOeOm.js +1 -0
  20. package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-D6dGVXEI.js → cose-bilkent-S5V4N54A-C9ka5v1m.js} +1 -1
  21. package/dashboard/dist/assets/{dagre-KLK3FWXG-Cvg9CgP-.js → dagre-KLK3FWXG-BbgPQBKy.js} +1 -1
  22. package/dashboard/dist/assets/{diagram-E7M64L7V-iCBudhZD.js → diagram-E7M64L7V-DpdeZFD4.js} +1 -1
  23. package/dashboard/dist/assets/{diagram-IFDJBPK2-BGniy7VQ.js → diagram-IFDJBPK2-FlHLQzOV.js} +1 -1
  24. package/dashboard/dist/assets/{diagram-P4PSJMXO-B6Ie044E.js → diagram-P4PSJMXO-B22NkEF_.js} +1 -1
  25. package/dashboard/dist/assets/{erDiagram-INFDFZHY-BHvFRNhJ.js → erDiagram-INFDFZHY-zSqmtDid.js} +1 -1
  26. package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CN86Zu3Q.js → flowDiagram-PKNHOUZH-BP_0XmVV.js} +1 -1
  27. package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-D-1fKFjW.js → ganttDiagram-A5KZAMGK-8uRyYgZV.js} +1 -1
  28. package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-Dtf1A6KL.js → gitGraphDiagram-K3NZZRJ6-JFqg8sv4.js} +1 -1
  29. package/dashboard/dist/assets/{graph-B6H_kXSs.js → graph-a-PAH599.js} +1 -1
  30. package/dashboard/dist/assets/index-CoVCLSh2.css +1 -0
  31. package/dashboard/dist/assets/index-yyAIuzrP.js +471 -0
  32. package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-R9wJj4JF.js → infoDiagram-LFFYTUFH-C3kq7Nbv.js} +1 -1
  33. package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CJmeR-bX.js → ishikawaDiagram-PHBUUO56-Kqi4EZ-n.js} +1 -1
  34. package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-FcUhyu8I.js → journeyDiagram-4ABVD52K-CTfv0Wcr.js} +1 -1
  35. package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-C8UcTIwW.js → kanban-definition-K7BYSVSG-Dmx0lgvR.js} +1 -1
  36. package/dashboard/dist/assets/{layout-DzBy6alw.js → layout-KKRbT2Od.js} +1 -1
  37. package/dashboard/dist/assets/{linear-CZJCNOB9.js → linear-5egaBiw7.js} +1 -1
  38. package/dashboard/dist/assets/{mermaid.core-fMQRe9Gq.js → mermaid.core-C9pF_oFQ.js} +4 -4
  39. package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-BFwp-LS-.js → mindmap-definition-YRQLILUH-C7HXYEXt.js} +1 -1
  40. package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CQLmPkkd.js → pieDiagram-SKSYHLDU-DkdZm-YP.js} +1 -1
  41. package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-DAmi-dmD.js → quadrantDiagram-337W2JSQ-DkcRJs5F.js} +1 -1
  42. package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-Dcdts4kX.js → requirementDiagram-Z7DCOOCP-BaTDVYTl.js} +1 -1
  43. package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-By8LRvM0.js → sankeyDiagram-WA2Y5GQK-DvPLbGV5.js} +1 -1
  44. package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BsvqgtTz.js → sequenceDiagram-2WXFIKYE-DQoZ2xMK.js} +1 -1
  45. package/dashboard/dist/assets/{stateDiagram-RAJIS63D-DFNOD7cx.js → stateDiagram-RAJIS63D-CS4l0OjM.js} +1 -1
  46. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DkBtE1WJ.js +1 -0
  47. package/dashboard/dist/assets/{timeline-definition-YZTLITO2-CMcgJGjn.js → timeline-definition-YZTLITO2-aC0iCFCW.js} +1 -1
  48. package/dashboard/dist/assets/{treemap-KZPCXAKY-BWsRNHwq.js → treemap-KZPCXAKY-Ie-PFjgx.js} +1 -1
  49. package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-io7-2Tod.js → vennDiagram-LZ73GAT5-CJN3ExTQ.js} +1 -1
  50. package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-AVnh4fDS.js → xychartDiagram-JWTSCODW-DSiDu1CN.js} +1 -1
  51. package/dashboard/dist/index.html +2 -2
  52. package/dist/dashboard/server.d.ts +1 -1
  53. package/dist/dashboard/server.js +1163 -734
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.js +3979 -1372
  56. package/dist/index.js.map +1 -1
  57. package/examples/playbooks/keep-records-updated.md +1 -1
  58. package/examples/playbooks/read-before-plan.md +5 -5
  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 +3 -3
  63. package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/assignment.md +4 -1
  64. package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/assignment.md +4 -1
  65. package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/assignment.md +4 -1
  66. package/examples/{sample-mission → sample-project}/manifest.md +3 -3
  67. package/examples/{sample-mission → sample-project}/memories/_index.md +2 -2
  68. package/examples/{sample-mission → sample-project}/memories/postgres-connection-pooling.md +1 -1
  69. package/examples/{sample-mission → sample-project}/resources/_index.md +1 -1
  70. package/package.json +5 -3
  71. package/platforms/README.md +7 -7
  72. package/platforms/claude-code/README.md +1 -1
  73. package/platforms/claude-code/agents/syntaur-expert.md +57 -57
  74. package/platforms/claude-code/commands/doctor-syntaur/doctor-syntaur.md +112 -0
  75. package/platforms/claude-code/commands/track-session/track-session.md +8 -8
  76. package/platforms/claude-code/hooks/enforce-boundaries.sh +4 -4
  77. package/platforms/claude-code/hooks/hooks.json +1 -1
  78. package/platforms/claude-code/hooks/session-cleanup.sh +5 -5
  79. package/platforms/claude-code/references/file-ownership.md +8 -8
  80. package/platforms/claude-code/references/protocol-summary.md +7 -6
  81. package/platforms/claude-code/skills/complete-assignment/SKILL.md +21 -17
  82. package/platforms/claude-code/skills/create-assignment/SKILL.md +15 -14
  83. package/platforms/claude-code/skills/grab-assignment/SKILL.md +56 -49
  84. package/platforms/claude-code/skills/plan-assignment/SKILL.md +57 -10
  85. package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +21 -17
  86. package/platforms/codex/.codex-plugin/plugin.json +3 -3
  87. package/platforms/codex/README.md +1 -1
  88. package/platforms/codex/adapters/AGENTS.md.template +3 -3
  89. package/platforms/codex/agents/openai.yaml +2 -2
  90. package/platforms/codex/agents/syntaur-operator.md +33 -30
  91. package/platforms/codex/references/file-ownership.md +8 -8
  92. package/platforms/codex/references/protocol-summary.md +11 -6
  93. package/platforms/codex/scripts/enforce-boundaries.sh +2 -2
  94. package/platforms/codex/scripts/session-cleanup.sh +2 -2
  95. package/platforms/codex/skills/complete-assignment/SKILL.md +6 -6
  96. package/platforms/codex/skills/create-assignment/SKILL.md +8 -7
  97. package/platforms/codex/skills/grab-assignment/SKILL.md +30 -20
  98. package/platforms/codex/skills/plan-assignment/SKILL.md +19 -11
  99. package/platforms/codex/skills/syntaur-protocol/SKILL.md +26 -21
  100. package/platforms/cursor/README.md +1 -1
  101. package/platforms/cursor/adapters/syntaur-protocol.mdc +1 -1
  102. package/platforms/opencode/README.md +1 -1
  103. package/platforms/opencode/adapters/opencode.json.template +1 -1
  104. package/dashboard/dist/assets/channel-PMR2DuGi.js +0 -1
  105. package/dashboard/dist/assets/classDiagram-VBA2DB6C-DmESf_RL.js +0 -1
  106. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-DmESf_RL.js +0 -1
  107. package/dashboard/dist/assets/clone-WlIeyha4.js +0 -1
  108. package/dashboard/dist/assets/index-BhuXD-Q5.js +0 -445
  109. package/dashboard/dist/assets/index-BnqH-RIk.css +0 -1
  110. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DVO-Epiz.js +0 -1
  111. package/examples/sample-mission/agent.md +0 -33
  112. package/examples/sample-mission/claude.md +0 -13
  113. package/platforms/claude-code/skills/create-mission/SKILL.md +0 -51
  114. package/platforms/codex/skills/create-mission/SKILL.md +0 -35
  115. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/decision-record.md +0 -0
  116. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/handoff.md +0 -0
  117. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/plan.md +0 -0
  118. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/scratchpad.md +0 -0
  119. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/decision-record.md +0 -0
  120. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/handoff.md +0 -0
  121. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/plan.md +0 -0
  122. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/scratchpad.md +0 -0
  123. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/decision-record.md +0 -0
  124. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/handoff.md +0 -0
  125. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/plan.md +0 -0
  126. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/scratchpad.md +0 -0
  127. /package/examples/{sample-mission/mission.md → sample-project/project.md} +0 -0
  128. /package/examples/{sample-mission → sample-project}/resources/auth-requirements.md +0 -0
@@ -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,9 @@ 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` |
10
+ | `agent.md` | `<project>/agent.md` |
11
+ | `claude.md` | `<project>/claude.md` |
12
12
 
13
13
  ## Agent-Writable (YOUR assignment folder ONLY)
14
14
 
@@ -16,20 +16,20 @@ You may ONLY write to files inside your assigned assignment folder:
16
16
 
17
17
  | File | Purpose |
18
18
  |------|---------|
19
- | `assignment.md` | Assignment record, source of truth for state |
20
- | `plan.md` | Your implementation plan |
19
+ | `assignment.md` | Assignment record, source of truth for state (includes `## Todos` checklist) |
20
+ | `plan*.md` | Versioned implementation plans (optional, 0 or more: `plan.md`, `plan-v2.md`, ...) — each linked from a todo in `assignment.md` |
21
21
  | `scratchpad.md` | Working notes |
22
22
  | `handoff.md` | Append-only handoff log |
23
23
  | `decision-record.md` | Append-only decision log |
24
24
 
25
- Path pattern: `~/.syntaur/missions/<mission>/assignments/<your-assignment>/`
25
+ Path pattern: `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
26
26
 
27
27
  ## Shared-Writable (any agent or human)
28
28
 
29
29
  | Location | Purpose |
30
30
  |----------|---------|
31
- | `<mission>/resources/<slug>.md` | Reference material |
32
- | `<mission>/memories/<slug>.md` | Learnings and patterns |
31
+ | `<project>/resources/<slug>.md` | Reference material |
32
+ | `<project>/memories/<slug>.md` | Learnings and patterns |
33
33
 
34
34
  ## Derived (NEVER edit)
35
35
 
@@ -5,10 +5,10 @@
5
5
  ```
6
6
  ~/.syntaur/
7
7
  config.md
8
- missions/
9
- <mission-slug>/
8
+ projects/
9
+ <project-slug>/
10
10
  manifest.md # Derived: root navigation (read-only)
11
- mission.md # Human-authored: mission overview (read-only)
11
+ project.md # Human-authored: project overview (read-only)
12
12
  _index-assignments.md # Derived (read-only)
13
13
  _index-plans.md # Derived (read-only)
14
14
  _index-decisions.md # Derived (read-only)
@@ -17,8 +17,8 @@
17
17
  agent.md # Human-authored: universal agent instructions (read-only)
18
18
  assignments/
19
19
  <assignment-slug>/
20
- assignment.md # Agent-writable: source of truth for state
21
- plan.md # Agent-writable: implementation plan
20
+ assignment.md # Agent-writable: source of truth for state (includes ## Todos checklist)
21
+ plan*.md # Agent-writable: versioned implementation plans (optional, 0 or more: plan.md, plan-v2.md, ...)
22
22
  scratchpad.md # Agent-writable: working notes
23
23
  handoff.md # Agent-writable: append-only handoff log
24
24
  decision-record.md # Agent-writable: append-only decision log
@@ -62,9 +62,10 @@
62
62
  ## Key Rules
63
63
 
64
64
  1. **Assignment frontmatter is the single source of truth** for all assignment state.
65
- 2. **One folder per mission**, one subfolder per assignment.
65
+ 2. **One folder per project**, one subfolder per assignment.
66
66
  3. **Derived files** (underscore-prefixed) are never edited manually.
67
67
  4. **Slugs** are lowercase, hyphen-separated.
68
68
  5. **Dependencies** are declared via `dependsOn` in assignment frontmatter.
69
69
  6. An assignment cannot transition from `pending` to `in_progress` while any dependency is not `completed`.
70
70
  7. **Playbooks** in `~/.syntaur/playbooks/` define behavioral rules agents must follow. Read `manifest.md` for a summary, then read each referenced playbook before starting work.
71
+ 8. **Todos** in the `## Todos` section of `assignment.md` are an informal markdown checklist. Items may be simple tasks or link to plan files. When a plan is superseded, mark the old todo: `- [x] ~~Execute [plan](./plan.md)~~ (superseded by plan-v2)` — never delete it.
@@ -17,15 +17,15 @@ Write a handoff for your current assignment and transition it to review (or comp
17
17
 
18
18
  User provided: $ARGUMENTS
19
19
 
20
- If the user passed `--complete`, transition directly to `completed` instead of `review`. However, `--complete` is ONLY allowed if ALL acceptance criteria are met. If any criteria are unmet, always transition to `review` regardless of the `--complete` flag, and inform the user why.
20
+ If the user passed `--complete`, transition directly to `completed` instead of `review`. However, `--complete` is ONLY allowed if ALL acceptance criteria are met AND every `## Todos` item is either checked or marked superseded. If any criterion or todo is unresolved, always transition to `review` regardless of the `--complete` flag, and inform the user why.
21
21
 
22
22
  ## Step 1: Load Context
23
23
 
24
24
  Read `.syntaur/context.json` from the current working directory.
25
25
 
26
- If the file does not exist, tell the user: "No active assignment found. Run `/grab-assignment <mission-slug>` first."
26
+ If the file does not exist, tell the user: "No active assignment found. Run `/grab-assignment <project-slug>` first."
27
27
 
28
- Extract: `missionSlug`, `assignmentSlug`, `assignmentDir`, `missionDir`.
28
+ Extract: `projectSlug`, `assignmentSlug`, `assignmentDir`, `projectDir`.
29
29
 
30
30
  ## Step 1.5: Load Playbooks
31
31
 
@@ -37,15 +37,17 @@ ls ~/.syntaur/playbooks/*.md 2>/dev/null
37
37
 
38
38
  For each file found, read it and check that your work follows its directives. If any playbook has completion-related rules (e.g., "run tests before done"), follow them before proceeding.
39
39
 
40
- ## Step 2: Verify Acceptance Criteria
40
+ ## Step 2: Verify Acceptance Criteria and Todos
41
41
 
42
- Read `<assignmentDir>/assignment.md` and find the `## Acceptance Criteria` section.
42
+ Read `<assignmentDir>/assignment.md` and find the `## Acceptance Criteria` and `## Todos` sections.
43
43
 
44
- Review each criterion (checkbox item). For each:
45
- - If you believe it is met, note why (what was implemented, where)
46
- - If it is NOT met, flag it clearly
44
+ Review each acceptance criterion (checkbox item) and each todo. For each:
45
+ - If you believe it is met/done, note why (what was implemented, where)
46
+ - If it is NOT met/done, flag it clearly
47
47
 
48
- If any criteria are not met, warn the user: "The following acceptance criteria are not yet met: [list]. Do you want to proceed with the handoff anyway?"
48
+ Superseded todos (marked `- [x] ~~...~~ (superseded by ...)`) count as resolved they do not need to be done again.
49
+
50
+ If any acceptance criteria are unmet OR any todo is still `- [ ]` and not superseded, warn the user: "The following are not yet done: [list]. Do you want to proceed with the handoff anyway?"
49
51
 
50
52
  If the user says no, stop.
51
53
 
@@ -82,20 +84,22 @@ Use the Edit tool to append this entry to handoff.md (do not overwrite existing
82
84
 
83
85
  Also update the handoff.md frontmatter: set `updated` to the current timestamp and increment the `handoffCount` by 1.
84
86
 
85
- ## Step 4: Update Acceptance Criteria Checkboxes
87
+ ## Step 4: Update Checkboxes (Criteria + Todos)
88
+
89
+ In `<assignmentDir>/assignment.md`, update checkboxes in both the `## Acceptance Criteria` and `## Todos` sections to reflect the current state. Use the Edit tool to check off items that were completed (change `- [ ]` to `- [x]`).
86
90
 
87
- In `<assignmentDir>/assignment.md`, update the acceptance criteria checkboxes to reflect the current state. Use the Edit tool to check off criteria that were met (change `- [ ]` to `- [x]`).
91
+ **Note:** Ideally, these should have been checked off incrementally during implementation. If they are already checked, verify they are still accurate. If some were missed, check them off now with a note in the handoff about which were verified at completion time vs. during development.
88
92
 
89
- **Note:** Ideally, criteria should have been checked off incrementally during implementation. If they are already checked, verify they are still accurate. If some were missed, check them off now with a note in the handoff about which were verified at completion time vs. during development.
93
+ Do NOT uncheck or rewrite superseded todo lines (those matching `- [x] ~~...~~ (superseded by ...)`) leave that history intact.
90
94
 
91
95
  ## Step 4.5: Close Session
92
96
 
93
- Read the context file (`.syntaur/context.json`) to get the `sessionId` and `missionSlug`. Then mark the session as completed via the dashboard API:
97
+ Read the context file (`.syntaur/context.json`) to get the `sessionId` and `projectSlug`. Then mark the session as completed via the dashboard API:
94
98
 
95
99
  ```bash
96
100
  curl -s -X PATCH "http://localhost:$(cat ~/.syntaur/dashboard-port 2>/dev/null || echo 4800)/api/agent-sessions/<session-id>/status" \
97
101
  -H "Content-Type: application/json" \
98
- -d '{"status": "completed", "missionSlug": "<mission-slug>"}'
102
+ -d '{"status": "completed", "projectSlug": "<project-slug>"}'
99
103
  ```
100
104
 
101
105
  If the API call fails (e.g., dashboard not running), this is non-critical — the session will be reconciled automatically on the next dashboard load.
@@ -105,20 +109,20 @@ If the API call fails (e.g., dashboard not running), this is non-critical — th
105
109
  If the user passed `--complete`:
106
110
 
107
111
  ```bash
108
- syntaur complete <assignment-slug> --mission <mission-slug>
112
+ syntaur complete <assignment-slug> --project <project-slug>
109
113
  ```
110
114
 
111
115
  Otherwise, transition to review:
112
116
 
113
117
  ```bash
114
- syntaur review <assignment-slug> --mission <mission-slug>
118
+ syntaur review <assignment-slug> --project <project-slug>
115
119
  ```
116
120
 
117
121
  Use `dangerouslyDisableSandbox: true` since the CLI writes to `~/.syntaur/`.
118
122
 
119
123
  If the command fails, report the error. Common failures:
120
124
  - Assignment is not in `in_progress` status (cannot transition)
121
- - Mission not found
125
+ - Project not found
122
126
 
123
127
  ## Step 6: Clean Up Context
124
128
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: create-assignment
3
- description: Create a new Syntaur assignment within a mission (or as a one-off)
4
- argument-hint: <title> --mission <slug> [--priority <level>] [--depends-on <slugs>] [--one-off]
3
+ description: Create a new Syntaur assignment within a project (or as a one-off)
4
+ argument-hint: <title> --project <slug> [--priority <level>] [--depends-on <slugs>] [--one-off]
5
5
  allowed-tools:
6
6
  - Bash
7
7
  - Read
@@ -9,7 +9,7 @@ allowed-tools:
9
9
 
10
10
  # Create Assignment
11
11
 
12
- Create a new assignment within a Syntaur mission from Claude Code.
12
+ Create a new assignment within a Syntaur project from Claude Code.
13
13
 
14
14
  ## Arguments
15
15
 
@@ -17,25 +17,25 @@ The user provided: $ARGUMENTS
17
17
 
18
18
  Parse the arguments:
19
19
  - First argument (required): the assignment title (e.g., `"Add login endpoint"`)
20
- - `--mission <slug>` (required unless `--one-off`): the mission to add the assignment to
21
- - `--one-off` (optional): create a standalone mission+assignment in one step
20
+ - `--project <slug>` (required unless `--one-off`): the project to add the assignment to
21
+ - `--one-off` (optional): create a standalone project+assignment in one step
22
22
  - `--slug` (optional): override the auto-generated assignment slug
23
23
  - `--priority` (optional): `low`, `medium` (default), `high`, or `critical`
24
24
  - `--depends-on` (optional): comma-separated list of assignment slugs this depends on
25
- - `--dir` (optional): override the default mission directory
25
+ - `--dir` (optional): override the default project directory
26
26
 
27
27
  If no title was provided, ask the user what the assignment should be called.
28
28
 
29
- If neither `--mission` nor `--one-off` was provided, check if there is an active assignment context in `.syntaur/context.json`. If so, default `--mission` to that context's `missionSlug` and confirm with the user: "Add this assignment to mission `<missionSlug>`?"
29
+ If neither `--project` nor `--one-off` was provided, check if there is an active assignment context in `.syntaur/context.json`. If so, default `--project` to that context's `projectSlug` and confirm with the user: "Add this assignment to project `<projectSlug>`?"
30
30
 
31
- If there is no active context and no mission flag, ask the user which mission to add it to, or whether it should be a one-off.
31
+ If there is no active context and no project flag, ask the user which project to add it to, or whether it should be a one-off.
32
32
 
33
33
  ## Step 1: Run the CLI
34
34
 
35
35
  Build the command from the parsed arguments. Use `dangerouslyDisableSandbox: true` since the CLI writes to `~/.syntaur/` which is outside the project sandbox.
36
36
 
37
37
  ```bash
38
- syntaur create-assignment "<title>" --mission <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--dir <path>]
38
+ syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--dir <path>]
39
39
  ```
40
40
 
41
41
  Or for one-off:
@@ -44,21 +44,22 @@ Or for one-off:
44
44
  syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]
45
45
  ```
46
46
 
47
- If the command fails (e.g., mission not found, slug collision), report the error and suggest fixes.
47
+ If the command fails (e.g., project not found, slug collision), report the error and suggest fixes.
48
48
 
49
49
  ## Step 2: Read the Created Assignment
50
50
 
51
51
  After successful creation, extract the assignment slug and directory from the CLI output. Read the generated `assignment.md`:
52
52
 
53
53
  ```bash
54
- cat ~/.syntaur/missions/<mission-slug>/assignments/<assignment-slug>/assignment.md
54
+ cat ~/.syntaur/projects/<project-slug>/assignments/<assignment-slug>/assignment.md
55
55
  ```
56
56
 
57
57
  ## Step 3: Guide Next Steps
58
58
 
59
59
  Tell the user:
60
60
  - The assignment was created with its slug, priority, and location
61
- - List the files created (assignment.md, plan.md, scratchpad.md, handoff.md, decision-record.md)
62
- - Suggest they edit `assignment.md` to fill in the objective, acceptance criteria, and context
61
+ - List the files created (assignment.md, scratchpad.md, handoff.md, decision-record.md). Note that `plan.md` is NOT scaffolded — plan files are optional and created on demand by `/plan-assignment`.
62
+ - Suggest they edit `assignment.md` to fill in the objective, acceptance criteria, context, and any initial todos. The `## Todos` section accepts simple tasks or markdown links to plan files.
63
+ - Or suggest running `/plan-assignment` after grabbing — it creates a plan file and auto-appends a linked todo to `## Todos`.
63
64
  - If dependencies were set, note them
64
- - Suggest running `/grab-assignment <mission-slug> <assignment-slug>` to claim and start working on it
65
+ - Suggest running `/grab-assignment <project-slug> <assignment-slug>` to claim and start working on it
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: grab-assignment
3
- description: Discover and claim a pending Syntaur assignment from a mission
4
- argument-hint: <mission-slug> [assignment-slug]
3
+ description: Load a Syntaur assignment into the current working context
4
+ argument-hint: <project-slug> [assignment-slug]
5
5
  allowed-tools:
6
6
  - Bash
7
7
  - Read
@@ -12,86 +12,79 @@ allowed-tools:
12
12
 
13
13
  # Grab Assignment
14
14
 
15
- Claim a pending assignment from a Syntaur mission and set up your working context.
15
+ Load a Syntaur assignment into the current working context so you can work on it.
16
+
17
+ **Grabbing is non-destructive.** It never fails because of status. An assignment in `pending`, `in_progress`, `blocked`, `review`, `completed`, or `failed` can all be grabbed — grabbing just sets up context (`.syntaur/context.json`), registers the session, and reads the assignment. Only a `pending` assignment will additionally be transitioned to `in_progress`; any other status is left untouched.
16
18
 
17
19
  ## Arguments
18
20
 
19
21
  The user provided: $ARGUMENTS
20
22
 
21
23
  Parse the arguments:
22
- - First argument (required): the mission slug (e.g., `build-auth-system`)
23
- - Second argument (optional): a specific assignment slug to grab. If omitted, you will list pending assignments and pick one.
24
+ - First argument (required): the project slug (e.g., `build-auth-system`)
25
+ - Second argument (optional): a specific assignment slug to grab. If omitted, you will list the project's assignments and pick one (preferring `pending` when multiple exist).
24
26
 
25
27
  ## Pre-flight Check
26
28
 
27
29
  1. Check if `.syntaur/context.json` already exists in the current working directory.
28
- - If it exists, read it and warn the user: "You already have an active assignment: `<assignmentSlug>` in mission `<missionSlug>`. Grabbing a new assignment will replace this context. Proceed?"
30
+ - If it exists, read it and warn the user: "You already have an active assignment: `<assignmentSlug>` in project `<projectSlug>`. Grabbing a new assignment will replace this context. Proceed?"
29
31
  - If the user says no, stop.
30
32
 
31
- ## Step 1: Discover the Mission
33
+ ## Step 1: Discover the Project
32
34
 
33
- Read the mission directory to understand what is available:
35
+ Read the project directory to understand what is available:
34
36
 
35
37
  ```bash
36
- ls ~/.syntaur/missions/<mission-slug>/
38
+ ls ~/.syntaur/projects/<project-slug>/
37
39
  ```
38
40
 
39
- Read the mission files, starting with the manifest (the protocol-defined entry point):
40
- - Read `~/.syntaur/missions/<mission-slug>/manifest.md` first (root navigation file per protocol spec)
41
- - Read `~/.syntaur/missions/<mission-slug>/mission.md` for goal and context
42
- - Read `~/.syntaur/missions/<mission-slug>/agent.md` for agent instructions
43
- - Read `~/.syntaur/missions/<mission-slug>/claude.md` if it exists for Claude-specific instructions
44
-
45
- Note the `workspace` field in `mission.md` frontmatter if present. This indicates which project/codebase grouping the mission belongs to. When writing context to `.syntaur/context.json` (Step 5), include `"workspace": "<value>"` if the mission has a workspace.
41
+ Read the project files, starting with the manifest (the protocol-defined entry point):
42
+ - Read `~/.syntaur/projects/<project-slug>/manifest.md` first (root navigation file per protocol spec)
43
+ - Read `~/.syntaur/projects/<project-slug>/project.md` for goal and context
44
+ - Read `~/.syntaur/projects/<project-slug>/agent.md` for agent instructions
45
+ - Read `~/.syntaur/projects/<project-slug>/claude.md` if it exists for Claude-specific instructions
46
46
 
47
- ## Step 2: Find Pending Assignments
47
+ Note the `workspace` field in `project.md` frontmatter if present. This indicates which project/codebase grouping the project belongs to. When writing context to `.syntaur/context.json` (Step 5), include `"workspace": "<value>"` if the project has a workspace.
48
48
 
49
- List assignment directories and check their status:
50
-
51
- ```bash
52
- ls ~/.syntaur/missions/<mission-slug>/assignments/
53
- ```
49
+ ## Step 2: Find Assignments
54
50
 
55
- For each assignment directory, read the `assignment.md` frontmatter and look for `status: pending`. You can use grep:
51
+ List assignment directories:
56
52
 
57
53
  ```bash
58
- grep -l "status: pending" ~/.syntaur/missions/<mission-slug>/assignments/*/assignment.md
54
+ ls ~/.syntaur/projects/<project-slug>/assignments/
59
55
  ```
60
56
 
61
- If no pending assignments exist, tell the user and stop.
62
-
63
- If the user specified an assignment slug as the second argument, verify it exists and is pending. If it is not pending, report its current status and stop.
57
+ If the user specified an assignment slug as the second argument, verify that directory exists. Its status does **not** matter — grab it regardless. If it doesn't exist, report that and stop.
64
58
 
65
- If no specific assignment was requested, present the list of pending assignments with their titles and priorities, and ask the user which one to grab. If there is only one pending assignment, grab it automatically.
59
+ If no specific assignment was requested, read each `assignment.md` frontmatter and present the list with title, priority, and current status. Prefer `pending` assignments when presenting options (they're the most likely default), but show non-terminal assignments too so the user can pick one to resume. Ask the user which to grab unless there is exactly one obvious candidate (single `pending` assignment).
66
60
 
67
61
  ## Step 3: Claim the Assignment
68
62
 
69
- Run the Syntaur CLI commands to assign and start the assignment. Use `dangerouslyDisableSandbox: true` for these bash commands since the CLI writes to `~/.syntaur/` which is outside the project sandbox.
63
+ Read the assignment frontmatter first to learn its current `status`:
70
64
 
71
65
  ```bash
72
- syntaur assign <assignment-slug> --agent claude --mission <mission-slug>
66
+ cat ~/.syntaur/projects/<project-slug>/assignments/<assignment-slug>/assignment.md
73
67
  ```
74
68
 
75
- Then:
69
+ Then run the Syntaur CLI to set the assignee. This is safe at any status and does not transition state. Use `dangerouslyDisableSandbox: true` for these bash commands since the CLI writes to `~/.syntaur/` which is outside the project sandbox.
76
70
 
77
71
  ```bash
78
- syntaur start <assignment-slug> --mission <mission-slug>
72
+ syntaur assign <assignment-slug> --agent claude --project <project-slug>
79
73
  ```
80
74
 
81
- If either command fails, report the error and stop. Common failures:
82
- - Assignment has unmet dependencies (cannot start until dependencies are `completed`)
83
- - Assignment is not in `pending` status
84
- - Mission not found
85
-
86
- ## Step 4: Read Assignment Context and Set Workspace
87
-
88
- After successfully starting the assignment, read the full assignment details:
75
+ **Only if the current status is `pending`**, also run `syntaur start` to transition it to `in_progress`:
89
76
 
90
77
  ```bash
91
- cat ~/.syntaur/missions/<mission-slug>/assignments/<assignment-slug>/assignment.md
78
+ syntaur start <assignment-slug> --project <project-slug>
92
79
  ```
93
80
 
94
- Extract from the frontmatter:
81
+ For any other status (`in_progress`, `blocked`, `review`, `completed`, `failed`), **skip `syntaur start`** — the assignment has already been advanced past pending and grabbing should not rewind it. Tell the user which status the assignment is in and continue with context setup.
82
+
83
+ If `syntaur assign` fails (e.g., project not found, invalid slug), report the error and stop. Do not treat a non-pending status as a failure.
84
+
85
+ ## Step 4: Read Assignment Context and Set Workspace
86
+
87
+ You have already read the assignment file in Step 3. Extract from the frontmatter:
95
88
  - `title` -- the assignment title
96
89
  - `workspace.repository` -- the code repository path (may be null)
97
90
  - `workspace.worktreePath` -- the worktree path (may be null)
@@ -99,7 +92,15 @@ Extract from the frontmatter:
99
92
  - `dependsOn` -- list of dependency slugs
100
93
  - `priority` -- priority level
101
94
 
102
- Read the objective and acceptance criteria from the markdown body.
95
+ Read the objective, acceptance criteria, and the `## Todos` section (if present) from the markdown body. Active (unchecked) todos indicate outstanding work and may link to plan files to execute.
96
+
97
+ ### Auto-load upstream decision records
98
+
99
+ If `dependsOn` is non-empty, for each dependency slug `<dep>`, read:
100
+ - `<projectDir>/assignments/<dep>/handoff.md` (if it exists) for integration context
101
+ - `<projectDir>/assignments/<dep>/decision-record.md` (if it exists) for upstream decisions
102
+
103
+ Surface those upstream decisions in the Step 6 report — downstream work should inherit prior decisions without the user having to ask.
103
104
 
104
105
  ### Set workspace if not configured
105
106
 
@@ -124,10 +125,10 @@ Then write the JSON file with this structure:
124
125
 
125
126
  ```json
126
127
  {
127
- "missionSlug": "<mission-slug>",
128
+ "projectSlug": "<project-slug>",
128
129
  "assignmentSlug": "<assignment-slug>",
129
- "missionDir": "/Users/<username>/.syntaur/missions/<mission-slug>",
130
- "assignmentDir": "/Users/<username>/.syntaur/missions/<mission-slug>/assignments/<assignment-slug>",
130
+ "projectDir": "/Users/<username>/.syntaur/projects/<project-slug>",
131
+ "assignmentDir": "/Users/<username>/.syntaur/projects/<project-slug>/assignments/<assignment-slug>",
131
132
  "workspaceRoot": "<workspace.worktreePath if set, else workspace.repository if it is a local path, else current working directory>",
132
133
  "title": "<assignment title>",
133
134
  "branch": "<workspace.branch or null>",
@@ -141,7 +142,7 @@ Use absolute paths (expand `~` to the actual home directory). Note: `workspace.r
141
142
 
142
143
  ## Step 5.5: Register Agent Session
143
144
 
144
- After creating the context file, register this session in the mission's agent session log so it appears in the dashboard.
145
+ After creating the context file, register this session in the project's agent session log so it appears in the dashboard.
145
146
 
146
147
  1. Find the current Claude Code session ID by reading from `~/.claude/sessions/`. These are JSON files keyed by PID containing `sessionId`, `cwd`, etc. Find the most recently modified file whose `cwd` matches the current working directory:
147
148
  ```bash
@@ -153,7 +154,7 @@ If you cannot find a matching session file (e.g., no file matches the cwd, or th
153
154
 
154
155
  2. Run the track-session command (use `dangerouslyDisableSandbox: true` since it writes to `~/.syntaur/`):
155
156
  ```bash
156
- syntaur track-session --mission <missionSlug> --assignment <assignmentSlug> --agent claude --session-id <claude-session-id> --path $(pwd)
157
+ syntaur track-session --project <projectSlug> --assignment <assignmentSlug> --agent claude --session-id <claude-session-id> --path $(pwd)
157
158
  ```
158
159
 
159
160
  3. Update the `.syntaur/context.json` context file to include the session ID. Add `"sessionId": "<claude-session-id>"` to the JSON object you wrote in Step 5.
@@ -174,7 +175,13 @@ If no playbook files exist, skip this step.
174
175
 
175
176
  Summarize what was done:
176
177
  - Which assignment was grabbed
178
+ - Its current status (note if it was already past `pending` — e.g., "already in `review`, status unchanged")
177
179
  - The objective (first paragraph from assignment.md body)
178
180
  - The acceptance criteria (the checkbox list)
181
+ - Active todos from the `## Todos` section (if any), with links to any referenced plan files
179
182
  - The workspace path (if set)
180
- - Suggest next step: "Run `/plan-assignment` to create an implementation plan."
183
+ - Suggest an appropriate next step based on status:
184
+ - `pending` / `in_progress`: `/plan-assignment` to plan implementation
185
+ - `blocked`: investigate the blocker recorded in `blockedReason`
186
+ - `review`: inspect the implementation and help verify acceptance criteria
187
+ - `completed` / `failed`: read the handoff; grab is probably for reference or reopen