syntaur 0.8.0 → 0.12.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 (126) hide show
  1. package/.claude-plugin/plugin.json +9 -1
  2. package/dashboard/dist/assets/{_basePickBy-CIZortGD.js → _basePickBy-XOV2F7dX.js} +1 -1
  3. package/dashboard/dist/assets/{_baseUniq-BHP5NBQ7.js → _baseUniq-Dccfk3fK.js} +1 -1
  4. package/dashboard/dist/assets/{arc-BLtQy7Cl.js → arc-TwJ5RF-H.js} +1 -1
  5. package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-0mhIBjWy.js → architectureDiagram-2XIMDMQ5-CpkVJudw.js} +1 -1
  6. package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-CM7K5Tf5.js → blockDiagram-WCTKOSBZ-Ck6VQ4Fh.js} +1 -1
  7. package/dashboard/dist/assets/{c4Diagram-IC4MRINW-gsbeygvS.js → c4Diagram-IC4MRINW-B5V7YG03.js} +1 -1
  8. package/dashboard/dist/assets/channel-AEMTX70R.js +1 -0
  9. package/dashboard/dist/assets/{chunk-4BX2VUAB-CneRz9Nd.js → chunk-4BX2VUAB-rBdyOxAe.js} +1 -1
  10. package/dashboard/dist/assets/{chunk-55IACEB6-uetANWHd.js → chunk-55IACEB6-DKlNXjYt.js} +1 -1
  11. package/dashboard/dist/assets/{chunk-FMBD7UC4-3-tNszoF.js → chunk-FMBD7UC4-Cqm0PtUI.js} +1 -1
  12. package/dashboard/dist/assets/{chunk-JSJVCQXG-DOO88rZD.js → chunk-JSJVCQXG-CQyXQcG3.js} +1 -1
  13. package/dashboard/dist/assets/{chunk-KX2RTZJC-Bnc1CFy2.js → chunk-KX2RTZJC-DmqjHPpJ.js} +1 -1
  14. package/dashboard/dist/assets/{chunk-NQ4KR5QH-BfViC1Ms.js → chunk-NQ4KR5QH-CHXoBcYa.js} +1 -1
  15. package/dashboard/dist/assets/{chunk-QZHKN3VN-CgjyAt2l.js → chunk-QZHKN3VN-Dd4sChBS.js} +1 -1
  16. package/dashboard/dist/assets/{chunk-WL4C6EOR-BYFermSR.js → chunk-WL4C6EOR-D-QLnkY8.js} +1 -1
  17. package/dashboard/dist/assets/classDiagram-VBA2DB6C-LzuOAGzu.js +1 -0
  18. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-LzuOAGzu.js +1 -0
  19. package/dashboard/dist/assets/clone-Cw63QGUJ.js +1 -0
  20. package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-CE-k5SLv.js → cose-bilkent-S5V4N54A-VZi6uV56.js} +1 -1
  21. package/dashboard/dist/assets/{dagre-KLK3FWXG-CX7Br8LQ.js → dagre-KLK3FWXG-CtT97Qhx.js} +1 -1
  22. package/dashboard/dist/assets/{diagram-E7M64L7V-t-xhWjCU.js → diagram-E7M64L7V-BjYTNNHb.js} +1 -1
  23. package/dashboard/dist/assets/{diagram-IFDJBPK2-BVhcTXsJ.js → diagram-IFDJBPK2-qj8_r6fb.js} +1 -1
  24. package/dashboard/dist/assets/{diagram-P4PSJMXO-fxt8ZSca.js → diagram-P4PSJMXO-DlfWo7Vt.js} +1 -1
  25. package/dashboard/dist/assets/{erDiagram-INFDFZHY-C20k2bxX.js → erDiagram-INFDFZHY-Ch_nApTv.js} +1 -1
  26. package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CdeygexM.js → flowDiagram-PKNHOUZH-EOVsqNyi.js} +1 -1
  27. package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-CPsoOAV-.js → ganttDiagram-A5KZAMGK-CS-lx0B-.js} +1 -1
  28. package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-t0tCTIZy.js → gitGraphDiagram-K3NZZRJ6-Ba6RDzPy.js} +1 -1
  29. package/dashboard/dist/assets/{graph-Bcqd31wL.js → graph-BKaAyLk-.js} +1 -1
  30. package/dashboard/dist/assets/index-BTWPZaIA.css +1 -0
  31. package/dashboard/dist/assets/index-Dk9PBm5B.js +510 -0
  32. package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-DgoKvH3N.js → infoDiagram-LFFYTUFH-Cr20xEsd.js} +1 -1
  33. package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CGr4P8do.js → ishikawaDiagram-PHBUUO56-CuILV9ph.js} +1 -1
  34. package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-CHYRi6wF.js → journeyDiagram-4ABVD52K-CO-l7Mpm.js} +1 -1
  35. package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-kwzqrFcW.js → kanban-definition-K7BYSVSG-CcirPw_S.js} +1 -1
  36. package/dashboard/dist/assets/{layout-wud47qGs.js → layout-BXvr8dMw.js} +1 -1
  37. package/dashboard/dist/assets/{linear-DG5js90X.js → linear-B85hgYnX.js} +1 -1
  38. package/dashboard/dist/assets/{mermaid.core-BDw69uC2.js → mermaid.core-DcZN9Xp2.js} +4 -4
  39. package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-Dw_uyg1-.js → mindmap-definition-YRQLILUH-Bxi6p5_3.js} +1 -1
  40. package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-C7NBi6tK.js → pieDiagram-SKSYHLDU-DOSvU0UD.js} +1 -1
  41. package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-_N_BSBd4.js → quadrantDiagram-337W2JSQ-Cmo-5tW9.js} +1 -1
  42. package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-BqUiqfP1.js → requirementDiagram-Z7DCOOCP-Dw8alwuI.js} +1 -1
  43. package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-C2Qq5ULW.js → sankeyDiagram-WA2Y5GQK-ZPB-rzOg.js} +1 -1
  44. package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BOCF2z8f.js → sequenceDiagram-2WXFIKYE-Ct8bkK2h.js} +1 -1
  45. package/dashboard/dist/assets/{stateDiagram-RAJIS63D-BvDyTxC5.js → stateDiagram-RAJIS63D-DnGOXlmx.js} +1 -1
  46. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-COGzlZxn.js +1 -0
  47. package/dashboard/dist/assets/{timeline-definition-YZTLITO2-DNNZxSrG.js → timeline-definition-YZTLITO2-AUFmbJjr.js} +1 -1
  48. package/dashboard/dist/assets/{treemap-KZPCXAKY-C6hOdiGH.js → treemap-KZPCXAKY-Dw5FDFAV.js} +1 -1
  49. package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-FmXl6puP.js → vennDiagram-LZ73GAT5-DfxicU4N.js} +1 -1
  50. package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-Bjav12WG.js → xychartDiagram-JWTSCODW--9N0V1r_.js} +1 -1
  51. package/dashboard/dist/index.html +2 -2
  52. package/dashboard/dist/syntaur-logo.svg +5 -13
  53. package/dist/dashboard/server.js +363 -3
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.js +2140 -153
  56. package/dist/index.js.map +1 -1
  57. package/examples/playbooks/keep-records-updated.md +2 -1
  58. package/package.json +1 -1
  59. package/platforms/claude-code/.claude-plugin/plugin.json +9 -1
  60. package/platforms/claude-code/agents/syntaur-expert.md +1 -1
  61. package/platforms/claude-code/commands/add-memory/add-memory.md +18 -0
  62. package/platforms/claude-code/commands/add-resource/add-resource.md +16 -0
  63. package/platforms/claude-code/commands/list-assignments/list-assignments.md +16 -0
  64. package/platforms/claude-code/commands/log-progress/log-progress.md +16 -0
  65. package/platforms/claude-code/commands/replan/replan.md +16 -0
  66. package/platforms/claude-code/commands/resume-session/resume-session.md +16 -0
  67. package/platforms/claude-code/commands/set-workspace/set-workspace.md +16 -0
  68. package/platforms/claude-code/commands/syntaur-worktree/syntaur-worktree.md +16 -0
  69. package/platforms/claude-code/references/protocol-summary.md +8 -0
  70. package/platforms/claude-code/skills/add-memory/SKILL.md +96 -0
  71. package/platforms/claude-code/skills/add-resource/SKILL.md +85 -0
  72. package/platforms/claude-code/skills/capture-artifacts/SKILL.md +84 -0
  73. package/platforms/claude-code/skills/complete-assignment/SKILL.md +2 -1
  74. package/platforms/claude-code/skills/list-assignments/SKILL.md +73 -0
  75. package/platforms/claude-code/skills/log-progress/SKILL.md +128 -0
  76. package/platforms/claude-code/skills/plan-assignment/SKILL.md +29 -8
  77. package/platforms/claude-code/skills/replan/SKILL.md +113 -0
  78. package/platforms/claude-code/skills/resume-session/SKILL.md +83 -0
  79. package/platforms/claude-code/skills/set-workspace/SKILL.md +109 -0
  80. package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +4 -0
  81. package/platforms/claude-code/skills/syntaur-protocol/references/protocol-summary.md +8 -0
  82. package/platforms/claude-code/skills/syntaur-worktree/SKILL.md +117 -0
  83. package/platforms/codex/README.md +2 -2
  84. package/platforms/codex/agents/syntaur-operator.md +7 -0
  85. package/platforms/codex/commands/add-memory.md +16 -0
  86. package/platforms/codex/commands/add-resource.md +14 -0
  87. package/platforms/codex/commands/list-assignments.md +13 -0
  88. package/platforms/codex/commands/log-progress.md +14 -0
  89. package/platforms/codex/commands/replan.md +15 -0
  90. package/platforms/codex/commands/resume-session.md +15 -0
  91. package/platforms/codex/commands/set-workspace.md +15 -0
  92. package/platforms/codex/commands/syntaur-worktree.md +15 -0
  93. package/platforms/codex/references/protocol-summary.md +8 -0
  94. package/platforms/codex/skills/add-memory/SKILL.md +96 -0
  95. package/platforms/codex/skills/add-resource/SKILL.md +85 -0
  96. package/platforms/codex/skills/capture-artifacts/SKILL.md +84 -0
  97. package/platforms/codex/skills/complete-assignment/SKILL.md +2 -1
  98. package/platforms/codex/skills/list-assignments/SKILL.md +73 -0
  99. package/platforms/codex/skills/log-progress/SKILL.md +128 -0
  100. package/platforms/codex/skills/plan-assignment/SKILL.md +29 -8
  101. package/platforms/codex/skills/replan/SKILL.md +113 -0
  102. package/platforms/codex/skills/resume-session/SKILL.md +83 -0
  103. package/platforms/codex/skills/set-workspace/SKILL.md +109 -0
  104. package/platforms/codex/skills/syntaur-protocol/SKILL.md +4 -0
  105. package/platforms/codex/skills/syntaur-protocol/references/protocol-summary.md +8 -0
  106. package/platforms/codex/skills/syntaur-worktree/SKILL.md +117 -0
  107. package/skills/add-memory/SKILL.md +96 -0
  108. package/skills/add-resource/SKILL.md +85 -0
  109. package/skills/capture-artifacts/SKILL.md +84 -0
  110. package/skills/complete-assignment/SKILL.md +2 -1
  111. package/skills/list-assignments/SKILL.md +73 -0
  112. package/skills/log-progress/SKILL.md +128 -0
  113. package/skills/plan-assignment/SKILL.md +29 -8
  114. package/skills/replan/SKILL.md +113 -0
  115. package/skills/resume-session/SKILL.md +83 -0
  116. package/skills/set-workspace/SKILL.md +109 -0
  117. package/skills/syntaur-protocol/SKILL.md +4 -0
  118. package/skills/syntaur-protocol/references/protocol-summary.md +8 -0
  119. package/skills/syntaur-worktree/SKILL.md +117 -0
  120. package/dashboard/dist/assets/channel-FWLgstBg.js +0 -1
  121. package/dashboard/dist/assets/classDiagram-VBA2DB6C-BAvQTSn_.js +0 -1
  122. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BAvQTSn_.js +0 -1
  123. package/dashboard/dist/assets/clone-rSEllQ1P.js +0 -1
  124. package/dashboard/dist/assets/index-bLWoSCLL.css +0 -1
  125. package/dashboard/dist/assets/index-eS0wtDO0.js +0 -500
  126. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-TaLLhLWD.js +0 -1
@@ -99,28 +99,49 @@ Body sections:
99
99
 
100
100
  If the target file already exists (only possible for `plan.md` on first re-run against a scaffolded-but-empty plan), preserve the frontmatter and replace only the body, flipping `status` from `draft` to `in_progress` and updating `updated`.
101
101
 
102
- ### 5c. Update assignment.md Todos
102
+ ### 5c. Update assignment.md Todos (four-todo cycle)
103
103
 
104
- Read `<assignmentDir>/assignment.md` and locate the `## Todos` section.
104
+ Read `<assignmentDir>/assignment.md` and locate the `## Todos` section. Per
105
+ the **Create-and-Plan-Assignment** playbook, every plan version uses a
106
+ four-todo cycle: Create / Review / Implement / Review implementation.
105
107
 
106
- 1. **Supersede prior plan todos.** For every unchecked line matching `- [ ] Execute [<label>](./plan.md)` or `- [ ] Execute [<label>](./plan-v<N>.md)`, rewrite as:
108
+ 1. **Supersede the prior plan's four-todo cycle.** For every line referencing
109
+ the prior plan file (`./plan.md` or `./plan-v<N-1>.md`) — both the older
110
+ single-line `Execute [...]` form AND the four-todo-cycle lines (Create /
111
+ Review / Implement / Review implementation of) — rewrite as:
107
112
 
108
113
  ```
109
- - [x] ~~Execute [<label>](./<old-plan-filename>)~~ (superseded by <versionLabel>)
114
+ - [x] ~~<original line body>~~ (superseded by <versionLabel>)
110
115
  ```
111
116
 
112
- Never delete the old line preserve history.
117
+ Mark the checkbox `[x]` and wrap the body in `~~...~~`. Never delete any
118
+ prior todo — preserve history.
113
119
 
114
- 2. **Append the new plan todo.** Add a new line to the end of `## Todos`:
120
+ 2. **Append the new four-todo cycle.** Add four lines to the end of
121
+ `## Todos`, replacing `<versionLabel>` with the human label (e.g.
122
+ `plan v2`) and `<planFilename>` with the new file (e.g. `plan-v2.md`):
115
123
 
116
124
  ```
117
- - [ ] Execute [<versionLabel>](./<planFilename>)
125
+ - [ ] Create [<versionLabel>](./<planFilename>)
126
+ - [ ] Review [<versionLabel>](./<planFilename>)
127
+ - [ ] Implement [<versionLabel>](./<planFilename>)
128
+ - [ ] Review implementation of [<versionLabel>](./<planFilename>)
118
129
  ```
119
130
 
120
- 3. **Missing-section fallback.** If `## Todos` does not exist (legacy assignment predating this convention), insert it immediately after `## Acceptance Criteria` with a short guidance HTML comment followed by the new todo line.
131
+ For the first plan ever (`plan.md`), the label is `plan` and the four todos
132
+ point at `./plan.md`.
133
+
134
+ 3. **Missing-section fallback.** If `## Todos` does not exist (legacy
135
+ assignment predating this convention), insert it immediately after
136
+ `## Acceptance Criteria` with a short guidance HTML comment followed by
137
+ the new four-todo cycle.
121
138
 
122
139
  Also refresh the assignment frontmatter `updated` timestamp.
123
140
 
141
+ > **Note:** the `syntaur plan version` CLI verb (used by the `replan` skill)
142
+ > applies this exact same four-todo-cycle supersede pattern — `plan-assignment`
143
+ > and `replan` are now in lockstep on this convention.
144
+
124
145
  ## Step 6: Report to User
125
146
 
126
147
  After writing the plan:
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: replan
3
+ description: >-
4
+ Create a new versioned plan (`plan-v<N>.md`) for the active Syntaur
5
+ assignment after the current plan has been implemented (or a major scope
6
+ shift makes editing the existing plan misleading). Use when the user wants to
7
+ "create plan-v2", "replan", "version the plan", "make a new plan revision",
8
+ or when work needs another round under the Plan Versioning playbook.
9
+ license: MIT
10
+ metadata:
11
+ author: prong-horn
12
+ version: "1.0.0"
13
+ ---
14
+
15
+ # Replan
16
+
17
+ Bump the active assignment to a new plan version (`plan.md` → `plan-v2.md`,
18
+ `plan-v2.md` → `plan-v3.md`, …). The CLI does the deterministic file ops; this
19
+ skill writes the **body** of the new plan.
20
+
21
+ This skill follows the **Plan Versioning** and **Create-and-Plan-Assignment**
22
+ playbooks: prior plan-cycle todos are marked done with strikethrough +
23
+ `(superseded by plan-v<N>)`, and a fresh four-todo cycle (Create / Review /
24
+ Implement / Review implementation) is appended for the new plan. **Superseded
25
+ todos are never deleted.**
26
+
27
+ ## When NOT to use this skill
28
+
29
+ - The current plan has not been implemented yet — per the Plan Versioning
30
+ playbook, iterate on `plan.md` directly while it is still in draft /
31
+ in_progress.
32
+ - The assignment is in a terminal status (`completed`, `failed`, `cancelled`).
33
+ Reopen it first via `syntaur reopen`.
34
+ - You only need to add a new task to an in-flight plan — edit the existing
35
+ plan; do not bump version.
36
+ - You want to write a fresh plan for a different assignment — switch context
37
+ via `clear-assignment` + `grab-assignment`, then call `plan-assignment`.
38
+
39
+ ## Step 1: Verify there is an active assignment
40
+
41
+ Read `.syntaur/context.json` from the current working directory. Extract
42
+ `assignmentSlug`, `projectSlug` (may be null for standalone), and
43
+ `assignmentDir`.
44
+
45
+ If the file is missing or has no `assignmentSlug`, abort with: "No active
46
+ Syntaur assignment. Run `grab-assignment` first." Do not invent values.
47
+
48
+ ## Step 2: Confirm the prior plan was implemented
49
+
50
+ Read the current plan file (the highest existing `plan*.md`). If its
51
+ `## Tasks` (or equivalent) section still contains unchecked items AND the user
52
+ has not explicitly said the prior plan is done, ask: "The current plan still
53
+ has N unchecked tasks. Are you sure you want to create plan-v<N>? (Plan
54
+ Versioning playbook recommends iterating on `plan.md` until implementation
55
+ is complete.)" Stop unless the user confirms.
56
+
57
+ ## Step 3: Run `syntaur plan version`
58
+
59
+ ```bash
60
+ syntaur plan version --assignment <assignmentSlug> [--project <projectSlug>]
61
+ ```
62
+
63
+ This is the only file-mutating step the skill performs through the CLI. It:
64
+
65
+ 1. Picks the next available `plan-v<N>.md` filename.
66
+ 2. Writes a stub plan with frontmatter and a `## Carried-forward tasks`
67
+ section pre-populated with any unchecked todos from the prior plan body.
68
+ 3. Rewrites the assignment.md `## Todos` section per the four-todo cycle:
69
+ marks the four prior plan-cycle todos as
70
+ `- [x] ~~<original>~~ (superseded by plan-v<N>)` and appends a fresh
71
+ `Create / Review / Implement / Review implementation` cycle pointing at the
72
+ new file.
73
+ 4. Never deletes any prior todo.
74
+
75
+ If the CLI exits non-zero, surface the error to the user and stop.
76
+
77
+ ## Step 4: Read the prior plan and the new stub
78
+
79
+ Read the prior `plan*.md` and the freshly created `plan-v<N>.md`. The stub
80
+ already contains:
81
+
82
+ - Frontmatter (`assignment`, `status: draft`, `created`, `updated`)
83
+ - A heading
84
+ - A `## Objective` section with a placeholder
85
+ - A `## Carried-forward tasks` section
86
+ - Empty `## Tasks` and `## Verification` sections
87
+
88
+ ## Step 5: Write the new plan body
89
+
90
+ Replace the placeholder content in the stub with a concrete, implementable
91
+ plan for the new revision. Match the structure of the prior plan (Files /
92
+ Tasks / Verification, etc.) but keep the body concise. Document explicitly
93
+ **why** a new revision is needed (e.g., "scope expanded after review",
94
+ "rework after partial implementation").
95
+
96
+ Do NOT touch `assignment.md` here — the CLI already updated `## Todos`.
97
+
98
+ ## Step 6: Update progress.md
99
+
100
+ Append a progress entry recording the new plan version, the reason, and a
101
+ pointer to the new plan file.
102
+
103
+ ## Step 7: Report to User
104
+
105
+ Summarize:
106
+
107
+ - New plan path (`<assignmentDir>/plan-v<N>.md`).
108
+ - Number of carried-forward unchecked tasks.
109
+ - Number of prior todos rewritten as superseded (should be the four-todo
110
+ cycle of the previous plan).
111
+ - Reminder: prior plan files are kept on disk as immutable history; do not
112
+ delete them.
113
+ - Next step: review the new plan and begin the new four-todo cycle.
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: resume-session
3
+ description: >-
4
+ Re-orient a fresh Syntaur session on the active assignment without
5
+ re-reading the full transcript. Loads the latest saved session summary,
6
+ `.syntaur/context.json`, and any open handoff. Use when the user says
7
+ "resume", "pick up where we left off", "continue this assignment", or after
8
+ a compact / new session start. Symmetric counterpart to
9
+ `/save-session-summary`.
10
+ license: MIT
11
+ metadata:
12
+ author: prong-horn
13
+ version: "1.0.0"
14
+ ---
15
+
16
+ # Resume Session
17
+
18
+ Print a compact orientation block so the agent (and the user) can pick up the
19
+ active assignment cleanly. **Idempotent — does not mutate any state.** Re-run
20
+ freely; nothing on disk changes.
21
+
22
+ ## When NOT to use this skill
23
+
24
+ - Cross-ticket handoff to a downstream assignment — that's `complete-assignment`
25
+ (writes `handoff.md`).
26
+ - First-time grab of an assignment — use `/grab-assignment` instead; this skill
27
+ assumes context already exists.
28
+ - Saving the current session's progress — that's `/save-session-summary` (the
29
+ symmetric write side).
30
+
31
+ ## Step 1: Verify there is an active context
32
+
33
+ Run `syntaur session resume`. The CLI:
34
+
35
+ 1. Reads `.syntaur/context.json` from the current working directory.
36
+ 2. Aborts (exit 1) with a clear message if missing or if no `assignmentDir`
37
+ is set — telling the user to run `grab-assignment` first.
38
+ 3. Otherwise scans `<assignmentDir>/sessions/<sid>/summary.md` and picks the
39
+ most recently modified.
40
+ 4. Reads `<assignmentDir>/handoff.md` (the canonical single-file handoff per
41
+ assignment, managed by `complete-assignment`) and reports it if its body
42
+ has been written beyond the scaffolded placeholder.
43
+ 5. Prints a human-readable orientation block (project, assignment, branch,
44
+ workspace root, latest summary path, open handoff, warnings).
45
+
46
+ If the CLI prints warnings, surface them — the most common is "no session
47
+ summary on disk", which means a prior session never ran
48
+ `/save-session-summary`.
49
+
50
+ ## Step 2: Read the latest session summary (when present)
51
+
52
+ Open the path printed in step 1 (`<assignmentDir>/sessions/<sid>/summary.md`)
53
+ and load its `## Snapshot`, `## What Was Done`, `## What's Next`, `## Open
54
+ Questions`, and `## Load-Bearing Context` sections. Use these to seed your
55
+ working knowledge of the assignment without scanning the full transcript.
56
+
57
+ ## Step 3: Read the open handoff (when present)
58
+
59
+ If the CLI reported an open handoff, read that file too. It is the highest
60
+ priority signal — there is an outstanding baton to consume.
61
+
62
+ ## Step 4: Read assignment.md and progress.md
63
+
64
+ Always read the current assignment.md (objective, acceptance criteria, todos)
65
+ and the tail of progress.md so you know what has been logged since the last
66
+ summary.
67
+
68
+ ## Step 5: Idempotency check (optional)
69
+
70
+ Re-run `syntaur session resume --json` if you want machine-readable confirmation
71
+ that nothing on disk changed between runs. The output is deterministic for a
72
+ given on-disk state.
73
+
74
+ ## Step 6: Report to User
75
+
76
+ Summarize:
77
+
78
+ - Active project / assignment / branch.
79
+ - Latest session summary timestamp + a one-sentence what's-next pulled from
80
+ it.
81
+ - Whether there is an open handoff (and a one-line summary if so).
82
+ - Open questions to flag back to the user.
83
+ - Suggested next concrete action.
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: set-workspace
3
+ description: >-
4
+ Populate the four `workspace.*` fields (repository, worktreePath, branch,
5
+ parentBranch) in the active assignment's `assignment.md` frontmatter
6
+ before any implementation code is written. Use after creating a worktree,
7
+ picking a branch, or any time the user wants to "set the workspace",
8
+ "wire the assignment to a branch", or per the Workspace Before Code
9
+ playbook. Validates frontmatter via `syntaur doctor --assignment --json`
10
+ before writing — refuses to touch a malformed file.
11
+ license: MIT
12
+ metadata:
13
+ author: prong-horn
14
+ version: "1.0.0"
15
+ ---
16
+
17
+ # Set Workspace
18
+
19
+ Write the four canonical `workspace.*` fields in `assignment.md` frontmatter
20
+ so that the PreToolUse write-boundary hook will allow implementation work.
21
+ Validates the file first via `syntaur doctor --assignment --json` and
22
+ refuses to write on errors.
23
+
24
+ This skill implements the **Workspace Before Code** playbook: never write
25
+ implementation code until workspace fields are set.
26
+
27
+ ## When NOT to use this skill
28
+
29
+ - The workspace fields are already set correctly. Read the assignment.md
30
+ first; if all four fields match the intended values, do nothing.
31
+ - You want to create the worktree itself — use `/syntaur-worktree`, which
32
+ composes worktree creation AND workspace field updates in one move.
33
+ - The assignment is in a terminal status (`completed`, `failed`,
34
+ `cancelled`). Reopen it first if you really need to change workspace.
35
+
36
+ ## Step 1: Resolve the assignment file
37
+
38
+ Read `.syntaur/context.json` from the current working directory. Extract
39
+ `assignmentDir`. The target file is `<assignmentDir>/assignment.md`.
40
+
41
+ If no context, abort with: "No active assignment. Run `grab-assignment`
42
+ first."
43
+
44
+ ## Step 2: Pre-write validation
45
+
46
+ ```bash
47
+ syntaur doctor --assignment <assignmentDir>/assignment.md --json
48
+ ```
49
+
50
+ Parse the JSON output. If `ok: false`, refuse to proceed. Report the
51
+ `errors[]` to the user verbatim and recommend they fix the underlying
52
+ frontmatter (or run `syntaur doctor` for the broader project context).
53
+ **Do not write any changes if the file is malformed.**
54
+
55
+ ## Step 3: Gather inputs
56
+
57
+ Required (one or more — at minimum the user must specify enough to fill
58
+ all four fields):
59
+
60
+ - `--repository <path>` — repo root (typically `git rev-parse --show-toplevel`).
61
+ - `--worktree-path <path>` — usually `<repository>/.worktrees/<branch>`
62
+ per the repo-local convention.
63
+ - `--branch <name>` — current branch (`git rev-parse --abbrev-ref HEAD`).
64
+ - `--parent-branch <name>` — typically `main`.
65
+
66
+ Defaults the skill should auto-detect when not supplied:
67
+
68
+ - `repository` ← `git -C $(pwd) rev-parse --show-toplevel`.
69
+ - `branch` ← `git -C $(pwd) rev-parse --abbrev-ref HEAD`.
70
+ - `worktreePath` ← `$(pwd)` (when invoked from the worktree itself).
71
+ - `parentBranch` ← prompt the user; do not invent.
72
+
73
+ ## Step 4: Read assignment.md
74
+
75
+ Locate the `workspace:` block in the frontmatter. It must look like:
76
+
77
+ ```yaml
78
+ workspace:
79
+ repository: <value-or-null>
80
+ worktreePath: <value-or-null>
81
+ branch: <value-or-null>
82
+ parentBranch: <value-or-null>
83
+ ```
84
+
85
+ If the block is missing entirely, refuse to write — `doctor --assignment`
86
+ should have caught it; this is a defensive check.
87
+
88
+ ## Step 5: Write the four fields
89
+
90
+ Replace the four lines in place. Quote string values containing special
91
+ characters; use `null` literal for unset fields. Preserve the rest of the
92
+ frontmatter and body bit-for-bit.
93
+
94
+ Bump the top-level `updated` timestamp in the frontmatter.
95
+
96
+ ## Step 6: Re-validate
97
+
98
+ Re-run `syntaur doctor --assignment <path> --json`. Expect `ok: true`. If
99
+ the post-write validation fails, restore the prior file content and report
100
+ the error — do not leave the file in a half-written state.
101
+
102
+ ## Step 7: Report to User
103
+
104
+ Summarize:
105
+
106
+ - Path of the modified assignment.md.
107
+ - The four field values that were written.
108
+ - Confirmation that post-write `doctor --assignment` passed.
109
+ - Reminder: implementation work is now unblocked by the write-boundary hook.
@@ -111,6 +111,10 @@ ls ~/.syntaur/playbooks/*.md 2>/dev/null
111
111
  - Write handoffs with enough context for another agent or human to continue cleanly. Record decisions in `decision-record.md` with Status / Context / Decision / Consequences — downstream dependents auto-load these during grab.
112
112
  - Commit frequently with messages referencing the assignment slug.
113
113
 
114
+ ### Proof artifacts (opt-in)
115
+
116
+ Agents can attach typed evidence so a human reviewer can verify work in seconds without re-running it. Use `syntaur capture` after a meaningful change is verified, then `syntaur proof build` to render `proof.html` at the assignment dir. Artifact kinds at v1: `screenshot`, `video`, `asciinema`, `http`, `text`. Criterion linkage is optional (0-based index into `## Acceptance Criteria`); untagged or stale-out-of-range artifacts render in a final "Other artifacts" section. Files live under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The `complete-assignment` skill mentions the proof page in its final report. **No completion gate** — proof is purely opt-in for v1.
117
+
114
118
  ## References
115
119
 
116
120
  For the full directory structure, lifecycle state table, and detailed file ownership rules, read:
@@ -80,3 +80,11 @@ Protocol version: **2.0**
80
80
  10. **Comments** are appended to `comments.md` via `syntaur comment <slug> "body" [--type question|note|feedback] [--reply-to <id>]`. Never edit `comments.md` directly. Questions carry a `resolved` flag toggled in the dashboard.
81
81
  11. **Cross-assignment work** is requested via `syntaur request <target> "text"` — appends to the target's `## Todos` annotated `(from: <source>)`.
82
82
  12. **Agent sessions** in `syntaur.db` must use real agent-runtime session IDs. Synthesized UUIDs are rejected. Plugins for Claude Code / Codex populate `.syntaur/context.json` with the real id via a SessionStart hook; other agents should source it from their runtime and pass `--session-id` explicitly.
83
+
84
+ ## Proof artifacts (opt-in)
85
+
86
+ Agents can attach typed evidence to an assignment so a human reviewer can verify the work in seconds without re-running it.
87
+
88
+ - `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`. For `--kind=http`, supply `--file` (transcript) or `--note` (inline summary).
89
+ - `syntaur proof build [target]` — render `proof.html` and `proof.md` at the assignment dir, walking the `## Acceptance Criteria` list and embedding tagged artifacts inline beneath each criterion. Untagged or stale (out-of-range) captures land in a final "Other artifacts" section. Atomic overwrite — safe to re-run.
90
+ - Artifacts are stored under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The DB row lives in `~/.syntaur/syntaur.db` alongside session tracking. No completion gate — proof is purely opt-in for v1.
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: syntaur-worktree
3
+ description: >-
4
+ Create a git worktree for a Syntaur assignment under
5
+ `<repo>/.worktrees/<branch>`, claim the assignment, and bind the new
6
+ workspace to the agent session — all in one move. Use when the user wants
7
+ to "make a worktree", "branch + worktree for this assignment", "spin up an
8
+ isolated workspace", or set up parallel work on a different assignment.
9
+ license: MIT
10
+ metadata:
11
+ author: prong-horn
12
+ version: "1.0.0"
13
+ ---
14
+
15
+ # Syntaur Worktree
16
+
17
+ Atomic worktree-and-grab for a Syntaur assignment. Composes four lower-level
18
+ operations:
19
+
20
+ 1. `git worktree add` (via `syntaur worktree create`) — repo-local convention
21
+ `<repository>/.worktrees/<branch>`.
22
+ 2. Update `assignment.md` workspace fields (done by the same CLI verb,
23
+ transactionally — rolls back the worktree on write failure).
24
+ 3. `syntaur assign` + `syntaur start` — claim the assignment for this agent
25
+ and transition to `in_progress`.
26
+ 4. Write `.syntaur/context.json` inside the new worktree so the session is
27
+ bound there.
28
+
29
+ ## When NOT to use this skill
30
+
31
+ - You only want to create a git worktree outside of Syntaur — use
32
+ `git worktree add` directly. This skill assumes a Syntaur assignment exists.
33
+ - The assignment already has a worktree path set in `assignment.md` workspace
34
+ fields. Check first; reuse the existing path.
35
+ - You want to grab an assignment without creating a worktree — use
36
+ `/grab-assignment` directly.
37
+
38
+ ## Step 1: Resolve inputs
39
+
40
+ Required arguments from the user (or interactive prompts):
41
+
42
+ - `--project <slug>` (omit for standalone assignments — pass `--id <uuid>`)
43
+ - `--assignment <slug-or-uuid>`
44
+ - `--branch <name>` — the new branch name (also the worktree dir name)
45
+ - `--repository <path>` — defaults to current working directory; usually the
46
+ repo root the assignment lives in
47
+ - `--parent-branch <name>` — defaults to `main`
48
+
49
+ The computed worktree path is **always**
50
+ `<repository>/.worktrees/<branch>`. Never `.claude/worktrees/`. Never
51
+ `~/.syntaur/worktrees/...`. The repo-local convention is enforced.
52
+
53
+ ## Step 2: Pre-flight
54
+
55
+ - Confirm `<repository>/.git` exists.
56
+ - Confirm the branch does NOT already exist (otherwise the CLI will fail
57
+ cleanly — surface that error).
58
+ - Confirm the assignment is not in a terminal status. If it is, suggest
59
+ `syntaur reopen` first.
60
+
61
+ ## Step 3: Create worktree + record workspace
62
+
63
+ ```bash
64
+ syntaur worktree create \
65
+ --repository <repository> \
66
+ --branch <branch> \
67
+ --parent-branch <parent-branch> \
68
+ --assignment <slug-or-uuid> \
69
+ --project <project-slug>
70
+ ```
71
+
72
+ The CLI handles atomicity — on any failure the worktree (if created) and the
73
+ new branch are removed.
74
+
75
+ ## Step 4: Claim the assignment
76
+
77
+ ```bash
78
+ syntaur assign <assignment> --agent <your-agent-name> --project <project-slug>
79
+ syntaur start <assignment> --project <project-slug> # only if status was pending
80
+ ```
81
+
82
+ Skip `start` for any non-`pending` status — never rewind a `review`,
83
+ `completed`, or `failed` assignment.
84
+
85
+ ## Step 5: Bind the new worktree to your session
86
+
87
+ `cd` into the new worktree path. Write
88
+ `<worktreePath>/.syntaur/context.json` mirroring the format produced by
89
+ `/grab-assignment` (projectSlug, assignmentSlug, projectDir, assignmentDir,
90
+ workspaceRoot, title, branch, sessionId, transcriptPath, grabbedAt).
91
+
92
+ If the runtime exposes a real session id (e.g. Claude Code's
93
+ `~/.claude/sessions/`), include it. Otherwise omit `sessionId` entirely; the
94
+ SessionStart hook will populate it on next run.
95
+
96
+ ## Step 6: Register the session with the dashboard
97
+
98
+ ```bash
99
+ syntaur track-session \
100
+ --project <project-slug> --assignment <assignment-slug> \
101
+ --agent <your-agent-name> \
102
+ --session-id <real-id> \
103
+ --path "$(pwd)"
104
+ ```
105
+
106
+ Skip if no real session id is available. Surface the failure non-fatally.
107
+
108
+ ## Step 7: Report to User
109
+
110
+ Summarize:
111
+
112
+ - New worktree path (`<repository>/.worktrees/<branch>`).
113
+ - Branch + parent branch.
114
+ - Assignment slug, project slug, new status.
115
+ - Whether the session was registered with the dashboard.
116
+ - Reminder to `cd` into the new worktree if the parent shell is not already
117
+ there.
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: add-memory
3
+ description: >-
4
+ Capture a project-level Syntaur memory (durable context like a convention,
5
+ decision rationale, or constraint) under a project's `memories/` directory.
6
+ Use when the user wants to "save this to memory", "remember for the project",
7
+ "capture this decision", "add a project memory", or pin reusable context that
8
+ should outlive any single assignment. Writes via the CLI so the
9
+ CLI-managed `_index.md` is never touched directly.
10
+ license: MIT
11
+ metadata:
12
+ author: prong-horn
13
+ version: "1.0.0"
14
+ ---
15
+
16
+ # Add Memory
17
+
18
+ Add a memory entry to a Syntaur project. Writes
19
+ `<projectDir>/memories/<slug>.md` and regenerates `_index.md` server-side via
20
+ `syntaur memory add` — the agent never edits `_index.md` directly per the
21
+ file-ownership protocol.
22
+
23
+ ## When NOT to use this skill
24
+
25
+ - The information is a **pointer to an external system** (URL, dashboard,
26
+ ticket) — use `add-resource` instead.
27
+ - The information is the user-global Claude Code memory at
28
+ `~/.claude/projects/<...>/memory/MEMORY.md` — that's a different system
29
+ managed by the auto-memory feature, NOT Syntaur project memories.
30
+ - The information is single-assignment scratch — put it in the assignment's
31
+ `scratchpad.md`.
32
+
33
+ ## Step 1: Resolve project
34
+
35
+ If `.syntaur/context.json` is present and has `projectSlug`, default to that.
36
+ Otherwise ask the user which project to add the memory to.
37
+
38
+ ## Step 2: Gather inputs
39
+
40
+ Required:
41
+
42
+ - `--name <human readable>` — display name for the memory.
43
+ - `--source <text>` — where this memory came from (e.g. "conversation
44
+ 2026-05-08", a decision-record reference, a doc URL).
45
+
46
+ Optional:
47
+
48
+ - `--scope <scope>` — defaults to `project`. Common values: `project`,
49
+ `architecture`, `policy`.
50
+ - `--source-assignment <slug>` — assignment slug this memory was captured
51
+ during (helps trace the origin).
52
+ - `--related-assignments <slug,slug,...>` — comma-separated assignment slugs
53
+ this memory is relevant to.
54
+ - `--slug <slug>` — override the auto-generated kebab-case slug.
55
+
56
+ ## Step 3: Run `syntaur memory add`
57
+
58
+ ```bash
59
+ syntaur memory add \
60
+ --project <project-slug> \
61
+ --name "<name>" \
62
+ --source "<text>" \
63
+ [--scope <scope>] \
64
+ [--source-assignment <slug>] \
65
+ [--related-assignments <slug,slug>] \
66
+ [--slug <slug>] \
67
+ [--force]
68
+ ```
69
+
70
+ The CLI:
71
+
72
+ 1. Validates the project exists.
73
+ 2. Writes `<projectDir>/memories/<slug>.md` with the canonical frontmatter
74
+ (`name`, `source`, `scope`, `sourceAssignment`, `relatedAssignments`,
75
+ `created`, `updated`).
76
+ 3. Regenerates `<projectDir>/memories/_index.md` from the directory contents.
77
+ 4. Refuses to overwrite an existing memory without `--force`.
78
+
79
+ **Do not write to `_index.md` directly under any circumstances** — that file
80
+ is owned by the CLI per the file-ownership protocol.
81
+
82
+ ## Step 4: Open the new memory file (optional)
83
+
84
+ If the user wants to flesh out the body content beyond the placeholder, open
85
+ `<projectDir>/memories/<slug>.md` and edit the body. The frontmatter is
86
+ already correct; only edit content below the second `---`.
87
+
88
+ ## Step 5: Report to User
89
+
90
+ Summarize:
91
+
92
+ - Memory slug and absolute path.
93
+ - Project that received the memory.
94
+ - Index regenerated (with the new total).
95
+ - Suggested next step: edit the body to capture load-bearing context, or
96
+ open the dashboard to see the new entry.