Before diving into specific issues, confirm you are running the latest release. Many bugs are fixed between versions. Run
operator --version to check."model not found in model_list" or OpenRouter "free is not a valid model ID"
"model not found in model_list" or OpenRouter "free is not a valid model ID"
SymptomYou see one or both of these errors at startup or when sending a message:CauseThe Valid free-tier OpenRouter model IDs:
agents.defaults.model field must match a model_name value in model_list exactly. Additionally, the model field inside the matching model_list entry is the identifier sent verbatim to the API — it must be a valid, fully-qualified model ID, not a shorthand.Common mistakes:"model": "free"— OpenRouter receives the stringfreeand rejects it."agents.defaults.model": "openrouter-free"but no entry inmodel_listwith"model_name": "openrouter-free".
openrouter/free— automatic free-tier routinggoogle/gemini-2.0-flash-exp:freemeta-llama/llama-3.1-8b-instruct:free
Gateway won't start — port already in use
Gateway won't start — port already in use
SymptomThe If you need to run Operator OS on a different port, override it in your config:In Docker, update the port mapping accordingly:
operator gateway command exits immediately after printing this error.CausePort 18790 is the default port for the Operator OS HTTP server and health endpoint. Another process — possibly a previous gateway instance that did not shut down cleanly — is already listening on it.FixFind and stop the conflicting process:Channel not connecting — Slack, Discord, or Telegram bot is offline
Channel not connecting — Slack, Discord, or Telegram bot is offline
SymptomThe gateway starts without errors but your bot never comes online in the messaging channel. You may see connection timeout errors in the logs:CauseThe bot token or app token is missing, incorrect, expired, or the channel is not enabled in
config.json.Fix- Verify the channel is enabled and tokens are populated:
- Ensure there are no trailing spaces or newline characters in token values.
-
For Slack specifically, the bot requires both a
bot_token(starting withxoxb-) and anapp_token(starting withxapp-). The app token requires theconnections:writescope and Socket Mode to be enabled in your Slack App settings. - Restart the gateway after editing the config:
Agent not responding — messages are received but no reply is sent
Agent not responding — messages are received but no reply is sent
SymptomThe channel connects successfully and the bot appears online, but messages sent to it receive no reply. No errors appear in the gateway logs.CauseMost commonly, the If this command hangs or returns an error, the issue is with the model configuration or API key, not the channel.
agents.defaults.model value does not match any model_name in model_list, or the API key for the configured model is invalid. The gateway can connect to channels independently of the LLM provider — a channel connection succeeding does not confirm the model is correctly configured.Fix- Test the model configuration directly from the CLI:
- Check that
agents.defaults.modelmatches amodel_nameinmodel_list:
- Verify your API key has not expired or been revoked by testing it directly against the provider’s API.
- If you are using Ollama for local inference, confirm Ollama is running and the model is pulled:
Memory and config not persisting across restarts
Memory and config not persisting across restarts
SymptomAfter restarting the agent or rebooting the machine, the agent has no memory of previous conversations. In Docker, Or with named volumes (preferred for production):After adding the volume, restart the stack:
config.json resets to defaults on every container restart.CauseThe ~/.operator directory (or /root/.operator in Docker) is not being persisted to durable storage. In Docker this happens when no volume is mounted for that path — writes go into the container’s writable layer and are lost when the container is removed.FixNative deployment: Ensure the binary is reading from and writing to a consistent OPERATOR_HOME. By default this is ~/.operator. Confirm you are running as the same user each time.Docker deployment: Mount a host directory or named volume to /root/.operator:Config file not found or onboard prompts on every start
Config file not found or onboard prompts on every start
SymptomRunning CauseEither Confirm the config file exists:If you store the config in a non-default location, set the path explicitly (check In Docker, the entrypoint script (
operator gateway always asks onboarding questions, or you see:operator onboard was never run, the binary is being run as a different user than the one who ran onboard, or the config path was changed and the binary cannot locate it.FixRun onboard once as the correct user:operator --help for the flag name, or set OPERATOR_HOME in your environment):docker/entrypoint.sh) runs operator onboard automatically only when both the config file and workspace directory are absent. If only one is missing (e.g., workspace was deleted but config is mounted read-only), the entrypoint skips onboard to avoid an interactive prompt hanging the container.Agent has access to files outside the workspace
Agent has access to files outside the workspace
SymptomThe agent can read or write files beyond With sandboxing enabled, the agent’s
~/.operator/workspace, which is unexpected given the default sandbox setting.CauseThe restrict_to_workspace setting has been explicitly set to false in your configuration.FixRemove the override or set it back to true:exec and file tools are confined to ~/.operator/workspace (or the configured workspace_path). The exec tool also blocks a set of destructive commands (rm -rf /, disk formatting, system shutdown commands) regardless of sandbox state.Binary won't run on the target architecture
Binary won't run on the target architecture
SymptomorCauseThe binary was compiled for a different architecture than the target machine. For example, an Download or cross-compile the correct binary. See Cross-compilation in the Edge hardware guide for the exact build commands for each architecture.
amd64 binary cannot run on an arm64 device.FixVerify the binary matches the target: