atlassian-cli is an independent, community open-source project, not affiliated with, endorsed by, or sponsored by Atlassian, and is not Atlassian's official CLI (acli). Product names are used only to identify compatibility.
Two Kinds of Jira Automation
When people say Jira automation, they usually mean one thing: the built-in rules engine, Automation for Jira, where you assemble a trigger, some conditions, and actions in a visual editor. That engine is genuinely good, and for a large share of everyday work it is the right answer. But it is only half the picture.
There is a second model: scripted automation that runs outside Jira and drives its REST and Agile APIs from your own terminal, a cron job, or a CI pipeline. This post is a decision guide, not a recipe list. The short version: use the rules engine for reactive, event-driven logic that must fire the moment something changes inside Jira, and reach for a CLI or script when the work is a batch, spans several tools, needs to run on a schedule, or should live in version control. Most mature teams run both.
A note on tooling before we go further. atlassian-cli is an independent, community open-source project. It is not Atlassian's official CLI (acli) and is not affiliated with Atlassian. Use the official acli if you want first-party vendor support; use atlassian-cli if you want a single free Rust binary spanning Jira, Confluence, Bitbucket, and JSM. Neither one is the rules engine. Both drive the same public APIs from the outside.
Where the Rules Engine Wins
The rules engine's core strength is that it lives inside Jira and reacts to events in real time. When an issue is created, transitioned, commented on, or edited, a rule can respond within the same request cycle. Nothing you run from the outside can match that latency, because there is no polling gap: the trigger is the event itself.
It shines for logic like:
- Reactive field and status changes: auto-assign a new bug to the on-call engineer, set a due date when priority becomes Highest, or move a parent to "In Progress" the moment its first subtask starts.
- Cross-issue linking rules: close a parent when all subtasks are done, or clone an issue into another project on a specific transition.
- Low-code accessibility: a project admin can build and edit rules without touching an API token, a script, or a deploy pipeline.
If a non-developer owns the workflow and the logic is "when X happens inside this project, do Y," the rules engine is almost always the correct and cheapest tool. Do not script something the visual editor already does well.
Where the Rules Engine Hits a Wall
The same design that makes the rules engine great at reacting to single events makes it awkward for other jobs. Three limits show up repeatedly:
It is event-driven, so backfills are painful. Rules fire when something changes. If you need to apply a one-time change across ten thousand existing issues, there is no natural trigger. Teams end up faking one by bulk-editing issues just to make rules fire, which is fragile and hard to reason about.
Execution is metered and bounded. Automation runs against per-plan execution limits, and heavy rules can consume budget quickly. A giant historical sweep is exactly the kind of work that bumps into those ceilings.
Logic lives in a setting, not in version control. A rule is configuration inside a project. You cannot easily diff it, code-review a change, or roll it back the way you would a file in git. For teams that treat infrastructure as code, that opacity is a real cost. Auditing "what automation do we even have?" across many projects is tedious in the UI.
None of this makes the rules engine bad. It means the rules engine is the wrong shape for batch work, versioned logic, and anything that has to reach beyond Jira.
What CLI-Driven Automation Adds
Running automation from a command line flips every one of those constraints. Because the logic lives in a script you own, it is text you can commit, diff, and review. Because it runs outside Jira, it can talk to other systems in the same breath, and it treats a batch of ten thousand issues as a normal Tuesday.
The properties that matter:
- Batch-native. A single command takes a JQL query and acts on the whole result set, with a preview step and concurrency control built in.
- Composable. JSON output pipes straight into
jq, spreadsheets, or another tool. The automation is a shell pipeline, not a walled garden. - Scheduled and reproducible. The same script runs from your laptop, a cron job, or a CI stage. There is no hidden state: what you read is what runs.
- Versioned and reviewable. Because it is a file, a change to your automation goes through the same pull request and review as any other code.
Crucially, a CLI does not compete with the rules engine on latency. It is not trying to react to a single event in milliseconds. It is for the jobs the rules engine was never meant to do.
Rules Engine vs. CLI Script
Here is the tradeoff at a glance. Read it as "which shape fits the job," not "which is better."
| Dimension | Rules engine (Automation for Jira) | Scripted CLI automation |
|---|---|---|
| Trigger model | Real-time, event-driven inside Jira | You invoke it: manual, cron, or CI |
| Best for | Reactive single-issue logic | Batches, reports, scheduled jobs |
| Backfills | Awkward, no natural trigger | Native, one JQL query |
| Version control | Config in a project setting | A file you diff and review |
| Reaches other tools | Limited to configured integrations | Any tool in the same shell pipeline |
| Who owns it | Project admins, no code needed | Anyone comfortable in a terminal |
| Latency | Instant on the triggering event | Whenever the job runs |
What CLI Automation Looks Like
To make the second model concrete, here are the building blocks with real atlassian-cli commands. These are illustrative primitives, not a copy-paste playbook; the sibling posts below collect worked examples.
First, audit the automation you already have. The CLI can list existing rules and webhooks so you can inventory reactive logic before you decide what to script:
# See the rules and webhooks that already run inside Jira
atlassian-cli jira automation list
atlassian-cli jira webhooks list
Next, the batch job that the rules engine struggles with. Every bulk command previews with --dry-run before it changes anything, so you always see the blast radius first:
# Backfill a status change across a large historical set
atlassian-cli jira bulk transition \
--jql "project = DEV AND status = 'In Review' AND updated < -90d" \
--transition "Done" \
--dry-run
Then a scheduled reporting job. Because output is machine-readable, the automation is just a pipeline into jq:
# Count open bugs by priority for a weekly digest
atlassian-cli jira issue search \
--jql "project = DEV AND type = Bug AND statusCategory != Done" \
--format json | jq 'group_by(.fields.priority.name)
| map({priority: .[0].fields.priority.name, count: length})'
And a CI gate, using the quiet format so the exit code is the whole signal:
# Fail a pipeline stage if credentials are not valid
atlassian-cli auth test --profile prod --format quiet && echo "Jira reachable"
Finally, the compliance angle the rules engine cannot give you directly: an exportable trail of who changed what. The audit and --envelope flags make the data downstream-friendly:
# Pull the audit log for review, wrapped for easy parsing
atlassian-cli jira audit list --from 2026-01-01 --limit 200 \
--format json --envelope
Every one of these lives in a file you can commit. If you want a hardened version of the batch pattern with confirmation prompts and error handling, see the sprint report runbook, and the full flag list is in the command reference.
Using Both Together
The best setups do not choose. They split responsibilities along the grain of each tool. A simple rule of thumb:
Let the rules engine own reactions
Anything that must respond to a live event stays in Automation for Jira: assignment on create, transition on subtask completion, notifications on status change. It is instant and any project admin can maintain it.
Let scripts own batches and schedules
Nightly cleanups, weekly reports, quarterly backfills, and cross-tool sync belong in a CLI script run by cron or CI. These are versioned, reviewable, and unbounded by rule execution budgets.
Let the CLI keep the rules engine honest
Use jira automation list and jira audit list to inventory and audit your reactive rules from the outside, so the automation you cannot easily diff in the UI still shows up in a report you can.
Framed this way, the CLI is not a rival to the rules engine. It is the layer that covers the batch, scheduled, and auditable work the rules engine was never built for, while the rules engine keeps doing the instant, in-product reactions it does best. For deeper end-to-end walkthroughs, the complete Jira CLI guide and the Jira CLI reference cover the full command surface, and bulk Jira operations goes deep on the batch side specifically.
FAQ
Should I use Jira's automation rules or a script?
Use the built-in rules engine for things that must happen the instant an event fires inside Jira: auto-assigning a new bug, transitioning a parent when subtasks close, posting a comment on status change. Reach for scripted CLI automation when the work is a batch, spans multiple tools, needs to run on a schedule, or should live in version control and code review. Most teams end up using both, with the rules engine handling reactive event logic and scripts handling scheduled or ad hoc jobs.
Can Jira automation rules do bulk backfills?
The rules engine is event-driven, so it is a poor fit for one-off backfills across thousands of existing issues. It also has per-rule and per-plan execution limits. For a large historical change, a CLI batch is a better tool: atlassian-cli jira bulk transition takes a JQL query, supports a --dry-run preview, and processes issues with controlled concurrency and rate-limit backoff, so you can run the whole set once and walk away.
What can a CLI do that Automation for Jira can't?
A CLI runs outside Jira, so it can pipe issue data to jq, commit scripts to git, run inside CI next to your build, and coordinate Jira with other systems in the same script. It also makes automation reviewable and versioned: the logic is text you can diff, not a rule buried in a project setting. atlassian-cli exposes JSON and CSV output and a quiet mode for CI gating that the in-app rules editor does not.
Is atlassian-cli the same as Jira's automation engine?
No. Automation for Jira is Atlassian's built-in no-code rules engine that runs inside the product. atlassian-cli is an independent, community open-source binary you run from your own terminal or pipeline. It does not replace the rules engine and cannot register in-app triggers; it drives the same REST and Agile APIs from the outside, and can even list your existing rules with jira automation list so you can audit them alongside scripted jobs.
Try atlassian-cli
One free, MIT-licensed Rust binary for scripted Jira, Confluence, Bitbucket, and JSM automation. No account required to install.
Install Now