| name | acli |
| description | Use acli jira CLI for Jira work item management, project operations, sprint tracking, and board management with JQL search capabilities. Load this skill for ad-hoc Jira operations not covered by workflow skills, or when you need detailed ACLI command reference.
|
Atlassian CLI (acli) - Jira Workflow Skill
You are an Atlassian CLI specialist. This skill provides comprehensive guidance for managing Jira work items, projects, sprints, and boards using the acli jira command-line tool.
Core Principles
Output Formats
Standard formats available:
- Default: Human-readable table format
--json: JSON output for scripting and automation
--csv: CSV output for data export (available on search commands)
--web: Open results in web browser
Best practices:
- Use
--json for scripting and parsing
- Use
--csv for exporting to spreadsheets
- Use
--web for quick visual inspection
- Use default format for human review
Pagination and Limits
acli jira workitem search --jql "project = TEAM" --limit 50
acli jira workitem search --jql "project = TEAM" --paginate
acli jira workitem search --jql "project = TEAM" --count
Authentication
Initial Setup
acli jira auth login
acli jira auth status
acli jira auth switch
acli jira auth logout
Work Items (Issues)
Searching for Work Items
acli jira workitem search --jql "project = TEAM"
acli jira workitem search --jql "project = TEAM" --fields "key,summary,assignee"
acli jira workitem search --jql "project = TEAM" --paginate
acli jira workitem search --jql "project = TEAM" --count
acli jira workitem search --jql "project = TEAM" --csv
acli jira workitem search --jql "project = TEAM" --json
acli jira workitem search --filter 10001
acli jira workitem search --jql "project = TEAM" --web
acli jira workitem search --jql "project = TEAM" --limit 50
Common JQL patterns:
acli jira workitem search --jql "assignee = currentUser()"
acli jira workitem search --jql "project = TEAM AND status != Done"
acli jira workitem search --jql "updated >= -7d"
acli jira workitem search --jql "priority = High AND status = Open"
acli jira workitem search --jql "project = TEAM AND assignee = currentUser() AND status in (Open, 'In Progress')"
acli jira workitem search --jql "project = TEAM AND issuetype = Bug"
acli jira workitem search --jql "labels = production AND status != Closed"
Viewing Work Items
acli jira workitem view KEY-123
acli jira workitem view KEY-123 --fields "summary,description,comment"
acli jira workitem view KEY-123 --fields "*all"
acli jira workitem view KEY-123 --fields "*navigable"
acli jira workitem view KEY-123 --fields "*navigable,-comment"
acli jira workitem view KEY-123 --json
acli jira workitem view KEY-123 --web
Creating Work Items
Available CLI flags for acli jira workitem create:
| Flag | Description |
|---|
--summary / -s | Work item title |
--project / -p | Project key |
--type / -t | Issue type (Epic, Story, Task, Bug) |
--assignee / -a | Email or @me (NOT raw account IDs) |
--description / -d | Plain text or ADF JSON |
--description-file | Read description from file |
--label / -l | Comma-separated labels |
--parent | Parent issue key (e.g., epic key) |
--from-json | Create from JSON file |
--from-file / -f | Read summary/description from file |
--editor / -e | Open text editor |
--json | Return JSON output |
There is no --component, --sprint, or --story-points flag. To set
components, sprint, story points, or any other custom/non-standard field, you
MUST use the --from-json approach.
acli jira workitem create \
--summary "New feature request" \
--project "TEAM" \
--type "Story"
acli jira workitem create \
--summary "Fix login bug" \
--project "TEAM" \
--type "Bug" \
--assignee "user@example.com"
acli jira workitem create \
--summary "Research task" \
--project "TEAM" \
--type "Task" \
--assignee "@me"
acli jira workitem create \
--summary "Sub-task" \
--project "TEAM" \
--type "Story" \
--parent "TEAM-100"
acli jira workitem create \
--summary "Urgent bug fix" \
--project "TEAM" \
--type "Bug" \
--label "production,urgent,bug"
Creating with Custom Fields (components, sprint, story points)
Use --from-json when you need to set fields not available as CLI flags. The
JSON format is acli's own format, NOT the raw Jira REST API format.
Generate the template to see the schema:
acli jira workitem create --generate-json
The JSON schema is:
{
"summary": "Title",
"projectKey": "PROJ",
"type": "Story",
"parentIssueId": "PROJ-100",
"assignee": "@me",
"labels": ["label1", "label2"],
"description": {
"type": "doc",
"version": 1,
"content": [
{
"type": "paragraph",
"content": [{"type": "text", "text": "Description text"}]
}
]
},
"additionalAttributes": {
"components": [{"id": "12345"}],
"customfield_10003": 5,
"customfield_10701": 16378
}
}
Key fields in additionalAttributes:
components — Array of {"id": "..."} objects (use component ID, not name)
- Sprint custom field (e.g.,
customfield_10701) — Set to the sprint ID (integer)
- Story points custom field (e.g.,
customfield_10003) — Set to a number
Important notes about --from-json:
- Use
projectKey (not project.key)
- Use
parentIssueId (not parent.key) — this is the parent issue key string
assignee accepts @me or an email address — NOT raw Jira account IDs
description must be in Atlassian Document Format (ADF), not plain text
- Custom field IDs vary per Jira instance — discover them by viewing an existing
issue with
--fields "*all" --json and inspecting the customfield_* keys
acli jira workitem create --from-json /path/to/workitem.json --json
Assignment Gotchas
Some projects restrict who can be assigned issues during creation. If you get
a "cannot be assigned issues" error:
- Create the issue without an assignee
- Assign separately using
acli jira workitem assign:
acli jira workitem create \
--summary "New task" \
--project "TEAM" \
--type "Story" \
--json
acli jira workitem assign --key "TEAM-456" --assignee "user@example.com"
acli jira workitem assign --key "TEAM-456" --assignee "@me"
The assign subcommand often succeeds where create --assignee fails because
they use different Jira API permission checks.
Editing Work Items
Available CLI flags for acli jira workitem edit:
| Flag | Description |
|---|
--key / -k | Comma-separated work item keys |
--jql | JQL query for bulk edits |
--filter | Filter ID for bulk edits |
--summary / -s | New summary |
--description / -d | New description (plain text or ADF) |
--description-file | Read description from file |
--assignee / -a | New assignee (email, @me, default) |
--remove-assignee | Unassign |
--type / -t | Change issue type |
--labels / -l | Set labels |
--remove-labels | Remove labels |
--from-json | Edit from JSON file |
--yes / -y | Skip confirmation |
--ignore-errors | Continue on errors (bulk) |
--json | JSON output |
⚠️ Edit JSON schema is limited. The edit --from-json schema only supports:
issues, summary, description, assignee, type, labelsToAdd, labelsToRemove.
It does NOT support additionalAttributes, custom fields, resolution, priority,
or components. To see the schema: acli jira workitem edit --generate-json.
There is no --priority, --resolution, or --component flag on edit.
These fields cannot be updated via acli CLI — use the Jira web UI for these changes.
acli jira workitem edit --key "KEY-123" --summary "Updated summary"
acli jira workitem edit --key "KEY-123,KEY-124,KEY-125" --assignee "@me"
acli jira workitem edit \
--jql "project = TEAM AND status = Open" \
--assignee "user@example.com"
acli jira workitem edit --filter 10001 --labels "reviewed"
acli jira workitem edit --key "KEY-123" --description "Updated description"
acli jira workitem edit --key "KEY-123" --description-file "desc.txt"
acli jira workitem edit --key "KEY-123" --type "Epic"
acli jira workitem edit --key "KEY-123" --labels "backend,api"
acli jira workitem edit --key "KEY-123" --remove-labels "old-label"
acli jira workitem edit --key "KEY-123" --remove-assignee
acli jira workitem edit --key "KEY-123" --summary "New" --yes
acli jira workitem edit \
--jql "project = TEAM" \
--assignee "@me" \
--ignore-errors
acli jira workitem edit --key "KEY-123" --summary "New" --json
Transitioning Work Items
acli jira workitem transition --key "KEY-123" --status "In Progress"
acli jira workitem transition \
--key "KEY-123,KEY-124" \
--status "Done"
acli jira workitem transition \
--jql "project = TEAM AND assignee = currentUser()" \
--status "In Review"
acli jira workitem transition \
--filter 10001 \
--status "Closed"
acli jira workitem transition \
--key "KEY-123" \
--status "Done" \
--yes
acli jira workitem transition \
--jql "project = TEAM" \
--status "Done" \
--ignore-errors
acli jira workitem transition \
--key "KEY-123" \
--status "Done" \
--json
Common status transitions:
To Do / Open - New work
In Progress - Active work
In Review / Code Review - Under review
Testing / QA - Being tested
Done / Closed / Resolved - Completed
⚠️ Resolution cannot be set via transition. The transition command has no
--resolution flag. If your workflow requires resolution on terminal statuses
(e.g., Done), the workflow may auto-set it, or it must be set in the Jira web UI.
Assigning Work Items
acli jira workitem assign \
--key "KEY-123" \
--assignee "user@example.com"
acli jira workitem assign --key "KEY-123" --assignee "@me"
acli jira workitem assign --key "KEY-123" --assignee "default"
acli jira workitem assign \
--key "KEY-123,KEY-124,KEY-125" \
--assignee "@me"
Comments
acli jira workitem comment create \
--key "KEY-123" \
--body "This is a comment"
acli jira workitem comment create \
--key "KEY-123" \
--body-file "comment.txt"
acli jira workitem comment create \
--key "KEY-123" \
--editor
acli jira workitem comment create \
--jql "project = TEAM AND status = Open" \
--body "Bulk comment"
acli jira workitem comment create \
--key "KEY-123" \
--body "Updated comment" \
--edit-last
acli jira workitem comment create \
--jql "project = TEAM" \
--body "Comment" \
--ignore-errors
acli jira workitem comment list --key "KEY-123"
acli jira workitem comment update \
--key "KEY-123" \
--comment-id "10001" \
--body "Updated comment text"
acli jira workitem comment delete \
--key "KEY-123" \
--comment-id "10001"
acli jira workitem comment visibility --key "KEY-123"
Attachments
acli jira workitem attachment --help
Linking Work Items
acli jira workitem link --help
Cloning Work Items
acli jira workitem clone \
--key "KEY-123" \
--summary "Cloned issue"
Archiving and Deleting
acli jira workitem archive --key "KEY-123"
acli jira workitem archive --key "KEY-123,KEY-124,KEY-125"
acli jira workitem unarchive --key "KEY-123"
acli jira workitem delete --key "KEY-123"
acli jira workitem delete --key "KEY-123,KEY-124"
Watchers
acli jira workitem watcher --help
Bulk Operations
acli jira workitem create-bulk --from-json "bulk-issues.json"
acli jira workitem create-bulk --generate-json
Projects
Listing Projects
acli jira project list
acli jira project list --limit 50
acli jira project list --paginate
acli jira project list --recent
acli jira project list --json
Viewing Projects
acli jira project view --key "TEAM"
acli jira project view --key "TEAM" --json
Creating Projects
acli jira project create
Updating Projects
acli jira project update --key "TEAM"
Archiving Projects
acli jira project archive --key "TEAM"
acli jira project restore --key "TEAM"
Deleting Projects
acli jira project delete --key "TEAM"
Sprints and Boards
Finding the Active Sprint for a Project
The fastest way to find the active sprint is via JQL, not the board API. Search for
any issue in the project's open sprint and read the sprint custom field from the
JSON response:
acli jira workitem search \
--jql "project = PROJ AND sprint in openSprints()" \
--fields "key" --limit 1 --json
acli jira workitem view PROJ-123 --fields "*all" --json \
| jq '
.fields | to_entries[]
| select(.value | type == "array" and length > 0)
| select(.value[0] | type == "object" and has("state"))
| .value[] | select(.state == "active")
'
The sprint object contains id, name, boardId, startDate, endDate, and
state. Use id when assigning a sprint to a new issue via additionalAttributes
in the --from-json creation flow (see "Creating with Custom Fields" above).
Do NOT try to find the sprint by paginating through acli jira board search —
there can be hundreds of boards and the project's board may not appear on early pages.
Board Commands
acli jira board search
acli jira board get --id 123
acli jira board list-sprints --id 123
Sprint Work Items
acli jira sprint list-workitems --id 456
Filters
Managing Filters
acli jira filter list
acli jira filter search
acli jira filter get --id 10001
acli jira filter add-favourite --id 10001
acli jira filter change-owner --id 10001
acli jira filter get-columns --id 10001
acli jira filter reset-columns --id 10001
Fields
Field Management
acli jira field --help
Dashboards
Dashboard Management
acli jira dashboard --help
Known Limitations (verified)
These are confirmed acli CLI limitations as of v1.3.x:
| Operation | Status | Workaround |
|---|
| Set resolution during transition | NOT POSSIBLE | Workflow may auto-set; otherwise use Jira web UI |
| Set resolution via edit | NOT POSSIBLE | edit --from-json rejects resolution field |
| Set story points via edit | NOT POSSIBLE | edit --from-json rejects additionalAttributes |
| Set story points at creation | WORKS | Use create --from-json with additionalAttributes |
| Set priority via edit | NOT POSSIBLE | No --priority flag on edit command |
| Set custom fields via edit | NOT POSSIBLE | edit --from-json schema is limited |
| Bulk create with story points | NOT POSSIBLE | create-bulk schema lacks additionalAttributes |
| Bulk create with parent links | NOT POSSIBLE | create-bulk schema lacks parentIssueId |
Key insight: The create --from-json schema is much richer than edit --from-json.
Always set custom fields (story points, sprint, components) at creation time.
Complete Workflows
Workflow 1: Create and Track Bug
acli jira workitem create \
--summary "Fix login validation" \
--project "TEAM" \
--type "Bug" \
--assignee "@me" \
--label "production,high-priority"
acli jira workitem transition --key "KEY-123" --status "In Progress"
acli jira workitem comment create \
--key "KEY-123" \
--body "Found root cause, implementing fix"
acli jira workitem transition --key "KEY-123" --status "Done"
acli jira workitem comment create \
--key "KEY-123" \
--body "Fixed validation logic in LoginController"
Workflow 2: Bulk Update Sprint Items
acli jira workitem search \
--jql "sprint = 'Sprint 23' AND status = 'To Do'" \
--fields "key,summary"
acli jira workitem transition \
--jql "sprint = 'Sprint 23' AND status = 'To Do'" \
--status "In Progress" \
--yes
acli jira workitem edit \
--jql "sprint = 'Sprint 23' AND assignee is EMPTY" \
--assignee "@me" \
--yes
Workflow 3: Create Epic with Stories
acli jira workitem create \
--summary "User Authentication Redesign" \
--project "TEAM" \
--type "Epic" \
--assignee "@me"
acli jira workitem create \
--summary "Design new login UI" \
--project "TEAM" \
--type "Story" \
--parent "TEAM-100"
acli jira workitem create \
--summary "Implement OAuth2 integration" \
--project "TEAM" \
--type "Story" \
--parent "TEAM-100"
acli jira workitem create \
--summary "Add multi-factor authentication" \
--project "TEAM" \
--type "Story" \
--parent "TEAM-100"
Workflow 4: Daily Standup Report
acli jira workitem search \
--jql "assignee = currentUser() AND status in ('In Progress', 'In Review')" \
--fields "key,summary,status"
acli jira workitem search \
--jql "assignee = currentUser() AND status changed TO Done AFTER -1d" \
--fields "key,summary"
Workflow 5: Review and Triage New Bugs
acli jira workitem search \
--jql "project = TEAM AND type = Bug AND assignee is EMPTY" \
--fields "key,summary,priority,created"
acli jira workitem edit \
--jql "project = TEAM AND type = Bug AND priority = Highest AND assignee is EMPTY" \
--assignee "senior-dev@example.com" \
--yes
acli jira workitem edit \
--jql "project = TEAM AND type = Bug AND created >= -1d" \
--labels "needs-triage" \
--yes
Workflow 6: Sprint Cleanup
acli jira workitem search \
--jql "sprint = 'Sprint 22' AND status != Done" \
--fields "key,summary,assignee,status"
acli jira workitem edit \
--jql "sprint = 'Sprint 22' AND status != Done" \
--yes
acli jira workitem comment create \
--jql "sprint = 'Sprint 22' AND status != Done" \
--body "Carried over to Sprint 23 due to dependencies"
Workflow 7: Export Issues for Reporting
acli jira workitem search \
--jql "project = TEAM AND created >= -30d" \
--fields "key,issuetype,assignee,priority,status,summary,created,resolved" \
--csv > issues-last-30-days.csv
acli jira workitem search \
--jql "project = TEAM AND status = Done AND resolved >= -7d" \
--json > completed-this-week.json
Best Practices
JQL Query Design
- Be specific: Use precise field matching
- Use operators:
AND, OR, NOT, IN, IS, WAS
- Date functions:
startOfDay(), endOfDay(), startOfWeek()
- User functions:
currentUser(), membersOf()
- Test first: Use
--count to verify query before bulk operations
Bulk Operations Safety
- Always test JQL: Run search first to verify matching items
- Use --yes carefully: Only with confirmed queries
- Use --ignore-errors: For large bulk operations
- Check limits: Use
--paginate for operations on many items
- Verify results: Check a sample after bulk updates
Field Selection
- Default fields: Use for quick overview
- Minimal fields: Use
--fields "key,summary" for performance
- All fields: Use
--fields "*all" only when needed
- Exclude fields: Use
--fields "*navigable,-comment" to reduce noise
Output Format Selection
- Human review: Use default table format
- Scripting: Use
--json for parsing
- Spreadsheets: Use
--csv for export
- Quick check: Use
--web to open in browser
- Count only: Use
--count for metrics
Assignment Best Practices
- Use @me: For self-assignment
- Use email: For specific users
- Use default: For project default assignee
- Verify users exist: Before bulk assignment
- Unassign when needed: Use
--remove-assignee
Common Patterns
Pattern 1: Find My Open Work
acli jira workitem search \
--jql "assignee = currentUser() AND status != Done" \
--fields "key,summary,status,priority"
Pattern 2: Track Team Velocity
acli jira workitem search \
--jql "sprint = 'Sprint 23' AND status = Done" \
--count
acli jira workitem search \
--jql "sprint = 'Sprint 23' AND status = 'In Progress'" \
--count
Pattern 3: Find Stale Issues
acli jira workitem search \
--jql "status = 'In Progress' AND updated <= -14d" \
--fields "key,summary,assignee,updated"
Pattern 4: Label Management
acli jira workitem edit \
--jql "project = TEAM AND created >= -7d" \
--labels "new-this-week" \
--yes
acli jira workitem edit \
--jql "labels = 'new-this-week' AND created <= -7d" \
--remove-labels "new-this-week" \
--yes
Pattern 5: Find Unprioritized Items
acli jira workitem search \
--jql "project = TEAM AND priority is EMPTY" \
--fields "key,summary,created"
Discovering Custom Field IDs
Jira custom field IDs (customfield_*) vary per instance. To find the correct
IDs for sprint, story points, components, etc., inspect an existing issue that
already has those fields set:
acli jira workitem search \
--jql "project = PROJ AND sprint in openSprints()" \
--fields "key" --limit 1 --json
acli jira workitem view PROJ-123 --fields "*all" --json \
| jq -r '
.fields | to_entries[]
| select(.value != null and .value != "" and .value != {} and .value != [])
| "\(.key): \(.value | tostring | .[:200])"
'
What to look for:
- Sprint: A
customfield_* containing a list of objects with boardId,
state, startDate, endDate keys
- Story points: A
customfield_* containing a plain number (e.g., 5)
- Components: Standard field
components (not a custom field) — array of
{"id": "...", "name": "..."} objects
You can also list all available fields:
acli jira field --help
Troubleshooting
Issue: JQL Syntax Error
acli jira workitem search --jql "project = TEAM" --count
acli jira workitem search --jql "project = TEAM AND status = Open" --count
acli jira workitem search \
--jql "project = TEAM AND status = Open AND assignee = currentUser()" \
--count
Issue: No Results from Search
acli jira project list | grep "TEAM"
acli jira filter get --id 10001
acli jira workitem search --jql "project = TEAM" --count
Issue: Bulk Operation Too Slow
acli jira workitem search --jql "project = TEAM" --count
acli jira workitem edit \
--jql "project = TEAM AND created >= -7d" \
--labels "batch1" \
--yes
acli jira workitem edit \
--jql "project = TEAM AND created < -7d AND created >= -14d" \
--labels "batch2" \
--yes
Issue: Authentication Expired
acli jira auth status
acli jira auth login
acli jira auth switch
Issue: Permission Denied
acli jira workitem view KEY-123
acli jira project view --key "TEAM"
Advanced Usage
Combining with Other Tools
acli jira workitem search \
--jql "project = TEAM" \
--json | jq '.[] | {key: .key, summary: .fields.summary}'
acli jira workitem search \
--jql "project = TEAM" \
--csv | xsv select key,summary,assignee
acli jira workitem search \
--jql "project = TEAM" \
--fields "key,summary" | grep "authentication"
Scripting Examples
while IFS= read -r summary; do
acli jira workitem create \
--summary "$summary" \
--project "TEAM" \
--type "Task" \
--assignee "@me"
done < tasks.txt
for key in KEY-{100..110}; do
acli jira workitem transition \
--key "$key" \
--status "Done" \
--yes 2>/dev/null
done
Quick Reference
acli jira auth login
acli jira auth status
acli jira workitem search --jql "JQL_QUERY"
acli jira workitem search --jql "JQL_QUERY" --fields "key,summary"
acli jira workitem search --filter FILTER_ID
acli jira workitem view KEY-123
acli jira workitem view KEY-123 --web
acli jira workitem create --summary "Title" --project "TEAM" --type "Task"
acli jira workitem edit --key "KEY-123" --summary "New title"
acli jira workitem edit --jql "JQL_QUERY" --assignee "@me"
acli jira workitem transition --key "KEY-123" --status "Done"
acli jira workitem comment create --key "KEY-123" --body "Comment"
acli jira project list
acli jira project view --key "TEAM"
acli jira workitem search --jql "JQL_QUERY" --csv > export.csv
acli jira workitem search --jql "JQL_QUERY" --json > export.json
Summary
Primary directives:
- Always authenticate first using
acli jira auth login
- Test JQL queries before bulk operations
- Use --yes flag carefully to avoid unintended changes
- Select appropriate output format (default, json, csv, web)
- Use pagination for large result sets
- Verify permissions before attempting operations
- Use --ignore-errors for resilient bulk operations
- Set custom fields at creation time — they cannot be edited via acli
Most common operations:
acli jira workitem search --jql "..." - Find work items
acli jira workitem view KEY-123 - View details
acli jira workitem create - Create new work item
acli jira workitem edit - Update work items
acli jira workitem transition - Change status
acli jira workitem comment create - Add comments
acli jira project list - List projects