{"slug": "show-hn-atl-a-rust-cli-for-jira-confluence-and-bitbucket-with-15ms-overhead", "title": "Show HN: atl, a Rust CLI for Jira, Confluence and Bitbucket with ~15ms overhead", "summary": "A developer released atl, an open-source Rust command-line tool for Atlassian's Jira, Confluence, Bitbucket, Jira Service Management, Trello and Atlassian Admin, with roughly 15ms of overhead per command. atl ships with a built-in MCP server exposing 136 Atlassian tools to any MCP client, an --agent flag that returns one JSON line per command without prompting, and installable skills for agents such as Claude Code, Codex and Cursor. The single-binary tool works on Atlassian Cloud and self-hosted Data Center, reaches all 3,085 public Atlassian REST operations via atl api, and is installable through a shell script, Homebrew or Cargo.", "body_md": "**Use Jira, Confluence and Bitbucket from your terminal, or let your AI agent use them for you.**\n\n`atl` is one command-line tool for Atlassian, and it is agent ready from the first command. Claude Code, Codex, Cursor and other agents can find issues, update pages and review pull requests with the same commands you type, through a JSON mode that never stops to ask a question, a built-in MCP server, and installable skills.\n\nIt works with Jira, Confluence, Bitbucket, Jira Service Management, Trello and Atlassian Admin, on Atlassian Cloud and on self-hosted Data Center. The commands are the same on both.\n\n```\natl jira issue list -a me -s ~Done\n```\n\nThat command lists your open issues. Most of what you do in `atl` reads like that.\n\nOn macOS or Linux:\n\n```\ncurl -LsSf https://raw.githubusercontent.com/racetozero/atlassian-toolkit/main/install.sh | sh\n```\n\nOn Windows:\n\n```\npowershell -ExecutionPolicy ByPass -c \"irm https://raw.githubusercontent.com/racetozero/atlassian-toolkit/main/install.ps1 | iex\"\n```\n\nOr use Homebrew (`brew install racetozero/tap/atl`) or Cargo (` cargo install atl`).\n\n`atl` is a single file with nothing else to install. When a new version is out, `atl` prints a short notice after a command, and `atl update` installs it.\n\nThen sign in with `atl auth login` ([details](#sign-in)).\n\n- **Agent ready.** Add`--agent` and every command prints one JSON line. Nothing prompts. When a value is missing, the error lists the valid choices, so the agent gets it right on the next try. Destructive commands wait for`--yes` .\n- **MCP built in.**`atl mcp` serves 136 Jira, Confluence, Bitbucket, JSM, Trello and Admin tools to any MCP client, with no extra server to install.\n- **Skills for your agent.** One core skill and one per product teach the commands. Install them with`npx skills add racetozero/atlassian-toolkit` or`atl skill --install` .\n- **Safe by default for automation.** A read-only login blocks every write in the CLI, the MCP server and the SDKs alike.\n- **Cloud and Data Center.** One tool and one set of commands for both, so a migration does not change your scripts.\n- **Every API, not only the common ones.**`atl api` reaches all 3,085 public Atlassian REST operations with your normal login.\n- **Confluence in Markdown.** Pull pages to Markdown, edit them in your editor, keep them in git, and push them back.\n- **Knows your branch.** On`feature/ABC-123-login-fix` ,`atl jira issue view` opens`ABC-123` without the key.\n- **Output for the reader.** Tables in a terminal, JSON in a pipe, plus CSV,`--select` and`--jq` when you need them.\n- **A full-screen browser.**`atl browse` lets you move through issues, filters and spaces with the arrow keys.\n- **Every sign-in your company uses.** API tokens, scoped tokens, OAuth, personal access tokens, SSO cookies and client certificates.\n- **Build on it.** The same tasks are in SDKs for Python 3.11+, TypeScript on Node, Bun and Deno, browser WebAssembly, and Rust.\n- **One fast file.** A single native binary with nothing else to install.`atl update` keeps it current.\n\n- **Developers.** You can update a ticket, open a pull request and check a build without leaving your editor. If your branch is named`feature/ABC-123-login-fix` ,`atl` knows you're working on`ABC-123` , so you don't type the key.\n- **People who write docs.** Write Confluence pages in Markdown, in your own editor and in git.`atl` converts them to Confluence format and back. You can export a whole page tree to a folder and publish it again later.\n- **Support and service desk teams.** Read the queue, reply to customers, approve requests and see how much SLA time is left.\n- **Admins and automation.** Every command prints JSON when its output goes to a script. There are SDKs for Python, TypeScript and Rust, and a mode made for AI coding agents.\n\n**Start your day.** See what's assigned to you, then open the issue for the branch you're on:\n\n```\natl jira issue list -a me -s ~Done\natl jira issue view\n```\n\n**Move work along.** Change the status, leave a comment, or move several issues at once:\n\n```\natl jira issue move ABC-12 Done --comment \"Fixed in v2.3\"\natl jira issue move ABC-12 ABC-13 ABC-14 \"In Review\"\n```\n\nIf you leave out the status, `atl` lists the ones you can choose. When `atl` needs a value you didn't give, it shows the options and lets you pick one.\n\n**Report a bug from a file you already wrote:**\n\n```\natl jira issue create -p ABC -t Bug -s \"Login fails on Safari\" --body-file bug.md\n```\n\n**Keep docs in Markdown.** Pull a page down, edit it, and push it back. `atl` updates the version number for you.\n\n```\natl confluence page get DOCS:Handbook > handbook.md\natl confluence page update DOCS:Handbook --file handbook.md\n```\n\nTo keep a whole section of your wiki in a git repository:\n\n```\natl confluence page export DOCS:Handbook -r --dest docs/\natl confluence page push docs/\n```\n\n**Ship code.** Open a pull request from your current branch, check its builds, and merge:\n\n```\natl bitbucket pr create -t \"Fix login on Safari\"\natl bitbucket pr checks 42\natl bitbucket pr merge 42 --strategy squash\n```\n\n**Handle the service desk:**\n\n```\natl jsm request list --desk HELP\natl jsm request approve HELP-7\n```\n\n**Look around.** `atl browse` opens a full-screen view of your issues, filters and Confluence spaces in the terminal. You can move through issues with the arrow keys, preview them, and change their status.\n\nTo see every command, read [the command guide](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/commands.md) or add `--help` to any command.\n\nThe everyday commands cover common work. For everything else, `atl api` gives you every public Atlassian REST API: 3,085 operations, built from Atlassian's own API specs. You use your normal login, and you don't write any HTTP code.\n\n```\natl api jira issues get-issue --issue-id-or-key ABC-12\natl api jira get /rest/api/3/serverInfo\natl auth login\n```\n\nA short form asks which product you use, its address, and your token. `atl` checks the token with the server before it saves it, then keeps it in a config file in `~/.config/atl` that only you can read. There is no keychain dialog, so agents and scripts never stop to wait for one.\n\n`atl` supports the ways companies usually sign in to Atlassian:\n\n- **Cloud:** API tokens, scoped tokens and single sign-on through OAuth.\n- **Data Center:** personal access tokens, passwords, SSO session cookies and client certificates.\n\nIn CI, you can set environment variables instead of signing in. [Sign-in details](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/auth.md).\n\n`atl` changes its output for the reader. In a terminal you get tables and readable text. In a pipe you get JSON. With `--agent`, every command prints one short JSON line, and `atl` never stops to ask a question. This makes it a good tool for AI coding agents such as Claude Code and Codex.\n\nIf an agent leaves out a value, the error lists the values it can use, so the agent can retry once and succeed.\n\nTo keep an agent from changing anything, give it a read-only login (`atl auth login --read-only`). The check is in `atl`'s core, so the same rule covers the CLI, the MCP server and the SDKs.\n\nAgent skills teach your agent the commands. There is one core skill and one for each product. Install them with the [skills](https://github.com/vercel-labs/skills) CLI, which works with Claude Code, Codex, Cursor and other agents, or with `atl` itself:\n\n```\nnpx skills add racetozero/atlassian-toolkit     # or: bunx skills add racetozero/atlassian-toolkit\natl skill --install                             # writes them to .claude/skills/\n```\n\n`atl mcp` also runs an MCP server for tools that use the Model Context Protocol. [More for agents](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/agent-mode.md).\n\nThe CLI is built on a library, and you can use the same library in your own code. It is available for Python, TypeScript (Node.js, Bun, Deno and browsers) and Rust. A task has the same path in every language as in the CLI: `atl jira issue list` is `client.jira.issue.list(...)`. The arguments and results are typed, and Python has an asyncio client too.\n\n``` python\nimport atl_sdk\n\nissues = atl_sdk.Client().jira.issue.list(project='ABC').issues\njs\nimport { Client } from \"atlassian-toolkit\"\n\nconst { issues } = await Client.fromEnv().jira.issue.list({ project: \"ABC\" })\n```\n\n`atl` adds little time to a request. Against a real Jira Cloud site, `atl jira issue view` takes 222 ms at p50 and 307 ms at p99 (50 runs), and almost all of that time is the server's response.\n\nThe table shows `atl`'s own cost. Each time is one `atl` process, from start to exit, against a mock server on the same machine that answers at once. The bulk move is different: each request waits 100 ms, as on a remote site, and `atl` sends up to 8 requests at a time, so moving 8 issues takes about as long as moving one.\n\n| Command | p50 | p99 | \n|---|---|---|\n| `atl --version` | 9 ms | 18 ms | \n| `atl --help` | 8 ms | 18 ms | \n| `atl convert --to adf` (Markdown to ADF) | 9 ms | 23 ms | \n| `atl convert --from storage --to markdown` | 9 ms | 22 ms | \n| `atl schema jira.getIssue` | 11 ms | 16 ms | \n| `atl api jira issues get-issue --dry-run` | 11 ms | 25 ms | \n| `atl mcp` : start and list the tools | 11 ms | 27 ms | \n| `atl mcp` : start and search operations | 17 ms | 56 ms | \n| `atl jira issue list` | 16 ms | 30 ms | \n| `atl jira issue view` | 15 ms | 27 ms | \n| `atl api jira issues get-issue` | 18 ms | 82 ms | \n| `atl confluence page get` | 14 ms | 25 ms | \n| `atl jira issue move` with 8 issues, 100 ms per request | 225 ms | 267 ms | \n\nMeasured with `just bench` on an Apple M4 (10 cores) with macOS 27, using the release build: 500 runs of each local command, 300 of each command that calls the server, and 100 of the bulk move. The median peak memory of each command is 21 MiB or less.\n\n- [Commands](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/commands.md) : every command, with examples\n- [Signing in](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/auth.md) : tokens, OAuth, SSO and the config file\n- [The `atl api` commands](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/api.md) : output formats, errors, retries and debugging\n- [Agents and MCP](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/agent-mode.md)\n- [SDKs](https://github.com/racetozero/atlassian-toolkit/blob/main/docs/sdk.md)\n- [Contributing](https://github.com/racetozero/atlassian-toolkit/blob/main/CONTRIBUTING.md)\n\nMIT", "url": "https://wpnews.pro/news/show-hn-atl-a-rust-cli-for-jira-confluence-and-bitbucket-with-15ms-overhead", "canonical_source": "https://github.com/racetozero/atlassian-toolkit", "published_at": "2026-11-15 19:06:04+00:00", "updated_at": "2026-11-15 19:22:47.917070+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["atl", "Atlassian", "Jira", "Confluence", "Bitbucket", "Claude Code", "Codex", "Cursor"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-atl-a-rust-cli-for-jira-confluence-and-bitbucket-with-15ms-overhead", "markdown": "https://wpnews.pro/news/show-hn-atl-a-rust-cli-for-jira-confluence-and-bitbucket-with-15ms-overhead.md", "text": "https://wpnews.pro/news/show-hn-atl-a-rust-cli-for-jira-confluence-and-bitbucket-with-15ms-overhead.txt", "jsonld": "https://wpnews.pro/news/show-hn-atl-a-rust-cli-for-jira-confluence-and-bitbucket-with-15ms-overhead.jsonld"}}