| name | linear-cli |
| description | Manage Linear issues and projects from the command line. This skill allows automating Linear project management. |
Linear CLI
A cross-platform CLI for Linear's GraphQL API, with unblocked issue filtering.
Install: npm install -g @dabble/linear-cli
First-Time Setup
linear login
This will:
- Ask where to save credentials (project or global)
- Open Linear API settings in your browser
- Prompt you to paste your API key
- Show available teams and let you pick one (or create a new team)
- Save config to the chosen location
Configuration
Config is layered: ~/.linear (global) is loaded first, then ./.linear (local) overrides on top. Local values override global; unset local values inherit from global. Env vars (LINEAR_API_KEY, LINEAR_TEAM, LINEAR_PROJECT, LINEAR_MILESTONE) are used as fallbacks.
# .linear file format
api_key=lin_api_xxx
team=ISSUE
project=My Project
milestone=Sprint 3
[aliases]
V2=Version 2.0 Release
MVP=MVP Milestone
Aliases
Create short codes for projects and milestones to use in commands:
linear alias V2 "Version 2.0"
linear alias MVP "MVP Milestone"
linear alias --list
linear alias --remove MVP
Use aliases anywhere a project or milestone name is accepted:
linear issues --project V2
linear issues --milestone MVP
linear issue create --project V2 --milestone MVP "New feature"
linear milestones --project V2
Aliases are shown in linear projects and linear milestones output:
Projects:
[V2] Version 2.0 Release started 58%
Milestones:
[MVP] MVP Milestone [next]
Quick Reference
linear login
linear logout
linear whoami
linear roadmap
linear project open "Phase 1"
linear milestone open "Sprint 3"
linear project close
linear milestone close
linear issues
linear issues --no-project
linear issues --no-milestone
linear issues --unblocked
linear issues --open
linear issues --status todo
linear issues --status backlog
linear issues --status in-progress
linear issues --status todo --status in-progress
linear issues --mine
linear issues --project "Name"
linear issues --milestone "M1"
linear issues --label bug
linear issues --priority urgent
linear issue show ISSUE-1
linear issue start ISSUE-1
linear issue create --title --project --assign --estimate M
linear issue create --title --priority urgent --assign
linear issue create --title --milestone --estimate S
linear issue create --title --blocked-by ISSUE-1 --blocked-by ISSUE-2
linear issue create --title --label bug --label frontend
linear issue update ISSUE-1 --status
linear issue update ISSUE-1 --priority high
linear issue update ISSUE-1 --estimate M
linear issue update ISSUE-1 --label bug --label frontend
linear issue update ISSUE-1 --assign
linear issue update ISSUE-1 --parent ISSUE-2
linear issue update ISSUE-1 --milestone
linear issue update ISSUE-1 --append
linear issue update ISSUE-1 --check
linear issue update ISSUE-1 --blocks ISSUE-2 --blocks ISSUE-3
linear issue close ISSUE-1
linear issue comment ISSUE-1
linear projects
linear projects --all
linear project show
linear project create --description
linear project complete
linear project open
linear project close
linear milestones --project
linear milestone show
linear milestone create --project --target-date 2024-03-01
linear milestone open
linear milestone close
linear projects reorder
linear project move --before
linear milestones reorder --project
linear milestone move --after --project
linear issues reorder ISSUE-1 ISSUE-2 ISSUE-3
linear issue move ISSUE-5 --before ISSUE-1
linear labels
linear label create --color
linear V2
linear --list
linear --remove V2
linear branch ISSUE-1
Estimation
Use t-shirt sizes for estimates. Always use --estimate (not -e) for clarity.
| Size | Meaning |
|---|
| XS | Trivial, < 1 hour |
| S | Small, couple hours |
| M | Medium, a day or so |
| L | Large, multi-day - consider breaking down |
| XL | Very large - should definitely break down |
linear issue create --title "Add caching" --estimate M --assign
linear issue create --title "Implement auth" --estimate L
linear issue create --title "Add login endpoint" --parent ISSUE-5 --estimate S
linear issue create --title "Add JWT validation" --parent ISSUE-5 --estimate S
Git Conventions
Always link git work to Linear issues:
linear branch ISSUE-5
git commit -m "ISSUE-5: Add cache invalidation on logout"
gh pr create --title "ISSUE-5: Add caching layer"
Workflow Guidelines
Setting context
When working on a specific project/milestone, set it as default to avoid repeating flags:
linear project open "Phase 1"
linear milestone open "Sprint 3"
linear issues
linear issue create --title "Fix"
linear project close
Getting oriented
linear roadmap
linear issues --project "P1"
linear issues --milestone "M1"
Starting work on an issue
linear issues --unblocked
linear issue show ISSUE-2
linear issue start ISSUE-2
linear branch ISSUE-2
When you hit a blocker
If work cannot continue due to a dependency or external factor:
linear issue create --title "Need API credentials" --blocks ISSUE-5
linear issue update ISSUE-3 --blocks ISSUE-5
This removes ISSUE-5 from --unblocked results until the blocker is resolved.
When a task is larger than expected
If you discover an M issue is actually L/XL, break it down:
linear issue create --title "Step 1: Research approach" --parent ISSUE-5 --estimate S
linear issue create --title "Step 2: Implement core logic" --parent ISSUE-5 --estimate M
linear issue create --title "Step 3: Add tests" --parent ISSUE-5 --estimate S
linear issue start ISSUE-6
Checklists vs. sub-issues
Use description checklists for lightweight steps within a single issue. Use sub-issues when items need their own status, assignee, or estimate.
linear issue update ISSUE-5 --append "## TODO\n- [ ] Add validation\n- [ ] Update tests\n- [ ] Check edge cases"
linear issue update ISSUE-5 --check "validation"
linear issue update ISSUE-5 --check "tests"
linear issue update ISSUE-5 --uncheck "validation"
linear issue create --title "Add login endpoint" --parent ISSUE-5 --estimate S
Prefer checklists when the items are small and don't need independent tracking. Prefer sub-issues when you'd want to assign, estimate, or block on them individually. Use --check to mark items complete as you finish them.
Completing work
After finishing implementation, ask the developer if they want to close the issue:
linear issue close ISSUE-5
Do not auto-close issues. Let the developer review the work first.
Adding notes while working
linear issue update ISSUE-2 --append "## Notes\n\nDiscovered X, trying Y approach..."
linear issue comment ISSUE-2 "Found the root cause in auth.ts:142"
Organizing with milestones
Milestones group related issues within a project:
linear milestone create "Beta" --project "Phase 1" --target-date 2024-03-01
linear issue create --title "Core feature" --milestone "Beta" --estimate M
linear issue update ISSUE-5 --milestone "Beta"
linear milestones reorder "Alpha" "Beta" "Stable" --project "Phase 1"
Completing a phase
linear issue close ISSUE-7
linear project complete "Phase 1"
Parent Context
When viewing an issue with linear issue show, you'll see where it fits in the larger work:
# ISSUE-6: Add JWT validation
State: In Progress
...
## Context
ISSUE-3: Implement authentication system
- [Done] ISSUE-4: Add login endpoint
→ [In Progress] ISSUE-6: Add JWT validation ← you are here
- [Backlog] ISSUE-7: Add refresh tokens
This helps understand the scope and what comes before/after the current task.