CoeOS on this engine
In one sentence: CoeOS is the AI operating system on top of OdyssAI — Nemo, the client, and the CoeOS box, the router. Your tools call one model id,
CoeOS, on the box; the box classifies the request on a competence axis (Python, debugging, GDPR, writing, planning…) and sends it to the model proven best there — served by this engine, or by a cloud provider with your own keys. The inference itself happens here.
The router used to live inside the OdyssAI-X dashboard. CoeOS is now two public
pieces: Nemo, the client
(Odyssai-eu/coeos, a signed and notarized
macOS app), and the router that runs as its own container —
the box
(Odyssai-eu/coeos-box, port 4600,
the CoeOS console). Everything about configuring axes, keys, users and quotas is
on the CoeOS box page (and in the repo’s
doc/USER-GUIDE.md).
This page covers only the engine side.
What this engine exposes to the box
Section titled “What this engine exposes to the box”| Surface | Used for |
|---|---|
POST /v1/chat/completions, POST /v1/messages | the relay itself (OpenAI and Anthropic wire formats; the box forwards the client’s format) |
GET /v1/models with x_odyssai blocks | which models are ready, their capabilities (tools, vision, context) — the box only routes an axis to a model that is loaded |
GET /.well-known/inference-engine.json | the capability contract the box mirrors to its own clients |
enable_thinking | the only thinking flag this engine reads. The box translates thinking/reasoning from cloud-style clients into it; sending thinking:false directly is ignored and a reasoning model spends its whole budget thinking |
reasoning_content in deltas | reasoning is split from the answer per model; the box passes both through |
No key is required on a trusted LAN: the box’s built-in local provider (odyssai)
is keyless by design.
Wire the box to this engine
Section titled “Wire the box to this engine”- Make sure the models you want the box to route to are loaded here (a replica pool is the natural fit — see Multi-user serving).
- Give the CoeOS box the engine’s address:
curl -X PUT http://<coeos-host>:4600/admin/providers/odyssai \ -H 'content-type: application/json' \ -d '{"api_base":"http://<this-engine>:8000/v1"}'- In the box’s TMB Settings, bind axes to the models this engine serves
(registry entries reference the model by its engine alias as an
endpointmodel). An axis bound to a model that is not loaded here shows as unservable in the box’s Routing table until you load it.
Using it
Section titled “Using it”Point your tools at the CoeOS box, not at this engine:
export OPENAI_BASE_URL=http://<coeos-host>:4600/v1export OPENAI_API_KEY=ck_…curl "$OPENAI_BASE_URL/chat/completions" -H "authorization: Bearer $OPENAI_API_KEY" \ -H 'content-type: application/json' \ -d '{"model":"CoeOS","messages":[{"role":"user","content":"Write a Python script that…"}]}'The response headers say who answered: x-coeos-axis, x-coeos-model,
x-coeos-provider. An agent that already knows the step’s skill can force it:
-H 'x-coeos-axis: legal_rgpd'.
When to call the engine directly instead
Section titled “When to call the engine directly instead”- You want a specific model, not “the best per skill” — call this engine’s
/v1with the model alias. - You are benchmarking a model (routing would hide which one you measured).
- Single-user, single-model setups: the box adds a hop for no gain.
Read next
Section titled “Read next”- Multi-user serving — replica pools, the usual backend for the box’s axes.
- HTTP API — the full
/v1and/adminsurface of this engine. - CoeOS box — axes, keys, users, guarantees.
- Nemo — the client.