syntaur 0.1.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/.agents/plugins/marketplace.json +20 -0
  2. package/bin/syntaur.js +2 -0
  3. package/dashboard/dist/assets/_basePickBy-C-VS6QEr.js +1 -0
  4. package/dashboard/dist/assets/_baseUniq-Dfp0h_kE.js +1 -0
  5. package/dashboard/dist/assets/arc-DMAuseMg.js +1 -0
  6. package/dashboard/dist/assets/architectureDiagram-2XIMDMQ5-DERw9YH7.js +36 -0
  7. package/dashboard/dist/assets/blockDiagram-WCTKOSBZ-CVhoUGyp.js +132 -0
  8. package/dashboard/dist/assets/c4Diagram-IC4MRINW-B97ce7q3.js +10 -0
  9. package/dashboard/dist/assets/channel-BFnz84Fk.js +1 -0
  10. package/dashboard/dist/assets/chunk-4BX2VUAB-C-Tm8s7l.js +1 -0
  11. package/dashboard/dist/assets/chunk-55IACEB6-DTLywdgN.js +1 -0
  12. package/dashboard/dist/assets/chunk-FMBD7UC4-CZe3jJBW.js +15 -0
  13. package/dashboard/dist/assets/chunk-JSJVCQXG-DCDIzNBU.js +1 -0
  14. package/dashboard/dist/assets/chunk-KX2RTZJC-Dny_iTMP.js +1 -0
  15. package/dashboard/dist/assets/chunk-NQ4KR5QH-BVkniaFi.js +220 -0
  16. package/dashboard/dist/assets/chunk-QZHKN3VN-Yiy-DBy_.js +1 -0
  17. package/dashboard/dist/assets/chunk-WL4C6EOR-BZ6Aii8B.js +189 -0
  18. package/dashboard/dist/assets/classDiagram-VBA2DB6C-9i4eMNgh.js +1 -0
  19. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-9i4eMNgh.js +1 -0
  20. package/dashboard/dist/assets/clone-BQWw0UR0.js +1 -0
  21. package/dashboard/dist/assets/cose-bilkent-S5V4N54A-p-FSX7Hd.js +1 -0
  22. package/dashboard/dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
  23. package/dashboard/dist/assets/dagre-KLK3FWXG-JGHXC_Z-.js +4 -0
  24. package/dashboard/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  25. package/dashboard/dist/assets/diagram-E7M64L7V-BMj79nA2.js +24 -0
  26. package/dashboard/dist/assets/diagram-IFDJBPK2-DvE6Hc7-.js +43 -0
  27. package/dashboard/dist/assets/diagram-P4PSJMXO-xVL3uMJs.js +24 -0
  28. package/dashboard/dist/assets/erDiagram-INFDFZHY-HAM6d8j_.js +70 -0
  29. package/dashboard/dist/assets/flowDiagram-PKNHOUZH-DPorMsV0.js +162 -0
  30. package/dashboard/dist/assets/ganttDiagram-A5KZAMGK-BxesGLxK.js +292 -0
  31. package/dashboard/dist/assets/gitGraphDiagram-K3NZZRJ6-tjaHpiMU.js +65 -0
  32. package/dashboard/dist/assets/graph-DAyh4Dby.js +1 -0
  33. package/dashboard/dist/assets/index-BnqH-RIk.css +1 -0
  34. package/dashboard/dist/assets/index-C1augJ5N.js +440 -0
  35. package/dashboard/dist/assets/infoDiagram-LFFYTUFH-MekJE5ZF.js +2 -0
  36. package/dashboard/dist/assets/init-Gi6I4Gst.js +1 -0
  37. package/dashboard/dist/assets/ishikawaDiagram-PHBUUO56-DovIBmaF.js +70 -0
  38. package/dashboard/dist/assets/journeyDiagram-4ABVD52K-CZw0QfY4.js +139 -0
  39. package/dashboard/dist/assets/kanban-definition-K7BYSVSG-Bl-d4Lb6.js +89 -0
  40. package/dashboard/dist/assets/katex-B1X10hvy.js +261 -0
  41. package/dashboard/dist/assets/layout-Ds5A52wn.js +1 -0
  42. package/dashboard/dist/assets/linear-FqOeAEKI.js +1 -0
  43. package/dashboard/dist/assets/mermaid.core-C7JSt2gc.js +255 -0
  44. package/dashboard/dist/assets/mindmap-definition-YRQLILUH-D6x3mID9.js +68 -0
  45. package/dashboard/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  46. package/dashboard/dist/assets/pieDiagram-SKSYHLDU-CnElBd0K.js +30 -0
  47. package/dashboard/dist/assets/quadrantDiagram-337W2JSQ-Q08fuvGB.js +7 -0
  48. package/dashboard/dist/assets/requirementDiagram-Z7DCOOCP-BImzzV5r.js +73 -0
  49. package/dashboard/dist/assets/sankeyDiagram-WA2Y5GQK-BIfD481p.js +10 -0
  50. package/dashboard/dist/assets/sequenceDiagram-2WXFIKYE-BS_1aSDE.js +145 -0
  51. package/dashboard/dist/assets/stateDiagram-RAJIS63D-Br1E8nkw.js +1 -0
  52. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-rZTWN-vQ.js +1 -0
  53. package/dashboard/dist/assets/timeline-definition-YZTLITO2-DQJ_O-WU.js +61 -0
  54. package/dashboard/dist/assets/treemap-KZPCXAKY-BmmUp0Cf.js +162 -0
  55. package/dashboard/dist/assets/vennDiagram-LZ73GAT5-DzQooghy.js +34 -0
  56. package/dashboard/dist/assets/xychartDiagram-JWTSCODW-W9j8X9K6.js +7 -0
  57. package/dashboard/dist/index.html +17 -0
  58. package/dist/dashboard/server.d.ts +15 -0
  59. package/dist/dashboard/server.js +5873 -0
  60. package/dist/dashboard/server.js.map +1 -0
  61. package/dist/index.d.ts +2 -0
  62. package/dist/index.js +8892 -0
  63. package/dist/index.js.map +1 -0
  64. package/examples/playbooks/commit-discipline.md +20 -0
  65. package/examples/playbooks/keep-records-updated.md +30 -0
  66. package/examples/playbooks/plan-versioning.md +36 -0
  67. package/examples/playbooks/read-before-plan.md +27 -0
  68. package/examples/playbooks/test-before-done.md +24 -0
  69. package/examples/playbooks/workspace-before-code.md +30 -0
  70. package/examples/sample-mission/_index-assignments.md +20 -0
  71. package/examples/sample-mission/_index-decisions.md +11 -0
  72. package/examples/sample-mission/_index-plans.md +12 -0
  73. package/examples/sample-mission/_status.md +47 -0
  74. package/examples/sample-mission/agent.md +33 -0
  75. package/examples/sample-mission/assignments/design-auth-schema/assignment.md +61 -0
  76. package/examples/sample-mission/assignments/design-auth-schema/decision-record.md +15 -0
  77. package/examples/sample-mission/assignments/design-auth-schema/handoff.md +31 -0
  78. package/examples/sample-mission/assignments/design-auth-schema/plan.md +31 -0
  79. package/examples/sample-mission/assignments/design-auth-schema/scratchpad.md +40 -0
  80. package/examples/sample-mission/assignments/implement-jwt-middleware/assignment.md +65 -0
  81. package/examples/sample-mission/assignments/implement-jwt-middleware/decision-record.md +15 -0
  82. package/examples/sample-mission/assignments/implement-jwt-middleware/handoff.md +9 -0
  83. package/examples/sample-mission/assignments/implement-jwt-middleware/plan.md +33 -0
  84. package/examples/sample-mission/assignments/implement-jwt-middleware/scratchpad.md +48 -0
  85. package/examples/sample-mission/assignments/write-auth-tests/assignment.md +54 -0
  86. package/examples/sample-mission/assignments/write-auth-tests/decision-record.md +9 -0
  87. package/examples/sample-mission/assignments/write-auth-tests/handoff.md +9 -0
  88. package/examples/sample-mission/assignments/write-auth-tests/plan.md +34 -0
  89. package/examples/sample-mission/assignments/write-auth-tests/scratchpad.md +8 -0
  90. package/examples/sample-mission/claude.md +13 -0
  91. package/examples/sample-mission/manifest.md +22 -0
  92. package/examples/sample-mission/memories/_index.md +11 -0
  93. package/examples/sample-mission/memories/postgres-connection-pooling.md +35 -0
  94. package/examples/sample-mission/mission.md +34 -0
  95. package/examples/sample-mission/resources/_index.md +11 -0
  96. package/examples/sample-mission/resources/auth-requirements.md +44 -0
  97. package/package.json +57 -0
  98. package/plugin/.claude-plugin/plugin.json +9 -0
  99. package/plugin/agents/syntaur-expert.md +393 -0
  100. package/plugin/commands/track-server/track-server.md +56 -0
  101. package/plugin/commands/track-session/track-session.md +65 -0
  102. package/plugin/hooks/enforce-boundaries.sh +135 -0
  103. package/plugin/hooks/hooks.json +27 -0
  104. package/plugin/hooks/session-cleanup.sh +74 -0
  105. package/plugin/references/file-ownership.md +51 -0
  106. package/plugin/references/protocol-summary.md +70 -0
  107. package/plugin/skills/complete-assignment/SKILL.md +137 -0
  108. package/plugin/skills/create-assignment/SKILL.md +64 -0
  109. package/plugin/skills/create-mission/SKILL.md +51 -0
  110. package/plugin/skills/grab-assignment/SKILL.md +180 -0
  111. package/plugin/skills/plan-assignment/SKILL.md +101 -0
  112. package/plugin/skills/syntaur-protocol/SKILL.md +72 -0
  113. package/plugins/syntaur/.codex-plugin/plugin.json +28 -0
  114. package/plugins/syntaur/agents/openai.yaml +7 -0
  115. package/plugins/syntaur/agents/syntaur-operator.md +127 -0
  116. package/plugins/syntaur/commands/track-session.md +27 -0
  117. package/plugins/syntaur/hooks.json +27 -0
  118. package/plugins/syntaur/references/file-ownership.md +51 -0
  119. package/plugins/syntaur/references/protocol-summary.md +66 -0
  120. package/plugins/syntaur/scripts/enforce-boundaries.sh +103 -0
  121. package/plugins/syntaur/scripts/session-cleanup.sh +39 -0
  122. package/plugins/syntaur/skills/complete-assignment/SKILL.md +63 -0
  123. package/plugins/syntaur/skills/create-assignment/SKILL.md +43 -0
  124. package/plugins/syntaur/skills/create-mission/SKILL.md +35 -0
  125. package/plugins/syntaur/skills/grab-assignment/SKILL.md +61 -0
  126. package/plugins/syntaur/skills/plan-assignment/SKILL.md +49 -0
  127. package/plugins/syntaur/skills/syntaur-protocol/SKILL.md +84 -0
  128. package/plugins/syntaur/skills/track-session/SKILL.md +49 -0
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: complete-assignment
3
+ description: Use when the user wants to write a Syntaur handoff, close the current session, and transition the assignment to review or completed.
4
+ ---
5
+
6
+ # Complete Assignment
7
+
8
+ Write a handoff for the current Syntaur assignment and transition it to `review` or `completed`.
9
+
10
+ ## Arguments
11
+
12
+ User arguments: `$ARGUMENTS`
13
+
14
+ If the user passed `--complete`, transition directly to `completed` only when all acceptance criteria are met. Otherwise transition to `review`.
15
+
16
+ ## Workflow
17
+
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.
20
+ 3. Read `<assignmentDir>/handoff.md` and append a new handoff entry using the protocol format:
21
+
22
+ ```markdown
23
+ ## Handoff <N>: <ISO 8601 timestamp>
24
+
25
+ **From:** codex
26
+ **To:** human
27
+ **Reason:** <Why this handoff is happening>
28
+
29
+ ### Summary
30
+ <One paragraph>
31
+
32
+ ### Current State
33
+ - <What is working>
34
+ - <What is not working or still partial>
35
+ - <Acceptance criteria status: N of M met>
36
+
37
+ ### Next Steps
38
+ - <Recommended follow-up actions>
39
+
40
+ ### Important Context
41
+ - <Anything the next person needs to know>
42
+ ```
43
+
44
+ 4. Update the handoff frontmatter:
45
+ - set `updated` to the current timestamp
46
+ - increment `handoffCount`
47
+ 5. Update acceptance criteria checkboxes in `assignment.md` to match reality.
48
+ 6. If `.syntaur/context.json` includes `sessionId`, mark that session as completed through the dashboard API:
49
+
50
+ ```bash
51
+ curl -s -X PATCH "http://localhost:$(cat ~/.syntaur/dashboard-port 2>/dev/null || echo 4800)/api/agent-sessions/<session-id>/status" \
52
+ -H "Content-Type: application/json" \
53
+ -d '{"status":"completed","missionSlug":"<mission-slug>"}'
54
+ ```
55
+
56
+ 7. Transition the assignment:
57
+ - `syntaur complete <assignment-slug> --mission <mission-slug>` when `--complete` is allowed
58
+ - otherwise `syntaur review <assignment-slug> --mission <mission-slug>`
59
+ 8. Delete `.syntaur/context.json`.
60
+ 9. Summarize:
61
+ - new status
62
+ - acceptance criteria met vs total
63
+ - any criteria still unmet or follow-up risk
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: create-assignment
3
+ description: Use when the user wants to create a new Syntaur assignment inside a mission or as a one-off mission plus assignment.
4
+ ---
5
+
6
+ # Create Assignment
7
+
8
+ Create a new Syntaur assignment from Codex.
9
+
10
+ ## Arguments
11
+
12
+ User arguments: `$ARGUMENTS`
13
+
14
+ Parse:
15
+
16
+ - First positional argument: assignment title
17
+ - `--mission <slug>` required unless `--one-off`
18
+ - `--one-off` optional
19
+ - `--slug <slug>` optional
20
+ - `--priority <level>` optional, default `medium`
21
+ - `--depends-on <slug[,slug...]>` optional
22
+ - `--dir <path>` optional
23
+
24
+ If no title was provided, ask the user for it.
25
+
26
+ If neither `--mission` nor `--one-off` was provided, look for `.syntaur/context.json` in the current working directory. If present, default the mission to that context's `missionSlug` and tell the user you are using it.
27
+
28
+ ## Workflow
29
+
30
+ 1. Run one of:
31
+ - `syntaur create-assignment "<title>" --mission <slug> [--slug <slug>] [--priority <level>] [--depends-on <slugs>] [--dir <path>]`
32
+ - `syntaur create-assignment "<title>" --one-off [--slug <slug>] [--priority <level>] [--dir <path>]`
33
+ 2. If the command fails, report the error and stop.
34
+ 3. Read the generated `assignment.md`.
35
+ 4. Summarize:
36
+ - assignment slug
37
+ - mission slug
38
+ - priority
39
+ - location
40
+ - created files: `assignment.md`, `plan.md`, `scratchpad.md`, `handoff.md`, `decision-record.md`
41
+ 5. Suggest next steps:
42
+ - fill in the objective, context, and acceptance criteria
43
+ - run `grab-assignment` to claim it if work should begin now
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: create-mission
3
+ description: Use when the user wants to create a new Syntaur mission and scaffold its mission.md, agent.md, claude.md, indexes, and manifest files.
4
+ ---
5
+
6
+ # Create Mission
7
+
8
+ Create a new Syntaur mission from Codex.
9
+
10
+ ## Arguments
11
+
12
+ User arguments: `$ARGUMENTS`
13
+
14
+ Parse:
15
+
16
+ - First positional argument: mission title
17
+ - `--slug <slug>` optional
18
+ - `--dir <path>` optional
19
+ - `--workspace <workspace>` optional: workspace grouping label (e.g., `syntaur`, `reeva`)
20
+
21
+ If no title was provided, ask the user for it.
22
+
23
+ ## Workflow
24
+
25
+ 1. Run `syntaur create-mission "<title>" [--slug <slug>] [--dir <path>] [--workspace <workspace>]`.
26
+ 2. If the command fails, report the error and stop.
27
+ 3. Read the generated `mission.md` to confirm the mission path and scaffold.
28
+ 4. Summarize:
29
+ - mission slug
30
+ - mission directory
31
+ - key files created: `manifest.md`, `mission.md`, `agent.md`, `claude.md`
32
+ 5. Suggest next steps:
33
+ - fill in `mission.md`
34
+ - add mission-wide guidance to `agent.md`
35
+ - run `create-assignment` for the first task
@@ -0,0 +1,61 @@
1
+ ---
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.
4
+ ---
5
+
6
+ # Grab Assignment
7
+
8
+ Claim a pending Syntaur assignment and set up the current workspace.
9
+
10
+ ## Arguments
11
+
12
+ User arguments: `$ARGUMENTS`
13
+
14
+ Parse:
15
+
16
+ - First positional argument: mission slug
17
+ - Second positional argument: optional assignment slug
18
+
19
+ ## Workflow
20
+
21
+ 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/`.
29
+ 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.
36
+ 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
+ 8. Create `.syntaur/context.json` in the current working directory with:
38
+
39
+ ```json
40
+ {
41
+ "missionSlug": "<mission-slug>",
42
+ "assignmentSlug": "<assignment-slug>",
43
+ "missionDir": "/absolute/path/to/mission",
44
+ "assignmentDir": "/absolute/path/to/assignment",
45
+ "workspaceRoot": "/absolute/path/to/workspace",
46
+ "title": "<assignment title>",
47
+ "branch": "<workspace.branch or null>",
48
+ "grabbedAt": "<ISO 8601 timestamp>",
49
+ "sessionId": "<uuid>"
50
+ }
51
+ ```
52
+
53
+ 9. Register the agent session:
54
+ - generate a UUID
55
+ - run `syntaur track-session --mission <mission-slug> --assignment <assignment-slug> --agent codex --session-id <uuid> --path <cwd>`
56
+ 10. Summarize:
57
+ - assignment slug and title
58
+ - objective
59
+ - acceptance criteria
60
+ - workspace path
61
+ 11. Suggest next step: `plan-assignment`
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: plan-assignment
3
+ description: Use when the user wants a detailed implementation plan written to plan.md for the current Syntaur assignment.
4
+ ---
5
+
6
+ # Plan Assignment
7
+
8
+ Create an implementation plan for the current Syntaur assignment.
9
+
10
+ ## Arguments
11
+
12
+ Optional notes from the user: `$ARGUMENTS`
13
+
14
+ ## Workflow
15
+
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
+ 2. Read:
18
+ - `<assignmentDir>/assignment.md`
19
+ - `<missionDir>/agent.md`
20
+ - `<missionDir>/claude.md` if it exists
21
+ - `<missionDir>/mission.md`
22
+ 3. If the assignment depends on other assignments, read each dependency handoff for integration context.
23
+ 4. Explore `workspaceRoot` when it exists:
24
+ - inspect project structure
25
+ - find likely implementation files
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
32
+
33
+ ## Plan Contents
34
+
35
+ Write these sections:
36
+
37
+ 1. Overview
38
+ 2. Tasks
39
+ 3. Acceptance Criteria Mapping
40
+ 4. Risks and Open Questions
41
+ 5. Testing Strategy
42
+
43
+ ## Reporting
44
+
45
+ After writing the plan:
46
+
47
+ - summarize the number of tasks and key decisions
48
+ - call out open questions or risks
49
+ - remind yourself to keep `assignment.md` progress and acceptance criteria current during implementation
@@ -0,0 +1,84 @@
1
+ ---
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.
4
+ ---
5
+
6
+ # Syntaur Protocol
7
+
8
+ You are working within the Syntaur protocol. Follow these rules at all times.
9
+
10
+ ## Write Boundary Rules
11
+
12
+ Respect file ownership boundaries.
13
+
14
+ ### Files you may write
15
+
16
+ 1. Your assignment folder only:
17
+ - `assignment.md`
18
+ - `plan.md`
19
+ - `scratchpad.md`
20
+ - `handoff.md`
21
+ - `decision-record.md`
22
+ 2. Mission-level shared files:
23
+ - `~/.syntaur/missions/<mission>/resources/<slug>.md`
24
+ - `~/.syntaur/missions/<mission>/memories/<slug>.md`
25
+ 3. Workspace files inside the assignment's configured workspace root
26
+ 4. `.syntaur/context.json` in the current working directory
27
+
28
+ ### Files you must never write
29
+
30
+ 1. `mission.md`, `agent.md`, `claude.md`
31
+ 2. `manifest.md`
32
+ 3. Any file prefixed with `_`
33
+ 4. Other agents' assignment folders
34
+ 5. Anything outside the current workspace boundary
35
+
36
+ ## Current Assignment Context
37
+
38
+ If `.syntaur/context.json` exists in the current working directory, read it before making changes. Use it to determine:
39
+
40
+ - `missionSlug`
41
+ - `assignmentSlug`
42
+ - `missionDir`
43
+ - `assignmentDir`
44
+ - `workspaceRoot`
45
+ - `sessionId` if present
46
+
47
+ ## Required Reading Order
48
+
49
+ When you are working on an existing assignment, read these in order:
50
+
51
+ 1. `<missionDir>/manifest.md`
52
+ 2. `<missionDir>/agent.md`
53
+ 3. `<missionDir>/mission.md`
54
+ 4. `<missionDir>/claude.md` if it exists
55
+ 5. `<assignmentDir>/assignment.md`
56
+ 6. `<assignmentDir>/plan.md`
57
+ 7. `<assignmentDir>/handoff.md`
58
+
59
+ ## Lifecycle Commands
60
+
61
+ Use the `syntaur` CLI for state transitions:
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>`
70
+
71
+ ## Conventions
72
+
73
+ - Assignment frontmatter is the single source of truth.
74
+ - Slugs are lowercase and hyphen-separated.
75
+ - Update acceptance criteria checkboxes as work lands, not only at the end.
76
+ - Keep the `## Progress` section in `assignment.md` current after meaningful milestones.
77
+ - Write handoffs with enough context for another agent or human to continue cleanly.
78
+
79
+ ## References
80
+
81
+ Read these only when you need the detailed rules or directory layout:
82
+
83
+ - `../../references/protocol-summary.md`
84
+ - `../../references/file-ownership.md`
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: track-session
3
+ description: Use when the user wants to register, refresh, remove, or list tracked tmux sessions for the Syntaur dashboard.
4
+ ---
5
+
6
+ # Track Session
7
+
8
+ Track tmux sessions so their development servers show up in the Syntaur dashboard.
9
+
10
+ ## Arguments
11
+
12
+ User arguments: `$ARGUMENTS`
13
+
14
+ Supported forms:
15
+
16
+ - `<session-name>`
17
+ - `--refresh [session-name]`
18
+ - `--remove <session-name>`
19
+ - `--list`
20
+
21
+ ## Workflow
22
+
23
+ ### Register
24
+
25
+ 1. Verify the tmux session exists with `tmux has-session -t <name>`.
26
+ 2. If it does not exist, list available sessions with `tmux list-sessions -F '#{session_name}'`.
27
+ 3. Create `~/.syntaur/servers/<sanitized-name>.md` with frontmatter:
28
+
29
+ ```yaml
30
+ ---
31
+ session: <original-name>
32
+ registered: <ISO timestamp>
33
+ last_refreshed: <ISO timestamp>
34
+ ---
35
+ ```
36
+
37
+ 4. Tell the user the session is now tracked.
38
+
39
+ ### Refresh
40
+
41
+ 1. Update `last_refreshed` for the named session, or for every file in `~/.syntaur/servers/` when no name was provided.
42
+
43
+ ### Remove
44
+
45
+ 1. Delete `~/.syntaur/servers/<sanitized-name>.md`.
46
+
47
+ ### List
48
+
49
+ 1. List all tracked session markdown files and show the `session` field from each.