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.
Files changed (128) hide show
  1. package/README.md +5 -0
  2. package/dashboard/dist/assets/{_basePickBy-DXzhD14q.js → _basePickBy-CHKX1r7P.js} +1 -1
  3. package/dashboard/dist/assets/{_baseUniq-gxypqvP5.js → _baseUniq-CTxTc4MS.js} +1 -1
  4. package/dashboard/dist/assets/{arc-Ce7nYKSm.js → arc-BUo5zftd.js} +1 -1
  5. package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-zX4f4_Mf.js → architectureDiagram-2XIMDMQ5-CrJLm-P0.js} +1 -1
  6. package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-auOdy7nH.js → blockDiagram-WCTKOSBZ-BK60lBBJ.js} +1 -1
  7. package/dashboard/dist/assets/{c4Diagram-IC4MRINW-C2kkjPbW.js → c4Diagram-IC4MRINW-C7oJEvA0.js} +1 -1
  8. package/dashboard/dist/assets/channel-DdltvFFH.js +1 -0
  9. package/dashboard/dist/assets/{chunk-4BX2VUAB-B7dfpnbG.js → chunk-4BX2VUAB-CjUPlzHz.js} +1 -1
  10. package/dashboard/dist/assets/{chunk-55IACEB6-r1_jHZYp.js → chunk-55IACEB6-6HmWguiO.js} +1 -1
  11. package/dashboard/dist/assets/{chunk-FMBD7UC4-5mMONjMK.js → chunk-FMBD7UC4-CLuJnd1b.js} +1 -1
  12. package/dashboard/dist/assets/{chunk-JSJVCQXG-CwKj-Es4.js → chunk-JSJVCQXG-B4d62qWV.js} +1 -1
  13. package/dashboard/dist/assets/{chunk-KX2RTZJC-ByoW-HgN.js → chunk-KX2RTZJC-AsEKRPq2.js} +1 -1
  14. package/dashboard/dist/assets/{chunk-NQ4KR5QH-D1olOovd.js → chunk-NQ4KR5QH-DQhHHvwY.js} +1 -1
  15. package/dashboard/dist/assets/{chunk-QZHKN3VN-CB8_FC8w.js → chunk-QZHKN3VN-Ds1TtI3E.js} +1 -1
  16. package/dashboard/dist/assets/{chunk-WL4C6EOR-CFEqRrE1.js → chunk-WL4C6EOR-C7jE3-cR.js} +1 -1
  17. package/dashboard/dist/assets/classDiagram-VBA2DB6C-BHqdFE-8.js +1 -0
  18. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BHqdFE-8.js +1 -0
  19. package/dashboard/dist/assets/clone-CBJOOeOm.js +1 -0
  20. package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-D6dGVXEI.js → cose-bilkent-S5V4N54A-C9ka5v1m.js} +1 -1
  21. package/dashboard/dist/assets/{dagre-KLK3FWXG-Cvg9CgP-.js → dagre-KLK3FWXG-BbgPQBKy.js} +1 -1
  22. package/dashboard/dist/assets/{diagram-E7M64L7V-iCBudhZD.js → diagram-E7M64L7V-DpdeZFD4.js} +1 -1
  23. package/dashboard/dist/assets/{diagram-IFDJBPK2-BGniy7VQ.js → diagram-IFDJBPK2-FlHLQzOV.js} +1 -1
  24. package/dashboard/dist/assets/{diagram-P4PSJMXO-B6Ie044E.js → diagram-P4PSJMXO-B22NkEF_.js} +1 -1
  25. package/dashboard/dist/assets/{erDiagram-INFDFZHY-BHvFRNhJ.js → erDiagram-INFDFZHY-zSqmtDid.js} +1 -1
  26. package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CN86Zu3Q.js → flowDiagram-PKNHOUZH-BP_0XmVV.js} +1 -1
  27. package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-D-1fKFjW.js → ganttDiagram-A5KZAMGK-8uRyYgZV.js} +1 -1
  28. package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-Dtf1A6KL.js → gitGraphDiagram-K3NZZRJ6-JFqg8sv4.js} +1 -1
  29. package/dashboard/dist/assets/{graph-B6H_kXSs.js → graph-a-PAH599.js} +1 -1
  30. package/dashboard/dist/assets/index-CoVCLSh2.css +1 -0
  31. package/dashboard/dist/assets/index-yyAIuzrP.js +471 -0
  32. package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-R9wJj4JF.js → infoDiagram-LFFYTUFH-C3kq7Nbv.js} +1 -1
  33. package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CJmeR-bX.js → ishikawaDiagram-PHBUUO56-Kqi4EZ-n.js} +1 -1
  34. package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-FcUhyu8I.js → journeyDiagram-4ABVD52K-CTfv0Wcr.js} +1 -1
  35. package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-C8UcTIwW.js → kanban-definition-K7BYSVSG-Dmx0lgvR.js} +1 -1
  36. package/dashboard/dist/assets/{layout-DzBy6alw.js → layout-KKRbT2Od.js} +1 -1
  37. package/dashboard/dist/assets/{linear-CZJCNOB9.js → linear-5egaBiw7.js} +1 -1
  38. package/dashboard/dist/assets/{mermaid.core-fMQRe9Gq.js → mermaid.core-C9pF_oFQ.js} +4 -4
  39. package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-BFwp-LS-.js → mindmap-definition-YRQLILUH-C7HXYEXt.js} +1 -1
  40. package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-CQLmPkkd.js → pieDiagram-SKSYHLDU-DkdZm-YP.js} +1 -1
  41. package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-DAmi-dmD.js → quadrantDiagram-337W2JSQ-DkcRJs5F.js} +1 -1
  42. package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-Dcdts4kX.js → requirementDiagram-Z7DCOOCP-BaTDVYTl.js} +1 -1
  43. package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-By8LRvM0.js → sankeyDiagram-WA2Y5GQK-DvPLbGV5.js} +1 -1
  44. package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BsvqgtTz.js → sequenceDiagram-2WXFIKYE-DQoZ2xMK.js} +1 -1
  45. package/dashboard/dist/assets/{stateDiagram-RAJIS63D-DFNOD7cx.js → stateDiagram-RAJIS63D-CS4l0OjM.js} +1 -1
  46. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DkBtE1WJ.js +1 -0
  47. package/dashboard/dist/assets/{timeline-definition-YZTLITO2-CMcgJGjn.js → timeline-definition-YZTLITO2-aC0iCFCW.js} +1 -1
  48. package/dashboard/dist/assets/{treemap-KZPCXAKY-BWsRNHwq.js → treemap-KZPCXAKY-Ie-PFjgx.js} +1 -1
  49. package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-io7-2Tod.js → vennDiagram-LZ73GAT5-CJN3ExTQ.js} +1 -1
  50. package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-AVnh4fDS.js → xychartDiagram-JWTSCODW-DSiDu1CN.js} +1 -1
  51. package/dashboard/dist/index.html +2 -2
  52. package/dist/dashboard/server.d.ts +1 -1
  53. package/dist/dashboard/server.js +1163 -734
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.js +3979 -1372
  56. package/dist/index.js.map +1 -1
  57. package/examples/playbooks/keep-records-updated.md +1 -1
  58. package/examples/playbooks/read-before-plan.md +5 -5
  59. package/examples/{sample-mission → sample-project}/_index-assignments.md +1 -1
  60. package/examples/{sample-mission → sample-project}/_index-decisions.md +1 -1
  61. package/examples/{sample-mission → sample-project}/_index-plans.md +1 -1
  62. package/examples/{sample-mission → sample-project}/_status.md +3 -3
  63. package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/assignment.md +4 -1
  64. package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/assignment.md +4 -1
  65. package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/assignment.md +4 -1
  66. package/examples/{sample-mission → sample-project}/manifest.md +3 -3
  67. package/examples/{sample-mission → sample-project}/memories/_index.md +2 -2
  68. package/examples/{sample-mission → sample-project}/memories/postgres-connection-pooling.md +1 -1
  69. package/examples/{sample-mission → sample-project}/resources/_index.md +1 -1
  70. package/package.json +5 -3
  71. package/platforms/README.md +7 -7
  72. package/platforms/claude-code/README.md +1 -1
  73. package/platforms/claude-code/agents/syntaur-expert.md +57 -57
  74. package/platforms/claude-code/commands/doctor-syntaur/doctor-syntaur.md +112 -0
  75. package/platforms/claude-code/commands/track-session/track-session.md +8 -8
  76. package/platforms/claude-code/hooks/enforce-boundaries.sh +4 -4
  77. package/platforms/claude-code/hooks/hooks.json +1 -1
  78. package/platforms/claude-code/hooks/session-cleanup.sh +5 -5
  79. package/platforms/claude-code/references/file-ownership.md +8 -8
  80. package/platforms/claude-code/references/protocol-summary.md +7 -6
  81. package/platforms/claude-code/skills/complete-assignment/SKILL.md +21 -17
  82. package/platforms/claude-code/skills/create-assignment/SKILL.md +15 -14
  83. package/platforms/claude-code/skills/grab-assignment/SKILL.md +56 -49
  84. package/platforms/claude-code/skills/plan-assignment/SKILL.md +57 -10
  85. package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +21 -17
  86. package/platforms/codex/.codex-plugin/plugin.json +3 -3
  87. package/platforms/codex/README.md +1 -1
  88. package/platforms/codex/adapters/AGENTS.md.template +3 -3
  89. package/platforms/codex/agents/openai.yaml +2 -2
  90. package/platforms/codex/agents/syntaur-operator.md +33 -30
  91. package/platforms/codex/references/file-ownership.md +8 -8
  92. package/platforms/codex/references/protocol-summary.md +11 -6
  93. package/platforms/codex/scripts/enforce-boundaries.sh +2 -2
  94. package/platforms/codex/scripts/session-cleanup.sh +2 -2
  95. package/platforms/codex/skills/complete-assignment/SKILL.md +6 -6
  96. package/platforms/codex/skills/create-assignment/SKILL.md +8 -7
  97. package/platforms/codex/skills/grab-assignment/SKILL.md +30 -20
  98. package/platforms/codex/skills/plan-assignment/SKILL.md +19 -11
  99. package/platforms/codex/skills/syntaur-protocol/SKILL.md +26 -21
  100. package/platforms/cursor/README.md +1 -1
  101. package/platforms/cursor/adapters/syntaur-protocol.mdc +1 -1
  102. package/platforms/opencode/README.md +1 -1
  103. package/platforms/opencode/adapters/opencode.json.template +1 -1
  104. package/dashboard/dist/assets/channel-PMR2DuGi.js +0 -1
  105. package/dashboard/dist/assets/classDiagram-VBA2DB6C-DmESf_RL.js +0 -1
  106. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-DmESf_RL.js +0 -1
  107. package/dashboard/dist/assets/clone-WlIeyha4.js +0 -1
  108. package/dashboard/dist/assets/index-BhuXD-Q5.js +0 -445
  109. package/dashboard/dist/assets/index-BnqH-RIk.css +0 -1
  110. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-DVO-Epiz.js +0 -1
  111. package/examples/sample-mission/agent.md +0 -33
  112. package/examples/sample-mission/claude.md +0 -13
  113. package/platforms/claude-code/skills/create-mission/SKILL.md +0 -51
  114. package/platforms/codex/skills/create-mission/SKILL.md +0 -35
  115. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/decision-record.md +0 -0
  116. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/handoff.md +0 -0
  117. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/plan.md +0 -0
  118. /package/examples/{sample-mission → sample-project}/assignments/design-auth-schema/scratchpad.md +0 -0
  119. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/decision-record.md +0 -0
  120. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/handoff.md +0 -0
  121. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/plan.md +0 -0
  122. /package/examples/{sample-mission → sample-project}/assignments/implement-jwt-middleware/scratchpad.md +0 -0
  123. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/decision-record.md +0 -0
  124. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/handoff.md +0 -0
  125. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/plan.md +0 -0
  126. /package/examples/{sample-mission → sample-project}/assignments/write-auth-tests/scratchpad.md +0 -0
  127. /package/examples/{sample-mission/mission.md → sample-project/project.md} +0 -0
  128. /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 discover, claim, and start a pending Syntaur assignment, create .syntaur/context.json, and register a Codex session.
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
- Claim a pending Syntaur assignment and set up the current workspace.
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: mission slug
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 mission entry files:
23
- - `~/.syntaur/missions/<mission-slug>/manifest.md`
24
- - `~/.syntaur/missions/<mission-slug>/mission.md`
25
- - `~/.syntaur/missions/<mission-slug>/agent.md`
26
- - `~/.syntaur/missions/<mission-slug>/claude.md` if it exists
27
- Note the `workspace` field in `mission.md` frontmatter if present. This indicates which project/codebase grouping the mission belongs to. When writing context to `.syntaur/context.json` (Step 8), include `"workspace": "<value>"` if the mission has a workspace.
28
- 3. Discover pending assignments under `~/.syntaur/missions/<mission-slug>/assignments/`.
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 pending assignments with title and priority
31
- - ask the user to choose unless only one pending assignment exists
32
- 5. Claim the assignment:
33
- - `syntaur assign <assignment-slug> --agent codex --mission <mission-slug>`
34
- - `syntaur start <assignment-slug> --mission <mission-slug>`
35
- 6. Read the full assignment file.
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
- "missionSlug": "<mission-slug>",
45
+ "projectSlug": "<project-slug>",
42
46
  "assignmentSlug": "<assignment-slug>",
43
- "missionDir": "/absolute/path/to/mission",
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 --mission <mission-slug> --assignment <assignment-slug> --agent codex --session-id <uuid> --path <cwd>`
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: `plan-assignment`
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 to plan.md for the current Syntaur assignment.
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
- - `<missionDir>/agent.md`
20
- - `<missionDir>/claude.md` if it exists
21
- - `<missionDir>/mission.md`
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. Update `<assignmentDir>/plan.md`:
28
- - preserve the existing YAML frontmatter
29
- - set `status` to `in_progress` if it is still `draft`
30
- - refresh the `updated` timestamp
31
- - replace the body with a concrete plan
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
- - remind yourself to keep `assignment.md` progress and acceptance criteria current during implementation
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, missions, assignments, files under ~/.syntaur/, assignment.md, plan.md, handoff.md, .syntaur/context.json, lifecycle states, or write boundaries.
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. Mission-level shared files:
23
- - `~/.syntaur/missions/<mission>/resources/<slug>.md`
24
- - `~/.syntaur/missions/<mission>/memories/<slug>.md`
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. `mission.md`, `agent.md`, `claude.md`
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
- - `missionSlug`
40
+ - `projectSlug`
41
41
  - `assignmentSlug`
42
- - `missionDir`
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. `<missionDir>/manifest.md`
52
- 2. `<missionDir>/agent.md`
53
- 3. `<missionDir>/mission.md`
54
- 4. `<missionDir>/claude.md` if it exists
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.md`
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> --mission <mission>`
64
- - `syntaur start <slug> --mission <mission>`
65
- - `syntaur review <slug> --mission <mission>`
66
- - `syntaur complete <slug> --mission <mission>`
67
- - `syntaur block <slug> --mission <mission> --reason <text>`
68
- - `syntaur unblock <slug> --mission <mission>`
69
- - `syntaur fail <slug> --mission <mission>`
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 --mission <mission-slug> --assignment <assignment-slug>
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 --mission <slug> --assignment <slug>
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 --mission <mission-slug> --assignment <assignment-slug>
14
+ syntaur setup-adapter opencode --project <project-slug> --assignment <assignment-slug>
15
15
  ```
16
16
 
17
17
  This creates:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "instructions": [
3
3
  "Read AGENTS.md in this directory for Syntaur protocol instructions.",
4
- "Also read <missionDir>/agent.md for universal agent conventions."
4
+ "Also read <projectDir>/agent.md for universal agent conventions."
5
5
  ]
6
6
  }
@@ -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};