name save-progress
description End-of-session bookend: materialize any in-flight design, pin a 'you are here' checkpoint to working/current-plan.md, dispose of the session worktree (merge / keep / discard), and offer /hygiene-check. Use before a /clear, when pausing work, or at any natural stopping point.
disable-model-invocation true
allowed-tools Read · Glob · Grep

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-morning is 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

  1. 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.md and 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.

  2. Read working/current-plan.md to understand the current phase and context.

  3. 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.

  4. 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.
  5. 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 substance changes for confirmation rather than editing silently (see What NOT to change).

  6. Choose the dispositionAskUserQuestion, merge / keep / discard, with the option pre-pointed by the checkpoint's "Next step" (step 3). This determines where the pin lands.

  7. Pin + execute the disposition. All git via git -C / absolute paths; the pin auto-commits (no prompt) — write the message to a temp file and git commit -F it 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-morning resumes 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 on main.
    • discard (abandoning the work) — a second AskUserQuestion "Are you sure? This drops the branch's work." On confirm: write a fresh "abandoned <what>" breadcrumb to main's current-plan.md (commit on main) 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.

  8. Offer /hygiene-checkAskUserQuestion: "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.

  9. 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.