This page lists the environment variables mono-agent reads, grouped by domain. Each table names the JSON field the variable overrides; variables that configure only a CLI or runtime child process are marked separately.
Config fields may be JSON-only: only fields with a documented MONO_AGENT_* mapping accept one. In the generated config reference, -- means none, as for channels.plugins. Use the annotated blueprint to see structured JSON-only fields in context.
For fields with a mapping, resolution is passed environment > JSON > built-in default.
The CLI builds that environment before config loading:
Variables already exported in the shell remain in place.
./.env fills variables that are still unset. Pass --env-file <path> to select another file.
The config loader receives the resulting environment and applies it over JSON and defaults.
The machine-wide mono-agent web console is the exception: it does not load an agent config or the invoking folder’s .env. For mono-agent validate --consumer <path>, the default .env and relative --env-file paths resolve inside the consumer folder.
loadMonoAgentConfigWithSources is lower-level than the CLI. It does not read a dotenv file; a programmatic host must load one itself if desired and pass the prepared env record.
Public display name. It may seed human-facing trace/A2A labels but never paths, service ids, sessions, or provider identity.
MONO_AGENT_MODEL
runtime.model
<provider>:<model> runtime reference, e.g. openai-codex:gpt-5.6-terra, anthropic:claude-sonnet-4-6, ollama:qwen3:8b. Required.
MONO_AGENT_EXECUTION_MODE
runtime.executionMode
Retired. Setting it fails config load with `MONO_AGENT_EXECUTION_MODE` was removed; mono-agent runs only the Pi runtime (SDK). Remove the variable from your environment and `.env`. (the JSON key reports the equivalent repair for runtime.executionMode). An empty assignment (KEY=) is treated as unset.
MONO_AGENT_FALLBACKS_JSON
runtime.fallbacks
Canonical JSON array of { "model": "...", "effort"?: "...", "attempts"?: 1-10 }; ordered and uncapped. Omitted effort means that route’s provider default.
MONO_AGENT_FALLBACK_MODELS
runtime.fallbackModels
Retired. Setting it fails config load naming the environment repair: remove the variable and re-express the chain as MONO_AGENT_FALLBACKS_JSON above, or as runtime.fallbacks in the config file. An empty assignment (KEY=) is treated as unset.
MONO_AGENT_RETRY_PRIMARY_ATTEMPTS
runtime.retry.primaryAttempts
Total attempts on runtime.model including the first, 1-10. Default 2. Set 1 to disable same-model retries. See runtime fallback configuration.
MONO_AGENT_RETRY_BACKOFF_MS
runtime.retry.backoffMs
Delay before the first same-model retry, doubling on each further retry. Default 1000.
MONO_AGENT_RETRY_MAX_BACKOFF_MS
runtime.retry.maxBackoffMs
Ceiling for the doubling retry delay. Default 15000.
MONO_AGENT_ROUTE_SAFETY
runtime.routeSafety
Retired. Every route is Pi-native, so per-route-native has no meaning; setting the variable fails config load, naming the variable to remove. An empty assignment (KEY=) is treated as unset.
MONO_AGENT_EFFORT
runtime.effort
none / minimal / low / medium / high / xhigh / max / ultra; the selected model may support only a subset. Reasoning-capable models map ultra to LOW; models without reasoning use OFF. max degrades to xhigh unless the resolved model advertises it. mono-agent doctor validates effort against the model’s advertised levels and warns, naming the nearest supported level, when a configured value is outside that set. Ranking above max only prevents keyword downgrade. See execution, effort, and permissions.
MONO_AGENT_PERMISSION_MODE
runtime.permissionMode
default / plan / acceptEdits / bypassPermissions. Validated and forwarded for compatibility, but the Pi runtime drives supervision from direct tool allow/deny policy rather than consuming the mode.
Explicit retained-context override (4000-200000); omitted derives 10% of the effective window, clamped to 4000-20000.
MONO_AGENT_COMPACTION_SUMMARY_MAX_TOKENS
runtime.compaction.summaryMaxTokens
Explicit combined summary-output budget (1000-64000); omitted derives 4% of the effective window, clamped to 2000-12000.
MONO_AGENT_COMPACTION_MIN_SAVINGS_TOKENS
runtime.compaction.minSavingsTokens
Explicit minimum proactive savings (0-500000); omitted derives 10% of the effective window, clamped to 4000-20000. Reactive recovery accepts any positive reduction.
MONO_AGENT_COMPACTION_FIXED_OVERHEAD_ENABLED
runtime.compaction.fixedOverheadEnabled
Includes the system prompt, tool schemas, and current user turn in request estimates; default true.
MONO_AGENT_COMPACTION_CONTEXT_WINDOW_OVERRIDE
runtime.compaction.contextWindowOverride
Persistent context-window correction (32000-10000000) for inaccurate provider metadata; learned overflow evidence may lower it process-locally.
MONO_AGENT_WORKSPACE
runtime.workspace
Working directory for runtime tools.
MONO_AGENT_SESSION_MODE
runtime.session.mode
continuous (default) reuses a warm provider session and queues turns per conversation; per-message starts each provider turn cold. Durable history remains a separate replay layer in both modes.
MONO_AGENT_SESSION_IDLE_TIMEOUT_MS
runtime.session.idleTimeoutMs
Idle eviction window for warm continuous sessions; default 30 minutes. It does not delete durable history. See Sessions and concurrency.
MONO_AGENT_SESSION_ISOLATE_PROACTIVE
runtime.session.isolateProactive
When true, scheduled requests carrying cron metadata run one-shot instead of acquiring or saving the conversation’s warm session. Interactive turns are unchanged.
MONO_AGENT_SESSION_ROLLOVER
runtime.session.rollover
none or daily; daily adds a date bucket to each conversation id, except console (TUI/web) threads, which own their own session boundary.
MONO_AGENT_SESSION_ROLLOVER_TIMEZONE
runtime.session.rolloverTimezone
IANA timezone for daily bucket boundaries; defaults to the system timezone.
MONO_AGENT_SESSION_ROLLOVER_NOTICE
runtime.session.rolloverNotice
When true, the first turn in a new daily bucket receives a one-line adapter-visible notice. Default off; it does not enable rollover by itself.
MONO_AGENT_CONCURRENCY_MAX_CONCURRENT_RUNS
concurrency.maxConcurrentRuns
Runs executing against the provider at once (per-channel).
MONO_AGENT_CONCURRENCY_MAX_PENDING_RUNS
concurrency.maxPendingRuns
Runs admitted before the provider step (per-channel).
Canonical provider map. An object of provider-id keys, optionally with a legacy local array beside them; may also set the reserved piNative and piAuthPath keys. Any other key is read as a provider id, so there is no entries[] array form here. See Provider configuration.
MONO_AGENT_LOCAL_PROVIDERS_JSON
providers
Deprecated, replaced by MONO_AGENT_PROVIDERS_JSON with the provider-map shape; still accepted with a warning for backward compatibility.
MONO_AGENT_LOCAL_PROVIDER_*
providers
Legacy single-provider field overrides; still loaded. Prefer the provider map.
MONO_AGENT_PI_AUTH_PATH
providers.piAuthPath
Pi credential file; a non-empty value wins over JSON and loses only to auth login --pi-auth-path. Default ~/.pi/agent/auth.json; ~ expands to home and relative paths resolve from the agent/invocation working directory.
MONO_AGENT_PI_TRANSPORT
providers.piNative.transport
Preferred Pi transport: auto (default), sse, websocket, or websocket-cached; unsupported providers ignore it.
MONO_AGENT_PI_PROMPT_CACHE_DIAGNOSTICS
providers.piNative.promptCacheDiagnostics
Metadata-only prompt-cache request fingerprints in run artifacts; default false. Never prompt text, tool arguments, cache keys, endpoints or credentials.
Storage root for built-in memory; relative paths resolve from the agent folder. Required when the built-in memory backend is configured.
MONO_AGENT_MEMORY_MAX_BYTES
memory.maxBytes
Maximum bytes returned in an automatic recalled-memory block; default 64000.
MONO_AGENT_MEMORY_WRITE_MODE
memory.writeMode
disabled / append-host-summary / capture (capture requires mode: bujo for the bujo backend, or an external backend that extracts server-side). See memory capture and recall.
MONO_AGENT_MEMORY_SUPERMEMORY_BASE_URL
memory.supermemory.baseUrl
Required when backend: supermemory. REST base URL of the local OSS binary or hosted cloud.
MONO_AGENT_MEMORY_SUPERMEMORY_API_KEY
memory.supermemory.apiKey
Inline API key (optional for no-auth local). Prefer _API_KEY_ENV.
MONO_AGENT_MEMORY_SUPERMEMORY_API_KEY_ENV
memory.supermemory.apiKeyEnv
Name of the env var holding the key; only the name is persisted in resolved config.
MONO_AGENT_MEMORY_SUPERMEMORY_CONTAINER
memory.supermemory.container
Container/namespace tag scoping this agent’s memories. Defaults to the trace sourceId.
MONO_AGENT_MEMORY_SUPERMEMORY_TIMEOUT_MS
memory.supermemory.timeoutMs
Per-call HTTP timeout (1–600000, default 10000).
MONO_AGENT_MEMORY_SUPERMEMORY_EXPOSE_MCP_SERVER
memory.supermemory.exposeMcpServer
Also inject Supermemory’s official MCP server alongside the in-app MemoryRecall tool. Default false.
MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDER
memory.embeddings.provider
ollama, lmstudio, or openai. The configured provider is exclusive; there is no cross-provider fallback. See memory embeddings.
MONO_AGENT_MEMORY_EMBEDDINGS_MODEL
memory.embeddings.model
Embedding model string.
MONO_AGENT_MEMORY_EMBEDDINGS_DIM
memory.embeddings.dim
Embedding dimension.
MONO_AGENT_MEMORY_EMBEDDINGS_ENDPOINT
memory.embeddings.endpoint
Service root: defaults to http://localhost:11434 for Ollama, http://localhost:1234 for LM Studio, or https://api.openai.com/v1 for OpenAI.
MONO_AGENT_MEMORY_EMBEDDINGS_API_KEY_ENV
memory.embeddings.apiKeyEnv
Name of the variable holding the key. LM Studio is keyless when omitted; when declared, a missing/empty named variable reports waiting rather than silently retrying keyless.
MONO_AGENT_MEMORY_EMBEDDINGS_API_KEY
memory.embeddings.apiKey
Direct key override. Prefer _API_KEY_ENV so config stores only a variable name.
Cooldown before an open embedding circuit permits a trial request (1–3600000); default 30000.
MONO_AGENT_MEMORY_RECALL_TOOL_ENABLED
memory.recallTool.enabled
Explicit memory-read tools; default on. Enables targeted MemoryRecall for every configured backend and local-only chronological MemoryJournal when supported; explicit false opts out of both without disabling automatic recall.
MONO_AGENT_MEMORY_REMEMBER_TOOL_ENABLED
memory.rememberTool.enabled
Agent-callable Remember durable write tool; default on for the bujo backend, off for external backends, explicit false opts out. Also requires Remember under a restrictive tools.allowedTools.
ollama or agent-host. Strictly required for BuJo capture and tier selection; projection-only consolidation itself makes no model call. Missing prerequisites fail instead of downshifting tiers.
MONO_AGENT_MEMORY_LLM_MODEL
memory.llm.model
Chat model for the capture pipeline.
MONO_AGENT_MEMORY_LLM_EXECUTION_MODE
memory.llm.executionMode
Retired for the same reason as MONO_AGENT_EXECUTION_MODE; setting it fails config load, naming the variable to remove. An empty assignment (KEY=) is treated as unset.
MONO_AGENT_MEMORY_LLM_ENDPOINT
memory.llm.endpoint
Ollama-only endpoint override.
MONO_AGENT_MEMORY_LLM_TRACE
memory.llm.trace
Enables trace recording for an agent-host memory LLM; default true.
MONO_AGENT_MEMORY_LLM_TIMEOUT_MS
memory.llm.timeoutMs
In-app per-call memory-LLM timeout (1000–600000, default 60000); see the memory-LLM timeout.
Allowlist. Unset keeps the allow-all default; * is allow-all; an empty value ("") is the explicit chat-only []. See tool policy.
MONO_AGENT_DISALLOWED_TOOLS
tools.disallowedTools
Denylist (deny wins; overlap rejected).
MONO_AGENT_FILE_TOOL_READABLE_ROOTS
tools.filesystem.readableRoots
Comma-separated extra roots for managed Read, Glob, and Grep while the process sandbox is off. Lexical and realpath containment prevent symlink escapes.
MONO_AGENT_FILE_TOOL_WRITABLE_ROOTS
tools.filesystem.writableRoots
Comma-separated extra roots for managed Write and Edit while the process sandbox is off; writable roots are also readable.
Comma-separated stdio MCP server names that receive trusted request-scoped context and progress capabilities.
MONO_AGENT_CONTINUATION_SERVERS
tools.continuationServers
Comma-separated stdio or loopback-HTTP MCP server names that receive trusted request-bound continuation claim capabilities. See durable continuations.
MONO_AGENT_MCP_CALL_TIMEOUT_MS
tools.mcpCallTimeoutMs
Inactivity timeout per MCP tool call; tool progress notifications reset it. Default 120000.
MONO_AGENT_MCP_CALL_MAX_TOTAL_TIMEOUT_MS
tools.mcpCallMaxTotalTimeoutMs
Hard wall clock per MCP tool call that progress cannot extend. Default 2700000 (45 min). An AskUser configured with no automatic expiry is narrowly exempt.
MONO_AGENT_WEB_SEARCH_BACKEND
tools.web.search.backend
auto (default), strict searxng, strict ollama, strict codex, or keyless. Auto tries explicitly configured Ollama → configured SearXNG → ChatGPT-subscription Codex → keyless. Without an Ollama block, existing SearXNG/Codex/keyless behavior is unchanged.
MONO_AGENT_WEB_SEARCH_MAX_REQUESTS_PER_RUN
tools.web.search.maxRequestsPerRun
Hard limit on actual provider search requests in one logical run; integer 1–20, default 4. Cache hits, coalesced followers, cooldown skips, and quota skips consume no request.
MONO_AGENT_WEB_SEARCH_SEARXNG_ENDPOINT
tools.web.search.searxng.endpoint
Canonical unauthenticated loopback HTTP SearXNG base URL; required by strict searxng.
MONO_AGENT_WEB_SEARCH_ENDPOINT
tools.web.search.endpoint
Compatibility alias for the canonical SearXNG endpoint variable. Existing config remains valid; prefer the provider-specific name.
MONO_AGENT_WEB_SEARCH_OLLAMA_BASE_URL
tools.web.search.ollama.baseUrl
Ollama origin; strict Ollama defaults to http://127.0.0.1:11434. Hosted search accepts exact https://ollama.com; custom public origins require HTTPS plus explicit trust.
MONO_AGENT_WEB_SEARCH_OLLAMA_API_KEY_ENV
tools.web.search.ollama.apiKeyEnv
Explicit environment-variable name for hosted Ollama auth. Required only for exact https://ollama.com; rejected for every other origin.
MONO_AGENT_WEB_SEARCH_OLLAMA_TRUST_PUBLIC_URL
tools.web.search.ollama.trustPublicUrl
Explicit true acknowledgement for an unauthenticated custom public HTTPS Ollama origin. Never authorizes hosted credentials there.
The host service itself is configured through the continuations JSON block. continuations.detachedServices[].tokenEnv names an operator-chosen environment variable containing that service’s bearer; there is deliberately no fixed environment variable that accepts a raw detached token. Selected MCP servers receive reserved run-scoped MONO_AGENT_CONTINUATION_CLAIM_* variables or x-mono-agent-continuation-claim-* headers from the host. Those values are runtime capabilities, not operator overrides, and configured spoof values are replaced.
The interaction bridge starts automatically when AskUser is allowed (under the allow-all default, or listed in a specific tools.allowedTools), when the interaction block or any interaction env override is configured, or when interaction.progress.enabled resolves true and tools.mcpRequestContextServers names at least one opted project MCP server. MONO_AGENT_INTERACTION_BRIDGE_URL / MONO_AGENT_INTERACTION_BRIDGE_TOKEN are an app-owned master capability forwarded only to the trusted adapter-tool child; do not set or pass them to project tools. Only opted project stdio MCP children receive a separate run-scoped MONO_AGENT_INTERACTION_PROGRESS_URL / MONO_AGENT_INTERACTION_PROGRESS_TOKEN pair, and their master-capability env keys are overwritten with empty strings.
Opted project stdio MCPs also receive host-owned filesystem context after all MCP option layers are merged: MONO_AGENT_MCP_RUN_OUTPUT_DIR, MONO_AGENT_MCP_ATTACHMENTS_ROOT, MONO_AGENT_MCP_ALLOWED_ATTACHMENT_PATHS, and MONO_AGENT_MCP_ALLOWED_ATTACHMENT_IDENTITIES. The path value is a JSON array containing only lexical paths saved successfully for the current request; the identity value contains matching { "path", "dev", "ino" } objects captured from the writer descriptors. Empty arrays are authoritative and configured values cannot override them. These are runtime-injected context keys, not operator configuration variables.
Env var
JSON key it overrides
Notes
MONO_AGENT_INTERACTION_BRIDGE_HOST
interaction.bridge.host
Bind host. Default 127.0.0.1; keep it loopback because non-loopback values are not rejected.
MONO_AGENT_INTERACTION_BRIDGE_PORT
interaction.bridge.port
Bridge port. Default 0 (ephemeral — consumers get the URL via env).
MONO_AGENT_ASK_USER_TIMEOUT_MS
interaction.askUser.timeoutMs
Max wait for one AskUser interaction (one to five questions). Default 600000 (10 min); set none to disable automatic expiry, equivalent to JSON null.
MONO_AGENT_PROGRESS_ENABLED
interaction.progress.enabled
Route tool progress posts to channel status messages. Default true.
none / localhost / allowlist / all. all keeps filesystem enforcement while leaving egress open (SRT library-entry launch; managed or explicit node+cli only).
MONO_AGENT_SANDBOX_NETWORK_ALLOWLIST
sandbox.network.allowlist
Domain allowlist.
MONO_AGENT_SANDBOX_READABLE_ROOTS
sandbox.readableRoots
Readable filesystem roots.
MONO_AGENT_SANDBOX_WRITABLE_ROOTS
sandbox.writableRoots
Writable filesystem roots.
MONO_AGENT_SANDBOX_DENY_WRITE
sandbox.denyWrite
Deny-write globs (.env*, .git/config, .git/hooks/** denied by default).
MONO_AGENT_SANDBOX_FALLBACK
sandbox.fallback
fail-closed vs unsafe-host-process when srt is unavailable.
Most channels are opt-in via their enabled flag (default off). The tui operator surface defaults on so the TUI/web console can chat without per-agent edits. The tables below enumerate every channel environment variable. Structured JSON-only fields have no invented environment form and are identified beside the relevant channel; consult the annotated config blueprint for the complete per-channel shape.
Allow any chat instead of requiring allowedChatIds; default false.
MONO_AGENT_TELEGRAM_GROUP_MODE
telegram.groupMode
any (default) runs every allowed group message; mention admits native bot mentions and replies to bot messages. Direct chats and commands are unaffected.
MONO_AGENT_TELEGRAM_STRIP_MENTION_TEXT
telegram.stripMentionText
Remove the matching native @mention before the responder sees the text; default true.
MONO_AGENT_TELEGRAM_REACTIONS
telegram.reactions
All-on/all-off boolean override for the lifecycle status reactions (👀 working / 👍 done / 👎 error). Granular per-state control ({ working, done, error }) is JSON-only.
MONO_AGENT_TELEGRAM_IP_FAMILY
telegram.transport.ipFamily
Pin the Bot API HTTP client to IPv4 (4) or IPv6 (6); omit for dual-stack. Workaround for a broken IPv6 route to api.telegram.org.
MONO_AGENT_TELEGRAM_POLL_WATCHDOG_MS
telegram.pollWatchdogMs
Poll-liveness watchdog window (ms); default 120000, 0 disables. Force-restarts a runner that stops delivering updates without crashing.
MONO_AGENT_TELEGRAM_API_ROOT
telegram.apiRoot
Base URL of a self-hosted Bot API server (e.g. http://127.0.0.1:8081). Omit for api.telegram.org. See Telegram channel configuration.
MONO_AGENT_TELEGRAM_ATTACHMENT_MAX_BYTES
telegram.attachments.maxBytes
Inbound attachment download cap (bytes). Default 20 MiB (the hosted API’s hard limit); raise it only with a self-hosted server.
Per-file download timeout (ms) on the URL branch; default 30000, 0 disables.
MONO_AGENT_TELEGRAM_UPLOAD_MAX_BYTES
telegram.attachments.maxUploadBytes
Upload cap (bytes) for TelegramSendFile; default 20 MiB.
MONO_AGENT_TELEGRAM_TRANSCRIPTION_ENDPOINT
telegram.transcription.endpoint
Full HTTP(S) URL of an OpenAI-compatible POST /v1/audio/transcriptions route. Unset disables transcription. The built-in transcriber has no credential field and sends no Authorization header, so the endpoint must accept unauthenticated requests (typically from a local server).
MONO_AGENT_TELEGRAM_TRANSCRIPTION_MODEL
telegram.transcription.model
Model name sent with each transcription request; required when the endpoint is set.
MONO_AGENT_TELEGRAM_TRANSCRIPTION_LANGUAGE
telegram.transcription.language
Optional ISO-639 language hint.
MONO_AGENT_TELEGRAM_TRANSCRIPTION_TIMEOUT_MS
telegram.transcription.timeoutMs
Per-call timeout in milliseconds (1–3600000); default 120000, independent of the attachment download timeout.
Allow any joined channel instead of requiring allowedChannelIds; default false.
MONO_AGENT_SLACK_BOT_USER_IDS
slack.botUserIds
Comma-separated bot user IDs used to recognize native mentions.
MONO_AGENT_SLACK_MENTION_TEXT_ALIASES
slack.mentionTextAliases
Comma-separated plain-text self identities recognized after admission; aliases do not admit shared-channel traffic without an app_mention event.
MONO_AGENT_SLACK_STRIP_MENTION_TEXT
slack.stripMentionText
When unset, preserves one readable authenticated self-mention marker; true restores legacy full stripping and false keeps raw mention forms. Operators using only botUserIds must set true to retain the previous implicit stripping behavior.
MONO_AGENT_SLACK_UNFURL_LINKS
slack.unfurlLinks
Optional native-agent chat.postMessage link-preview override. Omit to preserve Slack’s current default behavior.
MONO_AGENT_SLACK_UNFURL_MEDIA
slack.unfurlMedia
Optional native-agent chat.postMessage media-preview override. Omit to preserve Slack’s current default behavior.
MONO_AGENT_SLACK_RESOLVE_USER_NAMES
slack.resolveUserNames
Resolve the speaker’s display name and handle via users.info so the agent knows who is talking; default true. Requires the users:read scope; a missing scope leaves turns unnamed.
MONO_AGENT_SLACK_RESOLVE_CHANNEL_NAMES
slack.resolveChannelNames
Resolve the channel’s name via conversations.info so the agent knows which channel it is talking in; default true. Requires channels:read/groups:read; a missing scope leaves the surface named by kind and id only.
MONO_AGENT_SLACK_THREAD_CONTEXT_ENABLED
slack.threadContext.enabled
Send what was said in the conversation before the agent was triggered as untrusted background context; default true. Needs a *:history scope.
MONO_AGENT_SLACK_THREAD_CONTEXT_MAX_MESSAGES
slack.threadContext.maxMessages
Messages of context sent per turn, newest kept; default 15, maximum 30, 0 disables the read.
MONO_AGENT_SLACK_THREAD_CONTEXT_REQUEST_LIMIT
slack.threadContext.requestLimit
Objects requested from Slack per read; default 15, matching Slack’s cap for non-Marketplace apps.
MONO_AGENT_SLACK_THREAD_CONTEXT_TIMEOUT_MS
slack.threadContext.timeoutMs
Budget for the whole context phase including name resolution (ms); default 4000. Exceeding it submits the turn with less context rather than delaying it.
Silence budget before the watchdog force-recycles the socket (ms); default 90000, 0 disables the watchdog.
MONO_AGENT_SLACK_RECONNECT_INITIAL_BACKOFF_MS
slack.reconnectInitialBackoffMs
First reconnect backoff after a non-graceful drop (ms); default 500.
MONO_AGENT_SLACK_RECONNECT_MAX_BACKOFF_MS
slack.reconnectMaxBackoffMs
Backoff ceiling (ms); default 30000. Jitter (ratio 0.2) is applied on by default.
MONO_AGENT_SLACK_RECONNECT_STABILITY_MS
slack.reconnectStabilityMs
A reconnect must stay open this long before the backoff resets (ms); default 30000 (not per-connect).
MONO_AGENT_SLACK_RECONNECT_STARTUP_GRACE_MS
slack.reconnectStartupGraceMs
Window (ms) to quietly retry a lingering prior-process socket instead of flagging degraded; default 10000.
MONO_AGENT_SLACK_DRAIN_DEADLINE_MS
slack.drainDeadlineMs
Backstop (ms) to force a reconnect after a watchdog terminate() if the old socket emits no close; default 5000.
All Slack resilience vars are optional integers (0–3600000); omit to use the default. They tune the terminate-first, jittered, stability-gated reconnect loop and the silence watchdog. See Slack channel configuration.
The structured Slack interaction fields are configured only in mono-agent.config.json:
slack.shortcuts is JSON-only and has no environment-variable form.
slack.homeTab is JSON-only and has no environment-variable form.
Comma-separated linked-account JIDs used to recognize native group mentions.
MONO_AGENT_WHATSAPP_MENTION_TEXT_ALIASES
plugin config.mentionTextAliases
Comma-separated text aliases that count as group mentions.
MONO_AGENT_WHATSAPP_STRIP_MENTION_TEXT
plugin config.stripMentionText
Remove the matched mention or alias before the prompt reaches the agent. When unset, defaults to true only when mentionTextAliases is non-empty; botJids alone does not enable stripping, so otherwise it defaults to false.
Messenger is loaded through channels.plugins[] with package: "@mono-agent/messenger-adapter". These env vars override that plugin entry’s config fields, except the three credentials, which are environment-only: pageAccessToken, appSecret, and verifyToken are rejected in JSON config with a typed invalid_config error.
Env var
JSON key it overrides
Notes
MONO_AGENT_MESSENGER_ENABLED
plugin config.enabled
Opt-in switch; default false.
MONO_AGENT_MESSENGER_PAGE_ACCESS_TOKEN
env-only (no JSON key)
Page access token used for the Send API. Required when enabled.
MONO_AGENT_MESSENGER_APP_SECRET
env-only (no JSON key)
App secret used to verify X-Hub-Signature-256 over the raw webhook body. Required when enabled.
MONO_AGENT_MESSENGER_VERIFY_TOKEN
env-only (no JSON key)
Token Meta echoes during webhook registration. Required when enabled.
MONO_AGENT_MESSENGER_ALLOWED_USER_IDS
plugin config.allowedUserIds
Comma-separated page-scoped user ids (PSIDs). Or allowAllUsers.
MONO_AGENT_MESSENGER_ALLOW_ALL_USERS
plugin config.allowAllUsers
Allow any sender instead of requiring allowedUserIds; default false.
Optional on loopback; required for any enabled non-loopback bind. Clients send it as a bearer.
MONO_AGENT_WEBHOOK_RETENTION_MS
webhook.retentionMs
Async status retention in milliseconds; default 300000.
MONO_AGENT_WEBHOOK_MAX_STORED_REQUESTS
webhook.maxStoredRequests
Maximum retained async statuses; default 100.
MONO_AGENT_WEBHOOK_ENDPOINTS_JSON
webhook.endpoints[]
JSON array of named endpoints.
MONO_AGENT_WEBHOOK_NOTIFY
webhook.notify
Single-endpoint native notification toggle.
MONO_AGENT_WEBHOOK_NOTIFY_CONVERSATION_ID
webhook.notifyConversationId
Single-endpoint native notification destination.
MONO_AGENT_WEBHOOK_MODEL
webhook.model
Single-endpoint model override (e.g. claude:claude-opus-4-8). A request body model wins.
MONO_AGENT_WEBHOOK_EFFORT
webhook.effort
Single-endpoint reasoning-effort override (none/minimal/low/medium/high/xhigh/max/ultra), subject to model support. Reasoning-capable models map ultra to LOW; models without reasoning use OFF. max degrades to xhigh unless the resolved model advertises it. mono-agent doctor validates effort against the model’s advertised levels and warns, naming the nearest supported level, when a configured value is outside that set. Ranking above max only prevents keyword downgrade. A request body effort wins.
Comma-separated additional exact DNS names accepted by mono-agent web; suffix wildcards are rejected. Managed start/restart preserves these names and adds this node’s exact Tailscale DNS name when available. This changes Host admission only; it does not add authentication or make an untrusted network safe.
MONO_AGENT_WEB_PUSH_SUBJECT
— (CLI-only)
VAPID contact subject for Web Push; defaults to https://github.com/robertsreberski/mono-agent. Accepts a mailto: address or a non-localhost HTTPS URL. Managed web start/restart passes it into the LaunchAgent; invalid values fail startup before notification delivery begins.
Default true — default-on loopback operator surface for mono-agent tui and mono-agent web.
MONO_AGENT_TUI_HOST
tui.host
Default 127.0.0.1.
MONO_AGENT_TUI_PORT
tui.port
Default 0 (ephemeral; published to the trace-source registry).
MONO_AGENT_TUI_BASE_PATH
tui.basePath
Default /gui.
MONO_AGENT_TUI_ALLOW_NON_LOOPBACK
tui.allowNonLoopback
Required to bind a non-loopback host.
MONO_AGENT_TUI_API_KEY
tui.apiKey
Optional bearer the console must present. Put the value in .env; inline tui.apiKey remains accepted for compatibility but is not the documented source-config convention. See operator stream configuration.
Comma-separated names an ACP turn may pass to Bash, Exec, and nested subagents. Disabled by default; dangerous loader, shell-startup, home, temp, and PATH keys are rejected.
The A2A provider is loaded through channels.plugins[] with package: "@mono-agent/a2a-adapter". These env vars override that plugin entry’s config fields.
Env var
JSON key it overrides
Notes
MONO_AGENT_A2A_ENABLED
plugin config.enabled
Canonical enable flag for the A2A provider, matching other channels. Wins over the legacy form below when both are set.
MONO_AGENT_A2A_PROVIDER_ENABLED
plugin config.provider.enabled
Legacy enable flag (still honored). Prefer MONO_AGENT_A2A_ENABLED.