Models
ostk has a provider-neutral scheduling interface with direct, gateway, and local routes. A route existing in code is not the same as every model version being verified: tool schemas, streaming, reasoning, and usage accounting vary by integration.
Canonical project tasks, decisions, pages, and audit remain local across routes. Full conversation continuity is a separate capability. Generic MCP clients load stored pages inline; Anthropic sessions can additionally use Anthropic Files for context efficiency and cross-host recovery. Check the route status and last-verified evidence before treating a model switch as a product guarantee.
PROVIDERS
claude-* models supported by the configured Anthropic API version ANTHROPIC_API_KEY src/cpu/anthropic.rs:257–297 gemini-* models supported by the configured Google API version GEMINI_API_KEY (or GOOGLE_API_KEY) src/cpu/gemini.rs:32–70, 299–319 mistral-*, codestral*, ministral*, devstral*, magistral* MISTRAL_API_KEY src/cpu/mistral.rs:24–45, 145–220 gpt-*, o1*, o3*, o4* OPENAI_API_KEY src/cpu/openai.rs, src/cpu/providers.rs:111–120 Explicit openrouter/<provider>/<model> and supported org/model routes OPENROUTER_API_KEY src/cpu/openrouter.rs:12–51 local/<model>, ollama/<model>, or model:tag None required (OLLAMA_HOST to override endpoint) src/cpu/mod.rs:437–454, providers.rs:62–68 apple/default None (APPLE_MODEL_HOST to override) src/cpu/mod.rs:439–446, model_registry.rs:196–201
The current kernel also contains direct bare-prefix routes for DeepSeek, Moonshot/Kimi, and xAI, plus an Apple-Silicon MLX route with a managed mlx_lm.server lifecycle. These are implemented code paths, not a claim that every current model version has passed an end-to-end acceptance run. Consult dated compatibility evidence before publishing a supported badge.
How FROM auto Picks a Model
When an Agentfile says FROM auto (or no FROM at all), ostk scores available models based on which API keys are present. Source: src/commands/run.rs:89–197.
OSTK_MODEL env var overrides everything — if set, it's used regardless of HUMANFILE or FROM. Source: src/cpu/context.rs:116.
CONFIGURATION
Four places to set a model, in priority order:
OSTK_MODEL=gemini-2.5-pro ostk run agents/worker.af FROM claude-sonnet-4-6 MODEL claude-opus-4-6 ostk kernel spawn worker --model gemini-2.5-pro "task" FEATURE_MATRIX
Not every provider supports every feature. The CpuDriver trait provides a common surface, but the underlying APIs vary. This matrix shows what actually works per provider at the driver level.
| Feature | Anthropic | Gemini | Mistral | OpenAI | Ollama |
|---|---|---|---|---|---|
| Tool use | ✓ | ✓ | ✓ | ✓ | ✓ |
| Streaming | ✓ | ✓ | ✓ | ✓ | ✓ |
| Extended thinking | ✓ | ✓ (3.x) | — | built-in* | — |
| Prompt caching | ✓ | server | — | — | — |
| Vision/images | ✓ | ✓ | ✓ | ✓ | model |
| File upload API | ✓ | — | — | — | — |
| Token counting | ✓ | — | — | — | — |
| Batch API | ✓ | — | — | — | — |
| Speed mode | ✓ | — | — | — | — |
| Citations | ✓ | — | — | — | — |
✓ = the selected driver implements a translation path, not that every current model version is acceptance-tested. — = not available in that driver. server = provider-managed. built-in* = reasoning is model behavior. model = depends on the loaded Ollama model. Direct DeepSeek, Moonshot, xAI, OpenRouter, and MLX routes require their own compatibility evidence and are not implied by this selected-driver table.
MODEL_SPECIFIC_NOTES
thinkingConfig.includeThoughts: true and thinkingLevel: "HIGH". Gemini 2.x models get standard config only. Source: gemini.rs:105–121.
toolu_ prefixed IDs that are longer. ostk remaps them transparently. Source: mistral.rs:191–220.
codestral:22b) is auto-routed to Ollama without the local/ prefix. Source: model_registry.rs:251–253.
gpt-* and o-series names use the native OpenAI Responses driver and fail if its required key is unavailable. Use an explicit openrouter/... model identifier when you intend to route through OpenRouter. Source: providers.rs:111–120.
deepseek-* identifiers use the direct DeepSeek endpoint and fail closed without DEEPSEEK_API_KEY. Slash-form deepseek/... identifiers remain explicit OpenRouter routes. Moonshot/Kimi and xAI have analogous direct bare-prefix routes.
QUICK_EXAMPLE
MODEL claude-sonnet-4-6 FALLBACK gemini-2.5-pro
FROM local/codestral:22b PROMPT Run eslint, fix warnings. TOOL shell LIMIT budget_usd 0
The HUMANFILE declares a project default and fallback; the lint agent pins a local route with FROM. Local inference has no provider token charge, although hardware and operational costs remain. Multiple routes can coexist, but preserving canonical project state is not the same as guaranteeing full conversation or feature continuity between them.