linear
willmarple/linear-skillManage Linear issues, projects, and cycles. Maintains session memory across conversations for context continuity.
SKILL.md
name: linear description: Manage Linear issues, projects, and cycles. Maintains session memory across conversations for context continuity.
Linear Skill
Manage your Linear workspace from the command line with persistent session memory.
Project Configuration
Before using this skill, read config.json for project-specific values:
team- The team key to use (e.g., "WIL")defaultProject- Default project ID for new issuesprojects- Named project shortcuts with IDs and descriptionspriorityContext- What priority levels mean for this project's current phaselabels- Label name to ID mappingsworkflows- Default states/priorities for different issue types
Use these values instead of the generic TEAM placeholders in examples below.
Project Conventions
This section documents agreed-upon conventions for using Linear. Customize these for your project.
Priority Definitions
| Priority | Value | Meaning | Usage |
|---|---|---|---|
| Urgent | 1 | Hot fix to production | Blocking work on production, drop everything |
| High | 2 | Critical for current release | Required before next production deployment |
| Medium | 3 | Standard priority | Scheduled alongside feature work |
| Low | 4 | Nice-to-have, deferred | Revisit when ahead of schedule |
| None | 0 | Not yet prioritized | Needs review |
Key behaviors:
- Urgent: Developer patches immediately; stakeholders notified
- High: Must be completed before production deployment
- Medium: Scheduled alongside feature work
- Low: Kept in backlog, won't delay deadlines
Status Workflow
┌─────────────────┐ ┌─────────────┐
│ CLIENT REVIEW │ │ TRIAGE │
│ (Client Inbox) │ │ (Dev Inbox) │
└────────┬────────┘ └──────┬──────┘
│ │
└──────────┬──────────┘
▼
┌───────────┐
│ TO DO │
└─────┬─────┘
▼
┌───────────┐
│IN PROGRESS│
└─────┬─────┘
▼
┌───────────┐
│ DEV DONE │
└─────┬─────┘
▼
┌─────────────┐
│READY TO TEST│
└──────┬──────┘
▼
┌──────────┐
│ DONE │
└──────────┘
| Status | Owner | Meaning |
|---|---|---|
| Client Review | Client | Developer-created tickets awaiting client approval of priority/details |
| Triage | Developer | Client-reported bugs/issues awaiting developer review |
| To Do | Both | Approved, prioritized, ready to be worked on |
| In Progress | Developer | Actively being developed |
| Dev Done | Developer | Code complete (PR merged), not yet deployed to staging |
| Ready to Test | Client | Deployed to staging, awaiting client testing |
| Done | Both | Client tested and approved |
| Canceled | Both | Work determined to be unnecessary |
Transition responsibilities:
→ Client Review: Developer creates ticket from planning/meetingsClient Review → To Do: Client approves after reviewing→ Triage: Client reports bug directlyTriage → To Do: Developer reviews, sets priorityTo Do → In Progress: Developer picks up workIn Progress → Dev Done: Code completeDev Done → Ready to Test: Deployed to stagingReady to Test → Done: Client tests successfully
Inbox goal: Both Client Review and Triage should trend toward empty.
Projects
Organize work into projects based on your needs:
| Project Type | Purpose |
|---|---|
| Support & Maintenance | Bug fixes, polish, production support |
| Feature Development | New feature work by phase or milestone |
| Infrastructure | Technical improvements, refactoring |
Assignment rules:
- Production bugs → Support project
- New features → Appropriate feature project
- Urgent hot fixes → May skip project assignment (priority is enough)
Labels
| Label | Usage |
|---|---|
bug |
Something broken that needs fixing |
feature |
New functionality |
improvement |
Enhancement to existing functionality |
Communication
- Linear is the primary channel for project work
- Use comments within tickets for discussion
- @ mentions notify via inbox
- Check inbox regularly for messages
Creating Issues from Transcripts
When generating issues from meeting transcripts:
- Set status to
Client Review(not Triage) - Client needs to approve - Include in description:
- Context from discussion
- Location in app (if applicable)
- Steps to reproduce (for bugs)
- Acceptance criteria (for features)
- Set priority based on meeting discussion
- Assign to project based on type
- Add appropriate label (bug/feature/improvement)
Checking Your Inbox
Your Linear inbox contains notifications about issues you're assigned to, mentioned in, or have subscribed to. This is how client feedback and updates reach you.
Commands:
# View all notifications (most recent first)
npx linear-skill inbox
# View only unread notifications
npx linear-skill inbox --unread
# Limit to specific count
npx linear-skill inbox --unread --limit 10
Notification types include:
issueAssignedToYou- You were assigned to an issueissueNewComment- Someone commented on an issue you followissueMention- You were @mentioned in a commentissueStatusChanged- Status changed on an issue you follow- And many more...
Workflow tip: Check your inbox at the start of each session to see client feedback and updates since your last session. This is especially useful for catching comments on recently completed work.
Reading Comments & Client Feedback
Comments contain important client feedback, clarifications, and discussion history. Use them strategically to stay context-efficient.
When to use --comments flag or comments command:
- Planning implementation for specific tickets (1-5 tickets)
- Reviewing client feedback before starting work
- Checking for clarifications or scope changes
- Preparing spec documents that need client context
When NOT to fetch comments:
- Broad searches across many tickets (
issues --team TEAM) - Filtering/triaging tickets by status or priority
- Quick status checks or updates
- Bulk operations
Commands:
# Lightweight - just comments for quick review
npx linear-skill comments TEAM-123
# Full context - issue details + comments for implementation planning
npx linear-skill issue TEAM-123 --comments
Workflow tip: When moving tickets from To Do to In Progress, fetch comments first to ensure you have the latest client context before writing implementation specs.
Viewing Screenshots & Attachments
Issues often include screenshots showing bugs, UI states, or expected behavior. The skill returns signed URLs that are publicly accessible for 1 hour.
Output fields when using --comments:
inlineImages- Images embedded in description or comments (extracted from markdown)attachments- Files attached to the issue
Workflow to view screenshots:
-
Fetch the issue with comments to get signed URLs:
npx linear-skill issue TEAM-123 --comments -
Download images to the skill's cache directory:
# Create cache directory if needed mkdir -p ~/.linear-skill/images # Download each image (use the signed URL from output) curl -s -o ~/.linear-skill/images/screenshot-1.png "<signed-url>" -
View the image using the Read tool:
# Claude can view the downloaded image Read ~/.linear-skill/images/screenshot-1.png -
Clean up after reviewing (images are not auto-deleted):
rm ~/.linear-skill/images/*.png
Important notes:
- Signed URLs expire after 1 hour - re-fetch the issue if URLs have expired
- macOS does NOT auto-clean
/tmp, so use~/.linear-skill/images/for predictable cleanup - Always review screenshots before implementing bug fixes to understand the exact issue
- Multiple screenshots may show different states (before/after, different views, etc.)
Release Workflow
For staging → production releases:
- All
Highpriority items must beDone Mediumitems are optional for current releaseLowitems are explicitly deferred- Once all required items are
Done, deploy to production
Semantic versioning may be adopted for tracking releases.
Starting a Session
Always load context first to see what you were working on:
npx linear-skill context
This shows:
- Recent session summaries
- Focus tickets from last session
- Recent actions taken
- Any notes you left
Quick Start
# Setup (one time)
cp .env.example .env
cp config.example.json config.json
# Edit .env with your LINEAR_API_KEY
npm install && npm run build
# Load previous context
npx linear-skill context
# List your assigned issues
npx linear-skill issues --assignee me
# Create an issue (for transcript-generated tickets, use Client Review state)
npx linear-skill create "Fix login bug" --team TEAM --state "Client Review"
# Update an issue
npx linear-skill update TEAM-123 --state "In Progress"
# Quick actions
npx linear-skill start TEAM-123 # Move to "In Progress"
npx linear-skill done TEAM-123 # Move to "Done"
# Mark tickets as current focus
npx linear-skill focus TEAM-123 TEAM-456
# Save session before ending
npx linear-skill session-save "Completed auth work, PR ready for review"
Session Memory
The skill remembers your recent work across conversations:
- Auto-tracking: All issue interactions are logged automatically
- Focus tickets: Mark what you're actively working on
- Session summaries: 2-3 recent session summaries are kept
- Context command: Loads this into new conversations
Command Categories
Read Commands
teams- List all teamsusers- List users (use--mefor current user)states --team TEAM- List workflow statesprojects- List projectscycles --team TEAM- List cycles (--activefor current)issues- List issues with filtersissue TEAM-123- Get issue detailsissue TEAM-123 --comments- Get issue details with commentscomments TEAM-123- Get comments for an issuesearch "query"- Search issuesinbox- List notifications from your inboxinbox --unread- List only unread notifications
Write Commands
create "title" --team TEAM- Create issueupdate TEAM-123 --state "Done"- Update issueassign TEAM-123 me- Assign issuecomment TEAM-123 "comment text"- Add commentstart TEAM-123- Move to "In Progress"done TEAM-123- Move to "Done"
Session Commands
context- Load session context (use at start)focus TEAM-123 TEAM-456- Set focus ticketsnotes "reminder text"- Set session notessession-save "summary"- Save session summarysessions- View session historysession-clear --older-than 7- Clear old data
Config Commands
init- Initialize configurationconfig- Show current configcache-refresh- Refresh teams/users/states cachecache-status- Show cache status
Issue Filtering
The issues command supports flexible filtering with multiple values for most parameters.
Available Filter Options
| Option | Alias | Description | Multiple Values |
|---|---|---|---|
--team |
-t |
Filter by team key or ID | No |
--project |
-p |
Filter by project ID(s) | Yes (comma-separated) |
--cycle |
-c |
Filter by cycle ID | No |
--assignee |
-a |
Filter by assignee (ID, email, or "me") | No |
--state |
-s |
Filter by state name(s) | Yes (repeat flag or comma) |
--priority |
-P |
Filter by priority (1-4 or names) | Yes (repeat flag or comma) |
--label |
-L |
Filter by label name(s) | Yes (repeat flag) |
--limit |
-l |
Maximum issues to return (default: 50) | No |
Priority Values
| Value | Name | Meaning |
|---|---|---|
| 1 | urgent | Hot fix to production |
| 2 | high | Critical for current release |
| 3 | medium | Standard priority |
| 4 | low | Nice-to-have |
| 0 | none | Not yet prioritized |
Filtering Examples
# Basic filters
npx linear-skill issues --team TEAM
npx linear-skill issues --assignee me
npx linear-skill issues --state "To Do"
# Priority filtering (CRITICAL for hotfix workflow)
npx linear-skill issues --team TEAM --priority 1 # Urgent only
npx linear-skill issues --team TEAM --priority urgent # Same as above
npx linear-skill issues --team TEAM --priority 1,2 # Urgent and High
npx linear-skill issues --team TEAM -P urgent -P high # Same as above
# Multiple states
npx linear-skill issues --team TEAM -s "To Do" -s "In Progress"
npx linear-skill issues --state "Triage,Client Review" # Comma syntax
# Label filtering (matches issues with ANY of the labels)
npx linear-skill issues --team TEAM --label "Bug"
npx linear-skill issues --team TEAM -L "Bug" -L "Feature"
# Combined filters
npx linear-skill issues --team TEAM --priority 1 --state "To Do"
npx linear-skill issues --team TEAM --assignee me --priority 1,2 --limit 20
# Find all inbox items (Triage + Client Review)
npx linear-skill issues --team TEAM -s "Triage" -s "Client Review"
# Production hotfix query
npx linear-skill issues --team TEAM --priority urgent --state "To Do"
Bulk Operations for Transcript Processing
When creating multiple issues from a meeting transcript:
# Create each ticket with Client Review status
npx linear-skill create "Ticket title" --team TEAM --state "Client Review" --priority 2 -d "Description here"
# After client reviews, they move approved tickets to To Do
npx linear-skill update TEAM-123 --state "To Do"
Setup
- Copy
.env.exampleto.env - Add your Linear API key:
LINEAR_API_KEY=lin_api_xxxx - Copy
config.example.jsontoconfig.json - Set your default team in
config.json - Run
npm install && npm run build - Test:
npx linear-skill teams
Skill Initialization
If this skill has not been configured for the current project, help the user set it up:
Check if initialized
npx linear-skill config
If team is "YOUR_TEAM_KEY" or missing, initialization is needed.
Initialization steps
-
Verify
.envhasLINEAR_API_KEYset -
Discover workspace:
npx linear-skill teams # Get team key npx linear-skill projects # Get project IDs and names npx linear-skill states --team TEAM_KEY # Check workflow states -
Ask the user:
- Which team to use as default?
- How to categorize their projects (support, feature phases)?
- What does "High priority" mean for their current work?
- What is their current project phase?
-
Update
config.jsonwith discovered values -
Check for missing workflow states (Client Review, Dev Done, Ready to Test) and guide user to create them in Linear UI
-
Refresh cache:
npx linear-skill cache-refresh
Documentation
- README.md - Developer setup guide
- REFERENCE.md - Full command reference
- CONFIG.md - Configuration guide
- SESSION.md - Session memory details
README
Linear Skill for Claude
A CLI tool that enables Claude to manage Linear issues, projects, and cycles with persistent session memory.
Overview
This skill provides Claude with the ability to:
- Create, update, and search Linear issues
- Track work across conversations with session memory
- Follow project-specific workflows and conventions
- Read and respond to comments/feedback
Quick Start
1. Get Your Linear API Key
- Go to Linear Settings
- Click "Create new API key"
- Give it a name (e.g., "Claude Skill")
- Copy the key (starts with
lin_api_)
2. Set Up Environment
cd .claude/skills/linear-skill
# Create .env file
cp .env.example .env
# Edit .env and add your API key
# LINEAR_API_KEY=lin_api_your_key_here
3. Install and Build
npm install
npm run build
4. Initialize Configuration
You have two options:
Option A: Let Claude help you (Recommended)
Tell Claude: "Initialize the Linear skill for this project"
Claude will:
- Discover your teams and projects
- Ask you questions about your workflow
- Populate
config.jsonwith the correct values
Option B: Manual setup
# Copy example config
cp config.example.json config.json
# Discover your team key
npx linear-skill teams
# Discover your projects
npx linear-skill projects
# Edit config.json with your values
5. Set Up Linear Workflow States (Manual)
The skill expects these workflow states in your Linear team. Some exist by default; others need to be created.
Go to: Linear → Settings → Teams → [Your Team] → Workflow
Default states (already exist):
- Triage
- Backlog
- Todo
- In Progress
- Done
- Canceled
States to create:
| State | Type | Purpose |
|---|---|---|
| Client Review | Backlog | Client inbox for reviewing developer-created tickets |
| Dev Done | Completed | Code complete, not yet deployed to staging |
| Ready to Test | Completed | Deployed to staging, awaiting client testing |
Recommended order in Linear:
- Client Review
- Triage
- Backlog
- Todo
- In Progress
- Dev Done
- Ready to Test
- Done
- Canceled
6. Verify Setup
# Test connection
npx linear-skill teams
# Verify workflow states
npx linear-skill states --team YOUR_TEAM_KEY
# Check configuration
npx linear-skill config
Configuration Reference
.env
# Required: Your Linear API key
LINEAR_API_KEY=lin_api_xxxxxxxxxxxx
config.json
{
"version": 1,
"team": "TEAM_KEY", // Your team's key (e.g., "ENG", "WIL")
"defaultProject": "uuid", // Default project ID for new issues
"allowedTeams": ["TEAM_KEY"], // Teams Claude can access
"allowedProjects": [], // Empty = all projects allowed
"projects": { // Named shortcuts for projects
"support": {
"id": "project-uuid",
"name": "Support & Maintenance",
"description": "Bug fixes and production support"
},
"feature": {
"id": "project-uuid",
"name": "Feature Development",
"description": "New feature work"
}
},
"priorityContext": { // What priorities mean for YOUR project
"high": "Required for current release",
"medium": "Standard sprint work",
"currentPhase": "Description of current project phase"
},
"labels": { // Label name → ID mappings
"bug": "label-uuid",
"feature": "label-uuid",
"improvement": "label-uuid"
},
"workflows": { // Default values by issue type
"bugfix": {
"defaultState": "Client Review",
"defaultPriority": 2,
"defaultLabels": ["bug"]
},
"feature": {
"defaultState": "Client Review",
"defaultPriority": 3,
"defaultLabels": ["feature"]
}
},
"preferences": {
"outputFormat": "json",
"cacheEnabled": true,
"cacheTtlMinutes": 60,
"sessionMemoryEnabled": true,
"maxTrackedTickets": 20,
"maxRecentActions": 50,
"maxSessionSummaries": 3
}
}
Claude Agent Initialization
When Claude encounters this skill for the first time in a project, it can help bootstrap the configuration.
Initialization Prompt
Tell Claude:
"Initialize the Linear skill. Help me set up the config.json with my team's information."
What Claude Will Do
-
Verify API key - Check
.envhas a validLINEAR_API_KEY -
Discover workspace - Run these commands:
npx linear-skill teams # Find team key npx linear-skill projects # Find project IDs npx linear-skill states --team TEAM # Verify workflow states -
Ask questions:
- Which team should be the default?
- What projects exist and how should they be categorized?
- What does "High priority" mean for your current phase?
- What labels do you use?
-
Generate config.json with discovered values
-
Verify workflow states and prompt to create missing ones
Post-Initialization
After setup, Claude will:
- Read
config.jsonat the start of each session - Use project-specific values instead of generic placeholders
- Apply the correct priority context for your current phase
File Structure
linear-skill/
├── .env # API key (git-ignored)
├── .env.example # Template for .env
├── config.json # Project-specific configuration
├── config.example.json # Template for config.json
├── cache.json # Cached teams/users/states (auto-generated)
├── session-memory.json # Session tracking (auto-generated)
├── SKILL.md # Main skill documentation for Claude
├── README.md # This file (developer documentation)
├── package.json
├── tsconfig.json
├── src/ # TypeScript source
│ ├── cli.ts # CLI entry point
│ ├── client/ # Linear API client
│ ├── commands/ # CLI commands
│ ├── config/ # Configuration management
│ ├── cache/ # Caching logic
│ ├── session/ # Session memory
│ ├── types/ # TypeScript types
│ └── utils/ # Utilities
├── dist/ # Compiled JavaScript (auto-generated)
└── skill/ # Additional documentation
├── REFERENCE.md # Full command reference
├── CONFIG.md # Configuration details
└── SESSION.md # Session memory details
Common Commands
# Session management
npx linear-skill context # Load previous session context
npx linear-skill session-save "msg" # Save session summary
# Reading
npx linear-skill issues --assignee me
npx linear-skill issue TEAM-123
npx linear-skill issue TEAM-123 --comments
npx linear-skill comments TEAM-123
# Writing
npx linear-skill create "Title" --team TEAM --state "Client Review"
npx linear-skill update TEAM-123 --state "In Progress"
npx linear-skill comment TEAM-123 "Comment text"
# Quick actions
npx linear-skill start TEAM-123 # → In Progress
npx linear-skill done TEAM-123 # → Done
# Maintenance
npx linear-skill cache-refresh # Refresh cached data
npx linear-skill cache-status # Check cache age
Troubleshooting
"Team not found"
# Check available teams
npx linear-skill teams
# Update config.json with correct team key
"State not found"
# List states for your team
npx linear-skill states --team YOUR_TEAM
# Ensure the state name matches exactly (case-sensitive)
API Key Issues
# Verify .env exists and has the key
cat .env
# Test the connection
npx linear-skill teams
Cache Issues
# Force refresh
npx linear-skill cache-refresh
# Or clear completely
npx linear-skill cache-clear
Documentation
- SKILL.md - Skill documentation for Claude (conventions, workflows)
- skill/REFERENCE.md - Full command reference
- skill/CONFIG.md - Configuration guide
- skill/SESSION.md - Session memory details
License
MIT