Atlassian CLI (acli) Skill
Use the acli CLI (installed at /opt/homebrew/bin/acli) to drive Jira and Confluence
from the terminal. This skill is the plugin's acli reference — the using-neo skill names it
as the source for acli usage.
It is a thin shell over acli --help: this file gives you the command map, the
JQL / workflow domain knowledge, and the safety discipline — none of which --help
provides. It deliberately does not re-list every flag, because acli's own help
already documents them better and stays current with the installed binary.
Self-discovery protocol (read first)
Before composing any acli command whose subcommands or flags you are not 100% sure of:
- Run
acli <path> --helpfirst. Walk the tree top-down:acli jira --help→acli jira workitem --help→acli jira workitem search --help. - Treat the installed binary's
--helpas the source of truth over any example in this file. The CLI evolves and may run ahead of this file; the binary is authoritative for exact flag names, defaults, and examples. - Most commands print runnable examples in their
--help— copy that shape rather than guessing.
Command map (where things live — run --help for the flags)
Jira — acli jira <group> <cmd>:
| Group | Commands |
|---|---|
auth |
status, login, logout, switch |
workitem |
view, search, create, create-bulk, edit, transition, assign, comment, clone, link, watcher, attachment, archive, unarchive, delete |
sprint |
view, create, update, delete, list-workitems |
board |
search, get, create, delete, list-sprints, list-projects |
project |
list, view, create |
field / filter / dashboard |
metadata lookups — run --help for subcommands |
Confluence — acli confluence <group> <cmd>:
| Group | Commands |
|---|---|
auth |
status, login, logout, switch |
page |
view only — acli cannot create/update pages (see Confluence limits) |
space |
list, view, create, update, archive, restore |
blog |
run --help for subcommands |
Auth bootstrap
acli jira auth status # or: acli confluence auth status
If not authenticated, the fastest path is an API token:
echo <token> | acli jira auth login --site "yoursite.atlassian.net" --email "you@example.com" --token
# or browser OAuth:
acli jira auth login --web
If acli is missing entirely: brew install atlassian/tap/acli.
Safety gates (always apply)
acli mutations are real and often irreversible. Reads are free; writes need care.
- Default to read-only.
view/search/--countnever need confirmation. - Preview before any bulk mutation. For an edit / transition / assign / delete driven
by
--jql, first run the same JQL through search to see the exact set:
Show the user what will be affected and get explicit confirmation before mutating. Never fireacli jira workitem search --jql "<the JQL>" --count acli jira workitem search --jql "<the JQL>" --fields "key,summary,status"--jql ... --yeson a mutation without previewing first. - Destructive ops (
delete,archive, bulktransitionto a terminal state) — confirm with the user and name the affected keys. - Verify after write. After an
edit/transition, re-read the item to confirm the change landed:acli jira workitem view KEY-123 --json. - Use
--yesonly after the user has confirmed; add--ignore-errorson bulk ops so a single failure doesn't halt the rest.
Reading scope — never expand tested by links
When viewing or summarizing a Jira work item, its tested by links are off-limits.
Do not follow them, do not fetch the linked test item, and do not list or even mention
them — treat a tested by link as if it were not on the card. The user does not permit
reading test artifacts reached through a tested by link.
- Identify it by link type, not by the target. In
issuelinksthe restricted link is the one whosetype.nameisTests— it renders astested byon the card (the linked item is the Test Case / Test Scenario that tests this card). Only this type is restricted. - Every other link type is read normally —
Relates(relates to),Dependency(dependencies with),Blocks, … — even when the linked item is itself a Test Case / Test Scenario. The trigger is the link type, not the target's issue type. (So a Test Scenario reached viarelates tois still in-bounds.) - When you pull
issuelinks(e.g.--fields "issuelinks"), drop every entry whosetype.name == "Tests"before reading or reporting, and never run a follow-upacli jira workitem view <KEY>on an item you know only through that link. - Everything else on the card — description, AC, status, and all non-
tested bylinks — is read as usual. - Only exception: the user, in a later message, explicitly names and asks for the
tested bylinks. Absent that, never surface them.
JQL
Search is the workhorse — acli jira workitem search --jql "<query>". For ready-to-use
JQL (my issues, sprint scope, by status / type / priority, functions, operators), read
references/jql-patterns.md.
Common workflows
For multi-command recipes (daily standup, start / finish an issue, bulk-close a sprint,
find unassigned bugs) — each with its safety steps inline — read
references/workflows.md.
Confluence limits
acli confluence page can only view — it cannot create or update pages. So:
- Reading a page body:
page view --id <ID>alone prints only the metadata table — not the content. To get the body, request it explicitly and feed the raw XHTML to the model (don't strip the tags — you lose table / heading / code structure):
Useacli confluence page view --id <ID> --body-format storage --json | jq -r '.body.storage.value'storageby default (leanest, structure-clean); if the page is macro-heavy and the output fills with<ac:…>tags, switch to--body-format view(fully rendered HTML). - Creating / updating a Confluence page → use the Confluence REST API directly (curl).
- Publishing generated API docs to Confluence → use the
confluence-api-docskill (it owns the REST publish + round-trip verify). Do not reimplement that here. - Space lifecycle (
list/view/create/update/archive/restore) is supported via acli.
Output tips
--json— parse output or chain into another command.--csv— tabular reports.--paginate— fetch all results (required forproject list; overrides--limit).--fields "key,summary,status"— trim columns to only what you need.