Skip to content
Development
Command

/craft-planning

Feature roadmap and planning. Manage initiatives, concepts, open questions, and story creation from planning.

From plugin
4031 skills27 agents31 commands7 hooks1 MCP
shell
$ npx -y skills add drobins25/craft --agent claude-code

Ships with craft. Installing the plugin gets this command.

How 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/craft-planning

Context preview

What this command does when you run it.

Feature roadmap and planning. Manage initiatives, concepts, open questions, and story creation from planning.

Command definition

craft-planning.md
name: planning
description: "Feature roadmap and planning. Manage initiatives, concepts, open questions, and story creation from planning."
aliases:
  - planning

Craft Planning

You are managing the project's **feature roadmap** - the strategic planning layer that sits above cycles and stories. This is the PM's wiki for tracking what's coming, what's active, and what questions remain open.

Project Root

Set `PROJECT` to `${CRAFT_PROJECT_ROOT:-.}`. Set `PLANNING` to `$PROJECT/.craft/planning`.

Entry Flow

When `/craft:planning` is invoked, check state and route.

Step 1: Check if planning exists

Use **Glob** to check if `$PLANNING/active.md` exists.

**If NOT found** -> Go to **Setup Flow** (Step 2). **If found** -> Go to **Active Flow** (Step 3).

Step 2: Setup Flow (first time)

No planning folder exists yet. Help the user create one.

> "No planning folder found. Let's set up your roadmap."

Use **AskUserQuestion**:

question: "How would you like to start?"
header: "Setup"
options:
  - label: "Generate from input (Recommended)"
    description: "Feed me a transcript, doc, or spec and I'll extract concepts for your review"
  - label: "Start from scratch"
    description: "Describe what you're building and I'll structure it"
  - label: "Import from existing backlog"
    description: "Turn existing backlog stories into a planning roadmap"

**If "Generate from input"** -> Go to **Add From Input** (Step 5). **If "Start from scratch"** -> Go to **Conversational Setup** (Step 6). **If "Import from existing backlog"** -> Go to **Import Flow** (Step 7).

After setup completes, create the folder structure:

mkdir -p "$PLANNING"

Write `README.md` and `active.md` using templates from `${CLAUDE_PLUGIN_ROOT}/templates/planning/`. Replace template variables with actual values.

Step 3: Active Flow (planning exists)

Read the current state and suggest the most useful next action.

Use **Read** to read `$PLANNING/active.md`. Extract `last_updated` from frontmatter. Extract the Focus section (content between `## Focus` and the next `---` divider).

Use **Read** to read `$PLANNING/README.md`. Parse the Roadmap table to get concept names, statuses, and files.

**Assess what's most useful:**

1. **Concepts with non-empty `pending_decisions[]`** -> Suggest resuming alignment ("Concept X has N deferred decisions to resume"). This is the top recommendation because the user explicitly asked to be brought back to those items. 2. **Stale active.md** (last_updated >7 days) -> Suggest reviewing and updating 3. **Open questions exist** -> Mention count, offer to review 4. **Concepts with status `open` and no blockers** -> Suggest fleshing out or creating stories 5. **Concepts with status `planned` and all stories complete** -> Prompt completion confirmation 6. **Nothing urgent** -> Show full roadmap and offer menu

Present the assessment and menu:

> "[Focus section content]" > > [Assessment: e.g., "4 open questions across 3 concepts. 'CDB Mapping' is ready for stories."]

Use **AskUserQuestion**:

question: "What would you like to do?"
header: "Planning"
options:
  - label: "[Most useful action] (Recommended)"
    description: "[context-specific description]"
  - label: "Add concept or input"
    description: "Add a new concept or feed new input to existing ones"
  - label: "Review open questions"
    description: "See all unanswered questions across concepts"
  - label: "Create stories from a concept"
    description: "Turn a mature concept into cycle stories"

Route based on selection -> the flows below.

**If the selected action is "Resume deferred decisions on [concept]":** Invoke the [Alignment Walkthrough](#alignment-walkthrough) for the named concept. The walkthrough's resume behavior regenerates `pending_decisions[]` items as TaskTool tasks first, then derives any new candidates from current concept state.

Step 4: Update active.md

**Call this after any write to a planning file.** This keeps `last_updated` current automatically.

Read $PLANNING/active.md
Update `last_updated:` in frontmatter to today's date (YYYY-MM-DD)
Write $PLANNING/active.md

If the current focus has changed (e.g., a new concept was activated, a concept was completed), also update the `## Focus` section and `current_concept:` in frontmatter.

---

Flows

Step 5: Add From Input

The user provides a transcript, doc, spec, or other input. Craft extracts candidate concepts and confirms with the user before writing anything.

**5a. Gather input**

Use **AskUserQuestion**:

question: "What input should I work from?"
header: "Input"
options:
  - label: "Paste or describe now"
    description: "I'll type or paste the content in my next message"
  - label: "Read a file"
    description: "Point me to a file path to read"
  - label: "Read from conversation"
    description: "Use what we've discussed in this session"

If file path provided, use **Read** to read it. If the file is a transcript, treat it as raw discovery material.

**5b. Extract candidate concepts**

Analyze the input and identify distinct features, initiatives, or work items. For each candidate, note:

  • Suggested name (slug-friendly)
  • One-line description
  • Scope classification (core, stretch, deferred, external)
  • Key open questions from the input
  • Any dependencies on other candidates

**5c. Confirm with user (MANDATORY)**

Present the extracted candidates via **AskUserQuestion** with multiSelect:

question: "I found [N] potential concepts. Which ones are real work you intend to do?"
header: "Confirm"
options:
  - label: "[Concept 1 name]"
    description: "[one-line description] (scope: [classification])"
  - label: "[Concept 2 name]"
    description: "[one-line description] (scope: [classification])"
  - label: "[Concept 3 name]"
    description: "[one-line description] (scope: [classification])"
multiSelect: true

**Only confirmed concepts get written.** Unselected candidates are dis

Read more
Read it on GitHub ↗

Showing the first part of this file.

Ships withcraft

Stop Vibing. Start Crafting. Claude Code plugin: guided + controlled development orchestration harness with built-in workflow + state management, for designing + building durable, production-ready software through the entire product lifecycle - new projects

Get the whole plugin, auto-invoked
Stats
40
Stars
0
Views
5
Forks
Active
Maintenance
Shell
Language
MIT
License
2d ago
Last commit
3mo ago
Created

Repo: drobins25/craft