Reference

CLI reference

jira-cli reads and searches Jira issues via JQL, creates and edits issues, moves them through workflow transitions, and manages comments. It supports Jira Cloud and Data Center / Server, and emits agent-friendly JSON with structured errors. NDJSON lists keep rows on stdout and emit pagination notices on stderr; pass the notice's next value as --cursor to continue. AGENT NOTE: a companion Skill ("jira") carries the canonical usage, safety modes, and env setup and is the source of truth for driving this CLI. If you are an agent, load that Skill before composing commands. Check status with `jira-cli skill status`; install it with `jira-cli skill install`. After a CLI upgrade, refresh the Skill and reload the agent context.

Generated from the command tree, so it always matches --help.

Global flags

Persistent flags accepted by every command.

FlagDefaultDescription
--allow-writesfalseoverride read-only mode (defaults.read_only / JIRA_CLI_READ_ONLY) for this invocation
--auth-schemeauthentication scheme (overrides environment and config)
--base-urlJira site URL (overrides config)
--configconfig directory (default ~/.angelmsger/jira)
--credential-urlcredential acquisition page URL (display only)
--fieldscomma-separated dot-path fields to keep
--flavorbackend flavor: cloud, datacenter or auto
--format, -foutput format: json, table or ndjson
--prettyfalsehuman-friendly mode for interactive terminal use only (agents/scripts should omit): TUI in `config init`, colorized JSON elsewhere; errors without a TTY
--timeoutrequest timeout, e.g. 30s
--use-contextuse a named context for this invocation
--verbose, -vfalseverbose diagnostics on stderr

jira-cli auth

Inspect and manage stored credentials

jira-cli auth

jira-cli auth guide

Show offline credential acquisition guidance for this service

jira-cli auth guide

jira-cli auth login

Verify and store personal credentials for the configured service

jira-cli auth login

Reuse the configured service, show its credential acquisition page, and store a verified credential together with its username. Requires a terminal; use credential environment variables for non-interactive execution.

jira-cli auth logout

Remove the stored credential for the configured server

jira-cli auth logout

jira-cli auth reuse

Reuse an existing login in the selected context without signing in again

jira-cli auth reuse [flags]

Match stored contexts by complete service URL, authentication scheme and service scope. Verify a matching stored credential before filling a missing personal identity in the selected context. Never copy secrets, replace an existing identity, activate a context, or read credentials from environment variables. Dry-run performs read-only verification and reports the same proposed association. An unchanged or unavailable result is not proof of authentication; use auth status to check.

Options

FlagDefaultDescription
--dry-runfalseverify and preview the identity association without writing
--from-contextchoose the source context when multiple identities match; list names with 'config get-contexts'

jira-cli auth status

Show whether a usable credential is configured

jira-cli auth status

jira-cli comment

Read and post issue comments

jira-cli comment

jira-cli comment add

Post a comment on an issue

jira-cli comment add <issue-key|url> [flags]

Post a comment. Bodies are plain text on both flavors: on Cloud the text becomes ADF paragraphs, on Data Center it is sent verbatim (wiki markup is rendered server-side).

Options

FlagDefaultDescription
--bodycomment body text
--body-fileread body from a file ('-' for stdin)
--dry-runfalsepreview the HTTP request without sending it

Examples

  jira-cli comment add PROJ-123 --body "Deployed to staging."
  echo "Done." | jira-cli comment add PROJ-123 --body-file -

jira-cli comment delete

Delete one or more comments

jira-cli comment delete <comment-id>... --issue <key> [flags]

Delete a comment by ID. Pass several IDs to delete them in one run, or a single '-' to read newline-separated IDs from stdin. Deletion requires --yes (or an interactive confirmation when stdin is a terminal); --yes applies to the whole batch.

Options

FlagDefaultDescription
--dry-runfalsepreview the HTTP request without sending it
--issuethe issue the comments belong to (required)
--yesfalseskip the deletion confirmation

Examples

  jira-cli comment delete 10042 --issue PROJ-123 --yes
  jira-cli comment delete 10042 10043 --issue PROJ-123 --yes

jira-cli comment list

List an issue's comments (oldest first)

jira-cli comment list <issue-key|url> [flags]

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli comment list PROJ-123
  jira-cli comment list PROJ-123 --all

jira-cli comment update

Replace a comment's body

jira-cli comment update <comment-id> --issue <key> [flags]

Options

FlagDefaultDescription
--bodynew comment body text
--body-fileread body from a file ('-' for stdin)
--dry-runfalsepreview the HTTP request without sending it
--issuethe issue the comment belongs to (required)

Examples

  jira-cli comment update 10042 --issue PROJ-123 --body "Revised."
  echo "Revised." | jira-cli comment update 10042 --issue PROJ-123 --body-file -

jira-cli config

Manage jira-cli configuration

jira-cli config

jira-cli config delete-context

Delete a context and its stored credential

jira-cli config delete-context <name>

Delete a context from the config file, together with its stored credential. The credential is kept when another context on the same server and authentication scheme still uses it.

Examples

  jira-cli config delete-context staging

jira-cli config get-contexts

List the configured contexts

jira-cli config get-contexts

List every context in the config file. The current context — the one used when --use-context is not given — is marked.

Examples

  jira-cli config get-contexts
  jira-cli config get-contexts --format table

jira-cli config init

Interactively set up server URL and credentials

jira-cli config init

Run the interactive setup wizard. It collects a server URL, detects the flavor, validates a credential and stores it. The wizard can also configure additional named contexts for working with several servers.

Examples

  jira-cli config init --pretty   # interactive TUI (recommended)
  jira-cli config init             # plain line-by-line wizard (scripts, non-TTY)

jira-cli config path

Print the config file path

jira-cli config path

jira-cli config set-context

Configure service presets without credentials or network access

jira-cli config set-context <name> [flags]

Write service fields from flags, environment or .env over the named target context. Personal environment fields and secrets are ignored. Existing conflicting fields require --overwrite; unrelated contexts and user identities are preserved.

Options

FlagDefaultDescription
--activatefalsemake this the current context
--dry-runfalsepreview configuration changes without writing files or credentials
--overwritefalseupdate conflicting service fields; preserve personal identity and credentials

Examples

  jira-cli config set-context team --base-url https://service.example.com --dry-run
  jira-cli config set-context team --base-url https://service.example.com --activate

jira-cli config show

Show the resolved configuration

jira-cli config show [flags]

Options

FlagDefaultDescription
--explainfalseannotate each value with its source

jira-cli config use-context

Switch the current context

jira-cli config use-context <name>

Set the current context — the server used by default. Override it for a single command with the global --use-context flag instead.

Examples

  jira-cli config use-context staging

jira-cli doctor

Diagnose configuration, credentials and connectivity

jira-cli doctor [flags]

Options

FlagDefaultDescription
--no-update-checkfalseskip the check for a newer jira-cli release

Examples

  jira-cli doctor
  jira-cli doctor --no-update-check

jira-cli field

Discover issue fields and their allowed values

jira-cli field

jira-cli field list

List the fields on an issue type's create screen

jira-cli field list --project <key> --type <issue-type> [flags]

List the fields available when creating an issue of one type in one project: id, name, whether it is required, its schema, and how many allowed values it has (options_count). Use `field options` to read a constrained field's actual values. Custom fields appear here with their customfield_* id.

Options

FlagDefaultDescription
--projectproject key (default from defaults.project)
--typeissue type name or ID (see `project issuetypes`)

Examples

  jira-cli field list --project ENG --type Bug
  jira-cli field list --project ENG --type Bug --fields items.id,items.name,items.required

jira-cli field options

List a field's allowed values in a project

jira-cli field options <field> --project <key> [--type <issue-type>] [flags]

List the allowed values of a constrained issue field (components, fix/affects versions, priority, or a select-list custom field) in one project, from the create metadata. Jira scopes field options by context — project and issue type — so with --type the values are read for that one issue type; without it every creatable issue type is scanned and each value lists the issue types it applies to. <field> is a field id (components, priority, customfield_10010) or a display name ("Component/s", "Severity"), matched case-insensitively.

Options

FlagDefaultDescription
--projectproject key (default from defaults.project)
--typerestrict to one issue type name or ID (default: scan all)

Examples

  jira-cli field options components --project ENG
  jira-cli field options "Severity" --project ENG --type Bug

jira-cli issue

Read, search and write Jira issues

jira-cli issue

jira-cli issue assign

Change or clear an issue's assignee

jira-cli issue assign <key|url> [flags]

Assign an issue. --to accepts a Cloud accountId or display-name/email query resolved to a unique user (see `jira-cli user resolve`). On Data Center, supply a known username; it is passed through without a lookup.

Options

FlagDefaultDescription
--dry-runfalsepreview the HTTP request without sending it
--tothe new assignee
--unassignfalseclear the assignee

Examples

  jira-cli issue assign PROJ-123 --to alice@example.com
  jira-cli issue assign PROJ-123 --unassign

jira-cli issue create

Create an issue

jira-cli issue create [flags]

Create an issue. --project falls back to defaults.project when configured. Descriptions are plain text on both flavors; on Cloud the text becomes ADF paragraphs, on Data Center it is sent verbatim (wiki markup is rendered server-side).

Options

FlagDefaultDescription
--assigneeassignee (accountId, username, or display-name/email query)
--descriptiondescription text
--description-fileread the description from a file ('-' for stdin)
--dry-runfalsepreview the HTTP request without sending it
--label[]label to set (repeatable)
--parentparent issue key (for subtasks / epic children)
--prioritypriority name (e.g. High)
--projectproject key (default from defaults.project)
--summaryissue summary (required)
--typeTaskissue type name (e.g. Task, Bug, Story)

Examples

  jira-cli issue create --project ENG --type Task --summary "Fix login crash"
  jira-cli issue create --project ENG --type Bug --summary "..." \
      --description-file report.txt --assignee alice@example.com --label urgent

jira-cli issue edit

Update issue fields

jira-cli issue edit <key|url> [flags]

Update an issue's summary, description, priority or labels. Only the flags you pass change; everything else keeps its value. Description flags replace the whole body. Cloud rich text cannot be preserved by rewriting the normalized plain-text description.

Options

FlagDefaultDescription
--add-label[]label to add (repeatable)
--descriptionnew description text
--description-fileread the new description from a file ('-' for stdin)
--dry-runfalsepreview the HTTP request without sending it
--prioritynew priority name
--remove-label[]label to remove (repeatable)
--summarynew summary

Examples

  jira-cli issue edit PROJ-123 --summary "New title"
  jira-cli issue edit PROJ-123 --add-label triaged --remove-label urgent

jira-cli issue get

Show one issue

jira-cli issue get <key|url> [flags]

Options

FlagDefaultDescription
--expandextra sections to request, comma-separated (e.g. changelog)

Examples

  jira-cli issue get PROJ-123
  jira-cli issue get https://acme.atlassian.net/browse/PROJ-123

jira-cli issue transition

Move an issue through a workflow transition

jira-cli issue transition <key|url> --to <name-or-id> [flags]

Transition an issue. --to accepts a transition ID or name (matched case-insensitively against the transitions currently available; see `issue transitions`). Target status names also match when unambiguous.

Options

FlagDefaultDescription
--commentcomment to add as part of the transition
--dry-runfalsepreview the HTTP request without sending it
--totarget transition name or ID

Examples

  jira-cli issue transition PROJ-123 --to "In Progress"
  jira-cli issue transition PROJ-123 --to 31 --comment "Deployed to staging."

jira-cli issue transitions

List the workflow transitions currently available on an issue

jira-cli issue transitions <key|url>

List the transitions the issue can take from its current status — the values `issue transition --to` accepts.

Examples

  jira-cli issue transitions PROJ-123

jira-cli label

Browse issue labels

jira-cli label

jira-cli label list

List issue labels (Jira Cloud only)

jira-cli label list [flags]

List every label in use on the instance. Labels are free-form and instance-wide, not project-scoped. Data Center has no REST endpoint for this listing; there, discover labels from the issues that carry them (e.g. `issue search --project X --field labels`).

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli label list

jira-cli priority

Browse issue priorities

jira-cli priority

jira-cli priority list

List issue priorities

jira-cli priority list [flags]

List the priorities issues can take — the valid values for `issue create/edit --priority`. The list is instance-wide; on Jira Cloud a priority scheme may narrow what a given project accepts.

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli priority list

jira-cli project

Browse Jira projects

jira-cli project

jira-cli project components

List a project's components

jira-cli project components <key|url> [flags]

List the components defined in a project — the valid values for the issue "components" field there. On Jira Cloud the listing paginates; on Data Center the API returns the full list in one response.

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli project components ENG

jira-cli project get

Show one project

jira-cli project get <key|url>

Examples

  jira-cli project get ENG

jira-cli project issuetypes

List the issue types creatable in a project

jira-cli project issuetypes <key|url> [flags]

List the issue types that can be created in a project (from the create metadata, so permissions apply) — the valid values for `issue create --type` there.

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli project issuetypes ENG

jira-cli project list

List projects visible to the authenticated user

jira-cli project list [flags]

List projects. On Jira Cloud the listing paginates and --query filters server-side; on Data Center the API returns every project in one response (a single page) and --query filters client-side.

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)
--queryfilter by name/key substring

Examples

  jira-cli project list
  jira-cli project list --query platform

jira-cli project statuses

List a project's workflow statuses per issue type

jira-cli project statuses <key|url>

List the workflow statuses valid in a project, grouped by issue type (different issue types can use different workflows). These are the values a `status = ...` JQL clause can match in that project.

Examples

  jira-cli project statuses ENG

jira-cli project versions

List a project's versions

jira-cli project versions <key|url> [flags]

List the versions defined in a project — the valid values for the issue "fixVersions" and affects-versions fields there. On Jira Cloud the listing paginates; on Data Center the API returns the full list in one response.

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli project versions ENG

jira-cli skill

Install the companion Skill for coding agents

jira-cli skill

jira-cli skill install

Deploy the embedded Skill into a coding agent's skills directory

jira-cli skill install [flags]

Write the companion `jira` Skill — bundled inside this binary — into a coding agent's skills directory. With no flags it probes for installed agents (claude-code, codex, cursor, agents, gemini, github-copilot, opencode, continue, windsurf, grok, pi, kilo, roo) and installs into each one found. Re-run it after upgrading the CLI to refresh the Skill to the matching version, then reload the agent context.

Options

FlagDefaultDescription
--agent[]target agents instead of auto-detecting (claude-code, codex, cursor, agents, gemini, github-copilot, opencode, continue, windsurf, grok, pi, kilo, roo)
--direxplicit skills base directory; installs into <dir>/jira
--projectfalseinstall into each agent's project skills directory instead of $HOME

jira-cli skill path

Print Skill paths, installation state and version alignment

jira-cli skill path [flags]

Options

FlagDefaultDescription
--agent[]limit to specific agents (claude-code, codex, cursor, agents, gemini, github-copilot, opencode, continue, windsurf, grok, pi, kilo, roo)
--direxplicit skills base directory
--projectfalseuse the project skills directories instead of $HOME

jira-cli skill show

Print the embedded SKILL.md to stdout

jira-cli skill show

jira-cli skill status

Report loaded, installed and embedded Skill versions

jira-cli skill status [flags]

Options

FlagDefaultDescription
--projectfalsecheck each agent's project skills directory instead of $HOME

jira-cli skill uninstall

Remove the companion Skill from a coding agent's skills directory

jira-cli skill uninstall [flags]

Delete a previously installed `jira` Skill. With no flags it probes for installed agents (claude-code, codex, cursor, agents, gemini, github-copilot, opencode, continue, windsurf, grok, pi, kilo, roo) and removes the Skill from each one found.

Options

FlagDefaultDescription
--agent[]target agents instead of auto-detecting (claude-code, codex, cursor, agents, gemini, github-copilot, opencode, continue, windsurf, grok, pi, kilo, roo)
--direxplicit skills base directory; removes <dir>/jira
--projectfalseremove from each agent's project skills directory instead of $HOME

jira-cli user

Discover Jira users — the values assignee flags accept

jira-cli user

jira-cli user me

Print the user the configured credentials authenticate as (alias for whoami)

jira-cli user me

jira-cli user resolve

Resolve a user selector to a unique user

jira-cli user resolve <selector>

Resolve a user selector to a unique user. Cloud: an accountId is passed through; anything else is searched by display name / email and must match exactly one active user. DC: the selector is the username and is echoed back verbatim.

jira-cli version

Print version information

jira-cli version

jira-cli whoami

Print the user the configured credentials authenticate as

jira-cli whoami

Examples

  jira-cli whoami

jira-cli worklog

Read and log work on issues (time tracking)

jira-cli worklog

Read and log work on issues. Worklog IDs come from `worklog list`; `worklog search` finds a user's entries across issues within a bounded time window.

jira-cli worklog add

Log work on an issue

jira-cli worklog add <issue-key|url> --time-spent <duration> [flags]

Log work on an issue. --time-spent takes Jira's own units and is sent verbatim, because only the server knows the instance's hours-per-day and days-per-week settings. The comment is plain text on both flavors: on Cloud it becomes ADF paragraphs, on Data Center it is sent as given. By default Jira subtracts the logged time from the remaining estimate; --adjust-estimate changes that.

Options

FlagDefaultDescription
--adjust-estimatehow to adjust the remaining estimate: auto, new, leave or manual (default "auto")
--commentworklog comment text
--comment-fileread the worklog comment from a file ('-' for stdin)
--dry-runfalsepreview the HTTP request without sending it
--new-estimateremaining estimate to set, e.g. "2d"; required with --adjust-estimate new
--reduce-byreduce the remaining estimate by this amount; required with --adjust-estimate manual
--startedwhen the work started: "now", an RFC3339 instant, a local wall clock ("2006-01-02T15:04:05") or a date ("2006-01-02", UTC); defaults to now
--time-spenttime spent in Jira's own units, e.g. "3h 20m" or "1d 4h" (required unless --time-spent-seconds is given)
--time-spent-seconds0time spent in seconds (mutually exclusive with --time-spent)

Examples

  jira-cli worklog add PROJ-123 --time-spent "3h 20m" --comment "Traced the retry loop"
  jira-cli worklog add PROJ-123 --time-spent 45m --started 2026-09-19T09:00:00
  jira-cli worklog add PROJ-123 --time-spent 2h --adjust-estimate new --new-estimate 1d

jira-cli worklog delete

Delete one or more worklogs

jira-cli worklog delete <worklog-id>... --issue <key> [flags]

Delete a worklog by ID. Pass several IDs to delete them in one run, or a single '-' to read newline-separated IDs from stdin. Deletion requires --yes (or an interactive confirmation when stdin is a terminal); --yes applies to the whole batch. By default Jira adds the deleted time back to the remaining estimate; --adjust-estimate changes that.

Options

FlagDefaultDescription
--adjust-estimatehow to adjust the remaining estimate: auto, new, leave or manual (default "auto")
--dry-runfalsepreview the HTTP request without sending it
--increase-byincrease the remaining estimate by this amount; required with --adjust-estimate manual
--issuethe issue the worklogs belong to (required)
--new-estimateremaining estimate to set, e.g. "2d"; required with --adjust-estimate new
--yesfalseskip the deletion confirmation

Examples

  jira-cli worklog delete 10042 --issue PROJ-123 --yes
  jira-cli worklog delete 10042 10043 --issue PROJ-123 --yes --adjust-estimate leave

jira-cli worklog list

List an issue's worklogs (oldest first)

jira-cli worklog list <issue-key|url> [flags]

Options

FlagDefaultDescription
--allfalsefetch every page of results
--cursorstart from this pagination cursor (the 'next' of a prior page)
--limit0page size (default from config)

Examples

  jira-cli worklog list PROJ-123
  jira-cli worklog list PROJ-123 --all

jira-cli worklog update

Change an existing worklog

jira-cli worklog update <worklog-id> --issue <key> [flags]

Change a worklog's time, start instant or comment. Unset flags are left as they are. Jira's worklog update endpoint has no manual estimate mode, so --adjust-estimate accepts auto, new and leave only.

Options

FlagDefaultDescription
--adjust-estimatehow to adjust the remaining estimate: auto, new, leave or manual (default "auto")
--commentworklog comment text
--comment-fileread the worklog comment from a file ('-' for stdin)
--dry-runfalsepreview the HTTP request without sending it
--issuethe issue the worklog belongs to (required)
--new-estimateremaining estimate to set, e.g. "2d"; required with --adjust-estimate new
--startedwhen the work started: "now", an RFC3339 instant, a local wall clock ("2006-01-02T15:04:05") or a date ("2006-01-02", UTC); defaults to now
--time-spenttime spent in Jira's own units, e.g. "3h 20m" or "1d 4h"
--time-spent-seconds0time spent in seconds (mutually exclusive with --time-spent)

Examples

  jira-cli worklog update 10042 --issue PROJ-123 --time-spent 2h
  jira-cli worklog update 10042 --issue PROJ-123 --comment "Corrected the note"