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
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grab-assignment
|
|
3
|
-
description: Use when the user wants to
|
|
3
|
+
description: Use when the user wants to load a Syntaur assignment into context, create .syntaur/context.json, and register a Codex session. Works regardless of assignment status.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Grab Assignment
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Load a Syntaur assignment into the current working context and register this Codex session.
|
|
9
|
+
|
|
10
|
+
**Grabbing is non-destructive.** It never fails because of status. Any status (`pending`, `in_progress`, `blocked`, `review`, `completed`, `failed`) can be grabbed — grabbing just sets up context and registers the session. Only a `pending` assignment additionally transitions to `in_progress`; any other status is left untouched.
|
|
9
11
|
|
|
10
12
|
## Arguments
|
|
11
13
|
|
|
@@ -13,34 +15,36 @@ User arguments: `$ARGUMENTS`
|
|
|
13
15
|
|
|
14
16
|
Parse:
|
|
15
17
|
|
|
16
|
-
- First positional argument:
|
|
18
|
+
- First positional argument: project slug
|
|
17
19
|
- Second positional argument: optional assignment slug
|
|
18
20
|
|
|
19
21
|
## Workflow
|
|
20
22
|
|
|
21
23
|
1. If `.syntaur/context.json` already exists in the current working directory, read it and warn that claiming another assignment will replace the active context.
|
|
22
|
-
2. Read the
|
|
23
|
-
- `~/.syntaur/
|
|
24
|
-
- `~/.syntaur/
|
|
25
|
-
- `~/.syntaur/
|
|
26
|
-
- `~/.syntaur/
|
|
27
|
-
Note the `workspace` field in `
|
|
28
|
-
3. Discover
|
|
24
|
+
2. Read the project entry files:
|
|
25
|
+
- `~/.syntaur/projects/<project-slug>/manifest.md`
|
|
26
|
+
- `~/.syntaur/projects/<project-slug>/project.md`
|
|
27
|
+
- `~/.syntaur/projects/<project-slug>/agent.md`
|
|
28
|
+
- `~/.syntaur/projects/<project-slug>/claude.md` if it exists
|
|
29
|
+
Note the `workspace` field in `project.md` frontmatter if present. This indicates which project/codebase grouping the project belongs to. When writing context to `.syntaur/context.json` (Step 8), include `"workspace": "<value>"` if the project has a workspace.
|
|
30
|
+
3. Discover assignments under `~/.syntaur/projects/<project-slug>/assignments/`. Do **not** filter by status — every assignment is grabbable.
|
|
29
31
|
4. If no assignment slug was provided:
|
|
30
|
-
- list
|
|
31
|
-
- ask the user to choose unless
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
- list assignments with title, priority, and current status (highlight `pending` ones as the default candidates)
|
|
33
|
+
- ask the user to choose unless there is exactly one obvious candidate
|
|
34
|
+
If a slug *was* provided, verify the directory exists. Its status does not matter; do not block on it.
|
|
35
|
+
5. Read the chosen assignment's `assignment.md` — its frontmatter for `status`, and its markdown body for the objective, acceptance criteria, and `## Todos` section (active todos indicate outstanding work and may link to plan files to execute). If `dependsOn` is non-empty, also read each dep's `handoff.md` AND `decision-record.md` to inherit upstream context and decisions.
|
|
36
|
+
6. Claim the assignment:
|
|
37
|
+
- Always: `syntaur assign <assignment-slug> --agent codex --project <project-slug>` (safe at any status; does not transition state)
|
|
38
|
+
- **Only if current status is `pending`**: `syntaur start <assignment-slug> --project <project-slug>` to transition it to `in_progress`. Skip this command for any other status — grabbing must not rewind a `review`, `completed`, or `failed` assignment.
|
|
39
|
+
If `syntaur assign` fails (e.g., project not found, invalid slug), report and stop. Do not treat a non-pending status as a failure.
|
|
36
40
|
7. If the assignment has no workspace configured, set `workspace.repository` and `workspace.worktreePath` to the current working directory so write boundaries are meaningful.
|
|
37
41
|
8. Create `.syntaur/context.json` in the current working directory with:
|
|
38
42
|
|
|
39
43
|
```json
|
|
40
44
|
{
|
|
41
|
-
"
|
|
45
|
+
"projectSlug": "<project-slug>",
|
|
42
46
|
"assignmentSlug": "<assignment-slug>",
|
|
43
|
-
"
|
|
47
|
+
"projectDir": "/absolute/path/to/project",
|
|
44
48
|
"assignmentDir": "/absolute/path/to/assignment",
|
|
45
49
|
"workspaceRoot": "/absolute/path/to/workspace",
|
|
46
50
|
"title": "<assignment title>",
|
|
@@ -52,10 +56,16 @@ Parse:
|
|
|
52
56
|
|
|
53
57
|
9. Register the agent session:
|
|
54
58
|
- generate a UUID
|
|
55
|
-
- run `syntaur track-session --
|
|
59
|
+
- run `syntaur track-session --project <project-slug> --assignment <assignment-slug> --agent codex --session-id <uuid> --path <cwd>`
|
|
56
60
|
10. Summarize:
|
|
57
61
|
- assignment slug and title
|
|
62
|
+
- current status (call it out if the assignment was already past `pending` — e.g., "already in `review`, status unchanged")
|
|
58
63
|
- objective
|
|
59
64
|
- acceptance criteria
|
|
65
|
+
- active todos from the `## Todos` section (if any), including any plan files they link to
|
|
60
66
|
- workspace path
|
|
61
|
-
11. Suggest next step:
|
|
67
|
+
11. Suggest a next step appropriate to status:
|
|
68
|
+
- `pending` / `in_progress`: `plan-assignment`
|
|
69
|
+
- `blocked`: investigate `blockedReason`
|
|
70
|
+
- `review`: inspect the implementation and help verify acceptance criteria
|
|
71
|
+
- `completed` / `failed`: read the handoff; grab is probably for reference or reopen
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-assignment
|
|
3
|
-
description: Use when the user wants a detailed implementation plan written
|
|
3
|
+
description: Use when the user wants a detailed implementation plan written as a versioned plan file for the current Syntaur assignment.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Plan Assignment
|
|
7
7
|
|
|
8
|
-
Create an implementation plan for the current Syntaur assignment.
|
|
8
|
+
Create an implementation plan for the current Syntaur assignment. Plans are versioned files: the first is `plan.md`, later ones 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.
|
|
9
9
|
|
|
10
10
|
## Arguments
|
|
11
11
|
|
|
@@ -16,19 +16,24 @@ Optional notes from the user: `$ARGUMENTS`
|
|
|
16
16
|
1. Read `.syntaur/context.json` from the current working directory. If it does not exist, tell the user to claim an assignment first.
|
|
17
17
|
2. Read:
|
|
18
18
|
- `<assignmentDir>/assignment.md`
|
|
19
|
-
- `<
|
|
20
|
-
- `<
|
|
21
|
-
- `<
|
|
19
|
+
- `<projectDir>/agent.md`
|
|
20
|
+
- `<projectDir>/claude.md` if it exists
|
|
21
|
+
- `<projectDir>/project.md`
|
|
22
22
|
3. If the assignment depends on other assignments, read each dependency handoff for integration context.
|
|
23
23
|
4. Explore `workspaceRoot` when it exists:
|
|
24
24
|
- inspect project structure
|
|
25
25
|
- find likely implementation files
|
|
26
26
|
- note conventions and architecture
|
|
27
|
-
5.
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
27
|
+
5. Determine the next plan filename:
|
|
28
|
+
- List `<assignmentDir>/plan*.md`.
|
|
29
|
+
- If none exist, target is `plan.md` (version label: "plan").
|
|
30
|
+
- Otherwise pick the smallest `N >= 2` such that `plan-v<N>.md` does not exist (version label: `plan v<N>`).
|
|
31
|
+
6. Write `<assignmentDir>/<planFilename>` with standard plan frontmatter (`assignment`, `status: draft`, `created`, `updated`) and a body containing the sections below. If the file already exists (only possible for `plan.md` on first re-run), preserve frontmatter, flip `status` from `draft` to `in_progress`, update `updated`, and replace only the body.
|
|
32
|
+
7. Update `<assignmentDir>/assignment.md`:
|
|
33
|
+
- Find unchecked todos matching `- [ ] Execute [<label>](./plan*.md)`. Rewrite each as `- [x] ~~Execute [<label>](./<old-filename>)~~ (superseded by <versionLabel>)`. Never delete the old line.
|
|
34
|
+
- Append a new todo: `- [ ] Execute [<versionLabel>](./<planFilename>)`.
|
|
35
|
+
- If `## Todos` is missing (legacy assignment), insert it right after `## Acceptance Criteria` with a short guidance comment and the new todo line.
|
|
36
|
+
- Refresh the assignment frontmatter `updated` timestamp.
|
|
32
37
|
|
|
33
38
|
## Plan Contents
|
|
34
39
|
|
|
@@ -40,10 +45,13 @@ Write these sections:
|
|
|
40
45
|
4. Risks and Open Questions
|
|
41
46
|
5. Testing Strategy
|
|
42
47
|
|
|
48
|
+
**Decision capture:** While planning, record meaningful choices (library picks, schema design, architectural calls, rejected alternatives) as numbered entries in `<assignmentDir>/decision-record.md` using `## Decision N: <short title>` with Status (proposed/accepted), Context, Decision, Consequences. Downstream assignments that depend on this one auto-load these on grab.
|
|
49
|
+
|
|
43
50
|
## Reporting
|
|
44
51
|
|
|
45
52
|
After writing the plan:
|
|
46
53
|
|
|
47
54
|
- summarize the number of tasks and key decisions
|
|
48
55
|
- call out open questions or risks
|
|
49
|
-
-
|
|
56
|
+
- note which plan filename was written and which prior plan (if any) was superseded
|
|
57
|
+
- remind yourself to keep `assignment.md` progress, acceptance criteria, and todos current during implementation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: syntaur-protocol
|
|
3
|
-
description: Use when the user mentions Syntaur,
|
|
3
|
+
description: Use when the user mentions Syntaur, projects, assignments, files under ~/.syntaur/, assignment.md, plan.md, handoff.md, .syntaur/context.json, lifecycle states, or write boundaries.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Syntaur Protocol
|
|
@@ -15,19 +15,19 @@ Respect file ownership boundaries.
|
|
|
15
15
|
|
|
16
16
|
1. Your assignment folder only:
|
|
17
17
|
- `assignment.md`
|
|
18
|
-
- `plan.md`
|
|
18
|
+
- `plan*.md` (0 or more versioned plan files, e.g., `plan.md`, `plan-v2.md`)
|
|
19
19
|
- `scratchpad.md`
|
|
20
20
|
- `handoff.md`
|
|
21
21
|
- `decision-record.md`
|
|
22
|
-
2.
|
|
23
|
-
- `~/.syntaur/
|
|
24
|
-
- `~/.syntaur/
|
|
22
|
+
2. Project-level shared files:
|
|
23
|
+
- `~/.syntaur/projects/<project>/resources/<slug>.md`
|
|
24
|
+
- `~/.syntaur/projects/<project>/memories/<slug>.md`
|
|
25
25
|
3. Workspace files inside the assignment's configured workspace root
|
|
26
26
|
4. `.syntaur/context.json` in the current working directory
|
|
27
27
|
|
|
28
28
|
### Files you must never write
|
|
29
29
|
|
|
30
|
-
1. `
|
|
30
|
+
1. `project.md`, `agent.md`, `claude.md`
|
|
31
31
|
2. `manifest.md`
|
|
32
32
|
3. Any file prefixed with `_`
|
|
33
33
|
4. Other agents' assignment folders
|
|
@@ -37,9 +37,9 @@ Respect file ownership boundaries.
|
|
|
37
37
|
|
|
38
38
|
If `.syntaur/context.json` exists in the current working directory, read it before making changes. Use it to determine:
|
|
39
39
|
|
|
40
|
-
- `
|
|
40
|
+
- `projectSlug`
|
|
41
41
|
- `assignmentSlug`
|
|
42
|
-
- `
|
|
42
|
+
- `projectDir`
|
|
43
43
|
- `assignmentDir`
|
|
44
44
|
- `workspaceRoot`
|
|
45
45
|
- `sessionId` if present
|
|
@@ -48,32 +48,37 @@ If `.syntaur/context.json` exists in the current working directory, read it befo
|
|
|
48
48
|
|
|
49
49
|
When you are working on an existing assignment, read these in order:
|
|
50
50
|
|
|
51
|
-
1. `<
|
|
52
|
-
2. `<
|
|
53
|
-
3. `<
|
|
54
|
-
4. `<
|
|
51
|
+
1. `<projectDir>/manifest.md`
|
|
52
|
+
2. `<projectDir>/agent.md`
|
|
53
|
+
3. `<projectDir>/project.md`
|
|
54
|
+
4. `<projectDir>/claude.md` if it exists
|
|
55
55
|
5. `<assignmentDir>/assignment.md`
|
|
56
|
-
6. `<assignmentDir>/plan
|
|
56
|
+
6. any `<assignmentDir>/plan*.md` files linked from active todos in the `## Todos` section
|
|
57
57
|
7. `<assignmentDir>/handoff.md`
|
|
58
58
|
|
|
59
59
|
## Lifecycle Commands
|
|
60
60
|
|
|
61
61
|
Use the `syntaur` CLI for state transitions:
|
|
62
62
|
|
|
63
|
-
- `syntaur assign <slug> --agent <name> --
|
|
64
|
-
- `syntaur start <slug> --
|
|
65
|
-
- `syntaur review <slug> --
|
|
66
|
-
- `syntaur complete <slug> --
|
|
67
|
-
- `syntaur block <slug> --
|
|
68
|
-
- `syntaur unblock <slug> --
|
|
69
|
-
- `syntaur fail <slug> --
|
|
63
|
+
- `syntaur assign <slug> --agent <name> --project <project>`
|
|
64
|
+
- `syntaur start <slug> --project <project>`
|
|
65
|
+
- `syntaur review <slug> --project <project>`
|
|
66
|
+
- `syntaur complete <slug> --project <project>`
|
|
67
|
+
- `syntaur block <slug> --project <project> --reason <text>`
|
|
68
|
+
- `syntaur unblock <slug> --project <project>`
|
|
69
|
+
- `syntaur fail <slug> --project <project>`
|
|
70
|
+
|
|
71
|
+
## Troubleshooting
|
|
72
|
+
|
|
73
|
+
If Syntaur state looks inconsistent (missing files, stale manifests, unexpected hook blocks), run `syntaur doctor` to diagnose. Use `--json` for structured output.
|
|
70
74
|
|
|
71
75
|
## Conventions
|
|
72
76
|
|
|
73
77
|
- Assignment frontmatter is the single source of truth.
|
|
74
78
|
- Slugs are lowercase and hyphen-separated.
|
|
75
|
-
- Update acceptance criteria checkboxes as work lands, not only at the end.
|
|
79
|
+
- Update acceptance criteria and `## Todos` checkboxes as work lands, not only at the end.
|
|
76
80
|
- Keep the `## Progress` section in `assignment.md` current after meaningful milestones.
|
|
81
|
+
- When requirements shift, supersede the prior plan todo (`- [x] ~~...~~ (superseded by plan-v<N>)`) instead of rewriting the old plan file.
|
|
77
82
|
- Write handoffs with enough context for another agent or human to continue cleanly.
|
|
78
83
|
|
|
79
84
|
## References
|
|
@@ -11,7 +11,7 @@ Cursor reads `.cursor/rules/*.mdc` files with YAML frontmatter. Syntaur generate
|
|
|
11
11
|
Generate adapter files for a specific assignment:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
syntaur setup-adapter cursor --
|
|
14
|
+
syntaur setup-adapter cursor --project <project-slug> --assignment <assignment-slug>
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
This creates:
|
|
@@ -12,4 +12,4 @@ The `syntaur setup-adapter cursor` command generates this file
|
|
|
12
12
|
dynamically at `.cursor/rules/syntaur-protocol.mdc` in your workspace.
|
|
13
13
|
|
|
14
14
|
See the rendered output by running:
|
|
15
|
-
syntaur setup-adapter cursor --
|
|
15
|
+
syntaur setup-adapter cursor --project <slug> --assignment <slug>
|
|
@@ -11,7 +11,7 @@ OpenCode discovers skills from `SKILL.md` files in several directories and reads
|
|
|
11
11
|
Generate adapter files for a specific assignment:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
syntaur setup-adapter opencode --
|
|
14
|
+
syntaur setup-adapter opencode --project <project-slug> --assignment <assignment-slug>
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
This creates:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aq as o,ar as n}from"./mermaid.core-fMQRe9Gq.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-WL4C6EOR-CFEqRrE1.js";import{_ as i}from"./mermaid.core-fMQRe9Gq.js";import"./chunk-FMBD7UC4-5mMONjMK.js";import"./chunk-JSJVCQXG-CwKj-Es4.js";import"./chunk-55IACEB6-r1_jHZYp.js";import"./chunk-KX2RTZJC-ByoW-HgN.js";import"./index-BhuXD-Q5.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-WL4C6EOR-CFEqRrE1.js";import{_ as i}from"./mermaid.core-fMQRe9Gq.js";import"./chunk-FMBD7UC4-5mMONjMK.js";import"./chunk-JSJVCQXG-CwKj-Es4.js";import"./chunk-55IACEB6-r1_jHZYp.js";import"./chunk-KX2RTZJC-ByoW-HgN.js";import"./index-BhuXD-Q5.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as r}from"./_baseUniq-gxypqvP5.js";var e=4;function a(o){return r(o,e)}export{a as c};
|