Skip to main content
omp (oh-my-pi) is a batteries-included, open-source terminal coding agent — a fork of Pi that adds LSP integration, DAP-driven debugging, subagent orchestration, and per-role model routing across 40+ providers. Like Pi, it reads its providers from a config file, so you can add Tokios as a custom provider, point baseUrl at https://api.tokios.com/v1, and reach any model behind your connector — without that model’s port ever being exposed.

Prerequisites

Find your deployment name

omp sends the deployment name — the public name you registered in the console — not the upstream model id your local backend uses. The 2 are often different strings, and confusing them is the most common cause of a 404. List the deployments your API key can reach:
Every id in the response is a value you can use in models.yml.
Run this even if your model already answers in the Playground. The Playground authenticates with your signed-in browser session, so a successful test there does not prove your sk-tok-… key is valid or scoped to that deployment. GET /v1/models is the first call that exercises the key itself.

Where omp keeps its config

omp reads 2 files from a dot-prefixed .omp directory in your home folder:
Create the directory and the file if they aren’t there yet.
The directory is .omp, with a leading dot. omp does not read a file created at omp/agent/models.yml — it starts normally, and your provider simply never appears in /model.

Configure a custom provider

Paste this into models.yml and replace the 2 placeholder values. It is a complete file, not a fragment:
models.yml
One provider block can serve every deployment on your account. Add an entry under models for each:
models.yml
Replace gemma-tunnel with a deployment name from GET /v1/models — not the upstream model id your backend (Ollama, llama.cpp, vLLM, or LM Studio) serves, and not the Routes[].Model value in your connector config, which is the upstream id. Replace sk-tok-YOUR_KEY with your own key, and avoid committing models.yml with a real key into version control.
baseUrl must include /v1, with no trailing slash. omp’s openai-completions provider builds request paths relative to this URL, so https://api.tokios.com misses the Tokios API surface and https://api.tokios.com/v1/ can produce a doubled separator.
omp’s config schema can shift between releases, so confirm the exact key names against your installed version (see omp.sh/docs). Start with the minimal block above — once omp lists your model under /model, add the optional fields below.

Route a role to your model (optional)

omp maps named roles to models, each with an optional fallback chain. Point a role at your Tokios provider in settings.yml using provider/model syntax:
settings.yml
Otherwise, choose the provider and model at runtime with the /model command inside omp’s TUI.
Because roles are written as provider/model, a short, lowercase, hyphenated deployment name keeps this line unambiguous — the same naming Register a model recommends. If a deployment is registered under a name that itself contains a /, prefer selecting it with /model rather than pinning it to a role.

Match the context window (optional)

omp sizes its prompts from the model’s context window. Ollama, llama.cpp, LM Studio, and vLLM each serve the context length the model was loaded with, not the model’s theoretical maximum, so tell omp the real number:
Set it too high and omp packs a prompt your local server rejects — an error that arrives through Tokios but originates on your own machine. Short prompts hide the mismatch, so it typically appears only once omp starts sending whole files.

Prefer the Anthropic surface? (optional)

omp can also speak the Anthropic messages protocol. To route through Tokios’s Anthropic surface instead, set api to anthropic-messages and drop the /v1 from baseUrl — Anthropic-style clients use the root base.

Pick a tool-capable model

omp’s agent relies on tool calling to read files, run commands, and edit code. Not every local model handles tool calls reliably — pick a deployment backed by a model with strong tool-calling support before you rely on omp for real edits. See Choose a model by task for guidance on matching a model to agentic coding work.

Troubleshooting

omp isn’t reading your file. Confirm it sits at ~/.omp/agent/models.yml — the directory is .omp, with a leading dot, and on Windows that resolves to C:\Users\<you>\.omp\agent\models.yml. Also confirm the file is valid YAML: providers is a mapping keyed by provider name, and models is a list.
The API key omp sent is missing, malformed, or has been revoked. Confirm apiKey holds the full sk-tok-… key with no extra whitespace, and check its status on the Keys tab. A working Playground session does not rule this out — the Playground doesn’t use your API key.
The model id under models doesn’t match a registered deployment. Run GET /v1/models and copy an id from the response exactly. A common near-miss is using the upstream model id from your connector’s Routes[].Model instead of the deployment name.
The key exists but isn’t scoped to the deployment you configured, or your account is suspended. Check the key’s model patterns on the Keys tab.
The connector for that deployment is offline or at its concurrency cap. Check the Connectors tab — the connector needs to show as Online, and the machine running it needs to still be up and reachable.
omp is sending more context than your backend loaded. Set contextWindow on the model entry to the context length your server is actually serving, and confirm the load-time setting in Ollama, llama.cpp, LM Studio, or vLLM.

Next steps

Pi

omp is a fork of Pi — the upstream agent connects to Tokios the same way.

Choose a model by task

Match a local model to agentic coding work before you commit it to omp.