A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Agent skill for managing Linear issues, projects, and teams. MCP tools, SDK automation, GraphQL API patterns.
A comprehensive Claude Code skill for managing Linear issues, projects, and teams. Provides patterns for MCP tools, SDK automation, and GraphQL API access.
scripts/run.shlin CLI Integration — Optional fast-path via aaronkwhite/linear-cli Rust binary with silent SDK fallbackgit clone https://github.com/wrsmith108/linear-claude-skill ~/.claude/skills/linear
cd ~/.claude/skills/linear && npm install
npm run setup
This checks your configuration and tells you exactly what's missing.
lin_api_)# Add to shell profile
echo 'export LINEAR_API_KEY="lin_api_your_key_here"' >> ~/.zshrc
source ~/.zshrc
npm run ops -- whoami
You should see your name and organization.
npm run build
Pre-compiles TypeScript to JavaScript for ~18x faster CLI cold starts. Without building, commands still work via tsx (slower but functional).
# Create an initiative
npm run ops -- create-initiative "My Project"
# Create a project
npm run ops -- create-project "Phase 1" "My Project"
# Create a sub-issue under a parent
npm run ops -- create-sub-issue ENG-100 "Add tests" "Unit tests for feature"
# Set parent-child relationships for existing issues
npm run ops -- set-parent ENG-100 ENG-101 ENG-102
# Update issue status
npm run ops -- status Done ENG-123 ENG-124
# See all commands
npm run ops -- help
# Clone directly to your skills directory
git clone https://github.com/wrsmith108/linear-claude-skill ~/.claude/skills/linear
cd ~/.claude/skills/linear && npm install
lin CLI (Optional) — Faster execution for status updates, search, and listings:
brew install aaronkwhite/tap/lin # macOS (Homebrew)
cargo install lincli # Any platform with Rust
LINEAR_USE_LIN=0 to disable even when installed.{
"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 likelinear-mcp-server(npm) orjerhadf/linear-mcp-server(GitHub).
linear-claude-skill/
├── SKILL.md # Main skill instructions (Claude Code discovers this)
├── api.md # GraphQL API reference
├── sdk.md # SDK automation patterns
├── sync.md # Bulk sync patterns
├── docs/
│ └── labels.md # Label taxonomy documentation
├── scripts/
│ ├── run.sh # Shared runner (dist/ with tsx fallback)
│ ├── build.mjs # esbuild pre-compilation script
│ ├── linear-ops.ts # High-level operations (issues, projects, labels)
│ ├── query.ts # GraphQL query runner
│ ├── setup.ts # Configuration checker
│ ├── sync.ts # Bulk sync CLI tool
│ ├── upload-image.ts # Upload images to Linear S3
│ ├── extract-image.ts # Extract images from session JSONL
│ ├── linear-api.mjs # Direct API wrapper
│ ├── __tests__/ # Smoke tests (Node built-in test runner)
│ └── lib/ # Shared utilities (taxonomy, labels, verification)
├── dist/ # Pre-compiled JS output (gitignored, in npm package)
└── hooks/
└── post-edit.sh # Auto-sync hook
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 SKILL.md → "Discovery Before Creation" for the full checklist.
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 SKILL.md → "Codebase Verification Before Work" for the full checklist.
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.
Status UUIDs are workspace-specific. Query your workspace:
query { projectStatuses { nodes { id name } } }
Common statuses: Backlog, Planned, In Progress, Completed, Canceled
Organize issues into parent-child hierarchies for better tracking:
# Create a sub-issue under a parent issue
# Inherits team and project from parent automatically
npm run ops -- create-sub-issue <parent> <title> [description] [--priority 1-4] [--labels label1,label2]
# Set existing issues as children of a parent
npm run ops -- set-parent <parent> <child1> <child2> ...
# List all sub-issues of a parent
npm run ops -- list-sub-issues <parent>
When to use sub-issues:
A standardized label system for consistent issue categorization across projects:
# Show full taxonomy (25 labels across 3 categories)
npm run ops -- labels taxonomy
# Validate label combinations
npm run ops -- labels validate "feature,security,breaking-change"
# Suggest labels based on issue title
npm run ops -- labels suggest "Fix XSS vulnerability in login form"
# Show agent recommendations for labels
npm run ops -- labels agents "security,performance"
Label Categories:
feature, bug, refactor, chore, spikesecurity, backend, frontend, testing, infrastructure, mcp, cli, etc.blocked, breaking-change, tech-debt, needs-split, good-first-issueSee docs/labels.md for the complete taxonomy guide.
Add clickable links to projects/initiatives:
mutation {
entityExternalLinkCreate(input: {
url: "https://github.com/wrsmith108/linear-claude-skill/blob/main/docs/phase-1.md",
label: "Implementation Doc",
projectId: "<uuid>"
}) { success }
}
Track Definition of Done:
mutation {
projectMilestoneCreate(input: {
projectId: "<uuid>",
name: "DoD: Testing",
description: "Unit tests, E2E tests, 100% coverage"
}) { success }
}
Post status updates to a project's Updates tab:
npm run ops -- create-project-update "Project Name" "## Update\n\nBody" --health onTrack
Health options: onTrack, atRisk, offTrack
See SKILL.md for full documentation and GraphQL examples.
Create a high priority issue titled "Fix authentication bug" in the ENG team
mutation {
projectUpdate(id: "<project-uuid>", input: {
statusId: "<status-uuid>" # Get from projectStatuses query
}) { success }
}
See sdk.md for TypeScript patterns for loops, filtering, and batch updates.
Synchronize code changes with Linear issues in bulk:
# Update multiple issues to Done
npm run sync -- --issues ENG-432,ENG-433,ENG-434 --state Done
# Update project status after phase completion
npm run sync -- --project "Phase 11" --state completed
# Verify sync completed
npm run sync -- --verify ENG-432,ENG-433 --expected-state Done
Spawn a parallel agent for autonomous sync via Task tool:
Task({
description: "Sync Phase 11 to Linear",
prompt: "Update ENG-432,433,434 to Done. Update project to completed.",
subagent_type: "Linear-specialist"
})
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 sync.md for complete patterns including AgentDB integration.
scripts/run.sh — all 7 npm scripts now use a single runner instead of duplicated shell wrappers2>/dev/null with [ -f dist/X.js ] file-existence checks so runtime errors surface properlyf() { ...; }; f argument forwarding to all npm scripts (community fix from PR #17 by @aphexcx)[WARN] fallback messages across all scripts including syncrequireClient() to delegate to getLinearClient() — single client singleton__BUNDLED__ build-time define patternupload-image and extract-image scriptsgetLinearClient() — SDK initialization deferred to first API callscripts/run.shimport.meta.url CLI guards from lib filesnpm run as canonical invocation form in all documentationscripts/upload-image.ts and scripts/extract-image.ts for image managementSee CHANGELOG.md for full version history.
.nvmrc)git clone https://github.com/wrsmith108/linear-claude-skill.git
cd linear-claude-skill
npm ci
npm test # builds and runs smoke tests (no API key needed)
npm run build # compile TypeScript to dist/
Contributions welcome! Please submit issues and PRs to improve the skill.
MIT License — See LICENSE
Created for the Claude Code community. Patterns developed through real-world project management workflows.
ML engineering — model training, deployment, MLOps, monitoring
DevOps practices — CI/CD, containers, monitoring, infrastructure automation
Professional skills marketplace with production-ready skills for enhanced development
Self-learning system that captures corrections and syncs them to CLAUDE.md and AGENTS.md