Skip to content

Environment variables

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:

  1. Variables already exported in the shell remain in place.
  2. ./.env fills variables that are still unset. Pass --env-file <path> to select another file.
  3. 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.

Env varJSON key it overridesNotes
MONO_AGENT_NAMEagent.namePublic display name. It may seed human-facing trace/A2A labels but never paths, service ids, sessions, or provider identity.
MONO_AGENT_MODELruntime.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_MODEruntime.executionModeRetired. 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_JSONruntime.fallbacksCanonical JSON array of { "model": "...", "effort"?: "...", "attempts"?: 1-10 }; ordered and uncapped. Omitted effort means that route’s provider default.
MONO_AGENT_FALLBACK_MODELSruntime.fallbackModelsRetired. 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_ATTEMPTSruntime.retry.primaryAttemptsTotal 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_MSruntime.retry.backoffMsDelay before the first same-model retry, doubling on each further retry. Default 1000.
MONO_AGENT_RETRY_MAX_BACKOFF_MSruntime.retry.maxBackoffMsCeiling for the doubling retry delay. Default 15000.
MONO_AGENT_ROUTE_SAFETYruntime.routeSafetyRetired. 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_EFFORTruntime.effortnone / 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_MODEruntime.permissionModedefault / 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.
MONO_AGENT_MAX_TURNSruntime.maxTurnsTurn cap per run; omitted or 0 means unlimited.
MONO_AGENT_COMPACTION_ENABLEDruntime.compaction.enabledEnables adaptive proactive compaction and one-shot reactive overflow recovery; default true.
MONO_AGENT_COMPACTION_TRIGGER_RATIOruntime.compaction.triggerRatioProactive window ratio, 0.2-0.95; default 0.70, additionally capped by adaptive safety headroom.
MONO_AGENT_COMPACTION_KEEP_RECENT_TOKENSruntime.compaction.keepRecentTokensExplicit retained-context override (4000-200000); omitted derives 10% of the effective window, clamped to 4000-20000.
MONO_AGENT_COMPACTION_SUMMARY_MAX_TOKENSruntime.compaction.summaryMaxTokensExplicit combined summary-output budget (1000-64000); omitted derives 4% of the effective window, clamped to 2000-12000.
MONO_AGENT_COMPACTION_MIN_SAVINGS_TOKENSruntime.compaction.minSavingsTokensExplicit 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_ENABLEDruntime.compaction.fixedOverheadEnabledIncludes the system prompt, tool schemas, and current user turn in request estimates; default true.
MONO_AGENT_COMPACTION_CONTEXT_WINDOW_OVERRIDEruntime.compaction.contextWindowOverridePersistent context-window correction (32000-10000000) for inaccurate provider metadata; learned overflow evidence may lower it process-locally.
MONO_AGENT_WORKSPACEruntime.workspaceWorking directory for runtime tools.
MONO_AGENT_SESSION_MODEruntime.session.modecontinuous (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_MSruntime.session.idleTimeoutMsIdle eviction window for warm continuous sessions; default 30 minutes. It does not delete durable history. See Sessions and concurrency.
MONO_AGENT_SESSION_ISOLATE_PROACTIVEruntime.session.isolateProactiveWhen 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_ROLLOVERruntime.session.rollovernone 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_TIMEZONEruntime.session.rolloverTimezoneIANA timezone for daily bucket boundaries; defaults to the system timezone.
MONO_AGENT_SESSION_ROLLOVER_NOTICEruntime.session.rolloverNoticeWhen 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_RUNSconcurrency.maxConcurrentRunsRuns executing against the provider at once (per-channel).
MONO_AGENT_CONCURRENCY_MAX_PENDING_RUNSconcurrency.maxPendingRunsRuns admitted before the provider step (per-channel).
{
"agent": { "name": "Research Companion" },
"runtime": {
"model": "openai-codex:gpt-5.6-terra",
"effort": "high",
"fallbacks": [{ "model": "opencode-go:kimi-k2.6", "effort": "medium" }],
"session": { "mode": "continuous", "idleTimeoutMs": 600000, "rollover": "daily", "rolloverTimezone": "UTC", "rolloverNotice": false }
},
"concurrency": { "maxConcurrentRuns": 4, "maxPendingRuns": 8 }
}
Terminal window
MONO_AGENT_MODEL=openai-codex:gpt-5.6-terra
MONO_AGENT_EFFORT=high
MONO_AGENT_FALLBACKS_JSON='[{"model":"opencode-go:kimi-k2.6","effort":"medium"}]'
MONO_AGENT_CONCURRENCY_MAX_CONCURRENT_RUNS=4
Env varJSON key it overridesNotes
MONO_AGENT_PROVIDERS_JSONprovidersCanonical 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_JSONprovidersDeprecated, replaced by MONO_AGENT_PROVIDERS_JSON with the provider-map shape; still accepted with a warning for backward compatibility.
MONO_AGENT_LOCAL_PROVIDER_*providersLegacy single-provider field overrides; still loaded. Prefer the provider map.
MONO_AGENT_PI_AUTH_PATHproviders.piAuthPathPi 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_TRANSPORTproviders.piNative.transportPreferred Pi transport: auto (default), sse, websocket, or websocket-cached; unsupported providers ignore it.
MONO_AGENT_PI_PROMPT_CACHE_DIAGNOSTICSproviders.piNative.promptCacheDiagnosticsMetadata-only prompt-cache request fingerprints in run artifacts; default false. Never prompt text, tool arguments, cache keys, endpoints or credentials.
MONO_AGENT_PI_MAX_RETRIESproviders.piNative.piMaxRetriesPi-native transport retries, 0-8, default 2.
MONO_AGENT_MAX_RETRY_DELAY_MSproviders.piNative.maxRetryDelayMsDefault 60000.
MONO_AGENT_PI_SESSIONS_ROOTproviders.piNative.piSessionsRootDurable JSONL session storage (e.g. .mono-agent/sessions); unset = in-memory.

See local provider configuration for the local provider shape and providers for the map env form and Pi auth.

Env varJSON key it overridesNotes
MONO_AGENT_IDENTITY_PATHcontext.identityPathIdentity markdown loaded into every prompt. Required. See identity and soul configuration.
MONO_AGENT_SOUL_PATHcontext.soulPathOptional secondary voice/guardrail doc.
MONO_AGENT_SKILLS_ROOTcontext.skillsRootRoot folder for <name>/SKILL.md skills. See skill selection and loading.
MONO_AGENT_SELECTED_SKILLScontext.selectedSkillsExplicitly selected skill names.
MONO_AGENT_SKILL_MAX_BYTEScontext.skillMaxBytesPer-skill instruction byte cap; default 48000.
MONO_AGENT_SKILL_DISCLOSUREcontext.skillDisclosureindex (names only) or full (full bodies); default full.
Env varJSON key it overridesNotes
MONO_AGENT_MEMORY_BACKENDmemory.backendMemory engine: bujo (default, homegrown SQLite) or supermemory (external). External backends ignore mode/embeddings/llm.
MONO_AGENT_MEMORY_MODEmemory.modelite / journal / bujo (bujo backend only).
MONO_AGENT_MEMORY_PATHmemory.pathStorage 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_BYTESmemory.maxBytesMaximum bytes returned in an automatic recalled-memory block; default 64000.
MONO_AGENT_MEMORY_WRITE_MODEmemory.writeModedisabled / 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_URLmemory.supermemory.baseUrlRequired when backend: supermemory. REST base URL of the local OSS binary or hosted cloud.
MONO_AGENT_MEMORY_SUPERMEMORY_API_KEYmemory.supermemory.apiKeyInline API key (optional for no-auth local). Prefer _API_KEY_ENV.
MONO_AGENT_MEMORY_SUPERMEMORY_API_KEY_ENVmemory.supermemory.apiKeyEnvName of the env var holding the key; only the name is persisted in resolved config.
MONO_AGENT_MEMORY_SUPERMEMORY_CONTAINERmemory.supermemory.containerContainer/namespace tag scoping this agent’s memories. Defaults to the trace sourceId.
MONO_AGENT_MEMORY_SUPERMEMORY_TIMEOUT_MSmemory.supermemory.timeoutMsPer-call HTTP timeout (1600000, default 10000).
MONO_AGENT_MEMORY_SUPERMEMORY_EXPOSE_MCP_SERVERmemory.supermemory.exposeMcpServerAlso inject Supermemory’s official MCP server alongside the in-app MemoryRecall tool. Default false.
MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDERmemory.embeddings.providerollama, lmstudio, or openai. The configured provider is exclusive; there is no cross-provider fallback. See memory embeddings.
MONO_AGENT_MEMORY_EMBEDDINGS_MODELmemory.embeddings.modelEmbedding model string.
MONO_AGENT_MEMORY_EMBEDDINGS_DIMmemory.embeddings.dimEmbedding dimension.
MONO_AGENT_MEMORY_EMBEDDINGS_ENDPOINTmemory.embeddings.endpointService 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_ENVmemory.embeddings.apiKeyEnvName 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_KEYmemory.embeddings.apiKeyDirect key override. Prefer _API_KEY_ENV so config stores only a variable name.
MONO_AGENT_MEMORY_EMBEDDINGS_TIMEOUT_MSmemory.embeddings.timeoutMsPer-request embedding timeout (1600000); default 10000.
MONO_AGENT_MEMORY_EMBEDDINGS_CIRCUIT_BREAKER_FAILURE_THRESHOLDmemory.embeddings.circuitBreaker.failureThresholdConsecutive embedding failures before the circuit opens (1100); default 3.
MONO_AGENT_MEMORY_EMBEDDINGS_CIRCUIT_BREAKER_COOLDOWN_MSmemory.embeddings.circuitBreaker.cooldownMsCooldown before an open embedding circuit permits a trial request (13600000); default 30000.
MONO_AGENT_MEMORY_RECALL_TOOL_ENABLEDmemory.recallTool.enabledExplicit 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_ENABLEDmemory.rememberTool.enabledAgent-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.
MONO_AGENT_MEMORY_CONSOLIDATION_ENABLEDmemory.consolidation.enabledScheduled BuJo consolidation; default on.
MONO_AGENT_MEMORY_CONSOLIDATION_CRONmemory.consolidation.cronDefault 0 */2 * * *. See memory rituals and scheduling.
MONO_AGENT_MEMORY_LLM_PROVIDERmemory.llm.providerollama 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_MODELmemory.llm.modelChat model for the capture pipeline.
MONO_AGENT_MEMORY_LLM_EXECUTION_MODEmemory.llm.executionModeRetired 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_ENDPOINTmemory.llm.endpointOllama-only endpoint override.
MONO_AGENT_MEMORY_LLM_TRACEmemory.llm.traceEnables trace recording for an agent-host memory LLM; default true.
MONO_AGENT_MEMORY_LLM_TIMEOUT_MSmemory.llm.timeoutMsIn-app per-call memory-LLM timeout (1000600000, default 60000); see the memory-LLM timeout.
Env varJSON key it overridesNotes
MONO_AGENT_ALLOWED_TOOLStools.allowedToolsAllowlist. Unset keeps the allow-all default; * is allow-all; an empty value ("") is the explicit chat-only []. See tool policy.
MONO_AGENT_DISALLOWED_TOOLStools.disallowedToolsDenylist (deny wins; overlap rejected).
MONO_AGENT_FILE_TOOL_READABLE_ROOTStools.filesystem.readableRootsComma-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_ROOTStools.filesystem.writableRootsComma-separated extra roots for managed Write and Edit while the process sandbox is off; writable roots are also readable.
MONO_AGENT_MCP_CONFIG_PATHtools.mcpConfigPathPath to mcp.json. See MCP configuration.
MONO_AGENT_MCP_REQUEST_CONTEXT_SERVERStools.mcpRequestContextServersComma-separated stdio MCP server names that receive trusted request-scoped context and progress capabilities.
MONO_AGENT_CONTINUATION_SERVERStools.continuationServersComma-separated stdio or loopback-HTTP MCP server names that receive trusted request-bound continuation claim capabilities. See durable continuations.
MONO_AGENT_MCP_CALL_TIMEOUT_MStools.mcpCallTimeoutMsInactivity timeout per MCP tool call; tool progress notifications reset it. Default 120000.
MONO_AGENT_MCP_CALL_MAX_TOTAL_TIMEOUT_MStools.mcpCallMaxTotalTimeoutMsHard 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_BACKENDtools.web.search.backendauto (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_RUNtools.web.search.maxRequestsPerRunHard 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_ENDPOINTtools.web.search.searxng.endpointCanonical unauthenticated loopback HTTP SearXNG base URL; required by strict searxng.
MONO_AGENT_WEB_SEARCH_ENDPOINTtools.web.search.endpointCompatibility alias for the canonical SearXNG endpoint variable. Existing config remains valid; prefer the provider-specific name.
MONO_AGENT_WEB_SEARCH_OLLAMA_BASE_URLtools.web.search.ollama.baseUrlOllama 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_ENVtools.web.search.ollama.apiKeyEnvExplicit 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_URLtools.web.search.ollama.trustPublicUrlExplicit true acknowledgement for an unauthenticated custom public HTTPS Ollama origin. Never authorizes hosted credentials there.
MONO_AGENT_WEB_SEARCH_CODEX_MODELtools.web.search.codex.modelCodex app-server subscription-search model; default gpt-5.6-luna.
MONO_AGENT_WEB_FETCH_RENDERtools.web.fetch.rendernever (default and capability disabled) or auto (static-first isolated browser fallback).
MONO_AGENT_WEB_BROWSER_COMMANDtools.web.fetch.browserCommandDirect agent-browser executable name/path. Default agent-browser; shell fragments are not evaluated.

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.

See Durable continuations for the complete configuration and protocol.

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 varJSON key it overridesNotes
MONO_AGENT_INTERACTION_BRIDGE_HOSTinteraction.bridge.hostBind host. Default 127.0.0.1; keep it loopback because non-loopback values are not rejected.
MONO_AGENT_INTERACTION_BRIDGE_PORTinteraction.bridge.portBridge port. Default 0 (ephemeral — consumers get the URL via env).
MONO_AGENT_ASK_USER_TIMEOUT_MSinteraction.askUser.timeoutMsMax 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_ENABLEDinteraction.progress.enabledRoute tool progress posts to channel status messages. Default true.
Env varJSON key it overridesNotes
MONO_AGENT_SANDBOX_MODEsandbox.modenative (srt-wrapped) vs off. See sandbox configuration.
MONO_AGENT_SANDBOX_NETWORKsandbox.network.modenone / 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_ALLOWLISTsandbox.network.allowlistDomain allowlist.
MONO_AGENT_SANDBOX_READABLE_ROOTSsandbox.readableRootsReadable filesystem roots.
MONO_AGENT_SANDBOX_WRITABLE_ROOTSsandbox.writableRootsWritable filesystem roots.
MONO_AGENT_SANDBOX_DENY_WRITEsandbox.denyWriteDeny-write globs (.env*, .git/config, .git/hooks/** denied by default).
MONO_AGENT_SANDBOX_FALLBACKsandbox.fallbackfail-closed vs unsafe-host-process when srt is unavailable.
MONO_AGENT_SANDBOX_UNSAFE_ALLOW_HOST_PROCESSsandbox.unsafeAllowHostProcessRuns commands on the host without srt.
Env varJSON key it overridesNotes
MONO_AGENT_ARTIFACT_DIRartifacts.dirRun event JSONL + summaries, independently replaced at recorder boundaries rather than appended in flight. See artifacts and traces.
MONO_AGENT_ARTIFACT_RETENTION_MAX_AGE_DAYSartifacts.retention.maxAgeDaysDelete terminal run artifacts older than this many days (default 365; bounds 1..3650).
MONO_AGENT_ARTIFACT_RETENTION_MAX_COUNTartifacts.retention.maxCountKeep at most this many newest terminal run artifacts (default 50000; bounds 1..1000000).
MONO_AGENT_ARTIFACT_RETENTION_DRY_RUNartifacts.retention.dryRunLog what retention would delete without unlinking files.
MONO_AGENT_ARTIFACT_MEMORY_RETENTION_MAX_AGE_DAYSartifacts.memoryRetention.maxAgeDaysDelete terminal memory-run artifacts older than this many days (default 7; bounds 1..3650).
MONO_AGENT_ARTIFACT_MEMORY_RETENTION_MAX_COUNTartifacts.memoryRetention.maxCountKeep at most this many newest terminal memory runs (default 5000; bounds 1..1000000).
MONO_AGENT_ARTIFACT_MEMORY_RETENTION_DRY_RUNartifacts.memoryRetention.dryRunLog what memory retention would delete without unlinking files. Defaults to artifacts.retention.dryRun when unset.
MONO_AGENT_TRACE_REGISTRY_DIRtraceability.registryDirHeartbeat-manifest registry for dashboard discovery; default ~/.mono-agent/trace-sources.
MONO_AGENT_TRACE_SOURCE_IDtraceability.sourceIdOptional stable source identifier published in the heartbeat manifest.
MONO_AGENT_TRACE_SOURCE_LABELtraceability.sourceLabelHuman-facing source label; defaults to agent.name when unset.
MONO_AGENT_TRACE_HEARTBEAT_MStraceability.heartbeatMsHeartbeat publication interval (25086400000); default 10000.
MONO_AGENT_TRACE_STALE_AFTER_MStraceability.staleAfterMsAge at which a heartbeat is treated as stale (1000604800000); default 30000.
MONO_AGENT_TRACE_GLOBAL_DISCOVERYtraceability.globalDiscoveryPublish to the shared discovery registry; default true.
MONO_AGENT_OBSERVABILITY_EXPORTERSobservability.exporters[]JSON array; Phoenix OTLP exporter entries. See Phoenix export and backfill.

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.

Env varJSON key it overridesNotes
MONO_AGENT_TELEGRAM_ENABLEDtelegram.enabled
MONO_AGENT_TELEGRAM_BOT_TOKENtelegram.botTokenBot token.
MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDStelegram.allowedChatIdsOr allowAllChats. See Telegram channel configuration.
MONO_AGENT_TELEGRAM_ALLOW_ALL_CHATStelegram.allowAllChatsAllow any chat instead of requiring allowedChatIds; default false.
MONO_AGENT_TELEGRAM_GROUP_MODEtelegram.groupModeany (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_TEXTtelegram.stripMentionTextRemove the matching native @mention before the responder sees the text; default true.
MONO_AGENT_TELEGRAM_REACTIONStelegram.reactionsAll-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_FAMILYtelegram.transport.ipFamilyPin 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_MStelegram.pollWatchdogMsPoll-liveness watchdog window (ms); default 120000, 0 disables. Force-restarts a runner that stops delivering updates without crashing.
MONO_AGENT_TELEGRAM_API_ROOTtelegram.apiRootBase 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_BYTEStelegram.attachments.maxBytesInbound attachment download cap (bytes). Default 20 MiB (the hosted API’s hard limit); raise it only with a self-hosted server.
MONO_AGENT_TELEGRAM_ATTACHMENT_DOWNLOAD_TIMEOUT_MStelegram.attachments.downloadTimeoutMsPer-file download timeout (ms) on the URL branch; default 30000, 0 disables.
MONO_AGENT_TELEGRAM_UPLOAD_MAX_BYTEStelegram.attachments.maxUploadBytesUpload cap (bytes) for TelegramSendFile; default 20 MiB.
MONO_AGENT_TELEGRAM_TRANSCRIPTION_ENDPOINTtelegram.transcription.endpointFull 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_MODELtelegram.transcription.modelModel name sent with each transcription request; required when the endpoint is set.
MONO_AGENT_TELEGRAM_TRANSCRIPTION_LANGUAGEtelegram.transcription.languageOptional ISO-639 language hint.
MONO_AGENT_TELEGRAM_TRANSCRIPTION_TIMEOUT_MStelegram.transcription.timeoutMsPer-call timeout in milliseconds (13600000); default 120000, independent of the attachment download timeout.
Env varJSON key it overridesNotes
MONO_AGENT_SLACK_ENABLEDslack.enabled
MONO_AGENT_SLACK_BOT_TOKENslack.botTokenxoxb-...
MONO_AGENT_SLACK_APP_TOKENslack.appTokenxapp-... (Socket Mode).
MONO_AGENT_SLACK_ALLOWED_CHANNEL_IDSslack.allowedChannelIdsOr allowAllChannels. See Slack channel configuration.
MONO_AGENT_SLACK_ALLOW_ALL_CHANNELSslack.allowAllChannelsAllow any joined channel instead of requiring allowedChannelIds; default false.
MONO_AGENT_SLACK_BOT_USER_IDSslack.botUserIdsComma-separated bot user IDs used to recognize native mentions.
MONO_AGENT_SLACK_MENTION_TEXT_ALIASESslack.mentionTextAliasesComma-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_TEXTslack.stripMentionTextWhen 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_LINKSslack.unfurlLinksOptional native-agent chat.postMessage link-preview override. Omit to preserve Slack’s current default behavior.
MONO_AGENT_SLACK_UNFURL_MEDIAslack.unfurlMediaOptional native-agent chat.postMessage media-preview override. Omit to preserve Slack’s current default behavior.
MONO_AGENT_SLACK_RESOLVE_USER_NAMESslack.resolveUserNamesResolve 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_NAMESslack.resolveChannelNamesResolve 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_ENABLEDslack.threadContext.enabledSend 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_MESSAGESslack.threadContext.maxMessagesMessages of context sent per turn, newest kept; default 15, maximum 30, 0 disables the read.
MONO_AGENT_SLACK_THREAD_CONTEXT_REQUEST_LIMITslack.threadContext.requestLimitObjects requested from Slack per read; default 15, matching Slack’s cap for non-Marketplace apps.
MONO_AGENT_SLACK_THREAD_CONTEXT_TIMEOUT_MSslack.threadContext.timeoutMsBudget for the whole context phase including name resolution (ms); default 4000. Exceeding it submits the turn with less context rather than delaying it.
MONO_AGENT_SLACK_THREAD_CONTEXT_INCLUDE_BOT_MESSAGESslack.threadContext.includeBotMessagesInclude other apps’ messages, labelled as bots; default true. The agent’s own posts are always excluded.
MONO_AGENT_SLACK_HEARTBEAT_INTERVAL_MSslack.heartbeatIntervalMsSocket Mode ping/silence probe interval (ms); default 30000.
MONO_AGENT_SLACK_HEARTBEAT_TIMEOUT_MSslack.heartbeatTimeoutMsSilence budget before the watchdog force-recycles the socket (ms); default 90000, 0 disables the watchdog.
MONO_AGENT_SLACK_RECONNECT_INITIAL_BACKOFF_MSslack.reconnectInitialBackoffMsFirst reconnect backoff after a non-graceful drop (ms); default 500.
MONO_AGENT_SLACK_RECONNECT_MAX_BACKOFF_MSslack.reconnectMaxBackoffMsBackoff ceiling (ms); default 30000. Jitter (ratio 0.2) is applied on by default.
MONO_AGENT_SLACK_RECONNECT_STABILITY_MSslack.reconnectStabilityMsA reconnect must stay open this long before the backoff resets (ms); default 30000 (not per-connect).
MONO_AGENT_SLACK_RECONNECT_STARTUP_GRACE_MSslack.reconnectStartupGraceMsWindow (ms) to quietly retry a lingering prior-process socket instead of flagging degraded; default 10000.
MONO_AGENT_SLACK_DRAIN_DEADLINE_MSslack.drainDeadlineMsBackstop (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 (03600000); 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.

WhatsApp is loaded through channels.plugins[] with package: "@mono-agent/whatsapp-adapter". These env vars override that plugin entry’s config fields.

Env varJSON key it overridesNotes
MONO_AGENT_WHATSAPP_ENABLEDplugin config.enabledQR login; auth state in .mono-agent/whatsapp-auth.
MONO_AGENT_WHATSAPP_ALLOWED_CHAT_JIDSplugin config.allowedChatJidsOr allowAllChats.
MONO_AGENT_WHATSAPP_ALLOW_ALL_CHATSplugin config.allowAllChatsAllow any chat instead of requiring allowedChatJids; default false.
MONO_AGENT_WHATSAPP_GROUP_MODEplugin config.groupModemention / any. See WhatsApp channel configuration.
MONO_AGENT_WHATSAPP_BOT_JIDSplugin config.botJidsComma-separated linked-account JIDs used to recognize native group mentions.
MONO_AGENT_WHATSAPP_MENTION_TEXT_ALIASESplugin config.mentionTextAliasesComma-separated text aliases that count as group mentions.
MONO_AGENT_WHATSAPP_STRIP_MENTION_TEXTplugin config.stripMentionTextRemove 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 varJSON key it overridesNotes
MONO_AGENT_MESSENGER_ENABLEDplugin config.enabledOpt-in switch; default false.
MONO_AGENT_MESSENGER_PAGE_ACCESS_TOKENenv-only (no JSON key)Page access token used for the Send API. Required when enabled.
MONO_AGENT_MESSENGER_APP_SECRETenv-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_TOKENenv-only (no JSON key)Token Meta echoes during webhook registration. Required when enabled.
MONO_AGENT_MESSENGER_ALLOWED_USER_IDSplugin config.allowedUserIdsComma-separated page-scoped user ids (PSIDs). Or allowAllUsers.
MONO_AGENT_MESSENGER_ALLOW_ALL_USERSplugin config.allowAllUsersAllow any sender instead of requiring allowedUserIds; default false.
MONO_AGENT_MESSENGER_HOSTplugin config.hostBind host; default 127.0.0.1.
MONO_AGENT_MESSENGER_PORTplugin config.portBind port; default 8650.
MONO_AGENT_MESSENGER_WEBHOOK_PATHplugin config.webhookPathWebhook route; default /messenger/webhook. <path>/health answers liveness checks.
MONO_AGENT_MESSENGER_API_VERSIONplugin config.apiVersionGraph API version used for sends; default v21.0.
MONO_AGENT_MESSENGER_ALLOW_NON_LOOPBACKplugin config.allowNonLoopbackMust be true for a non-loopback bind; enforced again immediately before listen().
MONO_AGENT_MESSENGER_PROACTIVE_MESSAGING_TYPEplugin config.proactiveMessagingTypeRESPONSE / UPDATE / MESSAGE_TAG for proactive cron/webhook deliveries; default RESPONSE. See Messenger channel configuration.
MONO_AGENT_MESSENGER_PROACTIVE_TAGplugin config.proactiveTagPolicy tag required with MESSAGE_TAG, e.g. CONFIRMED_EVENT_UPDATE.
Env varJSON key it overridesNotes
MONO_AGENT_WEBHOOK_ENABLEDwebhook.enabled
MONO_AGENT_WEBHOOK_HOSTwebhook.hostBind host; default 127.0.0.1.
MONO_AGENT_WEBHOOK_PORTwebhook.portBind port; default 0 selects a free port.
MONO_AGENT_WEBHOOK_PATHwebhook.pathDefault single-endpoint path; default /webhook/invoke.
MONO_AGENT_WEBHOOK_PROMPTwebhook.promptPre-instructions for the default single endpoint.
MONO_AGENT_WEBHOOK_DEFAULT_MODEwebhook.defaultModesync or async; default sync.
MONO_AGENT_WEBHOOK_ALLOW_NON_LOOPBACKwebhook.allowNonLoopbackMust be true for a non-loopback bind.
MONO_AGENT_WEBHOOK_API_KEYwebhook.apiKeyOptional on loopback; required for any enabled non-loopback bind. Clients send it as a bearer.
MONO_AGENT_WEBHOOK_RETENTION_MSwebhook.retentionMsAsync status retention in milliseconds; default 300000.
MONO_AGENT_WEBHOOK_MAX_STORED_REQUESTSwebhook.maxStoredRequestsMaximum retained async statuses; default 100.
MONO_AGENT_WEBHOOK_ENDPOINTS_JSONwebhook.endpoints[]JSON array of named endpoints.
MONO_AGENT_WEBHOOK_NOTIFYwebhook.notifySingle-endpoint native notification toggle.
MONO_AGENT_WEBHOOK_NOTIFY_CONVERSATION_IDwebhook.notifyConversationIdSingle-endpoint native notification destination.
MONO_AGENT_WEBHOOK_MODELwebhook.modelSingle-endpoint model override (e.g. claude:claude-opus-4-8). A request body model wins.
MONO_AGENT_WEBHOOK_EFFORTwebhook.effortSingle-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.
MONO_AGENT_WEBHOOK_DIRwebhook.dirFolder of *.md endpoint files. See webhook channel configuration.
MONO_AGENT_WEBHOOK_MAX_RUN_MSwebhook.maxRunMsWall-clock bound (ms) per webhook run; default 20 min, 0 disables. Reclaims a hung run’s slot (esp. async, which has no client disconnect).
Env varJSON key it overridesNotes
MONO_AGENT_OPENAI_API_ENABLEDopenaiApi.enabled
MONO_AGENT_OPENAI_API_HOSTopenaiApi.hostBind host; default 127.0.0.1.
MONO_AGENT_OPENAI_API_PORTopenaiApi.portBind port; default 0 selects a free port.
MONO_AGENT_OPENAI_API_BASE_PATHopenaiApi.basePathAPI prefix; default /v1.
MONO_AGENT_OPENAI_API_ALLOW_NON_LOOPBACKopenaiApi.allowNonLoopbackMust be true for an enabled non-loopback bind.
MONO_AGENT_OPENAI_API_KEYopenaiApi.apiKeyOptional on loopback; required for any enabled non-loopback bind. Clients send it as a bearer (sk-...).
MONO_AGENT_OPENAI_API_MODEL_IDopenaiApi.modelIdAdvertised model id. See OpenAI-compatible API configuration.
Env varJSON key it overridesNotes
MONO_AGENT_WEB_ALLOWED_HOSTS— (CLI-only)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.
Env varJSON key it overridesNotes
MONO_AGENT_TUI_ENABLEDtui.enabledDefault true — default-on loopback operator surface for mono-agent tui and mono-agent web.
MONO_AGENT_TUI_HOSTtui.hostDefault 127.0.0.1.
MONO_AGENT_TUI_PORTtui.portDefault 0 (ephemeral; published to the trace-source registry).
MONO_AGENT_TUI_BASE_PATHtui.basePathDefault /gui.
MONO_AGENT_TUI_ALLOW_NON_LOOPBACKtui.allowNonLoopbackRequired to bind a non-loopback host.
MONO_AGENT_TUI_API_KEYtui.apiKeyOptional 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.
MONO_AGENT_TUI_REQUEST_TOOL_ENVIRONMENT_ALLOWED_KEYStui.requestToolEnvironment.allowedKeysComma-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.
MONO_AGENT_TUI_REQUEST_TOOL_ENVIRONMENT_ALLOW_PATH_PREPENDtui.requestToolEnvironment.allowPathPrependAllows an ACP turn to prepend bounded absolute directories to process-tool PATH. Default false; request callers can never replace PATH.

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 varJSON key it overridesNotes
MONO_AGENT_A2A_ENABLEDplugin config.enabledCanonical enable flag for the A2A provider, matching other channels. Wins over the legacy form below when both are set.
MONO_AGENT_A2A_PROVIDER_ENABLEDplugin config.provider.enabledLegacy enable flag (still honored). Prefer MONO_AGENT_A2A_ENABLED.
MONO_AGENT_A2A_HOSTplugin config.provider.hostProvider bind host. Non-loopback values require allowNonLoopback.
MONO_AGENT_A2A_PORTplugin config.provider.portProvider listen port.
MONO_AGENT_A2A_PUBLIC_BASE_URLplugin config.provider.publicBaseUrlPublic base URL advertised in the Agent Card when fronted by a proxy.
MONO_AGENT_A2A_ALLOW_NON_LOOPBACKplugin config.provider.allowNonLoopbackExplicit opt-in for a non-loopback bind or public base URL.
MONO_AGENT_A2A_REQUIRE_BEARERplugin config.provider.requireBearerRequires bearer authentication on message/task endpoints.
MONO_AGENT_A2A_BEARER_TOKENplugin config.provider.bearerTokenUsed when requireBearer is set. See A2A channel configuration.
MONO_AGENT_A2A_MAX_REQUEST_BYTESplugin config.provider.maxRequestBytesOptional JSON request-body ceiling for JSON-RPC and REST; 1024–100000000 bytes.
MONO_AGENT_A2A_IDEMPOTENCY_NAMESPACEplugin config.provider.idempotency.namespaceExplicitly enables durable keyed dispatch and defines its stable authenticated-principal boundary.
MONO_AGENT_A2A_IDEMPOTENCY_STATE_DIRplugin config.provider.idempotency.stateDirOptional durable receipt directory; a namespace-derived owner-only path is used when omitted.
MONO_AGENT_A2A_IDEMPOTENCY_RETENTION_MSplugin config.provider.idempotency.retentionMsFull terminal-result replay horizon; defaults to 30 days.
MONO_AGENT_A2A_IDEMPOTENCY_MAX_RECORDSplugin config.provider.idempotency.maxRecordsHard lifetime unique-key capacity; existing bindings are never evicted.
MONO_AGENT_A2A_AGENT_NAMEplugin config.agent.namePublic Agent Card name; wins over the root agent name.
MONO_AGENT_A2A_AGENT_DESCRIPTIONplugin config.agent.descriptionAgent Card description.
MONO_AGENT_A2A_AGENT_VERSIONplugin config.agent.versionAgent Card version string.
MONO_AGENT_A2A_PROVIDER_ORGANIZATIONplugin config.agent.providerOrganizationProvider organization advertised only when providerUrl is also set.
MONO_AGENT_A2A_PROVIDER_URLplugin config.agent.providerUrlProvider organization URL advertised only when providerOrganization is also set.
MONO_AGENT_A2A_SKILL_IDplugin config.skill.idAdvertised skill identifier.
MONO_AGENT_A2A_SKILL_NAMEplugin config.skill.nameAdvertised skill name.
MONO_AGENT_A2A_SKILL_DESCRIPTIONplugin config.skill.descriptionAdvertised skill description.
MONO_AGENT_A2A_SKILL_TAGSplugin config.skill.tagsComma-separated advertised skill tags.
MONO_AGENT_A2A_REMOTE_AGENT_URLSplugin config.consumer.remoteAgentUrlsComma-separated allowlist of remote A2A agent base URLs.
MONO_AGENT_A2A_DEFAULT_REMOTE_AGENT_URLplugin config.consumer.defaultRemoteAgentUrlDefault remote A2A agent base URL.
MONO_AGENT_A2A_CONSUMER_BEARER_TOKENplugin config.consumer.bearerTokenBearer token sent by the programmatic consumer. Keep it in .env.
MONO_AGENT_A2A_TIMEOUT_MSplugin config.consumer.timeoutMsPer-request consumer timeout in milliseconds.
Env varJSON key it overridesNotes
MONO_AGENT_CRON_JOBS_JSONcron.jobs[]Full JSON array of jobs.
MONO_AGENT_CRON_OPERATOR_ACTIONS_ENABLEDcron.operatorActions.enabledPermit API-key-authenticated, explicitly confirmed run-now and runtime enable/disable actions; default false.
MONO_AGENT_CRON_ENABLEDcron.enabledEnable the legacy/default single-job form; default false.
MONO_AGENT_CRON_EXPRESSIONcron.expressionFive-field expression for the default single job.
MONO_AGENT_CRON_TIMEZONEcron.timezoneIANA timezone for the default single job; default UTC.
MONO_AGENT_CRON_PROMPTcron.promptPrompt for the default single job.
MONO_AGENT_CRON_CONVERSATION_IDcron.conversationIdOptional stable conversation id for the default single job.
MONO_AGENT_CRON_NOTIFYcron.notifyDeliver the default job’s successful result natively; default false.
MONO_AGENT_CRON_NOTIFY_CONVERSATION_IDcron.notifyConversationIdExplicit native-notification destination for the default job.
MONO_AGENT_CRON_NOTIFY_FAILURE_COOLDOWN_HOURScron.notifyFailureCooldownHoursSingle-job cooldown, in hours, for all-models-failed error notices on notify: true cron jobs; default 6.
MONO_AGENT_CRON_MODELcron.modelRuntime model override for the default single job.
MONO_AGENT_CRON_EFFORTcron.effortReasoning-effort override for the default single job, subject to model support.
MONO_AGENT_CRON_DIRcron.dirFolder of per-job *.md files; default cron/. Folder and config jobs merge; duplicate ids error. See cron channel configuration.