Skip to main content
Most fields in ~/.operator/config.json can be overridden at runtime with environment variables. This is especially useful for Docker deployments, CI environments, or any situation where modifying a file on disk is inconvenient.

Naming convention

OPERATOR_<SECTION>_<KEY>=value
  • Section and key names are uppercased.
  • Nested JSON keys are joined with underscores.
  • Boolean values: true / false.
  • Integer and float values: plain numeric strings (e.g., "8192", "0.7").
Example:
# JSON equivalent: agents.defaults.model_name = "gpt4"
export OPERATOR_AGENTS_DEFAULTS_MODEL_NAME=gpt4

# JSON equivalent: tools.web.brave.enabled = true
export OPERATOR_TOOLS_WEB_BRAVE_ENABLED=true
Complex nested map-style config — such as tools.mcp.servers.<name>.* and model_list entries — cannot be set via environment variables. Configure these in config.json.

Agent defaults

VariableTypeDefaultDescription
OPERATOR_AGENTS_DEFAULTS_WORKSPACEstring~/.operator/workspaceAgent working directory.
OPERATOR_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACEbooltruePrevent reading/writing outside the workspace.
OPERATOR_AGENTS_DEFAULTS_ALLOW_READ_OUTSIDE_WORKSPACEboolfalseAllow reading (but not writing) outside the workspace.
OPERATOR_AGENTS_DEFAULTS_MODEL_NAMEstringActive model alias. Must match a model_name in model_list.
OPERATOR_AGENTS_DEFAULTS_MODELstringDeprecated alias for MODEL_NAME. Prefer MODEL_NAME.
OPERATOR_AGENTS_DEFAULTS_IMAGE_MODELstringModel alias used for image-generation tasks.
OPERATOR_AGENTS_DEFAULTS_MAX_TOKENSint32768Maximum tokens per model response.
OPERATOR_AGENTS_DEFAULTS_TEMPERATUREfloat(provider default)Sampling temperature (0.0–2.0).
OPERATOR_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONSint50Maximum tool-call cycles per agent turn.
OPERATOR_AGENTS_DEFAULTS_MAX_MEDIA_SIZEint20971520Maximum media attachment size in bytes.
export OPERATOR_AGENTS_DEFAULTS_MODEL_NAME=claude
export OPERATOR_AGENTS_DEFAULTS_MAX_TOKENS=16384
export OPERATOR_AGENTS_DEFAULTS_TEMPERATURE=0.5
export OPERATOR_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS=30

Web tools

VariableTypeDefaultDescription
OPERATOR_TOOLS_WEB_PROXYstring""HTTP/SOCKS5 proxy for all web requests.
OPERATOR_TOOLS_WEB_FETCH_LIMIT_BYTESint10485760Maximum bytes fetched per URL (default 10 MB).
OPERATOR_TOOLS_WEB_BRAVE_ENABLEDboolfalseEnable Brave Search.
OPERATOR_TOOLS_WEB_BRAVE_API_KEYstring""Brave Search API key.
OPERATOR_TOOLS_WEB_BRAVE_MAX_RESULTSint5Maximum Brave search results per query.
OPERATOR_TOOLS_WEB_DUCKDUCKGO_ENABLEDbooltrueEnable DuckDuckGo search.
OPERATOR_TOOLS_WEB_DUCKDUCKGO_MAX_RESULTSint5Maximum DuckDuckGo results per query.
OPERATOR_TOOLS_WEB_PERPLEXITY_ENABLEDboolfalseEnable Perplexity search.
OPERATOR_TOOLS_WEB_PERPLEXITY_API_KEYstring""Perplexity API key.
OPERATOR_TOOLS_WEB_PERPLEXITY_MAX_RESULTSint5Maximum Perplexity results per query.
OPERATOR_TOOLS_WEB_TAVILY_ENABLEDboolfalseEnable Tavily search.
OPERATOR_TOOLS_WEB_TAVILY_API_KEYstring""Tavily API key.
OPERATOR_TOOLS_WEB_TAVILY_BASE_URLstring""Override Tavily API base URL.
OPERATOR_TOOLS_WEB_TAVILY_MAX_RESULTSint5Maximum Tavily results per query.
export OPERATOR_TOOLS_WEB_BRAVE_ENABLED=true
export OPERATOR_TOOLS_WEB_BRAVE_API_KEY=BSA-your-key
export OPERATOR_TOOLS_WEB_PROXY=http://proxy.corp.example.com:8080

Exec tool

VariableTypeDefaultDescription
OPERATOR_TOOLS_EXEC_ENABLE_DENY_PATTERNSbooltrueEnable built-in dangerous command blocking.
OPERATOR_TOOLS_EXEC_CUSTOM_DENY_PATTERNSstring""Comma-separated additional deny regex patterns.
OPERATOR_TOOLS_EXEC_CUSTOM_ALLOW_PATTERNSstring""Comma-separated allow-override regex patterns.
# Disable all default command blocking (use with extreme care)
export OPERATOR_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false

Cron tool

VariableTypeDefaultDescription
OPERATOR_TOOLS_CRON_EXEC_TIMEOUT_MINUTESint5Cron task execution timeout in minutes. 0 means no timeout.
export OPERATOR_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10

MCP tool

VariableTypeDefaultDescription
OPERATOR_TOOLS_MCP_ENABLEDboolfalseEnable MCP server integration globally.
export OPERATOR_TOOLS_MCP_ENABLED=true
Individual MCP server definitions (tools.mcp.servers.*) are not configurable via environment variables. Define them in config.json.

Path restrictions

VariableTypeDefaultDescription
OPERATOR_TOOLS_ALLOW_READ_PATHSstring""Comma-separated additional paths the agent may read.
OPERATOR_TOOLS_ALLOW_WRITE_PATHSstring""Comma-separated additional paths the agent may write.

Skills

VariableTypeDefaultDescription
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_ENABLEDbooltrueEnable the ClawHub skill registry.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_BASE_URLstringhttps://clawhub.aiClawHub API base URL.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_AUTH_TOKENstring""Authentication token for the registry.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_SEARCH_PATHstring/api/v1/searchSearch endpoint path.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_SKILLS_PATHstring/api/v1/skillsSkills list endpoint path.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_DOWNLOAD_PATHstring/api/v1/downloadDownload endpoint path.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_TIMEOUTint(default)Registry request timeout in seconds.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_MAX_ZIP_SIZEint(default)Maximum skill ZIP size in bytes.
OPERATOR_SKILLS_REGISTRIES_CLAWHUB_MAX_RESPONSE_SIZEint(default)Maximum registry response size in bytes.
OPERATOR_SKILLS_MAX_CONCURRENT_SEARCHESint2Maximum simultaneous registry search requests.
OPERATOR_SKILLS_SEARCH_CACHE_MAX_SIZEint50Maximum cached search entries.
OPERATOR_SKILLS_SEARCH_CACHE_TTL_SECONDSint300Search cache TTL in seconds.

Channels

Each channel exposes environment variables for its primary fields. The pattern is OPERATOR_CHANNELS_<CHANNEL>_<FIELD>.

Telegram

VariableTypeDefaultDescription
OPERATOR_CHANNELS_TELEGRAM_ENABLEDboolfalseEnable Telegram channel.
OPERATOR_CHANNELS_TELEGRAM_TOKENstring""Telegram bot token.
OPERATOR_CHANNELS_TELEGRAM_BASE_URLstring""Custom Telegram Bot API base URL.
OPERATOR_CHANNELS_TELEGRAM_PROXYstring""HTTP/SOCKS5 proxy.
OPERATOR_CHANNELS_TELEGRAM_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_TELEGRAM_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

Discord

VariableTypeDefaultDescription
OPERATOR_CHANNELS_DISCORD_ENABLEDboolfalseEnable Discord channel.
OPERATOR_CHANNELS_DISCORD_TOKENstring""Discord bot token.
OPERATOR_CHANNELS_DISCORD_PROXYstring""HTTP/SOCKS5 proxy.
OPERATOR_CHANNELS_DISCORD_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_DISCORD_MENTION_ONLYboolfalseOnly respond to @mentions (deprecated; use group_trigger).
OPERATOR_CHANNELS_DISCORD_REASONING_CHANNEL_IDstring""Channel ID for reasoning output.

Slack

VariableTypeDefaultDescription
OPERATOR_CHANNELS_SLACK_ENABLEDboolfalseEnable Slack channel.
OPERATOR_CHANNELS_SLACK_BOT_TOKENstring""Slack bot OAuth token (xoxb-…).
OPERATOR_CHANNELS_SLACK_APP_TOKENstring""Slack app-level token (xapp-…).
OPERATOR_CHANNELS_SLACK_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_SLACK_REASONING_CHANNEL_IDstring""Channel ID for reasoning output.

WhatsApp

VariableTypeDefaultDescription
OPERATOR_CHANNELS_WHATSAPP_ENABLEDboolfalseEnable WhatsApp channel.
OPERATOR_CHANNELS_WHATSAPP_BRIDGE_URLstringws://localhost:3001WhatsApp bridge WebSocket URL.
OPERATOR_CHANNELS_WHATSAPP_USE_NATIVEboolfalseUse native mode instead of bridge.
OPERATOR_CHANNELS_WHATSAPP_SESSION_STORE_PATHstring""Path to store session data.
OPERATOR_CHANNELS_WHATSAPP_ALLOW_FROMstring""Comma-separated allowlist.
OPERATOR_CHANNELS_WHATSAPP_REASONING_CHANNEL_IDstring""JID for reasoning output.

Feishu

VariableTypeDefaultDescription
OPERATOR_CHANNELS_FEISHU_ENABLEDboolfalseEnable Feishu channel.
OPERATOR_CHANNELS_FEISHU_APP_IDstring""Feishu app ID.
OPERATOR_CHANNELS_FEISHU_APP_SECRETstring""Feishu app secret.
OPERATOR_CHANNELS_FEISHU_ENCRYPT_KEYstring""Feishu event encryption key.
OPERATOR_CHANNELS_FEISHU_VERIFICATION_TOKENstring""Feishu webhook verification token.
OPERATOR_CHANNELS_FEISHU_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_FEISHU_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

DingTalk

VariableTypeDefaultDescription
OPERATOR_CHANNELS_DINGTALK_ENABLEDboolfalseEnable DingTalk channel.
OPERATOR_CHANNELS_DINGTALK_CLIENT_IDstring""DingTalk app client ID.
OPERATOR_CHANNELS_DINGTALK_CLIENT_SECRETstring""DingTalk app client secret.
OPERATOR_CHANNELS_DINGTALK_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_DINGTALK_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

QQ

VariableTypeDefaultDescription
OPERATOR_CHANNELS_QQ_ENABLEDboolfalseEnable QQ channel.
OPERATOR_CHANNELS_QQ_APP_IDstring""QQ app ID.
OPERATOR_CHANNELS_QQ_APP_SECRETstring""QQ app secret.
OPERATOR_CHANNELS_QQ_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_QQ_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

LINE

VariableTypeDefaultDescription
OPERATOR_CHANNELS_LINE_ENABLEDboolfalseEnable LINE channel.
OPERATOR_CHANNELS_LINE_CHANNEL_SECRETstring""LINE channel secret.
OPERATOR_CHANNELS_LINE_CHANNEL_ACCESS_TOKENstring""LINE channel access token.
OPERATOR_CHANNELS_LINE_WEBHOOK_HOSTstring0.0.0.0Webhook listener bind address.
OPERATOR_CHANNELS_LINE_WEBHOOK_PORTint18791Webhook listener port.
OPERATOR_CHANNELS_LINE_WEBHOOK_PATHstring/webhook/lineWebhook endpoint path.
OPERATOR_CHANNELS_LINE_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_LINE_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

OneBot

VariableTypeDefaultDescription
OPERATOR_CHANNELS_ONEBOT_ENABLEDboolfalseEnable OneBot channel.
OPERATOR_CHANNELS_ONEBOT_WS_URLstringws://127.0.0.1:3001OneBot WebSocket server URL.
OPERATOR_CHANNELS_ONEBOT_ACCESS_TOKENstring""OneBot access token.
OPERATOR_CHANNELS_ONEBOT_RECONNECT_INTERVALint5Reconnect interval in seconds.
OPERATOR_CHANNELS_ONEBOT_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_ONEBOT_REASONING_CHANNEL_IDstring""Group/user ID for reasoning output.

MaixCam

VariableTypeDefaultDescription
OPERATOR_CHANNELS_MAIXCAM_ENABLEDboolfalseEnable MaixCam channel.
OPERATOR_CHANNELS_MAIXCAM_HOSTstring0.0.0.0Listener bind address.
OPERATOR_CHANNELS_MAIXCAM_PORTint18790Listener port.
OPERATOR_CHANNELS_MAIXCAM_ALLOW_FROMstring""Comma-separated allowlist of device IDs.
OPERATOR_CHANNELS_MAIXCAM_REASONING_CHANNEL_IDstring""Channel ID for reasoning output.

WeCom Bot

VariableTypeDefaultDescription
OPERATOR_CHANNELS_WECOM_ENABLEDboolfalseEnable WeCom Bot channel.
OPERATOR_CHANNELS_WECOM_TOKENstring""WeCom verification token.
OPERATOR_CHANNELS_WECOM_ENCODING_AES_KEYstring""43-character AES encoding key.
OPERATOR_CHANNELS_WECOM_WEBHOOK_URLstring""WeCom group robot webhook URL.
OPERATOR_CHANNELS_WECOM_WEBHOOK_PATHstring/webhook/wecomWebhook endpoint path.
OPERATOR_CHANNELS_WECOM_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_WECOM_REPLY_TIMEOUTint5Reply timeout in seconds.
OPERATOR_CHANNELS_WECOM_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

WeCom App

VariableTypeDefaultDescription
OPERATOR_CHANNELS_WECOM_APP_ENABLEDboolfalseEnable WeCom App channel.
OPERATOR_CHANNELS_WECOM_APP_CORP_IDstring""WeCom corporation ID.
OPERATOR_CHANNELS_WECOM_APP_CORP_SECRETstring""WeCom application secret.
OPERATOR_CHANNELS_WECOM_APP_AGENT_IDint0WeCom application agent ID.
OPERATOR_CHANNELS_WECOM_APP_TOKENstring""WeCom verification token.
OPERATOR_CHANNELS_WECOM_APP_ENCODING_AES_KEYstring""43-character AES encoding key.
OPERATOR_CHANNELS_WECOM_APP_WEBHOOK_PATHstring/webhook/wecom-appWebhook endpoint path.
OPERATOR_CHANNELS_WECOM_APP_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_WECOM_APP_REPLY_TIMEOUTint5Reply timeout in seconds.
OPERATOR_CHANNELS_WECOM_APP_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

WeCom AI Bot

VariableTypeDefaultDescription
OPERATOR_CHANNELS_WECOM_AIBOT_ENABLEDboolfalseEnable WeCom AI Bot channel.
OPERATOR_CHANNELS_WECOM_AIBOT_TOKENstring""WeCom verification token.
OPERATOR_CHANNELS_WECOM_AIBOT_ENCODING_AES_KEYstring""43-character AES encoding key.
OPERATOR_CHANNELS_WECOM_AIBOT_WEBHOOK_PATHstring/webhook/wecom-aibotWebhook endpoint path.
OPERATOR_CHANNELS_WECOM_AIBOT_MAX_STEPSint10Maximum streaming steps per response.
OPERATOR_CHANNELS_WECOM_AIBOT_WELCOME_MESSAGEstringHello! I'm your AI assistant...Message sent on chat open.
OPERATOR_CHANNELS_WECOM_AIBOT_ALLOW_FROMstring""Comma-separated allowlist of user IDs.
OPERATOR_CHANNELS_WECOM_AIBOT_REASONING_CHANNEL_IDstring""Chat ID for reasoning output.

Standard channel

VariableTypeDefaultDescription
OPERATOR_CHANNELS_STANDARD_ENABLEDboolfalseEnable the standard WebSocket channel.
OPERATOR_CHANNELS_STANDARD_TOKENstring""Bearer token for authenticating connections.
OPERATOR_CHANNELS_STANDARD_ALLOW_FROMstring""Comma-separated allowlist of client IDs.

Heartbeat

VariableTypeDefaultDescription
OPERATOR_HEARTBEAT_ENABLEDbooltrueEnable heartbeat pings.
OPERATOR_HEARTBEAT_INTERVALint30Heartbeat interval in minutes (minimum effective: 5).

Devices

VariableTypeDefaultDescription
OPERATOR_DEVICES_ENABLEDboolfalseEnable device monitoring.
OPERATOR_DEVICES_MONITOR_USBbooltrueMonitor USB plug/unplug events.

Gateway

VariableTypeDefaultDescription
OPERATOR_GATEWAY_HOSTstring127.0.0.1Bind address for the local gateway.
OPERATOR_GATEWAY_PORTint18790TCP port for the local gateway.

Media cleanup

VariableTypeDefaultDescription
OPERATOR_MEDIA_CLEANUP_ENABLEDbooltrueEnable automatic media file cleanup.
OPERATOR_MEDIA_CLEANUP_MAX_AGEint30Age threshold for cleanup in minutes.
OPERATOR_MEDIA_CLEANUP_INTERVALint5Cleanup job interval in minutes.

Path overrides

VariableTypeDescription
OPERATOR_CONFIGstringOverride the full path to the config file. Default is ~/.operator/config.json.
OPERATOR_HOMEstringOverride the base directory used for default workspace path. Default is ~/.operator. The workspace defaults to $OPERATOR_HOME/workspace. Does not change the config file path — use OPERATOR_CONFIG for that.
# Point to a custom config file path
export OPERATOR_CONFIG=/etc/operator/config.json

# Change the base directory for workspace defaults
export OPERATOR_HOME=/srv/operator

Docker / container example

A minimal environment for a containerized deployment using Telegram and Anthropic:
OPERATOR_CONFIG=/data/operator/config.json
OPERATOR_AGENTS_DEFAULTS_MODEL_NAME=claude
OPERATOR_CHANNELS_TELEGRAM_ENABLED=true
OPERATOR_CHANNELS_TELEGRAM_TOKEN=YOUR_BOT_TOKEN
OPERATOR_CHANNELS_TELEGRAM_ALLOW_FROM=123456789
OPERATOR_TOOLS_WEB_DUCKDUCKGO_ENABLED=true
OPERATOR_HEARTBEAT_ENABLED=false
Mount config.json (containing model_list with the Anthropic API key) at the path pointed to by OPERATOR_CONFIG, or use the OPERATOR_AGENTS_DEFAULTS_MODEL_NAME variable alongside a config.json that has credentials pre-filled.

Build docs developers (and LLMs) love