# OpenAI CLI
The OpenAI CLI (`openai`) is "The official command-line tool for the OpenAI REST API", published by [[OpenAI]] in October 2026. It's a [[Command Line Interface (CLI)|CLI]] for calling the API from a terminal or a shell script: generate images, upload files, submit batches, read usage. Apache 2.0, written in [[Go]].
It isn't an agent. The README draws the line itself: use [[Codex CLI|Codex]] to get work done, use `openai` "when you want to call a specific API or put API operations in a script". One HN commenter put it in two lines: "Codex = agent harness", "OpenAI CLI = wrapper around API".
## How it works
Commands follow the API's resources: `openai <resource> [subresource...] <command> [flags...]`.
```sh
openai responses create --model gpt-5.5 --input "Say this is a test"
openai models list --format jsonl | jq '.id'
openai images generate --prompt "A tiny orange robot watering a houseplant"
openai batches wait <batch-id> --output-dir ./results
openai admin organization usage completions
```
- **Output.** Readable text by default, even in pipes. `--format` switches to `json`, `jsonl`, `raw` or `yaml`, and `--transform` extracts fields with GJSON paths, so you often don't need [[jq]]
- **Help.** `--help` works on every command, without an API key or a network connection. That's the main argument for using it over `curl`
- **Auth.** `openai help setup` walks you through storing the key. Scripts read `OPENAI_API_KEY` (admin endpoints use `OPENAI_ADMIN_KEY`). There's no login, so it bills API credits
- **Inputs.** `@path` loads JSON or YAML from a file. Set `OPENAI_UNTRUSTED_STDIN=1` when the input isn't yours
- **Coverage.** Images (generated files go to `~/Downloads/gpt-images/`), files, batches, streaming, vector stores, audio, a local tokenizer, webhook testing and shell completion
- **Debugging.** `--debug`, `--debug-body` and `--debug-sse`. The README warns that these logs "can contain sensitive data"
Install it with `brew install openai/tools/openai`, `go install github.com/openai/openai-cli/cmd/openai@latest` (Go 1.26+) or a release binary. Release installs update themselves during interactive runs; `OPENAI_CLI_NO_AUTO_UPDATE=1` turns that off. Pull requests are only accepted from collaborators.
## Reception on Hacker News
The repo got 244 points and 111 comments (around 2026-10-22).
- **Naming.** isodev found the overlap with Codex confusing. haaz thought the split made sense: one tool runs your API workspace, the other is a consumer agent product
- **Why not curl?** gavinray posted near-identical `curl` calls. Replies pointed to discoverability and `-h` help, and jubilanti compared it to the [[GitHub CLI]]. td521534f12 noted that the `curl` version leaks the API key into the process list
- **Docs.** yipinwong said the README never explains why or when to use it: "This is not AX (agent experience) friendly" ([[Agent Experience (AX)]])
- **Billing.** albert_e asked whether it draws on a ChatGPT subscription or API credits, and nobody answered in the thread
- A long side debate argued that an LLM could generate a wrapper like this in an afternoon, and whether such code can be trusted
## My take
This belongs to the same wave as the [[Cloudflare CLI]]: vendors shipping one typed CLI over their whole API because agents drive shells better than they read API docs. For me, the value is `--help` without a network call and the JSON/JSONL output. An agent can discover the API and pipe results into the next step, without me pasting docs into the context.
I wouldn't use it for one-off chat (Codex or [[Simon Willison]]'s [[llm CLI|`llm`]] do that better). Where I'd use it is batch jobs and usage reports in scripts, with the key in the environment instead of on the command line.
## References
- Source code: https://github.com/openai/openai-cli
- Hacker News discussion: https://news.ycombinator.com/item?id=50191507
## Related
- [[OpenAI]]
- [[Codex CLI]]
- [[OpenAI Codex]]
- [[Cloudflare CLI]]
- [[GitHub CLI]]
- [[Command Line Interface (CLI)]]
- [[Agent Experience (AX)]]
- [[jq]]
- [[Go]]
- [[Cloudflare Forge]]
- [[llm CLI]]