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.
- package/README.md +5 -0
- package/dashboard/dist/assets/{_basePickBy-DXzhD14q.js → _basePickBy-CHKX1r7P.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-gxypqvP5.js → _baseUniq-CTxTc4MS.js} +1 -1
- package/dashboard/dist/assets/{arc-Ce7nYKSm.js → arc-BUo5zftd.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-zX4f4_Mf.js → architectureDiagram-2XIMDMQ5-CrJLm-P0.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-auOdy7nH.js → blockDiagram-WCTKOSBZ-BK60lBBJ.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-C2kkjPbW.js → c4Diagram-IC4MRINW-C7oJEvA0.js} +1 -1
- package/dashboard/dist/assets/channel-DdltvFFH.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-B7dfpnbG.js → chunk-4BX2VUAB-CjUPlzHz.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-r1_jHZYp.js → chunk-55IACEB6-6HmWguiO.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-5mMONjMK.js → chunk-FMBD7UC4-CLuJnd1b.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-CwKj-Es4.js → chunk-JSJVCQXG-B4d62qWV.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-ByoW-HgN.js → chunk-KX2RTZJC-AsEKRPq2.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-D1olOovd.js → chunk-NQ4KR5QH-DQhHHvwY.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-CB8_FC8w.js → chunk-QZHKN3VN-Ds1TtI3E.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-CFEqRrE1.js → chunk-WL4C6EOR-C7jE3-cR.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BHqdFE-8.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BHqdFE-8.js +1 -0
- package/dashboard/dist/assets/clone-CBJOOeOm.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-D6dGVXEI.js → cose-bilkent-S5V4N54A-C9ka5v1m.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-Cvg9CgP-.js → dagre-KLK3FWXG-BbgPQBKy.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-iCBudhZD.js → diagram-E7M64L7V-DpdeZFD4.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-BGniy7VQ.js → diagram-IFDJBPK2-FlHLQzOV.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-B6Ie044E.js → diagram-P4PSJMXO-B22NkEF_.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-BHvFRNhJ.js → erDiagram-INFDFZHY-zSqmtDid.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CN86Zu3Q.js → flowDiagram-PKNHOUZH-BP_0XmVV.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-D-1fKFjW.js → ganttDiagram-A5KZAMGK-8uRyYgZV.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-Dtf1A6KL.js → gitGraphDiagram-K3NZZRJ6-JFqg8sv4.js} +1 -1
- package/dashboard/dist/assets/{graph-B6H_kXSs.js → graph-a-PAH599.js} +1 -1
- package/dashboard/dist/assets/index-CoVCLSh2.css +1 -0
- package/dashboard/dist/assets/index-yyAIuzrP.js +471 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-R9wJj4JF.js → infoDiagram-LFFYTUFH-C3kq7Nbv.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CJmeR-bX.js → ishikawaDiagram-PHBUUO56-Kqi4EZ-n.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-FcUhyu8I.js → journeyDiagram-4ABVD52K-CTfv0Wcr.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-C8UcTIwW.js → kanban-definition-K7BYSVSG-Dmx0lgvR.js} +1 -1
- package/dashboard/dist/assets/{layout-DzBy6alw.js → layout-KKRbT2Od.js} +1 -1
- package/dashboard/dist/assets/{linear-CZJCNOB9.js → linear-5egaBiw7.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-fMQRe9Gq.js → mermaid.core-C9pF_oFQ.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-BFwp-LS-.js → mindmap-definition-YRQLILUH-C7HXYEXt.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CQLmPkkd.js → pieDiagram-SKSYHLDU-DkdZm-YP.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-DAmi-dmD.js → quadrantDiagram-337W2JSQ-DkcRJs5F.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-Dcdts4kX.js → requirementDiagram-Z7DCOOCP-BaTDVYTl.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-By8LRvM0.js → sankeyDiagram-WA2Y5GQK-DvPLbGV5.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BsvqgtTz.js → sequenceDiagram-2WXFIKYE-DQoZ2xMK.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-DFNOD7cx.js → stateDiagram-RAJIS63D-CS4l0OjM.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DkBtE1WJ.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-CMcgJGjn.js → timeline-definition-YZTLITO2-aC0iCFCW.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-BWsRNHwq.js → treemap-KZPCXAKY-Ie-PFjgx.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-io7-2Tod.js → vennDiagram-LZ73GAT5-CJN3ExTQ.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-AVnh4fDS.js → xychartDiagram-JWTSCODW-DSiDu1CN.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.d.ts +1 -1
- package/dist/dashboard/server.js +1163 -734
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +3979 -1372
- package/dist/index.js.map +1 -1
- package/examples/playbooks/keep-records-updated.md +1 -1
- package/examples/playbooks/read-before-plan.md +5 -5
- package/examples/{sample-mission → sample-project}/_index-assignments.md +1 -1
- package/examples/{sample-mission → sample-project}/_index-decisions.md +1 -1
- package/examples/{sample-mission → sample-project}/_index-plans.md +1 -1
- package/examples/{sample-mission → sample-project}/_status.md +3 -3
- package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/assignment.md +4 -1
- package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/assignment.md +4 -1
- package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/assignment.md +4 -1
- package/examples/{sample-mission → sample-project}/manifest.md +3 -3
- package/examples/{sample-mission → sample-project}/memories/_index.md +2 -2
- package/examples/{sample-mission → sample-project}/memories/postgres-connection-pooling.md +1 -1
- package/examples/{sample-mission → sample-project}/resources/_index.md +1 -1
- package/package.json +5 -3
- package/platforms/README.md +7 -7
- package/platforms/claude-code/README.md +1 -1
- package/platforms/claude-code/agents/syntaur-expert.md +57 -57
- package/platforms/claude-code/commands/doctor-syntaur/doctor-syntaur.md +112 -0
- package/platforms/claude-code/commands/track-session/track-session.md +8 -8
- package/platforms/claude-code/hooks/enforce-boundaries.sh +4 -4
- package/platforms/claude-code/hooks/hooks.json +1 -1
- package/platforms/claude-code/hooks/session-cleanup.sh +5 -5
- package/platforms/claude-code/references/file-ownership.md +8 -8
- package/platforms/claude-code/references/protocol-summary.md +7 -6
- package/platforms/claude-code/skills/complete-assignment/SKILL.md +21 -17
- package/platforms/claude-code/skills/create-assignment/SKILL.md +15 -14
- package/platforms/claude-code/skills/grab-assignment/SKILL.md +56 -49
- package/platforms/claude-code/skills/plan-assignment/SKILL.md +57 -10
- package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +21 -17
- package/platforms/codex/.codex-plugin/plugin.json +3 -3
- package/platforms/codex/README.md +1 -1
- package/platforms/codex/adapters/AGENTS.md.template +3 -3
- package/platforms/codex/agents/openai.yaml +2 -2
- package/platforms/codex/agents/syntaur-operator.md +33 -30
- package/platforms/codex/references/file-ownership.md +8 -8
- package/platforms/codex/references/protocol-summary.md +11 -6
- package/platforms/codex/scripts/enforce-boundaries.sh +2 -2
- package/platforms/codex/scripts/session-cleanup.sh +2 -2
- package/platforms/codex/skills/complete-assignment/SKILL.md +6 -6
- package/platforms/codex/skills/create-assignment/SKILL.md +8 -7
- package/platforms/codex/skills/grab-assignment/SKILL.md +30 -20
- package/platforms/codex/skills/plan-assignment/SKILL.md +19 -11
- package/platforms/codex/skills/syntaur-protocol/SKILL.md +26 -21
- package/platforms/cursor/README.md +1 -1
- package/platforms/cursor/adapters/syntaur-protocol.mdc +1 -1
- package/platforms/opencode/README.md +1 -1
- package/platforms/opencode/adapters/opencode.json.template +1 -1
- package/dashboard/dist/assets/channel-PMR2DuGi.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-DmESf_RL.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-DmESf_RL.js +0 -1
- package/dashboard/dist/assets/clone-WlIeyha4.js +0 -1
- package/dashboard/dist/assets/index-BhuXD-Q5.js +0 -445
- package/dashboard/dist/assets/index-BnqH-RIk.css +0 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DVO-Epiz.js +0 -1
- package/examples/sample-mission/agent.md +0 -33
- package/examples/sample-mission/claude.md +0 -13
- package/platforms/claude-code/skills/create-mission/SKILL.md +0 -51
- package/platforms/codex/skills/create-mission/SKILL.md +0 -35
- /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/decision-record.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/handoff.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/plan.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/scratchpad.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/decision-record.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/handoff.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/plan.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/scratchpad.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/decision-record.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/handoff.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/plan.md +0 -0
- /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/scratchpad.md +0 -0
- /package/examples/{sample-mission/mission.md → sample-project/project.md} +0 -0
- /package/examples/{sample-mission → sample-project}/resources/auth-requirements.md +0 -0
|
@@ -23,13 +23,13 @@ Optional notes from the user: $ARGUMENTS
|
|
|
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 <
|
|
26
|
+
If the file does not exist, tell the user: "No active assignment found. Run `/grab-assignment <project-slug>` first to claim an assignment."
|
|
27
27
|
|
|
28
28
|
Extract from the context file:
|
|
29
|
-
- `
|
|
29
|
+
- `projectSlug` -- the project slug
|
|
30
30
|
- `assignmentSlug` -- the assignment slug
|
|
31
31
|
- `assignmentDir` -- absolute path to the assignment folder
|
|
32
|
-
- `
|
|
32
|
+
- `projectDir` -- absolute path to the project folder
|
|
33
33
|
- `workspaceRoot` -- absolute path to the workspace (may be null)
|
|
34
34
|
|
|
35
35
|
## Step 1.5: Load Playbooks
|
|
@@ -47,12 +47,12 @@ For each file found, read it and follow its directives. Playbooks may contain ru
|
|
|
47
47
|
Read the following files to understand the assignment:
|
|
48
48
|
|
|
49
49
|
1. Read `<assignmentDir>/assignment.md` -- extract the objective, acceptance criteria, context section, and any Q&A
|
|
50
|
-
2. Read `<
|
|
51
|
-
3. Read `<
|
|
52
|
-
4. Read `<
|
|
50
|
+
2. Read `<projectDir>/agent.md` -- extract conventions and boundaries
|
|
51
|
+
3. Read `<projectDir>/claude.md` if it exists -- extract Claude-specific instructions
|
|
52
|
+
4. Read `<projectDir>/project.md` -- extract the project goal for broader context
|
|
53
53
|
|
|
54
54
|
If the assignment has dependencies (`dependsOn` in frontmatter), read the handoff.md from each dependency's assignment folder for integration context:
|
|
55
|
-
- `<
|
|
55
|
+
- `<projectDir>/assignments/<dep-slug>/handoff.md`
|
|
56
56
|
|
|
57
57
|
## Step 3: Explore Workspace (if set)
|
|
58
58
|
|
|
@@ -72,9 +72,32 @@ If `workspaceRoot` is null, skip this step and note in the plan that no workspac
|
|
|
72
72
|
|
|
73
73
|
## Step 4: Write the Plan
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
Plans are versioned. The first plan for an assignment is `plan.md`; subsequent plans are `plan-v2.md`, `plan-v3.md`, etc. Each plan gets a linked entry in the `## Todos` section of `assignment.md`, and any prior active plan todo is marked superseded (never deleted).
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
### 4a. Determine the next plan filename
|
|
78
|
+
|
|
79
|
+
Use Glob to list `<assignmentDir>/plan*.md`. Then:
|
|
80
|
+
|
|
81
|
+
- If no plan files exist, the target is `plan.md` and the version label is "plan".
|
|
82
|
+
- If `plan.md` exists but no `plan-v<N>.md`, the target is `plan-v2.md` and the version label is "plan v2".
|
|
83
|
+
- Otherwise, pick the smallest `N >= 2` such that `plan-v<N>.md` does not exist. The version label is `plan v<N>`.
|
|
84
|
+
|
|
85
|
+
Remember this `planFilename` and `versionLabel` for the remaining substeps.
|
|
86
|
+
|
|
87
|
+
### 4b. Write the plan file
|
|
88
|
+
|
|
89
|
+
Write `<assignmentDir>/<planFilename>` with standard plan frontmatter:
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
---
|
|
93
|
+
assignment: <assignmentSlug>
|
|
94
|
+
status: draft
|
|
95
|
+
created: "<nowTimestamp>"
|
|
96
|
+
updated: "<nowTimestamp>"
|
|
97
|
+
---
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Then the markdown body should include:
|
|
78
101
|
|
|
79
102
|
1. **Overview** -- one paragraph summarizing the approach
|
|
80
103
|
2. **Tasks** -- numbered list of implementation tasks, each with:
|
|
@@ -86,7 +109,31 @@ Replace the markdown body with a detailed implementation plan. The plan should i
|
|
|
86
109
|
4. **Risks and Open Questions** -- anything that might block or complicate implementation
|
|
87
110
|
5. **Testing Strategy** -- how to verify the implementation works
|
|
88
111
|
|
|
89
|
-
|
|
112
|
+
**Decision capture:** While planning, note any meaningful choices you make (library picks, schema design, architectural calls, rejected alternatives). Record each as a numbered entry in `<assignmentDir>/decision-record.md` with the format `## Decision N: <short title>` — fields: Status (proposed/accepted), Context, Decision, Consequences. Downstream assignments that depend on this one auto-load these decisions during `/grab-assignment`, so they pay off over time.
|
|
113
|
+
|
|
114
|
+
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`.
|
|
115
|
+
|
|
116
|
+
### 4c. Update assignment.md Todos
|
|
117
|
+
|
|
118
|
+
Read `<assignmentDir>/assignment.md` and locate the `## Todos` section.
|
|
119
|
+
|
|
120
|
+
1. **Supersede prior plan todos.** Scan unchecked todo lines for any that match the pattern `- [ ] Execute [<label>](./plan.md)` or `- [ ] Execute [<label>](./plan-v<N>.md)`. For each match, rewrite the line as:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
- [x] ~~Execute [<label>](./<old-plan-filename>)~~ (superseded by <versionLabel>)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Never delete the old line — preserve history.
|
|
127
|
+
|
|
128
|
+
2. **Append the new plan todo.** Append a new line to the end of the `## Todos` section:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
- [ ] Execute [<versionLabel>](./<planFilename>)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
3. **Missing section fallback.** If the `## Todos` section 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. Match the template used by `/create-assignment`.
|
|
135
|
+
|
|
136
|
+
Also update the assignment frontmatter `updated` timestamp.
|
|
90
137
|
|
|
91
138
|
## Step 5: Report to User
|
|
92
139
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: syntaur-protocol
|
|
3
|
-
description: This skill should be used when the user mentions "syntaur", "assignment", "
|
|
3
|
+
description: This skill should be used when the user mentions "syntaur", "assignment", "project", works with files under ~/.syntaur/, references assignment.md, plan.md, handoff.md, or discusses the Syntaur protocol, lifecycle states, or write boundaries.
|
|
4
4
|
version: 0.1.0
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -14,16 +14,16 @@ You MUST respect file ownership boundaries. Violations will be blocked by the Pr
|
|
|
14
14
|
|
|
15
15
|
### Files you may WRITE:
|
|
16
16
|
1. **Your assignment folder** -- only the assignment you are currently working on:
|
|
17
|
-
- `assignment.md`, `plan
|
|
18
|
-
- Path: `~/.syntaur/
|
|
19
|
-
2. **Shared resources and memories** at the
|
|
20
|
-
- `~/.syntaur/
|
|
21
|
-
- `~/.syntaur/
|
|
17
|
+
- `assignment.md`, `plan*.md` (0 or more versioned plan files), `scratchpad.md`, `handoff.md`, `decision-record.md`
|
|
18
|
+
- Path: `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
19
|
+
2. **Shared resources and memories** at the project level:
|
|
20
|
+
- `~/.syntaur/projects/<project>/resources/<slug>.md`
|
|
21
|
+
- `~/.syntaur/projects/<project>/memories/<slug>.md`
|
|
22
22
|
3. **Your workspace** -- source code files within the workspace defined in your assignment's frontmatter (`workspace.worktreePath` or `workspace.repository`)
|
|
23
23
|
4. **Context file** -- `.syntaur/context.json` in the current working directory
|
|
24
24
|
|
|
25
25
|
### Files you must NEVER write:
|
|
26
|
-
1. `
|
|
26
|
+
1. `project.md`, `agent.md`, `claude.md` -- human-authored, read-only
|
|
27
27
|
2. `manifest.md` -- derived, rebuilt by tooling
|
|
28
28
|
3. Any file prefixed with `_` (`_index-*.md`, `_status.md`) -- derived
|
|
29
29
|
4. Other agents' assignment folders
|
|
@@ -32,9 +32,9 @@ You MUST respect file ownership boundaries. Violations will be blocked by the Pr
|
|
|
32
32
|
## Current Assignment Context
|
|
33
33
|
|
|
34
34
|
If `.syntaur/context.json` exists in the current working directory, read it to determine:
|
|
35
|
-
- `
|
|
35
|
+
- `projectSlug` -- which project you are working on
|
|
36
36
|
- `assignmentSlug` -- which assignment is yours
|
|
37
|
-
- `
|
|
37
|
+
- `projectDir` -- absolute path to the project folder
|
|
38
38
|
- `assignmentDir` -- absolute path to your assignment folder
|
|
39
39
|
- `workspaceRoot` -- absolute path to your code workspace (if set)
|
|
40
40
|
|
|
@@ -47,13 +47,17 @@ For detailed protocol information, read these files:
|
|
|
47
47
|
## Lifecycle Commands
|
|
48
48
|
|
|
49
49
|
Use the `syntaur` CLI for state transitions. Available commands:
|
|
50
|
-
- `syntaur assign <slug> --agent <name> --
|
|
51
|
-
- `syntaur start <slug> --
|
|
52
|
-
- `syntaur review <slug> --
|
|
53
|
-
- `syntaur complete <slug> --
|
|
54
|
-
- `syntaur block <slug> --
|
|
55
|
-
- `syntaur unblock <slug> --
|
|
56
|
-
- `syntaur fail <slug> --
|
|
50
|
+
- `syntaur assign <slug> --agent <name> --project <project>` -- set assignee
|
|
51
|
+
- `syntaur start <slug> --project <project>` -- pending -> in_progress
|
|
52
|
+
- `syntaur review <slug> --project <project>` -- in_progress -> review
|
|
53
|
+
- `syntaur complete <slug> --project <project>` -- in_progress/review -> completed
|
|
54
|
+
- `syntaur block <slug> --project <project> --reason <text>` -- block an assignment
|
|
55
|
+
- `syntaur unblock <slug> --project <project>` -- unblock
|
|
56
|
+
- `syntaur fail <slug> --project <project>` -- mark as failed
|
|
57
|
+
|
|
58
|
+
## Troubleshooting
|
|
59
|
+
|
|
60
|
+
If Syntaur state looks inconsistent (missing files, stale manifests, unexpected hook blocks), run `syntaur doctor` to diagnose. The `/doctor-syntaur` slash command wraps it and helps interpret results.
|
|
57
61
|
|
|
58
62
|
## Playbooks
|
|
59
63
|
|
|
@@ -67,6 +71,6 @@ ls ~/.syntaur/playbooks/*.md 2>/dev/null
|
|
|
67
71
|
|
|
68
72
|
- Assignment frontmatter is the single source of truth for state
|
|
69
73
|
- Slugs are lowercase, hyphen-separated
|
|
70
|
-
- Always read `agent.md` and `claude.md` at the
|
|
74
|
+
- Always read `agent.md` and `claude.md` at the project level before starting work
|
|
71
75
|
- Add unanswered questions to the Q&A section of assignment.md (do not set status to blocked for questions)
|
|
72
76
|
- Commit frequently with messages referencing the assignment slug
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "syntaur",
|
|
3
3
|
"version": "0.1.7",
|
|
4
|
-
"description": "Run Syntaur
|
|
4
|
+
"description": "Run Syntaur project and assignment workflows from Codex, including claiming work, planning, completing handoffs, session tracking, and write-boundary enforcement.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Brennen"
|
|
7
7
|
},
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"hooks": "./hooks.json",
|
|
10
10
|
"interface": {
|
|
11
11
|
"displayName": "Syntaur",
|
|
12
|
-
"shortDescription": "
|
|
13
|
-
"longDescription": "Use Syntaur to create
|
|
12
|
+
"shortDescription": "Project and assignment workflows for Codex",
|
|
13
|
+
"longDescription": "Use Syntaur to create projects and assignments, claim work, keep plan and handoff records current, track Codex sessions, and enforce Syntaur write boundaries.",
|
|
14
14
|
"developerName": "Brennen",
|
|
15
15
|
"category": "Coding",
|
|
16
16
|
"capabilities": [
|
|
@@ -4,7 +4,7 @@ Syntaur plugin for OpenAI Codex. Installed automatically during `syntaur setup`.
|
|
|
4
4
|
|
|
5
5
|
## What's included
|
|
6
6
|
|
|
7
|
-
- **Skills:** syntaur-protocol, create-
|
|
7
|
+
- **Skills:** syntaur-protocol, create-project, create-assignment, grab-assignment, plan-assignment, complete-assignment, track-session
|
|
8
8
|
- **Hooks:** write boundary enforcement, session cleanup
|
|
9
9
|
- **Commands:** track-session
|
|
10
10
|
- **Agents:** syntaur-protocol (background)
|
|
@@ -4,7 +4,7 @@ This is a reference template for the Codex and OpenCode adapters.
|
|
|
4
4
|
|
|
5
5
|
The `syntaur setup-adapter codex` or `syntaur setup-adapter opencode`
|
|
6
6
|
command generates `AGENTS.md` dynamically in your workspace with
|
|
7
|
-
|
|
7
|
+
project and assignment context filled in.
|
|
8
8
|
|
|
9
9
|
The generated file now does two things:
|
|
10
10
|
|
|
@@ -12,5 +12,5 @@ The generated file now does two things:
|
|
|
12
12
|
2. points Codex at the reusable Syntaur Codex plugin workflows (`syntaur-protocol`, `grab-assignment`, `plan-assignment`, `complete-assignment`, and related helpers) when that plugin is installed globally
|
|
13
13
|
|
|
14
14
|
See the rendered output by running:
|
|
15
|
-
syntaur setup-adapter codex --
|
|
16
|
-
syntaur setup-adapter opencode --
|
|
15
|
+
syntaur setup-adapter codex --project <slug> --assignment <slug>
|
|
16
|
+
syntaur setup-adapter opencode --project <slug> --assignment <slug>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "Syntaur"
|
|
3
|
-
short_description: "
|
|
4
|
-
default_prompt: "Use Syntaur to create
|
|
3
|
+
short_description: "Project and assignment workflows for Codex"
|
|
4
|
+
default_prompt: "Use Syntaur to create projects and assignments, claim work, plan an assignment, or complete a handoff in the current workspace."
|
|
5
5
|
|
|
6
6
|
policy:
|
|
7
7
|
allow_implicit_invocation: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: syntaur-operator
|
|
3
|
-
description: Specializes in the Syntaur CLI and protocol:
|
|
3
|
+
description: Specializes in the Syntaur CLI and protocol: project and assignment scaffolding, claiming work, maintaining assignment records, planning (versioned plan files), handoffs, session tracking, adapter setup, lifecycle transitions, and write-boundary enforcement. Use when working with ~/.syntaur/, assignment.md, plan*.md, handoff.md, .syntaur/context.json, or the syntaur CLI.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You are the Syntaur Operator for Codex.
|
|
@@ -9,9 +9,9 @@ Your job is to work fluently within the Syntaur protocol without breaking owners
|
|
|
9
9
|
|
|
10
10
|
## Primary Responsibilities
|
|
11
11
|
|
|
12
|
-
- Create
|
|
12
|
+
- Create projects and assignments with the `syntaur` CLI
|
|
13
13
|
- Claim assignments and establish local assignment context
|
|
14
|
-
- Keep `assignment.md`, `plan.md`, and `handoff.md` accurate during execution
|
|
14
|
+
- Keep `assignment.md`, active plan files (`plan.md`, `plan-v2.md`, ...), and `handoff.md` accurate during execution
|
|
15
15
|
- Track Codex sessions for the Syntaur dashboard
|
|
16
16
|
- Set up Codex adapter instructions in the active workspace
|
|
17
17
|
- Enforce Syntaur write boundaries and lifecycle rules
|
|
@@ -20,15 +20,15 @@ Your job is to work fluently within the Syntaur protocol without breaking owners
|
|
|
20
20
|
|
|
21
21
|
When a task involves Syntaur:
|
|
22
22
|
|
|
23
|
-
1. Determine whether the user needs
|
|
23
|
+
1. Determine whether the user needs project creation, assignment creation, assignment execution, completion/handoff, or session tracking.
|
|
24
24
|
2. If `.syntaur/context.json` exists in the current working directory, read it first.
|
|
25
25
|
3. If working on a specific assignment, read these in order:
|
|
26
|
-
- `<
|
|
27
|
-
- `<
|
|
28
|
-
- `<
|
|
29
|
-
- `<
|
|
26
|
+
- `<projectDir>/manifest.md`
|
|
27
|
+
- `<projectDir>/agent.md`
|
|
28
|
+
- `<projectDir>/project.md`
|
|
29
|
+
- `<projectDir>/claude.md` if it exists
|
|
30
30
|
- `<assignmentDir>/assignment.md`
|
|
31
|
-
- `<assignmentDir>/plan
|
|
31
|
+
- any `<assignmentDir>/plan*.md` files linked from active todos in the `## Todos` section
|
|
32
32
|
- `<assignmentDir>/handoff.md`
|
|
33
33
|
4. Resolve the workspace boundary from `.syntaur/context.json` or `assignment.md` frontmatter before editing code.
|
|
34
34
|
|
|
@@ -36,7 +36,7 @@ When a task involves Syntaur:
|
|
|
36
36
|
|
|
37
37
|
### Never write
|
|
38
38
|
|
|
39
|
-
- `
|
|
39
|
+
- `project.md`
|
|
40
40
|
- `agent.md`
|
|
41
41
|
- `claude.md`
|
|
42
42
|
- `manifest.md`
|
|
@@ -47,12 +47,12 @@ When a task involves Syntaur:
|
|
|
47
47
|
|
|
48
48
|
- the current assignment folder only:
|
|
49
49
|
- `assignment.md`
|
|
50
|
-
- `plan.md`
|
|
50
|
+
- `plan*.md` (0 or more versioned plan files, e.g., `plan.md`, `plan-v2.md`)
|
|
51
51
|
- `scratchpad.md`
|
|
52
52
|
- `handoff.md`
|
|
53
53
|
- `decision-record.md`
|
|
54
|
-
-
|
|
55
|
-
-
|
|
54
|
+
- project `resources/*.md`
|
|
55
|
+
- project `memories/*.md`
|
|
56
56
|
- `.syntaur/context.json` in the current working directory
|
|
57
57
|
- source files inside the assignment workspace boundary
|
|
58
58
|
|
|
@@ -61,7 +61,8 @@ When a task involves Syntaur:
|
|
|
61
61
|
- Assignment frontmatter is the single source of truth for assignment state.
|
|
62
62
|
- Slugs are lowercase and hyphen-separated.
|
|
63
63
|
- `pending` with unmet `dependsOn` means structural waiting. `blocked` means a real runtime obstacle and requires a `blockedReason`.
|
|
64
|
-
- Update acceptance criteria checkboxes as work lands.
|
|
64
|
+
- Update acceptance criteria and `## Todos` checkboxes as work lands.
|
|
65
|
+
- When requirements shift, supersede the prior plan todo instead of rewriting the old plan file.
|
|
65
66
|
- Keep the `## Progress` section in `assignment.md` current after meaningful milestones.
|
|
66
67
|
- Append handoffs instead of replacing previous handoff entries.
|
|
67
68
|
|
|
@@ -69,38 +70,40 @@ When a task involves Syntaur:
|
|
|
69
70
|
|
|
70
71
|
Use these commands directly when needed:
|
|
71
72
|
|
|
72
|
-
- `syntaur create-
|
|
73
|
-
- `syntaur create-assignment "<title>" --
|
|
73
|
+
- `syntaur create-project "<title>" [--slug <slug>] [--dir <path>]`
|
|
74
|
+
- `syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--dir <path>]`
|
|
74
75
|
- `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]`
|
|
75
76
|
- `syntaur setup [--yes] [--claude] [--codex] [--claude-dir <path>] [--codex-dir <path>] [--codex-marketplace-path <path>] [--dashboard]`
|
|
76
|
-
- `syntaur assign <assignment-slug> --agent codex --
|
|
77
|
-
- `syntaur start <assignment-slug> --
|
|
78
|
-
- `syntaur review <assignment-slug> --
|
|
79
|
-
- `syntaur complete <assignment-slug> --
|
|
80
|
-
- `syntaur block <assignment-slug> --
|
|
81
|
-
- `syntaur unblock <assignment-slug> --
|
|
82
|
-
- `syntaur fail <assignment-slug> --
|
|
77
|
+
- `syntaur assign <assignment-slug> --agent codex --project <project-slug>`
|
|
78
|
+
- `syntaur start <assignment-slug> --project <project-slug>`
|
|
79
|
+
- `syntaur review <assignment-slug> --project <project-slug>`
|
|
80
|
+
- `syntaur complete <assignment-slug> --project <project-slug>`
|
|
81
|
+
- `syntaur block <assignment-slug> --project <project-slug> --reason <text>`
|
|
82
|
+
- `syntaur unblock <assignment-slug> --project <project-slug>`
|
|
83
|
+
- `syntaur fail <assignment-slug> --project <project-slug>`
|
|
83
84
|
- `syntaur uninstall [--all] [--yes]`
|
|
84
|
-
- `syntaur track-session --
|
|
85
|
-
- `syntaur setup-adapter codex --
|
|
85
|
+
- `syntaur track-session --project <project-slug> --assignment <assignment-slug> --agent codex --session-id <id> --path <cwd>`
|
|
86
|
+
- `syntaur setup-adapter codex --project <project-slug> --assignment <assignment-slug>`
|
|
86
87
|
|
|
87
88
|
## Standard Workflows
|
|
88
89
|
|
|
89
90
|
### Claim an assignment
|
|
90
91
|
|
|
91
|
-
1. Discover the
|
|
92
|
+
1. Discover the project and pending assignments.
|
|
92
93
|
2. Run `syntaur assign ... --agent codex`.
|
|
93
94
|
3. Run `syntaur start ...`.
|
|
94
95
|
4. Create `.syntaur/context.json` in the working directory.
|
|
95
96
|
5. Register the session with `syntaur track-session`.
|
|
96
|
-
6. If needed, run `syntaur setup-adapter codex --
|
|
97
|
+
6. If needed, run `syntaur setup-adapter codex --project <slug> --assignment <slug>`.
|
|
97
98
|
|
|
98
99
|
### Plan an assignment
|
|
99
100
|
|
|
100
|
-
1. Read the assignment,
|
|
101
|
+
1. Read the assignment, project instructions, and any dependency handoffs.
|
|
101
102
|
2. Explore the workspace.
|
|
102
|
-
3.
|
|
103
|
-
4.
|
|
103
|
+
3. Determine the next plan filename: `plan.md` if no `plan*.md` exists, otherwise the smallest unused `plan-v<N>.md` (N >= 2).
|
|
104
|
+
4. Write the plan file with standard frontmatter (`assignment`, `status: draft`, `created`, `updated`) and body.
|
|
105
|
+
5. Update `assignment.md`'s `## Todos` section: supersede any prior active plan todo (`- [x] ~~...~~ (superseded by plan-v<N>)`), then append a new `- [ ] Execute [<label>](./<planFilename>)` todo.
|
|
106
|
+
6. Keep `assignment.md` in sync with what is now known.
|
|
104
107
|
|
|
105
108
|
### Complete an assignment
|
|
106
109
|
|
|
@@ -6,9 +6,9 @@ Agents must never modify these files:
|
|
|
6
6
|
|
|
7
7
|
| File | Location |
|
|
8
8
|
|------|----------|
|
|
9
|
-
| `
|
|
10
|
-
| `agent.md` | `<
|
|
11
|
-
| `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 and source of truth for state |
|
|
20
|
-
| `plan
|
|
19
|
+
| `assignment.md` | Assignment record and 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/
|
|
25
|
+
Path pattern: `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
26
26
|
|
|
27
27
|
## Shared-Writable
|
|
28
28
|
|
|
29
29
|
| Location | Purpose |
|
|
30
30
|
|----------|---------|
|
|
31
|
-
| `<
|
|
32
|
-
| `<
|
|
31
|
+
| `<project>/resources/<slug>.md` | Reference material |
|
|
32
|
+
| `<project>/memories/<slug>.md` | Learnings and reusable patterns |
|
|
33
33
|
|
|
34
34
|
## Derived (Never Edit)
|
|
35
35
|
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
```
|
|
6
6
|
~/.syntaur/
|
|
7
7
|
config.md
|
|
8
|
-
|
|
9
|
-
<
|
|
8
|
+
projects/
|
|
9
|
+
<project-slug>/
|
|
10
10
|
manifest.md # Derived: root navigation (read-only)
|
|
11
|
-
|
|
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
|
|
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
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
memories/
|
|
29
29
|
_index.md # Derived (read-only)
|
|
30
30
|
<memory-slug>.md # Shared-writable
|
|
31
|
+
playbooks/
|
|
32
|
+
manifest.md # Derived: playbook listing (read-only)
|
|
33
|
+
<slug>.md # User-authored: behavioral rules for agents
|
|
31
34
|
```
|
|
32
35
|
|
|
33
36
|
## Assignment Lifecycle
|
|
@@ -59,8 +62,10 @@
|
|
|
59
62
|
## Key Rules
|
|
60
63
|
|
|
61
64
|
1. Assignment frontmatter is the single source of truth for assignment state.
|
|
62
|
-
2. One folder per
|
|
65
|
+
2. One folder per project and one subfolder per assignment.
|
|
63
66
|
3. Derived files are never edited manually.
|
|
64
67
|
4. Slugs are lowercase and hyphen-separated.
|
|
65
68
|
5. Dependencies are declared via `dependsOn` in assignment frontmatter.
|
|
66
69
|
6. An assignment cannot transition from `pending` to `in_progress` while any dependency is not `completed`.
|
|
70
|
+
7. The `## Todos` section in `assignment.md` is 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.
|
|
71
|
+
8. Playbooks in `~/.syntaur/playbooks/` define behavioral rules agents must follow. Read `manifest.md` for a summary, then read each referenced playbook before starting work.
|
|
@@ -51,7 +51,7 @@ if [ ! -f "$CONTEXT_FILE" ]; then
|
|
|
51
51
|
fi
|
|
52
52
|
|
|
53
53
|
ASSIGNMENT_DIR=$(jq -r '.assignmentDir // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
54
|
-
MISSION_DIR=$(jq -r '.
|
|
54
|
+
MISSION_DIR=$(jq -r '.projectDir // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
55
55
|
WORKSPACE_ROOT=$(jq -r '.workspaceRoot // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
56
56
|
|
|
57
57
|
if [ -z "$ASSIGNMENT_DIR" ] || [ -z "$MISSION_DIR" ]; then
|
|
@@ -93,7 +93,7 @@ if [ -n "$WORKSPACE_ROOT" ] && [[ "$FILE_PATH" == "$WORKSPACE_ROOT"/* ]]; then
|
|
|
93
93
|
allow_and_exit
|
|
94
94
|
fi
|
|
95
95
|
|
|
96
|
-
REASON="Syntaur write boundary violation: Cannot write to '$FILE_PATH'. Allowed paths: assignment dir ($ASSIGNMENT_DIR),
|
|
96
|
+
REASON="Syntaur write boundary violation: Cannot write to '$FILE_PATH'. Allowed paths: assignment dir ($ASSIGNMENT_DIR), project resources/memories, workspace ($WORKSPACE_ROOT)."
|
|
97
97
|
REASON_ESCAPED=$(echo "$REASON" | jq -Rs '.' 2>/dev/null)
|
|
98
98
|
if [ -z "$REASON_ESCAPED" ]; then
|
|
99
99
|
REASON_ESCAPED="\"Syntaur write boundary violation\""
|
|
@@ -24,7 +24,7 @@ if [ ! -f "$CONTEXT_FILE" ]; then
|
|
|
24
24
|
fi
|
|
25
25
|
|
|
26
26
|
SESSION_ID=$(jq -r '.sessionId // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
27
|
-
MISSION_SLUG=$(jq -r '.
|
|
27
|
+
MISSION_SLUG=$(jq -r '.projectSlug // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
28
28
|
|
|
29
29
|
if [ -z "$SESSION_ID" ] || [ -z "$MISSION_SLUG" ]; then
|
|
30
30
|
exit 0
|
|
@@ -33,7 +33,7 @@ fi
|
|
|
33
33
|
PORT=$(cat "$HOME/.syntaur/dashboard-port" 2>/dev/null || echo "4800")
|
|
34
34
|
curl -sf -X PATCH "http://localhost:${PORT}/api/agent-sessions/${SESSION_ID}/status" \
|
|
35
35
|
-H "Content-Type: application/json" \
|
|
36
|
-
-d "{\"status\": \"stopped\", \"
|
|
36
|
+
-d "{\"status\": \"stopped\", \"projectSlug\": \"${MISSION_SLUG}\"}" \
|
|
37
37
|
-o /dev/null 2>/dev/null || true
|
|
38
38
|
|
|
39
39
|
exit 0
|
|
@@ -11,12 +11,12 @@ Write a handoff for the current Syntaur assignment and transition it to `review`
|
|
|
11
11
|
|
|
12
12
|
User arguments: `$ARGUMENTS`
|
|
13
13
|
|
|
14
|
-
If the user passed `--complete`, transition directly to `completed` only when all acceptance criteria are met. Otherwise transition to `review`.
|
|
14
|
+
If the user passed `--complete`, transition directly to `completed` only when all acceptance criteria are met AND all todos are either checked or marked superseded. Otherwise transition to `review`.
|
|
15
15
|
|
|
16
16
|
## Workflow
|
|
17
17
|
|
|
18
18
|
1. Read `.syntaur/context.json`. If it does not exist, tell the user there is no active assignment.
|
|
19
|
-
2. Read `<assignmentDir>/assignment.md` and evaluate every item in the `## Acceptance Criteria` section.
|
|
19
|
+
2. Read `<assignmentDir>/assignment.md` and evaluate every item in the `## Acceptance Criteria` section AND every item in the `## Todos` section. Superseded todos (marked `- [x] ~~...~~ (superseded by ...)`) count as resolved. If any acceptance criterion is unmet OR any todo is still `- [ ]` and not superseded, warn the user before proceeding.
|
|
20
20
|
3. Read `<assignmentDir>/handoff.md` and append a new handoff entry using the protocol format:
|
|
21
21
|
|
|
22
22
|
```markdown
|
|
@@ -44,18 +44,18 @@ If the user passed `--complete`, transition directly to `completed` only when al
|
|
|
44
44
|
4. Update the handoff frontmatter:
|
|
45
45
|
- set `updated` to the current timestamp
|
|
46
46
|
- increment `handoffCount`
|
|
47
|
-
5. Update acceptance criteria checkboxes in `assignment.md` to match reality.
|
|
47
|
+
5. Update acceptance criteria and todo checkboxes in `assignment.md` to match reality. Do NOT modify superseded todo lines (those matching `- [x] ~~...~~ (superseded by ...)`).
|
|
48
48
|
6. If `.syntaur/context.json` includes `sessionId`, mark that session as completed through the dashboard API:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
51
|
curl -s -X PATCH "http://localhost:$(cat ~/.syntaur/dashboard-port 2>/dev/null || echo 4800)/api/agent-sessions/<session-id>/status" \
|
|
52
52
|
-H "Content-Type: application/json" \
|
|
53
|
-
-d '{"status":"completed","
|
|
53
|
+
-d '{"status":"completed","projectSlug":"<project-slug>"}'
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
7. Transition the assignment:
|
|
57
|
-
- `syntaur complete <assignment-slug> --
|
|
58
|
-
- otherwise `syntaur review <assignment-slug> --
|
|
57
|
+
- `syntaur complete <assignment-slug> --project <project-slug>` when `--complete` is allowed
|
|
58
|
+
- otherwise `syntaur review <assignment-slug> --project <project-slug>`
|
|
59
59
|
8. Delete `.syntaur/context.json`.
|
|
60
60
|
9. Summarize:
|
|
61
61
|
- new status
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: create-assignment
|
|
3
|
-
description: Use when the user wants to create a new Syntaur assignment inside a
|
|
3
|
+
description: Use when the user wants to create a new Syntaur assignment inside a project or as a one-off project plus assignment.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Create Assignment
|
|
@@ -14,7 +14,7 @@ User arguments: `$ARGUMENTS`
|
|
|
14
14
|
Parse:
|
|
15
15
|
|
|
16
16
|
- First positional argument: assignment title
|
|
17
|
-
- `--
|
|
17
|
+
- `--project <slug>` required unless `--one-off`
|
|
18
18
|
- `--one-off` optional
|
|
19
19
|
- `--slug <slug>` optional
|
|
20
20
|
- `--priority <level>` optional, default `medium`
|
|
@@ -23,21 +23,22 @@ Parse:
|
|
|
23
23
|
|
|
24
24
|
If no title was provided, ask the user for it.
|
|
25
25
|
|
|
26
|
-
If neither `--
|
|
26
|
+
If neither `--project` nor `--one-off` was provided, look for `.syntaur/context.json` in the current working directory. If present, default the project to that context's `projectSlug` and tell the user you are using it.
|
|
27
27
|
|
|
28
28
|
## Workflow
|
|
29
29
|
|
|
30
30
|
1. Run one of:
|
|
31
|
-
- `syntaur create-assignment "<title>" --
|
|
31
|
+
- `syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--dir <path>]`
|
|
32
32
|
- `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]`
|
|
33
33
|
2. If the command fails, report the error and stop.
|
|
34
34
|
3. Read the generated `assignment.md`.
|
|
35
35
|
4. Summarize:
|
|
36
36
|
- assignment slug
|
|
37
|
-
-
|
|
37
|
+
- project slug
|
|
38
38
|
- priority
|
|
39
39
|
- location
|
|
40
|
-
- created files: `assignment.md`, `
|
|
40
|
+
- created files: `assignment.md`, `scratchpad.md`, `handoff.md`, `decision-record.md` (plan files are NOT scaffolded — they are created on demand by `plan-assignment`)
|
|
41
41
|
5. Suggest next steps:
|
|
42
|
-
- fill in the objective, context, and
|
|
42
|
+
- fill in the objective, context, acceptance criteria, and any initial todos in the `## Todos` section
|
|
43
|
+
- or run `plan-assignment` to create a plan file and auto-append a linked todo to `## Todos`
|
|
43
44
|
- run `grab-assignment` to claim it if work should begin now
|