Claude
Skills
Sign in
Back

linear-project-create

Included with Lifetime
$97 forever

Create a Linear project from a set of plans with a specific prefix. Generates a comprehensive project spec from all related plans, creates the project in Linear, and optionally creates issues for each plan. Use when user wants to sync plans to a Linear project.

General

What this skill does


# Create Linear Project from Plans

You are now executing the linear-project-create skill. Follow these steps immediately:

## Step 1: Verify Linear MCP Installation

Before proceeding, verify the Linear MCP server is available:

1. **Attempt to list teams**: Call `mcp__linear-server__list_teams`
2. **If successful**: Store teams list and proceed to Step 2
3. **If fails or unavailable**: Display error and exit:

```
════════════════════════════════════════
Linear MCP Not Available

The Linear MCP server (linear-server) is not installed or not configured.

To use Linear integration features:
1. Install the Linear MCP server
2. Configure your Linear API credentials
3. Restart Claude Code

For installation instructions, see:
https://github.com/anthropics/linear-mcp
════════════════════════════════════════
```

## Step 2: Get Plan Prefix

1. **Check if prefix provided in arguments**: Look for prefix in $ARGUMENTS
2. **If not provided, use AskUserQuestion**:

```
Question: "What is the plan prefix you want to create a project for? (e.g., 'auth', 'appt', 'checkout')"
Header: "Prefix"
Options: [detected prefixes from PROGRESS.md if any, plus "Other" option]
multiSelect: false
```

3. **Store the prefix** for filtering plans

## Step 2b: Check for Spec File

Check if a spec file exists for this prefix:

1. **Use Glob**: Check if `plans/[prefix]-spec.md` exists
2. **If spec exists**:
   - Store `has_spec = true`
   - Read the spec file content for later use
3. **If no spec**:
   - Store `has_spec = false`

## Step 3: Find Related Plans

1. **Read PROGRESS.md**: Read `plans/PROGRESS.md`
2. **Find matching section**: Look for table containing plans with the prefix
3. **Extract plan filenames**: Get all plans matching `[prefix]-*.md` pattern (exclude spec file)
4. **Verify files exist**: Use Glob to confirm `plans/[prefix]-*.md` files exist

If no plans found:

```
════════════════════════════════════════
No Plans Found

No plans found with prefix "[prefix]" in plans/PROGRESS.md.

Available prefixes detected:
- auth (5 plans)
- api (3 plans)

To create plans first, run:
  /planner:create "your feature description"
  OR (if using specs)
  /planner:spec-create [prefix] "[description]"
  /planner:spec-plans-sync [prefix]
════════════════════════════════════════
```

## Step 4: Read All Plan Contents

For each plan file matching the prefix:

1. **Read the plan file**: Read `plans/[prefix]-NN-name.md`
2. **Extract key sections**:
   - **Objective**: What the plan accomplishes
   - **Steps**: Implementation steps
   - **Files to Modify**: Affected files
   - **Testing**: How to verify changes
3. **Store content** for spec generation

## Step 4b: Ask About Spec Usage (if has_spec = true)

If a spec file exists, ask the user how they want to use it:

```
Question: "A spec file exists for this prefix. How would you like to use it for the Linear project?"
Header: "Spec Usage"
Options: [
  "Use spec as description (Recommended)",
    description: "Use the full spec content as the project description"
  "Summarize spec",
    description: "Generate a condensed summary of the spec for the project"
  "Link to spec file",
    description: "Just reference the spec file location in the description"
  "Ignore spec - use plans only",
    description: "Generate description from plans, ignoring the spec"
]
multiSelect: false
```

Store the selection as `spec_usage`.

## Step 5: Generate Project Spec

Create a comprehensive project description based on `spec_usage` (or from plans if no spec):

**If `spec_usage = "Use spec as description"` or `has_spec = true` with spec selected:**

Use the spec content directly, extracting key sections:
- Overview from Section 2.1 (Purpose)
- Goals from Section 2.2
- Scope from Section 2.3
- Requirements from Section 3
- Technical details from Section 5
- Implementation from Section 6

Format as markdown for Linear project description.

**If `spec_usage = "Summarize spec"`:**

Generate a condensed summary (500-1000 chars) of the spec covering:
- Main purpose
- Key features
- Technical approach
- Success criteria

**If `spec_usage = "Link to spec file"`:**

Create minimal description with link:
```markdown
## Overview

See full specification: `plans/[prefix]-spec.md`

## Quick Summary
[2-3 sentence summary of spec purpose]

## Plans
[N] implementation plans are tracked in this project.
```

**If `spec_usage = "Ignore spec"` or `has_spec = false`:**

Create a comprehensive project description by synthesizing all plan contents:

```markdown
## Overview

[Synthesized summary of what this feature does based on all plan objectives]

## Business Logic

[Combined business logic from all plan objectives, organized logically]

## Implementation Steps

### Phase 1: [First plan name]
[Steps from first plan]

### Phase 2: [Second plan name]
[Steps from second plan]

... [continue for all plans]

## Files Affected

[Combined unique list of all files from all plans]
- path/to/file1.ts: [description]
- path/to/file2.ts: [description]

## Testing Guide

### [First plan name]
[Testing instructions]

### [Second plan name]
[Testing instructions]

... [continue for all plans]

## Plan Dependencies

[Execution order based on plan dependencies]
- Round 1 (parallel): plan-00, plan-04
- Round 2: plan-01 (depends on 00)
- Round 3: plan-02 (depends on 01)
```

## Step 6: Get Team Selection

1. **Use teams from Step 1** (already fetched)
2. **Use AskUserQuestion** for team selection:

```
Question: "Which team should this project be created in?"
Header: "Team"
Options: [list of team names]
multiSelect: false
```

3. **Store selected team ID**

## Step 7: Get Project Name

1. **Suggest a name** based on the prefix (e.g., "Auth Implementation", "Appointment System")
2. **Use AskUserQuestion**:

```
Question: "What should the project be named?"
Header: "Name"
Options: ["[Suggested Name] (Recommended)", "Use prefix: [prefix]", "Other"]
multiSelect: false
```

3. **Store project name**

## Step 8: Create Project in Linear

1. **Create the project**:
   ```
   mcp__linear-server__create_project:
     name: [project name]
     description: [generated spec from Step 5]
     team: [selected team ID]
   ```
2. **Get project details**: Extract project ID and URL from response
3. **Store project URL** for plan updates

## Step 9: Ask About Issue Creation

1. **Use AskUserQuestion**:

```
Question: "Would you like to create Linear issues for each plan in this project?"
Header: "Issues"
Options: [
  "Yes - Create issues for all plans (Recommended)",
  "No - Project only"
]
multiSelect: false
```

2. **If "No"**: Skip to Step 11
3. **If "Yes"**: Continue to Step 10

## Step 10: Create Issues for Each Plan

For each plan file:

1. **Read plan content** (already in memory from Step 4)
2. **Create issue**:
   ```
   mcp__linear-server__create_issue:
     title: [plan filename without .md, e.g., "auth-01-database"]
     description: [full plan content as markdown]
     team: [selected team ID]
     project: [project ID from Step 8]
   ```
3. **Get issue URL** from response
4. **Store issue URL** for plan file update

## Step 11: Update All Plan Files

For each plan file:

1. **Read the plan file** if needed
2. **Find the `# Configuration` section**
3. **Add linear_project and linear_issue fields**:

**Before:**
```markdown
# Configuration

depends_on: "auth-00-setup.md"

# Plan: auth-01-database.md
```

**After:**
```markdown
# Configuration

depends_on: "auth-00-setup.md"
linear_project: https://linear.app/team/project/PROJECT-ID
linear_issue: https://linear.app/team/issue/AUTH-123

# Plan: auth-01-database.md
```

4. **Write updated content** back to file

## Step 12: Report Results

Display creation summary:

```
════════════════════════════════════════
Linear Project Created Successfully

Project: [project name]
URL: https://linear.app/team/project/PROJECT-ID
Team: [team name]
Plans included: [N]

[If issues created:]
Issues Created: [N]

Plan → Issue Mapping:
- auth-00-setup.md → AUTH-100

Related in General