I spend too much time switching between my terminal and Linear’s web app. The Linear CLI lets me manage tickets without leaving my editor. Here’s how I use it.

Installation Link to heading

Install via Homebrew:

brew install schpet/tap/linear

Authenticate (opens browser for OAuth):

linear config

This creates ~/.config/linear/config.json with your API token and default team/workspace.

My ticket workflow Link to heading

Here’s how I work with Linear tickets day-to-day:

1. Check what I’m working on:

linear issue list --assignee @me --status "In Progress"

I have this aliased to lme in my shell.

2. Start a new ticket:

linear issue start

This does three things:

  • Prompts me to select a ticket from my assigned issues
  • Moves it to “In Progress”
  • Creates a git branch with the ticket ID (e.g., CET-123-fix-auth-bug)

I love this feature. It keeps my branches consistent and links them to tickets automatically.

3. View ticket details:

linear issue view CET-123

Shows the full description, comments, and status in my terminal. If I need the web view:

linear issue view CET-123 --web

4. Update status:

linear issue status CET-123 "Done"

5. Search tickets:

linear issue list --query "authentication"

Team management Link to heading

Show current team:

linear team
# Shows: Cetus (CET)

Switch teams:

linear config
# Select different default team

CLI vs web interface Link to heading

Both have their place:

CLI for:

  • Checking my assigned tickets (faster than loading the web app)
  • Creating git branches from tickets (linear issue start)
  • Quick status updates
  • Searching tickets by keyword
  • When I’m already in the terminal

Web for:

  • Creating new tickets (richer editor, can add links/images easily)
  • Reading long descriptions or comment threads
  • Triaging the team backlog
  • Using keyboard shortcuts for bulk operations
  • Reviewing roadmaps and cycle planning

The web interface is more powerful, but the CLI is faster for routine tasks. I probably use the CLI for 60% of my Linear interactions now.

My shell functions Link to heading

I’ve wrapped some common commands in shell functions (in ~/.zshrc):

# List my tickets
alias lme="linear issue list --assignee @me"

# List my in-progress tickets
alias lmi="linear issue list --assignee @me --status 'In Progress'"

# Create a new ticket in Cetus team
function lnew() {
  linear issue create --team CET --title "$1"
}

# Quick view ticket
function lv() {
  linear issue view "$1"
}

Usage:

lme                          # What am I working on?
lnew "Fix auth timeout"      # Create ticket
lv CET-123                   # View ticket

Gotchas Link to heading

Git branch naming: linear issue start creates branches, but if you’re in a dirty working tree, it will fail. Stash or commit first.

Authentication token: If you work on multiple machines, you’ll need to run linear config on each. The token is stored locally.

Team context: The CLI uses your default team from the config. If you work across teams, you’ll need to specify --team or change your default frequently.

Further reading Link to heading