Kaeso 0.4.3 lets agents such as Claude Code and Codex connect to an instance's remote MCP server, sign in with OAuth and act under rights that the user and the instance and organization policies allow. A new custom provider now needs only a base URL and a key, because Kaeso detects its format, key style, embeddings, token counting and models. Codex, Claude Code and Grok CLI work with Claude, GPT, Grok and Mistral models in more cases, and Mistral's answers reach Chat Completions apps as plain text. The design tokens package no longer exports brandVersion, the one change that asks integrators to act, and a fresh install starts from the model catalogue's data as of 25 October 2026.
- Breaking: The design tokens package no longer exports
brandVersion, so code that imports it must drop that import. (#467 (opens in a new tab))
Contributors: @dvnold
Full changes: v0.4.2...v0.4.3 (opens in a new tab)
Added
- Adding a custom provider takes only its base URL and key. Kaeso detects the API format, key style, embeddings, token counting and the models the server offers, and the review step lets you change any of it before saving. A trailing or doubled
/v1and a pasted endpoint path are dropped from the base URL when it is saved. (#449 (opens in a new tab)) - Agents such as Claude Code, Codex, Cursor, Gemini CLI and OpenCode can connect to an instance's remote MCP server at
/mcp. They sign in with OAuth 2.1 and PKCE through the console and act with rights the user grants, capped by the instance's and each organization's agent policies. Every tool call is kept for 90 days as the agent's activity, and the console lists each account's agents so they can be renamed or revoked. (#450 (opens in a new tab)) - The documentation site and the UI library's showcase end their sidebars with a legal menu linking to Kaeso's privacy policy and imprint, a theme menu and a language menu. The menus replace the language and theme selects, and the UI library's
ThemeMenucan open upward with itssideandalignprops. (#474 (opens in a new tab)) - Kaeso now has Claude Code and Cursor plugins that connect to an instance's
/mcpaddress and include a skill on using its tools. The console's Agents page also offers one-click connection steps for Claude Code, Cursor and GitHub Copilot, filled in with the instance's own address. (#475 (opens in a new tab))
Changed
- The Add models dialog shows models in a table with a checkbox on each row, and models already in the catalogue stay locked. Adding a provider key starts with provider tiles, with connected providers first, and a press on a tile continues to the key step. (#487 (opens in a new tab))
Gateway
- A fresh install starts with the model catalogue snapshot as of 25 October 2026, which holds 555 models and their prices for the providers Kaeso supports. The providers list adds
munitoandmunito-eu. (#489 (opens in a new tab))
Removed
UI library
- The design tokens package no longer exports
brandVersion, a second version number in its brand file that could disagree with Kaeso's own. Nothing in the repository read it, and a test now keeps a version field out of the brand file. (#467 (opens in a new tab))
Fixed
- Refusals to sign up or create an organization, shown on installs that are invitation-only or limit email domains, are now translated in German and Chinese in the console. The check that finds untranslated Platform API messages now covers more of the gateway's services. (#435 (opens in a new tab))
- Toasts, empty states and confirmations in the console are shorter, each says one thing, and they are checked for length in English, German and Chinese. Several German dialog texts are shortened to fit as well. (#440 (opens in a new tab))
- Two refusals about a model's tool choice and thinking settings fit on one line:
autowith the tool named in the prompt, andenabledthinking withbudget_tokens. Their German and Chinese wording follows the new text. (#443 (opens in a new tab)) - The development pages and agent guides now match the code. The update job runs every 60 seconds with a five-minute gap between checks, and the development stack's mock serves xAI and Together AI as well. (#446 (opens in a new tab))
- Buttons in the console start with a verb: the last step after creating a key reads Finish, and the updates page button reads See what's new. The new wording is in English, German and Chinese, and the docs follow it. (#448 (opens in a new tab))
- Overview pages end with a Next steps list. The docs site no longer keeps redirects, and documentation kept in the repository's READMEs, such as the model catalogue sync details, now lives on the docs site. Fixture conventions have their own reference page. (#453 (opens in a new tab))
- The console shows images people sent with a new Thumbnail component from the UI library, which crops them to a square and shows the text alternative when an image cannot load. Every UI library component now exports its variant lists, and the showcase checks that each page declares them. (#455 (opens in a new tab))
- Grok CLI over Chat Completions works with models served in other formats, because the
model_idfield it replays on assistant messages is left out when a request crosses to another format. Chat providers receive that field only in profiles that keep it, which is SpaceX's. (#462 (opens in a new tab)) - Mistral answers over Chat Completions now arrive as plain text, with its thinking in
reasoning_content, so Grok CLI and other Chat apps no longer fail or print raw thinking JSON. Empty stream chunks no longer crash tool-call turns, and reasoning that Chat apps replay reaches the providers that accept it. (#463 (opens in a new tab)) - Codex works with Claude, Grok and Mistral models, and a thread that started on a GPT model can switch to any of them. System and developer messages reach Anthropic in the next user turn, and hosted web search goes to providers with a matching tool and is left out elsewhere. What a provider cannot take is named in the
kaeso-left-outheader of the reply. (#464 (opens in a new tab)) - Mistral accepts requests from apps that send
temperature: 0, such as aider's default, because the Mistral profile sendstop_p: 1with greedy sampling, which changes nothing at that temperature. Error bodies in Mistral's and vLLM's shapes now reach apps with their message, and context window errors are reported as context too long. (#465 (opens in a new tab)) - Claude models work in Chat Completions and Responses apps that replay history. Claude's signed thinking is restored only into the turn it came from, and for the models that check the binding, a block whose conversation changed is dropped instead of failing the request. Carried reasoning is stored under new keys, so a conversation in flight during the upgrade continues without its earlier thinking. (#466 (opens in a new tab))
- Claude Code's tool search works with GPT, Grok and Mistral models. Tools marked for deferred loading stay out of the upstream request until a tool search loads them, then they are sent as ordinary function tools, instead of the first request of each session being refused. (#472 (opens in a new tab))
- Claude Code's WebSearch works with GPT and Grok models, and Mistral answers it without searching instead of failing. Anthropic's web search tool becomes hosted web search on OpenAI Responses and xAI's search on SpaceX, with its domain filters, and search results return to Anthropic apps as search blocks. (#473 (opens in a new tab))
Console
- The invitation page drops an invitation's token from its cache as soon as the person leaves the page, including when the invitation has expired, been revoked or already been used. Before, the token could stay in the cache after the page was left. (#437 (opens in a new tab))
- The console no longer invents a name, key prefix or format list for a provider that the gateway does not list, such as one an old key still points at. It shows the provider's id as the gateway sent it, a plain ellipsis for the prefix, and only the format the model is sent as. (#439 (opens in a new tab), #452 (opens in a new tab))
- Confirmation dialogs in the console open fresh every time, so a removal in progress for one limit or key no longer shows as busy for another item. About twenty dialogs for sessions, organizations, users, providers, keys, members and roles now keep their requests in their own component. (#457 (opens in a new tab))
UI library
- The UI library's showcase examples and tests use Kaeso's placeholder key prefix and gateway address, so the code people copy from the showcase matches the repository's placeholders. (#436 (opens in a new tab))
- Calendar, ToastCapsule, DisplayOptions, ThemeMenu, SelectionBar and CommandPalette now forward a ref to their root element, where before the ref was dropped. ThemeMenu takes
data-forcefor its states page, and SwapText and ThemeMenu gain showcase pages. (#441 (opens in a new tab)) - Every UI library component that renders an element forwards its ref, and the lint check now fails for an exported component that renders without one. Props and behavior are unchanged, and the few components with no root element are listed with their reasons. (#451 (opens in a new tab))
Documentation
- The self-hosting pages name the console's real pages and labels, add
KAESO_TRUSTED_PROXIESto the.envtable, and describe the notice sent when someone changes their email address. The requirements and the 529 response are corrected to match the code. (#444 (opens in a new tab)) - The Platform API, concept and console pages now match the code, including which operations need a recent sign-in, the
PUTandDELETEconventions, the model inputs and outputs, and that Mistral receives developer messages as system messages. (#447 (opens in a new tab))