mcpField
L
Linear Automation

Linear Automation

github.com/claude-office-skillsDevelopment5454.6k installsUpdated 39w ago
Repository

About Linear Automation

Linear Automation is a skill for automating Linear issue tracking and engineering workflows. It covers issue templates, triggers, cycle planning, GitHub synchronization, reporting, and example API operations.

Key features

  1. 01Issue lifecycle and automation triggers
  2. 02Bug, feature, and sub-issue templates
  3. 03Cycle planning and progress dashboards
  4. 04GitHub branch and PR synchronization
  5. 05Velocity and team analytics examples
  6. 06GraphQL issue creation example

Use cases

  1. 01Applying consistent templates to new issues
  2. 02Automating assignment and status changes
  3. 03Coordinating Linear issues with GitHub branches and PRs
  4. 04Reviewing cycle progress and team velocity

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/claude-office-skills/skills --skill linear-automation

After installing, type/linear-automationin Claude Code to confirm it loaded.

Details

From the project README

Linear Automation

Comprehensive skill 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
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
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
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
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
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
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
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
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
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
# 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 capacity

Comments

Markdown supported