jira-cli
Jira CLI
Interact with Atlassian Jira from the command line using jira-cli and direct API calls.
Assume
jira-cliis already installed and configured. If thejiracommand is not found or not configured, refer to references/INSTALLATION.md for setup instructions.
Important: Confirm Before Creating
Always ask the user to confirm details before creating or updating tickets. Do not assume:
- Ticket description or acceptance criteria
- Priority level
- Labels or components
- Issue type (Task vs Story vs Bug)
When the user requests a new ticket, confirm the summary and ask if they want to provide a description or other details before creating it.
Always provide the ticket link after creating a ticket (e.g., https://<server>/browse/PROJ-1234).
When to Use
- User wants to create, update, or search Jira issues
- User wants to check sprint progress or manage sprints
- User wants to transition ticket statuses
- User wants to manage epics and link issues
- User wants to automate Jira workflows
Authentication
Credentials are stored in the global psst vault with the jira tag:
# For jira-cli commands (injects JIRA_API_TOKEN)
psst --global JIRA_API_TOKEN -- jira <command>
# For direct API calls (inline psst get)
curl -s -u "$(psst --global get JIRA_USER):$(psst --global get JIRA_API_TOKEN)" \
"$(psst --global get JIRA_SERVER)/rest/api/3/..."
Common Operations
List Issues
# List recent issues in a project
psst --global JIRA_API_TOKEN -- jira issue list -pPROJ --plain
# Issues assigned to current user
psst --global JIRA_API_TOKEN -- jira issue list -a$(jira me) --plain
# Filter by status
psst --global JIRA_API_TOKEN -- jira issue list -s"To Do" --plain
psst --global JIRA_API_TOKEN -- jira issue list -s"In Progress" --plain
# Filter by priority
psst --global JIRA_API_TOKEN -- jira issue list -yHigh --plain
# Filter by type
psst --global JIRA_API_TOKEN -- jira issue list -tBug --plain
psst --global JIRA_API_TOKEN -- jira issue list -tEpic --plain
# Combine filters
psst --global JIRA_API_TOKEN -- jira issue list -yHigh -s"In Progress" -a$(jira me) --plain
# Raw JQL query
psst --global JIRA_API_TOKEN -- jira issue list -q"summary ~ 'keyword'" --plain
# Output as JSON or CSV
psst --global JIRA_API_TOKEN -- jira issue list --raw
psst --global JIRA_API_TOKEN -- jira issue list --csv
View Issue Details
# View issue in terminal
psst --global JIRA_API_TOKEN -- jira issue view PROJ-1234
# View with comments
psst --global JIRA_API_TOKEN -- jira issue view PROJ-1234 --comments 5
# Get raw JSON
psst --global JIRA_API_TOKEN -- jira issue view PROJ-1234 --raw
Create Issues
# Interactive creation
psst --global JIRA_API_TOKEN -- jira issue create
# Non-interactive with all parameters
psst --global JIRA_API_TOKEN -- jira issue create -tTask -s"Issue summary" -b"Description" -yMedium --no-input
# Create bug
psst --global JIRA_API_TOKEN -- jira issue create -tBug -s"Bug title" -yHigh -lbug --no-input
# Create with labels and components
psst --global JIRA_API_TOKEN -- jira issue create -tStory -s"Story title" -lbackend -lagent -CBackend --no-input
# Attach to epic
psst --global JIRA_API_TOKEN -- jira issue create -tTask -s"Task title" -PPROJ-100 --no-input
Update/Edit Issues
# Edit summary
psst --global JIRA_API_TOKEN -- jira issue edit PROJ-1234 -s"New summary" --no-input
# Edit priority
psst --global JIRA_API_TOKEN -- jira issue edit PROJ-1234 -yHigh --no-input
# Add/remove labels (use - prefix to remove)
psst --global JIRA_API_TOKEN -- jira issue edit PROJ-1234 -l"new-label" -l"-old-label" --no-input
Transition Issues (Move Status)
# Move to In Progress
psst --global JIRA_API_TOKEN -- jira issue move PROJ-1234 "In Progress"
# Move to Done
psst --global JIRA_API_TOKEN -- jira issue move PROJ-1234 Done
# Move with comment
psst --global JIRA_API_TOKEN -- jira issue move PROJ-1234 Done --comment "Completed implementation"
Assign Issues
# Assign to self
psst --global JIRA_API_TOKEN -- jira issue assign PROJ-1234 $(jira me)
# Assign to someone
psst --global JIRA_API_TOKEN -- jira issue assign PROJ-1234 "User Name"
# Unassign
psst --global JIRA_API_TOKEN -- jira issue assign PROJ-1234 x
Comments
# Add comment
psst --global JIRA_API_TOKEN -- jira issue comment add PROJ-1234 "Comment text"
# Add from stdin
echo "Comment from stdin" | psst --global JIRA_API_TOKEN -- jira issue comment add PROJ-1234
Epics
# List epics
psst --global JIRA_API_TOKEN -- jira epic list --plain
# List issues in an epic
psst --global JIRA_API_TOKEN -- jira epic list PROJ-100 --plain
# Create epic
psst --global JIRA_API_TOKEN -- jira epic create -n"Epic Name" -s"Epic Summary" --no-input
# Add issues to epic
psst --global JIRA_API_TOKEN -- jira epic add PROJ-100 PROJ-1234 PROJ-5678
Sprints
# List sprints
psst --global JIRA_API_TOKEN -- jira sprint list --table --plain
# Current sprint issues
psst --global JIRA_API_TOKEN -- jira sprint list --current --plain
# Previous / next sprint
psst --global JIRA_API_TOKEN -- jira sprint list --prev --plain
psst --global JIRA_API_TOKEN -- jira sprint list --next --plain
# Add issues to sprint
psst --global JIRA_API_TOKEN -- jira sprint add SPRINT_ID PROJ-1234 PROJ-5678
Open in Browser
# Open issue
psst --global JIRA_API_TOKEN -- jira open PROJ-1234
# Open project
psst --global JIRA_API_TOKEN -- jira open
Direct API Access (Fallback)
If jira-cli has issues, use the API directly:
# List issues
curl -s -u "$(psst --global get JIRA_USER):$(psst --global get JIRA_API_TOKEN)" \
"$(psst --global get JIRA_SERVER)/rest/api/3/search/jql?jql=project=PROJ+ORDER+BY+created+DESC&maxResults=10&fields=key,summary,status" \
| jq -r '.issues[] | "\(.key): \(.fields.summary) [\(.fields.status.name)]"'
# Get user's issues
curl -s -u "$(psst --global get JIRA_USER):$(psst --global get JIRA_API_TOKEN)" \
"$(psst --global get JIRA_SERVER)/rest/api/3/search/jql?jql=(assignee=currentUser()+OR+reporter=currentUser())+ORDER+BY+updated+DESC&maxResults=15&fields=key,summary,status"
# View single issue
curl -s -u "$(psst --global get JIRA_USER):$(psst --global get JIRA_API_TOKEN)" \
"$(psst --global get JIRA_SERVER)/rest/api/3/issue/PROJ-1234" | jq .
# Get available projects
curl -s -u "$(psst --global get JIRA_USER):$(psst --global get JIRA_API_TOKEN)" \
"$(psst --global get JIRA_SERVER)/rest/api/2/project" | jq -r '.[] | "\(.key): \(.name)"'
Quick Reference
CLI Output Flags
| Flag | Description |
|---|---|
--plain |
Plain text output (scriptable) |
--no-headers |
Hide table headers in plain mode |
--raw |
Raw JSON output |
--csv |
CSV format output |
--columns KEY,SUMMARY,STATUS |
Select specific columns |
Issue List Filters
| Flag | Description | Example |
|---|---|---|
-t, --type |
Issue type | -tBug, -tEpic, -tTask |
-s, --status |
Status | -s"To Do", -s"In Progress" |
-y, --priority |
Priority | -yHigh, -yMedium |
-a, --assignee |
Assignee | -a$(jira me), -ax (unassigned) |
-r, --reporter |
Reporter | -r$(jira me) |
-l, --label |
Label | -lbackend, -lurgent |
-P, --parent |
Parent/Epic | -PPROJ-100 |
-w, --watching |
Issues you watch | -w |
--created |
Created filter | --created week, --created -7d |
--updated |
Updated filter | --updated today |
-q, --jql |
Raw JQL | -q"summary ~ cli" |
Notes
- The tilde (~) acts as a NOT operator:
-s~Donemeans "status is not Done" - Use
-axto find unassigned issues - The
--no-inputflag skips interactive prompts for scripting - Interactive mode works best in a real terminal (not in Claude Code bash)
More from michaelliv/dotskills
slack-cli
Interact with Slack from the command line. Send messages, read channel history, list channels and users, upload files, manage reminders, and more. Use when the user wants to communicate with Slack, check messages, or automate Slack workflows.
14cli-design
Review and improve CLI program design using principles from clig.dev — the Command Line Interface Guidelines. Covers help text, output, errors, arguments/flags, subcommands, interactivity, configuration, naming, and distribution. Use when designing a new CLI, reviewing CLI UX, or fixing how a command-line tool communicates with users.
5thinktank
Simulate an expert panel discussion on a topic. Suggests 3 relevant experts/personas based on context and has them debate approaches, trade-offs, and arrive at recommendations. Use when brainstorming, exploring design decisions, or wanting multiple expert perspectives on a problem.
5issue-plan
Break a design goal into detailed, dependency-ordered GitHub issues. Use when the user has a feature idea, architectural change, or refactor and wants a structured plan with issues ready for sprint execution. Triggers include "plan this", "break this down", "create issues for this", or presenting a design/architecture to implement.
1issue-sprint
Rapid iteration on GitHub issues — prioritize, create worktrees, generate prompts for subagents, review PRs, merge, repeat. Use when the user wants to work through multiple issues quickly, says "let's sprint", "batch these issues", or wants to parallelize work across multiple agents.
1