Profiles & providers
A profile is the recipe for a session: one provider (the model) plus the extensions that give the agent its prompt, tools, and behavior. Switching profile is how you switch between a general assistant, a coding agent, and a cheap summarizer — without changing anything else.
profile: default # the profile used when none is named
profiles:
default:
provider: alibaba
extensions: [systemPrompt, baseTools, skills, approval, compaction, memory, documents, subAgents]
coder:
# Codex is a complete coding agent with its own prompt, tools and skills,
# so we proxy to it and add only what we need on top.
provider: codex
extensions: [approval, memory]
reviewer:
# Small and cheap: a second opinion the crew can call on.
provider: reviewer-model
extensions: [systemPrompt, baseTools]
providers:
# Derive a cheap variant of a provider you already configured.
reviewer-model:
baseProvider: openai
model: gpt-5-miniA profile names a provider: and its extensions:. To pin a specific model,
derive a provider with baseProvider: + model: (as above) and point the
profile at it.
Pick one per run with --profile:
boba --profile coder
boba run --profile coder "Add a --version flag to the CLI."Two kinds of provider
This distinction matters more than it looks:
Model providers are plain models behind a common interface — OpenAI, OpenRouter, Alibaba, Ollama, any OpenAI-compatible endpoint. Boba supplies the agent loop: the system prompt, the tools, the approval gate. Give these profiles a full extension list.
Agent providers are complete coding agents that Boba drives rather than
rebuilds — claude (Claude Code) and codex. They bring their own prompt,
tools, and skills. Boba proxies to them and layers on only what it adds:
approvals, memory, the web UI, the crew. Give these profiles a short
extension list; injecting systemPrompt and baseTools on top of one just
fights it.
The setup wizard detects installed agent CLIs and configures the second kind for you, which is why it needs no API key when you already have Claude Code or Codex on your machine.
The crew (sub-agents)
With the subAgents extension, an agent can delegate to other profiles. Each
sub-agent runs its own session, with its own provider and tools, and reports
back. That is the “crew”: a lead agent coordinating specialists — a coder on
one model, a reviewer on another — rather than one chatbot doing everything.
Because each specialist is just a profile, you choose the cost/quality tradeoff per role.
Extensions
Extensions are where behavior comes from. Common ones:
| Extension | What it adds |
|---|---|
systemPrompt | The base instructions |
baseTools | Filesystem, shell, web search |
skills | Discovered SKILL.md capabilities |
approval | The gate over risky tool calls |
compaction | Auto-compacts long transcripts |
memory | Cross-session recall |
documents | The markdown vault the agent reads and writes |
subAgents | Delegation to other profiles |
browser | A real browser it can drive |
terminalTools | Persistent terminal sessions |
Some extensions are resident: they are not attached to a profile but run for the life of the daemon, configured by their own top-level block. Telegram and the scheduler work this way.
You can drop your own extension into ~/.botbandit/extensions/ and it is loaded
at startup — no rebuild. Restart the daemon to pick it up.
See the configuration reference for every provider block and option.