Skip to content

Claude Code skill for managing Linear issues, projects, and teams. MCP tools, SDK automation, GraphQL API patterns.

License

Notifications You must be signed in to change notification settings

wrsmith108/linear-claude-skill

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Linear Skill for Claude Code

A comprehensive Claude Code skill for managing Linear issues, projects, and teams. Provides patterns for MCP tools, SDK automation, and GraphQL API access.

Features

  • First-Time Setup Check — Automatic configuration validation with actionable guidance
  • High-Level Operations — Simple commands for initiatives, projects, and status updates
  • Discovery Before Creation — Mandatory checks to prevent duplicate projects/issues
  • MCP Tool Integration — Simple operations via Linear MCP server
  • SDK Automation — Complex operations with TypeScript scripts
  • GraphQL API — Direct API access for advanced queries
  • Project Management — Content, descriptions, milestones, resource links
  • Status Management — Project status UUIDs for workflow automation
  • MCP Reliability Workarounds — Fallback patterns for timeout/failure scenarios
  • Bulk Sync — Synchronize code changes with Linear via CLI, agents, or hooks

Quick Start (New Users)

1. Install the Skill

# Option A: Claude Plugin (Recommended)
claude plugin add github:wrsmith108/linear-claude-skill

# Option B: Manual Installation
git clone https://github.com/wrsmith108/linear-claude-skill ~/.claude/skills/linear
cd ~/.claude/skills/linear && npm install

2. Run Setup Check

npx tsx ~/.claude/skills/linear/skills/linear/scripts/setup.ts

This checks your configuration and tells you exactly what's missing.

3. Get Your API Key (If Needed)

  1. Open Linear in your browser
  2. Go to SettingsSecurity & accessPersonal API keys
  3. Click Create key and copy it (starts with lin_api_)
  4. Add to your environment:
# Add to shell profile
echo 'export LINEAR_API_KEY="lin_api_your_key_here"' >> ~/.zshrc
source ~/.zshrc

4. Verify It Works

npx tsx ~/.claude/skills/linear/skills/linear/scripts/linear-ops.ts whoami

You should see your name and organization.

5. Start Using It

# Create an initiative
npx tsx scripts/linear-ops.ts create-initiative "My Project"

# Create a project
npx tsx scripts/linear-ops.ts create-project "Phase 1" "My Project"

# Update issue status
node scripts/linear-helpers.mjs update-status Done 123 124

# See all commands
npx tsx scripts/linear-ops.ts help

Installation

Option A: Claude Plugin (Recommended)

claude plugin add github:wrsmith108/linear-claude-skill

Option B: Manual Installation

# Clone directly to your skills directory
git clone https://github.com/wrsmith108/linear-claude-skill ~/.claude/skills/linear
cd ~/.claude/skills/linear && npm install

Prerequisites

  • Linear API Key — Generate at Linear → Settings → Security & access → Personal API keys
  • Linear MCP Server (Recommended) — Use the official Linear MCP server for best reliability:
{
  "mcpServers": {
    "linear": {
      "command": "npx",
      "args": ["mcp-remote", "https://mcp.linear.app/sse"],
      "env": {
        "LINEAR_API_KEY": "your_api_key"
      }
    }
  }
}

Important: Always use Linear's official MCP server at mcp.linear.app. Do NOT use deprecated community servers like linear-mcp-server (npm) or jerhadf/linear-mcp-server (GitHub).

Directory Structure

skills/linear/
├── SKILL.md          # Main skill instructions
├── api.md            # GraphQL API reference
├── sdk.md            # SDK automation patterns
├── sync.md           # Bulk sync patterns
├── scripts/
│   ├── query.ts      # GraphQL query runner
│   ├── query.sh      # Shell wrapper
│   └── sync.ts       # Bulk sync CLI tool
└── hooks/
    └── post-edit.sh  # Auto-sync hook

Key Patterns

Discovery Before Creation (Critical!)

ALWAYS check Linear before creating projects or issues. This prevents duplicates:

# Check for existing projects
linear projects list | grep -i "phase\|feature-name"

# Check for existing issues
linear issues list --filter "title:keyword"

See skills/linear/SKILL.md → "Discovery Before Creation" for the full checklist.

Codebase Verification Before Work (Critical!)

ALWAYS verify codebase state before accepting issue scope at face value.

Issue descriptions may be outdated or speculative. APIs or features may already be implemented!

# Before starting "implement API" issues:
ls src/pages/api/admin/members/     # Check if files exist
grep -r "test.skip" tests/          # Check if tests are just skipped

Key Lesson: Issues describing "missing" features may already be implemented. The real work is often un-skipping tests and fixing assertions, not reimplementing.

See skills/linear/SKILL.md → "Codebase Verification Before Work" for the full checklist.

MCP Reliability (Critical!)

The Linear MCP server has known reliability issues (34% timeout rate due to SSE idle timeouts):

Operation MCP Reliability Recommendation
Create issue ✅ Reliable Use MCP
Search issues ⚠️ Times out Use GraphQL
Update status ⚠️ Unreliable Use GraphQL
Add comment ❌ Broken Use GraphQL

See skills/linear/SKILL.md for GraphQL workaround patterns and root cause explanation.

Content vs Description (Critical!)

Linear has TWO text fields — using the wrong one causes blank displays:

Field Limit Shows In
description 255 chars List views, tooltips
content Unlimited Main detail panel

Always set BOTH when creating projects.

Project Status UUIDs

Status UUIDs are workspace-specific. Query your workspace:

query { projectStatuses { nodes { id name } } }

Common statuses: Backlog, Planned, In Progress, Completed, Canceled

Resource Links

Add clickable links to projects/initiatives:

mutation {
  entityExternalLinkCreate(input: {
    url: "https://github.com/org/repo/docs/phase-1.md",
    label: "Implementation Doc",
    projectId: "<uuid>"
  }) { success }
}

Project Milestones

Track Definition of Done:

mutation {
  projectMilestoneCreate(input: {
    projectId: "<uuid>",
    name: "DoD: Testing",
    description: "Unit tests, E2E tests, 100% coverage"
  }) { success }
}

Usage Examples

Create Issue (MCP)

Create a high priority issue titled "Fix authentication bug" in the ENG team

Update Project Status (GraphQL)

mutation {
  projectUpdate(id: "<project-uuid>", input: {
    statusId: "<status-uuid>"  # Get from projectStatuses query
  }) { success }
}

Bulk Operations (SDK)

See skills/linear/sdk.md for TypeScript patterns for loops, filtering, and batch updates.

Bulk Sync (NEW)

Synchronize code changes with Linear issues in bulk:

# Update multiple issues to Done
npx ts-node scripts/sync.ts --issues SMI-432,SMI-433,SMI-434 --state Done

# Update project status after phase completion
npx ts-node scripts/sync.ts --project "Phase 11" --state completed

# Verify sync completed
npx ts-node scripts/sync.ts --verify SMI-432,SMI-433 --expected-state Done

Agent-Spawned Sync

Spawn a parallel agent for autonomous sync via Task tool:

Task({
  description: "Sync Phase 11 to Linear",
  prompt: "Update SMI-432,433,434 to Done. Update project to completed.",
  subagent_type: "general-purpose"
})

Hook-Triggered Sync

Auto-suggest sync after code edits. Add to .claude/settings.json:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Write|Edit",
      "hooks": [{
        "type": "command",
        "command": "bash ~/.claude/skills/linear/hooks/post-edit.sh"
      }]
    }]
  }
}

See skills/linear/sync.md for complete patterns including AgentDB integration.

Contributing

Contributions welcome! Please submit issues and PRs to improve the skill.

License

MIT License — See LICENSE

Credits

Created for the Claude Code community. Patterns developed through real-world project management workflows.

About

Claude Code skill for managing Linear issues, projects, and teams. MCP tools, SDK automation, GraphQL API patterns.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published