[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71QB3TFTQ3M3ZX2S66V2F1H":3,"skill-same:01M71QB3TFTQ3M3ZX2S66V2F1H":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":49,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M71QB3TFTQ3M3ZX2S66V2F1H","acli",null,"Interact with Atlassian Cloud (Jira and Confluence) via the acli CLI. Use for Jira work items (search with JQL, view, create, edit, transition, assign, comment, link, clone, delete, archive), projects, sprints, boards, filters, and Confluence pages, spaces, and blog posts. Requires acli to be installed and authenticated.","ihudak\u002Fai-workflows","ihudak","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F827159?v=4","01M71QAWS87D2T727PGSV234KJ","Ivan Gudak","01M71QAWT84GDCCC530H890X43",2,"MIT","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fplugins\u002Facli\u002Fskills\u002Facli\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"view","transition","clone","for","posts","sprints","jql","pages","filters","atlassian","cli","edit","work","archive","projects","search","delete","create","jira","2026-11-10 13:02:02",false,"---\nname: acli\ndescription: Interact with Atlassian Cloud (Jira and Confluence) via the acli CLI. Use for Jira work items (search with JQL, view, create, edit, transition, assign, comment, link, clone, delete, archive), projects, sprints, boards, filters, and Confluence pages, spaces, and blog posts. Requires acli to be installed and authenticated.\n---\n\n# Atlassian CLI (acli)\n\nInteract with Atlassian Cloud — Jira work items, projects, sprints, boards, filters, and\nConfluence content — using the `acli` CLI.\n\n## Prerequisites\n\n- `acli` must be installed (`acli --version` to check) and authenticated\n  - OAuth (Jira + Confluence together): `acli auth login`\n  - Product-scoped OAuth: `acli jira auth login --web` \u002F `acli confluence auth login`\n  - API token: `acli jira auth login --site \u003Csite>.atlassian.net --email \u003Cyou>@... --token`\n  - Verify with `acli auth status` (global) or `acli jira auth status` \u002F `acli confluence auth status`\n- For multi-account setups, switch the active account with `acli jira auth switch` \u002F\n  `acli confluence auth switch`\n\n- **Headless environments (containers, CI, remote shells):** `--web` OAuth cannot complete, because\n  the callback is a loopback URL only a browser on the same machine can open. Use the API-token\n  form and feed the token on **stdin**:\n\n  ```bash\n  echo \"$ATLASSIAN_API_TOKEN\" | acli jira auth login \\\n      --site \"\u003Csite>.atlassian.net\" --email \"\u003Cyou>@example.com\" --token\n  ```\n\n  `acli` stores profiles *and* credentials under `~\u002F.config\u002Facli`, so wherever that directory\n  persists, one login serves every later session.\n- **Never pass a token as a command-line argument.** It lands in shell history and in the process\n  list. Pipe it on stdin as above, never echo it back into the conversation, and never write it to\n  a file in the repository.\n\n> **Note:** `acli` has no global `--site`\u002F`--account` flag. The active account is chosen via\n> `acli \u003Cproduct> auth switch`. Targeting a different project is done per-command with\n> `--project`\u002F`--key`, not a global flag.\n\n## Safety\n\n`acli` writes to live Jira and Confluence. **Every command that is not a read is a write** — reads\nare `view`, `list`, `search`, `status`, the `list-*` commands, `link type`, `comment visibility`,\nand the `--generate-json` templates (`auth` commands change only your local login). Ask the user\nbefore running any write, naming the command and what it will touch.\n\n**`--yes`\u002F`-y` is the user's approval, never yours.** Commands that act on several items prompt for\nconfirmation, and an agent's shell cannot answer that prompt — so the approval happens in the\nconversation first, and only then do you add `--yes` to run it. Never add it on your own initiative.\nEvery `--yes` in the examples below stands for that approval having been given.\n\nThe writes that matter most:\n\n**Irreversible:** `jira workitem delete`, `jira project delete`, `jira sprint delete`,\n`jira board delete`, `jira field delete`, `jira workitem comment delete`,\n`jira workitem attachment delete`, `confluence space delete`.\n\n**Reversible but disruptive:** `jira workitem archive`, `jira project archive`,\n`confluence space archive`, bulk `jira workitem edit`, `jira workitem transition`,\n`jira workitem comment create` and `--edit-last` (post immediately and notify watchers),\n`jira sprint update --state closed`, `jira workitem link delete`.\n\n**Visible to others:** `jira workitem create` \u002F `create-bulk`, `assign`, `clone`,\n`comment update`, `watcher remove`, `jira filter update` (shared filters change for everyone who\nuses them), `jira project` \u002F `board` \u002F `sprint` creates and updates, and Confluence `space` and\n`blog` creates and updates.\n\nThe `--key`, `--jql` and `--filter` selectors can hit hundreds of items in one command. Before any\nmutating command driven by `--jql` or `--filter`, count the blast radius first and show the user\nthe number:\n\n```bash\nacli jira workitem search --jql \"\u003Cthe same jql>\" --count\n```\n\nUse `--yes` only after the user has approved that exact set of items.\n\n## Work Items\n\n> **Important:** Jira comments are posted **immediately** and notify watchers — there is no\n> draft\u002Freview concept in `acli`. When iterating on feedback, avoid posting many comments in a\n> loop: use `acli jira workitem comment create --edit-last` to amend your own most recent\n> comment, or update it by ID with `acli jira workitem comment update`. See [Comments](#comments).\n\n```bash\n# Search work items with JQL (the primary way to list issues)\nacli jira workitem search --jql \"project = \u003Cproject_key>\"\nacli jira workitem search --jql \"assignee = currentUser() AND status != Done\"\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --paginate          # fetch all pages\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --count             # just the count\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --fields \"key,summary,status\" --csv\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --limit 50 --json\n\n# Search using a saved filter ID\nacli jira workitem search --filter \u003Cfilter_id> --web\n\n# View work item details (key is a positional argument)\nacli jira workitem view \u003Cissue_id>\nacli jira workitem view \u003Cissue_id> --fields \"*all\"\nacli jira workitem view \u003Cissue_id> --fields \"summary,comment\"\nacli jira workitem view \u003Cissue_id> --json\n\n# Create a work item\nacli jira workitem create --summary \"New Task\" --project \"\u003Cproject_key>\" --type \"Task\"\nacli jira workitem create --summary \"Bug\" --project \"\u003Cproject_key>\" --type \"Bug\" --assignee \"@me\" --label \"bug,cli\"\nacli jira workitem create --from-file workitem.txt --project \"\u003Cproject_key>\" --type \"Bug\"\nacli jira workitem create --generate-json            # print a JSON template\nacli jira workitem create --from-json workitem.json  # create from JSON\n\n# Bulk create from JSON or CSV\nacli jira workitem create-bulk --generate-json\nacli jira workitem create-bulk --from-json issues.json\nacli jira workitem create-bulk --from-csv issues.csv\n\n# Edit work items (accepts --key, --jql, or --filter selectors; see Selectors)\nacli jira workitem edit --key \"\u003Cissue_id_1>,\u003Cissue_id_2>\" --summary \"New summary\" --yes   # after approval\nacli jira workitem edit --jql \"project = \u003Cproject_key> AND status = Open\" --assignee \"@me\" --yes   # after approval\nacli jira workitem edit --key \"\u003Cissue_id>\" --remove-assignee --yes        # after approval\n\n# Transition (move to another status)\nacli jira workitem transition --key \"\u003Cissue_id>\" --status \"In Progress\"\nacli jira workitem transition --jql \"project = \u003Cproject_key>\" --status \"Done\" --yes   # after approval\n\n# Assign (--assignee accepts @me, default, or an email\u002Faccount ID)\nacli jira workitem assign --key \"\u003Cissue_id>\" --assignee \"@me\"\nacli jira workitem assign --jql \"project = \u003Cproject_key>\" --assignee \"user@atlassian.com\" --yes   # after approval\nacli jira workitem assign --key \"\u003Cissue_id>\" --remove-assignee\n\n# Clone within the same site, or to another project\u002Fsite\nacli jira workitem clone --key \"\u003Cissue_id>\" --to-project \"\u003Cproject_key>\"\n\n# Delete \u002F archive \u002F unarchive\nacli jira workitem delete --key \"\u003Cissue_id_1>,\u003Cissue_id_2>\" --yes   # after approval\nacli jira workitem archive --jql \"project = \u003Cproject_key> AND status = Done\" --yes   # after approval\nacli jira workitem unarchive --key \"\u003Cissue_id>\"\n```\n\n## Comments\n\n```bash\n# Add a comment (posted immediately, notifies watchers)\nacli jira workitem comment create --key \"\u003Cissue_id>\" --body \"This is a comment\"\nacli jira workitem comment create --jql \"project = \u003Cproject_key>\" --body-file comment.txt --yes   # after approval\nacli jira workitem comment create --key \"\u003Cissue_id>\" --body \"Updated\" --edit-last   # amend your last comment\nacli jira workitem comment create --key \"\u003Cissue_id>\" --editor                       # open $EDITOR\n\n# List comments\nacli jira workitem comment list --key \"\u003Cissue_id>\"\n\n# Update a comment (by comment ID)\nacli jira workitem comment update --key \"\u003Cissue_id>\" --id 10001 --body \"Updated text\"\nacli jira workitem comment update --key \"\u003Cissue_id>\" --id 10001 --body \"Internal\" --visibility-role \"Administrators\"\nacli jira workitem comment update --key \"\u003Cissue_id>\" --id 10001 --body-adf comment.adf.json   # ADF body\n\n# Delete a comment\nacli jira workitem comment delete --key \"\u003Cissue_id>\" --id 10023\n\n# Discover visibility options (roles\u002Fgroups) for restricted comments\nacli jira workitem comment visibility --role --project \"PROJ\"\nacli jira workitem comment visibility --group\n```\n\n## Selectors (JQL, Keys, Filters)\n\nMost mutating work-item commands — `edit`, `transition`, `assign`, `comment create`, `clone`,\n`delete`, `archive` — accept the **same three selectors** to choose which work items to act on:\n\n- `--key \"\u003Cissue_id_1>,\u003Cissue_id_2>\"` — explicit comma-separated keys\n- `--jql \"project = \u003Cproject_key> AND ...\"` — a JQL query\n- `--filter 10001` — a saved filter ID\n\n```bash\n# Same edit applied to everything matching a JQL query\nacli jira workitem edit --jql \"project = \u003Cproject_key> AND status = Open\" --assignee \"@me\" --yes   # after approval\n\n# Act on a saved filter's results\nacli jira workitem transition --filter \u003Cfilter_id> --status \"Done\" --yes   # after approval\n\n# Bulk via a file (one key per line, or comma\u002Fspace separated)\nacli jira workitem delete --from-file issues.txt --yes   # after approval\n```\n\nThese commands prompt for confirmation before acting on multiple items. Add `--yes` (`-y`) only\nonce the user has approved that exact set — see [Safety](#safety) — and `--ignore-errors` to continue\npast failures when operating on many items.\n\nJQL tips:\n- `currentUser()` — the authenticated user\n- `project = \u003Cproject_key>`, `status = \"In Progress\"`, `priority = High`\n- Combine with `AND` \u002F `OR`; quote values containing spaces\n\n## Links, Attachments & Watchers\n\n```bash\n# Links\nacli jira workitem link create --out \u003Cissue_id> --in \u003Cissue_id> --type \"Blocks\"\nacli jira workitem link create --generate-json            # template for --from-json bulk linking\nacli jira workitem link list --key \"\u003Cissue_id>\"\nacli jira workitem link delete --id 10001\nacli jira workitem link type                              # available link types\n\n# Attachments\nacli jira workitem attachment list --key \"\u003Cissue_id>\"\nacli jira workitem attachment delete --id 12345\n\n# Watchers\nacli jira workitem list-watchers --key \"\u003Cissue_id>\"            # preferred (watcher list is deprecated)\nacli jira workitem watcher remove --key \"\u003Cissue_id>\" --user 5b10ac8d82e05b22cc7d4ef5\n```\n\n## Projects\n\n```bash\n# List\nacli jira project list --recent          # up to 20 recently viewed\nacli jira project list --paginate        # all projects\nacli jira project list --limit 50 --json\n\n# View\nacli jira project view --key \"\u003Cproject_key>\"\n\n# Create (company-managed projects can be cloned with --from-project)\nacli jira project create --key \"NEW\u003Cproject_key>\" --name \"New Project\"\nacli jira project create --from-project \"\u003Cproject_key>\" --key \"\u003Cnew_project_key>\" --name \"New Project\" --lead-email \"user@atlassian.com\"\n\n# Update\nacli jira project update --project-key \"\u003Cproject_key>\" --name \"Renamed Project\"\n\n# Delete \u002F archive \u002F restore\nacli jira project delete --key \"\u003Cproject_key>\"\nacli jira project archive --key \"\u003Cproject_key>\"\nacli jira project restore --key \"\u003Cproject_key>\"\n```\n\n## Sprints\n\n```bash\n# View a sprint\nacli jira sprint view --id 123\n\n# List work items in a sprint (requires board + sprint IDs)\nacli jira sprint list-workitems --board 6 --sprint 1\nacli jira sprint list-workitems --board 6 --sprint 1 --jql \"status != Done\" --json\n\n# Create a sprint on a board\nacli jira sprint create --name \"Sprint 1\" --board 5\nacli jira sprint create --name \"Sprint 2\" --board 5 --start 2025-01-01 --end 2025-01-14 --goal \"Q1 work\"\n\n# Update (name, goal, state, dates)\nacli jira sprint update --id 37 --name \"Sprint 1 - Final\"\nacli jira sprint update --id 37 --state closed\n\n# Delete one or more sprints\nacli jira sprint delete --id 37,42,55 --yes   # after approval\n```\n\n## Boards\n\n```bash\n# Search boards\nacli jira board search\nacli jira board search --project \"\u003Cproject_key>\" --type scrum\nacli jira board search --name \"platform\" --json\n\n# View a board and its sprints\u002Fprojects\nacli jira board view --id 123\nacli jira board list-sprints --id 123 --state active,closed\nacli jira board list-projects --id 123\n\n# Create \u002F delete\nacli jira board create --name \"My Scrum Board\" --type scrum --filter-id 10040 --location-type project --project \"\u003Cproject_key>\"\nacli jira board delete --id 123,456 --yes   # after approval\n```\n\n## Filters\n\n```bash\n# List your filters \u002F favourites\nacli jira filter list --my\nacli jira filter list --favourite\n\n# Search filters\nacli jira filter search --owner user@atlassian.com --name \"report\"\n\n# View and reuse a filter (its ID feeds `workitem search --filter`)\nacli jira filter view --id 12345\nacli jira workitem search --filter 12345\n\n# Update\nacli jira filter update --id 10001 --name \"Open bugs\" --jql \"project = TEST AND status = Open\"\n```\n\n## Confluence\n\n```bash\n# Spaces\nacli confluence space list\nacli confluence space list --type personal --json\nacli confluence space view --id 123456 --include-all\nacli confluence space create --key SPACEKEY --name \"Space Name\" --description \"...\"\nacli confluence space update --key SPACEKEY --name \"New Name\"\nacli confluence space archive --key SPACEKEY\nacli confluence space restore --key SPACEKEY\n\n# Pages (view by ID)\nacli confluence page view --id 123456789\nacli confluence page view --id 123456789 --body-format storage --json\n\n# Blog posts\nacli confluence blog list --space-id 12345 --limit 25\nacli confluence blog view --id 98765 --body-format atlas_doc_format\nacli confluence blog create --space-id 12345 --title \"Release Notes\" --body \"\u003Cp>Content\u003C\u002Fp>\"\nacli confluence blog create --generate-json                 # template for --from-json\nacli confluence blog create --from-json .\u002Fblog_payload.json\n```\n\n## Authentication\n\n```bash\n# Global OAuth (covers Jira + Confluence together)\nacli auth login\nacli auth status\nacli auth switch\nacli auth logout\n\n# Product-scoped (OAuth or API token)\nacli jira auth login --web\nacli jira auth login --site \"mysite.atlassian.net\" --email \"user@atlassian.com\" --token   # token via stdin\nacli jira auth status\nacli jira auth switch --site mysite.atlassian.net --email \"user@atlassian.com\"\n\nacli confluence auth login\nacli confluence auth status\n```\n\n## Tips\n\n- Prefer `--json` (or `--csv`) and pipe through `jq` for structured output\n- Use `--paginate` to fetch every page of a list; `--limit N` to cap a single page\n- `acli jira workitem view` takes the key as a positional argument: `acli jira workitem view \u003Cissue_id>`\n- `--assignee` accepts `@me`, `default`, an email, or an account ID\n- Mutating commands that act on multiple items prompt for confirmation — add `--yes` (`-y`) only after\n  the user has approved that exact set in the conversation ([Safety](#safety))\n- Reuse saved filters: `acli jira filter view --id \u003Cid>` to find a filter ID, then `acli jira workitem search --filter \u003Cid>`\n- `acli` covers Jira and Confluence as separate auth contexts: `acli jira ...` vs `acli confluence ...`\n- For Rovo Dev (Atlassian's AI coding agent) use `acli rovodev ...` — it has its own `acli rovodev auth login`\n","# Atlassian CLI (acli)\n\nInteract with Atlassian Cloud — Jira work items, projects, sprints, boards, filters, and\nConfluence content — using the `acli` CLI.\n\n## Prerequisites\n\n- `acli` must be installed (`acli --version` to check) and authenticated\n  - OAuth (Jira + Confluence together): `acli auth login`\n  - Product-scoped OAuth: `acli jira auth login --web` \u002F `acli confluence auth login`\n  - API token: `acli jira auth login --site \u003Csite>.atlassian.net --email \u003Cyou>@... --token`\n  - Verify with `acli auth status` (global) or `acli jira auth status` \u002F `acli confluence auth status`\n- For multi-account setups, switch the active account with `acli jira auth switch` \u002F\n  `acli confluence auth switch`\n\n- **Headless environments (containers, CI, remote shells):** `--web` OAuth cannot complete, because\n  the callback is a loopback URL only a browser on the same machine can open. Use the API-token\n  form and feed the token on **stdin**:\n\n  ```bash\n  echo \"$ATLASSIAN_API_TOKEN\" | acli jira auth login \\\n      --site \"\u003Csite>.atlassian.net\" --email \"\u003Cyou>@example.com\" --token\n  ```\n\n  `acli` stores profiles *and* credentials under `~\u002F.config\u002Facli`, so wherever that directory\n  persists, one login serves every later session.\n- **Never pass a token as a command-line argument.** It lands in shell history and in the process\n  list. Pipe it on stdin as above, never echo it back into the conversation, and never write it to\n  a file in the repository.\n\n> **Note:** `acli` has no global `--site`\u002F`--account` flag. The active account is chosen via\n> `acli \u003Cproduct> auth switch`. Targeting a different project is done per-command with\n> `--project`\u002F`--key`, not a global flag.\n\n## Safety\n\n`acli` writes to live Jira and Confluence. **Every command that is not a read is a write** — reads\nare `view`, `list`, `search`, `status`, the `list-*` commands, `link type`, `comment visibility`,\nand the `--generate-json` templates (`auth` commands change only your local login). Ask the user\nbefore running any write, naming the command and what it will touch.\n\n**`--yes`\u002F`-y` is the user's approval, never yours.** Commands that act on several items prompt for\nconfirmation, and an agent's shell cannot answer that prompt — so the approval happens in the\nconversation first, and only then do you add `--yes` to run it. Never add it on your own initiative.\nEvery `--yes` in the examples below stands for that approval having been given.\n\nThe writes that matter most:\n\n**Irreversible:** `jira workitem delete`, `jira project delete`, `jira sprint delete`,\n`jira board delete`, `jira field delete`, `jira workitem comment delete`,\n`jira workitem attachment delete`, `confluence space delete`.\n\n**Reversible but disruptive:** `jira workitem archive`, `jira project archive`,\n`confluence space archive`, bulk `jira workitem edit`, `jira workitem transition`,\n`jira workitem comment create` and `--edit-last` (post immediately and notify watchers),\n`jira sprint update --state closed`, `jira workitem link delete`.\n\n**Visible to others:** `jira workitem create` \u002F `create-bulk`, `assign`, `clone`,\n`comment update`, `watcher remove`, `jira filter update` (shared filters change for everyone who\nuses them), `jira project` \u002F `board` \u002F `sprint` creates and updates, and Confluence `space` and\n`blog` creates and updates.\n\nThe `--key`, `--jql` and `--filter` selectors can hit hundreds of items in one command. Before any\nmutating command driven by `--jql` or `--filter`, count the blast radius first and show the user\nthe number:\n\n```bash\nacli jira workitem search --jql \"\u003Cthe same jql>\" --count\n```\n\nUse `--yes` only after the user has approved that exact set of items.\n\n## Work Items\n\n> **Important:** Jira comments are posted **immediately** and notify watchers — there is no\n> draft\u002Freview concept in `acli`. When iterating on feedback, avoid posting many comments in a\n> loop: use `acli jira workitem comment create --edit-last` to amend your own most recent\n> comment, or update it by ID with `acli jira workitem comment update`. See [Comments](#comments).\n\n```bash\n# Search work items with JQL (the primary way to list issues)\nacli jira workitem search --jql \"project = \u003Cproject_key>\"\nacli jira workitem search --jql \"assignee = currentUser() AND status != Done\"\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --paginate          # fetch all pages\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --count             # just the count\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --fields \"key,summary,status\" --csv\nacli jira workitem search --jql \"project = \u003Cproject_key>\" --limit 50 --json\n\n# Search using a saved filter ID\nacli jira workitem search --filter \u003Cfilter_id> --web\n\n# View work item details (key is a positional argument)\nacli jira workitem view \u003Cissue_id>\nacli jira workitem view \u003Cissue_id> --fields \"*all\"\nacli jira workitem view \u003Cissue_id> --fields \"summary,comment\"\nacli jira workitem view \u003Cissue_id> --json\n\n# Create a work item\nacli jira workitem create --summary \"New Task\" --project \"\u003Cproject_key>\" --type \"Task\"\nacli jira workitem create --summary \"Bug\" --project \"\u003Cproject_key>\" --type \"Bug\" --assignee \"@me\" --label \"bug,cli\"\nacli jira workitem create --from-file workitem.txt --project \"\u003Cproject_key>\" --type \"Bug\"\nacli jira workitem create --generate-json            # print a JSON template\nacli jira workitem create --from-json workitem.json  # create from JSON\n\n# Bulk create from JSON or CSV\nacli jira workitem create-bulk --generate-json\nacli jira workitem create-bulk --from-json issues.json\nacli jira workitem create-bulk --from-csv issues.csv\n\n# Edit work items (accepts --key, --jql, or --filter selectors; see Selectors)\nacli jira workitem edit --key \"\u003Cissue_id_1>,\u003Cissue_id_2>\" --summary \"New summary\" --yes   # after approval\nacli jira workitem edit --jql \"project = \u003Cproject_key> AND status = Open\" --assignee \"@me\" --yes   # after approval\nacli jira workitem edit --key \"\u003Cissue_id>\" --remove-assignee --yes        # after approval\n\n# Transition (move to another status)\nacli jira workitem transition --key \"\u003Cissue_id>\" --status \"In Progress\"\nacli jira workitem transition --jql \"project = \u003Cproject_key>\" --status \"Done\" --yes   # after approval\n\n# Assign (--assignee accepts @me, default, or an email\u002Faccount ID)\nacli jira workitem assign --key \"\u003Cissue_id>\" --assignee \"@me\"\nacli jira workitem assign --jql \"project = \u003Cproject_key>\" --assignee \"user@atlassian.com\" --yes   # after approval\nacli jira workitem assign --key \"\u003Cissue_id>\" --remove-assignee\n\n# Clone within the same site, or to another project\u002Fsite\nacli jira workitem clone --key \"\u003Cissue_id>\" --to-project \"\u003Cproject_key>\"\n\n# Delete \u002F archive \u002F unarchive\nacli jira workitem delete --key \"\u003Cissue_id_1>,\u003Cissue_id_2>\" --yes   # after approval\nacli jira workitem archive --jql \"project = \u003Cproject_key> AND status = Done\" --yes   # after approval\nacli jira workitem unarchive --key \"\u003Cissue_id>\"\n```\n\n## Comments\n\n```bash\n# Add a comment (posted immediately, notifies watchers)\nacli jira workitem comment create --key \"\u003Cissue_id>\" --body \"This is a comment\"\nacli jira workitem comment create --jql \"project = \u003Cproject_key>\" --body-file comment.txt --yes   # after approval\nacli jira workitem comment create --key \"\u003Cissue_id>\" --body \"Updated\" --edit-last   # amend your last comment\nacli jira workitem comment create --key \"\u003Cissue_id>\" --editor                       # open $EDITOR\n\n# List comments\nacli jira workitem comment list --key \"\u003Cissue_id>\"\n\n# Update a comment (by comment ID)\nacli jira workitem comment update --key \"\u003Cissue_id>\" --id 10001 --body \"Updated text\"\nacli jira workitem comment update --key \"\u003Cissue_id>\" --id 10001 --body \"Internal\" --visibility-role \"Administrators\"\nacli jira workitem comment update --key \"\u003Cissue_id>\" --id 10001 --body-adf comment.adf.json   # ADF body\n\n# Delete a comment\nacli jira workitem comment delete --key \"\u003Cissue_id>\" --id 10023\n\n# Discover visibility options (roles\u002Fgroups) for restricted comments\nacli jira workitem comment visibility --role --project \"PROJ\"\nacli jira workitem comment visibility --group\n```\n\n## Selectors (JQL, Keys, Filters)\n\nMost mutating work-item commands — `edit`, `transition`, `assign`, `comment create`, `clone`,\n`delete`, `archive` — accept the **same three selectors** to choose which work items to act on:\n\n- `--key \"\u003Cissue_id_1>,\u003Cissue_id_2>\"` — explicit comma-separated keys\n- `--jql \"project = \u003Cproject_key> AND ...\"` — a JQL query\n- `--filter 10001` — a saved filter ID\n\n```bash\n# Same edit applied to everything matching a JQL query\nacli jira workitem edit --jql \"project = \u003Cproject_key> AND status = Open\" --assignee \"@me\" --yes   # after approval\n\n# Act on a saved filter's results\nacli jira workitem transition --filter \u003Cfilter_id> --status \"Done\" --yes   # after approval\n\n# Bulk via a file (one key per line, or comma\u002Fspace separated)\nacli jira workitem delete --from-file issues.txt --yes   # after approval\n```\n\nThese commands prompt for confirmation before acting on multiple items. Add `--yes` (`-y`) only\nonce the user has approved that exact set — see [Safety](#safety) — and `--ignore-errors` to continue\npast failures when operating on many items.\n\nJQL tips:\n- `currentUser()` — the authenticated user\n- `project = \u003Cproject_key>`, `status = \"In Progress\"`, `priority = High`\n- Combine with `AND` \u002F `OR`; quote values containing spaces\n\n## Links, Attachments & Watchers\n\n```bash\n# Links\nacli jira workitem link create --out \u003Cissue_id> --in \u003Cissue_id> --type \"Blocks\"\nacli jira workitem link create --generate-json            # template for --from-json bulk linking\nacli jira workitem link list --key \"\u003Cissue_id>\"\nacli jira workitem link delete --id 10001\nacli jira workitem link type                              # available link types\n\n# Attachments\nacli jira workitem attachment list --key \"\u003Cissue_id>\"\nacli jira workitem attachment delete --id 12345\n\n# Watchers\nacli jira workitem list-watchers --key \"\u003Cissue_id>\"            # preferred (watcher list is deprecated)\nacli jira workitem watcher remove --key \"\u003Cissue_id>\" --user 5b10ac8d82e05b22cc7d4ef5\n```\n\n## Projects\n\n```bash\n# List\nacli jira project list --recent          # up to 20 recently viewed\nacli jira project list --paginate        # all projects\nacli jira project list --limit 50 --json\n\n# View\nacli jira project view --key \"\u003Cproject_key>\"\n\n# Create (company-managed projects can be cloned with --from-project)\nacli jira project create --key \"NEW\u003Cproject_key>\" --name \"New Project\"\nacli jira project create --from-project \"\u003Cproject_key>\" --key \"\u003Cnew_project_key>\" --name \"New Project\" --lead-email \"user@atlassian.com\"\n\n# Update\nacli jira project update --project-key \"\u003Cproject_key>\" --name \"Renamed Project\"\n\n# Delete \u002F archive \u002F restore\nacli jira project delete --key \"\u003Cproject_key>\"\nacli jira project archive --key \"\u003Cproject_key>\"\nacli jira project restore --key \"\u003Cproject_key>\"\n```\n\n## Sprints\n\n```bash\n# View a sprint\nacli jira sprint view --id 123\n\n# List work items in a sprint (requires board + sprint IDs)\nacli jira sprint list-workitems --board 6 --sprint 1\nacli jira sprint list-workitems --board 6 --sprint 1 --jql \"status != Done\" --json\n\n# Create a sprint on a board\nacli jira sprint create --name \"Sprint 1\" --board 5\nacli jira sprint create --name \"Sprint 2\" --board 5 --start 2025-01-01 --end 2025-01-14 --goal \"Q1 work\"\n\n# Update (name, goal, state, dates)\nacli jira sprint update --id 37 --name \"Sprint 1 - Final\"\nacli jira sprint update --id 37 --state closed\n\n# Delete one or more sprints\nacli jira sprint delete --id 37,42,55 --yes   # after approval\n```\n\n## Boards\n\n```bash\n# Search boards\nacli jira board search\nacli jira board search --project \"\u003Cproject_key>\" --type scrum\nacli jira board search --name \"platform\" --json\n\n# View a board and its sprints\u002Fprojects\nacli jira board view --id 123\nacli jira board list-sprints --id 123 --state active,closed\nacli jira board list-projects --id 123\n\n# Create \u002F delete\nacli jira board create --name \"My Scrum Board\" --type scrum --filter-id 10040 --location-type project --project \"\u003Cproject_key>\"\nacli jira board delete --id 123,456 --yes   # after approval\n```\n\n## Filters\n\n```bash\n# List your filters \u002F favourites\nacli jira filter list --my\nacli jira filter list --favourite\n\n# Search filters\nacli jira filter search --owner user@atlassian.com --name \"report\"\n\n# View and reuse a filter (its ID feeds `workitem search --filter`)\nacli jira filter view --id 12345\nacli jira workitem search --filter 12345\n\n# Update\nacli jira filter update --id 10001 --name \"Open bugs\" --jql \"project = TEST AND status = Open\"\n```\n\n## Confluence\n\n```bash\n# Spaces\nacli confluence space list\nacli confluence space list --type personal --json\nacli confluence space view --id 123456 --include-all\nacli confluence space create --key SPACEKEY --name \"Space Name\" --description \"...\"\nacli confluence space update --key SPACEKEY --name \"New Name\"\nacli confluence space archive --key SPACEKEY\nacli confluence space restore --key SPACEKEY\n\n# Pages (view by ID)\nacli confluence page view --id 123456789\nacli confluence page view --id 123456789 --body-format storage --json\n\n# Blog posts\nacli confluence blog list --space-id 12345 --limit 25\nacli confluence blog view --id 98765 --body-format atlas_doc_format\nacli confluence blog create --space-id 12345 --title \"Release Notes\" --body \"\u003Cp>Content\u003C\u002Fp>\"\nacli confluence blog create --generate-json                 # template for --from-json\nacli confluence blog create --from-json .\u002Fblog_payload.json\n```\n\n## Authentication\n\n```bash\n# Global OAuth (covers Jira + Confluence together)\nacli auth login\nacli auth status\nacli auth switch\nacli auth logout\n\n# Product-scoped (OAuth or API token)\nacli jira auth login --web\nacli jira auth login --site \"mysite.atlassian.net\" --email \"user@atlassian.com\" --token   # token via stdin\nacli jira auth status\nacli jira auth switch --site mysite.atlassian.net --email \"user@atlassian.com\"\n\nacli confluence auth login\nacli confluence auth status\n```\n\n## Tips\n\n- Prefer `--json` (or `--csv`) and pipe through `jq` for structured output\n- Use `--paginate` to fetch every page of a list; `--limit N` to cap a single page\n- `acli jira workitem view` takes the key as a positional argument: `acli jira workitem view \u003Cissue_id>`\n- `--assignee` accepts `@me`, `default`, an email, or an account ID\n- Mutating commands that act on multiple items prompt for confirmation — add `--yes` (`-y`) only after\n  the user has approved that exact set in the conversation ([Safety](#safety))\n- Reuse saved filters: `acli jira filter view --id \u003Cid>` to find a filter ID, then `acli jira workitem search --filter \u003Cid>`\n- `acli` covers Jira and Confluence as separate auth contexts: `acli jira ...` vs `acli confluence ...`\n- For Rovo Dev (Atlassian's AI coding agent) use `acli rovodev ...` — it has its own `acli rovodev auth login`\n",{"name":5,"description":7},"main","bfa147fd87dd5ceb8121dffb1834820f9a241f41","plugins\u002Facli\u002Fskills\u002Facli",0,"https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows","https:\u002F\u002Fgithub.com\u002Fihudak","dynatrace.com","2026-11-15 04:35:24",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add ihudak\u002Fai-workflows --skill acli",{"tool":57,"command":58},"bunx","bunx skills add ihudak\u002Fai-workflows --skill acli",{"tool":60,"command":61},"pnpm","pnpm dlx skills add ihudak\u002Fai-workflows --skill acli","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fplugins\u002Facli\u002Fskills\u002Facli\u002FSKILL.md",true,[],[66,74,89,94,99,104],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":73},"01M7488EWBKFTDPTZDDFJ4SVM8","specs-git","Runs a command's specs-repository start and end (specs-preflight, commit-artifacts) through specs-git.py, and says which of its lines to print and where.","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fplugins\u002Fworkflows-core\u002Fskills\u002Fspecs-git\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":38},"01M71QFDTG26ZYKHKXB4CSBZVF","reference","Read a shared workflows-core reference by name, and optionally one part of it.","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Freference-parts\u002Fwrong_call_before_right_call\u002Fplugins\u002Fworkflows-core\u002Fskills\u002Freference\u002FSKILL.md",[],[76,81,82,83,84,85,86,87,88],"shared","by name","core","workflows","one","name","read","it",{"skillNo":90,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":38},"01M71QFBEB5WDC147RMWK5VT37","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Freference-parts\u002Fwrong_call_after_right_call\u002Fplugins\u002Fworkflows-core\u002Fskills\u002Freference\u002FSKILL.md",[],[76,87,81,82,83,84,85,86,88],{"skillNo":95,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":38},"01M71QFA6J4A8KCGQ5NTA496P3","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Freference-parts\u002Fwhole_load_before_free_sentence\u002Fplugins\u002Fworkflows-core\u002Fskills\u002Freference\u002FSKILL.md",[],[76,87,88,84,86,81,82,83,85],{"skillNo":100,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":38},"01M71QF8YR6ZTH1PB4JNWAPN7Z","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Freference-parts\u002Funknown_part_request\u002Fplugins\u002Fworkflows-core\u002Fskills\u002Freference\u002FSKILL.md",[],[76,83,81,82,84,85,86,87,88],{"skillNo":105,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":38},"01M71QF7F9S397NQ00KX8A4CFW","https:\u002F\u002Fgithub.com\u002Fihudak\u002Fai-workflows\u002Fblob\u002Fmain\u002Fscripts\u002Ffixtures\u002Freference-parts\u002Ftwo_calls_one_sentence\u002Fplugins\u002Fworkflows-core\u002Fskills\u002Freference\u002FSKILL.md",[],[76,81,82,83,84,85,86,87,88]]