Fast CLI tools for Atlassian Cloud (Confluence + Jira) — optimized for AI agents
Project description
atlassian-cli
Fast CLI tools for Atlassian Cloud — built for AI agents, loved by humans.
Two CLI tools — confluence and jira — that talk directly to Atlassian Cloud REST APIs. Zero bloat, one dependency (requests), deterministic output that AI agents parse in a single shot.
Install
pip install atlassian-cli
Or from source:
pip install git+https://github.com/catapultcx/atlassian-cli.git
Setup
Create a .env file (or export environment variables):
ATLASSIAN_URL=https://your-site.atlassian.net
ATLASSIAN_EMAIL=you@example.com
ATLASSIAN_TOKEN=your-api-token
Get your API token at https://id.atlassian.com/manage-profile/security/api-tokens
Legacy
CONFLUENCE_URL/CONFLUENCE_EMAIL/CONFLUENCE_TOKENenv vars are also supported.
Confluence CLI
Manages Confluence pages as local JSON files in ADF (Atlassian Document Format). No markdown — ADF preserves every macro, panel, and table perfectly.
# Download a page
confluence get 9268920323
# Upload local edits back
confluence put 9268920323
confluence put 9268920323 --force # skip version check
# Compare local vs remote
confluence diff 9268920323
# Bulk-download an entire space (parallel, version-cached)
confluence sync POL
confluence sync COMPLY --workers 20 --force
# Search local page index (instant, no API call)
confluence search "risk assessment"
# Rebuild the page index
confluence index
confluence index --space POL --space COMPLY
How sync works
sync downloads every page in a space using parallel workers. It caches version numbers locally — subsequent syncs only fetch pages that changed. A full space of 500+ pages takes seconds.
pages/
POL/
9268920323.json # ADF body
9268920323.meta.json # title, version, timestamps
COMPLY/
5227515611.json
5227515611.meta.json
page-index.json # searchable index
Comments
Read, reply to, and resolve inline and footer comments on pages.
# List all comments on a page
confluence comments 9268920323
# List only open/unresolved comments
confluence comments 9268920323 --open
# Reply to an inline comment
confluence comment 10226663432 "Fixed — updated the wording"
# Reply to a footer comment
confluence comment 10226663432 "Noted, will action" --footer
# Resolve an inline comment
confluence resolve 10226663432
# Reopen a resolved comment
confluence resolve 10226663432 --reopen
Jira CLI
Issues
Full CRUD on Jira issues via REST API v3.
# Get issue details
jira issue get ISMS-42
# Create issues
jira issue create PROJ Task "Fix the login bug"
jira issue create PROJ Story "User auth" --description "As a user..." --labels security urgent
jira issue create PROJ Sub-task "Write tests" --parent PROJ-100
# Update fields
jira issue update ISMS-42 --summary "New title"
jira issue update ISMS-42 --labels risk compliance
jira issue update ISMS-42 --fields '{"priority": {"name": "High"}}'
# Delete
jira issue delete ISMS-42
# Search with JQL
jira issue search "project = ISMS AND status = Open"
jira issue search "assignee = currentUser() ORDER BY updated DESC" --max 20
# Transitions
jira issue transition ISMS-42 "In Progress"
jira issue transition ISMS-42 Done
# Comments
jira issue comment ISMS-42 "Fixed in v2.1"
jira issue comments ISMS-42
Assets (JSM)
CRUD for Jira Service Management Assets via the Assets REST API v1.
# Browse schemas and types
jira assets schemas
jira assets schema 1
jira assets types 1
jira assets type 5
jira assets attrs 5
# Search with AQL
jira assets search "objectType = Server"
# CRUD objects
jira assets get 123
jira assets create 5 Name=srv01 IP=10.0.0.1
jira assets update 123 Name=srv02
jira assets delete 123
# Create new object types
jira assets type-create 1 "Network Device" --description "Switches and routers"
--json flag
Both CLIs accept a global --json flag that switches all output to machine-readable JSON. Perfect for piping into jq or parsing from code.
# Text mode (default)
$ confluence get 9268920323
OK Artificial Intelligence Policy (v12) -> pages/POL/9268920323.json
# JSON mode
$ confluence --json get 9268920323
{"status":"ok","message":"Artificial Intelligence Policy (v12) -> pages/POL/9268920323.json"}
Output format
All commands emit status-prefixed lines for easy parsing:
| Prefix | Meaning |
|---|---|
OK |
Success |
GET |
Page downloaded |
SKIP |
Already up-to-date |
ERR |
Error |
DONE |
Batch complete |
Architecture
src/atlassian_cli/
config.py Shared auth, .env parsing, session factory
http.py API helpers: get/post/put/delete + error handling
output.py Text & JSON output formatting
confluence.py Confluence CLI (v2 API, ADF)
jira.py Jira CLI entry point (subparsers)
jira_issues.py Jira issue commands (v3 API)
jira_assets.py Jira Assets commands (Assets v1 API)
APIs used:
- Confluence Cloud REST API v2 (
/wiki/api/v2/) - Jira Cloud REST API v3 (
/rest/api/3/) - Jira Assets REST API v1 (
api.atlassian.com/jsm/assets/workspace/{id}/v1)
Development
git clone https://github.com/catapultcx/atlassian-cli.git
cd atlassian-cli
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
ruff check src/ tests/
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atlassian_cli-0.5.9.tar.gz.
File metadata
- Download URL: atlassian_cli-0.5.9.tar.gz
- Upload date:
- Size: 35.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35e5962d19a28f0de15b3c19be9c63c5e738e2fe27c0b05ed4fb849a0d9224ed
|
|
| MD5 |
34698fb1169c3b385c3621e9294e87df
|
|
| BLAKE2b-256 |
ac87280e1e997a10a4e71db600e87f8f1d53a8636dd5902b5c51d416e4c63abe
|
Provenance
The following attestation bundles were made for atlassian_cli-0.5.9.tar.gz:
Publisher:
publish.yml on catapultcx/atlassian-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlassian_cli-0.5.9.tar.gz -
Subject digest:
35e5962d19a28f0de15b3c19be9c63c5e738e2fe27c0b05ed4fb849a0d9224ed - Sigstore transparency entry: 1040774785
- Sigstore integration time:
-
Permalink:
catapultcx/atlassian-cli@66680b9cfe5b4fee656b5ce41c90dbc37276ff4b -
Branch / Tag:
refs/tags/v0.5.9 - Owner: https://github.com/catapultcx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@66680b9cfe5b4fee656b5ce41c90dbc37276ff4b -
Trigger Event:
push
-
Statement type:
File details
Details for the file atlassian_cli-0.5.9-py3-none-any.whl.
File metadata
- Download URL: atlassian_cli-0.5.9-py3-none-any.whl
- Upload date:
- Size: 26.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efef98de11645ce856c388cc6c9afe0e3d3343800a4a7b8e4fcf48a401bea5db
|
|
| MD5 |
678bdada5d49adeefcda60326a7a2b57
|
|
| BLAKE2b-256 |
c7fa7a280a555a47b3f39a182607bea276d60899615594993582e447b26541bf
|
Provenance
The following attestation bundles were made for atlassian_cli-0.5.9-py3-none-any.whl:
Publisher:
publish.yml on catapultcx/atlassian-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlassian_cli-0.5.9-py3-none-any.whl -
Subject digest:
efef98de11645ce856c388cc6c9afe0e3d3343800a4a7b8e4fcf48a401bea5db - Sigstore transparency entry: 1040774862
- Sigstore integration time:
-
Permalink:
catapultcx/atlassian-cli@66680b9cfe5b4fee656b5ce41c90dbc37276ff4b -
Branch / Tag:
refs/tags/v0.5.9 - Owner: https://github.com/catapultcx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@66680b9cfe5b4fee656b5ce41c90dbc37276ff4b -
Trigger Event:
push
-
Statement type: