Remote developers spend most of the day in the terminal. Switching to a browser to file a ticket, check sprint status, or move an issue breaks focus. CLI project management tools let you do that work without leaving the command line.
This guide covers the best CLI tools for project management in 2026: the Linear CLI, GitHub Projects via gh, Jira CLI, and TaskWarrior for personal task tracking.
Linear CLI
Linear is the project management tool most engineering teams are moving to. Its official CLI covers most daily operations.
Install and Auth
# Install via npm
npm install -g @linear/cli
# Authenticate
linear auth
# Verify connection
linear whoami
Daily Workflow Commands
# List your assigned issues
linear issue list --assignee me
# Create an issue
linear issue create \
--title "Fix login timeout on Safari" \
--team ENG \
--priority urgent \
--label "bug"
# View issue detail
linear issue view ENG-1234
# Update issue status
linear issue update ENG-1234 --status "In Progress"
# Add a comment
linear issue comment ENG-1234 --body "Reproduced on Safari 17.3, investigating"
# Move to a cycle (sprint)
linear issue update ENG-1234 --cycle current
# List issues in current cycle
linear issue list --cycle current --team ENG
# Search issues
linear issue search "login timeout"
Filtering and Views
# Issues by priority
linear issue list --priority urgent --assignee me
# Issues by label
linear issue list --label "bug" --team ENG
# List cycles
linear cycle list --team ENG
# View current cycle with issues
linear cycle view --current --team ENG
# Export issues to JSON (for scripts)
linear issue list --format json | jq '.[] | {id, title, status}'
GitHub Projects via gh CLI
If your team manages work through GitHub Projects, the gh CLI handles issues and project items directly.
Install gh
# macOS
brew install gh
# Linux
sudo apt-get install gh # after setting up the GitHub apt repo
# or
curl -sS https://webi.sh/gh | sh
# Auth
gh auth login
GitHub Issues Workflow
# List open issues assigned to you
gh issue list --assignee @me
# Create an issue
gh issue create \
--title "Add rate limiting to /api/auth" \
--body "We're seeing 500s under load. Need rate limiting on the auth endpoint." \
--label "enhancement,backend" \
--assignee @me
# View an issue
gh issue view 142
# Close an issue with a comment
gh issue close 142 --comment "Fixed in #145"
# List issues by label
gh issue list --label "bug" --state open
# Filter with jq
gh issue list --json number,title,assignees,labels | \
jq '.[] | select(.labels[].name == "priority:high")'
GitHub Projects (v2) via gh API
# List projects in an org
gh project list --owner myorg
# List items in a project
gh project item-list 5 --owner myorg
# Add an issue to a project
gh project item-add 5 --owner myorg --url https://github.com/myorg/myrepo/issues/142
# Update a project item field (e.g., Status)
gh project item-edit \
--project-id PVT_abc123 \
--id PVTI_def456 \
--field-id PVTF_ghi789 \
--text "In Progress"
# Create a PR linked to an issue (auto-closes on merge)
gh pr create \
--title "Add rate limiting to auth endpoint" \
--body "Closes #142" \
--base main
# Check PR status
gh pr status
gh pr checks
Jira CLI (go-jira)
For teams using Jira, go-jira provides a fast terminal interface.
Install and Configure
# Install go-jira
# macOS
brew install go-jira
# Linux
curl -L https://github.com/go-jira/jira/releases/latest/download/jira-linux-amd64 \
-o /usr/local/bin/jira
chmod +x /usr/local/bin/jira
# Configure
cat > ~/.jira.d/config.yml << 'EOF'
endpoint: https://yourcompany.atlassian.net
user: you@yourcompany.com
project: ENG
EOF
# Authenticate (uses API token from https://id.atlassian.com/manage-profile/security/api-tokens)
export JIRA_API_TOKEN=your_api_token_here
Daily Jira Commands
# List your active issues
jira list --query "assignee = currentUser() AND status != Done ORDER BY priority DESC"
# Create an issue
jira create --project ENG \
--issuetype Bug \
--summary "Login timeout on mobile Safari" \
--description "Users on iOS 17 are timing out during login"
# View an issue
jira view ENG-1234
# Transition an issue
jira transition "In Progress" ENG-1234
# Add a comment
jira comment ENG-1234 --comment "Reproduced. Looking at auth token expiry."
# Assign to yourself
jira assign ENG-1234 $(jira me)
# List transitions for an issue
jira transitions ENG-1234
# Sprint report
jira list --query "sprint in openSprints() AND project = ENG"
TaskWarrior for Personal Task Tracking
TaskWarrior is a local CLI task manager. It doesn’t integrate with Linear or Jira, but it’s fast for personal to-do lists, daily priorities, and tasks that don’t belong in a project tracker.
Install
sudo apt-get install taskwarrior # Debian/Ubuntu
brew install task # macOS
Core Commands
# Add a task
task add "Write incident report for ENG-1234" project:work priority:H due:tomorrow
# List tasks
task list
task next # shows prioritized list
# Mark done
task 3 done
# Filter tasks
task project:work list
task +bug list # tagged bug
task due:today list
# Modify a task
task 3 modify priority:M due:friday
# Delete a task
task 3 delete
# Create a recurring task
task add "Weekly status update" recur:weekly due:friday project:work
# Time tracking (with taskwarrior-hooks or timewarrior)
task 3 start
task 3 stop
# Reports
task burndown.weekly
task summary
task stats
Sync TaskWarrior with Remote Teams
# Use Taskserver (taskd) for team sync, or simpler: sync via git
mkdir -p ~/.task-backup
cat > ~/bin/task-sync.sh << 'EOF'
#!/bin/bash
cd ~/.task
git add -A
git commit -m "task sync $(date +%Y-%m-%dT%H:%M)"
git push origin main
EOF
chmod +x ~/bin/task-sync.sh
# Add to crontab for automatic sync
crontab -e
# Add: */30 * * * * /home/user/bin/task-sync.sh >> /tmp/task-sync.log 2>&1
Shell Aliases for Fast Access
# Add to ~/.bashrc or ~/.zshrc
# Linear shortcuts
alias li='linear issue list --assignee me'
alias linp='linear issue list --assignee me --priority urgent'
# GitHub shortcuts
alias ghi='gh issue list --assignee @me'
alias ghp='gh pr status'
# Quick issue from git branch name
alias create-issue='gh issue create --title "$(git branch --show-current | tr - " ")"'
# TaskWarrior shortcuts
alias t='task'
alias tn='task next'
alias ta='task add'
alias td='task done'
# Open current sprint in browser
alias sprint='open "https://linear.app/yourteam/view/my-issues"'
Related Articles
- macOS
- Best Contract Management Tool for Remote Agency Multiple
- Best Async Project Management Tools for Distributed Teams
- Best Project Management Tool for 3 Person Startup 2026
- Best Project Management Tool for Solo Freelance Developers
Built by theluckystrike — More at zovo.one