Engines

A provider is a source of inference — nothing more. The loop, the context assembly, the tool dispatch, the policy enforcement: all identical regardless of which provider answers. Changing providers changes how the agent thinks, never how it works.

You declare inference once, on your profile, and every agent you run inherits it:

// ~/.axon/profiles/<you>/profile.config.ts
export default defineProfile({
    providers: [Axon(), Codex(), Ollama()],
})
// axon.config.ts — the agent declares nothing
export default defineAgent({})

That is the whole configuration step. You say what you have; the cognet says what roles it needs, by names it made up; the runtime matches them at boot.

A provider is a catalogue, not a model. It answers "what can I supply", so which model fills which role is chosen at boot rather than written down. That is what lets one declaration serve every agent, and what lets someone with no network run any cognet whose needs their local models happen to cover.

Order is preference, applied only among candidates that all satisfy a requirement — it can never make an unusable model usable.

Your tools, prompts, scripts, and policy don't change. The agent's capabilities — what it knows, what it can do, what it's allowed to do — are independent of the model answering the questions.

engine: is removed. It named one model for the whole agent, which could not survive a cognet declaring several roles. Sources move to your profile's providers:; a model preference becomes the agent's model: string. See axon.config.ts.

Three postures

Managed (Axon()), your own key (an aggregator like OpenRouter() or a vendor directly), or local (Ollama()) — plus Mock() for tests. Fifteen providers in all: see Providers for the full account of what each one costs you and where your tokens go.

What an agent may add

An agent declares providers: only for a source its user would not otherwise have — a self-hosted endpoint it ships against, a local daemon it assumes:

export default defineAgent({
    providers: [Ollama({ url: "http://box.local:11434" })],
})

Its entries are appended after your profile's and deduplicated by name, first wins. An installed agent can add a source; it can never displace or remove one. The machine belongs to the person running it — an agent quietly rerouting your inference is the failure this split exists to prevent.

Switching at runtime

In the TUI, * opens the model palette — switch models or providers mid-session without touching the agent. See Models.

Reference

Providers is the full tab — one page per provider with its options, credential, and model id format, plus Behaviour for how a role becomes a model.