Linear issue-tracked development workflow. Auto-activates when starting work on issues, creating branches, changing status, writing comments, or creating PRs.
Automates Linear issue tracking throughout development. Activates when you start work, create branches, modify files, or mention issues—guiding you through creating issues, tracking status, writing comments, and PRs with proper Linear references.
/plugin marketplace add bahamoth/claude-linear-workflow/plugin install linear-workflow@claude-linear-workflowThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Linear MCP: Configure in MCP settings:
{
"mcpServers": {
"linear": {
"command": "mcp-remote",
"args": ["-y", "https://mcp.linear.app/mcp"]
}
}
}
gh CLI: Install and authenticate:
brew install gh # or: https://cli.github.com/
gh auth login
This skill requires Linear MCP to be configured. On first use:
Check environment variables in .claude/settings.json:
LINEAR_WORKFLOW_TEAM and LINEAR_WORKFLOW_PROJECT exist → use themGet issue prefix dynamically:
mcp__linear-server__list_issues(team: "{LINEAR_WORKFLOW_TEAM}", limit: 1)
# Extract prefix from identifier (e.g., "ABC-34" → "ABC")
{
"env": {
"LINEAR_WORKFLOW_TEAM": "YourTeam",
"LINEAR_WORKFLOW_PROJECT": "YourProject"
}
}
Note:
issuePrefixis auto-detected from Linear, no manual config needed.
Fixes {PREFIX}-XXHas Issue No Issue
│ │
▼ ▼
Query via MCP Plan → Create Issue in Linear
│ │
└──────────┬─────────────────┘
▼
Create branch (use gitBranchName)
▼
Linear status: In Progress + start comment
▼
Work (comment on decisions/blockers)
▼
Create PR (Fixes {PREFIX}-XX)
▼
Merge (rebase-ff) → Linear auto-Done
| Action | Command |
|---|---|
| Get issue | mcp__linear-server__get_issue(id: "{PREFIX}-XX") |
| Update status | mcp__linear-server__update_issue(id: "{PREFIX}-XX", state: "In Progress") |
| Add comment | mcp__linear-server__create_comment(issueId: "{PREFIX}-XX", body: "...") |
| Create issue | mcp__linear-server__create_issue(title: "...", team: "{TEAM}", project: "{PROJECT}") |
# Query issue via MCP
mcp__linear-server__get_issue(id: "{PREFIX}-XX")
gitBranchName field as branch nameAfter planning, before implementation, create Linear issue using this template:
mcp__linear-server__create_issue(
title: "Concise work title",
description: "<issue description template below>",
team: "{LINEAR_WORKFLOW_TEAM}"
)
If LINEAR_WORKFLOW_PROJECT is configured: Add project: "{LINEAR_WORKFLOW_PROJECT}" parameter.
Issues without a project are created in the team's Backlog.
## Objective
[One sentence describing what this work achieves]
## Background
- [Why this work is needed]
- [Context or constraints]
- [Related prior work or decisions]
## Implementation Approach
- [High-level approach or strategy]
- [Key technical decisions]
- [Files/components to modify]
## Acceptance Criteria
- [ ] [Specific, testable criterion 1]
- [ ] [Specific, testable criterion 2]
- [ ] [Specific, testable criterion 3]
Guidelines:
Use the gitBranchName field from the Linear issue directly:
# Get issue details (gitBranchName is included in response)
mcp__linear-server__get_issue(id: "{PREFIX}-XX")
# Create branch using gitBranchName value
git checkout -b <gitBranchName>
Branch Format: Configured in Linear at Settings > Workspace > Integrations > GitHub/GitLab > Branch format. The
gitBranchNamefield reflects your team's configured format.
This workflow validates branch names loosely—only requiring a Linear issue ID (e.g., ABC-123). This allows teams to use any branch format configured in Linear:
| Branch Example | Valid? |
|---|---|
feature/ABC-123-auth | Yes |
john/ABC-123-auth | Yes |
ABC-123-auth | Yes |
ABC-123 | Yes |
main | No (protected) |
feature/auth | No (no issue ID) |
# Update status
mcp__linear-server__update_issue(id: "{PREFIX}-XX", state: "In Progress")
# Start comment (use actual branch name)
mcp__linear-server__create_comment(
issueId: "{PREFIX}-XX",
body: "## Started\n\n- Branch: `<branch-name>`\n- Implementing ..."
)
| Status | When to Use | Transition |
|---|---|---|
| Backlog | Initial state, not yet prioritized | Auto |
| Todo | Ready for work | Manual |
| In Progress | Actively working | Set at branch creation |
| In Review | PR created, awaiting review | Set at PR creation |
| Done | PR merged | Auto (via Fixes {PREFIX}-XX) |
Write comments for major decisions, progress updates, or blockers.
Language: English only (for global team collaboration)
## Progress Update
- Completed: [what was done]
- In Progress: [current work]
- Next: [upcoming tasks]
## Decision: [title]
**Context**: [why this decision was needed]
**Options considered**:
1. [Option A] - pros/cons
2. [Option B] - pros/cons
**Chosen**: [option] because [reason]
## Blocked
**Issue**: [description]
**Waiting on**: [dependency/person]
**Workaround**: [if any]
Conventional Commits + Linear reference:
git commit -m "feat(scope): implement feature
Refs {PREFIX}-XX"
SemVer-relevant (required for versioning):
| Type | Usage | SemVer Impact |
|---|---|---|
feat | New feature | MINOR bump |
fix | Bug fix | PATCH bump |
feat!: | Breaking change (add ! suffix) | MAJOR bump |
Other common types:
docs, refactor, test, chore, style, perf, ci, build, revert, or any lowercase word that fits the change.
Refs {PREFIX}-XX: Link only (no status change)Closes {PREFIX}-XX: Auto-close issue on PR mergeConventional Commit format:
feat(linear): add workflow skills
## Summary
- [Change 1]
- [Change 2]
## Test Plan
- [ ] Test item 1
- [ ] Test item 2
Fixes {PREFIX}-XX
gh pr create --title "feat(scope): description" --body "$(cat <<'EOF'
## Summary
- ...
## Test Plan
- [ ] ...
Fixes {PREFIX}-XX
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
GitHub standard method (rebase-ff):
# After PR approval
gh pr merge --rebase
Linear detects Fixes {PREFIX}-XX → auto-closes issue as Done
| Keyword | Effect |
|---|---|
closes, fixes, resolves, completes | Close issue on PR merge |
refs, part of, related to | Link only, no status change |
Copy this checklist and check off items as you complete them:
Linear Workflow Progress:
Starting Work:
- [ ] Check if issue exists (create if not)
- [ ] Create branch using `gitBranchName`
- [ ] Status → In Progress
- [ ] Write start comment
During Work:
- [ ] Comment on major decisions/blockers
- [ ] Follow Conventional Commits
- [ ] Include `Refs {PREFIX}-XX` in commits
On Completion:
- [ ] Create PR (include `Fixes {PREFIX}-XX`)
- [ ] Request code review
- [ ] Merge (rebase-ff)
- [ ] Verify Linear auto-Done
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.