{
  "markdown": "# jira-cli\n\n**Unofficial** command-line tool and interactive terminal UI (TUI) for reading\nand browsing [Jira Cloud](https://www.atlassian.com/software/jira) issues.\nSupports multi-instance configuration, local-first SQLite cache, and outputs\nhuman-readable or JSON issue views.\n\nThe application ships as a single self-contained binary (`jira`) built with\nRust. No interpreter or runtime is required on the target.\n\n> ## Unofficial — not affiliated with Atlassian\n>\n> This is an independent, community-built project. It is **not** an official\n> Atlassian product and is **not affiliated with, endorsed by, sponsored by,\n> or supported by** Atlassian. **\"Jira\" and \"Atlassian\" are trademarks of\n> their respective owners** and are used here **only** to describe compatibility\n> with the Jira Cloud REST API. This tool stores no credentials beyond a local\n> API token, sends that token only to your configured host, and is provided\n> \"as is\", without warranty. Use at your own risk.\n\n---\n\n## Quickstart\n\nFrom zero to your first issue in three steps:\n\n```sh\n# 1. Install (macOS / Linux — Windows: see the PowerShell one-liner below)\ncurl -fsSL https://raw.githubusercontent.com/ejklock/jira-cli/main/install.sh | sh\n\n# 2. Register your Jira Cloud instance.\n#    Prompts once for an API token — the token is stored locally in SQLite.\njira setup add --name work --url https://yourorg.atlassian.net --email you@example.com\n\n# 3. Fetch an issue\njira get PROJ-123\n```\n\nThen, day to day:\n\n```sh\njira                    # issues assigned to you (TTY) or help (non-TTY)\njira get PROJ-123       # a specific issue by key or full URL\njira current            # the issue for your current git branch\njira mine --json        # machine-readable output for scripts and agents\n```\n\n---\n\n## Install\n\n### macOS / Linux (curl one-liner)\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/ejklock/jira-cli/main/install.sh | sh\n```\n\nThe script downloads the pre-built `jira` binary for your platform from the\nlatest GitHub Release and places it on your PATH.\n\n### Windows (PowerShell one-liner)\n\n```powershell\nirm https://raw.githubusercontent.com/ejklock/jira-cli/main/install.ps1 | iex\n```\n\nInstalls `jira.exe` into `%LOCALAPPDATA%\\Programs\\jira` and adds it to your\nuser PATH.\n\n### Manual download\n\nDownload the pre-built binary for your platform from the\n[Releases page](https://github.com/ejklock/jira-cli/releases), place it on your\nPATH, and make it executable (`chmod +x jira` on Unix).\n\n| Platform | Asset |\n|---|---|\n| Linux x86\\_64 | `jira-linux-x86_64` |\n| macOS x86\\_64 (Intel) | `jira-macos-x86_64` |\n| macOS arm64 (Apple Silicon) | `jira-macos-arm64` |\n| Windows x86\\_64 | `jira-windows-x86_64.exe` |\n\n### Build from source (Docker required)\n\nNo local Rust toolchain needed. The crate is at the repo root; Docker provides\nthe build environment.\n\n```sh\n# Development build\ndocker compose run --rm dev cargo build\n\n# Release binary (placed in target/release/jira)\ndocker compose build\ndocker compose run --rm build\n```\n\n---\n\n## Commands\n\n### setup — manage instances\n\n```sh\n# Register a Jira Cloud instance (interactive wizard prompts for missing fields)\njira setup add\njira setup add --name work --url https://yourorg.atlassian.net --email me@example.com\n# API token is always entered hidden via a prompt — never passed as a flag.\n\n# List configured instances (tokens never shown)\njira setup list\n\n# Remove an instance and its cached issues\njira setup remove --name work\n\n# Test connectivity to all (or one) configured instance\njira setup test\njira setup test --name work\n\n# Show the current display language\njira setup language\n\n# Set the display language (persists to SQLite; survives across invocations)\njira setup language en\njira setup language pt-BR\n```\n\n### get — fetch an issue by key or URL\n\n```sh\njira get PROJ-123\njira get https://yourorg.atlassian.net/browse/PROJ-123\n```\n\n### current — fetch the issue from the current git branch\n\nBranch must contain a valid Jira issue key (e.g. `PROJ-123`, `feature/PROJ-123`).\n\n```sh\njira current\n```\n\n### mine — list open issues assigned to you\n\n```sh\njira mine\njira list          # alias\n```\n\nWhen run in a terminal (TTY), `mine` opens an interactive arrow-key list of\nyour open issues. When output is piped or redirected (non-TTY), it falls back\nto a plain table suitable for scripts.\n\n### search — search for issues with JQL\n\n```sh\njira search \"assignee = currentUser() AND status = In Progress\"\n```\n\n### browse — interactive TUI\n\nArrow-key terminal browser for your open issues. Navigate projects, view\nissue detail, attachments, and comments.\n\n```sh\njira browse\n```\n\n### comment — post a comment to an issue\n\n```sh\njira comment PROJ-123 -m \"Investigating now.\"\n# or pipe a multi-line comment from stdin:\necho \"Full investigation notes\" | jira comment PROJ-123\n```\n\nWhen invoked without an issue key, `jira comment` resolves the key from the\ncurrent git branch.\n\n### skill — print the agent skill contract\n\n```sh\njira skill jira-ticket   # print the full --json read contract\n```\n\n---\n\n## Authentication\n\n`jira-cli` supports **Jira Cloud only** via Basic auth with an Atlassian API\ntoken. The token is stored locally in a SQLite database. The password is\nnever stored. See the [Atlassian documentation](https://id.atlassian.com/manage-profile/security/api-tokens)\nfor generating API tokens.\n\n---\n\n## Internationalization\n\nThe binary ships with English (default) and Brazilian Portuguese (`pt-BR`)\ntranslations for all user-facing output. Translations are embedded at compile\ntime — no external files required at runtime.\n\n**Durable setting** — persist your preferred language to SQLite:\n\n```sh\njira setup language pt-BR   # set\njira setup language          # show current\n```\n\n**One-off override** — the `JIRA_CLI_LANG` environment variable overrides the\nstored setting for a single invocation:\n\n```sh\nJIRA_CLI_LANG=pt-BR jira browse\n```\n\n**Resolution order:** `JIRA_CLI_LANG` env var → SQLite setting → `en`.\n\n---\n\n## Agent skill\n\n`jira` ships a self-describing **agent skill** for the `--json` read contract,\nso an LLM coding agent can learn how to read your Jira issues non-interactively.\nThe full contract lives in **one place** — inside the binary — and `jira` prints\nit on demand:\n\n```sh\njira skill jira-ticket   # print the full jira-ticket contract\n```\n\n### Install the skill into your agent harness\n\nRun the installer from your project root:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/ejklock/jira-cli/main/install-skill.sh | sh -s -- --harness all\n```\n\n| Harness | Project file (`--scope project`, default) | User-level file (`--scope global`) |\n|---|---|---|\n| Claude Code | `.claude/skills/jira-ticket/SKILL.md` | `~/.claude/skills/jira-ticket/SKILL.md` |\n| pi | `.pi/skills/jira-ticket/SKILL.md` | `~/.pi/agent/skills/jira-ticket/SKILL.md` |\n| Codex CLI | `.codex/skills/jira-ticket/SKILL.md` | `~/.codex/skills/jira-ticket/SKILL.md` |\n| OpenCode | `.opencode/skills/jira-ticket/SKILL.md` | — (install per-project) |\n| GitHub Copilot | `.github/skills/jira-ticket/SKILL.md` | — (install per-project) |\n| Cursor | `.cursor/rules/jira-ticket.mdc` | — (install per-project) |\n\n---\n\n## Configuration\n\n**Database path:** `~/.config/jira/jira.db`\n\nOverride with the `JIRA_DB` environment variable:\n\n```sh\nJIRA_DB=/custom/path/jira.db jira get PROJ-123\n```\n\n---\n\n## Flags\n\n| Flag | Applies to | Effect |\n|---|---|---|\n| `--instance NAME` | `get`, `current`, `mine`, `search`, `browse` | Force a specific configured instance |\n| `--json` | `get`, `current`, `mine`, `search` | Print curated minified JSON for agents |\n| `--refresh` | `get`, `current` | Bypass the cache and re-fetch from the API |\n| `--no-comments` | `get`, `current` | Omit the comments section |\n| `--download-attachments` | `get`, `current` | Download all attachments to the local downloads dir |\n\n---\n\n## Exit codes\n\n| Code | Meaning |\n|---|---|\n| 0 | Success |\n| 1 | Issue not found / HTTP error / parse error |\n| 2 | Usage error, unknown instance, no instances configured, branch mismatch |\n\n---\n\n## Development\n\n```sh\n# Run all tests (unit + integration, including comment-policy gate)\ndocker compose run --rm dev cargo test\n\n# Run only the comment-policy gate\ndocker compose run --rm dev cargo test --test comment_policy\n\n# Lint\ndocker compose run --rm dev cargo clippy --all-targets -- -D warnings\n\n# Format check\ndocker compose run --rm dev cargo fmt --check\n```\n\n---\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 8432,
  "sha": "4df5dcf300b7e3d0b7977f11de0017aeae5c3ea0b41b676fff3288202591a7ec",
  "repo_slug": "ejklock/jira-cli",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_ejklock_jira_cli_docs_index_md_411b06a1/readme"
}