Unified CLI for Jira, Confluence, Bitbucket & JSM
Automate your entire Atlassian Cloud stack from the terminal. Bulk operations, dry-run mode, multiple output formats (JSON/CSV/YAML/table), and profile-based multi-instance support.
# Add the tap (first time only)
brew tap omar16100/atlassian-cli
# Install
brew install atlassian-cli
# Verify installation
atlassian-cli --versioncargo install atlassian-cligit clone https://github.com/omar16100/atlassian-cli
cd atlassian-cli
cargo install --path crates/cliDownload the latest release for your platform from the Releases page.
crates/
cli/ # Clap-based binary entry point
api/ # Thin HTTP client wrapper (reqwest)
auth/ # Keyring-backed credential helpers
config/ # YAML profile loader (~/.atlassian-cli/config.yaml)
output/ # Output formatting helpers (table/json/yaml/csv/quiet)
bulk/ # Concurrency + dry-run aware executor
- Install the Rust toolchain (rustup) and ensure
cargois on your PATH. - Fetch dependencies and verify the workspace compiles:
cargo check
- Install the CLI locally so the
atlassian-clibinary is available (ensure~/.cargo/binis in your PATH):cargo install --path crates/cli
- Run the CLI help to inspect current subcommands:
atlassian-cli --help atlassian-cli jira --help atlassian-cli confluence --help atlassian-cli bitbucket --help # or use 'bb' alias atlassian-cli bb --help - Add a profile and API token:
atlassian-cli auth login \ --profile personal \ --base-url https://example.atlassian.net \ --email you@example.com \ --token $ATLASSIAN_API_TOKEN \ --default - List configured profiles (reads
~/.atlassian-cli/config.yamlif present):Tip: Useatlassian-cli auth list
cp configs/config.example.yaml ~/.atlassian-cli/config.yamlas a starting point before running the login command. - Try the Jira, Confluence, Bitbucket, and JSM commands (requires real data):
# Jira - Issues atlassian-cli jira search --jql "project = DEV order by created desc" --limit 5 atlassian-cli jira get DEV-123 atlassian-cli jira create --project DEV --issue-type Task --summary "Test task" atlassian-cli jira update DEV-123 --summary "Updated summary" atlassian-cli jira transition DEV-123 --transition "In Progress" atlassian-cli jira assign DEV-123 --assignee user@example.com atlassian-cli jira delete DEV-123 # Jira - Projects atlassian-cli jira project list atlassian-cli jira project get DEV atlassian-cli jira components list --project DEV atlassian-cli jira versions list --project DEV # Jira - Roles atlassian-cli jira roles list --project DEV atlassian-cli jira roles get --project DEV --role-id 10002 atlassian-cli jira roles actors --project DEV --role-id 10002 atlassian-cli jira roles add-actor --project DEV --role-id 10002 --user user@example.com atlassian-cli jira roles remove-actor --project DEV --role-id 10002 --user user@example.com # Jira - Custom Fields & Workflows atlassian-cli jira fields list atlassian-cli jira workflows list atlassian-cli jira workflows export --name "Software Simplified Workflow" # Jira - Bulk Operations atlassian-cli jira bulk transition --jql "project = DEV AND status = Open" --transition "In Progress" --dry-run atlassian-cli jira bulk assign --jql "project = DEV AND assignee is EMPTY" --assignee admin@example.com atlassian-cli jira bulk export --jql "project = DEV" --output issues.json --format json # Jira - Automation & Webhooks atlassian-cli jira automation list atlassian-cli jira webhooks list atlassian-cli jira audit list --from 2025-01-01 --limit 100 # Confluence - Search atlassian-cli confluence search cql --cql "space = DEV and type = page" --limit 5 atlassian-cli confluence search text --query "meeting notes" --limit 10 atlassian-cli confluence search in-space --space DEV --query "api docs" # Confluence - Spaces atlassian-cli confluence space list --limit 10 atlassian-cli confluence space get DEV atlassian-cli confluence space create --key DOCS --name "Documentation" --description "Team docs" atlassian-cli confluence space update DEV --name "Development Space" atlassian-cli confluence space delete OLD --force atlassian-cli confluence space permissions DEV atlassian-cli confluence space add-permission DEV --principal user@example.com --operation read # Confluence - Pages atlassian-cli confluence page list --space DEV --limit 25 atlassian-cli confluence page get --id 12345 atlassian-cli confluence page create --space DEV --title "New Page" --body "<p>Content</p>" atlassian-cli confluence page update --id 12345 --title "Updated Title" atlassian-cli confluence page delete --id 12345 atlassian-cli confluence page versions --id 12345 atlassian-cli confluence page add-label --id 12345 --label documentation atlassian-cli confluence page remove-label --id 12345 --label outdated atlassian-cli confluence page comments --id 12345 atlassian-cli confluence page add-comment --id 12345 --body "Great work!" atlassian-cli confluence page get-restrictions --id 12345 atlassian-cli confluence page add-restriction --id 12345 --operation update --user user@example.com atlassian-cli confluence page remove-restriction --id 12345 --operation update --user user@example.com # Confluence - Blog Posts atlassian-cli confluence blog list --space DEV --limit 10 atlassian-cli confluence blog get --id 67890 atlassian-cli confluence blog create --space DEV --title "Sprint Recap" --body "<p>Summary</p>" atlassian-cli confluence blog update --id 67890 --title "Updated Recap" atlassian-cli confluence blog delete --id 67890 # Confluence - Attachments atlassian-cli confluence attachment list --page-id 12345 atlassian-cli confluence attachment get --id 11111 atlassian-cli confluence attachment upload --page-id 12345 --file ./diagram.png atlassian-cli confluence attachment download --id 11111 --output ./download.png atlassian-cli confluence attachment delete --id 11111 # Confluence - Bulk Operations atlassian-cli confluence bulk delete --space OLD --dry-run atlassian-cli confluence bulk add-labels --cql "space = DEV" --labels docs,reviewed --dry-run atlassian-cli confluence bulk export --space DEV --output backup.json --format json # Confluence - Analytics atlassian-cli confluence analytics page-views --id 12345 --from 2025-01-01 atlassian-cli confluence analytics space-stats --space DEV # Bitbucket Commands # Note: You can use 'bb' as a shorthand alias for 'bitbucket' in all commands below # Examples: atlassian-cli bb whoami OR atlassian-cli bitbucket whoami # Bitbucket - User Info atlassian-cli bitbucket whoami # Bitbucket - Repositories atlassian-cli bitbucket --workspace myteam repo list --limit 10 atlassian-cli bitbucket --workspace myteam repo get api-service atlassian-cli bitbucket --workspace myteam repo create newrepo --name "New Repo" --private atlassian-cli bitbucket --workspace myteam repo update api-service --description "Updated description" atlassian-cli bitbucket --workspace myteam repo delete oldrepo --force # Bitbucket - Branches atlassian-cli bitbucket --workspace myteam branch list api-service atlassian-cli bitbucket --workspace myteam branch create api-service feature/new --from main atlassian-cli bitbucket --workspace myteam branch delete api-service feature/old --force atlassian-cli bitbucket --workspace myteam branch protect api-service --pattern "main" --kind restrict_merges --approvals 2 atlassian-cli bitbucket --workspace myteam branch restrictions api-service # Bitbucket - Pull Requests atlassian-cli bitbucket --workspace myteam pr list api-service --state OPEN --limit 5 atlassian-cli bitbucket --workspace myteam pr get api-service 123 atlassian-cli bitbucket --workspace myteam pr create api-service --title "Add feature" --source feature/new --destination main atlassian-cli bitbucket --workspace myteam pr update api-service 123 --title "Updated title" atlassian-cli bitbucket --workspace myteam pr approve api-service 123 atlassian-cli bitbucket --workspace myteam pr merge api-service 123 --strategy merge_commit atlassian-cli bitbucket --workspace myteam pr comments api-service 123 atlassian-cli bitbucket --workspace myteam pr comment api-service 123 --text "Looks good!" # Bitbucket - Workspaces & Projects atlassian-cli bitbucket workspace list --limit 10 atlassian-cli bitbucket workspace get myteam atlassian-cli bitbucket --workspace myteam project list atlassian-cli bitbucket --workspace myteam project create PROJ --name "My Project" --private atlassian-cli bitbucket --workspace myteam project delete PROJ --force # Bitbucket - Pipelines atlassian-cli bitbucket --workspace myteam pipeline list api-service atlassian-cli bitbucket --workspace myteam pipeline trigger api-service --ref-name main atlassian-cli bitbucket --workspace myteam pipeline stop api-service {uuid} # Bitbucket - Webhooks & SSH Keys atlassian-cli bitbucket --workspace myteam webhook list api-service atlassian-cli bitbucket --workspace myteam webhook create api-service --url https://example.com/hook --events repo:push atlassian-cli bitbucket --workspace myteam ssh-key list api-service atlassian-cli bitbucket --workspace myteam ssh-key add api-service --label deploy --key "ssh-rsa ..." # Bitbucket - Permissions & Commits atlassian-cli bitbucket --workspace myteam permission list api-service atlassian-cli bitbucket --workspace myteam permission grant api-service --user-uuid {uuid} --permission write atlassian-cli bitbucket --workspace myteam commit list api-service --branch main atlassian-cli bitbucket --workspace myteam commit diff api-service abc123 atlassian-cli bitbucket --workspace myteam commit browse api-service --commit main --path src/ # Bitbucket - Bulk Operations atlassian-cli bitbucket --workspace myteam bulk archive-repos --days 180 --dry-run atlassian-cli bitbucket --workspace myteam bulk delete-branches api-service --exclude feature/keep --dry-run # JSM atlassian-cli jsm servicedesk list --limit 10 atlassian-cli jsm request list --limit 10 atlassian-cli jsm request get SD-123
For convenience, the following command aliases are available:
| Full Command | Alias | Description |
|---|---|---|
bitbucket |
bb |
Bitbucket commands |
Example usage:
# Full command
atlassian-cli bitbucket pipeline list --workspace myworkspace
# Using alias (shorter and faster to type)
atlassian-cli bb pipeline list --workspace myworkspace
# Both commands work identically
atlassian-cli bitbucket repo list --workspace myteam
atlassian-cli bb repo list --workspace myteamBitbucket requires a separate scoped API token from Jira/Confluence.
| Product | Token Type | Creation Method |
|---|---|---|
| Jira/Confluence | Regular API token | "Create API token" |
| Bitbucket | Scoped API token | "Create API token with scopes" → select Bitbucket |
Atlassian deprecated Bitbucket app passwords in favor of scoped API tokens. These tokens must be created specifically for Bitbucket with explicit permission scopes.
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token with scopes" (not regular "Create API token")
- Select Bitbucket as the app
- Add required scopes:
read:repository:bitbucket- list/view reposwrite:repository:bitbucket- create/update reposread:pullrequest:bitbucket- view PRsadmin:repository:bitbucket- admin operations
- Copy the token
Note: Bitbucket admin:* scopes do NOT include read:* permissions - add both if needed.
The CLI checks these environment variables in order:
| Priority | Variable | Description |
|---|---|---|
| 1 | ATLASSIAN_CLI_BITBUCKET_TOKEN_{PROFILE} |
Profile-specific Bitbucket token |
| 2 | ATLASSIAN_BITBUCKET_TOKEN |
Generic Bitbucket token |
| 3 | BITBUCKET_TOKEN |
Simple fallback |
| 4 | ATLASSIAN_CLI_TOKEN_{PROFILE} |
Falls back to regular token |
# Option 1: Profile-specific (recommended for multiple profiles)
export ATLASSIAN_CLI_BITBUCKET_TOKEN_WORK=your-bitbucket-scoped-token
# Option 2: Generic Bitbucket token (simpler for single profile)
export ATLASSIAN_BITBUCKET_TOKEN=your-bitbucket-scoped-token
# Option 3: Simple fallback
export BITBUCKET_TOKEN=your-bitbucket-scoped-token
# The CLI will use this token for Bitbucket commands
atlassian-cli bitbucket repo list --workspace myteamIf no Bitbucket-specific token is found, commands fall back to the regular ATLASSIAN_CLI_TOKEN_{PROFILE} token.
make fmt/make clippy/make testkeep the workspace tidy using the standard Rust tooling stack (mirrored injust fmt,just clippy, etc.).make install(orjust install) compiles and installs the CLI locally fromcrates/cli.
The project includes comprehensive unit and integration tests.
# Run all tests
cargo test --workspace
# Run tests for specific crate
cargo test -p atlassian-cli-config
cargo test -p atlassian-cli-output
cargo test -p atlassian-cli-bulk
# Run integration tests
cargo test --test cli_integration
cargo test --test jira_integration
cargo test --test bitbucket_integration
cargo test --test confluence_integration
# Run tests with output
cargo test -- --nocapture- Config crate: 12 tests covering profile management, YAML parsing, and error handling
- Output crate: 22 tests for all output formats (table/JSON/CSV/YAML/quiet)
- Bulk crate: 10 tests for concurrency, dry-run, error handling, and progress tracking
- Auth crate: 3 tests for credential helpers
- CLI integration tests: 17 tests validating CLI commands and help output
- Jira integration tests: 9 tests with wiremock for issues, projects, audit, webhooks, and error handling
- Bitbucket integration tests: 15 tests for repos, branches, PRs, approvals, and branch protection
- Confluence integration tests: 11 tests for spaces, pages, search, and bulk operations
- Total: 99 passing tests
GitHub Actions workflow runs on every push/PR:
cargo fmt --check- Code formattingcargo clippy -- -D warnings- Lintingcargo test --workspace- Full test suite- Multi-platform builds (Linux, macOS, Windows)
Phase 1 - Foundation (100% complete)
- ✅ Cargo workspace with modular crate structure
- ✅ Config loader with profile support (~/.atlassian-cli/config.yaml)
- ✅ API token authentication (Basic auth with email+token)
- ✅ HTTP client with retry, rate limiting, and pagination
- ✅ Multi-format output (table/JSON/CSV/YAML/quiet)
- ✅ Bulk operation executor with concurrency control
- ✅ Comprehensive unit tests (44 tests)
- ✅ CI/CD with GitHub Actions
Phase 2 - Jira CLI (100% complete)
- ✅ Issue CRUD operations (create/read/update/delete/search/transition)
- ✅ Issue management (assign/unassign, watchers, links, comments)
- ✅ Project lifecycle (list/get/create/update/delete)
- ✅ Components and versions management
- ✅ Custom fields (list/get/create/delete)
- ✅ Workflows (list/get/export)
- ✅ Bulk operations (transition/assign/label/export/import)
- ✅ Automation rules (list/get/create/update/enable/disable)
- ✅ Webhooks (full CRUD + test)
- ✅ Audit log access (list/export)
- ✅ Role management (list/get/actors/add-actor/remove-actor)
- ✅ Integration tests with API mocking (9 tests)
Phase 4 - Bitbucket CLI (100% complete)
- ✅ Repository CRUD operations (list/get/create/update/delete)
- ✅ Branch management (list/get/create/delete/protect/unprotect)
- ✅ Pull request workflow (list/get/create/update/merge/decline)
- ✅ PR approvals, comments, and reviewers
- ✅ Branch protection and restrictions
- ✅ Workspace operations (list/get)
- ✅ Project management (list/get/create/update/delete)
- ✅ Pipeline operations (list/get/trigger/stop/logs)
- ✅ Webhooks (list/create/delete)
- ✅ SSH deploy keys (list/add/delete)
- ✅ Repository permissions (list/grant/revoke)
- ✅ Commit operations (list/get/diff/browse)
- ✅ Bulk operations (archive stale repos, delete merged branches)
- ✅ User info (whoami)
- ✅ Integration tests with API mocking (15 tests)
Phase 3 - Confluence CLI (100% complete)
- ✅ Space operations (list/get/create/update/delete/permissions)
- ✅ Page management (CRUD, versions, labels, comments, restrictions)
- ✅ Blog posts (list/get/create/update/delete)
- ✅ Attachments (list/get/upload/download/delete)
- ✅ Search (CQL, text, in-space)
- ✅ Bulk operations (delete, add-labels, export)
- ✅ Analytics (page-views, space-stats)
- ✅ Integration tests with API mocking (11 tests)
Additional Products (Partial)
- ✅ JSM CLI: Service desk and request operations
- ⏳ Opsgenie CLI: Placeholder
- ⏳ Bamboo CLI: Placeholder
- Complete Phase 5: JSM CLI (organizations, SLA, Insight assets)
- Complete Phase 6: Opsgenie CLI
- Complete Phase 7: Bamboo CLI
- Add recipe documentation for common workflows
- Package releases (binaries, Docker, Homebrew)