Linear Project Automation
Automate Linear issue tracking, cycle planning, roadmap management, and engineering workflows
You moved to Linear because Jira was too complex, but now you're manually updating issue statuses, copying cycle summaries into Slack, and tagging issues by hand. Linear is fast — your workflows around it aren't.
Who it's for: engineering teams using Linear for issue tracking, product managers automating cycle planning and reporting, engineering leads connecting Linear to CI/CD pipelines, startups building efficient engineering workflows, teams migrating from Jira who want automated Linear workflows from day one
Example
"Automate our Linear engineering workflows" → Automations for: auto-assign issues on cycle start, move to 'In Review' when PR is opened in GitHub, post cycle summary to Slack on Friday, auto-label bugs from Sentry alerts, and generate roadmap updates from completed issues
New here? 3-minute setup guide → | Already set up? Copy the template below.
# Linear Automation
Comprehensive workflow for automating Linear issue tracking and engineering workflows.
## Core Workflows
### 1. Issue Lifecycle
```
LINEAR ISSUE FLOW:
┌─────────────────┐
│ Triage │
│ (Backlog) │
└────────┬────────┘
▼
┌─────────────────┐
│ Todo │
│ (Prioritized) │
└────────┬────────┘
▼
┌─────────────────┐
│ In Progress │
│ (Active) │
└────────┬────────┘
▼
┌─────────────────┐
│ In Review │
│ (PR Created) │
└────────┬────────┘
▼
┌─────────────────┐
│ Done │
│ (Merged) │
└────────┬────────┘
▼
┌─────────────────┐
│ Cancelled │
│ (If needed) │
└─────────────────┘
```
### 2. Automation Triggers
```yaml
automations:
- name: auto_assign_on_start
trigger:
type: status_changed
to: "In Progress"
condition:
assignee: null
action:
set_assignee: "{{trigger_user}}"
- name: add_to_cycle
trigger:
type: issue_created
labels: ["sprint-ready"]
action:
add_to_cycle: current
set_priority: urgent
- name: create_pr_reminder
trigger:
type: status_changed
to: "In Progress"
duration: "48 hours"
condition:
no_linked_pr: true
action:
add_comment: "@{{assignee}} Please link your PR"
- name: close_on_merge
trigger:
type: github_pr_merged
action:
set_status: "Done"
add_comment: "Closed via PR merge"
```
## Issue Templates
### Bug Report
```yaml
bug_template:
title: "[Bug] {{summary}}"
team: "Engineering"
description: |
## Description
{{description}}
## Steps to Reproduce
1. {{step1}}
2. {{step2}}
3. {{step3}}
## Expected Behavior
{{expected}}
## Actual Behavior
{{actual}}
## Environment
- OS: {{os}}
- Browser: {{browser}}
- Version: {{version}}
## Logs/Screenshots
{{attachments}}
labels: ["bug", "needs-triage"]
priority: "{{severity}}"
estimate: null
```
### Feature Request
```yaml
feature_template:
title: "[Feature] {{summary}}"
team: "Product"
description: |
## Overview
{{overview}}
## User Story
As a {{user_type}}, I want to {{action}} so that {{benefit}}.
## Acceptance Criteria
- [ ] {{criteria1}}
- [ ] {{criteria2}}
- [ ] {{criteria3}}
## Design
{{design_link}}
## Technical Considerations
{{tech_notes}}
labels: ["feature", "needs-refinement"]
project: "{{roadmap_project}}"
```
### Sub-Issue Structure
```yaml
epic_breakdown:
parent:
title: "{{epic_name}}"
type: "Project"
sub_issues:
- title: "Design: {{epic_name}}"
labels: ["design"]
estimate: 3
- title: "Backend: {{epic_name}}"
labels: ["backend"]
estimate: 5
- title: "Frontend: {{epic_name}}"
labels: ["frontend"]
estimate: 5
- title: "Testing: {{epic_name}}"
labels: ["qa"]
estimate: 2
- title: "Documentation: {{epic_name}}"
labels: ["docs"]
estimate: 1
```
## Cycle Management
### Cycle Planning
```yaml
cycle_config:
duration: 2_weeks
planning:
capacity_per_engineer: 8 # points
buffer_percentage: 20
milestones:
- day: 1
event: "Cycle Start"
- day: 10
event: "Feature Freeze"
- day: 12
event: "Code Freeze"
- day: 14
event: "Release"
auto_rollover:
enabled: true
statuses: ["Backlog", "Todo"]
exclude_labels: ["blocked"]
```
### Cycle Dashboard
```
CYCLE 24 - WEEK 2/2
═══════════════════════════════════════
Progress:
████████████████░░░░ 78% Complete
Story Points:
Planned: 42
Completed: 33 ████████████████░░░░
Remaining: 9 ████░░░░░░░░░░░░░░░░
BY STATUS:
Done ████████████████ 18
In Review ████░░░░░░░░░░░░ 5
In Progress ██░░░░░░░░░░░░░░ 3
Todo ██░░░░░░░░░░░░░░ 2
TEAM PROGRESS:
Sarah ██████████████░░ 8/10 pts
Mike ████████████████ 12/12 pts
Alex ██████████░░░░░░ 7/10 pts
Lisa ████████████░░░░ 6/10 pts
BLOCKERS:
• LIN-234: Waiting for API access
• LIN-256: Design review pending
```
## GitHub Integration
### Branch & PR Sync
```yaml
github_sync:
branch_format: "{{username}}/lin-{{issue_number}}-{{issue_slug}}"
on_branch_created:
- set_status: "In Progress"
- add_assignee: branch_creator
on_pr_opened:
- set_status: "In Review"
- add_link: pr_url
- add_comment: "PR opened: {{pr_url}}"
on_pr_merged:
- set_status: "Done"
- add_comment: "Merged in {{pr_url}}"
on_pr_closed:
- add_comment: "PR closed without merge"
commit_linking:
patterns:
- "LIN-{{number}}"
- "lin-{{number}}"
- "Fixes LIN-{{number}}"
```
### CI/CD Integration
```yaml
cicd_integration:
on_build_failed:
- add_label: "ci-failed"
- add_comment: |
❌ Build failed
{{build_url}}
on_build_passed:
- remove_label: "ci-failed"
on_deploy_staging:
- add_label: "on-staging"
- add_comment: "Deployed to staging: {{staging_url}}"
on_deploy_production:
- add_label: "released"
- add_comment: "Released to production 🚀"
```
## Labels & Organization
### Label System
```yaml
labels:
type:
- name: "bug"
color: "#eb5757"
- name: "feature"
color: "#5e6ad2"
- name: "improvement"
color: "#26b5ce"
- name: "chore"
color: "#bec2c8"
priority:
- name: "urgent"
color: "#eb5757"
- name: "high"
color: "#f2994a"
- name: "medium"
color: "#f2c94c"
- name: "low"
color: "#bec2c8"
area:
- name: "frontend"
color: "#5e6ad2"
- name: "backend"
color: "#26b5ce"
- name: "infrastructure"
color: "#bb87fc"
- name: "design"
color: "#f7b500"
status:
- name: "blocked"
color: "#eb5757"
- name: "needs-review"
color: "#f2994a"
- name: "ready"
color: "#0e7a42"
```
## Reporting
### Velocity Tracking
```yaml
velocity_report:
metrics:
- completed_points_per_cycle
- issues_closed_per_cycle
- cycle_completion_rate
- carryover_percentage
chart_data:
cycles: last_6
show_trend: true
show_commitment: true
```
### Team Analytics
```
TEAM VELOCITY - LAST 6 CYCLES
═══════════════════════════════════════
│ 50 ┤
│ │ ▓▓
│ 40 ┤ ▓▓ ▓▓ ▓▓ ▓▓
│ │ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ 30 ┤ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ │ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ 20 ┤ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ │ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ 10 ┤ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ │ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
│ 0 ┴─────────────────────────
C19 C20 C21 C22 C23 C24
Average: 38 pts | Trend: +8%
Completion Rate: 92%
```
## API Examples
### GraphQL Queries
```graphql
# Create Issue
mutation CreateIssue {
issueCreate(input: {
teamId: "team-id"
title: "New Feature Request"
description: "Description here"
priority: 2
labelIds: ["label-id"]
}) {
success
issue {
id
identifier
url
}
}
}
# Update Issue Status
mutation UpdateIssue {
issueUpdate(
id: "issue-id"
input: {
stateId: "state-id"
assigneeId: "user-id"
}
) {
success
}
}
# Query Cycle Issues
query CycleIssues {
cycle(id: "cycle-id") {
name
issues {
nodes {
identifier
title
state {
name
}
assignee {
name
}
estimate
}
}
}
}
```
## Best Practices
1. **Quick Triage**: Process new issues daily
2. **Consistent Estimates**: Use planning poker
3. **Link Everything**: Connect PRs, commits, docs
4. **Use Projects**: Organize related work
5. **Cycle Commitment**: Protect sprint scope
6. **Regular Grooming**: Keep backlog healthy
7. **Automate Status**: Let integrations update
8. **Measure Velocity**: Track team capacityWhat This Does
Comprehensive workflow for automating Linear issue tracking and engineering workflows.
Quick Start
Step 1: Create a Project Folder
mkdir -p ~/Documents/LinearAutomation
Step 2: Download the Template
Click Download above, then:
mv ~/Downloads/CLAUDE.md ~/Documents/LinearAutomation/
Step 3: Start Working
cd ~/Documents/LinearAutomation
claude
Best Practices
- Quick Triage: Process new issues daily
- Consistent Estimates: Use planning poker
- Link Everything: Connect PRs, commits, docs
- Use Projects: Organize related work
- Cycle Commitment: Protect sprint scope
- Regular Grooming: Keep backlog healthy
- Automate Status: Let integrations update
- Measure Velocity: Track team capacity