🌐 한국어 | English
Atlassian Cloud CLI — Jira + Confluence. 단일 Rust 바이너리. OAuth 2.0 (3LO, ⭐ 권장), Service Account, Scoped API token, Basic (classic API token) 네 가지 인증 방식 지원.
# 1. 설치
curl -fsSL https://raw.githubusercontent.com/junyeong-ai/atlassian-cli/main/scripts/install.sh | bash
export PATH="${INSTALL_DIR:-$HOME/.local/bin}:$PATH"
# 2. 설정 초기화
atlassian-cli config init --global
# 3. 설정 편집 — 아래 "인증" 섹션에서 oauth / service_account / scoped_token / basic 중 선택
atlassian-cli config edit --global
# 4. (oauth 인 경우만) 브라우저로 로그인
atlassian-cli auth login
# 브라우저가 없는 환경에서는 위 명령 대신: atlassian-cli auth login --no-browser
# 5. 검증
atlassian-cli config validate
# 6. 사용
atlassian-cli jira search "project = PROJ" --limit 5# 읽기
atlassian-cli jira get PROJ-123 --format markdown
atlassian-cli jira search "assignee = currentUser()" --limit 10
atlassian-cli jira search "project = PROJ" --all --stream > issues.jsonl
atlassian-cli jira comment list PROJ-123 --format markdown
atlassian-cli jira transition list PROJ-123
# 쓰기 (plain text는 자동으로 ADF로 변환됨)
atlassian-cli jira create PROJ "Summary" Bug --description "Plain text"
atlassian-cli jira create PROJ "Summary" Sub-task --parent PROJ-123
atlassian-cli jira create PROJ "Summary" Task --fields '{"components":[{"name":"api"}]}'
atlassian-cli jira update PROJ-123 '{"summary":"New title"}'
atlassian-cli jira comment add PROJ-123 "Comment"
atlassian-cli jira comment update PROJ-123 10042 "Edited"
atlassian-cli jira transition apply PROJ-123 31
atlassian-cli jira delete PROJ-123 --yes # 영구 삭제 (--yes 필수)
# 링크 · 작업시간 · 와처
atlassian-cli jira link add PROJ-1 PROJ-2 --type Blocks
atlassian-cli jira worklog add PROJ-123 "2h 30m" --comment "조사"
atlassian-cli jira watcher add PROJ-123
# 애자일 — 보드 · 스프린트 · 에픽
atlassian-cli jira sprint list --project PROJ
atlassian-cli jira sprint move 55 PROJ-1 PROJ-2
atlassian-cli jira epic assign EPIC-1 PROJ-1# 읽기
atlassian-cli confluence search "space = TEAM" --limit 10
atlassian-cli confluence get 123456 --format markdown
atlassian-cli confluence children 123456
atlassian-cli confluence comment list 123456 --format markdown # 대댓글·인라인 댓글 모두 포함
# 페이지 (HTML storage format)
atlassian-cli confluence create TEAM "Title" "<p>Content</p>"
atlassian-cli confluence update 123456 "Title" "<p>Updated</p>"
atlassian-cli confluence delete 123456 --yes # 휴지통 (--yes 필수)
# 댓글 · 라벨 · 콘텐츠 속성
atlassian-cli confluence comment list 123456 --location inline # 본문에 앵커된 댓글만
atlassian-cli confluence comment list 123456 --roots-only # 최상위 댓글만
atlassian-cli confluence comment get 67890 # 댓글 id 로 단건 조회
atlassian-cli confluence comment replies 67890 # 한 스레드만
atlassian-cli confluence comment add 123456 "<p>리뷰 완료</p>"
atlassian-cli confluence comment add 123456 "<p>답글</p>" --reply-to 67890
atlassian-cli confluence label add 123456 needs-review
atlassian-cli confluence property set 123456 review '{"status":"done"}'
# 스페이스 · 첨부
atlassian-cli confluence space list
atlassian-cli confluence attachment upload 123456 ./diagram.pngatlassian-cli --pretty jira get PROJ-123 | jq -r '.fields.summary'
atlassian-cli --profile work jira search "..."
atlassian-cli -v jira search "..." # -v/-vv/-vvv: info/debug/trace자동 설치 (권장):
curl -fsSL https://raw.githubusercontent.com/junyeong-ai/atlassian-cli/main/scripts/install.sh | bash최신 릴리스의 사전 빌드 바이너리를 설치하고, 그 바이너리가 자기 안에 담고 있는 jira-confluence Claude Code skill 을 ~/.claude/skills 에 배포합니다.
# 특정 릴리스 설치
curl -fsSL https://raw.githubusercontent.com/junyeong-ai/atlassian-cli/main/scripts/install.sh | ATLASSIAN_CLI_VERSION=v0.13.9 bash
# 이후 업데이트·제거는 바이너리가 직접 한다 (설치 스크립트 재실행 불필요)
atlassian-cli self update
atlassian-cli self uninstall --yes설치 후 생명주기는 self 명령군이 담당합니다 — 아래 설치 관리 참조.
소스 빌드 (Linux/macOS):
git clone https://github.com/junyeong-ai/atlassian-cli
cd atlassian-cli
cargo install --path . --locked --root "$HOME/.local" --target "$(rustc --print host-tuple)"
export PATH="$HOME/.local/bin:$PATH"
atlassian-cli --version소스 설치는 rust-toolchain.toml의 도구체인으로 현재 호스트용 바이너리를 빌드해 $HOME/.local/bin에 설치합니다. 다른 방식으로 설치한 바이너리를 교체하려면 cargo install에 --force를 추가하세요. 새 터미널에서도 실행하려면 위 export PATH를 사용하는 셸의 시작 파일에 추가하세요. 스킬은 atlassian-cli self skill install로 별도 설치합니다.
지원 플랫폼: Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), Windows (x86_64). install.sh 자동 설치는 Linux/macOS용이며, Windows는 Release의 .zip에서 atlassian-cli.exe를 풀어 사용자 PATH에 등록된 폴더에 둡니다. 모든 플랫폼이 .tar.gz 를 발행하므로 self update 는 어디서나 동작합니다.
atlassian-cli self status # 버전·경로·skill 상태·토큰을 가진 프로파일 (네트워크 없음)
atlassian-cli self update # 최신 릴리스로 교체
atlassian-cli self update --version 0.10.0 # 특정 버전 (다운그레이드는 명시할 때만 허용)
atlassian-cli self update --verify-attestations # GitHub build provenance 까지 검증 (gh CLI 필요)
atlassian-cli self update --force # 이미 그 버전을 보고하는 바이너리도 다시 교체 (재설치)
atlassian-cli self skill install # skill 재배포
atlassian-cli self skill remove --yes
atlassian-cli self uninstall --yes [--keep-skill] [--keep-credentials] [--purge-config]- skill 은 바이너리에 컴파일되어 들어가므로, 바이너리가 들고 다니는 사본은 언제나 자기 것입니다. 디스크에 배포된 사본은 별개이고,
self status가 그걸 바이트 비교로 판정해 직접 수정했거나 다운그레이드가 남긴 이전 버전을stale로 잡습니다. self update는 내려받은 바이너리를 교체 전에 실행해 버전을 확인합니다. 이 기계에서 돌지 않는 바이너리는 아무것도 건드리지 않고 실패합니다.self uninstall은 OS 키체인에 남은 OAuth 토큰까지 지웁니다 (--keep-credentials로 보존). 키체인이 있는데 읽을 수 없으면(잠김, 또는ATLASSIAN_NO_KEYCHAIN로 열람 금지) 거부합니다 — 토큰을 남긴 채 바이너리만 사라지는 게 최악이기 때문입니다. 키체인이 응답하지 않는 환경에서는 두 번에 나눠 끝납니다 — 첫 실행이credentials.json을 지우고 지운 것을 밝히며 거부하고,--keep-credentials로 두 번째 실행이 완료합니다.auth logout도 응답하지 않는 키체인에 대해서는 같은 이유로 0이 아닌 코드로 끝납니다 — 모든 릴리스 타깃이 키체인을 포함하므로 "닿지 못함"을 "없음"으로 읽을 수 없습니다.ATLASSIAN_NO_KEYCHAIN이 켜져 있을 때는 0으로 끝나고 키체인을 건드리지 않았다고 알립니다 — 물어본 적이 없기 때문이며, 거기 있는 것을 지우려면 플래그를 한 번 끄고 실행하면 됩니다.--purge-config는 이 도구가 쓴 설정 파일을 지우고 디렉터리는 비었을 때만 지우므로,--keep-credentials와 함께 써도credentials.json은 남습니다. 비밀정보가 없는credentials.json.lock이 남아 있으면 디렉터리도 보존됩니다. 프로젝트 로컬 설정(.atlassian.toml)은 건드리지 않습니다. Requirement: 소스 빌드 최소 지원 버전은 Rust 1.98.0이며, 기본 도구체인은 Rust 1.99.1입니다.
네 가지 방식을 명시적으로 선택해야 합니다 (자동 판별 없음):
| 방식 | 행위자 | 요청 호스트 | 특징 |
|---|---|---|---|
basic |
본인 (API token 발급자) | {domain} |
가장 단순. classic (unscoped) 토큰 전용 |
scoped_token |
본인 (API token 발급자) | api.atlassian.com |
scope 가 붙은 토큰 전용. 토큰에 부여한 scope 로 권한 제한 |
service_account |
비인간 service account | api.atlassian.com |
자동화·CI 용. 별도 principal |
oauth |
본인 (대화형 로그인) | api.atlassian.com |
사용자 권한 그대로 + refresh token 자동 관리 |
두 토큰 방식은 서로의 토큰을 받지 않습니다. 사이트 호스트는 scope 가 붙은 토큰을 조용히 무시해 401 을 돌려주고, 게이트웨이는 classic 토큰을 거부합니다. 401 응답의 hint는 토큰 만료·인증 방식 불일치·권한 부족 등 확인할 원인을 안내합니다. 토큰 종류와 scope를 확인한 뒤 설정을 변경하세요.
브라우저로 로그인하면 토큰이 OS keychain (또는 0600 파일)에 저장됩니다. Refresh token이 있으면 만료 5분 전에 갱신하고, 없으면 access token의 실제 만료까지 사용합니다.
# ~/.config/atlassian-cli/config.toml
[default]
[default.auth]
method = "oauth"
client_id = "..." # developer.atlassian.com 에서 발급
client_secret = "..." # 권장: ATLASSIAN_CLIENT_SECRET env var
redirect_port = 8976 # OAuth app 에 등록한 redirect URI 와 일치 (127.0.0.1:8976/callback)
# scopes 미지정 시 기본값 = ["read:jira-user", "read:jira-work", "write:jira-work", "offline_access"]
# Confluence 검색·페이지·스페이스 조회 권한 예시 (쓰기에는 별도 권한 필요):
# scopes = ["read:jira-user", "read:jira-work", "write:jira-work",
# "read:confluence-content.all", "read:page:confluence",
# "read:space:confluence", "offline_access"]
# cloud_id = "..." # 여러 site 접근 가능할 때 1개로 고정기본 Jira 권한 외에 실제 명령에 필요한 scope만 추가하세요. sprint list --project는 보드 조회 권한도 필요합니다.
| 명령 | 추가 OAuth scope | 공식 API |
|---|---|---|
board list |
read:board-scope:jira-software, read:project:jira |
Board |
sprint list --board |
read:sprint:jira-software |
Board sprints |
sprint move |
write:sprint:jira-software |
Sprint |
sprint backlog |
write:board-scope:jira-software |
Backlog |
epic assign/unassign |
write:epic:jira-software |
Epic |
Confluence 쓰기에는 각 API의 scope를 확인하세요. 페이지 속성 변경은 read:page:confluence와 write:page:confluence, 댓글 삭제는 delete:comment:confluence가 필요합니다. 조회 후 변경하는 명령은 두 단계의 권한이 모두 필요합니다. 앱에 scope를 부여하고 프로파일에 명시한 뒤 auth login으로 다시 동의하세요.
헤드리스 / AI 에이전트: 데스크톱 OS 에서 키체인이 GUI 프롬프트로 블로킹될 수 있습니다.
ATLASSIAN_NO_KEYCHAIN=1을 설정하면 키체인을 건너뛰고 0600 파일 저장소를 사용합니다. 환경 단위 설정으로 쓰세요(켰다 껐다 X) — 플래그가 켜진 동안auth logout은 파일만 지웁니다. 이전에 키체인으로 로그인한 적이 있으면 플래그 없이auth logout을 한 번 실행해 키체인을 비우세요.
atlassian-cli auth login # 브라우저 열림 → Atlassian 로그인 → 자동 토큰 저장
atlassian-cli auth status # 만료 시간, scope, 저장 위치 확인
atlassian-cli auth refresh # 수동 갱신 (디버깅용)
atlassian-cli auth logout # 토큰 폐기준비물 — Atlassian developer console (https://developer.atlassian.com/console/myapps/) 에서:
- OAuth 2.0 (3LO) app 생성
- Callback URL 에
http://127.0.0.1:8976/callback등록 (port 는 위 config 와 일치) - Permissions 에서 사용할 scope 부여 (Jira API + 필요 시 Confluence API). 부여하지 않은 scope 를 config 에 적으면 사용자 동의 단계에서 거부됨.
- Settings 에서 client_id / client_secret 복사
export ATLASSIAN_AUTH_METHOD=service_account
export ATLASSIAN_CLIENT_ID="..."
export ATLASSIAN_CLIENT_SECRET="..."
# ATLASSIAN_CLOUD_ID 는 선택 (미지정 시 자동 검색)또는 ~/.config/atlassian-cli/config.toml (chmod 600 권장):
[default.auth]
method = "service_account"
client_id = "..."
client_secret = "..."
# cloud_id = "..." # optionalexport ATLASSIAN_AUTH_METHOD=basic
export ATLASSIAN_DOMAIN=company.atlassian.net
export [email protected]
export ATLASSIAN_API_TOKEN=...또는:
[default]
domain = "company.atlassian.net"
[default.auth]
method = "basic"
email = "[email protected]"
token = "..."API token 발급: https://id.atlassian.com/manage-profile/security/api-tokens
2024-12-15 이전에 발급된 토큰은 2026-03-14 ~ 05-12 사이에 만료되었습니다. Atlassian은 scoped 토큰을 권장합니다. 생성한 토큰의 종류에 맞는 인증 방식을 선택하세요. 공식 토큰 관리 안내를 참고하세요. scope 가 붙은 토큰은 사이트 URL 이 아니라 api.atlassian.com 게이트웨이로만 통합니다.
export ATLASSIAN_AUTH_METHOD=scoped_token
export ATLASSIAN_DOMAIN=company.atlassian.net # cloud_id 를 여기서 자동 해석
export [email protected]
export ATLASSIAN_API_TOKEN=...
# export ATLASSIAN_CLOUD_ID=... # 직접 고정하면 domain 불필요또는:
[default]
domain = "company.atlassian.net"
[default.auth]
method = "scoped_token"
email = "[email protected]"
token = "..."
# cloud_id = "..." # 생략 시 domain 으로부터 해석cloud_id 는 https://{domain}/_edge/tenant_info 로 해석합니다 (인증 불필요). 이 조회는 이 method 에서 사이트 호스트를 건드리는 유일한 부분이라, 매 실행마다 왕복이 한 번 발생합니다 — cloud_id 를 직접 지정하면 사이트 호스트를 아예 거치지 않습니다. 값은 https://admin.atlassian.com 의 사이트 URL 에서도 확인할 수 있습니다.
config validate 는 /myself 로 신원을 확인하므로 토큰에 Jira 읽기 scope 가 필요합니다. Confluence 전용 scope 토큰이면 이 명령은 401 로 실패하지만 토큰 자체는 정상입니다 — confluence space list 같은 가벼운 읽기로 확인하세요.
[default]
[default.auth]
method = "service_account"
client_id = "..."
client_secret = "..."
[work]
domain = "work.atlassian.net"
[work.auth]
method = "basic"
email = "..."
token = "..."사용: atlassian-cli --profile work ...
OAuth scope: 사용하는 엔드포인트가 요구하는 scope를 앱에 허용하고 프로파일의 scopes에 추가한 뒤 auth login을 다시 실행하세요. 프로파일은 계정·사이트·권한 구성을 분리할 때 사용합니다. 공식 OAuth 설정 안내를 참고하세요.
config path/edit는 --config 파일을 우선 선택합니다. --global을 함께 지정하면 글로벌 파일을 선택합니다. --config <파일> config init은 해당 경로에 설정을 생성하며 기존 파일을 덮어쓰지 않습니다. config list는 명시한 파일의 프로필도 포함합니다. config show는 비밀값을 마스킹한 TOML을 출력하며, 프로필 이름과 문자열을 그대로 보존합니다.
EDITOR는 모든 플랫폼에서 POSIX 인용 규칙을 따르는 실행 파일과 인자 목록입니다(예: code --wait). 공백이나 역슬래시가 있는 실행 경로는 변수 값 안에서도 따옴표로 감싸세요. Windows 환경 변수 값의 예는 'C:\Program Files\Microsoft VS Code\Code.exe' --wait입니다.
설정 우선순위는 CLI 플래그 > 환경 변수 > --config 파일 > 프로젝트 설정 > 글로벌 설정입니다. 파일의 운영 설정은 항목을 생략하면 상속하고, []를 명시하면 상위 목록을 지웁니다. [performance]의 일부 값만 지정해도 나머지 값은 상속합니다.
인증은 선택한 프로필에 [auth]가 있는 가장 높은 우선순위 파일의 섹션 전체를 사용합니다. 해당 섹션을 생략하면 하위 파일의 인증 설정을 유지하지만, 섹션 안에서 생략한 자격증명은 하위 파일에서 상속하지 않습니다. 선택한 인증 설정의 각 자격증명에는 CLI 플래그 > 환경 변수 > 설정 파일 순서를 적용합니다. ATLASSIAN_AUTH_METHOD로 method를 바꾸면 기존 파일 인증의 자격증명을 사용하지 않으며, 새 method에 필요한 값을 CLI나 환경 변수로 제공해야 합니다.
프로젝트/스페이스 자동 주입:
[default.jira]
projects_filter = ["PROJ1", "PROJ2"]
[default.confluence]
spaces_filter = ["TEAM1"]JQL status = Open → project IN ("PROJ1","PROJ2") AND (status = Open). JQL에 이미 project 절이 있으면 주입을 건너뜁니다.
성능 튜닝:
[default.performance]
request_timeout_ms = 30000
rate_limit_delay_ms = 200
[default.optimization]
response_exclude_fields = ["self", "avatarUrls", "iconUrl"]REQUEST_TIMEOUT_MS 환경 변수가 request_timeout_ms를, RESPONSE_EXCLUDE_FIELDS 환경 변수가 response_exclude_fields를 덮어씁니다.
401 Unauthorized (basic / scoped_token) — 토큰 만료, 인증 방식 불일치 또는 scope 부족을 확인하세요. Scoped 토큰은 scoped_token, classic 토큰은 basic을 사용합니다. hint는 가능한 원인과 확인할 항목을 안내합니다.
Failed to resolve cloud_id from ... — _edge/tenant_info 조회가 실패했습니다. 사이트 호스트 접근·도메인 설정을 확인하고, 해당 조회를 사용할 수 없다면 cloud_id 를 직접 지정하세요 (ATLASSIAN_CLOUD_ID 또는 [auth].cloud_id).
API 토큰 관리자 차단 (403) — OAuth 2.0 service account로 전환. 관리자에게 OAuth 2.0 client credentials 요청.
Service account token request failed (400: invalid_client) — client_id/client_secret 오타. config validate로 확인.
Multiple Atlassian sites found — service account credential이 여러 사이트 접근 권한을 가짐. cloud_id를 명시.
401 Unauthorized; scope does not match — OAuth scope 부족. 토큰 자체는 유효하니 다른 엔드포인트는 동작할 수 있음. 사용 중인 엔드포인트에 맞는 scope 부여 필요.
Invalid Atlassian domain format — .atlassian.net으로 끝나야 함. 스푸핑 방지.
Profile 'X' not found in any loaded config file — 모든 로드된 config 파일에 해당 profile이 없음. 파일 경로와 철자 확인.
| 명령어 | 설명 |
|---|---|
get <KEY> |
이슈 조회 |
search <JQL> |
JQL 검색 |
create <PROJECT> <SUMMARY> <TYPE> |
이슈 생성. 하위작업은 --parent <KEY> 필수, 프로젝트가 요구하는 나머지 필드는 --fields <JSON> |
update <KEY> <JSON> |
이슈 수정 |
delete <KEY> --yes [--delete-subtasks] |
이슈 영구 삭제 (비가역) |
comment add <KEY> <TEXT> |
댓글 추가 |
comment update <KEY> <COMMENT_ID> <TEXT> |
댓글 수정 |
comment list <KEY> |
댓글 목록 |
comment delete <KEY> <COMMENT_ID> |
댓글 삭제 |
transition list <KEY> |
전환 목록 |
transition apply <KEY> <ID> |
상태 전환 |
link add/remove/list <KEY...>, link types |
이슈 링크. remove 는 이슈 쌍(--type) 또는 --id <링크 id> — 둘 중 하나만 |
worklog add/list/update/remove <KEY> ... |
작업시간 기록. add --started 는 Jira 형식만 받습니다 — 2026-08-22T09:30:00.000+0900 (밀리초 3자리, 오프셋에 콜론 없음) |
watcher add/remove/list <KEY> |
와처 |
list types/priorities/statuses/labels |
전역 메타데이터 조회 |
board list --project <KEY> |
애자일 보드 목록 |
| `sprint list [--project | --board ] [--state active], sprint move/backlog ...` |
epic assign <EPIC> <KEY...>, epic unassign <KEY...> |
에픽 연결 / 해제 |
| 명령어 | 설명 |
|---|---|
search <CQL> |
CQL 검색 |
get <ID> |
페이지 조회 |
create <SPACE> <TITLE> <CONTENT> [--parent <ID>] |
페이지 생성 (HTML; --parent로 부모 페이지 아래 중첩) |
update <ID> <TITLE> <CONTENT> |
페이지 수정 (HTML) |
delete <ID> --yes |
페이지 삭제 (휴지통) |
children <ID> |
하위 페이지 |
comment list <ID> [--location footer|inline] [--roots-only] |
페이지 댓글 — 기본은 footer·inline 두 계열 전부, 대댓글 포함. 항목마다 location·depth·parentCommentId |
comment get <COMMENT_ID> [--location ...] |
댓글 단건 (기본 footer) |
comment replies <COMMENT_ID> [--location ...] |
한 댓글 아래 전체 스레드 |
comment add <ID> <HTML> [--reply-to <COMMENT_ID>] |
footer 댓글 작성 (page id) |
comment update/delete <COMMENT_ID> ... |
댓글 수정 / 삭제 (comment id) |
label list/add/remove <ID> [LABEL] |
페이지 라벨 |
property list/set/delete <ID> [KEY] [JSON] |
콘텐츠 속성 (값은 strict JSON) |
space list, space get <KEY> |
스페이스 조회 |
attachment list <ID>, attachment upload <ID> <FILE> [--content-type <MIME>] [--minor] |
첨부 조회 / 업로드 (--minor: 알림 억제; Content-Type은 확장자에서 자동 매핑, --content-type로 오버라이드) |
| 명령어 | 설명 |
|---|---|
init [--global] |
설정 초기화 |
show |
설정 표시 (secrets 마스킹) |
list |
파일 경로 + 환경변수 상태 |
path [--global] |
활성 설정 파일 경로 |
edit [--global] |
$EDITOR로 편집 |
validate |
전략을 구성하고 신원을 확인 — cloud_id 가 고정된 service account 는 확인할 신원이 없어 해당 사이트로는 요청이 가지 않습니다 |
전체 명령·인자·기본값은 CLI 참조에서 확인할 수 있습니다. 설치된 버전은 atlassian-cli <명령> --help로 확인하세요.
| 옵션 | 설명 |
|---|---|
--pretty |
JSON pretty print (글로벌; 서브커맨드 앞에 위치) |
--profile <NAME> |
설정 프로파일 선택 |
--config <PATH> |
설정 파일 경로 오버라이드 |
--domain --email --token --client-id --client-secret --cloud-id |
인증 필드 오버라이드 — 필드별 우선순위(CLI 플래그 > 환경변수 > 설정 파일)의 최상위 |
-v / -vv / -vvv (--verbose) |
로깅 레벨 (stderr) |
--format markdown |
ADF/HTML content 필드를 Markdown으로 변환 (JSON envelope 유지) |
--all |
search: 전체 페이지네이션 |
--stream |
search --all: JSONL을 stdout으로 |
--fields a,b,c |
jira search/jira get: 반환 필드 지정 (get은 *all로 전체 필드) |
--expand a,b |
confluence search: 확장 필드 |
--limit <N> |
search: 페이지 크기 (Jira --all에서는 무시) |
실행 중 발생한 실패는 stderr로 한 줄짜리 JSON 객체를 출력합니다. 잘못된 옵션·누락된 인자 등 CLI 사용법 오류는 텍스트 도움말과 종료 코드 2를 반환합니다. stdout은 결과 전용입니다. 이미 출력을 시작한 명령도 실패할 수 있습니다 — --stream 은 페이지를 받는 대로 내보내고, auth status 는 확인한 부분까지 보고한 뒤 나머지에서 실패합니다. 출력이 있는지가 아니라 종료 코드를 읽으세요:
{"error":{"message":"Failed to get issue (404 Not Found): ...","operation":"get issue","status":404}}API 실패에는 status/operation이 포함되고, 알려진 해결책이 있으면 hint 필드가 붙습니다 (예: basic 인증에 scoped 토큰 사용). 복제 가능한 요청의 429 (rate limit)는 최대 3회 재시도합니다. Retry-After의 초 단위·HTTP 날짜 형식을 지원하며, 대기 시간이 60초를 넘으면 조기 재시도 없이 종료 코드 5로 반환합니다. Multipart 업로드는 자동 재시도하지 않습니다.
| 종료 코드 | 의미 |
|---|---|
0 |
성공 |
1 |
일반 실패 |
2 |
CLI 사용법 오류 |
3 |
인증/권한 (401, 403) |
4 |
대상 없음 (404) |
5 |
rate limit (429, 재시도 소진) |
6 |
서버 오류 (5xx) |
atlassian-cli completions zsh > "${fpath[1]}/_atlassian-cli" # zsh
atlassian-cli completions bash > /etc/bash_completion.d/atlassian-cli지원: bash, zsh, fish, elvish, powershell.
개발 명령, 아키텍처, 호환성 계약은 AGENTS.md를 참고하세요. 개발 컴파일러는 Rust 1.99.1로 고정하며 최소 지원 버전은 Cargo.toml에서 관리합니다.
설치 스크립트는 jira-confluence 스킬을 사용자 레벨(~/.claude/skills/jira-confluence)에 배포하며, 배포하지 못하면 경고만 남기고 설치 자체는 계속됩니다. 스킬은 바이너리에 컴파일되어 들어 있고 배포는 self skill install 이 합니다 — 어디서 실행하든 배포된 사본은 정의상 그 바이너리의 것입니다.
- GitHub Issues: https://github.com/junyeong-ai/atlassian-cli/issues