Local-Only Mode¶
Local-only mode keeps voice audio and coding-agent inference on the Mac. It is useful when you want to avoid cloud speech or model providers, but it is less fun than the managed path: Kokoro voice quality is lower than Cartesia or Openbase Cloud audio, local MLX Whisper is not streaming in the same way, and a call usually takes longer to set up because the local models need to load.
Local audio requires an Apple Silicon Mac and a Python 3.12 Openbase Coder
runtime: MLX Whisper only runs on Apple Silicon, and Kokoro declares Python
<3.13. Setup and the console settings refuse local audio on Python 3.13 or
newer; on Linux or Intel Macs the MLX dependencies are not available. Use the
Openbase Cloud or Cartesia audio providers on those machines.
Use Local STT and TTS From the GUI¶
The recommended path is the GUI — the desktop app during first-time setup, or the console Settings page afterward. It handles the provider selection, downloads, and dispatcher restart wiring for you.
During first-time desktop setup:
- Open the Openbase desktop app.
- Continue to the voice audio step.
- Choose
Local audio. - Run setup from the desktop app.
That setup path selects:
- Speech-to-text:
Local MLX Whisper - Text-to-speech:
Local Kokoro
If Openbase is already installed:
- Open the local Openbase console.
- Go to
Settings. - In
Text-to-speech provider, chooseLocal Kokoro. - Click
Downloadif the Kokoro model or voices are missing. - Pick a voice and click
Save voice. - In
Speech-to-text provider, chooseLocal MLX Whisper. - Click
Downloadif the MLX Whisper model is missing. - Use
LiveKit dispatcher thread->Recreate thread.
After the dispatcher is recreated, start a new call. The first local-only call after downloads can still take longer while models warm up.
Run the Coding Agent Locally With Codex¶
Openbase uses the Codex app-server for the codex backend. To run that coding
agent against a local Ollama model, configure Codex for Ollama and make sure the
Openbase service Codex home uses that config.
Install and start Ollama, then confirm the model exists:
If it is missing:
Configure Codex for the Ollama model:
Check ~/.codex/config.toml and confirm the active top-level settings point to
Ollama:
model = "qwen3-coder:30b-a3b-q4_K_M"
model_provider = "ollama-launch"
model_catalog_json = "~/.codex/ollama-launch-models.json"
The model catalog matters because it gives Codex metadata for the exact Ollama model slug, including the large context window. Without it, Codex may fall back to generic metadata.
Smoke-test normal Codex first:
codex exec --skip-git-repo-check --cd . 'Reply with exactly OK.'
codex debug models | jq '.models[] | select(.slug=="qwen3-coder:30b-a3b-q4_K_M")'
codex --strict-config doctor --summary --ascii
Then make Openbase use the Codex backend and the same Codex config:
openbase-coder backend use codex
openbase-coder setup --link-codex-config
openbase-coder services restart codex-app-server
--link-codex-config points Openbase's service Codex config at the normal Codex
config under ~/.codex/config.toml. If you prefer separate configs, apply the
same Ollama model, model_provider, and model_catalog_json settings in
~/.openbase/codex_home/config.toml instead.
Revert to Managed Models¶
To switch the coding agent back to OpenAI-backed Codex, update the active Codex config so the Ollama lines are commented out and the managed model is selected:
# model = "qwen3-coder:30b-a3b-q4_K_M"
# model_provider = "ollama-launch"
# model_catalog_json = "~/.codex/ollama-launch-models.json"
model = "gpt-5.5"
Then restart the Codex service:
To switch voice audio back, use Settings in the GUI and choose Openbase Cloud
or provider-key audio for STT and TTS, then recreate the dispatcher thread.
Troubleshooting¶
If Codex cannot connect to Ollama:
Exit the Ollama prompt with /bye.
If Codex reports missing model metadata, compare the model slug in the Codex config with the installed Ollama model and the Codex catalog: