name: linear-pm description: Linear project management - issues, projects, cycles, and roadmaps. Use for Linear-related tasks like managing issues, tracking sprints, and organizing projects. version: 1.0.0 model: sonnet invoked_by: both user_invocable: true tools: [Read, Bash, WebFetch] best_practices:
- Verify LINEAR_API_KEY is set
- Use filters to reduce API calls
- Cache team and project metadata error_handling: graceful streaming: supported
Mode: Cognitive/Prompt-Driven — No standalone utility script; use via agent context.
Linear PM Skill
Overview
This skill provides comprehensive Linear project management capabilities with progressive disclosure for optimal context usage.
Context Savings: ~92% reduction
- Direct API Mode: ~15,000 tokens for full API documentation
- Skill Mode: ~300 tokens metadata + on-demand loading
Requirements
LINEAR_API_KEYenvironment variable set- Internet connectivity for Linear API access
Toolsets
The skill provides 18+ tools across 5 toolsets:
| Toolset | Description |
|---|---|
issues | Issue creation, updates, comments, state changes |
projects | Project management and issue association |
cycles | Sprint/cycle management and planning |
teams | Team structure and member management |
labels | Label and workflow state management |
Quick Reference
# List issues
linear-pm list-issues --team-id "TEAM-123" --state "In Progress"
# Get issue details
linear-pm get-issue --issue-id "ISSUE-456"
# Create new issue
linear-pm create-issue --title "Bug fix" --description "Details" --team-id "TEAM-123"
# Update issue
linear-pm update-issue --issue-id "ISSUE-456" --state "Done"
# Add comment
linear-pm add-comment --issue-id "ISSUE-456" --comment "Fixed in PR #123"
# List projects
linear-pm list-projects --team-id "TEAM-123"
# Get current cycle
linear-pm current-cycle --team-id "TEAM-123"
# List cycle issues
linear-pm cycle-issues --cycle-id "CYCLE-789"
Tools by Category
Issue Operations (Confirmation Required for Mutations)
| Tool | Description | Confirmation |
|---|---|---|
list-issues | List issues with filters (state, assignee, label) | No |
get-issue | Get detailed issue information | No |
create-issue | Create new issue with title, description, team | Yes |
update-issue | Update issue fields (state, assignee, priority) | Yes |
add-comment | Add comment to an issue | Yes |
search-issues | Search issues by text query | No |
assign-issue | Assign issue to team member | Yes |
set-priority | Set issue priority (urgent, high, medium, low) | Yes |
add-label | Add label to issue | Yes |
Project Operations
| Tool | Description | Confirmation |
|---|---|---|
list-projects | List all projects for a team | No |
get-project | Get project details and metadata | No |
project-issues | Get all issues in a project | No |
create-project | Create new project | Yes |
update-project | Update project details | Yes |
Cycle Operations (Sprints)
| Tool | Description | Confirmation |
|---|---|---|
list-cycles | List cycles for a team | No |
current-cycle | Get current active cycle | No |
cycle-issues | Get issues in a specific cycle | No |
cycle-progress | Get cycle completion metrics | No |
Team Operations
| Tool | Description | Confirmation |
|---|---|---|
list-teams | List all teams in workspace | No |
get-team | Get team details | No |
team-members | List team members | No |
Label & State Operations
| Tool | Description | Confirmation |
|---|---|---|
list-labels | List all labels for a team | No |
list-states | List workflow states (backlog, todo, in progress, done) | No |
create-label | Create new label | Yes |
Implementation
Tool Execution Pattern
All tools use the Linear GraphQL API with progressive disclosure:
#!/usr/bin/env bash
# Example: list-issues tool
LINEAR_API_KEY="${LINEAR_API_KEY}"
if [[ -z "$LINEAR_API_KEY" ]]; then
echo "Error: LINEAR_API_KEY environment variable not set"
exit 1
fi
QUERY='query {
issues(filter: { state: { name: { eq: "In Progress" } } }) {
nodes {
id
title
state { name }
assignee { name }
priority
createdAt
}
}
}'
curl -X POST https://api.linear.app/graphql \
-H "Authorization: $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$QUERY\"}"
Common Filters
Issue Filters:
state: Filter by workflow state (e.g., "In Progress", "Done")assignee: Filter by assigned user IDpriority: Filter by priority (0=none, 1=urgent, 2=high, 3=medium, 4=low)label: Filter by label nameteam: Filter by team ID
Project Filters:
state: Filter by project state (planned, started, paused, completed)lead: Filter by project lead user ID
Cycle Filters:
isActive: Get only active cyclesteam: Filter by team ID
Security
API Key Protection:
- Never expose
LINEAR_API_KEYin logs or output - API key should have minimal required permissions
- Use read-only API key when possible for queries
Mutation Confirmation: All tools that modify data require confirmation:
- Issue creation/updates
- Comment additions
- Project modifications
- Label creation
Read-Only Operations (No Confirmation):
- Listing issues, projects, cycles
- Getting details
- Searching
Error Handling
If tool execution fails:
-
Verify API Key: Check
LINEAR_API_KEYis set correctlyecho $LINEAR_API_KEY -
Check API Rate Limits: Linear enforces rate limits
- GraphQL: 1500 requests per hour per API key
- REST: 500 requests per hour per API key
-
Validate Query Syntax: Ensure GraphQL queries are well-formed
-
Check Team/Issue IDs: Verify IDs exist and are accessible
Agent Integration
Primary Agents:
pm- Product management and backlog prioritizationanalyst- Issue analysis and sprint planning
Secondary Agents:
developer- Issue implementation and status updatesarchitect- Technical issue decompositionqa- Issue testing and validation
Common Workflows
Sprint Planning
current-cycle- Get current sprintlist-issues --state "Backlog"- Get backlog itemsupdate-issue --cycle-id "..."- Assign issues to sprint
Issue Triage
list-issues --state "Backlog"- Get unplanned issuesset-priority --issue-id "..." --priority 2- Set priorityadd-label --issue-id "..." --label "bug"- Categorize
Project Tracking
list-projects --team-id "..."- Get all projectsproject-issues --project-id "..."- Get project issuescycle-progress --cycle-id "..."- Check sprint progress
Related
- Official Linear API Documentation: https://developers.linear.app/docs/graphql/working-with-the-graphql-api
- Linear GraphQL Explorer: https://studio.apollographql.com/public/Linear-API/home
- Linear Webhook Documentation: https://developers.linear.app/docs/graphql/webhooks
Memory Protocol (MANDATORY)
Before starting:
Read .claude/context/memory/learnings.md
After completing:
- New pattern ->
.claude/context/memory/learnings.md - Issue found ->
.claude/context/memory/issues.md - Decision made ->
.claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.