From linear-workflow
Create an implementation plan for a Linear ticket. Use this skill when the user provides a Linear ticket (URL or identifier like APP-123) and wants a plan broken into phases, with each phase tracked as a Linear sub-ticket. Creates a NEW primary issue with the structured plan and relates it back to the original. Triggers on phrases like "plan this ticket", "plan ticket for", "break this Linear issue into phases", or any request to produce a phased plan against a Linear ticket.
How this skill is triggered — by the user, by Claude, or both
Slash command
/linear-workflow:plan-issueThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a principal engineer. Explore the codebase, produce an implementation plan broken into phases, and write it into a new Linear primary issue. Create sub-tickets (children of the new primary issue) for each phase. Relate the new primary issue back to the original input issue, then mark the original Done.
You are a principal engineer. Explore the codebase, produce an implementation plan broken into phases, and write it into a new Linear primary issue. Create sub-tickets (children of the new primary issue) for each phase. Relate the new primary issue back to the original input issue, then mark the original Done.
The input issue represents the task "plan this feature." When planning is complete, that task is done. The new primary issue represents the task "implement this feature" and has its own lifecycle.
Plan the Linear ticket {{SKILL_INPUT}}.
This skill operates against Linear using mcp__linear-server__* tools:
parentId set to the new primary issue).body / description values — never literal \n escape sequences.Parse {{SKILL_INPUT}} to extract the Linear ticket identifier. Accept either form:
APP-123https://linear.app/<workspace>/issue/APP-123/<slug>Fetch the ticket via mcp__linear-server__get_issue with id: "<IDENTIFIER>".
Record:
ORIGINAL_ID — Linear UUIDORIGINAL_IDENTIFIER — e.g., APP-123ORIGINAL_TITLETEAM_KEY — e.g., APPTEAM_IDEXISTING_LABELS — preserved when adding planningEXISTING_BODY — the original description (preserved in the new issue)Add the planning label to the original ticket before exploring the codebase. This signals to operators that an agent owns this ticket.
Ensure the planning label exists for the team via mcp__linear-server__list_issue_labels. If missing, create it via mcp__linear-server__create_issue_label.
Update the original issue via mcp__linear-server__save_issue:
issue: "<ORIGINAL_IDENTIFIER>"state: "In Progress"labels: ["planning", ...existing label names]Post a comment via mcp__linear-server__save_comment:
issue: "<ORIGINAL_IDENTIFIER>"body: "Planning this ticket."Before exploring the codebase, read the project's configuration files to understand conventions:
CLAUDE.md if it exists — for project conventions, testing strategy, build commandsAGENTS.md if it exists — for architecture, package structure, code generation workflowsCONTRIBUTING.md if it exists — for commit message format, PR conventionsThese files determine how to structure phases (e.g., whether the project uses proto-first development, what testing strategy to follow, what build toolchain to use). Do not hardcode assumptions — derive them from the project.
Review the ticket body and the user's prompt. If the acceptance criteria is ambiguous or incomplete, ask the user targeted clarifying questions before exploring the codebase. If the prompt is sufficiently clear, infer the acceptance criteria and proceed.
Explore the relevant areas of the codebase to understand the architecture, existing patterns, and test conventions. Use the information from project configuration files (step 3) to guide exploration.
Break the implementation into sequential phases. Each phase should be a self-contained unit of work that leaves the codebase in a working state.
Principles:
Create a new Linear issue that serves as the implementation primary issue. Call mcp__linear-server__save_issue with:
team: "<TEAM_KEY>"title: "<ORIGINAL_TITLE>" (or a refined version that reflects the plan)description: the master plan markdown (see template below)Record the new issue's identifier (e.g., APP-124) and id (UUID) as PRIMARY_IDENTIFIER and PRIMARY_ID.
Master plan template (substitute real content, real newlines):
## Problem
<Describe the problem or motivation from the original ticket.>
## Acceptance Criteria
- [ ] <criterion 1>
- [ ] <criterion 2>
- [ ] ...
## Implementation Plan
This ticket is the primary implementation issue. Each phase below is tracked as a sub-ticket (child of this issue). Implement phases in order — each phase must leave the codebase in a working state.
- <!-- Phase sub-tickets will be listed here after creation -->
## Implementation Instructions
To implement all phases, invoke `/linear-workflow:implement-issue <PRIMARY_IDENTIFIER>`.
To implement a single phase, invoke `/linear-workflow:implement-issue <PHASE_IDENTIFIER>`.
## Original Ticket
Planned from <ORIGINAL_IDENTIFIER>.
If the original ticket had a non-empty body, preserve it in the ## Problem section or under a ## Original Description heading.
For each phase, create a Linear sub-ticket as a child of the new primary issue. Call mcp__linear-server__save_issue with:
team: "<TEAM_KEY>"parentId: "<PRIMARY_ID>"title: "<conventional-commit-prefix>(<scope>): <phase title>"description:## Parent
Part of <PRIMARY_IDENTIFIER>
## Goal
<One-paragraph description of what this phase accomplishes and why.>
## Acceptance Criteria
- [ ] <specific, testable criterion>
- [ ] <specific, testable criterion>
- [ ] Tests pass
## Implementation Notes
<Key files to read or modify. Patterns to follow. Pitfalls to avoid.>
### Files to modify
- `path/to/file.ext` — description of change
### Testing approach
<Describe the test strategy: which test files to create/modify, what to mock.>
### Dependencies
<List any phase sub-tickets this phase depends on.>
Record each created sub-ticket's identifier and id.
After all sub-tickets are created, update the primary issue description to list them. Call mcp__linear-server__save_issue with issue: "<PRIMARY_IDENTIFIER>" and description where the ## Implementation Plan section reads:
## Implementation Plan
This ticket is the primary implementation issue. Each phase below is tracked as a sub-ticket (child of this issue). Implement phases in order — each phase must leave the codebase in a working state.
- [ ] <PHASE_1_IDENTIFIER> — <phase 1 title>
- [ ] <PHASE_2_IDENTIFIER> — <phase 2 title>
- [ ] <PHASE_3_IDENTIFIER> — <phase 3 title>
Linear renders each identifier as a cross-link. The checkboxes are informational — Linear tracks sub-ticket completion natively.
Link the original issue to the new primary issue via mcp__linear-server__save_issue:
issue: "<ORIGINAL_IDENTIFIER>"relatedTo: ["<PRIMARY_IDENTIFIER>"]Post a comment on the original issue:
issue: "<ORIGINAL_IDENTIFIER>"body:Planning complete. Implementation tracked in <PRIMARY_IDENTIFIER>.
Mark the original issue Done:
issue: "<ORIGINAL_IDENTIFIER>"state: "Done"labels: [... existing labels minus "planning"]If the team does not have a state named exactly Done, use mcp__linear-server__list_issue_statuses and pick the completed-type state.
After all tickets are created, report a summary:
/linear-workflow:implement-issue <PRIMARY_IDENTIFIER> to execute the full planplanning before exploring, so operators see the ticket is owned.relatedTo, not parentId.parentId under the new primary issue.| Action | Tool | Key arguments |
|---|---|---|
| Fetch ticket | mcp__linear-server__get_issue | id |
| List labels | mcp__linear-server__list_issue_labels | team |
| Create label | mcp__linear-server__create_issue_label | name, team |
| Update issue | mcp__linear-server__save_issue | issue, state / labels / description / relatedTo |
| Create issue | mcp__linear-server__save_issue | team, title, description (no issue field) |
| Create sub-ticket | mcp__linear-server__save_issue | team, parentId, title, description |
| Post comment | mcp__linear-server__save_comment | issue, body |
| List statuses | mcp__linear-server__list_issue_statuses | team |
npx claudepluginhub holos-run/skills --plugin linear-workflowProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.