Migration Guide
> Read this first: every structural change in this guide is manual. octomind config --upgrade only bumps the config schema version field (the current…
Provider Format
Old format:
model = "anthropic/claude-sonnet-4"Current format:
model = "openrouter:anthropic/claude-sonnet-4"All models require provider:model format. The provider prefix tells Octomind which API to use. The canonical default model is openrouter:anthropic/claude-sonnet-4 (OpenRouter is the recommended one-key-many-models entry point).
When migrating a bare model name, pick the provider prefix that matches where you actually call the model. Common prefixes: openrouter, openai, anthropic, google (Vertex), amazon (Bedrock), cloudflare, deepseek, ollama, local, and the special cli meta-provider for locally CLI-backed models. There are 20 network providers plus cli in total — see doc/usage/04-providers.md for the full list and which prefix to choose.
API keys are environment-only
API keys are no longer read from config. If your legacy config has [providers], [openrouter], or similar blocks carrying an api_key, delete them — keys come from environment variables only (for example OPENROUTER_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY). octomind config --api-key is always rejected; set the environment variable instead. See doc/usage/04-providers.md for the per-provider variable names.
MCP Configuration
Old format:
[mcp]
enabled = true
providers = ["core"]Current format:
[mcp]
allowed_tools = []
[[mcp.servers]]
name = "core"
type = "builtin"
timeout_seconds = 30
tools = []Each server is now an explicit entry in [[mcp.servers]] with type, timeout, and tool filtering.
Role Configuration
Old format:
[developer]
model = "openrouter:anthropic/claude-sonnet-4"
enable_layers = true
[developer.mcp]
enabled = true
server_refs = ["core"]Current format:
[[roles]]
name = "developer"
model = "openrouter:anthropic/claude-sonnet-4"
[roles.mcp]
server_refs = ["core", "runtime", "filesystem", "agent"]
allowed_tools = ["core:*", "runtime:*", "filesystem:*", "agent:*"]Key changes:
- Roles use
[[roles]]array format (not[role_name]sections); every role is a top-level[[roles]]entry with anamefield -
enabledfield removed (roles are always available if defined) -
enable_layersremoved (legacy in-session workflow system is gone — use externaloctomind workflowinstead) - Per-role
max_tokensremoved — if a legacy role config carriesmax_tokens, drop it - Tool permissions use
allowed_toolspatterns -
runtimebuiltin server is new — see Runtime Namespace Move below
The default tag used when no TAG is passed to octomind run (or acp/server) is assistant:concierge (the default field in the root config). It can be a role name (e.g. developer) or a tap agent (e.g. octomind:assistant).
Layer Configuration
The old-format fields below (
builtin,enabled,enable_tools) belong to the pre-v1 in-session layer system. If your config still has them, it predates the current schema and needs the manual reshaping shown here.
Old format:
[[layers]]
name = "task_refiner"
builtin = true
enabled = true
enable_tools = trueCurrent format:
[[layers]]
name = "reduce"
description = "Compress session history for cost optimization during ongoing work"
command = "octomind acp reduce"
input_mode = "all"
output_mode = "replace"
output_role = "assistant"The example above is the reduce command that ships in the default config (declared as a [[commands]] entry — layers and commands share the same fields). The layer's name is arbitrary; the command is what references an actual role via octomind acp <role>.
Key changes:
-
builtin,enabled,enable_tools,model,max_tokensfields removed -
descriptionandcommandare required - Model/system/MCP config lives in the
[[roles]]entry thatcommandreferences - Layer is active when referenced by a
/runcommand
In-Session Workflows Removed
The [[workflows]] config section and the /workflow session command have been removed. Multi-step AI orchestration is now an external CLI: octomind workflow <file.toml>.
If you previously had workflow = "..." on a role, drop the field. To port an existing in-session workflow, rewrite it as an external workflow TOML — see doc/usage/09-workflows.md.
Config File Location
Current location (the only path the code reads): ~/.local/share/octomind/config/config.toml (macOS and Linux; %LOCALAPPDATA%\octomind\config\config.toml on Windows).
Override: OCTOMIND_CONFIG_PATH environment variable. There are no other legacy fallback paths — if your config lives somewhere else from an older install, move it here or point OCTOMIND_CONFIG_PATH at it.
Splitting a monolithic config
The config directory merges all *.toml files it contains, not just config.toml. Files named mcp-*.toml are loaded last as overrides. This is handy when migrating a large config: you can split MCP server definitions into a separate mcp-servers.toml (loaded after, so it wins on conflicts) instead of keeping everything in one file.
Automatic Upgrade
octomind config --upgradeThis bumps the config schema version field to the latest version. The current schema is version 1, and the only migration that exists is v0 → v1, which simply sets (or inserts) version = 1 at the top of the file. Before writing, it copies your config to <config>.toml.backup.
It does not rewrite any legacy section layouts — [role_name] → [[roles]], the filesystem builtin → external, the core/runtime split, [mcp] reshaping, and every other change in this guide must be applied by hand. --upgrade only touches the version line.
Runtime Namespace Move
The core builtin server was split into two: high-level tools stay in core, low-level harness-control tools moved to a new runtime server.
| Tool | Old server | New server |
|---|---|---|
plan | core | core |
tap (new) | -- | core |
mcp | core | runtime |
agent | core | runtime |
skill | core | runtime |
schedule | core | runtime |
capability | core | runtime |
If your config or tap manifest has server_refs = ["core", ...] and the role calls any of mcp, agent, skill, schedule, or capability, add "runtime" to the list:
[roles.mcp]
-server_refs = ["core", "filesystem", "agent"]
-allowed_tools = ["core:*", "filesystem:*", "agent:*"]
+server_refs = ["core", "runtime", "filesystem", "agent"]
+allowed_tools = ["core:*", "runtime:*", "filesystem:*", "agent:*"]The runtime server is registered automatically in the default config:
[[mcp.servers]]
name = "runtime"
type = "builtin"
timeout_seconds = 30
tools = []If you have a hand-rolled config without it, add the block.
Roles that don't call mcp/agent/skill/schedule/capability (most roles) don't need "runtime" at all — drop it from server_refs to keep the tool surface tighter.
agentappears in two places. Theruntimeserver hosts theagentmanagement tool (shown in the table above). A separateagentbuiltin server (a third builtin in the default config, alongsidecoreandruntime) hosts the dynamically generatedagent_<name>execution tools. If you use dynamic agents, keep both"runtime"and"agent"inserver_refs.
Filesystem Is Now External
filesystem is no longer a builtin server. It is provided as an external octofs stdio server — but you do not declare it yourself. The built-in default tap (muvon/tap) and the runtime overlay supply it. Your local config.toml only declares three builtin servers (core, runtime, agent); it does not contain a filesystem/octofs entry, and the default roles simply reference it:
[roles.mcp]
server_refs = ["core", "runtime", "filesystem", "agent"]Do not paste an octofs stdio block. Because the tap/overlay already provides
filesystem, hand-rolling a[[mcp.servers]]block for it is unnecessary and can cause conflicts. Only add one if you intentionally self-hostoctofs.
If you have a hand-rolled config that declares filesystem as type = "builtin", remove that block — the tap/overlay supplies the server; just keep "filesystem" in your roles' server_refs. This is a manual edit: octomind config --upgrade will not do it for you.
MCP Server Type
Old (incorrect in some docs): type = "stdin"
Correct: type = "stdio"
The server type for local process-based MCP servers is "stdio", not "stdin".
Session Commands
Removed:
-
/save-- Session persistence is automatic on exit
Added:
-
/skill-- Manage skills (list, use, forget)
Use /help to see current command list.