syntaur 0.1.14 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dashboard/dist/assets/{_basePickBy-eih-KlEh.js → _basePickBy-BhaCV7eH.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-M21wg9ZQ.js → _baseUniq-CDPcqrs2.js} +1 -1
- package/dashboard/dist/assets/{arc-uKZMelpQ.js → arc-BP0RxLwl.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-CpMG5exj.js → architectureDiagram-2XIMDMQ5-BDzvaeJp.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-BHnCCKl_.js → blockDiagram-WCTKOSBZ-ZeL9mROo.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-B-n3zU9i.js → c4Diagram-IC4MRINW-7S5bvFLp.js} +1 -1
- package/dashboard/dist/assets/channel-CcB_wcgb.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-ChD9Iuih.js → chunk-4BX2VUAB-Ca7R4nv5.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-B3vP9Psg.js → chunk-55IACEB6-flEv13FB.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-CIhWgxPS.js → chunk-FMBD7UC4-CfcYWBM6.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-DiGIV_cB.js → chunk-JSJVCQXG-Dw4yL0VS.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-DnGsx5jo.js → chunk-KX2RTZJC-B2cDe40G.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-BFBu1fmg.js → chunk-NQ4KR5QH-LZVm0IWg.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-DYtumHth.js → chunk-QZHKN3VN-Dg0EeHNI.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-BzCrQPuw.js → chunk-WL4C6EOR-v3rXNwXc.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-BJr38z2g.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BJr38z2g.js +1 -0
- package/dashboard/dist/assets/clone-Cfs2GUGt.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-Bl8mb5eY.js → cose-bilkent-S5V4N54A-D-3JzLoS.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-BHffcOgo.js → dagre-KLK3FWXG-d_mbczhU.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-Ib83qzT_.js → diagram-E7M64L7V-BUyAp8pW.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-hOdh63_T.js → diagram-IFDJBPK2-C8doXcyQ.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-D4ocLmc5.js → diagram-P4PSJMXO-BUSmHa55.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-CHJ6zqnJ.js → erDiagram-INFDFZHY-Bn5_0LPU.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-DEz5g2Ye.js → flowDiagram-PKNHOUZH-CnEjerQM.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-BSftxDHA.js → ganttDiagram-A5KZAMGK-CL94fbyy.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-Cr3vGf07.js → gitGraphDiagram-K3NZZRJ6-4i_PeG8V.js} +1 -1
- package/dashboard/dist/assets/{graph-D4us8trI.js → graph-BtoFhoAd.js} +1 -1
- package/dashboard/dist/assets/index-DZUGYrvE.css +1 -0
- package/dashboard/dist/assets/index-Dv_-SxuL.js +481 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-CH_jVfru.js → infoDiagram-LFFYTUFH-CdUsuNgZ.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-BdKLa5GC.js → ishikawaDiagram-PHBUUO56-BjggRlUx.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-C_SMzNGF.js → journeyDiagram-4ABVD52K-V4AgexlR.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-BeA-egRW.js → kanban-definition-K7BYSVSG-ChlylQRf.js} +1 -1
- package/dashboard/dist/assets/{layout-B8tDmL4j.js → layout-DLcz9AmA.js} +1 -1
- package/dashboard/dist/assets/{linear-CeGJyrHS.js → linear-l2xnSHze.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-DyEs-LPd.js → mermaid.core-DKO1ytRW.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-DCxzAr8m.js → mindmap-definition-YRQLILUH-DTmTPHrT.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CEj5dRDi.js → pieDiagram-SKSYHLDU-CwK80y8Y.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-CKfvAEQg.js → quadrantDiagram-337W2JSQ-Be1xqW_w.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-CTRqKPtJ.js → requirementDiagram-Z7DCOOCP-JcspXCs0.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-BlYbz8UR.js → sankeyDiagram-WA2Y5GQK-nJb1BInq.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-PT2t7ryQ.js → sequenceDiagram-2WXFIKYE-DUrclEgA.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-eDX7IUuV.js → stateDiagram-RAJIS63D-CjinnNtF.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-yfclw-nM.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-By11B1Ow.js → timeline-definition-YZTLITO2-kM-oVLNz.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-rvdLeWWV.js → treemap-KZPCXAKY-CYziFlrQ.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-Br_oZ1wv.js → vennDiagram-LZ73GAT5-DX0DbxBN.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-D-MWVqrT.js → xychartDiagram-JWTSCODW-BGqM42ZM.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.d.ts +6 -1
- package/dist/dashboard/server.js +2427 -1089
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +6139 -2624
- package/dist/index.js.map +1 -1
- package/examples/playbooks/keep-records-updated.md +15 -9
- package/examples/playbooks/read-before-plan.md +13 -10
- 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 +4 -4
- package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/assignment.md +8 -18
- package/examples/sample-project/assignments/design-auth-schema/comments.md +26 -0
- package/examples/sample-project/assignments/design-auth-schema/progress.md +20 -0
- package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/assignment.md +8 -18
- package/examples/sample-project/assignments/implement-jwt-middleware/comments.md +17 -0
- package/examples/sample-project/assignments/implement-jwt-middleware/progress.md +20 -0
- package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/assignment.md +8 -9
- package/examples/sample-project/assignments/write-auth-tests/comments.md +10 -0
- package/examples/sample-project/assignments/write-auth-tests/progress.md +10 -0
- 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 +94 -66
- 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 +20 -8
- package/platforms/claude-code/references/protocol-summary.md +24 -9
- package/platforms/claude-code/skills/complete-assignment/SKILL.md +35 -17
- package/platforms/claude-code/skills/create-assignment/SKILL.md +22 -19
- 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 +38 -24
- 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 +58 -43
- package/platforms/codex/references/file-ownership.md +19 -8
- package/platforms/codex/references/protocol-summary.md +28 -9
- 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 +7 -6
- package/platforms/codex/skills/create-assignment/SKILL.md +18 -12
- 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 +46 -28
- 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-DVBgSlOI.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-B7dxBacd.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-B7dxBacd.js +0 -1
- package/dashboard/dist/assets/clone-DAOrHcCC.js +0 -1
- package/dashboard/dist/assets/index-AXntWS_w.css +0 -1
- package/dashboard/dist/assets/index-CEMjexkj.js +0 -460
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO--yuSBnLh.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
|
@@ -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
|
|
|
@@ -12,29 +12,34 @@ You are working within the Syntaur protocol. Follow these rules at all times.
|
|
|
12
12
|
|
|
13
13
|
You MUST respect file ownership boundaries. Violations will be blocked by the PreToolUse hook.
|
|
14
14
|
|
|
15
|
-
### Files you may WRITE:
|
|
15
|
+
### Files you may WRITE directly:
|
|
16
16
|
1. **Your assignment folder** -- only the assignment you are currently working on:
|
|
17
|
-
- `assignment.md`, `plan.md`, `scratchpad.md`, `handoff.md`, `decision-record.md`
|
|
18
|
-
- Path: `~/.syntaur/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- `~/.syntaur/
|
|
17
|
+
- `assignment.md`, `plan*.md` (0 or more versioned plan files), `progress.md`, `scratchpad.md`, `handoff.md`, `decision-record.md`
|
|
18
|
+
- Path (project-nested): `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
19
|
+
- Path (standalone): `~/.syntaur/assignments/<your-assignment-uuid>/` — folder named by UUID, `project: null`, `slug` display-only
|
|
20
|
+
2. **Shared resources and memories** at the project level:
|
|
21
|
+
- `~/.syntaur/projects/<project>/resources/<slug>.md`
|
|
22
|
+
- `~/.syntaur/projects/<project>/memories/<slug>.md`
|
|
22
23
|
3. **Your workspace** -- source code files within the workspace defined in your assignment's frontmatter (`workspace.worktreePath` or `workspace.repository`)
|
|
23
24
|
4. **Context file** -- `.syntaur/context.json` in the current working directory
|
|
24
25
|
|
|
26
|
+
### Files written only via CLI (never edit directly):
|
|
27
|
+
- `comments.md` (any assignment) — use `syntaur comment <slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>]`. Never edit directly. Questions carry a `resolved` flag toggled in the dashboard.
|
|
28
|
+
- Another assignment's `## Todos` section — use `syntaur request <target> "text"` to append a todo annotated `(from: <source>)`.
|
|
29
|
+
|
|
25
30
|
### Files you must NEVER write:
|
|
26
|
-
1. `
|
|
31
|
+
1. `project.md` -- human-authored, read-only
|
|
27
32
|
2. `manifest.md` -- derived, rebuilt by tooling
|
|
28
33
|
3. Any file prefixed with `_` (`_index-*.md`, `_status.md`) -- derived
|
|
29
|
-
4. Other agents' assignment folders
|
|
34
|
+
4. Other agents' assignment folders (except via the CLI-mediated channels above)
|
|
30
35
|
5. Any files outside your workspace boundary
|
|
31
36
|
|
|
32
37
|
## Current Assignment Context
|
|
33
38
|
|
|
34
39
|
If `.syntaur/context.json` exists in the current working directory, read it to determine:
|
|
35
|
-
- `
|
|
40
|
+
- `projectSlug` -- which project you are working on
|
|
36
41
|
- `assignmentSlug` -- which assignment is yours
|
|
37
|
-
- `
|
|
42
|
+
- `projectDir` -- absolute path to the project folder
|
|
38
43
|
- `assignmentDir` -- absolute path to your assignment folder
|
|
39
44
|
- `workspaceRoot` -- absolute path to your code workspace (if set)
|
|
40
45
|
|
|
@@ -46,14 +51,21 @@ For detailed protocol information, read these files:
|
|
|
46
51
|
|
|
47
52
|
## Lifecycle Commands
|
|
48
53
|
|
|
49
|
-
Use the `syntaur` CLI for state transitions
|
|
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> --
|
|
54
|
+
Use the `syntaur` CLI for state transitions and coordination:
|
|
55
|
+
- `syntaur assign <slug> --agent <name> --project <project>` -- set assignee
|
|
56
|
+
- `syntaur start <slug> --project <project>` -- pending -> in_progress
|
|
57
|
+
- `syntaur review <slug> --project <project>` -- in_progress -> review
|
|
58
|
+
- `syntaur complete <slug> --project <project>` -- in_progress/review -> completed
|
|
59
|
+
- `syntaur block <slug> --project <project> --reason <text>` -- block an assignment
|
|
60
|
+
- `syntaur unblock <slug> --project <project>` -- unblock
|
|
61
|
+
- `syntaur fail <slug> --project <project>` -- mark as failed
|
|
62
|
+
- `syntaur create-assignment "<title>" [--type <type>] [--project <slug> | --one-off]` -- create project-nested or standalone assignment
|
|
63
|
+
- `syntaur comment <slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>]` -- append to `comments.md`
|
|
64
|
+
- `syntaur request <target> "text" [--from <source>]` -- append a todo to another assignment's `## Todos`
|
|
65
|
+
|
|
66
|
+
## Troubleshooting
|
|
67
|
+
|
|
68
|
+
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
69
|
|
|
58
70
|
## Playbooks
|
|
59
71
|
|
|
@@ -65,8 +77,10 @@ ls ~/.syntaur/playbooks/*.md 2>/dev/null
|
|
|
65
77
|
|
|
66
78
|
## Conventions
|
|
67
79
|
|
|
68
|
-
- Assignment frontmatter is the single source of truth for state
|
|
69
|
-
- Slugs are lowercase, hyphen-separated
|
|
70
|
-
- Always read `
|
|
71
|
-
-
|
|
72
|
-
-
|
|
80
|
+
- Assignment frontmatter is the single source of truth for state. `project` is the containing project slug (`null` for standalone); `type` is a classification validated against `config.md` `types.definitions` when present.
|
|
81
|
+
- Slugs are lowercase, hyphen-separated. For standalone assignments, the folder is named by UUID; `slug` is display-only.
|
|
82
|
+
- Always read `project.md` at the project level (when project-nested) before starting work.
|
|
83
|
+
- Append timestamped entries to `progress.md` as work lands — do NOT add a `## Progress` section to `assignment.md`.
|
|
84
|
+
- Record questions/notes/feedback via `syntaur comment` — never edit `comments.md` directly. Do NOT set status to blocked for questions.
|
|
85
|
+
- Use `syntaur request` to route work to another assignment.
|
|
86
|
+
- 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,10 @@ 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 (project-nested or standalone) 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`, ...), `progress.md`, and `handoff.md` accurate during execution
|
|
15
|
+
- Record questions/notes/feedback via `syntaur comment` and route cross-assignment work via `syntaur request`
|
|
15
16
|
- Track Codex sessions for the Syntaur dashboard
|
|
16
17
|
- Set up Codex adapter instructions in the active workspace
|
|
17
18
|
- Enforce Syntaur write boundaries and lifecycle rules
|
|
@@ -20,96 +21,110 @@ Your job is to work fluently within the Syntaur protocol without breaking owners
|
|
|
20
21
|
|
|
21
22
|
When a task involves Syntaur:
|
|
22
23
|
|
|
23
|
-
1. Determine whether the user needs
|
|
24
|
+
1. Determine whether the user needs project creation, assignment creation (project-nested or `--one-off` standalone), assignment execution, completion/handoff, or session tracking.
|
|
24
25
|
2. If `.syntaur/context.json` exists in the current working directory, read it first.
|
|
25
26
|
3. If working on a specific assignment, read these in order:
|
|
26
|
-
- `<
|
|
27
|
-
- `<
|
|
28
|
-
- `<
|
|
29
|
-
- `<
|
|
30
|
-
- `<assignmentDir>/
|
|
31
|
-
- `<assignmentDir>/
|
|
27
|
+
- `<projectDir>/manifest.md` (project-nested assignments only)
|
|
28
|
+
- `<projectDir>/project.md` (project-nested assignments only)
|
|
29
|
+
- `<assignmentDir>/assignment.md` — frontmatter now includes `project: <slug> | null` and `type: <classification> | null`
|
|
30
|
+
- any `<assignmentDir>/plan*.md` files linked from active todos in the `## Todos` section
|
|
31
|
+
- `<assignmentDir>/progress.md` (if present) — reverse-chron progress log
|
|
32
|
+
- `<assignmentDir>/comments.md` (if present) — threaded questions/notes/feedback
|
|
32
33
|
- `<assignmentDir>/handoff.md`
|
|
33
34
|
4. Resolve the workspace boundary from `.syntaur/context.json` or `assignment.md` frontmatter before editing code.
|
|
34
35
|
|
|
36
|
+
Project-nested assignments live at `~/.syntaur/projects/<slug>/assignments/<aslug>/`. Standalone assignments live at `~/.syntaur/assignments/<uuid>/` — folder named by UUID, `project: null`, `slug` display-only.
|
|
37
|
+
|
|
35
38
|
## File Ownership
|
|
36
39
|
|
|
37
40
|
### Never write
|
|
38
41
|
|
|
39
|
-
- `
|
|
40
|
-
- `agent.md`
|
|
41
|
-
- `claude.md`
|
|
42
|
+
- `project.md`
|
|
42
43
|
- `manifest.md`
|
|
43
44
|
- any underscore-prefixed derived file such as `_index-assignments.md`, `_status.md`, `resources/_index.md`, or `memories/_index.md`
|
|
44
|
-
- other agents' assignment folders
|
|
45
|
+
- other agents' assignment folders, except via CLI-mediated channels
|
|
45
46
|
|
|
46
|
-
### You may write
|
|
47
|
+
### You may write directly
|
|
47
48
|
|
|
48
49
|
- the current assignment folder only:
|
|
49
50
|
- `assignment.md`
|
|
50
|
-
- `plan.md`
|
|
51
|
+
- `plan*.md` (0 or more versioned plan files, e.g., `plan.md`, `plan-v2.md`)
|
|
52
|
+
- `progress.md` (append timestamped entries, newest first — replaces the old `## Progress` section)
|
|
51
53
|
- `scratchpad.md`
|
|
52
54
|
- `handoff.md`
|
|
53
55
|
- `decision-record.md`
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
+
- project `resources/*.md`
|
|
57
|
+
- project `memories/*.md`
|
|
56
58
|
- `.syntaur/context.json` in the current working directory
|
|
57
59
|
- source files inside the assignment workspace boundary
|
|
58
60
|
|
|
61
|
+
### Write only via CLI (never edit directly)
|
|
62
|
+
|
|
63
|
+
- `comments.md` (any assignment) — use `syntaur comment <slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>]`. Never edit directly. Questions carry a `resolved` flag toggled in the dashboard.
|
|
64
|
+
- Another assignment's `## Todos` section — use `syntaur request <source> <target> "text"` to append a todo annotated `(from: <source>)`.
|
|
65
|
+
|
|
59
66
|
## Protocol Rules
|
|
60
67
|
|
|
61
|
-
- Assignment frontmatter is the single source of truth for assignment state.
|
|
62
|
-
- Slugs are lowercase and hyphen-separated.
|
|
68
|
+
- Assignment frontmatter is the single source of truth for assignment state. `project` is the containing project slug (`null` for standalone); `type` is a classification validated against `config.md` `types.definitions` when present.
|
|
69
|
+
- Slugs are lowercase and hyphen-separated. Standalone assignment folders are named by UUID; `slug` is display-only in that case.
|
|
63
70
|
- `pending` with unmet `dependsOn` means structural waiting. `blocked` means a real runtime obstacle and requires a `blockedReason`.
|
|
64
|
-
-
|
|
65
|
-
-
|
|
71
|
+
- `dependsOn` is only valid between assignments within the same project — standalone assignments cannot declare dependencies.
|
|
72
|
+
- Update acceptance criteria and `## Todos` checkboxes as work lands.
|
|
73
|
+
- Append timestamped entries to `progress.md` (not to `assignment.md`) after meaningful milestones.
|
|
74
|
+
- When requirements shift, supersede the prior plan todo instead of rewriting the old plan file.
|
|
66
75
|
- Append handoffs instead of replacing previous handoff entries.
|
|
76
|
+
- Record questions via `syntaur comment ... --type question` — they roll up into `_status.md`'s `openQuestions` counter.
|
|
67
77
|
|
|
68
78
|
## CLI Reference
|
|
69
79
|
|
|
70
80
|
Use these commands directly when needed:
|
|
71
81
|
|
|
72
|
-
- `syntaur create-
|
|
73
|
-
- `syntaur create-assignment "<title>" --
|
|
74
|
-
- `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]`
|
|
82
|
+
- `syntaur create-project "<title>" [--slug <slug>] [--dir <path>]`
|
|
83
|
+
- `syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--type <type>] [--dir <path>]`
|
|
84
|
+
- `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--type <type>] [--dir <path>]` — creates standalone at `~/.syntaur/assignments/<uuid>/`
|
|
75
85
|
- `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> --
|
|
86
|
+
- `syntaur assign <assignment-slug> --agent codex --project <project-slug>`
|
|
87
|
+
- `syntaur start <assignment-slug> --project <project-slug>`
|
|
88
|
+
- `syntaur review <assignment-slug> --project <project-slug>`
|
|
89
|
+
- `syntaur complete <assignment-slug> --project <project-slug>`
|
|
90
|
+
- `syntaur block <assignment-slug> --project <project-slug> --reason <text>`
|
|
91
|
+
- `syntaur unblock <assignment-slug> --project <project-slug>`
|
|
92
|
+
- `syntaur fail <assignment-slug> --project <project-slug>`
|
|
93
|
+
- `syntaur comment <assignment-slug-or-uuid> "body" --type question|note|feedback [--reply-to <id>] [--project <slug>]` — append to `comments.md`
|
|
94
|
+
- `syntaur request <target-slug-or-uuid> "text" [--from <source>] [--project <slug>]` — append to target's `## Todos`, annotated `(from: <source>)`
|
|
83
95
|
- `syntaur uninstall [--all] [--yes]`
|
|
84
|
-
- `syntaur track-session --
|
|
85
|
-
- `syntaur setup-adapter codex --
|
|
96
|
+
- `syntaur track-session --project <project-slug> --assignment <assignment-slug> --agent codex --session-id <id> --path <cwd>`
|
|
97
|
+
- `syntaur setup-adapter codex --project <project-slug> --assignment <assignment-slug>`
|
|
86
98
|
|
|
87
99
|
## Standard Workflows
|
|
88
100
|
|
|
89
101
|
### Claim an assignment
|
|
90
102
|
|
|
91
|
-
1. Discover the
|
|
103
|
+
1. Discover the project and pending assignments.
|
|
92
104
|
2. Run `syntaur assign ... --agent codex`.
|
|
93
105
|
3. Run `syntaur start ...`.
|
|
94
106
|
4. Create `.syntaur/context.json` in the working directory.
|
|
95
107
|
5. Register the session with `syntaur track-session`.
|
|
96
|
-
6. If needed, run `syntaur setup-adapter codex --
|
|
108
|
+
6. If needed, run `syntaur setup-adapter codex --project <slug> --assignment <slug>`.
|
|
97
109
|
|
|
98
110
|
### Plan an assignment
|
|
99
111
|
|
|
100
|
-
1. Read the assignment,
|
|
112
|
+
1. Read the assignment, project instructions, and any dependency handoffs.
|
|
101
113
|
2. Explore the workspace.
|
|
102
|
-
3.
|
|
103
|
-
4.
|
|
114
|
+
3. Determine the next plan filename: `plan.md` if no `plan*.md` exists, otherwise the smallest unused `plan-v<N>.md` (N >= 2).
|
|
115
|
+
4. Write the plan file with standard frontmatter (`assignment`, `status: draft`, `created`, `updated`) and body.
|
|
116
|
+
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.
|
|
117
|
+
6. Keep `assignment.md` in sync with what is now known.
|
|
104
118
|
|
|
105
119
|
### Complete an assignment
|
|
106
120
|
|
|
107
121
|
1. Re-check every acceptance criterion.
|
|
108
122
|
2. Update any missing checkboxes in `assignment.md`.
|
|
109
|
-
3. Append a
|
|
110
|
-
4.
|
|
111
|
-
5.
|
|
112
|
-
6.
|
|
123
|
+
3. Append a final timestamped entry to `progress.md` summarizing the work.
|
|
124
|
+
4. Append a new structured handoff entry to `handoff.md`.
|
|
125
|
+
5. Mark the dashboard session completed if `sessionId` exists.
|
|
126
|
+
6. Transition the assignment with `syntaur review` or `syntaur complete`.
|
|
127
|
+
7. Remove `.syntaur/context.json` when the assignment is no longer active.
|
|
113
128
|
|
|
114
129
|
## Decision Rules
|
|
115
130
|
|
|
@@ -6,9 +6,7 @@ Agents must never modify these files:
|
|
|
6
6
|
|
|
7
7
|
| File | Location |
|
|
8
8
|
|------|----------|
|
|
9
|
-
| `
|
|
10
|
-
| `agent.md` | `<mission>/agent.md` |
|
|
11
|
-
| `claude.md` | `<mission>/claude.md` |
|
|
9
|
+
| `project.md` | `<project>/project.md` |
|
|
12
10
|
|
|
13
11
|
## Agent-Writable (Your Assignment Folder Only)
|
|
14
12
|
|
|
@@ -16,20 +14,33 @@ You may only write to files inside your assigned assignment folder:
|
|
|
16
14
|
|
|
17
15
|
| File | Purpose |
|
|
18
16
|
|------|---------|
|
|
19
|
-
| `assignment.md` | Assignment record and source of truth for state |
|
|
20
|
-
| `plan
|
|
17
|
+
| `assignment.md` | Assignment record and source of truth for state (includes `## Todos` checklist) |
|
|
18
|
+
| `plan*.md` | Versioned implementation plans (optional, 0 or more: `plan.md`, `plan-v2.md`, ...) — each linked from a todo in `assignment.md` |
|
|
19
|
+
| `progress.md` | Append-only timestamped progress log (newest first). Replaces the old `## Progress` body section. |
|
|
21
20
|
| `scratchpad.md` | Working notes |
|
|
22
21
|
| `handoff.md` | Append-only handoff log |
|
|
23
22
|
| `decision-record.md` | Append-only decision log |
|
|
24
23
|
|
|
25
|
-
Path pattern: `~/.syntaur/
|
|
24
|
+
Path pattern (project-nested): `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
25
|
+
Path pattern (standalone): `~/.syntaur/assignments/<your-assignment-uuid>/`
|
|
26
|
+
|
|
27
|
+
## CLI-Mediated Shared-Writable
|
|
28
|
+
|
|
29
|
+
Do not edit these files directly. Use the listed CLI commands:
|
|
30
|
+
|
|
31
|
+
| File | Mediator |
|
|
32
|
+
|------|----------|
|
|
33
|
+
| `comments.md` (any assignment) | `syntaur comment <slug-or-uuid> "body" [--type question\|note\|feedback] [--reply-to <id>]` |
|
|
34
|
+
| `## Todos` in another assignment's `assignment.md` (cross-assignment request) | `syntaur request <source> <target> "text"` |
|
|
35
|
+
|
|
36
|
+
These are bounded exceptions to the single-writer rule.
|
|
26
37
|
|
|
27
38
|
## Shared-Writable
|
|
28
39
|
|
|
29
40
|
| Location | Purpose |
|
|
30
41
|
|----------|---------|
|
|
31
|
-
| `<
|
|
32
|
-
| `<
|
|
42
|
+
| `<project>/resources/<slug>.md` | Reference material |
|
|
43
|
+
| `<project>/memories/<slug>.md` | Learnings and reusable patterns |
|
|
33
44
|
|
|
34
45
|
## Derived (Never Edit)
|
|
35
46
|
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
# Syntaur Protocol Summary
|
|
2
2
|
|
|
3
|
+
Protocol version: **2.0**
|
|
4
|
+
|
|
3
5
|
## Directory Structure
|
|
4
6
|
|
|
5
7
|
```
|
|
6
8
|
~/.syntaur/
|
|
7
9
|
config.md
|
|
8
|
-
|
|
9
|
-
<
|
|
10
|
+
projects/
|
|
11
|
+
<project-slug>/
|
|
10
12
|
manifest.md # Derived: root navigation (read-only)
|
|
11
|
-
|
|
13
|
+
project.md # Human-authored: project overview (read-only)
|
|
12
14
|
_index-assignments.md # Derived (read-only)
|
|
13
15
|
_index-plans.md # Derived (read-only)
|
|
14
16
|
_index-decisions.md # Derived (read-only)
|
|
15
17
|
_status.md # Derived (read-only)
|
|
16
|
-
claude.md # Human-authored: Claude-specific instructions (read-only)
|
|
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
|
+
progress.md # Agent-writable, append-only: timestamped progress log
|
|
23
|
+
comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
|
|
22
24
|
scratchpad.md # Agent-writable: working notes
|
|
23
25
|
handoff.md # Agent-writable: append-only handoff log
|
|
24
26
|
decision-record.md # Agent-writable: append-only decision log
|
|
@@ -28,6 +30,18 @@
|
|
|
28
30
|
memories/
|
|
29
31
|
_index.md # Derived (read-only)
|
|
30
32
|
<memory-slug>.md # Shared-writable
|
|
33
|
+
assignments/
|
|
34
|
+
<assignment-id>/ # Standalone assignments — folder named by UUID, `project: null`
|
|
35
|
+
assignment.md # Same schema as project-nested, `slug` is display-only
|
|
36
|
+
plan*.md
|
|
37
|
+
progress.md
|
|
38
|
+
comments.md
|
|
39
|
+
scratchpad.md
|
|
40
|
+
handoff.md
|
|
41
|
+
decision-record.md
|
|
42
|
+
playbooks/
|
|
43
|
+
manifest.md # Derived: playbook listing (read-only)
|
|
44
|
+
<slug>.md # User-authored: behavioral rules for agents
|
|
31
45
|
```
|
|
32
46
|
|
|
33
47
|
## Assignment Lifecycle
|
|
@@ -59,8 +73,13 @@
|
|
|
59
73
|
## Key Rules
|
|
60
74
|
|
|
61
75
|
1. Assignment frontmatter is the single source of truth for assignment state.
|
|
62
|
-
2.
|
|
76
|
+
2. Project-nested assignments live at `projects/<slug>/assignments/<aslug>/` (folder = slug). Standalone assignments live at `assignments/<uuid>/` (folder = UUID, `project: null`, slug display-only).
|
|
63
77
|
3. Derived files are never edited manually.
|
|
64
78
|
4. Slugs are lowercase and hyphen-separated.
|
|
65
|
-
5. Dependencies are declared via `dependsOn` in assignment frontmatter.
|
|
79
|
+
5. Dependencies are declared via `dependsOn` in assignment frontmatter. Only valid within the same project.
|
|
66
80
|
6. An assignment cannot transition from `pending` to `in_progress` while any dependency is not `completed`.
|
|
81
|
+
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. `## Todos` also receives cross-assignment requests via `syntaur request`.
|
|
82
|
+
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.
|
|
83
|
+
9. Progress is appended to `progress.md` as timestamped entries (newest first). Do not add a `## Progress` section to `assignment.md`.
|
|
84
|
+
10. Comments are appended to `comments.md` via `syntaur comment <slug> "body" [--type question|note|feedback] [--reply-to <id>]`. Never edit `comments.md` directly.
|
|
85
|
+
11. Cross-assignment work is requested via `syntaur request <source> <target> "text"` — appends to the target's `## Todos` annotated `(from: <source>)`.
|
|
@@ -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,13 @@ 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
|
+
2.5. Append a final entry to `<assignmentDir>/progress.md` (reverse-chron, newest first) under a new `## <ISO 8601 timestamp>` heading summarizing the final state of the work. Bump `entryCount` and `updated` in the frontmatter. Do NOT add a `## Progress` section to `assignment.md` — progress entries live exclusively in `progress.md` as of protocol v2.0.
|
|
20
21
|
3. Read `<assignmentDir>/handoff.md` and append a new handoff entry using the protocol format:
|
|
21
22
|
|
|
22
23
|
```markdown
|
|
@@ -44,18 +45,18 @@ If the user passed `--complete`, transition directly to `completed` only when al
|
|
|
44
45
|
4. Update the handoff frontmatter:
|
|
45
46
|
- set `updated` to the current timestamp
|
|
46
47
|
- increment `handoffCount`
|
|
47
|
-
5. Update acceptance criteria checkboxes in `assignment.md` to match reality.
|
|
48
|
+
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
49
|
6. If `.syntaur/context.json` includes `sessionId`, mark that session as completed through the dashboard API:
|
|
49
50
|
|
|
50
51
|
```bash
|
|
51
52
|
curl -s -X PATCH "http://localhost:$(cat ~/.syntaur/dashboard-port 2>/dev/null || echo 4800)/api/agent-sessions/<session-id>/status" \
|
|
52
53
|
-H "Content-Type: application/json" \
|
|
53
|
-
-d '{"status":"completed","
|
|
54
|
+
-d '{"status":"completed","projectSlug":"<project-slug>"}'
|
|
54
55
|
```
|
|
55
56
|
|
|
56
57
|
7. Transition the assignment:
|
|
57
|
-
- `syntaur complete <assignment-slug> --
|
|
58
|
-
- otherwise `syntaur review <assignment-slug> --
|
|
58
|
+
- `syntaur complete <assignment-slug> --project <project-slug>` when `--complete` is allowed
|
|
59
|
+
- otherwise `syntaur review <assignment-slug> --project <project-slug>`
|
|
59
60
|
8. Delete `.syntaur/context.json`.
|
|
60
61
|
9. Summarize:
|
|
61
62
|
- 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,30 +14,36 @@ User arguments: `$ARGUMENTS`
|
|
|
14
14
|
Parse:
|
|
15
15
|
|
|
16
16
|
- First positional argument: assignment title
|
|
17
|
-
- `--
|
|
18
|
-
- `--one-off` optional
|
|
17
|
+
- `--project <slug>` required unless `--one-off`
|
|
18
|
+
- `--one-off` optional — creates a **standalone** assignment at `~/.syntaur/assignments/<uuid>/` with `project: null`. Folder named by UUID; `slug` is display-only. `--depends-on` is not permitted for standalone assignments.
|
|
19
19
|
- `--slug <slug>` optional
|
|
20
20
|
- `--priority <level>` optional, default `medium`
|
|
21
|
-
- `--
|
|
21
|
+
- `--type <type>` optional — classification such as `feature`, `bug`, `refactor`, `research`, `chore`. Defaults to `feature`. When `~/.syntaur/config.md` defines `types.definitions`, the CLI validates against that list.
|
|
22
|
+
- `--depends-on <slug[,slug...]>` optional (project-nested only)
|
|
22
23
|
- `--dir <path>` optional
|
|
23
24
|
|
|
24
25
|
If no title was provided, ask the user for it.
|
|
25
26
|
|
|
26
|
-
If neither `--
|
|
27
|
+
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
28
|
|
|
28
29
|
## Workflow
|
|
29
30
|
|
|
30
31
|
1. Run one of:
|
|
31
|
-
- `syntaur create-assignment "<title>" --
|
|
32
|
-
- `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]`
|
|
32
|
+
- `syntaur create-assignment "<title>" --project <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--type <type>] [--dir <path>]`
|
|
33
|
+
- `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--type <type>] [--dir <path>]`
|
|
33
34
|
2. If the command fails, report the error and stop.
|
|
34
35
|
3. Read the generated `assignment.md`.
|
|
35
36
|
4. Summarize:
|
|
36
|
-
- assignment slug
|
|
37
|
-
-
|
|
37
|
+
- assignment slug (for standalone assignments, also report the UUID — the folder is named by UUID, not slug)
|
|
38
|
+
- project slug (or `null` for standalone)
|
|
38
39
|
- priority
|
|
40
|
+
- type
|
|
39
41
|
- location
|
|
40
|
-
- created files: `assignment.md`, `
|
|
41
|
-
5.
|
|
42
|
-
-
|
|
42
|
+
- created files: `assignment.md`, `progress.md`, `comments.md`, `scratchpad.md`, `handoff.md`, `decision-record.md` (plan files are NOT scaffolded — they are created on demand by `plan-assignment`)
|
|
43
|
+
5. Remind the user:
|
|
44
|
+
- Progress entries go into `progress.md` via direct appends (not into `assignment.md`).
|
|
45
|
+
- Comments are appended via `syntaur comment <slug-or-uuid> "body" --type question|note|feedback` — never edit `comments.md` directly.
|
|
46
|
+
6. Suggest next steps:
|
|
47
|
+
- fill in the objective, context, acceptance criteria, and any initial todos in the `## Todos` section
|
|
48
|
+
- or run `plan-assignment` to create a plan file and auto-append a linked todo to `## Todos`
|
|
43
49
|
- run `grab-assignment` to claim it if work should begin now
|