Skip to content
Development
Command

/plan

Structured planning - explore codebase, design architecture, evaluate options, produce detailed implementation plan

From plugin
lets-workflow
1726 skills15 agents26 commands
> /plugin marketplace add restarter/lets-workflow
> /plugin install lets@lets-workflow

Command definition

plan.md
description: Structured planning - explore codebase, design architecture, evaluate options, produce detailed implementation plan
argument-hint: "[feature description] [--fast] [--idea] [--solo]"

Plan

Turn a task or idea into a detailed implementation plan. Clarifies scope, explores codebase, discusses approaches with user, designs architecture for selected approaches, evaluates with experts, then writes a bite-sized plan.

**HARD-GATE: This command produces a plan, NOT code. No files are modified except .lets/plans/, the agent report files under .lets/reports/ that the agent-report skill names, and the team-mode bookkeeping a dispatch makes member-run and `/lets:team` write - `.lets/cache/route-*` (member briefs), `.lets/cache/routes-*` (member-run's routes copy at a spawn), `.lets/cache/nudge-*` (op=receive), `.lets/cache/member-*` (a spawn brief) and the team file's `## 3` rows, `## 7` lines and `## 8` GAP lines - never a repository file. The command ENDS when the plan is saved - implementation starts ONLY when the user runs `/lets:execute`. Nothing the user says after the plan ("ok", "approved", a question) starts it.**

> **IMPORTANT:** If the spec below invokes any deferred tool (e.g. `AskUserQuestion`), you MUST load and call it as specified. Never skip the call, never substitute a default answer of your own — the tool invocation is part of the contract. This is critical.

--fast mode

`/lets:plan --fast` (combinable with a task-id or feature description, e.g. `/lets:plan lets-abc --fast`) skips the three subagent-dispatch phases - **Step 4** (explorer agents), **Step 6** (architect agents), **Step 7** (expert agents) - and replaces them with orchestrator-only equivalents (read files yourself, draft approaches inline, self-evaluate risks). Use it when the user explicitly wants a collaborative talk-through without subagent budget: "let's just plan it together, I'll review". Everything else - clarifying questions, interactive discussion, plan format, tracker recording, the saved file - is identical to the full flow. The plan's shape doesn't change; only *how* it's built.

When `--fast` is **not** set, run the full flow exactly as written.

--idea mode

`/lets:plan --idea` (combinable with a task-id; `--fast` is a no-op here, no agents run anyway) writes a **concept document**, not a plan: the wish, captured before anyone decides how to build it. `/lets:execute` never picks it up and refuses it by path; a later `/lets:plan` on the same task reads it as input.

| Step | In `--idea` mode | |---|---| | 3 | Questions about the wish: who wants it, why, how it should feel, what triggers it, what is out of scope, who takes it over (the handoff target) | | 4, 6, 7 | SKIPPED - no codebase exploration, no architecture, no experts; no code snippets or file paths anywhere in the document | | 5 | Discuss behaviour variants the user would notice, not implementations | | 9 | The idea template below - NO `STOP` banner (there is nothing to execute) | | 10 | Save via `Skill(skill: "lets:artifact-path", args: "kind=idea ext=md task={TASK_ID}")` and record it (below) |

Idea template:

# {Idea name}

> **IDEA BANK ENTRY - NOT A PLAN.** Nothing here is executable; /lets:execute refuses this file.

**Task:** {task-id or none}
**Date:** {YYYY-MM-DD}

## Problem
## What exists today
## The wish (user-visible behaviour)
## Triggers
## Constraints
## Open questions
## Handoff

When a task is active:

**Tracker protocol:** `Skill(skill: "lets:protocol-tracker")` before this and any later `lets-tracker` block here, unless its text is in your current context.

comment-add task=<task-id> body="Idea document: .lets/plans/<ARTIFACT basename>"

Output: the saved path and one line - "Idea saved - run `/lets:plan` on this task to turn it into a plan."

Step 1: Capture the Goal

**Parse the argument:** strip a `--fast` token if present (sets fast mode), a `--solo` token (team mode off - `protocol/agents.md` `## Team mode`; route gets `solo`) and an `--idea` token (sets idea mode, `## --idea mode`); the rest is the feature goal.

**If a feature goal was provided:** use it.

**If no goal provided:** ask:

> "What are you trying to build or change?"

Wait for answer before proceeding.

Step 2: Active Task Context

Use the **detect-task** skill to find the active task: `Skill(skill: "lets:detect-task")`.

If Step 1 captured an explicit `<task-id>` argument (e.g. an interactive `--flow plan` launch into a fresh worktree), resolve-and-claim it per the **detect-task** *explicit task-id argument* convention - pointer only, don't re-paraphrase. `--orc` is stripped per that convention before the task-id test.

If task found:

show task=<task-id>          # returns {id,title,status,url,description}
comment-list task=<task-id>  # existing comments; absent -> continue with the description alone and say so

Load: title, description, existing comments, plus any further field the adapter's `show` declares in `returns:` (beads declares `design`).

**Idea input (normal mode).** Look for an idea document on this task and, when one exists, Read it and treat it as input to Step 3:

LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
ls -t "$LETS_PROJECT_ROOT/.lets/plans/"*"-{task-id}-idea"*.md 2>/dev/null | head -1

If no task found, warn: > "No active task detected. Every session needs a task. Create one (the `create-task` skill) or pick from the tracker's `ready` view."

Do not block - continue if user acknowledges.

Step 3: Clarifying Questions

**Ask questions BEFORE exploration.** Scope must be clear before launching expensive agents.

Based on (goal + task description), identify unknowns that would change the architecture.

Present ALL questions at once - max 5, min 2.

Categories to draw from:

  • **Scope**: What's explicitly OUT of scope?
  • **Behavior**: Edge cases, error handling, user-facing behavior
  • **Constraints**: Performance, compatibi
Read more
@restarter
Ships withlets-workflow

A development workflow plugin for Claude Code Stop babysitting your AI. Start shipping with it.

1725 skills15 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
17
Star history of restarter/lets-workflow on GitHub, a chart by star-history.com

Other commands on lets-workflow.

backlog

backlog

Command

Backlog review and cleanup - multi-agent backlog review, quick no-agent pulse (--fast), or interactive triage cleanup

end

end

Command

End a work session - a settlement pass that reconciles uncommitted / unpushed work + session context into git, the tracker, and a…

execute

execute

Command

Execute implementation plan from /lets:plan - inline in native plan mode, or delegated to named implementer subagents you review…

More commands from other plugins.

build
Auto-invoked

build

Command

Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.

@addyosmani@addyosmaniInstall Command