Read this first. Codex is built around OpenAI's models; opencode is built to work with any model. Both work on Smart and Fast through Uno, and tool calls can fail where they would not on the model each was built for. On 16 October 2026 we pointed Claude Code 2.1.284, Codex 0.154.0 and opencode 1.18.32 at Uno with a test key: each reached Uno's endpoint and got Uno's own answer to a wrong key. On 25 October 2026 opencode inside Uno Work ran a full task on Uno AI with tool calls: it wrote, started and tested a small API. A run of the local CLIs with a real key is still to do.
Steps
-
Copy your Uno key and keep it in a variable
Open the Uno console: Uno AI, then Use Uno AI from your code and copy the API key. Both agents read it from
UNO_API_KEY, so the key never sits in a config file. Add the line to~/.bashrcto keep it.$ export UNO_API_KEY=your-uno-key -
Test the key with one request
An answer with
"choices"means the address and the key work.$ curl -sS https://console.uno.place/v1/chat/completions \ -H "Authorization: Bearer $UNO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "uno/fast", "messages": [{"role": "user", "content": "Say hi"}]}' -
Codex: add Uno as a provider
Add this block to
~/.codex/config.toml. It only defines the provider: your ChatGPT sign-in stays the default. Recent Codex versions take only the Responses format from a custom provider, so keepwire_api = "responses".[model_providers.uno] name = "Uno AI" base_url = "https://console.uno.place/v1" env_key = "UNO_API_KEY" wire_api = "responses" -
Codex: run it on Uno AI
Choose the provider and the model when you start Codex. The same flags work with
codex execfor a task without the interface.$ cd your-project $ codex -c model_provider='"uno"' -m uno/smart # one task, no interface: $ codex exec -c model_provider='"uno"' -m uno/fast "Fix the failing test"
To make Uno the default, put
model_provider = "uno"andmodel = "uno/smart"at the top of the file. Codex warns that it has no metadata for the model and uses defaults: the run goes on. -
opencode: add Uno as a provider
Put this in
opencode.jsonin the project folder, or in~/.config/opencode/opencode.jsonfor all projects. opencode takes the key from the sameUNO_API_KEY.{ "$schema": "https://opencode.ai/config.json", "provider": { "uno": { "npm": "@ai-sdk/openai-compatible", "name": "Uno AI", "options": { "baseURL": "https://console.uno.place/v1", "apiKey": "{env:UNO_API_KEY}" }, "models": { "uno/smart": { "name": "Smart" }, "uno/fast": { "name": "Fast" } } } } } -
opencode: pick the model
Start opencode and type
/models. Choose Smart or Fast under Uno AI. For one task from the command line, name the model as provider, then model:$ opencode $ opencode run -m uno/uno/fast "Rename getUser to fetchUser everywhere"
Check that it works
Give each agent a small task that edits one file, then open the Uno console. The minutes appear on the Uno AI page. only minutes the AI works count; ten chats in the same minute count as one, so Codex and opencode working side by side spend one set of minutes.
$ codex exec -c model_provider='"uno"' -m uno/fast -s workspace-write "Add a line to README.md: checked on Uno AI" $ git diff README.md
Codex or opencode on Uno AI
| Codex | opencode | |
|---|---|---|
| Format it speaks to Uno | OpenAI Responses | OpenAI-compatible chat |
| Where the config lives | ~/.codex/config.toml | opencode.json |
| Built for | OpenAI's models | Any model |
| Your own plan as well | ChatGPT sign-in stays the default | Several providers side by side |
| In Uno Work | Signs in with your ChatGPT plan | In Uno Work, OpenCode comes with Uno AI already connected |
The short way: opencode is ready in Uno Work
On an Uno computer with Uno Work you skip steps 1–6 for opencode. In Uno Work, OpenCode comes with Uno AI already connected: open a chat, pick Smart or Fast, give the task and close the laptop.
Plus: $20 a month
Hours of agent work for Codex and opencode
Uno AI writes code, builds sites and runs tasks right on your computer. Only the minutes it works count; ten chats in the same minute count as one.
Today: GLM-5.3 Flash (Fast) and MiMo v2.6 Pro (Smart). Dictation into text at no extra cost, within a daily limit.
- 40 hSmall + AIa month
- 100 hPlus + AIa month
- 45 h + FastPro + AIfull speed, then Fast never stops
- UnlimitedMax + AI100 h at full speed, then standard
What it does not do
- It does not turn Smart and Fast into GPT. On the Artificial Analysis index Smart has 46, GPT-6.1 Sol has 52.
- The Responses endpoint keeps no state between calls: Codex sends the whole conversation each time, which is how it works with other providers too.
- A new Codex version can change what it sends and break the setup until Uno catches up.
- On Small+AI and Plus+AI the work stops when the hours end. Only Max+AI is unlimited.
Pick a computer, then add Uno AI
Every plan is a real Linux computer with root. Run Codex and opencode on it with your own plan, with Uno AI, or with both.
Small
A Telegram bot, a VPN, a small backend
$5/ month
- 1 vCPU · 1 GB
- 15 GB disk
- 25 GB cloud storage
- 5 boosts a month
Plus
Agents that work with your laptop closed
$20/ month
- 4 vCPU · 4 GB
- 40 GB disk
- 100 GB cloud storage
- Uno Work in the cloud
Pro
A product in production, a second MacBook
$70/ month
- 16 vCPU · 16 GB
- 120 GB disk
- 300 GB cloud storage
- Speed of a MacBook Air M4
Max
A team and many agents at once
$200/ month
- 32 vCPU · 48 GB
- 300 GB disk
- 1,024 GB cloud storage
- 5 public IPv4
Add Uno AI to any plan: 40 h of AI work a month on Small, 100 h on Plus, unlimited on Max. Today: GLM-5.3 Flash and MiMo v2.6 Pro. Or sign in with your own Claude or ChatGPT.
Common problems
Codex: 401 Unauthorized, INVALID_TOKEN
UNO_API_KEY is empty or wrong in this shell. Run echo ${#UNO_API_KEY}: zero means it is not set. Export it again and start Codex from the same shell.Codex: "wire_api = chat is no longer supported"
wire_api = "responses" in the [model_providers.uno] block. The base address stays https://console.uno.place/v1.Codex still uses my ChatGPT plan
-c model_provider='"uno"', or set model_provider = "uno" at the top of the config.opencode: "Unauthorized" or no Uno AI in /models
opencode.json, in a shell where UNO_API_KEY is set.The work is billed per token, not in hours
uno/smart or uno/fast. GPT and Claude names reach those models and are billed per token from your premium credit, then your balance.