v0.6.0 — Codex subscription
whip 0.6.0 adds a ChatGPT Codex subscription provider: use the models your ChatGPT plan already includes, with no API key. It also ships one shared retry policy for every provider, a friendlier model picker, session resume shorthands, and an experimental multi-agent workflow tool.
Install or upgrade
# fresh install (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/context-labs/whip/main/install.sh | sh
# already installed
whip update
# from source
go install github.com/context-labs/whip/cmd/whip@v0.6.0Binaries for darwin/amd64, darwin/arm64, linux/amd64 and linux/arm64 are attached below with SHA256SUMS.
Use your Codex subscription
whip auth codex # opens a device-code sign-in: visit the URL, enter the code
whip # /model now lists every model your plan includes- Inside a session,
/auth codexdoes the same. Neither flow changes your default model; pick one with/modelor/model <id> codex-subscription. /usageshows your subscription's rate-limit windows (used %, reset countdown) without leaving whip.whip auth codex logoutremoves the provider again.whip auth openrouter logoutandwhip auth --helpare new too.- Login is stored in
~/.codex/auth.json, compatible with the Codex CLI; tokens refresh locally and are never sent to the conversation or to any host other thanchatgpt.com/backend-api. - Subagents on the subscription default to
gpt-5.6-luna; pin any model via ctrl+p › Subagent model ortaskModelin config.
Migrating a pre-release config: a provider named codex is renamed to codex-subscription on first load, along with its routes, pins and cached catalog. Nothing to do by hand.
Highlights
Codex subscription provider (#130, supersedes #14)
- New
openai-codex-responsesAPI over the Responses SSE endpoint: tool calls, reasoning replay, usage, prompt caching, streaming tool-call rows. - Account-scoped
/codex/modelscatalog drives/model; plan and rollout availability come from the backend, not a hard-coded list. - Exhausted windows surface immediately as "Codex subscription limit reached … resets in …" rather than a retry loop. A 401 on a rotated token triggers one forced refresh and a resend.
One retry policy for every provider
- Transient failures (transport errors, 429, 5xx, mid-stream
server_error) back off exponentially, honourRetry-After, report each retry in the UI, and never replay output already shown — including pending tool-call rows. - A
Retry-Afterbeyond 60 seconds is treated as a quota, not congestion, and surfaces instead of stalling the turn.
Model pickers
/modeland the ctrl+p Model, Subagent model and Compaction model panels showmodel @ provider @ endpointrows grouped by provider, window to the terminal height, and keep the cursor on screen while scrolling.- Subagent and compaction models can be any configured or catalog model.
Sessions and startup
whip -c/--continueresumes the latest session,whip -r <id>/--resumea specific one,--browseopens the session picker.- New installs boot in the opencode UI mode.
Dynamic workflows (experimental)
- A
workflowtool for deterministic multi-agent orchestration, gated behind"experimental": ["workflows"]in config.
Fixes
- Catalog-only models on a non-default provider resolve again;
defaultProvidernow only breaks ties between catalogs advertising the same id. - Removing your last provider persists cleanly and clears dangling model pins.
- Tool-call bookkeeping (duration, exit code) is no longer erased from the live conversation when a request is built.
- A stream that dies mid tool-call drops that call instead of persisting malformed arguments.
- Status line keeps the spend visible on narrow terminals; several lint and test-reliability fixes.
For embedders
llm.Client is now an interface implemented by OpenAI and Codex, with Clone, SetCacheKey, Endpoint, and an optional SetOnRetry. agent.New takes the interface.
Full changelog: v0.5.14...v0.6.0