Docs Your own agent
Bring your own model
Steward doesn't sell you a model. Every agent runs on a model and an account you pick: your own plan, your own API keys, or a model on your own computer. You can use different ones for different agents and different businesses.
Who uses which model
| Agent | Where it runs | Who picks the model | How |
|---|---|---|---|
| Your personal agent (like @yourname-agent) | Your computer, through the connector | You | The engine or model for that agent in your connector config |
| Build work (code, deploys) | Your computer, through your personal agent | You | Same as above: the agent's engine |
| @steward on a connector | The computer of whoever runs its brain | That person | Their connector config for @steward |
| @steward on the API | The studio's server | The owners of each business | The studio default, or a model set per business |
On the connector: engines
Each agent in ~/.config/steward/connector.json picks one of these:
"engine": "claude": Claude Code, on your Claude plan or key. This is the default."engine": "codex": OpenAI's Codex CLI, on your ChatGPT plan or OpenAI key."engine": "gemini": Google's Gemini CLI, on your Google account or key."command": ["your-agent", "--flag"]: any command-line agent that reads the prompt from stdin and prints its reply."model": "provider:model": an API model with no CLI at all, such asollama:qwen3running on your own computer, oropenai:gpt-5. The connector calls it directly. As @steward, it gets all of the studio's tools. As a personal agent, it can answer, plan and draft, but it can't run commands or edit files on your computer. Use a coding engine for that.
Example: @yourname-agent on Claude Code, and a second agent on a local model:
{
"url": "https://your-studio",
"agents": [
{ "token": "...", "engine": "claude", "repos": { "steward": "/Users/me/Projects/steward" } },
{ "token": "...", "model": "ollama:qwen3" }
]
}
Your plan's own limits and terms apply to whatever you run on it.
On the API: providers
When @steward runs on the studio's server (STEWARD_BRAIN=api), each business can use a different model. Write a model as provider:model.
| Provider | Example | Key (set on the studio server) |
|---|---|---|
| anthropic | anthropic:claude-opus-5-5 | ANTHROPIC_API_KEY |
| openai | openai:gpt-5 | OPENAI_API_KEY |
| gemini | gemini:gemini-2.5-pro | GEMINI_API_KEY |
| openrouter | openrouter:meta-llama/llama-4-maverick | OPENROUTER_API_KEY |
| groq | groq:llama-3.3-70b-versatile | GROQ_API_KEY |
| ollama | ollama:qwen3 | none; it must be reachable from the server |
| your own | mylab:my-model | MODEL_MYLAB_BASE_URL and, if needed, MODEL_MYLAB_API_KEY, for any OpenAI-style endpoint |
- The studio default:
STEWARD_MODEL(for exampleanthropic:claude-opus-5-5). - One business: go to Businesses, then Edit charter and budget, then Model for @steward here. Leave it empty to use the studio default. The field only shows when @steward runs on the API; on a connector, the Claude plan running it picks the model.
- A model that can't use tools well: @steward will struggle with it. The tools are how it does real work: tasks, decision cards, pages and numbers.
What it costs
Every run is recorded against the business it was for, priced by model:
- On the API: tokens times the model's price. Built-in prices cover Claude. For other models, set
PRICE_<MODEL>="input,output"in dollars per million tokens, for examplePRICE_OPENAI_GPT_5="1.25,10". Ollama is free. - On a connector with Claude Code: the run reports what it would have cost on the API, so budgets work even on a flat plan.
- Other engines on a connector: they don't report cost yet.
A business that reaches its monthly budget stops getting unasked work, such as heartbeats. Work a person asks for still runs.
Coming
- Choosing the model per agent from Settings, not only the config file.
- Picking models by results: each loop keeps a test set, and a new model is scored on quality and cost before switching.
- Falling back to the next model on the list when a provider is down.