{"id":51162913,"url":"https://github.com/techinpark/jira-cli","last_synced_at":"2026-06-26T16:00:26.594Z","repository":{"id":366594284,"uuid":"1208715374","full_name":"techinpark/jira-cli","owner":"techinpark","description":"Open source Jira CLI for Jira Cloud REST API v3. Manage issues, comments, transitions, worklogs, and JQL from the terminal or LLM agents.","archived":false,"fork":false,"pushed_at":"2026-06-22T13:38:20.000Z","size":355,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-22T14:28:43.960Z","etag":null,"topics":["atlassian","automation","devops","golang","jira","jira-api","jira-cli","jira-cloud","jql","openapi"],"latest_commit_sha":null,"homepage":"https://github.com/techinpark/jira-cli","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/techinpark.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-12T16:49:34.000Z","updated_at":"2026-06-22T13:38:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/techinpark/jira-cli","commit_stats":null,"previous_names":["techinpark/jira-cli"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/techinpark/jira-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techinpark%2Fjira-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techinpark%2Fjira-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techinpark%2Fjira-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techinpark%2Fjira-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/techinpark","download_url":"https://codeload.github.com/techinpark/jira-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techinpark%2Fjira-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34823788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atlassian","automation","devops","golang","jira","jira-api","jira-cli","jira-cloud","jql","openapi"],"created_at":"2026-06-26T16:00:14.744Z","updated_at":"2026-06-26T16:00:26.573Z","avatar_url":"https://github.com/techinpark.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jira CLI for Jira Cloud REST API v3\n\n`jira-cli` is an open source Go CLI for Jira Cloud REST API v3. It helps developers and LLM agents manage Jira issues, comments, transitions, worklogs, projects, and JQL search from the terminal.\n\n## Features\n\n- Easy-to-use Jira Cloud CLI with stable `--json` output\n- Multi-account profile support for multiple Jira sites and teams\n- Issue-focused workflows: `get`, `search`, `create`, `update`, `delete`\n- Comment, transition, and worklog commands\n- `raw` escape hatch for uncovered Jira Platform v3 endpoints\n- LLM-friendly behavior with predictable machine-readable results\n\n## Scope\n\n- Jira Cloud only\n- Compatible with Jira Cloud Platform REST API v3\n- The bundled spec source is the Atlassian Platform v3 swagger\n- Jira Software Agile board and sprint APIs are out of scope for this repository unless added from a separate spec later\n\n## Install\n\n### Go\n\n```bash\ngo install github.com/techinpark/jira-cli@latest\n```\n\n### Homebrew\n\n```bash\nbrew tap techinpark/tap\nbrew install techinpark/tap/jira-cloud-cli\n```\n\nHomebrew installs the binary as `jira-cloud-cli` to avoid name collisions with an existing Homebrew `jira-cli` formula.\n\n## Authentication\n\n`jira-cli` uses Jira Cloud `email + API token` authentication and supports multiple named profiles.\n\nEnvironment variables:\n\n- `JIRA_SITE_URL`\n- `JIRA_EMAIL`\n- `JIRA_API_TOKEN`\n- `JIRA_PROFILE`\n- `JIRA_DEFAULT_PROJECT`\n\nCreate a local profile:\n\n```bash\njira auth init --profile work \\\n  --site-url https://your-team.atlassian.net \\\n  --email you@example.com \\\n  --api-token $JIRA_API_TOKEN \\\n  --default-project ENG\n```\n\nSwitch profiles:\n\n```bash\njira auth list\njira auth use work\njira auth check --profile work\n```\n\nConfig file location:\n\n```text\n~/.config/jira-cli/config.yaml\n```\n\n## Usage\n\n```bash\njira projects list --profile work\njira issues get ENG-123\njira issues search --jql 'project = ENG AND status != Done' --json\njira issues create --project ENG --type Bug --summary 'Crash on launch'\njira issues assign ENG-123 --assignee me\njira comments add ENG-123 --body 'Investigating now'\njira transitions move ENG-123 --transition Done --comment 'Fixed in latest build'\njira worklogs add ENG-123 --time-spent '1h 30m' --comment 'Root cause analysis'\njira users search --query 'jane@example.com'\njira auth whoami\n```\n\n### Assignees and convenience fields\n\nUser references accept `me`, an email, or an `accountId` (Jira Cloud requires an\n`accountId`, which `jira-cli` resolves for you via `users search`):\n\n```bash\njira issues assign ENG-123 --assignee jane@example.com\njira issues assign ENG-123 --unassign\njira issues create --project ENG --type Task --summary 'Release notes' \\\n  --assignee me --labels release,docs --priority High --due 2026-07-01\njira issues update ENG-123 --assignee me --priority Highest\n```\n\n### Pagination\n\n`issues search` uses Jira's enhanced JQL search, which is token-paginated.\n`--limit` is the page size; the response includes a `next_page_token` when more\nresults exist. Fetch the next page by passing it back, or use `--all` to follow\nthe tokens and return every page in one call:\n\n```bash\n# one page (page size 50); note the next_page_token in the JSON\njira issues search --jql 'project = ENG' --limit 50 --json\n\n# fetch the next page\njira issues search --jql 'project = ENG' --page-token \u003cnext_page_token\u003e --json\n\n# fetch every page in one command\njira issues search --jql 'project = ENG' --all --json\n```\n\nAdditional fields can be passed as `--field key=value`. JSON values are supported:\n\n```bash\njira issues create \\\n  --project ENG \\\n  --type Task \\\n  --summary 'Prepare release notes' \\\n  --field labels='[\"release\",\"docs\"]'\n```\n\n### Metadata discovery\n\nTo build a valid create/update payload without guessing, discover the available\nissue types, required fields, allowed values, and custom field IDs:\n\n```bash\n# valid issue types for a project\njira issues create-meta --project ENG --json\n\n# createable fields for one issue type (required flags, allowed values, schema)\njira issues create-meta --project ENG --type Bug --json\n\n# editable fields and allowed values for an existing issue\njira issues edit-meta ENG-123 --json\n\n# map a human field name to its id, e.g. \"Story Points\" -\u003e customfield_10016\njira fields list --json\n```\n\n## Attachments\n\nJira Cloud cannot embed file attachments in the create-issue call, so `jira-cli`\ncreates the issue first and then uploads attachments to it. Use `--attach`\n(repeatable) on `issues create` to do both in one command:\n\n```bash\njira issues create \\\n  --project ENG \\\n  --type Bug \\\n  --summary 'Crash on launch' \\\n  --attach ./crash.log \\\n  --attach ./screenshot.png\n```\n\nAttach files to an existing issue with `issues attach`:\n\n```bash\njira issues attach ENG-123 --file ./crash.log --file ./screenshot.png\n```\n\nList, download, and delete attachments:\n\n```bash\njira attachments list ENG-123\njira attachments download 10042 --out ./crash.log\njira attachments delete 10042\n```\n\nBoth commands return the uploaded attachment metadata as JSON. Jira allows at\nmost 60 files per request and enforces the site's configured maximum attachment\nsize.\n\nBecause Jira creates the issue before attachments are uploaded, `issues create\n--attach` can partially succeed: if an upload fails, the command still prints the\ncreated issue (with its `key`) as JSON and then exits non-zero, so you can retry\nwith `jira issues attach \u003ckey\u003e --file ...`.\n\n## Issue links\n\nDiscover link types, then link or unlink issues. A link is directional: the\n`--outward` issue relates to the `--inward` issue via the type's outward label\n(e.g. for `Blocks`, outward \"blocks\" / inward \"is blocked by\").\n\n```bash\n# available link types and their inward/outward labels\njira links types\n\n# ENG-1 blocks ENG-2\njira links add --outward ENG-1 --inward ENG-2 --type Blocks --comment 'discovered in QA'\n\n# links on an issue (with their link IDs)\njira links list ENG-1\n\n# remove a link by id\njira links delete 10010\n```\n\n## Raw API Calls\n\nUse `raw` when the direct command set does not cover an endpoint yet.\n\n```bash\njira raw GET /rest/api/3/project/search --query maxResults=10\njira raw POST /rest/api/3/search/jql --body '{\"jql\":\"project = ENG\",\"maxResults\":20}'\n```\n\n## LLM Guide\n\nFor LLM agents and automation:\n\n- Prefer `--json`\n- Prefer direct commands for issue workflows\n- Use `jira raw` for uncovered Platform v3 endpoints\n- Treat write commands as side-effectful and require explicit inputs\n- Use named profiles when multiple Jira sites or accounts are involved\n\nMore details: [LLM_GUIDE.md](./LLM_GUIDE.md)\n\n## Security\n\n- API tokens may be stored in the local config for convenience\n- Use local file permissions and OS account security\n- For CI, prefer environment variables over checked-in config\n- Never commit real Jira credentials\n\nSee [SECURITY.md](./SECURITY.md).\n\n## Development\n\n```bash\ngo test ./...\ngo test ./... -cover\ngo build ./...\n```\n\n## Release Automation\n\nTag pushes matching `v*` run GoReleaser through GitHub Actions.\n\nRequired repository secret:\n\n- `TAP_GITHUB_TOKEN`: a GitHub personal access token with permission to create releases in `techinpark/jira-cli` and push formula updates to `techinpark/homebrew-tap`\n\nExample:\n\n```bash\ngit tag v0.1.1\ngit push origin v0.1.1\n```\n\n## Open Source\n\n- [CONTRIBUTING.md](./CONTRIBUTING.md)\n- [CHANGELOG.md](./CHANGELOG.md)\n- [LICENSE](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechinpark%2Fjira-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechinpark%2Fjira-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechinpark%2Fjira-cli/lists"}