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.
- package/.claude-plugin/plugin.json +9 -1
- package/dashboard/dist/assets/{_basePickBy-CIZortGD.js → _basePickBy-XOV2F7dX.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-BHP5NBQ7.js → _baseUniq-Dccfk3fK.js} +1 -1
- package/dashboard/dist/assets/{arc-BLtQy7Cl.js → arc-TwJ5RF-H.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-0mhIBjWy.js → architectureDiagram-2XIMDMQ5-CpkVJudw.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-CM7K5Tf5.js → blockDiagram-WCTKOSBZ-Ck6VQ4Fh.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-gsbeygvS.js → c4Diagram-IC4MRINW-B5V7YG03.js} +1 -1
- package/dashboard/dist/assets/channel-AEMTX70R.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-CneRz9Nd.js → chunk-4BX2VUAB-rBdyOxAe.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-uetANWHd.js → chunk-55IACEB6-DKlNXjYt.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-3-tNszoF.js → chunk-FMBD7UC4-Cqm0PtUI.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-DOO88rZD.js → chunk-JSJVCQXG-CQyXQcG3.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-Bnc1CFy2.js → chunk-KX2RTZJC-DmqjHPpJ.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-BfViC1Ms.js → chunk-NQ4KR5QH-CHXoBcYa.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-CgjyAt2l.js → chunk-QZHKN3VN-Dd4sChBS.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-BYFermSR.js → chunk-WL4C6EOR-D-QLnkY8.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-LzuOAGzu.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-LzuOAGzu.js +1 -0
- package/dashboard/dist/assets/clone-Cw63QGUJ.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-CE-k5SLv.js → cose-bilkent-S5V4N54A-VZi6uV56.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-CX7Br8LQ.js → dagre-KLK3FWXG-CtT97Qhx.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-t-xhWjCU.js → diagram-E7M64L7V-BjYTNNHb.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-BVhcTXsJ.js → diagram-IFDJBPK2-qj8_r6fb.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-fxt8ZSca.js → diagram-P4PSJMXO-DlfWo7Vt.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-C20k2bxX.js → erDiagram-INFDFZHY-Ch_nApTv.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CdeygexM.js → flowDiagram-PKNHOUZH-EOVsqNyi.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-CPsoOAV-.js → ganttDiagram-A5KZAMGK-CS-lx0B-.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-t0tCTIZy.js → gitGraphDiagram-K3NZZRJ6-Ba6RDzPy.js} +1 -1
- package/dashboard/dist/assets/{graph-Bcqd31wL.js → graph-BKaAyLk-.js} +1 -1
- package/dashboard/dist/assets/index-BTWPZaIA.css +1 -0
- package/dashboard/dist/assets/index-Dk9PBm5B.js +510 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-DgoKvH3N.js → infoDiagram-LFFYTUFH-Cr20xEsd.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CGr4P8do.js → ishikawaDiagram-PHBUUO56-CuILV9ph.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-CHYRi6wF.js → journeyDiagram-4ABVD52K-CO-l7Mpm.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-kwzqrFcW.js → kanban-definition-K7BYSVSG-CcirPw_S.js} +1 -1
- package/dashboard/dist/assets/{layout-wud47qGs.js → layout-BXvr8dMw.js} +1 -1
- package/dashboard/dist/assets/{linear-DG5js90X.js → linear-B85hgYnX.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-BDw69uC2.js → mermaid.core-DcZN9Xp2.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-Dw_uyg1-.js → mindmap-definition-YRQLILUH-Bxi6p5_3.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-C7NBi6tK.js → pieDiagram-SKSYHLDU-DOSvU0UD.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-_N_BSBd4.js → quadrantDiagram-337W2JSQ-Cmo-5tW9.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-BqUiqfP1.js → requirementDiagram-Z7DCOOCP-Dw8alwuI.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-C2Qq5ULW.js → sankeyDiagram-WA2Y5GQK-ZPB-rzOg.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BOCF2z8f.js → sequenceDiagram-2WXFIKYE-Ct8bkK2h.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-BvDyTxC5.js → stateDiagram-RAJIS63D-DnGOXlmx.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-COGzlZxn.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-DNNZxSrG.js → timeline-definition-YZTLITO2-AUFmbJjr.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-C6hOdiGH.js → treemap-KZPCXAKY-Dw5FDFAV.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-FmXl6puP.js → vennDiagram-LZ73GAT5-DfxicU4N.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-Bjav12WG.js → xychartDiagram-JWTSCODW--9N0V1r_.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist/syntaur-logo.svg +5 -13
- package/dist/dashboard/server.js +363 -3
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +2140 -153
- package/dist/index.js.map +1 -1
- package/examples/playbooks/keep-records-updated.md +2 -1
- package/package.json +1 -1
- package/platforms/claude-code/.claude-plugin/plugin.json +9 -1
- package/platforms/claude-code/agents/syntaur-expert.md +1 -1
- package/platforms/claude-code/commands/add-memory/add-memory.md +18 -0
- package/platforms/claude-code/commands/add-resource/add-resource.md +16 -0
- package/platforms/claude-code/commands/list-assignments/list-assignments.md +16 -0
- package/platforms/claude-code/commands/log-progress/log-progress.md +16 -0
- package/platforms/claude-code/commands/replan/replan.md +16 -0
- package/platforms/claude-code/commands/resume-session/resume-session.md +16 -0
- package/platforms/claude-code/commands/set-workspace/set-workspace.md +16 -0
- package/platforms/claude-code/commands/syntaur-worktree/syntaur-worktree.md +16 -0
- package/platforms/claude-code/references/protocol-summary.md +8 -0
- package/platforms/claude-code/skills/add-memory/SKILL.md +96 -0
- package/platforms/claude-code/skills/add-resource/SKILL.md +85 -0
- package/platforms/claude-code/skills/capture-artifacts/SKILL.md +84 -0
- package/platforms/claude-code/skills/complete-assignment/SKILL.md +2 -1
- package/platforms/claude-code/skills/list-assignments/SKILL.md +73 -0
- package/platforms/claude-code/skills/log-progress/SKILL.md +128 -0
- package/platforms/claude-code/skills/plan-assignment/SKILL.md +29 -8
- package/platforms/claude-code/skills/replan/SKILL.md +113 -0
- package/platforms/claude-code/skills/resume-session/SKILL.md +83 -0
- package/platforms/claude-code/skills/set-workspace/SKILL.md +109 -0
- package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +4 -0
- package/platforms/claude-code/skills/syntaur-protocol/references/protocol-summary.md +8 -0
- package/platforms/claude-code/skills/syntaur-worktree/SKILL.md +117 -0
- package/platforms/codex/README.md +2 -2
- package/platforms/codex/agents/syntaur-operator.md +7 -0
- package/platforms/codex/commands/add-memory.md +16 -0
- package/platforms/codex/commands/add-resource.md +14 -0
- package/platforms/codex/commands/list-assignments.md +13 -0
- package/platforms/codex/commands/log-progress.md +14 -0
- package/platforms/codex/commands/replan.md +15 -0
- package/platforms/codex/commands/resume-session.md +15 -0
- package/platforms/codex/commands/set-workspace.md +15 -0
- package/platforms/codex/commands/syntaur-worktree.md +15 -0
- package/platforms/codex/references/protocol-summary.md +8 -0
- package/platforms/codex/skills/add-memory/SKILL.md +96 -0
- package/platforms/codex/skills/add-resource/SKILL.md +85 -0
- package/platforms/codex/skills/capture-artifacts/SKILL.md +84 -0
- package/platforms/codex/skills/complete-assignment/SKILL.md +2 -1
- package/platforms/codex/skills/list-assignments/SKILL.md +73 -0
- package/platforms/codex/skills/log-progress/SKILL.md +128 -0
- package/platforms/codex/skills/plan-assignment/SKILL.md +29 -8
- package/platforms/codex/skills/replan/SKILL.md +113 -0
- package/platforms/codex/skills/resume-session/SKILL.md +83 -0
- package/platforms/codex/skills/set-workspace/SKILL.md +109 -0
- package/platforms/codex/skills/syntaur-protocol/SKILL.md +4 -0
- package/platforms/codex/skills/syntaur-protocol/references/protocol-summary.md +8 -0
- package/platforms/codex/skills/syntaur-worktree/SKILL.md +117 -0
- package/skills/add-memory/SKILL.md +96 -0
- package/skills/add-resource/SKILL.md +85 -0
- package/skills/capture-artifacts/SKILL.md +84 -0
- package/skills/complete-assignment/SKILL.md +2 -1
- package/skills/list-assignments/SKILL.md +73 -0
- package/skills/log-progress/SKILL.md +128 -0
- package/skills/plan-assignment/SKILL.md +29 -8
- package/skills/replan/SKILL.md +113 -0
- package/skills/resume-session/SKILL.md +83 -0
- package/skills/set-workspace/SKILL.md +109 -0
- package/skills/syntaur-protocol/SKILL.md +4 -0
- package/skills/syntaur-protocol/references/protocol-summary.md +8 -0
- package/skills/syntaur-worktree/SKILL.md +117 -0
- package/dashboard/dist/assets/channel-FWLgstBg.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BAvQTSn_.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BAvQTSn_.js +0 -1
- package/dashboard/dist/assets/clone-rSEllQ1P.js +0 -1
- package/dashboard/dist/assets/index-bLWoSCLL.css +0 -1
- package/dashboard/dist/assets/index-eS0wtDO0.js +0 -500
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-TaLLhLWD.js +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: log-progress
|
|
3
|
+
description: >-
|
|
4
|
+
Append a timestamped entry to the active assignment's `progress.md`,
|
|
5
|
+
bumping `entryCount` and `updated` in its frontmatter. Use after every
|
|
6
|
+
meaningful action — completing an acceptance criterion, finishing a plan
|
|
7
|
+
task, hitting a blocker, deciding on an approach — per the Keep Records
|
|
8
|
+
Updated playbook. Triggers on "log progress", "note progress", "record
|
|
9
|
+
this in progress", or whenever the playbook says to update records.
|
|
10
|
+
license: MIT
|
|
11
|
+
metadata:
|
|
12
|
+
author: prong-horn
|
|
13
|
+
version: "1.0.0"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Log Progress
|
|
17
|
+
|
|
18
|
+
Append a structured timestamped entry to the active assignment's
|
|
19
|
+
`<assignmentDir>/progress.md`, and update its frontmatter. Markdown-only —
|
|
20
|
+
no CLI verb. Idempotent in the sense that re-running with the same body
|
|
21
|
+
produces a duplicate entry, which is intentional (timestamps differ).
|
|
22
|
+
|
|
23
|
+
This skill implements the **Keep Records Updated** playbook: agents must keep
|
|
24
|
+
records current in real-time, especially after every meaningful action.
|
|
25
|
+
|
|
26
|
+
## When NOT to use this skill
|
|
27
|
+
|
|
28
|
+
- The action belongs in `decision-record.md` (architecturally significant
|
|
29
|
+
decisions with rationale) — write to that file, not progress.md.
|
|
30
|
+
- The information is for the next session of the SAME assignment — that's
|
|
31
|
+
`/save-session-summary`.
|
|
32
|
+
- The information is a question for the user — write to `comments.md` via
|
|
33
|
+
`syntaur comment` (CLI-mediated).
|
|
34
|
+
- The information is a follow-up assignment idea — open a new assignment
|
|
35
|
+
via `/create-assignment`.
|
|
36
|
+
|
|
37
|
+
## Step 1: Verify there is an active assignment
|
|
38
|
+
|
|
39
|
+
Read `.syntaur/context.json` from the current working directory. Extract
|
|
40
|
+
`assignmentDir`. If missing, abort with: "No active assignment. Run
|
|
41
|
+
`grab-assignment` first."
|
|
42
|
+
|
|
43
|
+
## Step 2: Compose the entry
|
|
44
|
+
|
|
45
|
+
The entry should be concise, factual, and link-rich. Suggested structure:
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
## <ISO 8601 UTC timestamp> — <one-line summary>
|
|
49
|
+
|
|
50
|
+
- What changed (action verbs).
|
|
51
|
+
- Files touched: `path/to/file.ts:line`, `another.ts`.
|
|
52
|
+
- Commits: `<short-sha>` (one per logical change).
|
|
53
|
+
- Verification: `npm test src/...`, `node dist/index.js x --help`, etc.
|
|
54
|
+
|
|
55
|
+
Optional notes paragraph.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Use ISO 8601 with `Z` suffix (e.g. `2026-05-08T20:13:00Z`). Use absolute
|
|
59
|
+
file paths or repo-relative paths consistently.
|
|
60
|
+
|
|
61
|
+
## Step 3: Read existing progress.md
|
|
62
|
+
|
|
63
|
+
Read `<assignmentDir>/progress.md`. Extract:
|
|
64
|
+
|
|
65
|
+
- Current `entryCount` from the frontmatter.
|
|
66
|
+
- The full body (everything after the second `---`).
|
|
67
|
+
|
|
68
|
+
If `progress.md` doesn't exist, abort and tell the user to re-grab the
|
|
69
|
+
assignment (the file should always exist for an in-progress assignment).
|
|
70
|
+
|
|
71
|
+
## Step 4: Compute new frontmatter
|
|
72
|
+
|
|
73
|
+
- `entryCount`: increment by 1.
|
|
74
|
+
- `updated`: set to current ISO timestamp.
|
|
75
|
+
- Other fields (`assignment`, `generated`): preserve as-is.
|
|
76
|
+
|
|
77
|
+
## Step 5: Write the file
|
|
78
|
+
|
|
79
|
+
Write back the file with the updated frontmatter and the new entry **prepended**
|
|
80
|
+
to the body (newest first), per the Keep Records Updated playbook and
|
|
81
|
+
`skills/syntaur-protocol/references/protocol-summary.md`. Reverse-chronological
|
|
82
|
+
order: the new `## <ISO 8601 timestamp>` heading sits immediately after the
|
|
83
|
+
`# Progress` H1, with one blank line separating it from any prior entry.
|
|
84
|
+
|
|
85
|
+
Layout:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
# Progress
|
|
89
|
+
|
|
90
|
+
## <new ISO timestamp>
|
|
91
|
+
|
|
92
|
+
<new entry body>
|
|
93
|
+
|
|
94
|
+
## <prior ISO timestamp>
|
|
95
|
+
|
|
96
|
+
<prior entry body>
|
|
97
|
+
|
|
98
|
+
## <even-older ISO timestamp>
|
|
99
|
+
|
|
100
|
+
<even-older entry body>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
If the existing body is the placeholder text "No progress yet.", replace it
|
|
104
|
+
with the new entry instead of preserving the placeholder.
|
|
105
|
+
|
|
106
|
+
> **Why prepend:** the dashboard and downstream readers expect the most recent
|
|
107
|
+
> entry first. Appending at the end would silently break the convention
|
|
108
|
+
> documented in `~/.syntaur/playbooks/keep-records-updated.md`.
|
|
109
|
+
|
|
110
|
+
## Step 6: Verify schema
|
|
111
|
+
|
|
112
|
+
Confirm by re-reading the file:
|
|
113
|
+
|
|
114
|
+
- Starts with `---`, then frontmatter, then `---`.
|
|
115
|
+
- `entryCount` is a non-negative integer.
|
|
116
|
+
- `updated` matches the timestamp you wrote.
|
|
117
|
+
- The new entry's `## <timestamp>` heading is present.
|
|
118
|
+
|
|
119
|
+
If the file fails schema check, restore the prior content and report the
|
|
120
|
+
error — do not leave it partially written.
|
|
121
|
+
|
|
122
|
+
## Step 7: Report to User
|
|
123
|
+
|
|
124
|
+
Summarize:
|
|
125
|
+
|
|
126
|
+
- Path of the modified `progress.md`.
|
|
127
|
+
- New `entryCount`.
|
|
128
|
+
- One-line summary of the entry that was logged.
|
|
@@ -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
|
|
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]
|
|
114
|
+
- [x] ~~<original line body>~~ (superseded by <versionLabel>)
|
|
110
115
|
```
|
|
111
116
|
|
|
112
|
-
|
|
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
|
|
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
|
-
- [ ]
|
|
125
|
+
- [ ] Create [<versionLabel>](./<planFilename>)
|
|
126
|
+
- [ ] Review [<versionLabel>](./<planFilename>)
|
|
127
|
+
- [ ] Implement [<versionLabel>](./<planFilename>)
|
|
128
|
+
- [ ] Review implementation of [<versionLabel>](./<planFilename>)
|
|
118
129
|
```
|
|
119
130
|
|
|
120
|
-
|
|
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.
|
|
@@ -4,9 +4,9 @@ Syntaur plugin for OpenAI Codex. Installed automatically during `syntaur setup`.
|
|
|
4
4
|
|
|
5
5
|
## What's included
|
|
6
6
|
|
|
7
|
-
- **Skills:** syntaur-protocol, create-project, create-assignment, grab-assignment, plan-assignment, complete-assignment, track-session, save-session-summary
|
|
7
|
+
- **Skills:** syntaur-protocol, create-project, create-assignment, grab-assignment, plan-assignment, complete-assignment, track-session, save-session-summary, manage-statuses, clear-assignment, replan, resume-session, syntaur-worktree, add-resource, add-memory, list-assignments, log-progress, set-workspace
|
|
8
8
|
- **Hooks:** write boundary enforcement, session cleanup
|
|
9
|
-
- **Commands:** track-session, save-session-summary (Codex has no `PreCompact` event — invoke manually before compaction or session end)
|
|
9
|
+
- **Commands:** track-session, save-session-summary, replan, resume-session, syntaur-worktree, add-resource, add-memory, list-assignments, log-progress, set-workspace (Codex has no `PreCompact` event — invoke save-session-summary manually before compaction or session end)
|
|
10
10
|
- **Agents:** syntaur-protocol (background)
|
|
11
11
|
- **References:** protocol docs
|
|
12
12
|
|
|
@@ -97,6 +97,13 @@ Use these commands directly when needed:
|
|
|
97
97
|
- `syntaur uninstall [--all] [--yes]`
|
|
98
98
|
- `syntaur track-session --project <project-slug> --assignment <assignment-slug> --agent codex --session-id <real-id> --transcript-path <rollout-path> --path <cwd>` (both `--session-id` and `--transcript-path` must come from the matching Codex rollout file — never synthesize)
|
|
99
99
|
- `syntaur setup-adapter codex --project <project-slug> --assignment <assignment-slug>`
|
|
100
|
+
- `syntaur plan version --assignment <slug> [--project <slug>]` — bump to `plan-v<N>.md` per Plan Versioning playbook
|
|
101
|
+
- `syntaur session resume [--json]` — re-orient on the active assignment from latest session summary + context.json + open handoff (idempotent)
|
|
102
|
+
- `syntaur worktree create --branch <name> [--repository <path>] [--parent-branch <name>] [--assignment <slug>] [--project <slug>]` — repo-local `<repository>/.worktrees/<branch>` convention
|
|
103
|
+
- `syntaur resource add --project <slug> --name <name> --source <url> [--category <name>] [--related-assignments <slug,slug>]` — writes resource file + regenerates `_index.md`
|
|
104
|
+
- `syntaur memory add --project <slug> --name <name> --source <text> [--scope <scope>] [--source-assignment <slug>] [--related-assignments <slug,slug>]` — writes memory file + regenerates `_index.md`
|
|
105
|
+
- `syntaur ls [--status <list>] [--project <slug>] [--tag <list>] [--age <duration>] [--json]` — cross-project filtered listing (non-interactive; for the TUI use `syntaur browse`)
|
|
106
|
+
- `syntaur doctor --assignment <path> --json` — validate a single assignment.md frontmatter and emit `{ok, errors[], warnings[]}` (used by the `set-workspace` skill before writing)
|
|
100
107
|
|
|
101
108
|
## Standard Workflows
|
|
102
109
|
|