Jira/cli
Jira CLI
jira-cli-tools-generic.md
Jira CLI Tools — Install & Configure
Portable guide — no organization, site, or project specifics. Substitute the placeholders below for your own environment. For the site-specific version used here, see jira-cli-tools.md.
Two different tools both get called "the Jira CLI". They do different jobs and coexist without conflict — different binary names, different config files.
| Tool | Binary | Origin | Best for |
|---|---|---|---|
| acli | acli |
Atlassian official | Create/edit/transition work items, official API surface, Rovo Dev |
| jira-cli | jira |
ankitpokhrel/jira-cli (community) | Fast JQL triage, issue lists, terminal-friendly views |
Both are interactive tools. For automation, prefer the REST API directly — these CLIs have no Atlassian Document Format (ADF) support and their human-readable output is not stable enough to parse reliably.
Placeholders used below
Substitute your own values:
| Placeholder | Meaning | Example |
|---|---|---|
YOUR-SITE.atlassian.net |
Your Jira Cloud site | acme.atlassian.net |
YOUR_EMAIL |
Atlassian account email | you@example.com |
YOUR_TOKEN |
Atlassian API token | ATATT3x... |
PROJ |
Default project key | ENG |
Your Board Name |
Default board within that project | ENG Kanban |
Create an API token at https://id.atlassian.com/manage-profile/security/api-tokens.
Prerequisites
- Auth: Basic authentication — email + API token, not your password.
- API version: Jira Cloud REST API v3. v2 is deprecated and can return misleading
Issue does not exist or you do not have permission to see it.errors that have nothing to do with permissions. - Jira and Confluence are separate sites even within one organization. The same API token usually works for both, but authenticating one does not authenticate the other.
Verify credentials before blaming a CLI:
curl -s -o /dev/null -w '%{http_code}\n' \
-u "YOUR_EMAIL:YOUR_TOKEN" \
https://YOUR-SITE.atlassian.net/rest/api/3/myself
# expect: 200
A 401 means the token or email is wrong; a 404 on a known-good issue usually means you
hit v2 instead of v3.
Install (Linux / WSL, x86_64)
Both ship as single static binaries. No root, no package manager.
mkdir -p ~/.local/bin
# --- acli (Atlassian official) ---
curl -fsSL -o ~/.local/bin/acli \
https://acli.atlassian.com/linux/latest/acli_linux_amd64/acli
chmod +x ~/.local/bin/acli
# --- jira-cli (community) ---
ASSET=$(curl -s https://api.github.com/repos/ankitpokhrel/jira-cli/releases/latest \
| grep browser_download_url | grep -i 'linux_x86_64.tar.gz' | cut -d'"' -f4)
curl -fsSL -o /tmp/jira.tgz "$ASSET"
tar -xzf /tmp/jira.tgz -C /tmp
mv /tmp/jira_*_linux_x86_64/bin/jira ~/.local/bin/jira
chmod +x ~/.local/bin/jira
rm -rf /tmp/jira.tgz /tmp/jira_*_linux_x86_64
Ensure ~/.local/bin is on PATH:
case ":$PATH:" in
*":$HOME/.local/bin:"*) echo "already on PATH" ;;
*) echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc ;;
esac
Confirm:
acli --version
jira version
Other platforms
- macOS (Homebrew):
brew install ankitpokhrel/jira-cli/jira-cli brew tap atlassian/homebrew-acli && brew install acliFor a manual acli install, swap the URL path to
acli_darwin_amd64oracli_darwin_arm64. - Windows: download
acli_windows_amd64/acli.exefrom the same host, and the jira-cliwindows_x86_64.ziprelease asset. Put both anywhere onPATH. - Linux arm64: substitute
acli_linux_arm64and the jira-clilinux_arm64asset.
Configure
acli — the token must arrive on stdin
--token is a boolean flag meaning "read the token from standard input". It does not
take a value. Passing the token as an argument silently consumes the next argv entry and
the login fails in a confusing way.
# Correct — token piped in
printf '%s' "YOUR_TOKEN" | acli jira auth login \
--site YOUR-SITE.atlassian.net \
--email "YOUR_EMAIL" \
--token
# Wrong — do not do this
# acli jira auth login --site ... --email ... --token "YOUR_TOKEN"
Reading from a file works the same way:
acli jira auth login --site YOUR-SITE.atlassian.net --email "YOUR_EMAIL" --token < token.txt
Browser-based OAuth is also available if you'd rather not manage a token:
acli jira auth login --web
Verify:
acli jira auth status # expect: ✓ Authenticated
jira-cli — needs a board, and reads the token from the environment
jira init is interactive by default. --project alone is not sufficient: it still
prompts for a board, so under </dev/null it dies with
Unable to generate configuration: EOF. Pass --board explicitly for a fully
non-interactive setup.
export JIRA_API_TOKEN="YOUR_TOKEN" # jira-cli reads this exact variable name
jira init --installation cloud \
--server "https://YOUR-SITE.atlassian.net" \
--login "YOUR_EMAIL" \
--auth-type basic \
--project PROJ \
--board "Your Board Name" \
--force
If you don't know the board name, run jira init interactively once — it lists the boards
available in the project and lets you filter by typing.
Notes:
- Config is written to
~/.config/.jira/.config.yml; override the location withJIRA_CONFIG_FILE. - Re-run with
--forceto change project or board later. JIRA_API_TOKENmust be exported in any shell that runsjira— the token is deliberately not stored in the config file. Put it in your shell profile or a secrets helper.- For Jira Server/Data Center rather than Cloud, use
--installation local, and--auth-type bearer(personal access token) ormtlsas appropriate.
Usage
# --- acli ---
acli jira workitem search --jql "project = PROJ AND status = 'To Do' ORDER BY created DESC" --limit 10
acli jira workitem view PROJ-123
acli jira auth status
# --- jira-cli ---
jira issue list -p PROJ --plain --no-headers --columns KEY,STATUS,SUMMARY
jira issue list -p PROJ -a "YOUR_EMAIL" -s "In Progress"
jira issue list -p PROJ --order-by created --reverse
jira issue view PROJ-123
jira open PROJ-123 # opens in browser
--plain --no-headers makes jira-cli output usable in a pipeline, but see the parsing
caveat above before depending on it in scripts.
Gotchas
- jira-cli's
-qtakes a JQL fragment, not a complete query. It is appended to the project/board clause jira-cli builds itself, so an embeddedORDER BYis a syntax error:Error in the JQL Query: Expecting ',' but got 'ORDER'. (line 1, character 38)Use
--order-by <field>and--reverseinstead. By contrast,acli --jqldoes accept a complete query includingORDER BY. - acli
--tokenreads stdin. This is the single most common acli setup failure — see above. jira inithangs or exits withEOFwhen--boardis omitted, even if--projectis supplied.- Jira and Confluence are separate sites. One token, two authentications.
- Corporate TLS interception: if a proxy injects a self-signed certificate, jira-cli
accepts
jira init --insecureto skip verification. Prefer installing the corporate CA certificate into the system trust store where you can —--insecuredisables verification entirely. - Rate limiting: Atlassian Cloud throttles aggressively. Batch queries with a sensible
--limitrather than looping per-issue.