syntaur 0.8.0 → 0.12.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 (126) hide show
  1. package/.claude-plugin/plugin.json +9 -1
  2. package/dashboard/dist/assets/{_basePickBy-CIZortGD.js → _basePickBy-XOV2F7dX.js} +1 -1
  3. package/dashboard/dist/assets/{_baseUniq-BHP5NBQ7.js → _baseUniq-Dccfk3fK.js} +1 -1
  4. package/dashboard/dist/assets/{arc-BLtQy7Cl.js → arc-TwJ5RF-H.js} +1 -1
  5. package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-0mhIBjWy.js → architectureDiagram-2XIMDMQ5-CpkVJudw.js} +1 -1
  6. package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-CM7K5Tf5.js → blockDiagram-WCTKOSBZ-Ck6VQ4Fh.js} +1 -1
  7. package/dashboard/dist/assets/{c4Diagram-IC4MRINW-gsbeygvS.js → c4Diagram-IC4MRINW-B5V7YG03.js} +1 -1
  8. package/dashboard/dist/assets/channel-AEMTX70R.js +1 -0
  9. package/dashboard/dist/assets/{chunk-4BX2VUAB-CneRz9Nd.js → chunk-4BX2VUAB-rBdyOxAe.js} +1 -1
  10. package/dashboard/dist/assets/{chunk-55IACEB6-uetANWHd.js → chunk-55IACEB6-DKlNXjYt.js} +1 -1
  11. package/dashboard/dist/assets/{chunk-FMBD7UC4-3-tNszoF.js → chunk-FMBD7UC4-Cqm0PtUI.js} +1 -1
  12. package/dashboard/dist/assets/{chunk-JSJVCQXG-DOO88rZD.js → chunk-JSJVCQXG-CQyXQcG3.js} +1 -1
  13. package/dashboard/dist/assets/{chunk-KX2RTZJC-Bnc1CFy2.js → chunk-KX2RTZJC-DmqjHPpJ.js} +1 -1
  14. package/dashboard/dist/assets/{chunk-NQ4KR5QH-BfViC1Ms.js → chunk-NQ4KR5QH-CHXoBcYa.js} +1 -1
  15. package/dashboard/dist/assets/{chunk-QZHKN3VN-CgjyAt2l.js → chunk-QZHKN3VN-Dd4sChBS.js} +1 -1
  16. package/dashboard/dist/assets/{chunk-WL4C6EOR-BYFermSR.js → chunk-WL4C6EOR-D-QLnkY8.js} +1 -1
  17. package/dashboard/dist/assets/classDiagram-VBA2DB6C-LzuOAGzu.js +1 -0
  18. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-LzuOAGzu.js +1 -0
  19. package/dashboard/dist/assets/clone-Cw63QGUJ.js +1 -0
  20. package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-CE-k5SLv.js → cose-bilkent-S5V4N54A-VZi6uV56.js} +1 -1
  21. package/dashboard/dist/assets/{dagre-KLK3FWXG-CX7Br8LQ.js → dagre-KLK3FWXG-CtT97Qhx.js} +1 -1
  22. package/dashboard/dist/assets/{diagram-E7M64L7V-t-xhWjCU.js → diagram-E7M64L7V-BjYTNNHb.js} +1 -1
  23. package/dashboard/dist/assets/{diagram-IFDJBPK2-BVhcTXsJ.js → diagram-IFDJBPK2-qj8_r6fb.js} +1 -1
  24. package/dashboard/dist/assets/{diagram-P4PSJMXO-fxt8ZSca.js → diagram-P4PSJMXO-DlfWo7Vt.js} +1 -1
  25. package/dashboard/dist/assets/{erDiagram-INFDFZHY-C20k2bxX.js → erDiagram-INFDFZHY-Ch_nApTv.js} +1 -1
  26. package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-CdeygexM.js → flowDiagram-PKNHOUZH-EOVsqNyi.js} +1 -1
  27. package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-CPsoOAV-.js → ganttDiagram-A5KZAMGK-CS-lx0B-.js} +1 -1
  28. package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-t0tCTIZy.js → gitGraphDiagram-K3NZZRJ6-Ba6RDzPy.js} +1 -1
  29. package/dashboard/dist/assets/{graph-Bcqd31wL.js → graph-BKaAyLk-.js} +1 -1
  30. package/dashboard/dist/assets/index-BTWPZaIA.css +1 -0
  31. package/dashboard/dist/assets/index-Dk9PBm5B.js +510 -0
  32. package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-DgoKvH3N.js → infoDiagram-LFFYTUFH-Cr20xEsd.js} +1 -1
  33. package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-CGr4P8do.js → ishikawaDiagram-PHBUUO56-CuILV9ph.js} +1 -1
  34. package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-CHYRi6wF.js → journeyDiagram-4ABVD52K-CO-l7Mpm.js} +1 -1
  35. package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-kwzqrFcW.js → kanban-definition-K7BYSVSG-CcirPw_S.js} +1 -1
  36. package/dashboard/dist/assets/{layout-wud47qGs.js → layout-BXvr8dMw.js} +1 -1
  37. package/dashboard/dist/assets/{linear-DG5js90X.js → linear-B85hgYnX.js} +1 -1
  38. package/dashboard/dist/assets/{mermaid.core-BDw69uC2.js → mermaid.core-DcZN9Xp2.js} +4 -4
  39. package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-Dw_uyg1-.js → mindmap-definition-YRQLILUH-Bxi6p5_3.js} +1 -1
  40. package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-C7NBi6tK.js → pieDiagram-SKSYHLDU-DOSvU0UD.js} +1 -1
  41. package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-_N_BSBd4.js → quadrantDiagram-337W2JSQ-Cmo-5tW9.js} +1 -1
  42. package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-BqUiqfP1.js → requirementDiagram-Z7DCOOCP-Dw8alwuI.js} +1 -1
  43. package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-C2Qq5ULW.js → sankeyDiagram-WA2Y5GQK-ZPB-rzOg.js} +1 -1
  44. package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BOCF2z8f.js → sequenceDiagram-2WXFIKYE-Ct8bkK2h.js} +1 -1
  45. package/dashboard/dist/assets/{stateDiagram-RAJIS63D-BvDyTxC5.js → stateDiagram-RAJIS63D-DnGOXlmx.js} +1 -1
  46. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-COGzlZxn.js +1 -0
  47. package/dashboard/dist/assets/{timeline-definition-YZTLITO2-DNNZxSrG.js → timeline-definition-YZTLITO2-AUFmbJjr.js} +1 -1
  48. package/dashboard/dist/assets/{treemap-KZPCXAKY-C6hOdiGH.js → treemap-KZPCXAKY-Dw5FDFAV.js} +1 -1
  49. package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-FmXl6puP.js → vennDiagram-LZ73GAT5-DfxicU4N.js} +1 -1
  50. package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-Bjav12WG.js → xychartDiagram-JWTSCODW--9N0V1r_.js} +1 -1
  51. package/dashboard/dist/index.html +2 -2
  52. package/dashboard/dist/syntaur-logo.svg +5 -13
  53. package/dist/dashboard/server.js +363 -3
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/index.js +2140 -153
  56. package/dist/index.js.map +1 -1
  57. package/examples/playbooks/keep-records-updated.md +2 -1
  58. package/package.json +1 -1
  59. package/platforms/claude-code/.claude-plugin/plugin.json +9 -1
  60. package/platforms/claude-code/agents/syntaur-expert.md +1 -1
  61. package/platforms/claude-code/commands/add-memory/add-memory.md +18 -0
  62. package/platforms/claude-code/commands/add-resource/add-resource.md +16 -0
  63. package/platforms/claude-code/commands/list-assignments/list-assignments.md +16 -0
  64. package/platforms/claude-code/commands/log-progress/log-progress.md +16 -0
  65. package/platforms/claude-code/commands/replan/replan.md +16 -0
  66. package/platforms/claude-code/commands/resume-session/resume-session.md +16 -0
  67. package/platforms/claude-code/commands/set-workspace/set-workspace.md +16 -0
  68. package/platforms/claude-code/commands/syntaur-worktree/syntaur-worktree.md +16 -0
  69. package/platforms/claude-code/references/protocol-summary.md +8 -0
  70. package/platforms/claude-code/skills/add-memory/SKILL.md +96 -0
  71. package/platforms/claude-code/skills/add-resource/SKILL.md +85 -0
  72. package/platforms/claude-code/skills/capture-artifacts/SKILL.md +84 -0
  73. package/platforms/claude-code/skills/complete-assignment/SKILL.md +2 -1
  74. package/platforms/claude-code/skills/list-assignments/SKILL.md +73 -0
  75. package/platforms/claude-code/skills/log-progress/SKILL.md +128 -0
  76. package/platforms/claude-code/skills/plan-assignment/SKILL.md +29 -8
  77. package/platforms/claude-code/skills/replan/SKILL.md +113 -0
  78. package/platforms/claude-code/skills/resume-session/SKILL.md +83 -0
  79. package/platforms/claude-code/skills/set-workspace/SKILL.md +109 -0
  80. package/platforms/claude-code/skills/syntaur-protocol/SKILL.md +4 -0
  81. package/platforms/claude-code/skills/syntaur-protocol/references/protocol-summary.md +8 -0
  82. package/platforms/claude-code/skills/syntaur-worktree/SKILL.md +117 -0
  83. package/platforms/codex/README.md +2 -2
  84. package/platforms/codex/agents/syntaur-operator.md +7 -0
  85. package/platforms/codex/commands/add-memory.md +16 -0
  86. package/platforms/codex/commands/add-resource.md +14 -0
  87. package/platforms/codex/commands/list-assignments.md +13 -0
  88. package/platforms/codex/commands/log-progress.md +14 -0
  89. package/platforms/codex/commands/replan.md +15 -0
  90. package/platforms/codex/commands/resume-session.md +15 -0
  91. package/platforms/codex/commands/set-workspace.md +15 -0
  92. package/platforms/codex/commands/syntaur-worktree.md +15 -0
  93. package/platforms/codex/references/protocol-summary.md +8 -0
  94. package/platforms/codex/skills/add-memory/SKILL.md +96 -0
  95. package/platforms/codex/skills/add-resource/SKILL.md +85 -0
  96. package/platforms/codex/skills/capture-artifacts/SKILL.md +84 -0
  97. package/platforms/codex/skills/complete-assignment/SKILL.md +2 -1
  98. package/platforms/codex/skills/list-assignments/SKILL.md +73 -0
  99. package/platforms/codex/skills/log-progress/SKILL.md +128 -0
  100. package/platforms/codex/skills/plan-assignment/SKILL.md +29 -8
  101. package/platforms/codex/skills/replan/SKILL.md +113 -0
  102. package/platforms/codex/skills/resume-session/SKILL.md +83 -0
  103. package/platforms/codex/skills/set-workspace/SKILL.md +109 -0
  104. package/platforms/codex/skills/syntaur-protocol/SKILL.md +4 -0
  105. package/platforms/codex/skills/syntaur-protocol/references/protocol-summary.md +8 -0
  106. package/platforms/codex/skills/syntaur-worktree/SKILL.md +117 -0
  107. package/skills/add-memory/SKILL.md +96 -0
  108. package/skills/add-resource/SKILL.md +85 -0
  109. package/skills/capture-artifacts/SKILL.md +84 -0
  110. package/skills/complete-assignment/SKILL.md +2 -1
  111. package/skills/list-assignments/SKILL.md +73 -0
  112. package/skills/log-progress/SKILL.md +128 -0
  113. package/skills/plan-assignment/SKILL.md +29 -8
  114. package/skills/replan/SKILL.md +113 -0
  115. package/skills/resume-session/SKILL.md +83 -0
  116. package/skills/set-workspace/SKILL.md +109 -0
  117. package/skills/syntaur-protocol/SKILL.md +4 -0
  118. package/skills/syntaur-protocol/references/protocol-summary.md +8 -0
  119. package/skills/syntaur-worktree/SKILL.md +117 -0
  120. package/dashboard/dist/assets/channel-FWLgstBg.js +0 -1
  121. package/dashboard/dist/assets/classDiagram-VBA2DB6C-BAvQTSn_.js +0 -1
  122. package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-BAvQTSn_.js +0 -1
  123. package/dashboard/dist/assets/clone-rSEllQ1P.js +0 -1
  124. package/dashboard/dist/assets/index-bLWoSCLL.css +0 -1
  125. package/dashboard/dist/assets/index-eS0wtDO0.js +0 -500
  126. package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-TaLLhLWD.js +0 -1
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Capture a project-level Syntaur memory under <projectDir>/memories/ via the CLI
3
+ ---
4
+
5
+ # /add-memory
6
+
7
+ Add a project-scoped memory entry. Writes `<projectDir>/memories/<slug>.md` and regenerates `_index.md` server-side via `syntaur memory add` — the agent never touches `_index.md` directly per the file-ownership protocol.
8
+
9
+ Follow the `add-memory` skill in full. Summary:
10
+
11
+ 1. Resolve project from `.syntaur/context.json` or ask.
12
+ 2. Gather `--name --source [--scope --source-assignment --related-assignments --slug]`.
13
+ 3. Run `syntaur memory add ...`.
14
+ 4. Optionally edit the body of the new file to flesh out content.
15
+
16
+ Distinct from the user-global Claude Code auto-memory at `~/.claude/projects/<...>/memory/`.
@@ -0,0 +1,14 @@
1
+ ---
2
+ description: Register a project-level resource (link to dashboard, doc, ticket) under a Syntaur project
3
+ ---
4
+
5
+ # /add-resource
6
+
7
+ Add a resource entry under `<projectDir>/resources/<slug>.md` and regenerate `_index.md` via the CLI. The agent never edits `_index.md` directly.
8
+
9
+ Follow the `add-resource` skill in full. Summary:
10
+
11
+ 1. Resolve project from `.syntaur/context.json` or ask.
12
+ 2. Gather `--name --source [--category --related-assignments --slug]`.
13
+ 3. Run `syntaur resource add ...`.
14
+ 4. Verify the slug file and refreshed index.
@@ -0,0 +1,13 @@
1
+ ---
2
+ description: List Syntaur assignments across projects with filters (status, project, tag, age)
3
+ ---
4
+
5
+ # /list-assignments
6
+
7
+ Cross-project assignment listing via `syntaur ls`. Supports `--status`, `--project`, `--tag`, `--age`, `--json`. Different from the interactive `syntaur browse` TUI — emits scriptable output.
8
+
9
+ Follow the `list-assignments` skill in full. Summary:
10
+
11
+ 1. Map user prose to `syntaur ls` flags (e.g. "pending" → `--status pending`, "this week" → `--age 7d`, "tagged X and Y" → `--tag X,Y`).
12
+ 2. Run the CLI.
13
+ 3. Present the table or pass the `--json` payload downstream.
@@ -0,0 +1,14 @@
1
+ ---
2
+ description: Append a timestamped entry to the active assignment's progress.md and bump frontmatter
3
+ ---
4
+
5
+ # /log-progress
6
+
7
+ Append a structured timestamped entry to `<assignmentDir>/progress.md` and bump its `entryCount` and `updated` frontmatter fields. Implements the Keep Records Updated playbook.
8
+
9
+ Follow the `log-progress` skill in full. Summary:
10
+
11
+ 1. Read `.syntaur/context.json`. Abort if no active assignment.
12
+ 2. Compose a concise entry with action verbs, file paths, commit refs, and verification commands.
13
+ 3. Read the existing `progress.md`, increment `entryCount`, set `updated = now`, append the new entry under the existing body.
14
+ 4. Re-read to confirm schema-valid frontmatter; restore on schema failure.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Bump the active assignment to a new plan version (plan-vN.md) per the Plan Versioning playbook
3
+ ---
4
+
5
+ # /replan
6
+
7
+ Create a new versioned plan (`plan-v<N>.md`) for the active Syntaur assignment after the prior plan has been implemented or scope has shifted significantly.
8
+
9
+ Follow the `replan` skill in full. Summary:
10
+
11
+ 1. Read `.syntaur/context.json`. Abort if no active assignment.
12
+ 2. If the prior plan still has unchecked tasks, confirm with the user before proceeding.
13
+ 3. Run `syntaur plan version --assignment <slug> [--project <slug>]`. The CLI handles file naming, supersede-rewrite of `assignment.md` `## Todos`, and carrying forward unchecked todos.
14
+ 4. Fill in the new plan body (Objective, Tasks, Verification).
15
+ 5. Append a progress.md entry.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Re-orient a fresh session on the active Syntaur assignment without re-reading the full transcript
3
+ ---
4
+
5
+ # /resume-session
6
+
7
+ Print a compact orientation block from the latest saved session summary, `.syntaur/context.json`, and any open handoff. Idempotent — does not mutate state.
8
+
9
+ Follow the `resume-session` skill in full. Summary:
10
+
11
+ 1. Run `syntaur session resume`. Surface its output.
12
+ 2. Read the latest `<assignmentDir>/sessions/<sid>/summary.md` if reported.
13
+ 3. Read `<assignmentDir>/handoff.md` if present and non-placeholder (canonical single-file handoff).
14
+ 4. Read `assignment.md` and the tail of `progress.md`.
15
+ 5. Report active project / assignment / branch / next concrete action.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Populate the four workspace.* fields in the active assignment.md per the Workspace Before Code playbook
3
+ ---
4
+
5
+ # /set-workspace
6
+
7
+ Write `repository`, `worktreePath`, `branch`, `parentBranch` into the assignment.md frontmatter. Validates the file via `syntaur doctor --assignment <path> --json` before writing — refuses to touch a malformed file.
8
+
9
+ Follow the `set-workspace` skill in full. Summary:
10
+
11
+ 1. Read `.syntaur/context.json` to find `assignmentDir`.
12
+ 2. Run `syntaur doctor --assignment <path> --json`. Refuse on `ok: false`.
13
+ 3. Auto-detect defaults from `git rev-parse` when not supplied; ask user for missing fields.
14
+ 4. Replace the four `workspace:` block lines and bump the top-level `updated` timestamp.
15
+ 5. Re-validate via `doctor --assignment`. Restore on post-write failure.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Create a repo-local worktree for the active Syntaur assignment and bind the session to it
3
+ ---
4
+
5
+ # /syntaur-worktree
6
+
7
+ Atomic worktree-and-grab. Composes `syntaur worktree create` + `syntaur assign` + `syntaur start` + writing `.syntaur/context.json` in the new workspace. Worktree path is always `<repository>/.worktrees/<branch>`.
8
+
9
+ Follow the `syntaur-worktree` skill in full. Summary:
10
+
11
+ 1. Resolve `--project --assignment --branch [--repository --parent-branch]`.
12
+ 2. Run `syntaur worktree create ...` (atomic: rolls back on assignment.md write failure).
13
+ 3. Run `syntaur assign <assignment> --agent <name>` then `syntaur start <assignment>` (only when status was pending).
14
+ 4. `cd` into the new worktree path, write `.syntaur/context.json`.
15
+ 5. Run `syntaur track-session` to register with the dashboard.
@@ -88,3 +88,11 @@ Protocol version: **2.0**
88
88
  10. Comments are appended to `comments.md` via `syntaur comment <slug> "body" [--type question|note|feedback] [--reply-to <id>]`. Never edit `comments.md` directly.
89
89
  11. Cross-assignment work is requested via `syntaur request <source> <target> "text"` — appends to the target's `## Todos` annotated `(from: <source>)`.
90
90
  12. Session continuity (mid-assignment) lives at `sessions/<session-id>/summary.md` inside the assignment dir — one document per session id, overwritten on every save (via `/save-session-summary`). On resume, pick the latest by `summary.md` file mtime. Older summaries accumulate as immutable history; never delete them. Distinct from `handoff.md`, which is the assignment-level cross-ticket outbound at completion. `syntaur doctor` intentionally ignores `sessions/`. **Codex has no `PreCompact` hook event** — invoke `/save-session-summary` manually before compaction or session end.
91
+
92
+ ## Proof artifacts (opt-in)
93
+
94
+ Agents can attach typed evidence to an assignment so a human reviewer can verify the work in seconds without re-running it.
95
+
96
+ - `syntaur capture --kind <screenshot|video|asciinema|http|text> [--file <path>] [--criterion <index>] [--note <text>] [target]` — record an artifact for the active assignment. Criterion linkage is optional (0-based index into the `## Acceptance Criteria` checklist). For `--kind=text`, supply `--note` and omit `--file`.
97
+ - `syntaur proof build [target]` — render `proof.html` and `proof.md` at the assignment dir, walking the `## Acceptance Criteria` list and embedding tagged artifacts inline beneath each criterion. Untagged or stale (out-of-range) captures land in a final "Other artifacts" section. Atomic overwrite — safe to re-run.
98
+ - Artifacts are stored under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>`. The DB row lives in `~/.syntaur/syntaur.db` alongside session tracking. No completion gate — proof is purely opt-in for v1.
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: add-memory
3
+ description: >-
4
+ Capture a project-level Syntaur memory (durable context like a convention,
5
+ decision rationale, or constraint) under a project's `memories/` directory.
6
+ Use when the user wants to "save this to memory", "remember for the project",
7
+ "capture this decision", "add a project memory", or pin reusable context that
8
+ should outlive any single assignment. Writes via the CLI so the
9
+ CLI-managed `_index.md` is never touched directly.
10
+ license: MIT
11
+ metadata:
12
+ author: prong-horn
13
+ version: "1.0.0"
14
+ ---
15
+
16
+ # Add Memory
17
+
18
+ Add a memory entry to a Syntaur project. Writes
19
+ `<projectDir>/memories/<slug>.md` and regenerates `_index.md` server-side via
20
+ `syntaur memory add` — the agent never edits `_index.md` directly per the
21
+ file-ownership protocol.
22
+
23
+ ## When NOT to use this skill
24
+
25
+ - The information is a **pointer to an external system** (URL, dashboard,
26
+ ticket) — use `add-resource` instead.
27
+ - The information is the user-global Claude Code memory at
28
+ `~/.claude/projects/<...>/memory/MEMORY.md` — that's a different system
29
+ managed by the auto-memory feature, NOT Syntaur project memories.
30
+ - The information is single-assignment scratch — put it in the assignment's
31
+ `scratchpad.md`.
32
+
33
+ ## Step 1: Resolve project
34
+
35
+ If `.syntaur/context.json` is present and has `projectSlug`, default to that.
36
+ Otherwise ask the user which project to add the memory to.
37
+
38
+ ## Step 2: Gather inputs
39
+
40
+ Required:
41
+
42
+ - `--name <human readable>` — display name for the memory.
43
+ - `--source <text>` — where this memory came from (e.g. "conversation
44
+ 2026-05-08", a decision-record reference, a doc URL).
45
+
46
+ Optional:
47
+
48
+ - `--scope <scope>` — defaults to `project`. Common values: `project`,
49
+ `architecture`, `policy`.
50
+ - `--source-assignment <slug>` — assignment slug this memory was captured
51
+ during (helps trace the origin).
52
+ - `--related-assignments <slug,slug,...>` — comma-separated assignment slugs
53
+ this memory is relevant to.
54
+ - `--slug <slug>` — override the auto-generated kebab-case slug.
55
+
56
+ ## Step 3: Run `syntaur memory add`
57
+
58
+ ```bash
59
+ syntaur memory add \
60
+ --project <project-slug> \
61
+ --name "<name>" \
62
+ --source "<text>" \
63
+ [--scope <scope>] \
64
+ [--source-assignment <slug>] \
65
+ [--related-assignments <slug,slug>] \
66
+ [--slug <slug>] \
67
+ [--force]
68
+ ```
69
+
70
+ The CLI:
71
+
72
+ 1. Validates the project exists.
73
+ 2. Writes `<projectDir>/memories/<slug>.md` with the canonical frontmatter
74
+ (`name`, `source`, `scope`, `sourceAssignment`, `relatedAssignments`,
75
+ `created`, `updated`).
76
+ 3. Regenerates `<projectDir>/memories/_index.md` from the directory contents.
77
+ 4. Refuses to overwrite an existing memory without `--force`.
78
+
79
+ **Do not write to `_index.md` directly under any circumstances** — that file
80
+ is owned by the CLI per the file-ownership protocol.
81
+
82
+ ## Step 4: Open the new memory file (optional)
83
+
84
+ If the user wants to flesh out the body content beyond the placeholder, open
85
+ `<projectDir>/memories/<slug>.md` and edit the body. The frontmatter is
86
+ already correct; only edit content below the second `---`.
87
+
88
+ ## Step 5: Report to User
89
+
90
+ Summarize:
91
+
92
+ - Memory slug and absolute path.
93
+ - Project that received the memory.
94
+ - Index regenerated (with the new total).
95
+ - Suggested next step: edit the body to capture load-bearing context, or
96
+ open the dashboard to see the new entry.
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: add-resource
3
+ description: >-
4
+ Register a project-level resource (link to a dashboard, doc, ticket, or
5
+ external system) under a Syntaur project. Use when the user wants to "add a
6
+ resource", "save this link to the project", "track this dashboard", "add a
7
+ reference doc", or otherwise capture a pointer to an external system the
8
+ project depends on.
9
+ license: MIT
10
+ metadata:
11
+ author: prong-horn
12
+ version: "1.0.0"
13
+ ---
14
+
15
+ # Add Resource
16
+
17
+ Add a resource entry to a Syntaur project. Writes
18
+ `<projectDir>/resources/<slug>.md` and regenerates `<projectDir>/resources/_index.md`
19
+ via the CLI — the agent never edits `_index.md` directly (it is a
20
+ CLI-managed file per the file-ownership protocol).
21
+
22
+ ## When NOT to use this skill
23
+
24
+ - The information is **session-scoped knowledge**, not a pointer to an
25
+ external system — use `add-memory` instead.
26
+ - The link is specific to a single assignment (assignment-level scratch) —
27
+ put it in that assignment's `scratchpad.md`.
28
+ - The resource already exists. Read `<projectDir>/resources/_index.md` first
29
+ to check; pass `--force` only if you intend to overwrite.
30
+
31
+ ## Step 1: Resolve project
32
+
33
+ If `.syntaur/context.json` is present and has `projectSlug`, default to that.
34
+ Otherwise ask the user which project to add the resource to.
35
+
36
+ ## Step 2: Gather inputs
37
+
38
+ Required:
39
+
40
+ - `--name <human readable>` — display name for the resource.
41
+ - `--source <url-or-path>` — the link or path to the resource itself.
42
+
43
+ Optional:
44
+
45
+ - `--category <name>` — short category tag (e.g. `dashboard`, `doc`,
46
+ `ticket`, `runbook`, `repo`).
47
+ - `--related-assignments <slug,slug,...>` — comma-separated assignment slugs
48
+ this resource is relevant to.
49
+ - `--slug <slug>` — override the auto-generated kebab-case slug.
50
+
51
+ ## Step 3: Run `syntaur resource add`
52
+
53
+ ```bash
54
+ syntaur resource add \
55
+ --project <project-slug> \
56
+ --name "<name>" \
57
+ --source <url-or-path> \
58
+ [--category <name>] \
59
+ [--related-assignments <slug,slug>] \
60
+ [--slug <slug>] \
61
+ [--force]
62
+ ```
63
+
64
+ The CLI:
65
+
66
+ 1. Validates the project exists.
67
+ 2. Writes `<projectDir>/resources/<slug>.md` with the canonical frontmatter
68
+ (`name`, `category`, `source`, `relatedAssignments`, `created`,
69
+ `updated`).
70
+ 3. Regenerates `<projectDir>/resources/_index.md` from the directory contents.
71
+ 4. Refuses to overwrite an existing resource without `--force`.
72
+
73
+ ## Step 4: Verify
74
+
75
+ The CLI prints the slug file path and the new index size. Read both back if
76
+ the user asked for confirmation.
77
+
78
+ ## Step 5: Report to User
79
+
80
+ Summarize:
81
+
82
+ - Resource slug and absolute path.
83
+ - Project that received the resource.
84
+ - Index regenerated (with the new total).
85
+ - Suggested next step: open the dashboard or `_index.md` to see the new entry.
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: capture-artifacts
3
+ description: >-
4
+ Capture typed proof artifacts (screenshot, video, asciinema, http transcript,
5
+ text note) for the active Syntaur assignment so a human reviewer can verify
6
+ the work in seconds without re-running it. Use after a meaningful change is
7
+ verified, especially when an acceptance criterion is now demonstrably met.
8
+ license: MIT
9
+ metadata:
10
+ author: prong-horn
11
+ version: "0.1.0"
12
+ ---
13
+
14
+ # Capture Artifacts
15
+
16
+ Attach proof to your work. Reviewers should be able to scroll a single page (`proof.html`) and judge "yep that's what I wanted" or "nope that's not right" — without re-executing anything.
17
+
18
+ ## Input
19
+
20
+ No arguments. Reads `.syntaur/context.json` from the current working directory to identify the active assignment.
21
+
22
+ ## Step 1: Decide whether to capture
23
+
24
+ Capture an artifact when **any** of these is true:
25
+ - An acceptance criterion is now demonstrably met (most common trigger).
26
+ - A user-facing behavior changed in a way a screenshot, video, transcript, or short text note can show.
27
+ - A bug fix produces a before/after worth showing (capture the after; the diff is the before).
28
+
29
+ Skip when:
30
+ - The change is purely internal (refactor, type tightening) with no observable effect.
31
+ - The change is already covered by a passing automated test that the reviewer can run trivially.
32
+
33
+ Linkage to a specific criterion is **optional**. Untagged artifacts are fine — they land in a "Other artifacts" section on the proof page.
34
+
35
+ ## Step 2: Pick the kind by work type
36
+
37
+ | Work type | Preferred kind | Notes |
38
+ |-----------|---------------|-------|
39
+ | Web UI change | `screenshot` (single state) or `video` (interaction) | Use the smallest medium that conveys the proof. Screenshots beat videos when one frame suffices. |
40
+ | CLI command output | `asciinema` (preferred) or `text` | Asciinema records the actual session; text is fine when output is short and static. |
41
+ | Backend API change | `http` (request/response transcript) | Capture the curl invocation + response body. |
42
+ | Migration / schema / config | `text` with a `--note` describing the before/after | Or `http` for an API verification call. |
43
+ | Anything ambiguous | `text` with `--note` | Always available. Written notes are better than skipped captures. |
44
+
45
+ ## Step 3: Run `syntaur capture`
46
+
47
+ ```bash
48
+ # File-based (screenshot, video, asciinema, http transcript)
49
+ syntaur capture --kind <type> --file <path> [--criterion <index>] [--note <text>] \
50
+ [--project <slug> <assignment-slug>]
51
+
52
+ # Text-only (no --file)
53
+ syntaur capture --kind text --note "<what you verified>" [--criterion <index>] \
54
+ [--project <slug> <assignment-slug>]
55
+ ```
56
+
57
+ Rules:
58
+ - `--kind=text` requires `--note` and forbids `--file`.
59
+ - `--kind=http` accepts either `--file` (a transcript) or `--note` (an inline summary). At least one is required.
60
+ - All other kinds (`screenshot`, `video`, `asciinema`) require `--file`. The CLI rejects nonexistent / non-file paths.
61
+ - `--criterion <index>` is optional — pass the **0-based** index into the `## Acceptance Criteria` checklist when you want to anchor the artifact to a specific criterion.
62
+ - If you have a `.syntaur/context.json` in the cwd, the positional target argument is unnecessary; otherwise pass `--project <slug> <assignment-slug>` or a bare assignment UUID.
63
+
64
+ The CLI copies the file (if any) under `<assignmentDir>/proof/<criterion|untagged>/<id>.<ext>` and inserts a row in `~/.syntaur/syntaur.db`. Output prints the artifact id and absolute path.
65
+
66
+ ## Step 4: Optional — refresh the proof page
67
+
68
+ ```bash
69
+ syntaur proof build [--project <slug> <assignment-slug>]
70
+ ```
71
+
72
+ This walks `## Acceptance Criteria` and renders `proof.html` + `proof.md` at the assignment dir, embedding tagged artifacts inline beneath their criteria and untagged/stale ones in a final "Other artifacts" section. Atomic overwrite — safe to re-run after every capture, or once at completion. The rendered page works in any browser; no desktop-app dependency.
73
+
74
+ The `complete-assignment` skill mentions the proof page path in its final report so the reviewer can open it.
75
+
76
+ ## Step 5: Record the capture (per `keep-records-updated` playbook)
77
+
78
+ The `keep-records-updated` playbook recommends running `syntaur capture` whenever the change is visually or behaviorally observable. Append a brief mention to `progress.md` if it adds context (e.g. "captured login-flow video against criterion 2"). Skipping a capture is fine — proof is opt-in for v1; there is no completion gate.
79
+
80
+ ## Notes
81
+
82
+ - Artifacts are local-only in v1. Cloud upload is not available.
83
+ - Stale `criterion_index` (e.g. when a criterion is later deleted or reordered) renders under "Other artifacts" with a "(was tagged criterion N — no longer present)" annotation. The artifact is not lost.
84
+ - Storage stays out of git by default — `~/.syntaur/` is outside any tracked tree.
@@ -6,7 +6,7 @@ description: >-
6
6
  license: MIT
7
7
  metadata:
8
8
  author: prong-horn
9
- version: "1.1.0"
9
+ version: "1.2.0"
10
10
  ---
11
11
 
12
12
  # Complete Assignment
@@ -143,4 +143,5 @@ Summarize:
143
143
  - Assignment slug and title
144
144
  - New status (review or completed)
145
145
  - Number of acceptance criteria met vs total
146
+ - If `<assignmentDir>/proof.html` exists, include its absolute path so the reviewer can open it directly in a browser. Mention briefly which criteria have artifacts attached. (Proof is opt-in — its absence is not a blocker.)
146
147
  - If transitioned to `review`, a human reviewer will check the work. If any criteria were unmet, they may send it back to `in_progress`.
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: list-assignments
3
+ description: >-
4
+ List Syntaur assignments across all projects with filters by status,
5
+ project, tag, and age. Use when the user wants to "see all assignments",
6
+ "list pending work", "show in_progress assignments", "what's open",
7
+ "find assignments tagged X", or otherwise query the cross-project board
8
+ non-interactively. Different from the interactive `browse` TUI — emits
9
+ scriptable output (table or JSON).
10
+ license: MIT
11
+ metadata:
12
+ author: prong-horn
13
+ version: "1.0.0"
14
+ ---
15
+
16
+ # List Assignments
17
+
18
+ Cross-project assignment listing using `syntaur ls`. Supports filters by
19
+ status, project, tag, and age. Emits a compact aligned table by default;
20
+ `--json` produces machine-readable output suitable for piping into other
21
+ tools.
22
+
23
+ ## When NOT to use this skill
24
+
25
+ - The user wants to interactively browse and act on assignments — use
26
+ `syntaur browse` (the Ink TUI) instead.
27
+ - The user wants details for a single assignment they already know — open
28
+ its `assignment.md` directly.
29
+ - The user wants project-level rollups (totals, blocked counts) — that's the
30
+ dashboard, not `ls`.
31
+
32
+ ## Step 1: Map user prose to filters
33
+
34
+ Common requests → flags:
35
+
36
+ - "pending assignments" → `--status pending`
37
+ - "in-progress" / "active" → `--status in_progress`
38
+ - "stuff blocked" → `--status blocked`
39
+ - "everything in <project>" → `--project <slug>`
40
+ - "tagged with X" / "labeled X" → `--tag X`
41
+ - "must have all of X and Y" → `--tag X,Y` (AND semantics)
42
+ - "from this week" → `--age 7d`
43
+ - "last 24 hours" → `--age 24h`
44
+ - "this month" → `--age 30d` (or `1m`)
45
+ - "as JSON" / "for piping" → `--json`
46
+
47
+ Multiple filters compose (intersected).
48
+
49
+ ## Step 2: Run `syntaur ls`
50
+
51
+ ```bash
52
+ syntaur ls [--status <list>] [--project <slug>] [--tag <list>] [--age <duration>] [--json]
53
+ ```
54
+
55
+ Supported `--age` units: `h` (hours), `d` (days), `w` (weeks), `m` (~30 days).
56
+
57
+ ## Step 3: Present results
58
+
59
+ Default output is a table with columns: PROJECT, SLUG, STATUS, PRIORITY,
60
+ ASSIGNEE, UPDATED, TITLE. If the user asked for a count or a follow-up
61
+ action ("which one is highest priority?"), parse the table or re-run with
62
+ `--json` and pick programmatically.
63
+
64
+ ## Step 4: Report to User
65
+
66
+ If interactive:
67
+
68
+ - Summarize the count and any obvious patterns (e.g. "5 pending in
69
+ syntaur-meta, 3 blocked across other projects").
70
+ - Suggest a next action when applicable (e.g. "want to grab the top-priority
71
+ pending one?").
72
+
73
+ If scripted (`--json`), pass the parsed JSON downstream without re-rendering.
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: log-progress
3
+ description: >-
4
+ Append a timestamped entry to the active assignment's `progress.md`,
5
+ bumping `entryCount` and `updated` in its frontmatter. Use after every
6
+ meaningful action — completing an acceptance criterion, finishing a plan
7
+ task, hitting a blocker, deciding on an approach — per the Keep Records
8
+ Updated playbook. Triggers on "log progress", "note progress", "record
9
+ this in progress", or whenever the playbook says to update records.
10
+ license: MIT
11
+ metadata:
12
+ author: prong-horn
13
+ version: "1.0.0"
14
+ ---
15
+
16
+ # Log Progress
17
+
18
+ Append a structured timestamped entry to the active assignment's
19
+ `<assignmentDir>/progress.md`, and update its frontmatter. Markdown-only —
20
+ no CLI verb. Idempotent in the sense that re-running with the same body
21
+ produces a duplicate entry, which is intentional (timestamps differ).
22
+
23
+ This skill implements the **Keep Records Updated** playbook: agents must keep
24
+ records current in real-time, especially after every meaningful action.
25
+
26
+ ## When NOT to use this skill
27
+
28
+ - The action belongs in `decision-record.md` (architecturally significant
29
+ decisions with rationale) — write to that file, not progress.md.
30
+ - The information is for the next session of the SAME assignment — that's
31
+ `/save-session-summary`.
32
+ - The information is a question for the user — write to `comments.md` via
33
+ `syntaur comment` (CLI-mediated).
34
+ - The information is a follow-up assignment idea — open a new assignment
35
+ via `/create-assignment`.
36
+
37
+ ## Step 1: Verify there is an active assignment
38
+
39
+ Read `.syntaur/context.json` from the current working directory. Extract
40
+ `assignmentDir`. If missing, abort with: "No active assignment. Run
41
+ `grab-assignment` first."
42
+
43
+ ## Step 2: Compose the entry
44
+
45
+ The entry should be concise, factual, and link-rich. Suggested structure:
46
+
47
+ ```markdown
48
+ ## <ISO 8601 UTC timestamp> — <one-line summary>
49
+
50
+ - What changed (action verbs).
51
+ - Files touched: `path/to/file.ts:line`, `another.ts`.
52
+ - Commits: `<short-sha>` (one per logical change).
53
+ - Verification: `npm test src/...`, `node dist/index.js x --help`, etc.
54
+
55
+ Optional notes paragraph.
56
+ ```
57
+
58
+ Use ISO 8601 with `Z` suffix (e.g. `2026-05-08T20:13:00Z`). Use absolute
59
+ file paths or repo-relative paths consistently.
60
+
61
+ ## Step 3: Read existing progress.md
62
+
63
+ Read `<assignmentDir>/progress.md`. Extract:
64
+
65
+ - Current `entryCount` from the frontmatter.
66
+ - The full body (everything after the second `---`).
67
+
68
+ If `progress.md` doesn't exist, abort and tell the user to re-grab the
69
+ assignment (the file should always exist for an in-progress assignment).
70
+
71
+ ## Step 4: Compute new frontmatter
72
+
73
+ - `entryCount`: increment by 1.
74
+ - `updated`: set to current ISO timestamp.
75
+ - Other fields (`assignment`, `generated`): preserve as-is.
76
+
77
+ ## Step 5: Write the file
78
+
79
+ Write back the file with the updated frontmatter and the new entry **prepended**
80
+ to the body (newest first), per the Keep Records Updated playbook and
81
+ `skills/syntaur-protocol/references/protocol-summary.md`. Reverse-chronological
82
+ order: the new `## <ISO 8601 timestamp>` heading sits immediately after the
83
+ `# Progress` H1, with one blank line separating it from any prior entry.
84
+
85
+ Layout:
86
+
87
+ ```markdown
88
+ # Progress
89
+
90
+ ## <new ISO timestamp>
91
+
92
+ <new entry body>
93
+
94
+ ## <prior ISO timestamp>
95
+
96
+ <prior entry body>
97
+
98
+ ## <even-older ISO timestamp>
99
+
100
+ <even-older entry body>
101
+ ```
102
+
103
+ If the existing body is the placeholder text "No progress yet.", replace it
104
+ with the new entry instead of preserving the placeholder.
105
+
106
+ > **Why prepend:** the dashboard and downstream readers expect the most recent
107
+ > entry first. Appending at the end would silently break the convention
108
+ > documented in `~/.syntaur/playbooks/keep-records-updated.md`.
109
+
110
+ ## Step 6: Verify schema
111
+
112
+ Confirm by re-reading the file:
113
+
114
+ - Starts with `---`, then frontmatter, then `---`.
115
+ - `entryCount` is a non-negative integer.
116
+ - `updated` matches the timestamp you wrote.
117
+ - The new entry's `## <timestamp>` heading is present.
118
+
119
+ If the file fails schema check, restore the prior content and report the
120
+ error — do not leave it partially written.
121
+
122
+ ## Step 7: Report to User
123
+
124
+ Summarize:
125
+
126
+ - Path of the modified `progress.md`.
127
+ - New `entryCount`.
128
+ - One-line summary of the entry that was logged.