CLI Commands
Quick reference for all atlcli commands.
Global Options
Section titled “Global Options”| Flag | Description |
|---|---|
--profile <name> |
Auth profile to use |
--json |
Output as JSON: exactly one document on stdout. Errors too: {"error": {"code", "message", "details"}}, exit code 1. Help and progress text go to stderr |
--no-log |
Disable logging for this command |
--help |
Show help |
--version |
Show version |
A command group without a subcommand (atlcli wiki page) prints its help and exits 0. An unknown subcommand (atlcli wiki page lsit) is a usage error with exit code 1.
Pass each flag and its value as separate arguments. A single argument such as "--profile work" (for example an unsplit shell variable in zsh) is a usage error, Invalid flag "--profile work", instead of being ignored. --flag=value remains a single argument and may contain spaces in its value.
Authentication
Section titled “Authentication”# Interactive setupatlcli auth init # Initialize default profileatlcli auth init --profile work # Initialize named profile
# Non-interactive login (Cloud)atlcli auth login --site <url> --email <email> --token <token>atlcli auth login --profile work --site <url>
# Non-interactive login (Server/Data Center with PAT)atlcli auth login --bearer --site <url> --token <token>atlcli auth login --bearer --site <url> --username <user> # Uses keychain
# Server/Data Center with self-signed or internal CA certificateatlcli auth login --bearer --site <url> --token <token> --ca-file /path/to/ca.pematlcli auth login --bearer --site <url> --token <token> --insecure # Skip verify (testing only)
# Profile managementatlcli auth status # Show current profile statusatlcli auth list # List all profilesatlcli auth switch <name> # Switch active profileatlcli auth rename <old> <new> # Rename profile
# Cleanupatlcli auth logout # Clear active profile credentialsatlcli auth logout <name> # Clear specific profile credentialsatlcli auth delete <name> # Delete profile entirelyatlcli auth delete <name> --delete-keychain # Also delete keychain creds (macOS)Configuration
Section titled “Configuration”# View configurationatlcli config list # Show all config (redacted)atlcli config get global.project # Get a specific value
# Set defaults (avoids repetitive flags)atlcli config set global.project PROJ # Default Jira projectatlcli config set global.space DOCS # Default Confluence spaceatlcli config set global.board 123 # Default Jira board ID
# Logging settingsatlcli config set logging.level debug # Set log levelatlcli config set logging.global true # Enable global logs
# Remove settingsatlcli config unset global.project # Remove a valueAvailable keys:
| Key | Type | Description |
|---|---|---|
global.project |
string | Default Jira project key |
global.space |
string | Default Confluence space key |
global.board |
number | Default Jira board ID |
logging.level |
string | off, error, warn, info, debug |
logging.global |
boolean | Enable global logs |
logging.project |
boolean | Enable project logs |
Diagnostics
Section titled “Diagnostics”atlcli doctor # Run all health checksatlcli doctor --fix # Auto-fix safe issues (create dirs, etc.)atlcli doctor --json # JSON output for scriptingChecks performed:
- Config file exists and is valid JSON
- At least one profile configured
- Active profile has credentials
- Confluence API reachable and authenticated
- Jira API reachable and authenticated
- Log directory writable
Exit codes: 0 = all passed, 1 = failures detected
Optional Models
Section titled “Optional Models”Nothing is downloaded unless you ask for it. See Import PDF: optional table-structure model.
atlcli models pull table-transformer # weights (116 MB) + runtime (~90 MB on disk)atlcli models pull table-transformer --variant quantized # 30 MB weightsatlcli models list # installed models and runtimeConfluence
Section titled “Confluence”atlcli wiki docs init <dir> --space <key> # Initialize sync directoryatlcli wiki docs pull <dir> # Pull from Confluenceatlcli wiki docs pull --dir <dir> # Same, when running from elsewhereatlcli wiki docs pull <dir> --page-id <id> # Pull specific pageatlcli wiki docs pull <dir> --version <n> # Pull specific versionatlcli wiki docs pull <dir> --label <name> # Pull pages with labelatlcli wiki docs pull <dir> --force # Overwrite local edits (markdown + attachments)atlcli wiki docs push <dir> # Push to Confluenceatlcli wiki docs push <dir> --dry-run # Preview changesatlcli wiki docs push <dir> --force # Force overwriteatlcli wiki docs push <dir> --legacy-editor # Use legacy editor (v1)atlcli wiki docs sync <dir> --page-id <id> # Start the bidirectional sync daemonatlcli wiki docs sync <dir> --dry-run # Report the plan; changes nothing on diskatlcli wiki docs sync <dir> --on-conflict remote # Conflicts: merge (default) | local | remoteatlcli wiki docs sync --help # Full sync option listatlcli wiki docs status <dir> # Show sync statusatlcli wiki docs add <dir> --template <name> # Add page from templateatlcli wiki docs diff <dir> # Show local vs remote diff (title only for folders)atlcli wiki docs resolve <dir> # Resolve sync conflictsatlcli wiki docs check <dir> # Validate docs (includes folder checks)atlcli wiki docs check --dir <dir> # Same, when running from elsewhere (exits 1 if nothing to validate)atlcli wiki docs preview <dir> # Preview markdown renderingatlcli wiki docs convert <file> --to-new-editor # Convert to v2 editoratlcli wiki docs convert <file> --to-legacy-editor # Convert to v1 editoratlcli wiki docs convert <dir> --to-new-editor --dry-run # Preview bulk conversionatlcli wiki docs convert <dir> --to-new-editor --confirm # Bulk convert directory# Basic auditatlcli audit wiki --all # Run all checksatlcli audit wiki --all --stale-high 12 # With 12-month stale threshold
# Check typesatlcli audit wiki --stale-high 12 --stale-medium 6 --stale-low 3 # Stale contentatlcli audit wiki --orphans # Orphaned pages (no incoming links)atlcli audit wiki --broken-links # Broken internal linksatlcli audit wiki --single-contributor # Bus factor riskatlcli audit wiki --inactive-contributors # Pages with inactive authorsatlcli audit wiki --external-links # List external URLsatlcli audit wiki --check-external # Verify external URLs via HTTPatlcli audit wiki --missing-label <label> # Pages missing required labelatlcli audit wiki --restricted # Pages with restrictionsatlcli audit wiki --drafts # Unpublished draftsatlcli audit wiki --archived # Archived pagesatlcli audit wiki --high-churn <n> # Pages with N+ versionsatlcli audit wiki --folders # Check folder structure
# Scope filteringatlcli audit wiki --label <label> # Only audit pages with labelatlcli audit wiki --under-page <id> # Only pages under ancestoratlcli audit wiki --exclude-label <label> # Exclude pages with labelatlcli audit wiki --dir <path> # Audit specific directory
# Output formatsatlcli audit wiki --all --json # JSON outputatlcli audit wiki --all --markdown # Markdown reportatlcli audit wiki --output audit.csv # Report file; format from the extension (.md, .json, .jsonl, .csv)atlcli audit wiki --format jsonl > findings.jsonl # md, json, jsonl or csv on stdoutatlcli audit wiki --template team.md.j2 --output report.md # Own Jinja template, to a fileatlcli audit wiki --report audit.md # Same as --format md --output audit.md
# Fix modeatlcli audit wiki --all --fix --dry-run # Preview fixesatlcli audit wiki --all --fix # Apply fixesatlcli audit wiki --all --fix --fix-label <label> # Custom stale label
# Advancedatlcli audit wiki --include-remote # Include unsynced remote pagesatlcli audit wiki --refresh-users # Refresh user status from APIatlcli audit wiki --rebuild-graph # Rebuild link graph from markdownatlcli audit wiki --export-graph # Export link graph as JSONatlcli wiki page list --space <key> # List pages in spaceatlcli wiki page list --cql <query> # Filter with CQLatlcli wiki page list --label <name> # Filter by labelatlcli wiki page get --id <id> # Get page contentatlcli wiki page get --id <id> --version <n> # Get specific versionatlcli wiki page create --space <key> --title <title> --body <file>atlcli wiki page create --space <key> --title <title> --body <file> --parent <id>atlcli wiki page update --id <id> --body <file>atlcli wiki page update --id <id> --body <file> --title <title>atlcli wiki page delete --id <id> --confirmatlcli wiki page delete --cql <query> --dry-run # Bulk delete previewatlcli wiki page delete --cql <query> --confirm # Bulk deleteatlcli wiki page move --id <id> --parent <id>atlcli wiki page move <file> --before <target> # Position before siblingatlcli wiki page move <file> --after <target> # Position after siblingatlcli wiki page move <file> --first # First child positionatlcli wiki page move <file> --last # Last child positionatlcli wiki page move --id <id> --position <n> # Specific positionatlcli wiki page copy --id <id> --title <title>atlcli wiki page copy --id <id> --title <title> --space <key>atlcli wiki page copy --id <id> --title "Retro {{sprint}}" --var sprint=42 # Title and body are templatesatlcli wiki page copy --id <id> --tree [--title <tpl>] [--vars-file <file>] [--plan-out <file>] [--apply [--yes]] # Page tree as a planatlcli wiki page children --id <id> # List child pagesatlcli wiki page children --id <id> --limit <n> --jsonatlcli wiki page sort <file> --alphabeticalatlcli wiki page sort <file> --natural # Natural sort (Chapter 2 < Chapter 10)atlcli wiki page sort <file> --by createdatlcli wiki page sort --id <id> --by modified --reverseatlcli wiki page archive --id <id> --confirmatlcli wiki page archive --cql <query> --dry-runatlcli wiki page open <id> # Open page in browseratlcli wiki page convert --id <id> --to-new-editor # Convert to v2 editoratlcli wiki page convert --id <id> --to-legacy-editor # Convert to v1 editor
# Cross-product linking (Confluence ↔ Jira)atlcli wiki page link-issue --id <id> --issue <key> # Link Jira issue to pageatlcli wiki page link-issue --id <id> --issue <key> --comment # With commentatlcli wiki page issues --id <id> # List linked Jira issuesatlcli wiki page issues --id <id> --project <key> # Filter by projectatlcli wiki page unlink-issue --id <id> --issue <key> # Remove linkPage History
Section titled “Page History”atlcli wiki page history --id <id> # List versionsatlcli wiki page history --id <id> --limit <n>atlcli wiki page diff --id <id> --version <n> # Unified diff with currentatlcli wiki page diff --id <id> --from <n> --to <n> --context <n>atlcli wiki page diff --id <id> --from <n> --to <n> --format text --word-diffatlcli wiki page diff --id <id> --from <n> --to <n> --format semanticatlcli wiki page diff --id <id> --from <n> --to <n> --format semantic --jsonatlcli wiki page diff --id <id> --from <n> --to <n> --format review --word-diffatlcli wiki page diff --id <id> --from <n> --to <n> --format review --jsonatlcli wiki page restore --id <id> --version <n> --confirmatlcli wiki page restore --id <id> --version <n> --message <text> --confirmPage diff defaults to the existing line-oriented unified format. text is
an explicit alias; --word-diff replaces paired changed lines with an inline
[-removed-] / {+added+} review presentation. JSON keeps the applicable
unified patch and adds ANSI-free wordDiff only when requested. The opt-in
semantic format emits a plain-language, grouped terminal review or one
atlcli.change-set/1 JSON envelope. The terminal view does not expose AST
paths, raw canonical JSON, collection IDs, or attachment UUIDs; use --json
when a tool needs exact paths and operation metadata. review combines that
semantic view with Markdown text hunks acquired from the same exact-version
pair; its JSON contains both changeSet and textDiff. --context applies to
text/unified/review;
--no-color and NO_COLOR disable ANSI output. Cloud prefers exact-version ADF
for both sides and can fall back to exact Storage for both sides. Data Center
uses Storage only; that path is contract-tested but not project-live-certified.
Large semantic bodies use a private, one-version-at-a-time spill store; it is
cleaned before output and a spill/cleanup failure is fatal rather than a
high-memory fallback.
Comments
Section titled “Comments”# Footer commentsatlcli wiki page comments list --id <id>atlcli wiki page comments add --id <id> "Comment text"atlcli wiki page comments reply --id <id> --parent <comment-id> "Reply text"atlcli wiki page comments update --id <id> --comment <comment-id> "Updated text"atlcli wiki page comments delete --id <id> --comment <comment-id> --confirmatlcli wiki page comments resolve --comment <comment-id> # inline comments onlyatlcli wiki page comments reopen --comment <comment-id> # inline comments only
# Inline commentsatlcli wiki page comments list --id <id> --inlineatlcli wiki page comments add-inline --id <id> --selection <text> "Comment"Labels
Section titled “Labels”atlcli wiki page label list --id <id> # List labels on pageatlcli wiki page label add <label> [<label>...] --id <id> # Add labelsatlcli wiki page label add <label> --cql <query> --dry-run # Bulk add previewatlcli wiki page label add <label> --cql <query> --confirm # Bulk addatlcli wiki page label remove <label> --id <id>atlcli wiki page label remove <label> --cql <query> --confirm # Bulk removeSearch
Section titled “Search”atlcli wiki search <query> # Full-text searchatlcli wiki search <query> --space <key> # Search in spaceatlcli wiki search --cql <query> # CQL searchatlcli wiki search --label <label> # Search by labelatlcli wiki search --creator <email> # Search by creatoratlcli wiki search --type page # Filter by typeatlcli wiki search --ancestor <id> # Search in page treeatlcli wiki search --modified-since <duration>atlcli wiki search --created-since <duration>atlcli wiki search --title <text> # Search titles onlyatlcli wiki search --limit <n> --start <n> # Paginationatlcli wiki search --format compact # Compact outputatlcli wiki search --verbose # Detailed outputMy Pages
Section titled “My Pages”atlcli wiki my # Pages I created (default)atlcli wiki my --contributed # Pages I contributed toatlcli wiki my --space <key> # Filter by spaceatlcli wiki my --label <name> # Filter by labelatlcli wiki my --limit <n> # Limit results (default 25)Recent Pages
Section titled “Recent Pages”atlcli wiki recent # Last 7 days (default)atlcli wiki recent --days 30 # Last 30 daysatlcli wiki recent --space <key> # Filter by spaceatlcli wiki recent --label <name> # Filter by labelatlcli wiki recent --limit <n> # Limit results (default 25)Spaces
Section titled “Spaces”atlcli wiki space list # List all spacesatlcli wiki space list --limit <n>atlcli wiki space get --key <key> # Get space detailsatlcli wiki space create --key <key> --name <name>atlcli wiki space create --key <key> --name <name> --description <text>Templates
Section titled “Templates”atlcli wiki docs template list # List saved templatesatlcli wiki docs template get <name> # Show templateatlcli wiki docs template save --page <id> --name <name>atlcli wiki docs template apply <name> --space <key> --title <title>atlcli wiki docs template delete <name>atlcli wiki docs template export <name> -o <file>atlcli wiki docs template import --file <path>DOCX and PDF Export
Section titled “DOCX and PDF Export”# Foreground export through the durable job runtimeatlcli wiki export <page-id> --output ./page.docxatlcli wiki export <page-id> --code-theme dracula --output ./page.docxatlcli wiki export <page-id> --format pdf --output ./page.pdfatlcli wiki export <page-id> --format pdf --code-theme nord --output ./page.pdfatlcli wiki export <page-id> --format pdf --pdf-standard ua-1 --output ./page-ua.pdfatlcli wiki export <page-id> --format pdf \ --template ./brand.wiki-pdf-template --output ./brand-page.pdfatlcli wiki export <page-id> --scope tree --output ./handbook.docxatlcli wiki export --scope space --space DOCS --format pdf --out-dir ./dist
# Inspect and manage activity across DOCX and PDFatlcli wiki export jobs listatlcli wiki export jobs list --status running,waiting --format pdf --since 12hatlcli wiki export jobs show <job-id>atlcli wiki export jobs watch <job-id>atlcli wiki export jobs watch <job-id> --jsonlatlcli wiki export jobs cancel <job-id>atlcli wiki export jobs resume <queued-id>atlcli wiki export jobs retry <failed-id> --output ./retry.docxatlcli wiki export jobs rerun <succeeded-id> --output ./copy.pdfatlcli wiki export jobs clear --before 30d --confirmresume reclaims the same queued row and its durable checkpoints after a
foreground runner was lost. retry accepts failed, interrupted, or cancelled
jobs; rerun accepts successful jobs. Those two create a linked new job and
leave the source row unchanged. list, show, cancel, retry, rerun, and clear accept
--json; watch accepts --jsonl. Ordinary exports stay foreground and print
progress while another process can monitor or cancel them. There is no
--detach mode. See DOCX and PDF Export for export flags
and Export Jobs & Operations for recovery and
retention.
Virtual Filesystem
Section titled “Virtual Filesystem”Confluence as a filesystem — an embedded shell, or a mounted OS volume. See Virtual Filesystem for the full guide.
# One command with a real exit code — the form to give an agentatlcli wiki sh --space DOCSY -c 'grep -rlw kubernetes . | head'
# Interactive, or a script on stdinatlcli wiki sh --space DOCSYcat script.sh | atlcli wiki sh --space DOCSY
# Writing is off by defaultatlcli wiki sh --space DOCSY --mode rw -c 'sed -i "s/old/new/" page-623869955/_index.md'
# Mount as a real volumeatlcli wiki mount ~/confluence --space DOCSYatlcli wiki mount listatlcli wiki unmount ~/confluence
# Maintenanceatlcli wiki vfs cache statsatlcli wiki vfs cache clearatlcli wiki vfs conflicts listatlcli wiki vfs conflicts show <pageId>atlcli wiki vfs conflicts discard <pageId>| Flag | Commands | Meaning |
|---|---|---|
--space <KEY[,KEY]> |
sh, mount |
Spaces to expose; defaults to the profile’s space |
-c <script> |
sh |
Run one script and exit with its exit code |
--mode ro|rw |
sh, mount |
Write posture. Default ro |
--allow-delete |
sh, mount |
Additionally allow deletion, which is always the trash |
--cache-dir <path> |
all | Cache root; defaults to ~/.atlcli/vfs |
--offline |
sh |
Read the cache only; issue no requests |
--cwd <path> |
sh |
Starting directory |
--timeout <ms> |
sh |
Wall-clock limit for the script. Default 120000 |
--prefetch-max <n> |
sh |
Ceiling on one prefetch. Default 300 |
--cache-max-mb <n> |
sh |
Disk cache ceiling. Default 100 |
--no-cql |
sh |
Never take the CQL shortcut in grep |
--port <n> |
mount |
Bind to a fixed port instead of a free one |
--json |
all | JSON output; for sh, stdout, stderr, exit code and counters |
wiki sh exits with the bash exit code, so atlcli wiki sh -c 'grep -q x .'
composes from the outside exactly as it does inside.
grep takes a CQL shortcut only when the pattern is marked as a whole word
(grep -rw), because the search index matches words while grep matches
substrings. The path taken is always printed on stderr.
Static Web Publishing
Section titled “Static Web Publishing”# Inspect Confluence and route changes without activating a bundleatlcli wiki publish plan --project .atlcli/publish.json --profile work
# Acquire, validate, and atomically activate an immutable bundleatlcli wiki publish refresh --project .atlcli/publish.json --profile work
# Build the active bundle with the project-owned Astro siteatlcli wiki publish build --project .atlcli/publish.json
# Verify the latest build, or select one by digestatlcli wiki publish verify --project .atlcli/publish.jsonatlcli wiki publish verify --project .atlcli/publish.json --build <digest>
# Run refresh, build, and verify in sequenceatlcli wiki publish run --project .atlcli/publish.json --profile work
# Inspect and safely prune local retained stateatlcli wiki publish status --project .atlcli/publish.jsonatlcli wiki publish prune --project .atlcli/publish.json --confirm| Flag | Operations | Meaning |
|---|---|---|
--project <path> |
all | Project JSON; defaults to .atlcli/publish.json |
--workspace <path> |
all | Private bundle/build workspace; defaults to .atlcli/publish/<publicationKey> |
--profile <name> |
plan, refresh, run |
Atlassian authentication profile used only during acquisition |
--confirm-public |
source-reading operations | Required when visibility is public |
--allow-partial |
source-reading operations | Required when completeness is allow-partial |
--dry-run |
refresh, run |
Produce and persist the plan without bundle activation or build |
--build <digest> |
verify |
Verify a specific retained build instead of the newest |
--confirm |
prune |
Required before verified unreachable state can be removed |
--json |
all | Emit the versioned machine-readable stage result |
plan reads source data but writes only last-plan.json in the private
workspace. refresh is the only bundle-activation stage. build receives the
active bundle and inventory paths through a bounded, non-secret child
environment; it does not receive Atlassian credentials. verify reports a
verified local artifact, never a remote deployment.
Public and partial acknowledgements are independent and fail closed when
missing. An incomplete plan, stale bundle/build digest, failed Astro command,
unowned output, broken link/anchor, unsafe resource, privacy marker, or manifest
drift produces a non-zero command failure. Use --json in CI and retain the
reported bundle/build digests with the deployed artifact.
See Publish Confluence as a static Astro site, the complete configuration reference, and operations and rollback.
PDF Template Authoring
Section titled “PDF Template Authoring”# Guided Word-design importatlcli pdf-template import ./brand.docxatlcli pdf-template status ./brand-pdf-templateatlcli pdf-template review ./brand-pdf-templateatlcli pdf-template preview ./brand-pdf-templateatlcli pdf-template build ./brand-pdf-template \ --output ./brand.wiki-pdf-templateatlcli pdf-template undo ./brand-pdf-template
# Expert / automation surfacesatlcli pdf-template analyze ./brand.docx --json --no-logatlcli pdf-template reanalyze ./brand-v2.docx --dir ./brand-pdf-templateatlcli pdf-template diff ./brand-pdf-template --detailsatlcli pdf-template decide --dir ./brand-pdf-template <explicit-action>atlcli pdf-template set --dir ./brand-pdf-template \ --target <capability-path> --value '<json>'atlcli pdf-template validate ./brand-pdf-templateatlcli pdf-template pack ./brand-pdf-template \ --output ./brand.wiki-pdf-template
# Declarative Recipe V2atlcli pdf-template explain ./recipe.yaml --jsonatlcli pdf-template validate ./recipe.yamlatlcli pdf-template build ./recipe.yaml \ --output ./recipe.wiki-pdf-templateThe default import uses Editorial Indigo as a complete baseline and applies no
suggestion silently. Graphics require explicit role, rights, accessibility,
and placement decisions. JSON mode is non-interactive and emits one
atlcli.pdf-template-result/1 document on stdout; progress is JSONL on stderr.
See PDF Template Authoring CLI for
all stages, options, schemas, and recovery behavior.
Recipe V2 pins an installed baseline by exact id, version, Catalog version, and
digest; explain performs no asset I/O. PDF output standards remain a separate
wiki export --pdf-standard <standard> policy.
Issue lists print a table (see Search); the other Jira commands print JSON, pretty-printed even without --json.
Projects
Section titled “Projects”atlcli jira project list [--query <text>] [--limit <n>] # Default limit 50atlcli jira project get <key> # Or --key <key>atlcli jira project create --key <KEY> --name <name> \ [--type software|service_desk|business] [--template <key>] \ [--description <text>] [--lead <user>]atlcli jira project types <key> # Issue types; or --key <key>atlcli jira project copy-issues --to <KEY> (--from <KEY> [--jql <filter>] | --jql <selection>) \ [--no-attachments] [--no-links] [--no-subtasks] [--fields <ids>] [--replace <find:replace>]... \ [--link-source] [--comments] [--keep-mentions] [--keep-assignee] [--keep-status] [--status-map <from:to>]... \ [--var <name=value>]... [--vars-file <file>] [--now <iso>] [--strict] \ [--plan-out <file>] [--apply [--yes]] [--print-script] # See /jira/copy-issues/Issues
Section titled “Issues”atlcli jira issue get --key <key> # Get issue detailsatlcli jira issue get --key <key> --expand allatlcli jira issue get --key <key> --format markdown # Description as markdownatlcli jira issue create --project <key> --type <type> --summary <text>atlcli jira issue create --project <key> --type <type> --summary <text> \ --description <markdown> --assignee <user> --labels <labels>atlcli jira issue create --project <key> --type <type> --summary <text> --edit # Description in $EDITORatlcli jira issue create --project <key> --type <type> --summary <text> \ --description-file <path|-> # Markdown description from file or stdinatlcli jira issue update --key <key> --description-file <path|->atlcli jira issue create --project <key> --type <type> --summary <text> \ --field customfield_10028=5 --field customfield_10077='{"value":"Feature"}'atlcli jira issue update --key <key> --summary <text>atlcli jira issue update --key <key> --field customfield_10028=8atlcli jira issue update --key <key> --priority <name>atlcli jira issue update --key <key> --add-labels <labels>atlcli jira issue update --key <key> --remove-labels <labels>atlcli jira issue update --key <key> --assignee <user> # me, email, name, account id, noneatlcli jira issue update --key <key> --edit # Edit the description in $EDITORatlcli jira issue delete --key <key> --confirmatlcli jira issue clone <key> [--replace <find:replace>]... [--project <key>] [--summary <text>] [--attachments] [--var <name=value>]... [--vars-file <file>] [--strict]atlcli jira issue transition --key <key> --to <status>atlcli jira issue transitions --key <key> # List available transitionsatlcli jira issue assign --key <key> --assignee <user>atlcli jira issue assign --key <key> --assignee default # Project default assigneeatlcli jira issue assign --key <key> --assignee none # Unassignatlcli jira issue link --from <key> --to <key> --type <type>atlcli jira issue link --key <key> --url <url> [--title <text>] # Web linkatlcli jira issue unlink --key <key> --remote <id> # Remove a web linkatlcli jira issue unlink --link <id> # Remove an issue linkatlcli jira issue unlink --from <key> --to <key> [--type <type>] --confirmatlcli jira issue history --key <key> [--field <name>] [--limit <n>] # Change historyatlcli jira issue attach <key> <file> [file...] [--comment <text>] # Attach filesatlcli jira issue attachments <key> # List attachmentsatlcli jira issue attachment download <id> [-o <path>] [--overwrite]atlcli jira issue attachment download <key> <filename> [-o <path>] [--overwrite]atlcli jira issue attachment delete <id> --confirmatlcli jira issue attachment delete <key> <filename> --confirmatlcli jira issue attachment copy <id> --to <key> # Copy to another issueatlcli jira issue attachment copy <key> <filename> --to <key>atlcli jira issue open <key> # Open issue in browseratlcli jira open [<key>|<project>] # Open an issue, a project or the site
# Cross-product linking (Jira ↔ Confluence)atlcli jira issue link-page --key <key> --page <id> # Link to Confluence pageatlcli jira issue link-page --key <key> --page <id> --comment # With commentatlcli jira issue pages --key <key> # List linked Confluence pagesatlcli jira issue unlink-page --key <key> --link <id> # Remove link by link idatlcli jira issue unlink-page --key <key> --page <id> # Remove link by page id
atlcli jira watch <key> # Watch issueatlcli jira unwatch <key> # Stop watchingatlcli jira watchers <key> # List watchersSearch
Section titled “Search”atlcli jira search --jql <query> # JQL search; filter flags are ANDed onto itatlcli jira search --assignee me # My issuesatlcli jira search --assignee <user> # Email, name or account id; x = unassignedatlcli jira search --status "In Progress"atlcli jira search --project <key>atlcli jira search --type Bugatlcli jira search --type Bug,Task # Multiple typesatlcli jira search --label <label> # Filter by labelatlcli jira search --sprint <id> # Filter by sprintatlcli jira search --watching # Issues I watchatlcli jira search --history # Issues I viewed recentlyatlcli jira search --created -7d # Also --updated; today, week, month, year, YYYY-MM-DDatlcli jira search --created-before 2026-01-01 # Also --updated-beforeatlcli jira search --status '~Done' # ~ negates --status, --type, --label, --assigneeatlcli jira search --limit <n> # Pages through results above 100atlcli jira search --all-results # All matches, up to 5000Issue lists (search, my, filter run, board issues, board backlog, sprint issues, epic issues) print a table; --json prints JSON:
atlcli jira search ... --columns key,status,"Story Points" # Field ids or namesatlcli jira search ... --plain [--delimiter <text>] # Tab-separated (or another separator)atlcli jira search ... --csv # CSV (RFC 4180)atlcli jira search ... --no-headers # Without the header rowCurrent User
Section titled “Current User”atlcli jira me # Get current user infoMy Issues
Section titled “My Issues”atlcli jira my # My open/unresolved issuesatlcli jira my --all # All my issues (including resolved)atlcli jira my --project <key> # Filter by projectatlcli jira my --status "In Progress" # Filter by statusatlcli jira my --type Bug # Filter by issue typeatlcli jira my --limit <n> # Limit results (default 25)Comments
Section titled “Comments”atlcli jira issue comment --key <key> "Comment **markdown**"atlcli jira issue comments list --key <key> [--format markdown]atlcli jira issue comments add --key <key> --body-file <path|->atlcli jira issue comments add --key <key> --edit # Write in $EDITORatlcli jira issue comments add --key <key> <text> --internal # JSM internal commentatlcli jira issue comments edit --key <key> --id <id> --body <markdown>atlcli jira issue comments delete --key <key> --id <id> --confirmWorklogs
Section titled “Worklogs”atlcli jira worklog list --issue <key>atlcli jira worklog add <key> <duration>atlcli jira worklog add <key> 2h --comment <text>atlcli jira worklog add <key> 1h30m --started <datetime>atlcli jira worklog add <key> 1h --round 15matlcli jira worklog update --issue <key> --id <id> --time <duration>atlcli jira worklog delete --issue <key> --id <id> --confirm
# Timer modeatlcli jira worklog timer start <key>atlcli jira worklog timer start <key> --comment <text>atlcli jira worklog timer start <key> --profile <name> # Record a specific profileatlcli jira worklog timer stop # Stop and log timeatlcli jira worklog timer stop --round 15matlcli jira worklog timer stop --profile <name> # Override the recorded profileatlcli jira worklog timer status # Show running timeratlcli jira worklog timer cancel # Cancel without logging
# Reportatlcli jira worklog report # Current user, last 30 daysatlcli jira worklog report --user <user> --since <date> --until <date>atlcli jira worklog report --group-by issueatlcli jira worklog report --group-by dateBoards
Section titled “Boards”atlcli jira board list # Boards of the default project, if setatlcli jira board list --all-projects # Boards of every projectatlcli jira board list --project <key>atlcli jira board list --type scrum # Filter by typeatlcli jira board list --name <pattern>atlcli jira board get --id <id> # Get board detailsatlcli jira board backlog --id <id> [--jql <query>] [--limit <n>] # Backlog issuesatlcli jira board issues --id <id> [--jql <query>] [--limit <n>] # Board issuesatlcli jira board create --name <name> [--type scrum|kanban] [--project <key>] [--filter <id> | --jql <query>]atlcli jira board delete --id <id> --confirm [--delete-filter]board list and sprint list page through all results up to --limit (default 50) and print Showing N of M … on stderr when more exist.
Sprints
Section titled “Sprints”atlcli jira sprint list --board <id> [--state active|future|closed] [--limit <n>] # --board defaults to global.boardatlcli jira sprint get --id <id>atlcli jira sprint create --board <id> --name <name>atlcli jira sprint create --board <id> --name <name> \ --start <date> --end <date> --goal <text>atlcli jira sprint start --id <id> [--start <date>] [--end <date>] [--goal <text>]atlcli jira sprint close --id <id>atlcli jira sprint delete --id <id> --confirmatlcli jira sprint issues --id <id> [--jql <query>] [--limit <n>] # Issue tableatlcli jira sprint add <issues...> --sprint <id>atlcli jira sprint remove <issues...> # Move to backlogatlcli jira issue rank <issues...> (--before <key> | --after <key>) # Reorderatlcli jira sprint report <id> [--points-field <id>] [--status-map <map>] # Sprint metrics (JSON)atlcli jira sprint review <id> --space <key> [--export <file>] # Sprint review pageatlcli jira epic list --project <key>atlcli jira epic list --board <id>atlcli jira epic list --project <key> --done # Include done epicsatlcli jira epic list --limit <n> # Default 50atlcli jira epic get <key>atlcli jira epic create --project <key> --summary <text>atlcli jira epic issues <key> # List child issuesatlcli jira epic add <issues...> --epic <key> # Add issues to epicatlcli jira epic remove <issues...> # Remove issues from epicatlcli jira epic progress <key> # Show completion progressSubtasks
Section titled “Subtasks”atlcli jira subtask list --parent <key>atlcli jira subtask create --parent <key> --summary <text>atlcli jira subtask create --parent <key> --summary <text> \ --assignee <user> --description <text>Components
Section titled “Components”atlcli jira component list --project <key>atlcli jira component get <id>atlcli jira component create --project <key> --name <name>atlcli jira component create --project <key> --name <name> \ --lead <user> --description <text>atlcli jira component update --id <id> --name <name>atlcli jira component delete --id <id> --confirmVersions
Section titled “Versions”atlcli jira version list --project <key>atlcli jira version get <id>atlcli jira version create --project <key> --name <name>atlcli jira version create --project <key> --name <name> \ --start-date <date> --release-date <date>atlcli jira version update <id> [--name <name>] [--description <text>] \ [--start-date <date>] [--release-date <date>]atlcli jira version release --id <id> # Release date = todayatlcli jira version delete --id <id> --confirmatlcli jira version notes <id|name> --space <key> [--project <key>] [--group-by type|epic] [--export <file>] # Release notes pageTemplates
Section titled “Templates”# List with filteringatlcli jira template listatlcli jira template list --level global # Global templates onlyatlcli jira template list --level profile # Profile templates onlyatlcli jira template list --level project # Project templates onlyatlcli jira template list --type Bug # Filter by issue typeatlcli jira template list --tag <tag> # Filter by tagatlcli jira template list --search <text> # Search name/descriptionatlcli jira template list --all # Include overridden templatesatlcli jira template list --expand # Show full field details
atlcli jira template get <name>
# Save to different levelsatlcli jira template save <name> --issue <key> # Global (default)atlcli jira template save <name> --issue <key> --level profile # Profile levelatlcli jira template save <name> --issue <key> --project <key> # Project levelatlcli jira template save <name> --issue <key> --tags bug,urgent # With tagsatlcli jira template save <name> --issue <key> --force # Overwrite
atlcli jira template apply <name> --project <key> --summary <text>atlcli jira template apply <name> --project <key> --var version=4.2 [--vars-file <file>] [--now <iso>] [--strict]atlcli jira template delete <name> --confirmatlcli jira template export <name> -o <file>atlcli jira template import --file <path>atlcli jira template import --file <path> --project <key> # To project levelStorage hierarchy (precedence: project > profile > global):
- Global:
~/.atlcli/templates/jira/global/ - Profile:
~/.atlcli/templates/jira/profiles/{name}/ - Project:
~/.atlcli/templates/jira/projects/{key}/
Choosing a level — save, import, delete and list all use the same rule:
- an explicit
--level <global|profile|project>always wins; - otherwise
--project <key>selects project storage; - otherwise
--profile <name>selects profile storage; - otherwise global.
--profile is primarily the auth-profile flag, so it is the weakest storage
signal. An unrecognised --level value is rejected rather than silently
falling back to another level.
Bulk Operations
Section titled “Bulk Operations”atlcli jira bulk edit --jql <query> --set "field=value"atlcli jira bulk edit --jql <query> --set "priority=High"atlcli jira bulk edit --jql <query> --dry-run --limit <n>atlcli jira bulk transition --jql <query> --to <status>atlcli jira bulk transition --jql <query> --to <status> --dry-runatlcli jira bulk label add <label> --jql <query>atlcli jira bulk label remove <label> --jql <query>atlcli jira bulk delete --jql <query> --confirmatlcli jira bulk move --jql <query> --sprint <id> # Or --backlogatlcli jira bulk link-page --jql <query> --page <id> [--comment [text]] [--dry-run]atlcli jira bulk edit --issues <K1,K2> --set "labels=a,b" # --issues instead of --jqlEvery bulk command takes --limit <n> (default 1000) and --dry-run.
Filters
Section titled “Filters”atlcli jira filter listatlcli jira filter get --id <id>atlcli jira filter create --name <name> --jql <query>atlcli jira filter update --id <id> --jql <query>atlcli jira filter delete --id <id> --confirmatlcli jira filter run <id> # The filter's issues, like searchatlcli jira filter share <id> --user <user>atlcli jira filter share <id> --group <name>atlcli jira filter share <id> --project <key>atlcli jira filter share <id> --type globalAnalytics
Section titled “Analytics”atlcli jira analyze velocity --board <id>atlcli jira analyze velocity --board <id> --sprints <n>atlcli jira analyze burndown --sprint <id>atlcli jira analyze scope-change --sprint <id>atlcli jira analyze predictability --board <id>atlcli jira analyze burndown --sprint <id> --status-map "Fertig=done" # Count a done status outside the Done categorySee Analytics.
Flow Metrics
Section titled “Flow Metrics”atlcli jira analyze flow --project <key> [--since 90d] # Cycle/lead time, throughputatlcli jira analyze flow --board <id> --csv # One row per completed issueatlcli jira analyze aging --jql <query> # Work in progress by ageatlcli jira analyze cfd --project <key> --group-by category # Cumulative flow per dayatlcli jira analyze flow --project <key> --status-map "Code Review=wip"Selection: --jql > --board (its saved filter) > --project > global.board > global.project. --limit (default 1000) caps the issues read. See Flow Metrics.
Jira Audit
Section titled “Jira Audit”atlcli audit jira --project <key> # Rules from .atlcli/audit-rules.yaml or the default profileatlcli audit jira --board <id> --checks flow --min-level infoatlcli audit jira --project <key> --update-baseline # Accept today's findingsatlcli audit jira --jql <query> --rules team-rules.yaml --fail-on warningatlcli audit jira --project <key> --markdown > audit.md # Exits 2 when an error remainsatlcli audit jira --project <key> --jsonatlcli audit jira --project <key> --output audit.csv # Report file, replaced only once completeatlcli audit jira --project <key> --format jsonl > findings.jsonlatlcli audit jira --project <key> --template team.md.j2 --output report.md| Option | Type | Default | Notes |
|---|---|---|---|
--output <file> |
path | stdout | Writes the report to a file, replaced only once complete; parent directories are created |
--format <fmt> |
md, json, jsonl, csv |
from the --output extension (.json, .jsonl/.ndjson, .csv, else md) |
Without --output, writes this format to stdout. Not with --template, --markdown or --report-script (Markdown only) |
--report <file> |
path | none | Same as --format md --output <file> |
The same options apply to audit wiki. See Jira Audit: report files and formats.
Needs atlcli flag set audit true --global. See Jira Audit and Audit Rules.
Access Audit
Section titled “Access Audit”Who can see and change what, across Confluence spaces and Jira projects:
atlcli audit access # Every shared space and every project you can seeatlcli audit access --space <key> --project <key>atlcli audit access --product confluence --checks exposure --fail-on erroratlcli audit access --space <key> --pages --min-level info # Also page restrictions (one request per page)atlcli audit access --project '*' --checks stale --fix --plan-out access-fix.jsonatlcli audit access --output access.csvatlcli audit init --product access # Skeleton for your own access ruleThe report, baseline and rule options are the same as for audit jira. Needs atlcli flag set audit true --global. See Access Audit.
Fields
Section titled “Fields”atlcli jira field list # List all fieldsatlcli jira field list --custom # Custom fields onlyatlcli jira field list --system # System fields onlyatlcli jira field get --id <id>atlcli jira field search <query> # Search fields by nameatlcli jira field options --id <id> # List field optionsImport/Export
Section titled “Import/Export”atlcli jira export --jql <query> --format csv -o <file>.csvatlcli jira export --jql <query> -o <file>.jsonatlcli jira export --jql <query> -o <file>.json --no-comments --no-attachmentsatlcli jira import --file <path>.csv --project <key>atlcli jira import --file <path>.csv --project <key> --map-field "Title=summary"atlcli jira import --file <path>.json --project <key>atlcli jira import --file <path> --dry-runWebhooks
Section titled “Webhooks”# Start local webhook server (use with ngrok/cloudflare tunnel)atlcli jira webhook serve # Port 8080, path /webhookatlcli jira webhook serve --port 3000 --path /jiraatlcli jira webhook serve --port 3000 --projects PROJ,TEAMatlcli jira webhook serve --port 3000 --events jira:issue_updatedatlcli jira webhook serve --secret <secret> # HMAC validation
# Manage registered webhooksatlcli jira webhook list # List registered webhooksatlcli jira webhook register --url <url> --events <events>atlcli jira webhook register --url <url> --events jira:issue_created --jql <filter>atlcli jira webhook delete <id> # Delete webhookatlcli jira webhook refresh <id> # Refresh expiration (30 day limit)Event types: jira:issue_created, jira:issue_updated, jira:issue_deleted, comment_created, comment_updated, comment_deleted, sprint_created, sprint_started, sprint_closed, worklog_created, worklog_updated, worklog_deleted
Scripts
Section titled “Scripts”TypeScript automation for Jira and Confluence. Writes are planned and applied separately; see Automation Scripts and the Script API.
atlcli script run <file> # Run and show the plan (writes nothing)atlcli script run <file> --param key=value # Pass parameters (atlcli.params)atlcli script run <file> --plan-out plan.json # Write the plan for review or CIatlcli script run <file> --apply # Plan, ask, applyatlcli script run <file> --apply --yes # Plan and apply without askingatlcli script run -e '<code>' # Inline codeatlcli script run <file> --timeout 0 --max-writes 50000 # Raise limits (0 = none)atlcli script run <file> --var year=2026 --vars-file v.yml --now <iso> --strict # Values for atlcli.renderatlcli script run <file> --out-dir build --max-output 1g # Where atlcli.output files go (default .), total size (256m)atlcli script apply plan.json --yes # Apply a reviewed plan (exit 2 on drift)atlcli script apply plan.json --resume --yes # Continue an apply that stoppedatlcli script apply plan.json --concurrency 8 # Independent operations in parallelatlcli script run <file> --each "<jql>" # Per-issue job: plan once per issueatlcli script run <file> --each "<jql>" --apply --yes # Plan and apply issue by issueatlcli script apply <job-id> --yes # Apply a reviewed per-issue jobatlcli script resume <job-id> [--script <file>] # Continue a job that stoppedatlcli script jobs [job-id] # List jobs, or show oneatlcli script check <file> # Validate meta and imports, type-check with tscatlcli script test <file> --record <case> # Record reads and plan as a test case (nothing changes)atlcli script test <file|dir> [--case <name>] # Replay recorded cases offline, compare plansatlcli script test <file> --update # Rewrite the expected plansatlcli script init [dir] # atlcli.d.ts, tsconfig.json, example.tsatlcli script init [dir] --each "<jql>" # Per-issue skeleton (each.ts)atlcli script init [dir] --example <name> # A bundled example; --list-examples--out-dir <dir> sets the directory for atlcli.output files (default: the working directory; created if missing). --max-output <size> caps their total size per run (512k, 300m, 2g or bytes; default 256m, at most 50 files).
Per-issue jobs: see Per-Issue Script Jobs.
Templates
Section titled “Templates”Variables for copies and templates; see Templating.
atlcli template vars --jira-template <name> # Variables of a saved Jira templateatlcli template vars --issue <key> # ... of a template issueatlcli template vars --jql <query> # ... of template issues (up to 500)atlcli template vars --page <id> [--tree] # ... of a template page or page treeatlcli template vars --file <path> # ... of a local .json Jira template or .md wiki templateatlcli template vars ... --json # Includes a values: skeleton for --vars-fileLogging
Section titled “Logging”atlcli log list # List recent entriesatlcli log list --limit <n>atlcli log list --since <duration>atlcli log list --since <date> --until <date>atlcli log list --level erroratlcli log list --level warnatlcli log list --type apiatlcli log list --type cli.commandatlcli log list --type sync
atlcli log tail -f # Follow logsatlcli log tail -f --level erroratlcli log tail --project # Project logs only
atlcli log show <id> # Show entry details
atlcli log clear --before <duration> --confirmatlcli log clear --before <duration> --global --confirmatlcli log clear --before <duration> --project --confirmPlugins
Section titled “Plugins”atlcli plugin list # List all pluginsatlcli plugin list --enabledatlcli plugin enable <name>atlcli plugin disable <name>atlcli plugin install <path> # Install from local pathatlcli plugin remove <name>Feature Flags
Section titled “Feature Flags”Feature flags control experimental or optional functionality. Flags can be set at three levels with decreasing precedence: environment variables, project config, global config.
atlcli flag list # List all flags with sourcesatlcli flag ls # Alias for list
atlcli flag get <name> # Get a flag valueatlcli flag get helloworld
atlcli flag set <name> <value> # Set flag (project-level)atlcli flag set helloworld trueatlcli flag set export.backend libreoffice --global # Set globally
atlcli flag unset <name> # Remove flag (project-level)atlcli flag rm <name> # Alias for unsetatlcli flag unset helloworld --global # Remove from global configFlag value types: boolean (true/false), string, number
Precedence (highest to lowest):
| Level | Location | Environment Variable |
|---|---|---|
| 1. Environment | FLAG_* |
FLAG_HELLOWORLD=true |
| 2. Project | .atlcli/config.json |
- |
| 3. Global | ~/.atlcli/config.json |
- |
Environment variable format: FLAG_ prefix + uppercase name with dots replaced by underscores.
Example: helloworld → FLAG_HELLOWORLD, export.backend → FLAG_EXPORT_BACKEND
Utility Commands
Section titled “Utility Commands”Digest
Section titled “Digest”atlcli digest # Since the last run (first run: 24h)atlcli digest --since 7d --no-mark # Peek without moving the markeratlcli digest --only jira --board <id> # Jira only, with the active sprintatlcli digest --space <key> --markdown # Adds "recently changed in space"atlcli digest --project GROW,VDS --since 2d # Adds a per-project overview (config: digest.projects)atlcli digest --include-own --json # Keep your own edits; JSON outputANTHROPIC_API_KEY=... atlcli digest --summarizeSee Daily Digest.
Terminal UI
Section titled “Terminal UI”atlcli tui # Jira: your open issuesatlcli tui --project ABC --board 42 # Navigator on that project and boardatlcli tui --jql 'project = ABC AND sprint IN openSprints()'atlcli tui --area wiki --space DOCS # Wiki: that space's page treeNeeds an interactive terminal; it fails in CI or a pipe. See Terminal UI.
Research
Section titled “Research”ANTHROPIC_API_KEY=... atlcli research \ "Which Jira work is explicitly related to our Confluence documentation?" \ --profile work --project PLATFORM --space DOCS \ --from 2026-07-24 --to 2026-07-31 \ --max-run-minutes 10 --output /absolute/path/report.mdNormal stdout is the canonical Markdown; progress is written to stderr.
--json emits one structured report document. Project and space flags are
repeatable and accept comma-separated keys. See
Jira and Confluence Research for the complete contract and
security boundaries.
Helloworld
Section titled “Helloworld”Test command to verify the feature flag system works. Only available when flag.helloworld is true.
# Enable the commandatlcli flag set helloworld true
# Run itatlcli helloworld# Output: Hello dear user, thank you that you use me! Star me at https://github.com/BjoernSchotte/atlcli
# Disable (command will no longer be available)atlcli flag set helloworld falsePurpose: Simple test to verify feature flags work correctly. When the flag is not set or false, the command behaves as if it doesn’t exist.
Agent Skill
Section titled “Agent Skill”atlcli skill # Print SKILL.mdatlcli skill references/safety.md # Print one file of the skillatlcli skill --list # List the filesatlcli skill --install .claude/skills # Write the skill to .claude/skills/atlcli/See Agent Skill.
Update
Section titled “Update”atlcli update # Check for and install updatesatlcli update --check # Check only, don't installVersion
Section titled “Version”atlcli version # Show versionatlcli --version # Same as aboveatlcli -v # Short formRelated Topics
Section titled “Related Topics”- Shell Completions - Tab completion setup
- Agent Skill - The agent skill and
atlcli skill - Script API -
atlcli scriptverbs, meta and plan file - Environment Variables - Environment configuration
- Troubleshooting - Common issues