/start
Start session - restore context, show tasks, select work item
$ npx -y skills add restarter/lets-workflow --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/start
Context preview
What this command does when you run it.
Start session - restore context, show tasks, select work item
Command definition
start.mddescription: Start session - restore context, show tasks, select work item
argument-hint: "[task-id|--continue|--main]"
Session Start
Restore context and prepare for work. **User MUST select a task before working.**
> **LETS Notice — surface it.** If a `## LETS Notice` block is present in the injected context (a one-time message the SessionStart hook emits — e.g. workflow rules outdated/missing, a migration result), it MUST be the **first line of your output** for `/lets:start` (`⚠️ <notice text>`), before the session summary. Don't omit it — it tells the user a `/lets:update` or `/lets:init` is needed. Mention it once, then continue with the steps below; don't repeat it in later turns.
Usage
/lets:start # Full flow - show history, tasks, select work
/lets:start <task-id> # Quick start - jump to specific task
/lets:start --continue # Resume last in_progress task with session context
/lets:start --main # Project-assistant / PM mode - no task, read + triage on merge-branch
/lets:start --assistant # Alias of --main
Step 0: Argument Parsing
**If `<task-id>` provided** (e.g., `/lets:start lets-rmcwo`):
- Skip Steps 1, 3, 5 (session history, orient, task selection)
- Run Step 2 (git state) briefly
- the tracker's `show` + `comment-list` for `<task-id>` — read the FULL description and ALL comments, never truncate
- Jump to Step 6 (branch) with this task
**If `--continue`:**
- Run Step 1 (session history) - important for context recovery
- the tracker's `list-by-status` (in_progress) - find task(s)
- If exactly 1 in_progress -> use it, skip Step 5
- If multiple -> show selection with context from recent sessions
- If none -> fall through to full flow
**If `--main` or `--assistant` provided** (project-assistant / PM mode):
- Deliberate **NO-TASK** session stance. Do NOT select, claim, or auto-create a task.
- **Precedence:** mutually exclusive with `<task-id>` and `--continue`. If an explicit task-id or `--continue` is ALSO present, the explicit task **wins** (run the normal task flow) and `--main` is ignored - tell the user it was dropped because a task was specified.
- **Skip** Step 5 (Task Selection), Step 6 (Take Task), Step 8 (Task Size Assessment) - all task-bound.
- **Run** Step 1 (session history), Step 2 (git state). The orient snapshot is rendered once by Main Mode M1 (below), AFTER the session-boundary write - do NOT also run Step 3 (that would render orient twice).
- Then go to `## Main Mode` (below) instead of Steps 4-9.
**If no arguments** -> full flow (Steps 1-9 as below)
Step 1: Previous Session Context
LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
BRANCH=$(git branch --show-current)
BRANCH_SLUG=$(echo "$BRANCH" | tr '/' '-')
mkdir -p "$LETS_PROJECT_ROOT/.lets/sessions"
# Read last 3 sessions for this branch (or all branches if none found)
SESSIONS=$(ls -t "$LETS_PROJECT_ROOT/.lets/sessions/"*"-${BRANCH_SLUG}.md" 2>/dev/null | head -3)
if [ -z "$SESSIONS" ]; then
SESSIONS=$(ls -t "$LETS_PROJECT_ROOT/.lets/sessions/"*.md 2>/dev/null | head -3)
fi**Read EACH session file** found above using the Read tool (up to 3 files in parallel). Then present a compact summary of all sessions. Focus on: what was done, key decisions, next steps suggested.
Step 2: Git State
git branch --show-current
git status --short
if git rev-parse --verify --quiet HEAD >/dev/null; then
git log --oneline -3
else
echo "(no commits yet — fresh repo)"
fi
# Unfinished PR-review restore. /lets:review keys its record by session id, so the session that
# could act on it is gone - a fresh session is exactly where a stray must be surfaced.
LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
for f in "$LETS_PROJECT_ROOT"/.lets/sessions/.review-restore-*; do
[ -e "$f" ] || continue
printf 'STRAY REVIEW RESTORE %s -> ref: %s | pr: %s | stash: %s\n' "${f##*/}" \
"$(sed -n 's/^ref: //p' "$f" | head -1)" \
"$(sed -n 's/^pr: //p' "$f" | head -1)" \
"$(sed -n 's/^stash: //p' "$f" | head -1)"
doneReport: branch, uncommitted changes, recent commits. **On a `STRAY REVIEW RESTORE` line**, tell the user in one line: a PR review did not finish restoring, `git checkout <ref>` returns them, and a listed `stash:` is still in `git stash list`. Report only - never act: `.lets/` is shared by every worktree of this repo, so the stray may belong to a session that is still running. **If the repo has no commits yet** (the `else` branch above fires), that's fine — say so in plain text; offer `git commit --allow-empty -m "chore: initial setup"` if the user wants an anchor for `git log` to work later. **Don't** raise `/lets:init` here (it's a separate concern) and **don't** treat the missing HEAD as a fatal error.
Step 3: Orient
Invoke `Skill(skill: "lets:orient")` - it renders Where you are / In flight / Next up (and the Project counts if the tracker provides them). This is the same snapshot `/lets:status` shows; start reuses it, then drives task selection below.
Step 4: Present
The orient snapshot (Step 3) already shows In flight + Next up - don't repeat them. Present the recovery line, then the snapshot:
## Recent Sessions
{1-2 line recovery from the recent session file(s)}
{orient snapshot from Step 3 - Where you are / In flight / Next up / Project}Step 5: What do we do? (task selection - MANDATORY)
**Every session needs a task.** From the orient snapshot, offer the moves:
> - **Resume** the active task if In flight shows one you want to continue. > - **Pick** one from Next up (the top 5 ready - for the full list, `/lets:backlog`). > - **Create** a new task (the `create-task` skill - tracker `create` verb), or claim an existing one (tracker `set-status=in_progress`).
**If user doesn't want to pick a task** but describes work (e.g., "just want to fix proxy config"):
- Auto-create via the `create-task` skill (e.g. "Fix proxy config", a P3 task)
- Inform user: "Created task XX, work
Read more
description: Start session - restore context, show tasks, select work item argument-hint: "[task-id|--continue|--main]"
Session Start
Restore context and prepare for work. **User MUST select a task before working.**
> **LETS Notice — surface it.** If a `## LETS Notice` block is present in the injected context (a one-time message the SessionStart hook emits — e.g. workflow rules outdated/missing, a migration result), it MUST be the **first line of your output** for `/lets:start` (`⚠️ <notice text>`), before the session summary. Don't omit it — it tells the user a `/lets:update` or `/lets:init` is needed. Mention it once, then continue with the steps below; don't repeat it in later turns.
Usage
/lets:start # Full flow - show history, tasks, select work /lets:start <task-id> # Quick start - jump to specific task /lets:start --continue # Resume last in_progress task with session context /lets:start --main # Project-assistant / PM mode - no task, read + triage on merge-branch /lets:start --assistant # Alias of --main
Step 0: Argument Parsing
**If `<task-id>` provided** (e.g., `/lets:start lets-rmcwo`):
- Skip Steps 1, 3, 5 (session history, orient, task selection)
- Run Step 2 (git state) briefly
- the tracker's `show` + `comment-list` for `<task-id>` — read the FULL description and ALL comments, never truncate
- Jump to Step 6 (branch) with this task
**If `--continue`:**
- Run Step 1 (session history) - important for context recovery
- the tracker's `list-by-status` (in_progress) - find task(s)
- If exactly 1 in_progress -> use it, skip Step 5
- If multiple -> show selection with context from recent sessions
- If none -> fall through to full flow
**If `--main` or `--assistant` provided** (project-assistant / PM mode):
- Deliberate **NO-TASK** session stance. Do NOT select, claim, or auto-create a task.
- **Precedence:** mutually exclusive with `<task-id>` and `--continue`. If an explicit task-id or `--continue` is ALSO present, the explicit task **wins** (run the normal task flow) and `--main` is ignored - tell the user it was dropped because a task was specified.
- **Skip** Step 5 (Task Selection), Step 6 (Take Task), Step 8 (Task Size Assessment) - all task-bound.
- **Run** Step 1 (session history), Step 2 (git state). The orient snapshot is rendered once by Main Mode M1 (below), AFTER the session-boundary write - do NOT also run Step 3 (that would render orient twice).
- Then go to `## Main Mode` (below) instead of Steps 4-9.
**If no arguments** -> full flow (Steps 1-9 as below)
Step 1: Previous Session Context
LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
BRANCH=$(git branch --show-current)
BRANCH_SLUG=$(echo "$BRANCH" | tr '/' '-')
mkdir -p "$LETS_PROJECT_ROOT/.lets/sessions"
# Read last 3 sessions for this branch (or all branches if none found)
SESSIONS=$(ls -t "$LETS_PROJECT_ROOT/.lets/sessions/"*"-${BRANCH_SLUG}.md" 2>/dev/null | head -3)
if [ -z "$SESSIONS" ]; then
SESSIONS=$(ls -t "$LETS_PROJECT_ROOT/.lets/sessions/"*.md 2>/dev/null | head -3)
fi**Read EACH session file** found above using the Read tool (up to 3 files in parallel). Then present a compact summary of all sessions. Focus on: what was done, key decisions, next steps suggested.
Step 2: Git State
git branch --show-current
git status --short
if git rev-parse --verify --quiet HEAD >/dev/null; then
git log --oneline -3
else
echo "(no commits yet — fresh repo)"
fi
# Unfinished PR-review restore. /lets:review keys its record by session id, so the session that
# could act on it is gone - a fresh session is exactly where a stray must be surfaced.
LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
for f in "$LETS_PROJECT_ROOT"/.lets/sessions/.review-restore-*; do
[ -e "$f" ] || continue
printf 'STRAY REVIEW RESTORE %s -> ref: %s | pr: %s | stash: %s\n' "${f##*/}" \
"$(sed -n 's/^ref: //p' "$f" | head -1)" \
"$(sed -n 's/^pr: //p' "$f" | head -1)" \
"$(sed -n 's/^stash: //p' "$f" | head -1)"
doneReport: branch, uncommitted changes, recent commits. **On a `STRAY REVIEW RESTORE` line**, tell the user in one line: a PR review did not finish restoring, `git checkout <ref>` returns them, and a listed `stash:` is still in `git stash list`. Report only - never act: `.lets/` is shared by every worktree of this repo, so the stray may belong to a session that is still running. **If the repo has no commits yet** (the `else` branch above fires), that's fine — say so in plain text; offer `git commit --allow-empty -m "chore: initial setup"` if the user wants an anchor for `git log` to work later. **Don't** raise `/lets:init` here (it's a separate concern) and **don't** treat the missing HEAD as a fatal error.
Step 3: Orient
Invoke `Skill(skill: "lets:orient")` - it renders Where you are / In flight / Next up (and the Project counts if the tracker provides them). This is the same snapshot `/lets:status` shows; start reuses it, then drives task selection below.
Step 4: Present
The orient snapshot (Step 3) already shows In flight + Next up - don't repeat them. Present the recovery line, then the snapshot:
## Recent Sessions
{1-2 line recovery from the recent session file(s)}
{orient snapshot from Step 3 - Where you are / In flight / Next up / Project}Step 5: What do we do? (task selection - MANDATORY)
**Every session needs a task.** From the orient snapshot, offer the moves:
> - **Resume** the active task if In flight shows one you want to continue. > - **Pick** one from Next up (the top 5 ready - for the full list, `/lets:backlog`). > - **Create** a new task (the `create-task` skill - tracker `create` verb), or claim an existing one (tracker `set-status=in_progress`).
**If user doesn't want to pick a task** but describes work (e.g., "just want to fix proxy config"):
- Auto-create via the `create-task` skill (e.g. "Fix proxy config", a P3 task)
- Inform user: "Created task XX, work
A development workflow plugin for Claude Code Stop babysitting your AI. Start shipping with it.
Other commands on lets-workflow.
- /ask
Ask a single expert agent a question - like a Slack ping to a colleague
Open command - /backlog
Backlog review and cleanup - multi-agent backlog review, quick no-agent pulse (--fast), or interactive triage cleanup
Open command - /check
Quick sanity check - code (inline 6-perspective) or plan (--plan).
Open command - /done
Finish a task - document, create PR or merge, close
Open command - /end
End a work session - a settlement pass that reconciles uncommitted / unpushed work + session context into git, the tracker, and a session snapshot file. --pre-compact skips settlement and only writes the shared snapshot, keeping the session going.
Open command - /execute
Execute implementation plan from /lets:plan - load plan and enter native plan mode
Open command

