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.
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: