.claude/skills/start-session/SKILL.md
Run the session start routine — ask about available time and hard stops, read recent session logs and ROADMAP.md priorities, propose a realistic goal. Use when the user says "/start", "/start-session", "let's start", "start session", "begin session", or at the start of any longer session. Skip for quick focused tasks where the goal is already clear.
npx skillsauth add sebjacobs/dotfiles start-sessionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Runs the session start routine documented in CLAUDE.md. Ensures every session begins with a shared understanding of available time, current priorities, and a single concrete goal.
Run date to get the actual current time before doing anything else. Use this to:
Determine the project name and branch:
basename "$(git rev-parse --show-toplevel)"
git rev-parse --abbrev-ref HEAD
Then check whether the previous session ended cleanly:
jotter tail --project <project> --branch <branch> --limit 1
If the last entry is not a finish type (i.e. it's a start, checkpoint, or break), the previous session likely crashed or the user forgot /finish. Tell the user:
"The last session entry is a [type], not a finish — the previous session may not have run
/finish. Want me to run/recoverto reconstruct what happened, or skip and continue?"
Wait for their answer. If they say recover, invoke /recover before continuing with step 1.
Before reading anything else, ask:
"How much time do we have today, and any hard stops during the session?"
Wait for the answer. Use it to calibrate everything that follows — a 30-minute session gets one small task, a 2-hour session can tackle the next sprint item.
If the user mentions a hard stop at a specific time (e.g. "lunch at 1pm", "run at 2:30"), schedule a one-shot warning 15 minutes before using CronCreate:
cron: derived from the stop time minus 15 minutes (e.g. stop at 13:00 → 45 12 * * *)prompt: Hard stop in ~15 mins — time to reach a clean stopping point and run /finish.recurring: falseReport the job ID so it can be cancelled if plans change.
Read the last few entries to understand where things left off:
jotter tail --project <project> --branch <branch> --limit 5
If no entries exist for this branch, check if there's context from the project's main branch:
jotter tail --project <project> --branch main --limit 3
Surface the most recent finish entry's **Next:** field — that's the handover from last session. Present it verbatim (or a tight summary) before proposing a goal, so the user knows you've picked up exactly where things left off.
ROADMAP.md — Now / Next / Later priorities
Extract:
gh pr list --state open --json number,headRefName,labels,createdAt,isDraft | jq -r '.[] | "\(.number) | \(.headRefName) | \(.labels | map(.name) | join(", ")) | \(if .isDraft then "draft" else "open" end) | \(.createdAt[:10])"' | sort -t'|' -k1 -n
Display as a table (PR | Branch | Label | Status | Created). For each open PR, check if it has a ## TODO before merge checklist in the description. If so, surface the outstanding items — these are likely the first things to pick up this session.
Based on available time and the roadmap, propose one concrete thing to finish — not a wish list.
Format:
"Given [X time], I'd suggest we tackle [specific task] today — [one sentence on why it's the right pick: it's next on the roadmap / it's a blocker / it's a quick win that clears the way]. That should be completable in [Y time] leaving [Z buffer].
Anything you want to adjust, or shall we go?"
Rules:
If the session is 30 minutes or shorter: schedule a one-shot end warning instead of a recurring check-in — fire ~5 minutes before the end of the stated session duration:
cron: current time + (duration - 5 minutes), pinned to today's dateprompt: Session almost up — time to reach a clean stopping point and run /finish.recurring: falseIf the session is longer than 30 minutes: schedule a recurring 30-minute check-in:
cron: */30 * * * *prompt: 30-minute check-in — how's progress? On track for the session goal? Any hard stop coming up? Also a good moment for a 5-min break if needed.recurring: trueConfirm to the user that the timer is set, and note the job ID so it can be cancelled with CronDelete if plans change. Recurring cron jobs auto-expire after 3 days.
If the session is running past 7PM, say so directly:
"It's past 7PM — want to wrap up and pick this up next session?"
jotter write \
--project <project> \
--branch <branch> \
--type start \
--content "<session goal, available time, approach>"
When the user signals they're done or approaching a hard stop, prompt:
"Ready to wrap up? Run
/finishand I'll take you through the end-of-session checklist."
development
Mid-session checkpoint — snapshot current decisions and progress without archiving or cleaning up. Use when the user says "/save", "checkpoint", "save progress", or before risky operations like schema migrations, large refactors, or long-running tasks.
tools
Recover context from a crashed or unfinished session by reading the most recent JSONL transcript. Use when the user says "/recover", "recover session", "what was I doing", or when /start detects the last entry isn't a finish.
testing
TDD ping-pong pairing mode — collaborative spec, alternating test-write and implement roles
testing
Run the end-of-session checklist — write session summary to session log, move completed items to DONE.md, add new items to ROADMAP.md, check CLAUDE.md is current, review dirty git state and propose commits. Use when the user says "/finish", "/finish-session", "/end", "let's wrap up", "wrap up", "let's finish", "end this session", "let's call it", "that's enough for today", or similar.