6.5 KiB
name, description
| name | description |
|---|---|
| linear-lifecycle | Use when working with Linear issues across development workflow - uses Linearis CLI with JSON output for zero-context issue management. Get details, create issues, update status, and add comments without consuming tokens in main session. |
Linear Lifecycle Management with Linearis CLI
Overview
Core principle: Use Linearis CLI for all Linear operations instead of loading 20k token Linear MCP. CLI returns structured JSON for parsing without context overhead.
Tool: Linearis - Linear CLI built for LLM agents with ~1000 token footprint vs 13k+ for MCP.
Context savings: 100% - no MCP loaded, just bash commands with JSON output.
Setup
One-time dependencies install:
Use /linear-setup to install Linearis CLI (required for this skill to work).
Token configuration:
Automatic! On first use, Claude will:
- Check if
~/.linear_api_tokenexists - If not, prompt you for your Linear API token
- Save it to
~/.linear_api_tokenwith secure permissions - Verify the connection works
Get your token: Linear Settings → Security & Access → Personal API keys
When to Use
Use this skill when:
- Starting work on a Linear issue (need issue details)
- Creating new issues from bugs or features discovered
- Updating issue status during development
- Adding comments or progress updates
- Searching for issues across teams/projects
Don't use when:
- Issue tracking not needed for current work
- Working on non-Linear projects
Implementation
IMPORTANT: Always check for token on first Linear operation in a skill invocation:
# Check if token exists
if [ ! -f ~/.linear_api_token ]; then
echo "⚠️ Linear API token not found."
echo ""
echo "Get your token from: Linear Settings → Security & Access → Personal API keys"
echo ""
# Use AskUserQuestion tool to prompt for token
# Save response to ~/.linear_api_token
# Set permissions: chmod 600 ~/.linear_api_token
# Verify it works with: linearis issues list -l 1
fi
After token is confirmed, proceed with Linear operations. Linearis automatically reads from ~/.linear_api_token.
Creating a New Issue
IMPORTANT: Keep it simple! Specify the team key directly. Never use --labels or --priority.
User request: "Create a Linear issue for fixing the avatar crop bug"
Command:
linearis issues create "Fix avatar crop bug" \
--team BET \
--description "Avatar images are cropping incorrectly on mobile devices. Need to adjust aspect ratio handling."
Key rules:
- ✅ Use
--team TEAM_KEY(get from user's Linear workspace, e.g. BET, ENG, etc.) - ✅ Keep description clear and concise
- ❌ NEVER use --labels (causes errors)
- ❌ NEVER use --priority (unnecessary)
Parse response:
# Returns JSON with: {identifier, title, url, ...}
# Extract: issue ID (e.g., BET-145) and URL
Response to user:
✓ Created issue BET-145: Fix avatar crop bug
https://linear.app/your-workspace/issue/BET-145
Starting Work on an Issue
User request: "Start working on bet-123"
Command:
linearis issues read BET-123
Parse JSON response for:
- title
- description
- state (current status)
- priority
- labels
- branchName (suggested git branch)
Response to user:
Issue: BET-123 - [Title]
Status: [State]
Description: [Brief description]
Labels: [labels]
Branch: [branchName or generate from title]
Creating branch [branch-name]...
Then create branch and proceed with development.
Updating Issue Status
User request: "Update bet-456 to in progress"
Command:
linearis issues update BET-456 --state "In Progress"
Response:
✓ Updated BET-456 to In Progress
Adding Comments
User request: "Add comment to bet-789 about the refactor being done"
Command:
linearis comments create BET-789 --body "Completed auth refactor. Moved from Context API to Zustand for better performance. All tests passing."
Response:
✓ Added comment to BET-789
Searching for Issues
User request: "Find all open bugs with label 'authentication'"
Command:
linearis issues search "authentication" --team "$LINEAR_TEAM_KEY" | jq '.[] | select(.labels[]? | contains("bug")) | {id: .identifier, title: .title, state: .state.name}'
Parse and format results as table.
Completing Work
User request: "Close bet-789, PR merged"
Commands:
# 1. Add completion comment
linearis comments create BET-789 --body "Feature complete. PR #456 merged to main."
# 2. Update status to done
linearis issues update BET-789 --state "Done"
Response:
✓ Marked BET-789 as Done
✓ Added completion comment
Quick Reference
| Operation | Command Pattern |
|---|---|
| List recent issues | linearis issues list -l 10 |
| Get issue details | linearis issues read ABC-123 |
| Create issue | linearis issues create "Title" --team TEAM_KEY --description "Description" |
| Update status | linearis issues update ABC-123 --state "In Progress" |
| Add comment | linearis comments create ABC-123 --body "Comment text" |
| Search issues | linearis issues search "query" |
Common Mistakes
Not parsing JSON output
- ❌ Don't show raw JSON to user
- ✅ Parse and format relevant fields cleanly
Hardcoding team/project names
- ❌ Don't assume team structure
- ✅ Let user specify or discover via linearis commands
Using issue IDs incorrectly
- ❌ Don't lowercase (bet-123) in commands
- ✅ Use proper case (BET-123) - linearis handles both but be consistent
Real-World Impact
Before (Linear MCP):
- 20k tokens consumed at session start
- All tools loaded in context
- Context budget: 180k/200k remaining
After (Linearis CLI):
- 0 tokens in session (just bash commands)
- JSON parsing lightweight
- Context budget: 200k/200k remaining
- 100% context savings
Performance:
- Linearis usage docs: ~1000 tokens
- MCP tool definitions: ~13000 tokens
- 92% reduction even for reference material
Advanced: Multi-Team Operations
List issues across teams:
linearis issues list --team Frontend -l 5
linearis issues list --team Backend -l 5
Create issue in specific team:
linearis issues create "Fix API timeout" --team Backend
No workspace switching needed - all commands accept --team flag for cross-team operations within same Linear workspace.