OpenAI releases an official CLI that quietly saves images and checks for updates
OpenAI CLI
The openai/openai-cli repository offers a resource-based command-line tool for the OpenAI REST API, installable via Homebrew or Go. It supports API and admin keys, file uploads, image generation saved to ~/Downloads/gpt-images/, and readable output with --format json for scripts. A bare openai run checks for updates at most once a week, never auto-installs, and can be disabled with OPENAI_CLI_NO_UPDATE_CHECK=1.
The CLI never installs updates automatically.
- nater5000
For a site focused on technical users, seems like a lot of people in this thread are completely lost at the idea that a single service may offer multiple pieces of software dedicated to specific use-cases.
codex: OpenAI's agent harness. The thing you typically want to interact with when you want an agent powered by OpenAI models to do stuff on your machine. Abstracts the low-level functionality of their API so you don't have to worry about it.
openai-cli: A simple CLI exposing low-level operations against OpenAI's REST API. The thing you'd use for creating lower-level scripts to directly call the completions API, administer accounts, etc.
Honestly, this is obvious by the name alone. If it's not clear to you, then this isn't for you. No need to get worked up about OpenAI releasing a piece of software where you're not the audience.
- kristopolous
I've been working on something in a similar class for about a year called llcat
It was born out of the lack of LLM-native unix-friendly tools that work like cURL, awk and sed.
I couldn't find any so I wrote one myself.
I knew I wanted a reference that is stateless, explicit, low-level, and composable without modal settings.
For instance, instead of config files, llcat can index into files with built-in jq-syntax and line numbers. Then it can the save invocations for later:
llcat --save invocation.json \
-k "@~/credentials.txt:12" \
-u "@settings.json:.[3].host" \
-s "@system_prompts:8" \
-m "@settings.json:.[3].model" \
"@query.txt:12" > output.txt
and then
llcat --load invocation.json { ... parameters you want to override ... }
It's easy to send to colleagues over chat or keep them invocations in a shared network folder.
Conversations are also just JSON files. You can have a different input and output one. This means you can do stuff like
for i in *; do
# use a non-mutable conversation
# apply it over a group of files with standard unix pipes
cat "$i" | llcat --load settings.json -cr context.json > ../results/"${i}.output"
# or use attachments
llcat --load settings.json -a "$i" -cr context.json > ../results/"${i}.output"
# or save the whole context
llcat --load settings.json -a "$i" -cr context.json -c ../results/"${i}.output" > /dev/null
done
One of my favorite patterns is this one: […]
- isodev
Wait, wasn't codex the "openai cli"?
Their product names are so confusing (chat, vs. work ?!).. almost like the whole thing is vibecoded.
- techgnosis
Ironically enough I could have Codex make this for me in like 5 minutes. If there's a published API, a CLI is always within your grasp.
- mi_lk
When should I use this over Codex? Is this supposed to be called by other tools/agents?
- guyuedumingx
The claim that the name alone explains the tool is weak: a CLI wrapper still needs one line stating what problem it solves and who should use it.
- albert_e
Does this consume the monthly flat rate subscription quota or API credits.
Does Anthropic have something similar.
I understand "claude -p" has been unreliable to use with subscription quota and often required "extra usage" credits.
- hahahacorn
I imagine the play is RL your model to solve problems using your own tools which it knows how to use most efficiently until it defaults to using services like managed agents, etc.
Honestly surprised this wasn't available sooner.