syntaur 0.6.1 → 0.7.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 +2 -2
- package/dist/dashboard/server.js +10 -1
- package/dist/dashboard/server.js.map +1 -1
- package/dist/index.js +81 -46
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/platforms/claude-code/README.md +3 -3
- package/platforms/claude-code/agents/syntaur-expert.md +12 -4
- package/platforms/claude-code/commands/save-session-summary/save-session-summary.md +24 -0
- package/platforms/claude-code/hooks/hooks.json +10 -0
- package/platforms/claude-code/hooks/session-start.sh +26 -1
- package/platforms/claude-code/references/file-ownership.md +2 -1
- package/platforms/claude-code/references/protocol-summary.md +6 -1
- package/platforms/claude-code/skills/track-session/SKILL.md +86 -0
- package/platforms/codex/README.md +2 -2
- package/platforms/codex/agents/syntaur-operator.md +6 -4
- package/platforms/codex/commands/save-session-summary.md +23 -0
- package/platforms/codex/references/file-ownership.md +2 -1
- package/platforms/codex/references/protocol-summary.md +6 -1
- package/vendor/syntaur-skills/skills/complete-assignment/SKILL.md +2 -0
- package/vendor/syntaur-skills/skills/grab-assignment/SKILL.md +7 -2
- package/vendor/syntaur-skills/skills/plan-assignment/SKILL.md +3 -1
- package/vendor/syntaur-skills/skills/save-session-summary/SKILL.md +113 -0
- package/vendor/syntaur-skills/skills/syntaur-protocol/SKILL.md +23 -4
- package/vendor/syntaur-skills/skills/syntaur-protocol/references/file-ownership.md +2 -1
- package/vendor/syntaur-skills/skills/syntaur-protocol/references/protocol-summary.md +6 -1
package/package.json
CHANGED
|
@@ -4,10 +4,10 @@ Syntaur plugin for Claude Code. Installed automatically during `syntaur setup`.
|
|
|
4
4
|
|
|
5
5
|
## What's included
|
|
6
6
|
|
|
7
|
-
- **Skills:** grab-assignment, plan-assignment, complete-assignment, create-project, create-assignment, syntaur-protocol
|
|
7
|
+
- **Skills:** grab-assignment, plan-assignment, complete-assignment, create-project, create-assignment, syntaur-protocol, save-session-summary
|
|
8
8
|
- **Agents:** syntaur-protocol (background)
|
|
9
|
-
- **Hooks:** write boundary enforcement (PreToolUse)
|
|
10
|
-
- **Commands:** track-session
|
|
9
|
+
- **Hooks:** write boundary enforcement (PreToolUse), session-start, session-end, **PreCompact** (prompts the agent to `/save-session-summary` before context is compacted)
|
|
10
|
+
- **Commands:** track-session, save-session-summary
|
|
11
11
|
- **References:** protocol docs
|
|
12
12
|
|
|
13
13
|
## Manual install
|
|
@@ -59,8 +59,11 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
59
59
|
progress.md # Agent-writable, append-only: timestamped progress log
|
|
60
60
|
comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
|
|
61
61
|
scratchpad.md # Agent-writable: working notes
|
|
62
|
-
handoff.md # Agent-writable: append-only
|
|
62
|
+
handoff.md # Agent-writable: append-only cross-ticket outbound at completion
|
|
63
63
|
decision-record.md # Agent-writable: append-only decision log
|
|
64
|
+
sessions/
|
|
65
|
+
<session-id>/
|
|
66
|
+
summary.md # Agent-writable: per-session continuity (single doc, overwritten)
|
|
64
67
|
resources/
|
|
65
68
|
_index.md # Derived
|
|
66
69
|
<resource-slug>.md # Shared-writable
|
|
@@ -76,6 +79,7 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
76
79
|
scratchpad.md
|
|
77
80
|
handoff.md
|
|
78
81
|
decision-record.md
|
|
82
|
+
sessions/<session-id>/summary.md # Per-session continuity (same as project-nested)
|
|
79
83
|
```
|
|
80
84
|
|
|
81
85
|
---
|
|
@@ -90,8 +94,9 @@ Syntaur is a **markdown-based, filesystem-hosted protocol** that coordinates wor
|
|
|
90
94
|
- `plan*.md` — versioned implementation plans (optional, one per `## Todos` entry: `plan.md`, `plan-v2.md`, ...)
|
|
91
95
|
- `progress.md` — append-only timestamped progress log (newest first). Replaces the old `## Progress` body section.
|
|
92
96
|
- `scratchpad.md` — unstructured working notes
|
|
93
|
-
- `handoff.md` — append-only
|
|
97
|
+
- `handoff.md` — append-only **assignment-level cross-ticket outbound** at completion (written by `complete-assignment`)
|
|
94
98
|
- `decision-record.md` — append-only decision log
|
|
99
|
+
- `sessions/<session-id>/summary.md` — **per-session continuity** for resume across sessions of the same agent on this assignment (written by `/save-session-summary`). Single document per session id, overwritten on each save. Distinct from `handoff.md`. Older summaries accumulate as immutable history; never delete.
|
|
95
100
|
|
|
96
101
|
Only the assigned agent may write to its own assignment folder.
|
|
97
102
|
|
|
@@ -415,8 +420,11 @@ A: No. Single-writer guarantee — one agent per assignment folder. Use separate
|
|
|
415
420
|
**Q: What if I need to ask the human a question?**
|
|
416
421
|
A: Run `syntaur comment <slug> "question text" --type question`. It appends to `comments.md`, which replaces the old `## Questions & Answers` body section. The question rolls up into `_status.md`'s `openQuestions` counter and shows on the dashboard. Do NOT set status to `blocked` for questions — `blocked` is for runtime obstacles only.
|
|
417
422
|
|
|
418
|
-
**Q: What goes in `progress.md` vs `handoff.md`?**
|
|
419
|
-
A:
|
|
423
|
+
**Q: What goes in `progress.md` vs `handoff.md` vs `sessions/<sid>/summary.md`?**
|
|
424
|
+
A: Three distinct artifacts.
|
|
425
|
+
- `progress.md`: continuous reverse-chron log of what you've done — one entry per meaningful work unit, append-only.
|
|
426
|
+
- `handoff.md`: **assignment-level cross-ticket outbound**, written at completion (via `complete-assignment`) for the next ticket / agent / human reviewer. Append-only.
|
|
427
|
+
- `sessions/<session-id>/summary.md`: **session-scoped mid-assignment continuity**, written via `/save-session-summary` before compaction or session end so a future session of the same agent can resume cleanly. Single doc per session id, overwritten on save. The Claude Code `PreCompact` hook reminds you to invoke this; the SessionStart hook surfaces the latest one as `latestSessionSummaryPath` in `.syntaur/context.json`.
|
|
420
428
|
|
|
421
429
|
**Q: How do I route work to another assignment without breaking the single-writer rule?**
|
|
422
430
|
A: Run `syntaur request <target> "text"` — it appends a todo to the target's `## Todos` annotated `(from: <source>)`. This is a CLI-mediated exception to the single-writer rule.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: save-session-summary
|
|
3
|
+
description: Write a per-session continuity summary so a future session can resume this assignment cleanly
|
|
4
|
+
arguments:
|
|
5
|
+
- name: args
|
|
6
|
+
description: "(none) — the skill reads .syntaur/context.json and the current session"
|
|
7
|
+
required: false
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /save-session-summary
|
|
11
|
+
|
|
12
|
+
Thin wrapper that invokes the `save-session-summary` skill. The skill lives in `~/.claude/skills/save-session-summary/` (installed by `syntaur setup` / `syntaur install-plugin`) and contains the full protocol — writing `<assignmentDir>/sessions/<sessionId>/summary.md` without touching `handoff.md`.
|
|
13
|
+
|
|
14
|
+
This is **mid-assignment session continuity**, not cross-ticket handoff:
|
|
15
|
+
- Use `/save-session-summary` when you're about to compact, when you'll resume in a new session, or when the user asks to "save the session".
|
|
16
|
+
- Use `/complete-assignment` (which writes `handoff.md`) when finishing the assignment for downstream review.
|
|
17
|
+
|
|
18
|
+
## Instructions
|
|
19
|
+
|
|
20
|
+
Invoke the `save-session-summary` skill via the Skill tool, passing the user's arguments. The skill handles everything else.
|
|
21
|
+
|
|
22
|
+
Arguments: $ARGUMENTS
|
|
23
|
+
|
|
24
|
+
If the skill is not installed, tell the user to run `syntaur install-plugin` (or `syntaur setup` if they haven't set up yet).
|
|
@@ -12,6 +12,16 @@
|
|
|
12
12
|
]
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
|
+
"PreCompact": [
|
|
16
|
+
{
|
|
17
|
+
"hooks": [
|
|
18
|
+
{
|
|
19
|
+
"type": "prompt",
|
|
20
|
+
"prompt": "Before compaction, if there is an active Syntaur assignment (check `.syntaur/context.json` for `assignmentDir` and `sessionId`), invoke `/save-session-summary` to write `<assignmentDir>/sessions/<sessionId>/summary.md` so a future session can resume cleanly. Skip silently if no active Syntaur context. Do NOT write to `handoff.md` — that is reserved for cross-ticket handoff at completion."
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
15
25
|
"SessionStart": [
|
|
16
26
|
{
|
|
17
27
|
"hooks": [
|
|
@@ -36,11 +36,36 @@ CONTEXT_FILE="$CWD/.syntaur/context.json"
|
|
|
36
36
|
# Always replace both sessionId and transcriptPath together. If the incoming
|
|
37
37
|
# transcript_path is empty, explicitly null the stored transcriptPath so a new
|
|
38
38
|
# session never inherits a stale transcript path from the prior session.
|
|
39
|
+
#
|
|
40
|
+
# Also resolve the latest session-summary path (mid-assignment continuity) so
|
|
41
|
+
# the resuming agent's first protocol-read can pick it up. Selection rule:
|
|
42
|
+
# the summary.md with the most recent file mtime under
|
|
43
|
+
# <assignmentDir>/sessions/*/summary.md. Null if none exists.
|
|
44
|
+
ASSIGNMENT_DIR_RAW=$(jq -r '.assignmentDir // empty' "$CONTEXT_FILE" 2>/dev/null)
|
|
45
|
+
ASSIGNMENT_DIR="${ASSIGNMENT_DIR_RAW/#\~/$HOME}"
|
|
46
|
+
|
|
47
|
+
LATEST_SUMMARY=""
|
|
48
|
+
if [ -n "$ASSIGNMENT_DIR" ] && [ -d "$ASSIGNMENT_DIR/sessions" ]; then
|
|
49
|
+
# Prefer GNU-style stat formatting if available (Linux); fall back to BSD
|
|
50
|
+
# (macOS). Resolve newest-by-mtime portably.
|
|
51
|
+
while IFS= read -r -d '' f; do
|
|
52
|
+
if M=$(stat -f '%m' "$f" 2>/dev/null) || M=$(stat -c '%Y' "$f" 2>/dev/null); then
|
|
53
|
+
printf '%s\t%s\n' "$M" "$f"
|
|
54
|
+
fi
|
|
55
|
+
done < <(find "$ASSIGNMENT_DIR/sessions" -mindepth 2 -maxdepth 2 -type f -name 'summary.md' -print0 2>/dev/null) \
|
|
56
|
+
| sort -rn -k1,1 \
|
|
57
|
+
| head -1 \
|
|
58
|
+
| cut -f2- > "${CONTEXT_FILE}.summary.tmp.$$" 2>/dev/null
|
|
59
|
+
LATEST_SUMMARY=$(cat "${CONTEXT_FILE}.summary.tmp.$$" 2>/dev/null || true)
|
|
60
|
+
rm -f "${CONTEXT_FILE}.summary.tmp.$$"
|
|
61
|
+
fi
|
|
62
|
+
|
|
39
63
|
TMP="${CONTEXT_FILE}.tmp.$$"
|
|
40
64
|
jq \
|
|
41
65
|
--arg sid "$SESSION_ID" \
|
|
42
66
|
--arg tp "$TRANSCRIPT_PATH" \
|
|
43
|
-
|
|
67
|
+
--arg lsp "$LATEST_SUMMARY" \
|
|
68
|
+
'. + {sessionId: $sid, transcriptPath: (if ($tp | length) > 0 then $tp else null end), latestSessionSummaryPath: (if ($lsp | length) > 0 then $lsp else null end)}' \
|
|
44
69
|
"$CONTEXT_FILE" > "$TMP" 2>/dev/null \
|
|
45
70
|
&& mv "$TMP" "$CONTEXT_FILE" 2>/dev/null \
|
|
46
71
|
|| rm -f "$TMP"
|
|
@@ -18,8 +18,9 @@ You may ONLY write to files inside your assigned assignment folder:
|
|
|
18
18
|
| `plan*.md` | Versioned implementation plans (optional, 0 or more: `plan.md`, `plan-v2.md`, ...) — each linked from a todo in `assignment.md` |
|
|
19
19
|
| `progress.md` | Append-only timestamped progress log (newest first). Replaces the old `## Progress` body section. |
|
|
20
20
|
| `scratchpad.md` | Working notes |
|
|
21
|
-
| `handoff.md` | Append-only
|
|
21
|
+
| `handoff.md` | Append-only **assignment-level cross-ticket outbound** at completion (written by `complete-assignment`) |
|
|
22
22
|
| `decision-record.md` | Append-only decision log |
|
|
23
|
+
| `sessions/<session-id>/summary.md` | **Per-session continuity** for resume across sessions of the same agent on this assignment. Single document per session id, overwritten on every save (written by `/save-session-summary`). Not the same as `handoff.md`. |
|
|
23
24
|
|
|
24
25
|
Path pattern (project-nested): `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
25
26
|
Path pattern (standalone): `~/.syntaur/assignments/<your-assignment-uuid>/`
|
|
@@ -22,8 +22,11 @@ Protocol version: **2.0**
|
|
|
22
22
|
progress.md # Agent-writable, append-only: timestamped progress log
|
|
23
23
|
comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
|
|
24
24
|
scratchpad.md # Agent-writable: working notes
|
|
25
|
-
handoff.md # Agent-writable: append-only
|
|
25
|
+
handoff.md # Agent-writable: append-only cross-ticket outbound at completion
|
|
26
26
|
decision-record.md # Agent-writable: append-only decision log
|
|
27
|
+
sessions/
|
|
28
|
+
<session-id>/
|
|
29
|
+
summary.md # Agent-writable: per-session continuity (single doc, overwritten)
|
|
27
30
|
resources/
|
|
28
31
|
_index.md # Derived (read-only)
|
|
29
32
|
<resource-slug>.md # Shared-writable
|
|
@@ -39,6 +42,7 @@ Protocol version: **2.0**
|
|
|
39
42
|
scratchpad.md
|
|
40
43
|
handoff.md
|
|
41
44
|
decision-record.md
|
|
45
|
+
sessions/<session-id>/summary.md # Per-session continuity, same as project-nested
|
|
42
46
|
playbooks/
|
|
43
47
|
manifest.md # Derived: playbook listing (read-only)
|
|
44
48
|
<slug>.md # User-authored: behavioral rules for agents
|
|
@@ -83,3 +87,4 @@ Protocol version: **2.0**
|
|
|
83
87
|
9. **Progress** is appended to `progress.md` as timestamped entries (newest first). Do not add a `## Progress` section to `assignment.md`.
|
|
84
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. Questions carry a `resolved` flag.
|
|
85
89
|
11. **Cross-assignment work** is requested via `syntaur request <source> <target> "text"` — appends to the target's `## Todos` annotated `(from: <source>)`.
|
|
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; the Claude Code SessionStart hook also stashes the absolute path in `.syntaur/context.json` as `latestSessionSummaryPath`. 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/`. The Claude Code `PreCompact` hook reminds the agent to invoke `/save-session-summary` before context is compacted.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: track-session
|
|
3
|
+
description: Use when the user asks to track, register, or log this Claude Code session in the Syntaur dashboard — standalone or linked to a project/assignment. Triggers on "/track-session", "track this session", "register this session in syntaur", or similar.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Track Session
|
|
7
|
+
|
|
8
|
+
Register the current Claude Code session as an agent session in the Syntaur dashboard. Works standalone or linked to a project/assignment.
|
|
9
|
+
|
|
10
|
+
Only real Claude Code session IDs are accepted — no synthesis. The real id is written to `.syntaur/context.json` by the SessionStart hook, with `~/.claude/sessions/<pid>.json` as the fallback source.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
User arguments: `$ARGUMENTS`
|
|
15
|
+
|
|
16
|
+
- (no args) — register a standalone session
|
|
17
|
+
- `--description "<text>"` — with a description
|
|
18
|
+
- `--project <slug> --assignment <slug>` — linked to a project
|
|
19
|
+
- `--description "<text>" --project <slug> --assignment <slug>` — both
|
|
20
|
+
|
|
21
|
+
## Workflow
|
|
22
|
+
|
|
23
|
+
### Step 1: Parse arguments
|
|
24
|
+
|
|
25
|
+
Extract optional flags from the argument string:
|
|
26
|
+
- `--description "<text>"` or `--description <text>` — session description
|
|
27
|
+
- `--project <slug>` — project to link to
|
|
28
|
+
- `--assignment <slug>` — assignment to link to
|
|
29
|
+
|
|
30
|
+
### Step 2: Source the real session id + transcript path
|
|
31
|
+
|
|
32
|
+
In priority order:
|
|
33
|
+
|
|
34
|
+
1. Read `.syntaur/context.json` if present. If it contains `sessionId`, use it. Also pick up `transcriptPath` if present.
|
|
35
|
+
2. Otherwise, read the most-recently-modified file under `~/.claude/sessions/*.json` whose `cwd` matches `$(pwd)` and use its `sessionId` field. The transcript path is conventionally `~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl`; include it if the file exists, otherwise omit.
|
|
36
|
+
3. If neither source yields an id, abort with: "Could not resolve a real Claude Code session id. Restart the Claude session so the SessionStart hook can populate `.syntaur/context.json`, or run `/rename <slug>` then try again."
|
|
37
|
+
|
|
38
|
+
DO NOT generate a UUID. `syntaur track-session` rejects missing session IDs.
|
|
39
|
+
|
|
40
|
+
### Step 3: Run the CLI command
|
|
41
|
+
|
|
42
|
+
Run the track-session CLI via Bash (use `dangerouslyDisableSandbox: true` since it writes to `~/.syntaur/`):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
syntaur track-session \
|
|
46
|
+
--agent claude \
|
|
47
|
+
--session-id "$SESSION_ID" \
|
|
48
|
+
--transcript-path "$TRANSCRIPT_PATH" \
|
|
49
|
+
--path "$(pwd)" \
|
|
50
|
+
[--description "<text>"] \
|
|
51
|
+
[--project <slug>] \
|
|
52
|
+
[--assignment <slug>]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Omit `--transcript-path` entirely (don't pass an empty string) if no transcript path could be resolved.
|
|
56
|
+
|
|
57
|
+
The CLI prints one of:
|
|
58
|
+
- `Registered standalone agent session <sessionId>.`
|
|
59
|
+
- `Registered agent session <sessionId> for <assignment> in <project>.`
|
|
60
|
+
|
|
61
|
+
Registration is idempotent — re-running the command with the same session id safely upserts project/assignment/description onto the existing row.
|
|
62
|
+
|
|
63
|
+
### Step 4: Merge context.json
|
|
64
|
+
|
|
65
|
+
Ensure `.syntaur/context.json` has the session fields (so SessionEnd and future `track-session` runs find them). Merge, don't overwrite:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
mkdir -p .syntaur
|
|
69
|
+
if [ -f .syntaur/context.json ]; then
|
|
70
|
+
jq --arg sid "$SESSION_ID" --arg tp "$TRANSCRIPT_PATH" \
|
|
71
|
+
'. + {sessionId: $sid} + (if ($tp | length) > 0 then {transcriptPath: $tp} else {} end)' \
|
|
72
|
+
.syntaur/context.json > .syntaur/context.json.tmp \
|
|
73
|
+
&& mv .syntaur/context.json.tmp .syntaur/context.json
|
|
74
|
+
else
|
|
75
|
+
jq -n --arg sid "$SESSION_ID" --arg tp "$TRANSCRIPT_PATH" \
|
|
76
|
+
'{sessionId: $sid} + (if ($tp | length) > 0 then {transcriptPath: $tp} else {} end)' \
|
|
77
|
+
> .syntaur/context.json
|
|
78
|
+
fi
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Step 5: Confirm
|
|
82
|
+
|
|
83
|
+
Tell the user:
|
|
84
|
+
- The session was registered (include the short session id).
|
|
85
|
+
- It will be auto-stopped when this conversation ends via the SessionEnd hook.
|
|
86
|
+
- If linked to a project, mention which project/assignment.
|
|
@@ -4,9 +4,9 @@ Syntaur plugin for OpenAI Codex. Installed automatically during `syntaur setup`.
|
|
|
4
4
|
|
|
5
5
|
## What's included
|
|
6
6
|
|
|
7
|
-
- **Skills:** syntaur-protocol, create-project, create-assignment, grab-assignment, plan-assignment, complete-assignment, track-session
|
|
7
|
+
- **Skills:** syntaur-protocol, create-project, create-assignment, grab-assignment, plan-assignment, complete-assignment, track-session, save-session-summary
|
|
8
8
|
- **Hooks:** write boundary enforcement, session cleanup
|
|
9
|
-
- **Commands:** track-session
|
|
9
|
+
- **Commands:** track-session, save-session-summary (Codex has no `PreCompact` event — invoke manually before compaction or session end)
|
|
10
10
|
- **Agents:** syntaur-protocol (background)
|
|
11
11
|
- **References:** protocol docs
|
|
12
12
|
|
|
@@ -11,7 +11,7 @@ Your job is to work fluently within the Syntaur protocol without breaking owners
|
|
|
11
11
|
|
|
12
12
|
- Create projects and assignments (project-nested or standalone) with the `syntaur` CLI
|
|
13
13
|
- Claim assignments and establish local assignment context
|
|
14
|
-
- Keep `assignment.md`, active plan files (`plan.md`, `plan-v2.md`, ...), `progress.md`, and `
|
|
14
|
+
- Keep `assignment.md`, active plan files (`plan.md`, `plan-v2.md`, ...), `progress.md`, `handoff.md` (cross-ticket outbound), and any active `sessions/<sid>/summary.md` (mid-assignment continuity) accurate during execution
|
|
15
15
|
- Record questions/notes/feedback via `syntaur comment` and route cross-assignment work via `syntaur request`
|
|
16
16
|
- Track Codex sessions for the Syntaur dashboard
|
|
17
17
|
- Set up Codex adapter instructions in the active workspace
|
|
@@ -30,7 +30,8 @@ When a task involves Syntaur:
|
|
|
30
30
|
- any `<assignmentDir>/plan*.md` files linked from active todos in the `## Todos` section
|
|
31
31
|
- `<assignmentDir>/progress.md` (if present) — reverse-chron progress log
|
|
32
32
|
- `<assignmentDir>/comments.md` (if present) — threaded questions/notes/feedback
|
|
33
|
-
- `<assignmentDir>/handoff.md`
|
|
33
|
+
- `<assignmentDir>/handoff.md` — cross-ticket outbound history
|
|
34
|
+
- the latest `<assignmentDir>/sessions/<sid>/summary.md` (selected by file mtime) if present — mid-assignment continuity from a prior session
|
|
34
35
|
4. Resolve the workspace boundary from `.syntaur/context.json` or `assignment.md` frontmatter before editing code.
|
|
35
36
|
|
|
36
37
|
Project-nested assignments live at `~/.syntaur/projects/<slug>/assignments/<aslug>/`. Standalone assignments live at `~/.syntaur/assignments/<uuid>/` — folder named by UUID, `project: null`, `slug` display-only.
|
|
@@ -51,8 +52,9 @@ Project-nested assignments live at `~/.syntaur/projects/<slug>/assignments/<aslu
|
|
|
51
52
|
- `plan*.md` (0 or more versioned plan files, e.g., `plan.md`, `plan-v2.md`)
|
|
52
53
|
- `progress.md` (append timestamped entries, newest first — replaces the old `## Progress` section)
|
|
53
54
|
- `scratchpad.md`
|
|
54
|
-
- `handoff.md`
|
|
55
|
+
- `handoff.md` (append-only; **assignment-level cross-ticket outbound** at completion)
|
|
55
56
|
- `decision-record.md`
|
|
57
|
+
- `sessions/<session-id>/summary.md` (**per-session continuity**; single doc per session id, overwritten on save by `/save-session-summary`. Codex has no `PreCompact` hook — invoke manually before compaction or session end.)
|
|
56
58
|
- project `resources/*.md`
|
|
57
59
|
- project `memories/*.md`
|
|
58
60
|
- `.syntaur/context.json` in the current working directory
|
|
@@ -72,7 +74,7 @@ Project-nested assignments live at `~/.syntaur/projects/<slug>/assignments/<aslu
|
|
|
72
74
|
- Update acceptance criteria and `## Todos` checkboxes as work lands.
|
|
73
75
|
- Append timestamped entries to `progress.md` (not to `assignment.md`) after meaningful milestones.
|
|
74
76
|
- When requirements shift, supersede the prior plan todo instead of rewriting the old plan file.
|
|
75
|
-
- Append
|
|
77
|
+
- Append handoff.md entries (cross-ticket outbound) instead of replacing previous handoff entries. Mid-assignment session continuity is a separate file: `sessions/<sid>/summary.md`, single document per session id, overwritten on each save. Do not delete older `sessions/*/summary.md` files at completion — they remain as immutable history.
|
|
76
78
|
- Record questions via `syntaur comment ... --type question` — they roll up into `_status.md`'s `openQuestions` counter.
|
|
77
79
|
|
|
78
80
|
## CLI Reference
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Write a per-session continuity summary so a future Codex session can resume this assignment cleanly
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /save-session-summary
|
|
6
|
+
|
|
7
|
+
Write a per-session continuity summary at `<assignmentDir>/sessions/<sessionId>/summary.md` so a future session can resume this assignment without re-reading the full transcript.
|
|
8
|
+
|
|
9
|
+
This is **mid-assignment session continuity**, not cross-ticket handoff:
|
|
10
|
+
- Use `/save-session-summary` when about to compact, before ending a session, or when the user asks to "save the session".
|
|
11
|
+
- Use the `complete-assignment` skill (which writes `handoff.md`) when finishing the assignment for downstream review.
|
|
12
|
+
|
|
13
|
+
Codex has no `PreCompact` hook event — invoke this command manually.
|
|
14
|
+
|
|
15
|
+
## Workflow
|
|
16
|
+
|
|
17
|
+
Follow the `save-session-summary` skill in full. Summary:
|
|
18
|
+
|
|
19
|
+
1. Read `.syntaur/context.json`. Required: `assignmentDir`, `sessionId`. If `sessionId` is missing, abort with: "Session not tracked. Run `syntaur track-session ...` first." Do not synthesize a session id.
|
|
20
|
+
2. Create `<assignmentDir>/sessions/<sessionId>/` only at write time (avoid empty dirs).
|
|
21
|
+
3. Write or overwrite `<assignmentDir>/sessions/<sessionId>/summary.md` with frontmatter (`assignment`, `sessionId`, `created`, `updated`) and body sections: `## Snapshot`, `## What Was Done`, `## What's Next`, `## Open Questions`, `## Load-Bearing Context`. Single document per session id — directory partitions by session.
|
|
22
|
+
4. Do NOT modify `handoff.md`.
|
|
23
|
+
5. Optionally append a brief progress entry noting the save.
|
|
@@ -18,8 +18,9 @@ You may only write to files inside your assigned assignment folder:
|
|
|
18
18
|
| `plan*.md` | Versioned implementation plans (optional, 0 or more: `plan.md`, `plan-v2.md`, ...) — each linked from a todo in `assignment.md` |
|
|
19
19
|
| `progress.md` | Append-only timestamped progress log (newest first). Replaces the old `## Progress` body section. |
|
|
20
20
|
| `scratchpad.md` | Working notes |
|
|
21
|
-
| `handoff.md` | Append-only
|
|
21
|
+
| `handoff.md` | Append-only **assignment-level cross-ticket outbound** at completion (written by `complete-assignment`) |
|
|
22
22
|
| `decision-record.md` | Append-only decision log |
|
|
23
|
+
| `sessions/<session-id>/summary.md` | **Per-session continuity** for resume across sessions of the same agent on this assignment. Single document per session id, overwritten on every save (written by `/save-session-summary`). Codex has no `PreCompact` hook — invoke manually. |
|
|
23
24
|
|
|
24
25
|
Path pattern (project-nested): `~/.syntaur/projects/<project>/assignments/<your-assignment>/`
|
|
25
26
|
Path pattern (standalone): `~/.syntaur/assignments/<your-assignment-uuid>/`
|
|
@@ -22,8 +22,11 @@ Protocol version: **2.0**
|
|
|
22
22
|
progress.md # Agent-writable, append-only: timestamped progress log
|
|
23
23
|
comments.md # CLI-mediated: threaded questions/notes/feedback (via `syntaur comment`)
|
|
24
24
|
scratchpad.md # Agent-writable: working notes
|
|
25
|
-
handoff.md # Agent-writable: append-only
|
|
25
|
+
handoff.md # Agent-writable: append-only cross-ticket outbound at completion
|
|
26
26
|
decision-record.md # Agent-writable: append-only decision log
|
|
27
|
+
sessions/
|
|
28
|
+
<session-id>/
|
|
29
|
+
summary.md # Agent-writable: per-session continuity (single doc, overwritten)
|
|
27
30
|
resources/
|
|
28
31
|
_index.md # Derived (read-only)
|
|
29
32
|
<resource-slug>.md # Shared-writable
|
|
@@ -39,6 +42,7 @@ Protocol version: **2.0**
|
|
|
39
42
|
scratchpad.md
|
|
40
43
|
handoff.md
|
|
41
44
|
decision-record.md
|
|
45
|
+
sessions/<session-id>/summary.md # Per-session continuity, same as project-nested
|
|
42
46
|
playbooks/
|
|
43
47
|
manifest.md # Derived: playbook listing (read-only)
|
|
44
48
|
<slug>.md # User-authored: behavioral rules for agents
|
|
@@ -83,3 +87,4 @@ Protocol version: **2.0**
|
|
|
83
87
|
9. Progress is appended to `progress.md` as timestamped entries (newest first). Do not add a `## Progress` section to `assignment.md`.
|
|
84
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.
|
|
85
89
|
11. Cross-assignment work is requested via `syntaur request <source> <target> "text"` — appends to the target's `## Todos` annotated `(from: <source>)`.
|
|
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.
|
|
@@ -63,6 +63,8 @@ Do NOT add a `## Progress` section to `assignment.md` — progress entries live
|
|
|
63
63
|
|
|
64
64
|
## Step 4: Write Handoff Entry
|
|
65
65
|
|
|
66
|
+
`handoff.md` is the **assignment-level cross-ticket outbound** doc — written here, at completion, for the next ticket / agent / human reviewer. It is NOT the mid-assignment session continuity artifact; that lives at `<assignmentDir>/sessions/<sid>/summary.md` and is written by `/save-session-summary`. Any `sessions/*/summary.md` files are reference-only at completion time and MUST NOT be deleted — they remain as immutable historical context.
|
|
67
|
+
|
|
66
68
|
Read `<assignmentDir>/handoff.md` to see its current content and frontmatter.
|
|
67
69
|
|
|
68
70
|
Append a new handoff entry to the markdown body. Read the current `handoffCount` from the frontmatter and use `handoffCount + 1` as the entry number. The entry must follow this format:
|
|
@@ -69,7 +69,11 @@ If either command fails, report the error and stop.
|
|
|
69
69
|
|
|
70
70
|
## Step 4: Read Assignment Context and Backfill Workspace
|
|
71
71
|
|
|
72
|
-
Read the full assignment file. Also read `comments.md` if present (inherited questions / notes).
|
|
72
|
+
Read the full assignment file. Also read `comments.md` if present (inherited questions / notes).
|
|
73
|
+
|
|
74
|
+
For each `dependsOn` entry, read the dependency's `handoff.md` AND `decision-record.md` so upstream decisions carry forward. (`handoff.md` is the **cross-ticket outbound** doc — distinct from session continuity.)
|
|
75
|
+
|
|
76
|
+
If `<assignmentDir>/sessions/` exists, also read the most recent `<assignmentDir>/sessions/<sid>/summary.md` (selected by `summary.md` file mtime). This is the **mid-assignment session continuity** artifact written by `/save-session-summary` at the end of a prior session of the same assignment. Treat its `What's Next` and `Load-Bearing Context` sections as resume context. (Note: in Claude Code, the SessionStart hook also stashes this path into context.json as `latestSessionSummaryPath` — same semantics; either source is fine.)
|
|
73
77
|
|
|
74
78
|
From the assignment frontmatter extract: `title`, `workspace.repository`, `workspace.worktreePath`, `workspace.branch`, `dependsOn`, `priority`.
|
|
75
79
|
|
|
@@ -155,4 +159,5 @@ Summarize:
|
|
|
155
159
|
- Active todos from `## Todos`, including any linked plan files.
|
|
156
160
|
- The workspace path.
|
|
157
161
|
- Any inherited comments/questions from `comments.md`.
|
|
158
|
-
-
|
|
162
|
+
- **Resume context** (if Step 4 found a `sessions/<sid>/summary.md`): a short block citing the session id and the timestamp of that summary's `updated` frontmatter, followed by its `What's Next` bullets. This is mid-assignment continuity — distinct from any cross-ticket handoff.
|
|
163
|
+
- Suggested next step: `plan-assignment` to create an implementation plan, or — if a session summary's `What's Next` is concrete — proceed directly with the next step it names.
|
|
@@ -50,7 +50,9 @@ Read these files to understand the assignment:
|
|
|
50
50
|
|
|
51
51
|
Per-project `agent.md` / `claude.md` were removed in protocol v2.0. Agent-level conventions now live at the repo root (`CLAUDE.md` / `AGENTS.md`) and in `~/.syntaur/playbooks/` (already loaded in Step 2).
|
|
52
52
|
|
|
53
|
-
If the assignment has dependencies (`dependsOn` in frontmatter), read each dependency's `handoff.md` AND `decision-record.md` for integration context and upstream decisions.
|
|
53
|
+
If the assignment has dependencies (`dependsOn` in frontmatter), read each dependency's `handoff.md` AND `decision-record.md` for integration context and upstream decisions. (`handoff.md` is cross-ticket outbound — distinct from session continuity.)
|
|
54
|
+
|
|
55
|
+
If `<assignmentDir>/sessions/` exists, also read the most recent `sessions/<sid>/summary.md` (selected by `summary.md` file mtime). This is mid-assignment continuity from a prior session of the same assignment — its `What's Next`, `Open Questions`, and `Load-Bearing Context` sections are direct planning inputs when resuming work that was already in flight.
|
|
54
56
|
|
|
55
57
|
## Step 4: Explore Workspace (if set)
|
|
56
58
|
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: save-session-summary
|
|
3
|
+
description: >-
|
|
4
|
+
Write a per-session continuity summary so a future session can resume cleanly
|
|
5
|
+
without re-reading the full transcript. Use when the user asks to save session
|
|
6
|
+
state, prepare to compact, or hand off mid-assignment to a new session of the
|
|
7
|
+
same agent. Triggered by `/save-session-summary`, by Claude Code's PreCompact
|
|
8
|
+
hook, or when the user says "save the session" / "before we compact" / similar.
|
|
9
|
+
license: MIT
|
|
10
|
+
metadata:
|
|
11
|
+
author: prong-horn
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Save Session Summary
|
|
16
|
+
|
|
17
|
+
Write or overwrite the current session's continuity summary at
|
|
18
|
+
`<assignmentDir>/sessions/<sessionId>/summary.md`. This is **session-scoped
|
|
19
|
+
mid-assignment continuity** — distinct from `handoff.md`, which is the
|
|
20
|
+
**assignment-level cross-ticket outbound** doc written by `complete-assignment`.
|
|
21
|
+
|
|
22
|
+
## When NOT to use this skill
|
|
23
|
+
|
|
24
|
+
- Use `complete-assignment` instead when finishing the assignment for a downstream ticket / human reviewer — that writes `handoff.md`.
|
|
25
|
+
- Do not write to `handoff.md` here. The two artifacts are separate.
|
|
26
|
+
|
|
27
|
+
## Step 1: Load Context
|
|
28
|
+
|
|
29
|
+
Read `.syntaur/context.json` from the current working directory.
|
|
30
|
+
|
|
31
|
+
If the file does not exist, tell the user: "No active assignment found. Run `grab-assignment` first." and stop.
|
|
32
|
+
|
|
33
|
+
Extract:
|
|
34
|
+
- `assignmentDir` (absolute path) — required.
|
|
35
|
+
- `sessionId` — required, must be the real agent runtime session id.
|
|
36
|
+
|
|
37
|
+
If `sessionId` is missing, empty, or `null`, abort with: "Session not tracked. Run `syntaur track-session ...` first." Do not invent or generate a session id.
|
|
38
|
+
|
|
39
|
+
## Step 2: Ensure Session Directory
|
|
40
|
+
|
|
41
|
+
Create `<assignmentDir>/sessions/<sessionId>/` only at this step (not earlier — empty session dirs are noise). Use `mkdir -p` semantics so re-saves are idempotent.
|
|
42
|
+
|
|
43
|
+
## Step 3: Read Existing Summary (if any)
|
|
44
|
+
|
|
45
|
+
If `<assignmentDir>/sessions/<sessionId>/summary.md` already exists, read it and preserve its `created` frontmatter timestamp. Otherwise, the new file's `created` is now.
|
|
46
|
+
|
|
47
|
+
This is a **single document per session id** — every save in the same session overwrites in place. The directory partitions by session id, so older sessions remain on disk as immutable history.
|
|
48
|
+
|
|
49
|
+
## Step 4: Write the Summary
|
|
50
|
+
|
|
51
|
+
Write `<assignmentDir>/sessions/<sessionId>/summary.md` with this structure (overwrite if it exists). Fill the section bodies with content derived from this session's actual work — be specific and concrete, this is what a future session will load to resume.
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
---
|
|
55
|
+
assignment: <assignment-slug>
|
|
56
|
+
sessionId: <session-id>
|
|
57
|
+
created: "<original created timestamp, or now if new>"
|
|
58
|
+
updated: "<now, ISO 8601>"
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
# Session Summary
|
|
62
|
+
|
|
63
|
+
## Snapshot
|
|
64
|
+
|
|
65
|
+
<One paragraph: what the assignment is, where work currently stands, what is load-bearing for a future session to know immediately on resume.>
|
|
66
|
+
|
|
67
|
+
## What Was Done
|
|
68
|
+
|
|
69
|
+
- <Concrete action 1>
|
|
70
|
+
- <Concrete action 2>
|
|
71
|
+
- ...
|
|
72
|
+
|
|
73
|
+
## What's Next
|
|
74
|
+
|
|
75
|
+
- <Most important next step>
|
|
76
|
+
- <Subsequent steps in order>
|
|
77
|
+
- ...
|
|
78
|
+
|
|
79
|
+
## Open Questions
|
|
80
|
+
|
|
81
|
+
- <Unresolved question or decision>
|
|
82
|
+
- <Ambiguity to resolve>
|
|
83
|
+
- ...
|
|
84
|
+
(or "None." if no open items)
|
|
85
|
+
|
|
86
|
+
## Load-Bearing Context
|
|
87
|
+
|
|
88
|
+
- File paths + line numbers that matter for resume
|
|
89
|
+
- Command outputs the next session will need
|
|
90
|
+
- Decisions made this session that aren't captured in `decision-record.md`
|
|
91
|
+
- External references (PRs, issues, docs) that scope the next steps
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Step 5: Confirm — Do NOT Touch handoff.md
|
|
95
|
+
|
|
96
|
+
Verify your write did not modify `<assignmentDir>/handoff.md`. The two artifacts are deliberately separate:
|
|
97
|
+
|
|
98
|
+
| File | Scope | When written | Audience |
|
|
99
|
+
|------|-------|--------------|----------|
|
|
100
|
+
| `handoff.md` | Assignment-level | At completion (via `complete-assignment`) | Next ticket / agent / human reviewer |
|
|
101
|
+
| `sessions/<sid>/summary.md` | Session-scoped | Mid-assignment, on demand or pre-compact | Future session of the same agent on the same assignment |
|
|
102
|
+
|
|
103
|
+
## Step 6: Append a Progress Entry (optional but recommended)
|
|
104
|
+
|
|
105
|
+
If progress hasn't already been logged in this turn, append a brief entry to `<assignmentDir>/progress.md` noting that a session summary was saved and the next-step pointer.
|
|
106
|
+
|
|
107
|
+
## Step 7: Report to User
|
|
108
|
+
|
|
109
|
+
Summarize:
|
|
110
|
+
- Path of the written summary
|
|
111
|
+
- Session id
|
|
112
|
+
- Number of items in "What's Next" (so the user knows resume scope)
|
|
113
|
+
- Reminder: this is mid-assignment continuity, not cross-ticket handoff
|
|
@@ -26,8 +26,9 @@ Respect file ownership boundaries. The Claude Code and Codex plugins enforce the
|
|
|
26
26
|
- `plan*.md` (versioned — `plan.md`, `plan-v2.md`, etc.)
|
|
27
27
|
- `progress.md` (append-only, timestamped)
|
|
28
28
|
- `scratchpad.md`
|
|
29
|
-
- `handoff.md` (append-only)
|
|
29
|
+
- `handoff.md` (append-only — **assignment-level cross-ticket outbound**)
|
|
30
30
|
- `decision-record.md` (append-only)
|
|
31
|
+
- `sessions/<sessionId>/summary.md` (**session-scoped mid-assignment continuity** — single document per session id, overwritten on save)
|
|
31
32
|
2. **Project-level shared files:**
|
|
32
33
|
- `~/.syntaur/projects/<project>/resources/<slug>.md`
|
|
33
34
|
- `~/.syntaur/projects/<project>/memories/<slug>.md`
|
|
@@ -49,6 +50,22 @@ Respect file ownership boundaries. The Claude Code and Codex plugins enforce the
|
|
|
49
50
|
|
|
50
51
|
Per-project `agent.md` / `claude.md` do NOT exist in protocol v2.0. Agent-level conventions now live at the repo root (`CLAUDE.md` / `AGENTS.md`) and in `~/.syntaur/playbooks/`.
|
|
51
52
|
|
|
53
|
+
## Session Continuity vs Cross-Ticket Handoff
|
|
54
|
+
|
|
55
|
+
Two related but distinct artifacts. Conflating them is a recurring mistake.
|
|
56
|
+
|
|
57
|
+
| Artifact | Scope | When written | Audience | Written by |
|
|
58
|
+
|---|---|---|---|---|
|
|
59
|
+
| `handoff.md` | Assignment-level | At completion | The next ticket / agent / human reviewer | `complete-assignment` skill |
|
|
60
|
+
| `sessions/<sessionId>/summary.md` | Session-scoped | Mid-assignment, before compaction or at session end | A future session of the same agent on the same assignment | `save-session-summary` skill |
|
|
61
|
+
|
|
62
|
+
Rules:
|
|
63
|
+
- One `summary.md` per session id directory; overwrite on every save.
|
|
64
|
+
- Older `sessions/<sid>/summary.md` files accumulate as immutable history — never delete them, even at completion.
|
|
65
|
+
- Resume picks the latest by `summary.md` file mtime. The Claude Code SessionStart hook also stashes that absolute path into `.syntaur/context.json` as `latestSessionSummaryPath` for convenience; either source is fine.
|
|
66
|
+
- Codex has no `PreCompact` hook — Codex agents invoke `/save-session-summary` manually before compaction or session end.
|
|
67
|
+
- `syntaur doctor` intentionally does NOT validate `sessions/` — sessions are optional and absence is not anomalous.
|
|
68
|
+
|
|
52
69
|
## Current Assignment Context
|
|
53
70
|
|
|
54
71
|
If `.syntaur/context.json` exists in the current working directory, read it before making changes. Fields you will see:
|
|
@@ -60,6 +77,7 @@ If `.syntaur/context.json` exists in the current working directory, read it befo
|
|
|
60
77
|
- `workspaceRoot` — absolute path to the code workspace
|
|
61
78
|
- `sessionId` — real agent-runtime session id (never a synthesized UUID)
|
|
62
79
|
- `transcriptPath` — absolute path to the agent's rollout/transcript file, if known
|
|
80
|
+
- `latestSessionSummaryPath` — absolute path to the most recent `sessions/<sid>/summary.md` (Claude Code SessionStart hook resolves this; `null` if none)
|
|
63
81
|
|
|
64
82
|
## Required Reading Order
|
|
65
83
|
|
|
@@ -71,8 +89,9 @@ When starting work on an existing assignment, read these in order:
|
|
|
71
89
|
4. `<assignmentDir>/assignment.md`
|
|
72
90
|
5. `<assignmentDir>/comments.md` if present — inherited questions / notes
|
|
73
91
|
6. Latest `<assignmentDir>/plan*.md` (pick the newest)
|
|
74
|
-
7. `<assignmentDir>/handoff.md` — history
|
|
75
|
-
8.
|
|
92
|
+
7. `<assignmentDir>/handoff.md` — cross-ticket outbound history (entries from prior agents/humans handing this assignment off)
|
|
93
|
+
8. The latest `<assignmentDir>/sessions/<sid>/summary.md` if present (mid-assignment resume context from a prior session of this assignment) — selected by `summary.md` file mtime, or via `latestSessionSummaryPath` in context.json on Claude Code
|
|
94
|
+
9. For each `dependsOn` entry: the dependency's `handoff.md` AND `decision-record.md` — upstream integration context and accepted decisions carry forward
|
|
76
95
|
|
|
77
96
|
## Lifecycle Commands
|
|
78
97
|
|
|
@@ -108,7 +127,7 @@ ls ~/.syntaur/playbooks/*.md 2>/dev/null
|
|
|
108
127
|
- Append milestones to `progress.md` — do NOT add a `## Progress` section to `assignment.md` (v2.0 moved progress to its own file).
|
|
109
128
|
- `## Todos` in `assignment.md` is an informal markdown checklist. Items may be simple tasks or markdown links to plan files. When a plan is superseded, mark the old todo as `- [x] ~~Execute [plan](./plan.md)~~ (superseded by plan-v2)` — never delete. `## Todos` is also the landing spot for cross-assignment `syntaur request` entries.
|
|
110
129
|
- Record questions / notes / feedback via `syntaur comment` — never edit `comments.md` directly. Do NOT set status to `blocked` just because there is an open question; block only for a real external dependency with a `--reason`.
|
|
111
|
-
- Write
|
|
130
|
+
- Write `handoff.md` entries (via `complete-assignment`) with enough context for another agent or human to continue cleanly **across tickets**. Write `sessions/<sid>/summary.md` (via `/save-session-summary`) for mid-assignment continuity within the same assignment across sessions of the same agent. Do not mix the two. Record decisions in `decision-record.md` with Status / Context / Decision / Consequences — downstream dependents auto-load these during grab.
|
|
112
131
|
- Commit frequently with messages referencing the assignment slug.
|
|
113
132
|
|
|
114
133
|
## References
|
|
@@ -22,8 +22,9 @@ You may only write to files inside your currently-claimed assignment folder:
|
|
|
22
22
|
| `plan*.md` | Versioned implementation plans (`plan.md`, `plan-v2.md`, ...). When superseded, the old plan's todo is marked superseded but the file itself is never deleted. |
|
|
23
23
|
| `progress.md` | Append-only, timestamped progress log (newest first). |
|
|
24
24
|
| `scratchpad.md` | Working notes. |
|
|
25
|
-
| `handoff.md` | Append-only
|
|
25
|
+
| `handoff.md` | Append-only **assignment-level cross-ticket outbound** at completion (written by `complete-assignment`). |
|
|
26
26
|
| `decision-record.md` | Append-only decision log (Status / Context / Decision / Consequences). |
|
|
27
|
+
| `sessions/<session-id>/summary.md` | **Per-session continuity** for resume across sessions of the same agent on this assignment. Single document per session id, overwritten on every save (written by `/save-session-summary`). Not the same as `handoff.md`. |
|
|
27
28
|
|
|
28
29
|
Path patterns:
|
|
29
30
|
- Project-nested: `~/.syntaur/projects/<project>/assignments/<your-assignment-slug>/`
|