Skip to content

Models and engines

The catalog. Every model the company can name lives in ~/.soloinc/models.json: id, vendor, channel, context window, list price, capability tier, modalities, when it was released and first seen. It is seeded with the seat's models and refreshed by the orchestrator from what the machine can reach — the seat, each local engine's model list, each registered provider's list and, only while the API switch is on, the vendors' public lists with OpenRouter as the index. New arrivals are marked new; an id nobody has described is accepted and marked unverified.

Three channels. The seat (your Claude Code subscription — the default, metered by allowance, never by money); local engines on your hardware (Ollama, MLX, llama.cpp, vLLM, LM Studio — free, slower, weaker); metered providers (OpenAI, Gemini, OpenRouter, Anthropic's API) which are reached only while the Human's API switch is on. Which channels work may run on, and in what order, is a company-wide setting on the Seats board.

Two ways to run. The seat channel runs through Claude Code (the claude binary). The local and provider channels run through SoloINC's own native runtime, which needs no Claude Code and speaks the Anthropic Messages API directly. The native runtime has no web search of its own — that is Claude Code's, and it runs server-side — so a workload that leans on search stays on the seat unless you add a search provider.

The shim. Both paths speak the Anthropic Messages API and nothing else. The translation shim fronts everything else on loopback, in two dialects: Ollama's own and the OpenAI chat-completions shape — so one wire shape reaches every vendor's API and every local engine. A public upstream is refused unless the shim was started for a metered provider — and that happens only with the API switch on.

Routing. A workload pins a model, or names a router: cheapest, fastest, best, efficient, a model that chooses, or a self-hosted router. Bounds apply before the choice: the contract reserves the most capable model for planning, verification and synthesis; a model that cannot hold the workload's context is not a candidate; a quality_floor sets aside models the evals matrix has measured under it on that workload.

Best model per workload. The matrix on the cell's Seats and models facet: (model, workload) → quality (a judge's score with its own tier stated as the ceiling), speed and list cost from the runs that happened. Trial a model runs three of the workload's eval cases on a model, one turn each, judges them, and folds the result in.

Engines. soloinc detects an engine's dialect from its address; the local-engine form has a Detect button. Profiles and install lines for Ollama, MLX, llama.cpp and vLLM are on the Seats board.