--- description: Create Linear issue and run full planning workflow in one step allowed-tools: [Bash, LinearMCP, AtlassianMCP, SlackMCP, PlaywrightMCP, Context7MCP] argument-hint: "" <project> <jira-ticket-id> --- # Creating & Planning: $1 for Project: $2 You are **creating a new Linear issue** and running the **Planning Phase** in one step. ## 🚨 CRITICAL: Safety Rules **READ FIRST**: ``$CCPM_COMMANDS_DIR/SAFETY_RULES.md`` **NEVER** submit, post, or update anything to Jira, Confluence, BitBucket, or Slack without explicit user confirmation, even in bypass permission mode. - ✅ **READ-ONLY** operations are permitted (fetch, search, view) - ⛔ **WRITE operations** require user confirmation - ✅ **Linear** operations are permitted (our internal tracking) When in doubt, ASK before posting anything externally. ## Project Configuration **IMPORTANT**: This command uses CCPM agents for efficient project detection and configuration loading. ### Auto-Activate Skills ```markdown Skill(project-detection): Auto-activates for project context Skill(project-operations): Provides workflow guidance ``` ### Load Project Configuration with Agents Use project agents to detect and load configuration: ```javascript // Step 1: Detect or get project from argument const projectArg = "$2" // Optional project argument let projectContext if (projectArg && projectArg !== "") { // User specified project, load it projectContext = Task(project-context-manager): ` Get context for project: ${projectArg} Format: standard Include all sections: true ` } else { // Auto-detect from current directory projectContext = Task(project-context-manager): ` Get active project context Format: standard Include all sections: true ` } if (projectContext.error) { console.error(`❌ ${projectContext.error.message}`) projectContext.error.suggestions?.forEach(s => console.log(` - ${s}`)) exit(1) } // Now we have all project configuration in structured format: const PROJECT_ID = projectContext.detected.project_id const PROJECT_NAME = projectContext.config.project_name const SUBPROJECT = projectContext.detected.subproject // NEW: for monorepos const LINEAR_TEAM = projectContext.config.linear.team const LINEAR_PROJECT = projectContext.config.linear.project const LINEAR_DEFAULT_LABELS = projectContext.config.linear.default_labels const EXTERNAL_PM_ENABLED = projectContext.config.external_pm.enabled const EXTERNAL_PM_TYPE = projectContext.config.external_pm.type const JIRA_CONFIG = projectContext.config.external_pm.jira const CONFLUENCE_CONFIG = projectContext.config.external_pm.confluence const TECH_STACK = SUBPROJECT ? projectContext.config.subproject?.tech_stack : projectContext.config.tech_stack // Display context console.log(projectContext.display.title) // e.g., "My Monorepo › frontend" ``` **Benefits of Agent-Based Approach**: - ~80% token reduction vs inline logic - Automatic subdirectory detection for monorepos - Consistent error handling - Structured, validated output - Tech stack awareness (overall or per-subproject) ## Workflow ### Step 1: Create Linear Issue **IMPORTANT**: Use shared Linear helpers for resilient state and label handling: ```markdown READ: commands/_shared-linear-helpers.md ``` Use **Linear MCP** to create a new issue using loaded configuration: **Title**: $1 **Team**: ${LINEAR_TEAM} (from config) **Project**: ${LINEAR_PROJECT} (from config) **Status**: Backlog **Labels**: ${LINEAR_DEFAULT_LABELS} + subproject label (if in monorepo) ```javascript // Build labels array const labels = [...LINEAR_DEFAULT_LABELS] // Add subproject label for monorepo context if (SUBPROJECT) { labels.push(SUBPROJECT) console.log(`📁 Subproject context: ${SUBPROJECT}`) } // Ensure all labels exist before creating issue try { const validLabels = await ensureLabelsExist(LINEAR_TEAM, labels, { descriptions: { 'planning': 'Task is in planning phase', 'research': 'Research and discovery required', 'implementation': 'Task is being implemented', 'verification': 'Task is being verified' } }) // Get valid state ID for "Backlog" const backlogStateId = await getValidStateId(LINEAR_TEAM, "Backlog") // Create issue with validated state and labels const issue = linear_create_issue({ title: "$1", team: LINEAR_TEAM, project: LINEAR_PROJECT, stateId: backlogStateId, labelIds: validLabels }) } catch (error) { if (error.message.includes('Could not find state') || error.message.includes('Invalid state')) { console.error(`❌ Linear State Error: ${error.message}`) console.log(`💡 Tip: Run '/ccpm:utils:status' to see available states for your team`) throw error } throw error } ``` **Initial Description**: ```markdown ## Task $1 **Jira Reference**: $3 (if provided) --- _Planning in progress..._ ``` Save the created Linear issue ID. Display: ``` ✅ Linear Issue Created! 📋 Issue: [WORK-123] 🔗 URL: https://linear.app/workspace/issue/[WORK-123] 📝 Title: $1 🏢 Project: $2 ⏳ Starting planning workflow... ``` ### Step 2: Execute Shared Planning Workflow **READ**: `commands/_shared-planning-workflow.md` Execute the shared planning workflow to complete planning for the newly created issue. **Set required context variables:** - `LINEAR_ISSUE_ID` = [created issue ID from Step 1] - `JIRA_TICKET_ID` = $3 (optional Jira ticket ID) - `PROJECT_CONFIG` = [loaded in project configuration section] - `EXTERNAL_PM_ENABLED` = [from config] - `EXTERNAL_PM_TYPE` = [from config] - `JIRA_ENABLED`, `CONFLUENCE_ENABLED`, `SLACK_ENABLED` = [from config] **Execute these steps from the shared workflow:** 1. **Step 0.5**: Detect and analyze images in the Linear issue - Uses `commands/_shared-image-analysis.md` logic - Finds UI mockups, diagrams, screenshots - Analyzes and formats for Linear description 2. **Step 0.6**: Detect and extract Figma designs - Uses `commands/_shared-figma-detection.md` logic - Identifies live Figma links - Extracts design tokens and specifications - Caches results in Linear comments 3. **Step 1**: Gather external PM context (Jira, Confluence, Slack) - Only if external PM is enabled - Fetches Jira ticket details and linked issues - Searches Confluence for related documentation - Finds Slack thread discussions - Checks BitBucket for related PRs 4. **Step 2**: Analyze codebase - Identifies relevant files to modify - Maps patterns and conventions - Determines dependencies 5. **Step 2.5**: Invoke engineer agents for technical analysis - Selects appropriate agents based on task type - Backend tasks → `backend-architect` - Frontend tasks → `frontend-developer` - Mobile tasks → `mobile-developer` - Full-stack → both backend and frontend in parallel - Security-critical → add `security-auditor` 6. **Step 3**: Update Linear description with comprehensive research - Creates implementation checklist - Inserts visual context (images + Figma designs) - Adds research findings - Includes agent analysis - Links all external resources 7. **Step 4**: Confirm completion - Display status summary - Show research added - Provide Linear issue URL This ensures the new issue receives the same comprehensive planning as existing issues: - Image analysis - Figma design extraction - External PM research - Codebase analysis - Implementation checklist generation ### Step 3: Show Status & Interactive Next Actions **READ**: ``$CCPM_COMMANDS_DIR/_shared-linear-helpers.md`` Use **Linear MCP** to get current status. Display: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ Create & Planning Complete! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 Linear Issue: [WORK-123] 🔗 URL: https://linear.app/workspace/issue/[WORK-123] 📝 Jira Reference: $3 (if provided) 📊 Current Status: Planning 🎯 Progress: 0 of [N] subtasks complete (0%) 🏷️ Labels: planning, research-complete ⏱️ Time in status: Just created 📈 Complexity: [Low/Medium/High] 📊 Research Summary: - Gathered context from [X] Jira tickets (if applicable) - Found [Y] relevant Confluence docs (if applicable) - Analyzed [Z] related Slack discussions (if applicable) - Identified [N] files to modify - Researched best practices from Context7 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 💡 Suggested Next Actions ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` Use **AskUserQuestion** tool: ```javascript { questions: [{ question: "Planning complete! What would you like to do next?", header: "Next Step", multiSelect: false, options: [ { label: "Start Implementation", description: "Begin working with agent coordination (/ccpm:implementation:start)" }, { label: "Get AI Insights", description: "Get AI analysis of complexity, risks, and timeline (/ccpm:utils:insights)" }, { label: "Review Planning", description: "Review the planning details in Linear (/ccpm:utils:status)" }, { label: "Auto-Assign Agents", description: "Let AI assign subtasks to optimal agents (/ccpm:utils:auto-assign)" } ] }] } ``` **Execute the chosen action**: - If "Start Implementation" → Run `/ccpm:implementation:start [WORK-123]` - If "Get AI Insights" → Run `/ccpm:utils:insights [WORK-123]` - If "Review Planning" → Run `/ccpm:utils:status [WORK-123]` - If "Auto-Assign Agents" → Run `/ccpm:utils:auto-assign [WORK-123]` - If "Other" → Show quick commands and exit gracefully ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📝 Quick Commands ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Status: /ccpm:utils:status [WORK-123] Start: /ccpm:implementation:start [WORK-123] Insights: /ccpm:utils:insights [WORK-123] Context: /ccpm:utils:context [WORK-123] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` ## 💡 Hint: Try the New Natural Command For a simpler workflow, consider using: ```bash /ccpm:plan "task title" [project] [jira-ticket] ``` **Benefits:** - Same functionality, simpler syntax - Part of the 6-command natural workflow - Auto-detects project if configured - See: [Quick Start Guide](./README.md#quick-start) This command still works perfectly! The hint is just a suggestion. --- ## Notes ### This Command Combines 1. **Issue Creation** - No manual Linear UI needed 2. **Full Planning** - All research in one go 3. **Interactive Mode** - Suggests next actions 4. **Continuous Flow** - Can chain to next command ### Usage Patterns **With Jira:** ```bash /ccpm:planning:create "Add JWT authentication" my-app PROJ-456 ``` **Without Jira (Linear-only):** ```bash /ccpm:planning:create "Add dark mode toggle" personal-project ``` **With Active Project:** ```bash /ccpm:project:set my-app /ccpm:planning:create "Add JWT authentication" # Uses active project ``` ### Benefits - ✅ One command instead of two - ✅ No context switching to Linear UI - ✅ Immediate planning after creation - ✅ Interactive next steps - ✅ Fast workflow start