Skip to content

CLI Commands

Quick reference for all atlcli commands.

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.

Terminal window
# Interactive setup
atlcli auth init # Initialize default profile
atlcli 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 certificate
atlcli auth login --bearer --site <url> --token <token> --ca-file /path/to/ca.pem
atlcli auth login --bearer --site <url> --token <token> --insecure # Skip verify (testing only)
# Profile management
atlcli auth status # Show current profile status
atlcli auth list # List all profiles
atlcli auth switch <name> # Switch active profile
atlcli auth rename <old> <new> # Rename profile
# Cleanup
atlcli auth logout # Clear active profile credentials
atlcli auth logout <name> # Clear specific profile credentials
atlcli auth delete <name> # Delete profile entirely
atlcli auth delete <name> --delete-keychain # Also delete keychain creds (macOS)
Terminal window
# View configuration
atlcli 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 project
atlcli config set global.space DOCS # Default Confluence space
atlcli config set global.board 123 # Default Jira board ID
# Logging settings
atlcli config set logging.level debug # Set log level
atlcli config set logging.global true # Enable global logs
# Remove settings
atlcli config unset global.project # Remove a value

Available 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
Terminal window
atlcli doctor # Run all health checks
atlcli doctor --fix # Auto-fix safe issues (create dirs, etc.)
atlcli doctor --json # JSON output for scripting

Checks 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

Nothing is downloaded unless you ask for it. See Import PDF: optional table-structure model.

Terminal window
atlcli models pull table-transformer # weights (116 MB) + runtime (~90 MB on disk)
atlcli models pull table-transformer --variant quantized # 30 MB weights
atlcli models list # installed models and runtime
Terminal window
atlcli wiki docs init <dir> --space <key> # Initialize sync directory
atlcli wiki docs pull <dir> # Pull from Confluence
atlcli wiki docs pull --dir <dir> # Same, when running from elsewhere
atlcli wiki docs pull <dir> --page-id <id> # Pull specific page
atlcli wiki docs pull <dir> --version <n> # Pull specific version
atlcli wiki docs pull <dir> --label <name> # Pull pages with label
atlcli wiki docs pull <dir> --force # Overwrite local edits (markdown + attachments)
atlcli wiki docs push <dir> # Push to Confluence
atlcli wiki docs push <dir> --dry-run # Preview changes
atlcli wiki docs push <dir> --force # Force overwrite
atlcli wiki docs push <dir> --legacy-editor # Use legacy editor (v1)
atlcli wiki docs sync <dir> --page-id <id> # Start the bidirectional sync daemon
atlcli wiki docs sync <dir> --dry-run # Report the plan; changes nothing on disk
atlcli wiki docs sync <dir> --on-conflict remote # Conflicts: merge (default) | local | remote
atlcli wiki docs sync --help # Full sync option list
atlcli wiki docs status <dir> # Show sync status
atlcli wiki docs add <dir> --template <name> # Add page from template
atlcli wiki docs diff <dir> # Show local vs remote diff (title only for folders)
atlcli wiki docs resolve <dir> # Resolve sync conflicts
atlcli 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 rendering
atlcli wiki docs convert <file> --to-new-editor # Convert to v2 editor
atlcli wiki docs convert <file> --to-legacy-editor # Convert to v1 editor
atlcli wiki docs convert <dir> --to-new-editor --dry-run # Preview bulk conversion
atlcli wiki docs convert <dir> --to-new-editor --confirm # Bulk convert directory
Terminal window
# Basic audit
atlcli audit wiki --all # Run all checks
atlcli audit wiki --all --stale-high 12 # With 12-month stale threshold
# Check types
atlcli audit wiki --stale-high 12 --stale-medium 6 --stale-low 3 # Stale content
atlcli audit wiki --orphans # Orphaned pages (no incoming links)
atlcli audit wiki --broken-links # Broken internal links
atlcli audit wiki --single-contributor # Bus factor risk
atlcli audit wiki --inactive-contributors # Pages with inactive authors
atlcli audit wiki --external-links # List external URLs
atlcli audit wiki --check-external # Verify external URLs via HTTP
atlcli audit wiki --missing-label <label> # Pages missing required label
atlcli audit wiki --restricted # Pages with restrictions
atlcli audit wiki --drafts # Unpublished drafts
atlcli audit wiki --archived # Archived pages
atlcli audit wiki --high-churn <n> # Pages with N+ versions
atlcli audit wiki --folders # Check folder structure
# Scope filtering
atlcli audit wiki --label <label> # Only audit pages with label
atlcli audit wiki --under-page <id> # Only pages under ancestor
atlcli audit wiki --exclude-label <label> # Exclude pages with label
atlcli audit wiki --dir <path> # Audit specific directory
# Output formats
atlcli audit wiki --all --json # JSON output
atlcli audit wiki --all --markdown # Markdown report
atlcli 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 stdout
atlcli audit wiki --template team.md.j2 --output report.md # Own Jinja template, to a file
atlcli audit wiki --report audit.md # Same as --format md --output audit.md
# Fix mode
atlcli audit wiki --all --fix --dry-run # Preview fixes
atlcli audit wiki --all --fix # Apply fixes
atlcli audit wiki --all --fix --fix-label <label> # Custom stale label
# Advanced
atlcli audit wiki --include-remote # Include unsynced remote pages
atlcli audit wiki --refresh-users # Refresh user status from API
atlcli audit wiki --rebuild-graph # Rebuild link graph from markdown
atlcli audit wiki --export-graph # Export link graph as JSON
Terminal window
atlcli wiki page list --space <key> # List pages in space
atlcli wiki page list --cql <query> # Filter with CQL
atlcli wiki page list --label <name> # Filter by label
atlcli wiki page get --id <id> # Get page content
atlcli wiki page get --id <id> --version <n> # Get specific version
atlcli 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> --confirm
atlcli wiki page delete --cql <query> --dry-run # Bulk delete preview
atlcli wiki page delete --cql <query> --confirm # Bulk delete
atlcli wiki page move --id <id> --parent <id>
atlcli wiki page move <file> --before <target> # Position before sibling
atlcli wiki page move <file> --after <target> # Position after sibling
atlcli wiki page move <file> --first # First child position
atlcli wiki page move <file> --last # Last child position
atlcli wiki page move --id <id> --position <n> # Specific position
atlcli 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 templates
atlcli wiki page copy --id <id> --tree [--title <tpl>] [--vars-file <file>] [--plan-out <file>] [--apply [--yes]] # Page tree as a plan
atlcli wiki page children --id <id> # List child pages
atlcli wiki page children --id <id> --limit <n> --json
atlcli wiki page sort <file> --alphabetical
atlcli wiki page sort <file> --natural # Natural sort (Chapter 2 < Chapter 10)
atlcli wiki page sort <file> --by created
atlcli wiki page sort --id <id> --by modified --reverse
atlcli wiki page archive --id <id> --confirm
atlcli wiki page archive --cql <query> --dry-run
atlcli wiki page open <id> # Open page in browser
atlcli wiki page convert --id <id> --to-new-editor # Convert to v2 editor
atlcli 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 page
atlcli wiki page link-issue --id <id> --issue <key> --comment # With comment
atlcli wiki page issues --id <id> # List linked Jira issues
atlcli wiki page issues --id <id> --project <key> # Filter by project
atlcli wiki page unlink-issue --id <id> --issue <key> # Remove link
Terminal window
atlcli wiki page history --id <id> # List versions
atlcli wiki page history --id <id> --limit <n>
atlcli wiki page diff --id <id> --version <n> # Unified diff with current
atlcli wiki page diff --id <id> --from <n> --to <n> --context <n>
atlcli wiki page diff --id <id> --from <n> --to <n> --format text --word-diff
atlcli wiki page diff --id <id> --from <n> --to <n> --format semantic
atlcli wiki page diff --id <id> --from <n> --to <n> --format semantic --json
atlcli wiki page diff --id <id> --from <n> --to <n> --format review --word-diff
atlcli wiki page diff --id <id> --from <n> --to <n> --format review --json
atlcli wiki page restore --id <id> --version <n> --confirm
atlcli wiki page restore --id <id> --version <n> --message <text> --confirm

Page 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.

Terminal window
# Footer comments
atlcli 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> --confirm
atlcli wiki page comments resolve --comment <comment-id> # inline comments only
atlcli wiki page comments reopen --comment <comment-id> # inline comments only
# Inline comments
atlcli wiki page comments list --id <id> --inline
atlcli wiki page comments add-inline --id <id> --selection <text> "Comment"
Terminal window
atlcli wiki page label list --id <id> # List labels on page
atlcli wiki page label add <label> [<label>...] --id <id> # Add labels
atlcli wiki page label add <label> --cql <query> --dry-run # Bulk add preview
atlcli wiki page label add <label> --cql <query> --confirm # Bulk add
atlcli wiki page label remove <label> --id <id>
atlcli wiki page label remove <label> --cql <query> --confirm # Bulk remove
Terminal window
atlcli wiki search <query> # Full-text search
atlcli wiki search <query> --space <key> # Search in space
atlcli wiki search --cql <query> # CQL search
atlcli wiki search --label <label> # Search by label
atlcli wiki search --creator <email> # Search by creator
atlcli wiki search --type page # Filter by type
atlcli wiki search --ancestor <id> # Search in page tree
atlcli wiki search --modified-since <duration>
atlcli wiki search --created-since <duration>
atlcli wiki search --title <text> # Search titles only
atlcli wiki search --limit <n> --start <n> # Pagination
atlcli wiki search --format compact # Compact output
atlcli wiki search --verbose # Detailed output
Terminal window
atlcli wiki my # Pages I created (default)
atlcli wiki my --contributed # Pages I contributed to
atlcli wiki my --space <key> # Filter by space
atlcli wiki my --label <name> # Filter by label
atlcli wiki my --limit <n> # Limit results (default 25)
Terminal window
atlcli wiki recent # Last 7 days (default)
atlcli wiki recent --days 30 # Last 30 days
atlcli wiki recent --space <key> # Filter by space
atlcli wiki recent --label <name> # Filter by label
atlcli wiki recent --limit <n> # Limit results (default 25)
Terminal window
atlcli wiki space list # List all spaces
atlcli wiki space list --limit <n>
atlcli wiki space get --key <key> # Get space details
atlcli wiki space create --key <key> --name <name>
atlcli wiki space create --key <key> --name <name> --description <text>
Terminal window
atlcli wiki docs template list # List saved templates
atlcli wiki docs template get <name> # Show template
atlcli 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>
Terminal window
# Foreground export through the durable job runtime
atlcli wiki export <page-id> --output ./page.docx
atlcli wiki export <page-id> --code-theme dracula --output ./page.docx
atlcli wiki export <page-id> --format pdf --output ./page.pdf
atlcli wiki export <page-id> --format pdf --code-theme nord --output ./page.pdf
atlcli wiki export <page-id> --format pdf --pdf-standard ua-1 --output ./page-ua.pdf
atlcli wiki export <page-id> --format pdf \
--template ./brand.wiki-pdf-template --output ./brand-page.pdf
atlcli wiki export <page-id> --scope tree --output ./handbook.docx
atlcli wiki export --scope space --space DOCS --format pdf --out-dir ./dist
# Inspect and manage activity across DOCX and PDF
atlcli wiki export jobs list
atlcli wiki export jobs list --status running,waiting --format pdf --since 12h
atlcli wiki export jobs show <job-id>
atlcli wiki export jobs watch <job-id>
atlcli wiki export jobs watch <job-id> --jsonl
atlcli wiki export jobs cancel <job-id>
atlcli wiki export jobs resume <queued-id>
atlcli wiki export jobs retry <failed-id> --output ./retry.docx
atlcli wiki export jobs rerun <succeeded-id> --output ./copy.pdf
atlcli wiki export jobs clear --before 30d --confirm

resume 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.

Confluence as a filesystem — an embedded shell, or a mounted OS volume. See Virtual Filesystem for the full guide.

Terminal window
# One command with a real exit code — the form to give an agent
atlcli wiki sh --space DOCSY -c 'grep -rlw kubernetes . | head'
# Interactive, or a script on stdin
atlcli wiki sh --space DOCSY
cat script.sh | atlcli wiki sh --space DOCSY
# Writing is off by default
atlcli wiki sh --space DOCSY --mode rw -c 'sed -i "s/old/new/" page-623869955/_index.md'
# Mount as a real volume
atlcli wiki mount ~/confluence --space DOCSY
atlcli wiki mount list
atlcli wiki unmount ~/confluence
# Maintenance
atlcli wiki vfs cache stats
atlcli wiki vfs cache clear
atlcli wiki vfs conflicts list
atlcli 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.

Terminal window
# Inspect Confluence and route changes without activating a bundle
atlcli wiki publish plan --project .atlcli/publish.json --profile work
# Acquire, validate, and atomically activate an immutable bundle
atlcli wiki publish refresh --project .atlcli/publish.json --profile work
# Build the active bundle with the project-owned Astro site
atlcli wiki publish build --project .atlcli/publish.json
# Verify the latest build, or select one by digest
atlcli wiki publish verify --project .atlcli/publish.json
atlcli wiki publish verify --project .atlcli/publish.json --build <digest>
# Run refresh, build, and verify in sequence
atlcli wiki publish run --project .atlcli/publish.json --profile work
# Inspect and safely prune local retained state
atlcli wiki publish status --project .atlcli/publish.json
atlcli 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.

Terminal window
# Guided Word-design import
atlcli pdf-template import ./brand.docx
atlcli pdf-template status ./brand-pdf-template
atlcli pdf-template review ./brand-pdf-template
atlcli pdf-template preview ./brand-pdf-template
atlcli pdf-template build ./brand-pdf-template \
--output ./brand.wiki-pdf-template
atlcli pdf-template undo ./brand-pdf-template
# Expert / automation surfaces
atlcli pdf-template analyze ./brand.docx --json --no-log
atlcli pdf-template reanalyze ./brand-v2.docx --dir ./brand-pdf-template
atlcli pdf-template diff ./brand-pdf-template --details
atlcli 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-template
atlcli pdf-template pack ./brand-pdf-template \
--output ./brand.wiki-pdf-template
# Declarative Recipe V2
atlcli pdf-template explain ./recipe.yaml --json
atlcli pdf-template validate ./recipe.yaml
atlcli pdf-template build ./recipe.yaml \
--output ./recipe.wiki-pdf-template

The 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.

Terminal window
atlcli jira project list [--query <text>] [--limit <n>] # Default limit 50
atlcli 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/
Terminal window
atlcli jira issue get --key <key> # Get issue details
atlcli jira issue get --key <key> --expand all
atlcli jira issue get --key <key> --format markdown # Description as markdown
atlcli 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 $EDITOR
atlcli jira issue create --project <key> --type <type> --summary <text> \
--description-file <path|-> # Markdown description from file or stdin
atlcli 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=8
atlcli 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, none
atlcli jira issue update --key <key> --edit # Edit the description in $EDITOR
atlcli jira issue delete --key <key> --confirm
atlcli 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 transitions
atlcli jira issue assign --key <key> --assignee <user>
atlcli jira issue assign --key <key> --assignee default # Project default assignee
atlcli jira issue assign --key <key> --assignee none # Unassign
atlcli jira issue link --from <key> --to <key> --type <type>
atlcli jira issue link --key <key> --url <url> [--title <text>] # Web link
atlcli jira issue unlink --key <key> --remote <id> # Remove a web link
atlcli jira issue unlink --link <id> # Remove an issue link
atlcli jira issue unlink --from <key> --to <key> [--type <type>] --confirm
atlcli jira issue history --key <key> [--field <name>] [--limit <n>] # Change history
atlcli jira issue attach <key> <file> [file...] [--comment <text>] # Attach files
atlcli jira issue attachments <key> # List attachments
atlcli jira issue attachment download <id> [-o <path>] [--overwrite]
atlcli jira issue attachment download <key> <filename> [-o <path>] [--overwrite]
atlcli jira issue attachment delete <id> --confirm
atlcli jira issue attachment delete <key> <filename> --confirm
atlcli jira issue attachment copy <id> --to <key> # Copy to another issue
atlcli jira issue attachment copy <key> <filename> --to <key>
atlcli jira issue open <key> # Open issue in browser
atlcli 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 page
atlcli jira issue link-page --key <key> --page <id> --comment # With comment
atlcli jira issue pages --key <key> # List linked Confluence pages
atlcli jira issue unlink-page --key <key> --link <id> # Remove link by link id
atlcli jira issue unlink-page --key <key> --page <id> # Remove link by page id
atlcli jira watch <key> # Watch issue
atlcli jira unwatch <key> # Stop watching
atlcli jira watchers <key> # List watchers
Terminal window
atlcli jira search --jql <query> # JQL search; filter flags are ANDed onto it
atlcli jira search --assignee me # My issues
atlcli jira search --assignee <user> # Email, name or account id; x = unassigned
atlcli jira search --status "In Progress"
atlcli jira search --project <key>
atlcli jira search --type Bug
atlcli jira search --type Bug,Task # Multiple types
atlcli jira search --label <label> # Filter by label
atlcli jira search --sprint <id> # Filter by sprint
atlcli jira search --watching # Issues I watch
atlcli jira search --history # Issues I viewed recently
atlcli jira search --created -7d # Also --updated; today, week, month, year, YYYY-MM-DD
atlcli jira search --created-before 2026-01-01 # Also --updated-before
atlcli jira search --status '~Done' # ~ negates --status, --type, --label, --assignee
atlcli jira search --limit <n> # Pages through results above 100
atlcli jira search --all-results # All matches, up to 5000

Issue lists (search, my, filter run, board issues, board backlog, sprint issues, epic issues) print a table; --json prints JSON:

Terminal window
atlcli jira search ... --columns key,status,"Story Points" # Field ids or names
atlcli 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 row
Terminal window
atlcli jira me # Get current user info
Terminal window
atlcli jira my # My open/unresolved issues
atlcli jira my --all # All my issues (including resolved)
atlcli jira my --project <key> # Filter by project
atlcli jira my --status "In Progress" # Filter by status
atlcli jira my --type Bug # Filter by issue type
atlcli jira my --limit <n> # Limit results (default 25)
Terminal window
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 $EDITOR
atlcli jira issue comments add --key <key> <text> --internal # JSM internal comment
atlcli jira issue comments edit --key <key> --id <id> --body <markdown>
atlcli jira issue comments delete --key <key> --id <id> --confirm
Terminal window
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 15m
atlcli jira worklog update --issue <key> --id <id> --time <duration>
atlcli jira worklog delete --issue <key> --id <id> --confirm
# Timer mode
atlcli jira worklog timer start <key>
atlcli jira worklog timer start <key> --comment <text>
atlcli jira worklog timer start <key> --profile <name> # Record a specific profile
atlcli jira worklog timer stop # Stop and log time
atlcli jira worklog timer stop --round 15m
atlcli jira worklog timer stop --profile <name> # Override the recorded profile
atlcli jira worklog timer status # Show running timer
atlcli jira worklog timer cancel # Cancel without logging
# Report
atlcli jira worklog report # Current user, last 30 days
atlcli jira worklog report --user <user> --since <date> --until <date>
atlcli jira worklog report --group-by issue
atlcli jira worklog report --group-by date
Terminal window
atlcli jira board list # Boards of the default project, if set
atlcli jira board list --all-projects # Boards of every project
atlcli jira board list --project <key>
atlcli jira board list --type scrum # Filter by type
atlcli jira board list --name <pattern>
atlcli jira board get --id <id> # Get board details
atlcli jira board backlog --id <id> [--jql <query>] [--limit <n>] # Backlog issues
atlcli jira board issues --id <id> [--jql <query>] [--limit <n>] # Board issues
atlcli 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.

Terminal window
atlcli jira sprint list --board <id> [--state active|future|closed] [--limit <n>] # --board defaults to global.board
atlcli 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> --confirm
atlcli jira sprint issues --id <id> [--jql <query>] [--limit <n>] # Issue table
atlcli jira sprint add <issues...> --sprint <id>
atlcli jira sprint remove <issues...> # Move to backlog
atlcli jira issue rank <issues...> (--before <key> | --after <key>) # Reorder
atlcli jira sprint report <id> [--points-field <id>] [--status-map <map>] # Sprint metrics (JSON)
atlcli jira sprint review <id> --space <key> [--export <file>] # Sprint review page
Terminal window
atlcli jira epic list --project <key>
atlcli jira epic list --board <id>
atlcli jira epic list --project <key> --done # Include done epics
atlcli jira epic list --limit <n> # Default 50
atlcli jira epic get <key>
atlcli jira epic create --project <key> --summary <text>
atlcli jira epic issues <key> # List child issues
atlcli jira epic add <issues...> --epic <key> # Add issues to epic
atlcli jira epic remove <issues...> # Remove issues from epic
atlcli jira epic progress <key> # Show completion progress
Terminal window
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>
Terminal window
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> --confirm
Terminal window
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 = today
atlcli jira version delete --id <id> --confirm
atlcli jira version notes <id|name> --space <key> [--project <key>] [--group-by type|epic] [--export <file>] # Release notes page
Terminal window
# List with filtering
atlcli jira template list
atlcli jira template list --level global # Global templates only
atlcli jira template list --level profile # Profile templates only
atlcli jira template list --level project # Project templates only
atlcli jira template list --type Bug # Filter by issue type
atlcli jira template list --tag <tag> # Filter by tag
atlcli jira template list --search <text> # Search name/description
atlcli jira template list --all # Include overridden templates
atlcli jira template list --expand # Show full field details
atlcli jira template get <name>
# Save to different levels
atlcli jira template save <name> --issue <key> # Global (default)
atlcli jira template save <name> --issue <key> --level profile # Profile level
atlcli jira template save <name> --issue <key> --project <key> # Project level
atlcli jira template save <name> --issue <key> --tags bug,urgent # With tags
atlcli 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> --confirm
atlcli jira template export <name> -o <file>
atlcli jira template import --file <path>
atlcli jira template import --file <path> --project <key> # To project level

Storage 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:

  1. an explicit --level <global|profile|project> always wins;
  2. otherwise --project <key> selects project storage;
  3. otherwise --profile <name> selects profile storage;
  4. 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.

Terminal window
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-run
atlcli jira bulk label add <label> --jql <query>
atlcli jira bulk label remove <label> --jql <query>
atlcli jira bulk delete --jql <query> --confirm
atlcli jira bulk move --jql <query> --sprint <id> # Or --backlog
atlcli 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 --jql

Every bulk command takes --limit <n> (default 1000) and --dry-run.

Terminal window
atlcli jira filter list
atlcli 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> --confirm
atlcli jira filter run <id> # The filter's issues, like search
atlcli 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 global
Terminal window
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 category

See Analytics.

Terminal window
atlcli jira analyze flow --project <key> [--since 90d] # Cycle/lead time, throughput
atlcli jira analyze flow --board <id> --csv # One row per completed issue
atlcli jira analyze aging --jql <query> # Work in progress by age
atlcli jira analyze cfd --project <key> --group-by category # Cumulative flow per day
atlcli 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.

Terminal window
atlcli audit jira --project <key> # Rules from .atlcli/audit-rules.yaml or the default profile
atlcli audit jira --board <id> --checks flow --min-level info
atlcli audit jira --project <key> --update-baseline # Accept today's findings
atlcli audit jira --jql <query> --rules team-rules.yaml --fail-on warning
atlcli audit jira --project <key> --markdown > audit.md # Exits 2 when an error remains
atlcli audit jira --project <key> --json
atlcli audit jira --project <key> --output audit.csv # Report file, replaced only once complete
atlcli audit jira --project <key> --format jsonl > findings.jsonl
atlcli 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.

Who can see and change what, across Confluence spaces and Jira projects:

Terminal window
atlcli audit access # Every shared space and every project you can see
atlcli audit access --space <key> --project <key>
atlcli audit access --product confluence --checks exposure --fail-on error
atlcli 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.json
atlcli audit access --output access.csv
atlcli audit init --product access # Skeleton for your own access rule

The report, baseline and rule options are the same as for audit jira. Needs atlcli flag set audit true --global. See Access Audit.

Terminal window
atlcli jira field list # List all fields
atlcli jira field list --custom # Custom fields only
atlcli jira field list --system # System fields only
atlcli jira field get --id <id>
atlcli jira field search <query> # Search fields by name
atlcli jira field options --id <id> # List field options
Terminal window
atlcli jira export --jql <query> --format csv -o <file>.csv
atlcli jira export --jql <query> -o <file>.json
atlcli jira export --jql <query> -o <file>.json --no-comments --no-attachments
atlcli 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-run
Terminal window
# Start local webhook server (use with ngrok/cloudflare tunnel)
atlcli jira webhook serve # Port 8080, path /webhook
atlcli jira webhook serve --port 3000 --path /jira
atlcli jira webhook serve --port 3000 --projects PROJ,TEAM
atlcli jira webhook serve --port 3000 --events jira:issue_updated
atlcli jira webhook serve --secret <secret> # HMAC validation
# Manage registered webhooks
atlcli jira webhook list # List registered webhooks
atlcli 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 webhook
atlcli 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

TypeScript automation for Jira and Confluence. Writes are planned and applied separately; see Automation Scripts and the Script API.

Terminal window
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 CI
atlcli script run <file> --apply # Plan, ask, apply
atlcli script run <file> --apply --yes # Plan and apply without asking
atlcli script run -e '<code>' # Inline code
atlcli 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.render
atlcli 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 stopped
atlcli script apply plan.json --concurrency 8 # Independent operations in parallel
atlcli script run <file> --each "<jql>" # Per-issue job: plan once per issue
atlcli script run <file> --each "<jql>" --apply --yes # Plan and apply issue by issue
atlcli script apply <job-id> --yes # Apply a reviewed per-issue job
atlcli script resume <job-id> [--script <file>] # Continue a job that stopped
atlcli script jobs [job-id] # List jobs, or show one
atlcli script check <file> # Validate meta and imports, type-check with tsc
atlcli 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 plans
atlcli script test <file> --update # Rewrite the expected plans
atlcli script init [dir] # atlcli.d.ts, tsconfig.json, example.ts
atlcli 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.

Variables for copies and templates; see Templating.

Terminal window
atlcli template vars --jira-template <name> # Variables of a saved Jira template
atlcli template vars --issue <key> # ... of a template issue
atlcli template vars --jql <query> # ... of template issues (up to 500)
atlcli template vars --page <id> [--tree] # ... of a template page or page tree
atlcli template vars --file <path> # ... of a local .json Jira template or .md wiki template
atlcli template vars ... --json # Includes a values: skeleton for --vars-file
Terminal window
atlcli log list # List recent entries
atlcli log list --limit <n>
atlcli log list --since <duration>
atlcli log list --since <date> --until <date>
atlcli log list --level error
atlcli log list --level warn
atlcli log list --type api
atlcli log list --type cli.command
atlcli log list --type sync
atlcli log tail -f # Follow logs
atlcli log tail -f --level error
atlcli log tail --project # Project logs only
atlcli log show <id> # Show entry details
atlcli log clear --before <duration> --confirm
atlcli log clear --before <duration> --global --confirm
atlcli log clear --before <duration> --project --confirm
Terminal window
atlcli plugin list # List all plugins
atlcli plugin list --enabled
atlcli plugin enable <name>
atlcli plugin disable <name>
atlcli plugin install <path> # Install from local path
atlcli plugin remove <name>

Feature flags control experimental or optional functionality. Flags can be set at three levels with decreasing precedence: environment variables, project config, global config.

Terminal window
atlcli flag list # List all flags with sources
atlcli flag ls # Alias for list
atlcli flag get <name> # Get a flag value
atlcli flag get helloworld
atlcli flag set <name> <value> # Set flag (project-level)
atlcli flag set helloworld true
atlcli flag set export.backend libreoffice --global # Set globally
atlcli flag unset <name> # Remove flag (project-level)
atlcli flag rm <name> # Alias for unset
atlcli flag unset helloworld --global # Remove from global config

Flag 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

Terminal window
atlcli digest # Since the last run (first run: 24h)
atlcli digest --since 7d --no-mark # Peek without moving the marker
atlcli digest --only jira --board <id> # Jira only, with the active sprint
atlcli 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 output
ANTHROPIC_API_KEY=... atlcli digest --summarize

See Daily Digest.

Terminal window
atlcli tui # Jira: your open issues
atlcli tui --project ABC --board 42 # Navigator on that project and board
atlcli tui --jql 'project = ABC AND sprint IN openSprints()'
atlcli tui --area wiki --space DOCS # Wiki: that space's page tree

Needs an interactive terminal; it fails in CI or a pipe. See Terminal UI.

Terminal window
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.md

Normal 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.

Test command to verify the feature flag system works. Only available when flag.helloworld is true.

Terminal window
# Enable the command
atlcli flag set helloworld true
# Run it
atlcli 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 false

Purpose: 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.

Terminal window
atlcli skill # Print SKILL.md
atlcli skill references/safety.md # Print one file of the skill
atlcli skill --list # List the files
atlcli skill --install .claude/skills # Write the skill to .claude/skills/atlcli/

See Agent Skill.

Terminal window
atlcli update # Check for and install updates
atlcli update --check # Check only, don't install
Terminal window
atlcli version # Show version
atlcli --version # Same as above
atlcli -v # Short form
Jira and Confluence are trademarks of Atlassian Corporation Plc. atlcli is not affiliated with, endorsed by, or sponsored by Atlassian.