Save Progress
Pin a "you are here" checkpoint to working/current-plan.md so a fresh Claude after /clear
knows exactly where to pick up, then dispose of the session worktree. The session-end mirror of
/good-morning, which reads whatever this pins.
Bookend sibling:
/good-morningis the session-start mirror. They share the durable-docs manifest (.meta/durable-docs.md) and the worktree lifecycle (good-morning creates/resumes; this command disposes via merge / keep / discard — the pin lands wherever good-morning reads next). When you change one bookend's structure, the manifest, or the worktree scheme, check the other.
Worktree disposition (the git half)
Run all git via git -C <abs-path> / absolute paths — never cd (the Bash cwd isn't a
reliable anchor across calls, and cd can trip a prompt). Two git moments with different
gating:
- Pin = auto-commit, no prompt. Writing + committing the checkpoint is self-housekeeping (the commit is the point), so it follows the auto-commit exception — it doesn't ask.
- Disposition = always gated. merge / keep / discard is a deliberate
AskUserQuestion, outside the auto-commit exception. Recommend the option pre-pointed by the drafted checkpoint's "Next step" (work finished → merge; more to do → keep; abandoned → discard) — read it off the draft, don't ask cold.
Steps
-
In-flight-design durability check. The primary end-of-session hazard, first: if the session worked out substantial design or reasoning that was never written to disk (it lives only in this conversation), materialize it now as its own
working/YYYY-MM-DD-<name>-design.mdand include it in the pin — otherwise it evaporates on/clear. A passing reference or small decision stays in the checkpoint; a worked-out design earns its own committed file. (See the in-flight-design durability-gap bookmark.) Secondarily, make sure nothing substantial is left in a volatile or untracked spot it shouldn't be. -
Read
working/current-plan.mdto understand the current phase and context. -
Draft a checkpoint block from session context:
## Current Checkpoint — YYYY-MM-DD **Just finished:** [what was completed this session, specifically] **In progress:** [the active phase/task and its goal] **Next step:** [the single most immediate next action] **References:** [locally-cloned repos, open files, or paths a fresh Claude will need — omit if nothing non-obvious]Keep each field to 1–3 lines. This is a pin, not a summary.
-
Reconcile the plan body with reality. Scan the rest of the plan — the status block and phase progress (Done / Next) — for anything the just-finished work made stale; move completed items to done, update what's next. Keep the map around the pin honest.
Single source of truth — don't duplicate metadata. Each fact has one home:
- Date / "last touched": the Checkpoint header date only.
- Session narration: the Checkpoint; it graduates into the Done log as work completes — it does not also live in the status block.
- Durable orientation / design decisions: the status block + "Quick orientation" (kept lean) and the catalog. Collapse any fact caught in two places.
-
Show the draft to the user. Show the checkpoint + any reconciliation edits: "Does this look right? Confirm or correct anything before I save it." Surface any
substancechanges for confirmation rather than editing silently (see What NOT to change). -
Choose the disposition —
AskUserQuestion, merge / keep / discard, with the option pre-pointed by the checkpoint's "Next step" (step 3). This determines where the pin lands. -
Pin + execute the disposition. All git via
git -C/ absolute paths; the pin auto-commits (no prompt) — write the message to a temp file andgit commit -Fit to avoid quoting issues. Commit only the Yggdrasil-repo edits here.- keep (frictionless — more work to do) — write the checkpoint to the session
branch's
current-plan.md, auto-commit on the branch; leave the worktree + branch. Next/good-morningresumes them. - merge (work finished / ready to land) — write + commit the checkpoint on the session
branch, merge the session branch into
main, re-confirm the work still holds on the combined state (no merge conflicts; the plan reads coherently), then remove the worktree (git worktree remove) and delete the branch (git branch -d). The pin now lives onmain. - discard (abandoning the work) — a second
AskUserQuestion"Are you sure? This drops the branch's work." On confirm: write a fresh "abandoned<what>" breadcrumb tomain'scurrent-plan.md(commit onmain) so good-morning still orients, then remove the worktree and force-delete the branch (git branch -D). Recoverable via reflog + the breadcrumb.
Edits in other repos (personal, odin-codin) are a separate logical change — commit them in their own repo with their own message, or leave them and list them as pending in the report.
- keep (frictionless — more work to do) — write the checkpoint to the session
branch's
-
Offer
/hygiene-check—AskUserQuestion: "Run /hygiene-check to curate the lists (bookmark bloat, due reviews, drift) before you go?" — Yes / No. save-progress offers it, never embeds it; the old inline sweep + consistency-check now live there. Decline = skip, noted in the report. -
Report what was pinned, which disposition ran, and explicitly name anything left saved-but-not-committed (e.g. cross-repo edits awaiting their own commit), so there's never a false impression of git history.
What NOT to change
Update status and progress freely — the Checkpoint, phase done/next markers, the status block, and dates. Do not rewrite design decisions, session lessons, or the substance of phase descriptions; only their completion status. When unsure whether something is "status" or "substance," show it in the step 5 confirmation rather than changing it silently.