name good-morning
description Start-of-session bootstrap: locate or create the session worktree, read working/current-plan.md and what it points to so a fresh Claude is caught up, surface what's due (ledger bloat/aging/reviews, drift scratchpad, ripe deferrals, active-build progress), then offer a briefing. The morning bookend to /save-progress. Use at the start of a session or after /clear.
disable-model-invocation true
allowed-tools Read · Glob · Grep

Good Morning

The morning bookend to /save-progress. That command pins state at the end of a session; this one rehydrates it at the start — it locates or creates the session worktree, reads the plan and everything it points to so a fresh Claude (after /clear) is genuinely caught up, surfaces what's due, then catches the user up if they want it.

This command reads, orients, and sets up / cleans the workspace — but it does not start doing the plan's work. That waits for the user's go-ahead once you're both oriented.

Bookend sibling: /save-progress is the session-end mirror. They share the durable-docs manifest (.meta/durable-docs.md) and the worktree lifecycle (good-morning creates/resumes; save-progress disposes via merge / keep / discard). When you change one bookend's structure, the manifest, or the worktree scheme, check the other.

Workspace model (git-by-default, worktree-always)

Yggdrasil's work is git-backed, so every session runs in its own worktree under .worktrees/, on a session-YYYY-MM-DD branch off main — never editing main directly. good-morning owns worktree creation/resume via raw git worktree; /save-progress owns disposition. This is Yggdrasil's concrete default, not the planning skill's softer "worktree or at least a branch" floor. Use bare git commands from the repo/worktree cwd (not git -C) for these same-repo operations.

Branch-prefix detection (read from git, no registry): session-* = this command's same-repo session worktrees, ours to resume. xrepo-* (cross-repo reach-in) and native worktree-* (subagent isolation: worktree) are reserved — not session-resumes; leave them alone (no active cross-repo logic yet).

Steps

  1. Parse the invocation. Anything typed after /good-morning is two things, either of which may be absent:

    • A briefing preference — if it says to skip ("no briefing," "jump straight in"), don't ask in step 7; orient silently and stand ready.
    • Context or a loose note — where the user wants to pick up, or a stray idea they sat down to jot before forgetting it.
  2. Safe-capture any loose note first. If the invocation carried an idea/note (not just direction), surface it back immediately and, if it's idea-shaped, recommend /bookmarking so it lands durably — before the slower work below. The user may have opened the session only to drop a thought and then leave; never let a "didn't want to forget this" note ride only in conversation.

  3. Locate & resume the session worktree (before orienting — the freshest pinned handoff may live on a kept session branch, not main). Run git worktree list and read the landscape by branch prefix:

    • One kept session-* worktreeresume it (work against its paths) — that's where the last session's pinned handoff lives if it was "kept."
    • More than one session-*disambiguate with AskUserQuestion: list each with a short derived summary of what it's about (from recent git log messages / its branch checkpoint) + its last-commit date, plus a "start fresh" option.
    • None → the handoff is on main; you'll create a fresh worktree in step 5.
    • Ignore xrepo-* / worktree-* — not session-resumes.
  4. Orient. Read working/current-plan.md from the resumed location (the freshest handoff), in full — the ## Current Checkpoint is the "you are here" pin. Then follow the trail enough to pick up, not just skim:

    • The Checkpoint's References and Next step — open the files, repos, source paths.
    • The skill(s) in play for the active build — read their SKILL.md.
    • Anything the Next step says to read from source — read it from source (source-fidelity).
    • If the session will touch architecture/foundations, skim the relevant durable docs from the manifest (.meta/durable-docs.md). current-plan.md is usually enough for routine pickups; reach for the manifest when the work needs the foundational picture.
  5. Finish workspace setup (now that you're oriented). Worktree-always:

    • If step 3 resumed a worktree, you're already settled in it — done.
    • If step 3 found none (or the user chose "start fresh"), create git worktree add .worktrees/session-YYYY-MM-DD -b session-YYYY-MM-DD HEAD (today's date, branched from local HEAD so no remote is needed). If today's name already exists, append an incrementing suffix (-2, -3).
    • Necessity-only cleanup — surfaced/announced, never a silent tidy-sweep (that proactive prune is /save-progress's job):
      • an empty, same-day worktree (clean tree, no commits beyond base) is reused silently;
      • an empty, stale-dated one is nuked (git worktree remove) and you tell the user you did so, then create today's;
      • a broken / half-made one in the way is cleared.
    • Work against the worktree's absolute paths from here on (raw git doesn't auto-relocate the session).
  6. Surface what's due — entirely from the ledger stamps + in-context docs; never load the out-of-context stores (bookmarks.md, backburner.md, archive/):

    • Ledger (.meta/ledger.yaml): the bookmark count + a high-count flag (bloat bands from config.bloat), items aged past config.aging_days, and which cadence-gated reviews are due (compare each last_* against config.cadence_days).
    • working/hygiene.md open items, if any (the drift scratchpad — surfaced here so it survives /clear).
    • Ripe deferrals from current-plan.md's ## Deferred (in-context, so reading it is fine): a hard trigger that fired (by condition) or a soft trigger aged past config.aging_days (by age) — an informational offer to pick it up, never forced.
    • Active-build progress: if a sub-plan is in flight (a plan with unchecked ## Progress boxes), surface "you're at Task X of plan Y; next is …" — making good-morning the resume point for a /clear'd mid-build.
  7. Offer the briefing (unless declined in step 1). AskUserQuestion: "Want a briefing to get up to speed, or jump straight in?"

    • Briefing → a short, conversational playback: where you left off, what's in progress, the immediate next step.
    • Skip → straight to step 8.
  8. State where you're picking up, and stand ready. Name the immediate next step in plain language (not a bare phase number), folding in any direction from step 1. Then stop and wait — do not start executing the work until the user says go.

What this command does NOT do

  • No work execution. It sets up the workspace and orients; picking up the actual next task waits for an explicit go-ahead.
  • No pin, no plan edits, no auto-commit. Pinning the checkpoint is /save-progress's job. The only writes good-morning makes are workspace ones (creating/removing a worktree) and, if asked, bookmarking a loose note (via /bookmarking, which prompts).
  • No loading the out-of-context stores. It surfaces bookmark / backburner / archive signals from the ledger stamps only, respecting the context-load boundary.
  • No silent briefing, no silent cleanup. The briefing is offered (skipped if declined on entry); worktree cleanup is announced, never a silent tidy.