Skip to content

Generated config reference

This page is generated from the same config field registries that power mono-agent config, recipe output, and the JSON Schema. Do not edit this table by hand; run pnpm run generate:config-reference.

Schema: https://raw.githubusercontent.com/robertsreberski/mono-agent/main/packages/app/schema/mono-agent.config.schema.json

JSON keyTypeEnv overrideDefaultExampleNotes
agent.namestring--unsetResearch PartnerPublic display identity used for trace labels and default A2A metadata; never used in paths or service ids.
artifacts.dirstring--.mono-agent/artifacts.mono-agent/artifactsConfigures dir for the artifacts section.
artifacts.memoryRetention.dryRunboolean--falsetrueConfigures memoryRetention.dryRun for the artifacts section.
artifacts.memoryRetention.maxAgeDaysinteger--77Configures memoryRetention.maxAgeDays for the artifacts section.
artifacts.memoryRetention.maxCountinteger--50005000Configures memoryRetention.maxCount for the artifacts section.
artifacts.replyFiles.maxFileBytesinteger--2097152020971520Maximum bytes per published reply file (default and maximum 20 MiB); larger values cannot be delivered safely by all channels.
artifacts.replyFiles.maxStorageBytes`integerunlimited`--2147483648unlimited
artifacts.retention.dryRunboolean--falsetrueConfigures retention.dryRun for the artifacts section.
artifacts.retention.maxAgeDaysinteger--365365Configures retention.maxAgeDays for the artifacts section.
artifacts.retention.maxCountinteger--5000050000Configures retention.maxCount for the artifacts section.
channels.pluginsarray--[][{"package":"@mono-agent/channel-whatsapp","config":{"enabled":true}}]External channel plugin envelopes loaded by package name.
concurrency.maxConcurrentRunsinteger--unset1Configures maxConcurrentRuns for the concurrency section.
concurrency.maxPendingRunsinteger--unset1Configures maxPendingRuns for the concurrency section.
context.identityPathstring--required./IDENTITY.mdConfigures identityPath for the context section.
context.selectedSkillsstring[]--[]["example"]Configures selectedSkills for the context section.
context.skillDisclosurestring--fullfullConfigures skillDisclosure for the context section.
context.skillMaxBytesinteger--4800048000Configures skillMaxBytes for the context section.
context.skillsRootstring--unsetexampleConfigures skillsRoot for the context section.
context.soulPathstring--unsetexampleConfigures soulPath for the context section.
continuations.detachedServicesarray--[][{"name":"work-control","tokenEnv":"WORK_CONTROL_CONTINUATION_TOKEN"}]Detached service names and the environment variable holding each bearer; raw tokens never belong in config.
continuations.enabledboolean--truetrueEnables the host-owned durable continuation service when the block is configured.
continuations.hoststring--127.0.0.1127.0.0.1Loopback bind host; non-loopback values are rejected.
continuations.limits.deliveryTimeoutMsinteger--120000120000Hard native-delivery and history-only commit timeout; ambiguous sends are never replayed automatically.
continuations.limits.maxActivePerOrigininteger--500500Admission ceiling for one immutable run or detached-route claim origin.
continuations.limits.maxActiveRecordsinteger--1000010000Global admission ceiling for non-terminal durable continuations.
continuations.limits.maxConcurrentinteger--1616Maximum independently tracked continuation workers; one hung provider cannot occupy the whole service.
continuations.limits.operatorPageSizeinteger--100100Maximum keyset-paginated records returned by one operator list request.
continuations.limits.synthesisTimeoutMsinteger--600000600000Hard synthesis timeout; an ambiguous timeout is dead-lettered and never synthesized twice.
continuations.namedRoutesobject--{}{"verification":{"mode":"capture","conversationId":"slack:D123"}}Host-owned detached delivery policies: notify_if_actionable, capture, or silent.
continuations.portinteger--43194319Fixed loopback continuation service port (1-65535); persisted result/status URLs and the operator CLI remain valid across restarts.
continuations.retention.capturedTextMaxAgeMsinteger--25920000002592000000Maximum age in milliseconds for retained captured synthesis text.
continuations.retention.capturedTextMaxRecordsinteger--10001000Maximum delivered capture continuations whose synthesized text remains retrievable.
continuations.retention.terminalMaxAgeMsinteger--3153600000031536000000Maximum age in milliseconds for terminal continuation tombstones.
continuations.retention.terminalMaxRecordsinteger--5000050000Maximum retained terminal metadata/idempotency tombstones after payload compaction.
continuations.stateDirstring--.mono-agent/continuations.mono-agent/continuationsOwner-only per-record continuation store and token-derivation secret.
cron.conversationIdstringMONO_AGENT_CRON_CONVERSATION_IDunsetexampleConfigures conversationId for the cron section.
cron.dirstringMONO_AGENT_CRON_DIRcroncronConfigures dir for the cron section.
cron.effortstringMONO_AGENT_CRON_EFFORTunsetexampleConfigures effort for the cron section.
cron.enabledbooleanMONO_AGENT_CRON_ENABLEDfalsetrueEnables the cron capability.
cron.expressionstringMONO_AGENT_CRON_EXPRESSIONunsetexampleConfigures expression for the cron section.
cron.jobsarrayMONO_AGENT_CRON_JOBS_JSON[][{"id":"daily","expression":"0 8 * * *","prompt":"Summarize the overnight queue."}]Inline scheduled jobs. Folder-based cron jobs still merge from cron.dir.
cron.modelstringMONO_AGENT_CRON_MODELunsetexampleConfigures model for the cron section.
cron.notifybooleanMONO_AGENT_CRON_NOTIFYfalsefalseConfigures notify for the cron section.
cron.notifyConversationIdstringMONO_AGENT_CRON_NOTIFY_CONVERSATION_IDunsetexampleConfigures notifyConversationId for the cron section.
cron.notifyFailureCooldownHoursintegerMONO_AGENT_CRON_NOTIFY_FAILURE_COOLDOWN_HOURS66Configures notifyFailureCooldownHours for the cron section.
cron.operatorActions.enabledbooleanMONO_AGENT_CRON_OPERATOR_ACTIONS_ENABLEDfalsetrueAllows API-key-authenticated, explicitly confirmed run-now and runtime enable/disable actions. Defaults off and never rewrites cron config sources.
cron.preflightstring[]MONO_AGENT_CRON_PREFLIGHT_JSONunset["node","scripts/check-queue.mjs"]Explicit argv evaluated before the model responder. {"run":false} ends the firing as skipped_gate with no model turn; {"run":true,"input":"…"} runs the job with the input appended to its prompt. Any failure (non-zero exit, signal, timeout, malformed verdict) fails open with the plain prompt. Never a shell line.
cron.preflightTimeoutMsintegerMONO_AGENT_CRON_PREFLIGHT_TIMEOUT_MS50005000Wall-clock bound for one preflight evaluation before it is killed and fails open. Positive integer milliseconds, default 5000, capped at 60000; separate from maxRunMs.
cron.promptstringMONO_AGENT_CRON_PROMPTunsetexampleConfigures prompt for the cron section.
cron.timezonestringMONO_AGENT_CRON_TIMEZONEUTCUTCConfigures timezone for the cron section.
interaction.askUser.timeoutMsinteger--600000600000Maximum wait for one AskUser interaction (one to five questions); set null to disable automatic expiry.
interaction.bridge.hoststring--127.0.0.1127.0.0.1Bind host for the app-owned AskUser/tool-progress bridge. Defaults to loopback; keep it local because non-loopback values are not rejected.
interaction.bridge.portinteger--00Bridge port. 0 chooses an ephemeral port.
interaction.progress.enabledboolean--truetrueWhether tool progress posts are relayed to channel status messages.
memory.backendstring--bujobujoConfigures backend for the memory section.
memory.capture.cronboolean--unsetfalseSet false to skip automatic capture and raw audit for host-identified cron turns (including run-now); other turns and explicit Remember writes are unchanged. When Remember is enabled, this turn gets host-injected manual memory guidance. Unset preserves capture.
memory.capture.focusstring--unsetKeep durable coding preferences and verified lessons; skip PR and CI status.Operator guidance (at most 2048 UTF-8 bytes) narrows BuJo capture extraction and review; it cannot override host safety or the strict JSON contract. Requires mode bujo and writeMode capture.
memory.capture.intentLifecycleboolean--falsetrueBuJo capture-only, default-off owner-supported intention state and inclusive civil end proposals. Reuses note status and due=; state changes supersede, never infer completion from a date. Tasks stay authoritative in the task app.
memory.capture.onlystring[]--unset["preference","lesson"]Keep automatic capture memories only when a host-accepted label matches one of these kinds. An empty array drops all automatic captures; unset preserves current behavior. Remember writes are unaffected. Requires mode bujo and writeMode capture.
memory.capture.reconcileModelstring--unsetopenai-codex:gpt-6-solOptional validated agent-host runtime model reference for the capture reconciliation classifier only. Unset uses memory.llm for extraction, review and reconciliation. Requires mode bujo and writeMode capture; failures do not fall back to the capture model.
memory.capture.webhookboolean--unsetfalseSet false to skip automatic capture and raw audit for host-identified webhook turns; other turns and explicit Remember writes are unchanged. When Remember is enabled, this turn gets host-injected manual memory guidance. Unset preserves capture.
memory.consolidation.cronstring--0 */2 * * *0 */2 * * *Configures consolidation.cron for the memory section.
memory.consolidation.enabledboolean--truetrueEnables the memory capability.
memory.embeddings.apiKeystring--unsetexampleSecret value for memory.embeddings.apiKey; prefer the env override.
memory.embeddings.apiKeyEnvstring--unsetexampleEnvironment-variable name containing an optional provider bearer token; an explicitly declared name must resolve before memory starts.
memory.embeddings.circuitBreaker.cooldownMsinteger--3000030000Configures embeddings.circuitBreaker.cooldownMs for the memory section.
memory.embeddings.circuitBreaker.failureThresholdinteger--33Configures embeddings.circuitBreaker.failureThreshold for the memory section.
memory.embeddings.diminteger--unset1Configures embeddings.dim for the memory section.
memory.embeddings.endpointstring--unsetexampleProvider service root. LM Studio uses /v1/embeddings and defaults to http://localhost:1234.
memory.embeddings.instructionsstring--autoautoQuery/document instruction preset: auto (per model when an index is built; an existing index keeps its prefixes), search, none, query, or qwen3. Changing it requires the stopped-agent memory rebuild.
memory.embeddings.modelstring--unsetnomic-embed-text:v1.5Configures embeddings.model for the memory section.
memory.embeddings.providerstring--unsetollamaEmbedding service used by Journal/BuJo memory: ollama, lmstudio, or openai.
memory.embeddings.timeoutMsinteger--1000010000Configures embeddings.timeoutMs for the memory section.
memory.llm.endpointstring--unsetexampleConfigures llm.endpoint for the memory section.
memory.llm.modelstring--unsetopenai-codex:gpt-5.6-terraConfigures llm.model for the memory section.
memory.llm.providerstring--unsetagent-hostConfigures llm.provider for the memory section.
memory.llm.timeoutMsinteger--6000060000Configures llm.timeoutMs for the memory section.
memory.llm.traceboolean--truetrueConfigures llm.trace for the memory section.
memory.maxBytesinteger--6400064000Configures maxBytes for the memory section.
memory.modestring--litejournalConfigures mode for the memory section.
memory.pathstring--unset./.mono-agent/memoryConfigures path for the memory section.
memory.profile.enabledboolean--falsetrueBuJo-only, default-off deterministic owner-stated label profile, at most 600 Unicode code points. Independent of embeddings. Warm provider context suppresses unchanged profile/served lines using invocation receipts; receipt loss conservatively suppresses automatic reinjection until a cold reseed.
memory.recall.intentExpiryboolean--falsetrueBuJo-only, default-off: exclude all dated notes and done/dropped notes from automatic sections, including unexpired/ambiguous legacy dates. Deliberate recall interprets reviewed note due= as an inclusive civil end. Requires reviewed curate audit before enablement; independent of intentLifecycle; no backfill.
memory.recall.recencyboolean--falsetrueBuJo-only, default-off bounded secondary recency ranking for relevance-qualified deliberate event/unlabelled-note hits: at most 0.02, 30-day half-life. Facts/preferences never decay; base scores, floors and automatic retrieval are unchanged.
memory.recallTool.enabledboolean--truetrueEnables explicit memory reads: targeted MemoryRecall for every backend and chronological MemoryJournal when a local store supports it. Automatic recall is unchanged.
memory.rememberTool.enabledboolean--truetrueEnables the memory capability.
memory.writeModestring--disableddisabledConfigures writeMode for the memory section.
monitorsobject--unset{}Deprecated compatibility object. The whole object, including unknown nested keys, is accepted and ignored. Use background process jobs for finite work.
openaiApi.allowNonLoopbackbooleanMONO_AGENT_OPENAI_API_ALLOW_NON_LOOPBACKfalsetrueConfigures allowNonLoopback for the openaiApi section.
openaiApi.apiKeystringMONO_AGENT_OPENAI_API_KEYunsetenv:MONO_AGENT_OPENAI_API_KEYSecret value for openaiApi.apiKey; prefer the env override.
openaiApi.basePathstringMONO_AGENT_OPENAI_API_BASE_PATH/v1/v1Configures basePath for the openaiApi section.
openaiApi.enabledbooleanMONO_AGENT_OPENAI_API_ENABLEDfalsetrueEnables the openaiApi capability.
openaiApi.hoststringMONO_AGENT_OPENAI_API_HOST127.0.0.1127.0.0.1Configures host for the openaiApi section.
openaiApi.modelIdstringMONO_AGENT_OPENAI_API_MODEL_IDagentagentConfigures modelId for the openaiApi section.
openaiApi.portintegerMONO_AGENT_OPENAI_API_PORT00Configures port for the openaiApi section.
peersobject--none{"finance":{"sourceId":"finance-ai"}}Named local ACP peers for PeerAgent. Each sourceId must resolve to a running compatible mono-agent. Names and source IDs must be unique; this does not grant the peer owner approval.
processJobs.enabledboolean--falsetrueOpt in to owner-private Pi-native Exec/Bash background process jobs (unsupported on Windows).
processJobs.maxActivePerConversationinteger--22Maximum simultaneously running or starting jobs per conversation (compiled cap 8); waiting jobs use the global queue. Nested child launches may borrow their running ancestor’s conversation slot.
processJobs.maxChainDepthinteger--44Maximum host-owned background wake chain depth (compiled cap 64).
processJobs.maxConcurrentinteger--44Maximum simultaneously running process jobs (compiled cap 32).
processJobs.maxOutputBytesinteger--10485761048576Combined retained process-output ceiling (compiled cap 8 MiB).
processJobs.maxQueueAgeMsinteger--300000300000Maximum admission-to-spawn queue age (compiled cap one hour).
processJobs.maxQueuedinteger--88Maximum waiting process jobs globally, including jobs waiting on a conversation slot (compiled cap 64).
processJobs.maxRuntimeMsinteger--18000001800000Host runtime ceiling per owned process group (compiled cap 24 hours; calls may narrow it).
processJobs.previewCharsinteger--20002000Bound for redacted wake/operator output previews (compiled cap 8000; calls may narrow it).
processJobs.retention.artifactMaxBytesinteger--268435456268435456Aggregate retained terminal output artifact budget (compiled cap 1 GiB).
processJobs.retention.maxAgeMsinteger--604800000604800000Maximum terminal process-job record age (compiled cap 30 days).
processJobs.retention.maxRecordsinteger--10001000Maximum retained terminal process-job records (compiled cap 10000).
processJobs.stateDirstring--.mono-agent/process-jobs.mono-agent/process-jobsAgent-root-confined owner-private process-job records and artifacts; must be disjoint from every restart —clear-sessions purge root.
processJobs.unsafeAllowUnprotectedStateboolean--falsefalseDangerous trusted-host opt-in: with explicit sandbox.mode=off and Pi-only routes, retain ProcessJobs state without synthetic SRT protection; state and the operator secret become model-accessible.
providersobject--unset{"openai-codex":{},"ollama":{"baseUrl":"http://localhost:11434"}}Provider-id map that widens or narrows the selectable Pi model catalog.
providers.piAuthPathstring--unset~/.pi/agent/auth.jsonConfigures piAuthPath for the providers section.
providers.piNative.cacheRetentionstring--longlongAnthropic Messages cache retention (short or long; default long). Short opts out. JSON > long; the resolved value overrides ambient PI_CACHE_RETENTION. Long requires model support: 1h writes cost 2× normal input, reads 0.1×; short writes cost 1.25×. No guaranteed hit.
providers.piNative.maxRetryDelayMsinteger--6000060000Ceiling for provider-requested retry delays in milliseconds (default 60000). Nonpositive embedder values use the default; longer requested delays fail.
providers.piNative.piMaxRetriesinteger--22Provider SDK-policy retries before a response starts (0–8, default 2): connection errors, HTTP 408/409/429/5xx and provider retry headers. A transient failure after a response started (websocket error/close, terminated stream, 5xx/429) re-sends that one assistant request up to three times (1 s/2 s/4 s), never a tool; 0 disables both. Probes and summaries are single-shot.
providers.piNative.promptCacheDiagnosticsboolean--falsetrueEmit metadata-only prompt-cache request fingerprints into run artifacts; never prompt text, tool arguments, cache keys, endpoints or credentials.
providers.piNative.transportstring--autossePreferred Pi provider transport: auto, sse, websocket, or websocket-cached. Providers without multiple transports ignore it.
runtime.compaction.contextWindowOverrideinteger--auto-detected128000Persistent correction for inaccurate provider context-window metadata; learned overflow ceilings may lower it process-locally.
runtime.compaction.effortstring--autoautoIndependent summary effort: auto disables thinking when supported, otherwise uses low or the lowest supported level; never inherits conversation effort.
runtime.compaction.enabledboolean--truetrueEnables adaptive proactive compaction and one-shot reactive overflow recovery.
runtime.compaction.failureCooldownMsinteger--900000900000Suppress unchanged failed summaries for this many milliseconds (default 15 minutes); 0 disables suppression. Meaningful growth or summary-policy changes allow an earlier attempt.
runtime.compaction.fixedOverheadEnabledboolean--truetrueIncludes system instructions, tool schemas, and the current user turn in proactive request-size estimates.
runtime.compaction.keepRecentTokensinteger--adaptive by model12800Explicit recent-context retention override; omitted derives 10% of the effective context window, clamped to 4,000-20,000 tokens.
runtime.compaction.maxInputTokensinteger--200000300000Absolute proactive compaction ceiling in tokens; the trigger is the lowest of the ratio, the safety-headroom trigger and this value, so windows up to about 222,000 tokens are unaffected by the default. 0 disables it; other values must be 32,000-10,000,000. A soft trigger only: it never refuses a request or changes the usable window, and it is lifted when fixed request overhead plus summary, retained tail and minimum savings would not fit beneath it.
runtime.compaction.minSavingsTokensinteger--adaptive by model12800Minimum verified token reduction required for proactive compaction; omitted derives 10% of the effective window, clamped to 4,000-20,000. Reactive recovery accepts any positive reduction.
runtime.compaction.summaryMaxTokensinteger--adaptive by model5120Combined generated-summary text target; omitted derives 4% of the effective window, clamped to 2,000-12,000 tokens. Adaptive thinking may add a bounded 2,048-8,192-token allowance per request, subject to model/context limits.
runtime.compaction.triggerRationumber--0.90.9Fraction of the effective model context window used for the proactive trigger, additionally capped by adaptive safety headroom (10% of the window, 16,000-48,000 tokens).
runtime.effortstring--unsetmediumRoute-specific effort forwarded through Pi to the selected provider. Doctor warns when a configured value falls outside the model’s advertised ladder but keeps turn-time handling permissive. Message text never changes effort.
runtime.fallbacksarray--[][{"model":"openai-codex:gpt-5.6-sol"},{"model":"anthropic:claude-sonnet-4-6","effort":"high"}]Canonical ordered fallback routes. Omitted per-route effort means that provider’s default.
runtime.maxTurnsinteger--unset1Configures maxTurns for the runtime section.
runtime.model`stringobject`--required{"model":"openai-codex:gpt-6.1-sol","context1M":true}
runtime.retry.backoffMsinteger--10002000Delay before the first same-model retry. Doubles on each further retry, capped by runtime.retry.maxBackoffMs.
runtime.retry.maxBackoffMsinteger--1500030000Ceiling for the doubling same-model retry delay.
runtime.retry.primaryAttemptsinteger--23Total attempts on runtime.model including the first, before the chain advances. Retries fire only for transient provider failures (overloaded, rate-limited, timeout, network, 5xx); context overflow and bad credentials advance immediately. Set 1 to disable.
runtime.session.continuity.enabledboolean--truetrueDefault-on durable conversation evidence and ConversationHistory retrieval in the current logical conversation. No memory backend is required. Retains sanitized user/assistant text, portable summaries and permitted tool text in the existing sidecar, at most 1 MiB per record within its shared 256 MiB payload budget. Pins never silently expire; capacity exhaustion reports degraded continuity. Disabled capture does not upgrade a v2 sidecar; existing v3 evidence stays on disk for doctor, stats and purge, but ConversationHistory is not registered while disabled. Disabling continuity leaves previously retained evidence and any pending purges at rest until continuity is re-enabled or storage is purged via session admin or restart —clear-sessions. That evidence is never served while a purge is pending. Enabling upgrades the tool-history sidecar to v3 in place; older binaries refuse it, so rollback requires a pre-upgrade backup. Set runtime.session.continuity.enabled=false to opt out with legacy capture/storage behavior. This does not add a ledger, paid upkeep or tool-result clearing; deterministic cold packs are controlled separately by packEnabled.
runtime.session.continuity.ledgerEnabledboolean--falsetrueOpt-in read-only reuse of a verified ledger, without buying upkeep. Upkeep also enables ledger reading. False by default; deterministic controls leave both switches off.
runtime.session.continuity.packEnabledboolean--truetrueDefault-on deterministic continuity evidence at cold canonical-history rebuilds. No model call. At most 8000 estimated tokens, further limited by target headroom; whole owner quotations, finalized tool evidence, latest summary and coverage/omission marker. Subordinate historical requests are not fresh approval. False keeps B1 recording and retrieval but injects no pack; continuity.enabled=false takes precedence. True native resumes get no additional pack. Per-message replay pays pack input tokens each turn. Legacy canonical messages lack exact record identities, so uncertain overlap is retained and reported. Native model-switch handoffs and subagents are unchanged.
runtime.session.continuity.upkeep.enabledboolean--falsetrueOpt-in boundary ledger upkeep. One no-tools completion on the turn’s effective primary conversation model or explicit extractionModel, no fallback; up to 128k bootstrap / 64k incremental estimated input, 4k output including reasoning, 60 seconds before first token. Only primary owned continuous cold seeds. Disabled by default in P3a.
runtime.session.continuity.upkeep.extractionModelstring--conversation modelopenai:gpt-4o-miniExplicit upkeep model override; otherwise the turn’s effective primary conversation model, captured before fallback. Switches also select extraction, including private-to-cloud evidence egress (up to about 128k retained tokens). Pin the previous runtime.model here to preserve fixed extraction. No fallback; budgets unchanged.
runtime.session.continuity.upkeep.requireRequestCapboolean--falsetrueSkip before dispatch when the adapter cannot emit a server output cap. Default false. Codex otherwise uses conservative visible-stream abort; hidden reasoning/quota cannot be client-capped. Reported overrun invalidates extraction.
runtime.session.idleTimeoutMsinteger--18000001800000Configures session.idleTimeoutMs for the runtime section.
runtime.session.isolateProactiveboolean--falsetrueConfigures session.isolateProactive for the runtime section.
runtime.session.modestring--continuouscontinuousConversation session mode. Every durable-history user upgrades one way: the first durable turn rewrites canonical history as v3, with or without runtime.session.root or model switching. Stop all writers and back up canonical history and any native root first; rollback requires restoring the consistent backup.
runtime.session.modelSwitch.enabledboolean--falsetrueOFF-default Web-only durable model switching. Requires continuous sessions, runtime.session.root. Every model change, including a return to an earlier model, uses a structured handoff (outgoing summary, then the previously validated summary plus later history, then incoming summary); there is no summary-less model change and native session state is never reused across models. Only Web persisted user-message IDs authorize switches or new summary generations (at most two billed summary calls per switch per generation); No-ID turns on non-native conversations keep the original cold-replay path; no-ID turns on native conversations inherit the current model even when a different sticky model is declared; model-specific context-window overrides for that different model do not carry. Changing runtime.model does not move existing native conversations until a persisted Web message selects the new model. Pending messages are not queued or replayed. With this on, Web turns with a persisted message ID (including a new conversation’s first message) and no-ID wakes on native conversations use the primary model only: no configured fallback-chain backup or router re-attempt. Prepared requests resolve ordinary provider authentication on each actual call, including OAuth refresh; credentials are not lease-pinned. Other turns keep fallbacks.
runtime.session.rolloverstring--nonenoneConfigures session.rollover for the runtime section.
runtime.session.rolloverNoticeboolean--falsetrueConfigures session.rolloverNotice for the runtime section.
runtime.session.rolloverTimezonestring--unsetexampleConfigures session.rolloverTimezone for the runtime section.
runtime.session.rootstring--unsetexampleDurable sessions root. The first durable turn after upgrading writes session journals, .pending-turns and the new canonical history format. This is a one-way upgrade: older binaries must not run against this root; rollback requires restoring a backup.
runtime.workspacestring--..Configures workspace for the runtime section.
sandbox.denyWritestring[]--unset["example"]Configures denyWrite for the sandbox section.
sandbox.fallbackstring--fail-closedfail-closedConfigures fallback for the sandbox section.
sandbox.modestring--unsetnativeConfigures mode for the sandbox section.
sandbox.network.allowliststring[]--unset["example"]Configures network.allowlist for the sandbox section.
sandbox.network.modestring--nonenoneConfigures network.mode for the sandbox section.
sandbox.readableRootsstring[]--unset["example"]Configures readableRoots for the sandbox section.
sandbox.unsafeAllowHostProcessboolean--falsetrueConfigures unsafeAllowHostProcess for the sandbox section.
sandbox.writableRootsstring[]--unset["example"]Configures writableRoots for the sandbox section.
slack.allowAllChannelsbooleanMONO_AGENT_SLACK_ALLOW_ALL_CHANNELSfalsetrueConfigures allowAllChannels for the slack section.
slack.allowedChannelIdsstring[]MONO_AGENT_SLACK_ALLOWED_CHANNEL_IDSunset["example"]Configures allowedChannelIds for the slack section.
slack.appTokenstringMONO_AGENT_SLACK_APP_TOKENunsetenv:MONO_AGENT_SLACK_APP_TOKENSecret value for slack.appToken; prefer the env override.
slack.botTokenstringMONO_AGENT_SLACK_BOT_TOKENunsetenv:MONO_AGENT_SLACK_BOT_TOKENSecret value for slack.botToken; prefer the env override.
slack.botUserIdsstring[]MONO_AGENT_SLACK_BOT_USER_IDSunset["example"]Configures botUserIds for the slack section.
slack.drainDeadlineMsintegerMONO_AGENT_SLACK_DRAIN_DEADLINE_MSunset1Configures drainDeadlineMs for the slack section.
slack.enabledbooleanMONO_AGENT_SLACK_ENABLEDfalsetrueEnables the slack capability.
slack.heartbeatIntervalMsintegerMONO_AGENT_SLACK_HEARTBEAT_INTERVAL_MSunset1Configures heartbeatIntervalMs for the slack section.
slack.heartbeatTimeoutMsintegerMONO_AGENT_SLACK_HEARTBEAT_TIMEOUT_MSunset1Configures heartbeatTimeoutMs for the slack section.
slack.homeTabobject--unset{"enabled":true,"headerText":"*Quick actions*","buttons":[{"actionId":"triage","label":"Triage","prompt":"Triage today's requests.","channelId":"C0123"}]}JSON-only Slack App Home configuration; enabled is optional (default false), buttons is optional (default []), and there is no environment-variable form.
slack.mentionTextAliasesstring[]MONO_AGENT_SLACK_MENTION_TEXT_ALIASESunset["example"]Configures mentionTextAliases for the slack section.
slack.reconnectInitialBackoffMsintegerMONO_AGENT_SLACK_RECONNECT_INITIAL_BACKOFF_MSunset1Configures reconnectInitialBackoffMs for the slack section.
slack.reconnectMaxBackoffMsintegerMONO_AGENT_SLACK_RECONNECT_MAX_BACKOFF_MSunset1Configures reconnectMaxBackoffMs for the slack section.
slack.reconnectStabilityMsintegerMONO_AGENT_SLACK_RECONNECT_STABILITY_MSunset1Configures reconnectStabilityMs for the slack section.
slack.reconnectStartupGraceMsintegerMONO_AGENT_SLACK_RECONNECT_STARTUP_GRACE_MSunset1Configures reconnectStartupGraceMs for the slack section.
slack.resolveChannelNamesbooleanMONO_AGENT_SLACK_RESOLVE_CHANNEL_NAMEStruetrueResolves the channel’s name via conversations.info so the agent knows WHICH channel it is talking in, not just that it is in one. Requires channels:read (public) / groups:read (private); a missing scope degrades to the surface kind and id alone rather than failing turns.
slack.resolveUserNamesbooleanMONO_AGENT_SLACK_RESOLVE_USER_NAMEStruetrueResolves the speaker’s display name and handle via users.info so the agent knows who is talking. Requires the users:read scope; a missing scope degrades to an unnamed speaker rather than failing turns.
slack.shortcutsarray--[][{"callbackId":"triage","prompt":"Prepare the daily support triage checklist.","channelId":"C0123"}]JSON-only global/message Slack shortcut bindings; there is no environment-variable form.
slack.stripMentionTextbooleanMONO_AGENT_SLACK_STRIP_MENTION_TEXTpreservefalseWhen unset, preserves one readable authenticated self-mention marker; true restores legacy full stripping and false keeps raw mention forms.
slack.threadContext.enabledbooleanMONO_AGENT_SLACK_THREAD_CONTEXT_ENABLEDtruetrueSends what was said in the conversation before the agent was triggered as untrusted background context. Reads the thread for an in-thread trigger and recent channel history otherwise; needs a *:history scope.
slack.threadContext.includeBotMessagesbooleanMONO_AGENT_SLACK_THREAD_CONTEXT_INCLUDE_BOT_MESSAGEStruetrueInclude other apps’ messages (a CI or alert bot) labelled as bots. The agent’s own posts are always excluded.
slack.threadContext.maxMessagesintegerMONO_AGENT_SLACK_THREAD_CONTEXT_MAX_MESSAGES1515Messages of context sent per turn, newest kept. 0 disables the read. Capped at the harness’s own 30-message bound.
slack.threadContext.requestLimitintegerMONO_AGENT_SLACK_THREAD_CONTEXT_REQUEST_LIMIT1515Objects requested from Slack per read. Slack caps this at 15 for non-Marketplace apps; internal apps can raise it.
slack.threadContext.timeoutMsintegerMONO_AGENT_SLACK_THREAD_CONTEXT_TIMEOUT_MS40004000Budget for the whole context phase, including name resolution. Exceeding it submits the turn with less context rather than delaying it. 0 bounds the phase only by the turn itself.
slack.unfurlLinksbooleanMONO_AGENT_SLACK_UNFURL_LINKSunsetfalseControls link previews on native Slack agent chat.postMessage requests. When unset, the request field is omitted and Slack’s current default behavior is preserved.
slack.unfurlMediabooleanMONO_AGENT_SLACK_UNFURL_MEDIAunsetfalseControls media previews on native Slack agent chat.postMessage requests. When unset, the request field is omitted and Slack’s current default behavior is preserved.
subagentsobject--{“enabled”:false}{"enabled":true,"maxConcurrent":5,"instances":{"enabled":true,"maxPerConversation":8,"idleTtlMs":86400000,"maxTurns":60},"models":[{"name":"fable","model":"anthropic:claude-fable-5-1"},"openai-codex:gpt-6-astra"],"definitions":[{"name":"researcher","description":"Reads code and docs to answer a factual question about the codebase. Read-only.","prompt":"You are a codebase researcher. Answer with file:line citations. Never modify files.","allowedTools":["Read","Glob","Grep"]}]}Subagent profiles the Agent tool can deploy, plus its caps. providerRetryBudgetMs (integer 0–180000 ms, default 120000) gives child assistant requests an outage recovery window; 0 restores legacy retries. piNative.piMaxRetries:0 disables both retry kinds. Interactive parent turns keep legacy policy. Bedrock retains AWS retry ownership. instances enables conversation-scoped persistent children when subagents are enabled and effective tool policy allows both Agent and AgentManage: root defaults to <artifacts.dir>/../subagents, maxPerConversation is 1–32 (default 8), idleTtlMs is 60000–604800000 (default 86400000), and maxTurns is 1–500 (default 60). Agent persist:true creates a child; AgentManage resumes or closes it. Persistent children automatically receive AskParent unless global/profile policy denies it; it durably saves a question and returns successful awaiting_reply. Answer through ordinary AgentManage in the same session. Disabling instances preserves stateless Agent. subagents.timeoutMs and definitions[].timeoutMs accept 1000–14400000 ms (up to four hours); a detached child’s actual timer is clamped to remaining process-job runtime less a settlement margin (10% for short jobs, at most 15 s), and the hard job deadline still wins. Full four-hour child turns require processJobs.maxRuntimeMs above four hours. commandTimeoutMs (positive integer milliseconds, default 1800000) is the foreground Bash/Exec ceiling for all children: detached children clamp it to their process job’s remaining runtime, and foreground children clamp it to their remaining turn time minus a settlement reserve (10% for short turns, at most 15 s). Child timers and parent aborts still stop commands sooner; interactive parent turns keep the 120 s default. models is an operator allow-list of model reference strings or {name?, model} objects; an omitted name uses the canonical reference. Explicit names must be lowercase kebab-case (1-40 characters), unique, and distinct from profile names and general-purpose; duplicate models are rejected. Agent accepts model from that list and effort on every call shape. Each value resolves as call-time override, profile pin, parent effective value, then base/runtime default. Disabled unless enabled is true, in which case Agent must also appear in tools.allowedTools. Each definition needs exactly one of prompt or promptPath; omitted allowedTools means a read-only default set, and the ”*” wildcard is rejected. The agent may also author a specialized subagent at call time unless inline.enabled is false; inline.allowedTools caps what an authored subagent may request, defaulting to the parent agent’s own built-ins. maxConcurrent is a ceiling, not a scheduling guarantee: Agent and read-only calls can overlap even when stateful tools are offered, but an invoked stateful, MCP, or unknown call is an exclusive FIFO barrier. Background jobs and detached children release admission on their started receipt.
telegram.allowAllChatsbooleanMONO_AGENT_TELEGRAM_ALLOW_ALL_CHATSfalsetrueConfigures allowAllChats for the telegram section.
telegram.allowedChatIdsstring[]MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDSunset["example"]Configures allowedChatIds for the telegram section.
telegram.apiRootstringMONO_AGENT_TELEGRAM_API_ROOTunsetexampleConfigures apiRoot for the telegram section.
telegram.attachments.downloadTimeoutMsintegerMONO_AGENT_TELEGRAM_ATTACHMENT_DOWNLOAD_TIMEOUT_MSunset1Configures attachments.downloadTimeoutMs for the telegram section.
telegram.attachments.maxBytesintegerMONO_AGENT_TELEGRAM_ATTACHMENT_MAX_BYTESunset1Configures attachments.maxBytes for the telegram section.
telegram.attachments.maxUploadBytesintegerMONO_AGENT_TELEGRAM_UPLOAD_MAX_BYTESunset1Configures attachments.maxUploadBytes for the telegram section.
telegram.botTokenstringMONO_AGENT_TELEGRAM_BOT_TOKENunsetenv:MONO_AGENT_TELEGRAM_BOT_TOKENSecret value for telegram.botToken; prefer the env override.
telegram.commandsarray--[][{"command":"status","prompt":"Report current status."}]Telegram command definitions handled by the Telegram adapter.
telegram.enabledbooleanMONO_AGENT_TELEGRAM_ENABLEDfalsetrueEnables the telegram capability.
telegram.groupModestringMONO_AGENT_TELEGRAM_GROUP_MODEanymentionGroup-message trigger rule: any runs every allowed group message; mention runs only native @mentions of the bot and replies to its messages; listen triggers like mention but gives the next turn the unaddressed messages since the bot last answered as untrusted background context. Direct chats and commands are unaffected.
telegram.pollWatchdogMsintegerMONO_AGENT_TELEGRAM_POLL_WATCHDOG_MSunset1Configures pollWatchdogMs for the telegram section.
telegram.projects.enabledboolean--falsetrueMirror each forum topic the bot sees (and a forum’s General conversation) one way into a web-console project, record observations under .mono-agent/telegram-topics-v1/, inject the project’s shared context into every turn there, and add projectId to the Telegram send tools. Needs a running web console (mono-agent web run); project tools on Telegram turns stay gated by tools.allowedTools.
telegram.quietHoursobject--unset{"timezone":"UTC","start":"22:00","end":"07:00"}Quiet-hours rules for Telegram notifications.
telegram.reactionsobjectMONO_AGENT_TELEGRAM_REACTIONSunset{"working":true,"done":true,"error":true}Telegram lifecycle reactions. The env override is boolean and toggles all states.
telegram.sendTools.pathScopestring--unsetrun-outputConfine Telegram path uploads to the current run output directory.
telegram.sendTools.scopestring--unsetproducing-conversationBind Telegram send tools to the chat, or forum topic, that produced the current run.
telegram.stripMentionTextbooleanMONO_AGENT_TELEGRAM_STRIP_MENTION_TEXTtruetrueRemoves matching native @mentions from responder text in mention mode; replies without a mention are unchanged.
telegram.topicsarray--[][{"chatId":"-1001234567890","topicId":12,"groupMode":"any"}]Per-forum-topic trigger overrides for allowlisted chats: groupMode is inherit (default), any, mention, or listen. The General topic follows telegram.groupMode; entries never widen the chat allowlist.
telegram.transcription.endpointstringMONO_AGENT_TELEGRAM_TRANSCRIPTION_ENDPOINTunsetexampleConfigures transcription.endpoint for the telegram section.
telegram.transcription.languagestringMONO_AGENT_TELEGRAM_TRANSCRIPTION_LANGUAGEunsetexampleConfigures transcription.language for the telegram section.
telegram.transcription.modelstringMONO_AGENT_TELEGRAM_TRANSCRIPTION_MODELunsetexampleConfigures transcription.model for the telegram section.
telegram.transcription.timeoutMsintegerMONO_AGENT_TELEGRAM_TRANSCRIPTION_TIMEOUT_MSunset1Configures transcription.timeoutMs for the telegram section.
telegram.transport.ipFamilyintegerMONO_AGENT_TELEGRAM_IP_FAMILYunsetexampleConfigures transport.ipFamily for the telegram section.
tools.allowedToolsstring[]--[”*“]["Read","Grep"]Configures allowedTools for the tools section.
tools.computerUse.backendstring--unsetcua-driverOpt into local desktop control using “cua-driver” (only backend). Absent means disabled; MCP tools bypass built-in allow/deny policy. See Computer use for safety and permission boundaries.
tools.computerUse.commandstring--unset/opt/tools/cua-driverOptional executable name or path. Relative paths resolve against the config workspace. Otherwise resolve PATH, then platform installation locations; doctor reports the selected path.
tools.continuationServersstring[]--unset["example"]Configures continuationServers for the tools section.
tools.conversationSearch.datedSnippetsboolean--falsetrueOpt in to dated SearchConversations message evidence on verified owner web turns. Requires local BuJo memory; disabled by default. Telegram and the console UI keep legacy search. No new index or stored history fields.
tools.disallowedToolsstring[]--[]["Read","Grep"]Configures disallowedTools for the tools section.
tools.filesystem.readableRootsstring[]--unset["/srv/shared/reference"]Extra roots for managed Read, Glob, and Grep while sandbox.mode is off. Access requires lexical and realpath containment; native sandbox roots remain authoritative when sandboxing is enabled.
tools.filesystem.writableRootsstring[]--unset["/srv/shared/output"]Extra roots for managed Write and Edit while sandbox.mode is off; writable roots are also readable. Access requires lexical and realpath containment; native sandbox roots remain authoritative when sandboxing is enabled.
tools.mcpCallMaxTotalTimeoutMsinteger--27000002700000Configures mcpCallMaxTotalTimeoutMs for the tools section.
tools.mcpCallTimeoutMsinteger--120000120000Configures mcpCallTimeoutMs for the tools section.
tools.mcpConfigPathstring--unsetexampleConfigures mcpConfigPath for the tools section.
tools.mcpRequestContextServersstring[]--[]["transcribe"]Configured stdio MCP server names that receive trusted per-request conversation, run, output-directory, and scoped progress context.
tools.web.coordinationstring--processprocessHost mode shares web request budgets and cooldowns across participating local mono-agent processes; process preserves isolated coordination.
tools.web.fetch.browserCommandstring--agent-browseragent-browserDirect executable name or path for agent-browser; shell fragments are not evaluated.
tools.web.fetch.parallel.apiKeyEnvstring--unsetexampleSecret value for tools.web.fetch.parallel.apiKeyEnv; prefer the env override.
tools.web.fetch.provider`stringstring[]`--locallocal
tools.web.fetch.renderstring--neverneverBrowser-render capability for sparse JavaScript pages. never forces every call to static extraction; auto permits an isolated agent-browser session when needed.
tools.web.search.backend`stringstring[]`--[“parallel”,“ollama”]parallel,ollama
tools.web.search.codex.modelstring--gpt-5.6-lunagpt-5.6-lunaCodex app-server model used for ChatGPT-subscription web search. The signed-in account must expose both this model and web search; default gpt-5.6-luna.
tools.web.search.endpointstring--unsetexampleCompatibility alias for tools.web.search.searxng.endpoint. Existing configurations remain valid; new configurations should use the provider-specific block.
tools.web.search.maxRequestsPerRuninteger--44Hard ceiling from 1 to 20 on answered provider searches in one logical runtime run, including empty answers; failures are refunded. Cache hits, coalesced followers, cooldown skips, and quota skips consume no request. A separate dispatch ceiling is four times this limit. Default 4.
tools.web.search.ollama.apiKeyEnvstring--unsetOLLAMA_API_KEYEnvironment variable containing the hosted Ollama API key. Required only for exact https://ollama.com and rejected for every other origin; the key value is never stored in JSON.
tools.web.search.ollama.baseUrlstring--http://127.0.0.1:11434https://ollama.comOllama origin. Defaults to local http://127.0.0.1:11434 when Ollama is selected, including in a chain. Hosted search is exactly https://ollama.com; custom public origins require HTTPS and trustPublicUrl=true.
tools.web.search.ollama.trustPublicUrlboolean--falsetrueExplicit acknowledgement for an HTTPS custom public Ollama origin. It never permits sending hosted credentials to that origin.
tools.web.search.parallel.apiKeyEnvstring--unsetexampleSecret value for tools.web.search.parallel.apiKeyEnv; prefer the env override.
tools.web.search.searxng.endpointstring--unsethttp://127.0.0.1:8088Optional unauthenticated loopback HTTP SearXNG base URL. Remote HTTPS, credentials, query strings, and fragments are rejected.
traceability.globalDiscoveryboolean--truetrueConfigures globalDiscovery for the traceability section.
traceability.heartbeatMsinteger--1000010000Configures heartbeatMs for the traceability section.
traceability.registryDirstring--.mono-agent/trace-sources.mono-agent/trace-sourcesConfigures registryDir for the traceability section.
traceability.sourceIdstring--unsetmy-agentConfigures sourceId for the traceability section.
traceability.sourceLabelstring--unsetMy AgentConfigures sourceLabel for the traceability section.
traceability.staleAfterMsinteger--3000030000Configures staleAfterMs for the traceability section.
tui.allowNonLoopbackbooleanMONO_AGENT_TUI_ALLOW_NON_LOOPBACKfalsetrueConfigures allowNonLoopback for the tui section.
tui.apiKeystringMONO_AGENT_TUI_API_KEYunsetexampleSecret value for tui.apiKey; prefer the env override.
tui.basePathstringMONO_AGENT_TUI_BASE_PATH/gui/guiConfigures basePath for the tui section.
tui.enabledbooleanMONO_AGENT_TUI_ENABLEDtruetrueEnables the tui capability.
tui.hoststringMONO_AGENT_TUI_HOST127.0.0.1127.0.0.1Configures host for the tui section.
tui.portintegerMONO_AGENT_TUI_PORT00Configures port for the tui section.
tui.requestToolEnvironment.allowedKeysstring[]MONO_AGENT_TUI_REQUEST_TOOL_ENVIRONMENT_ALLOWED_KEYS[]["MULTICA_TOKEN","MULTICA_TASK_ID"]Explicit environment-variable names an ACP request may pass to Bash, Exec, and nested subagents for one turn. Disabled when empty; dangerous process-loader, shell-startup, home, temp, and PATH keys are rejected.
tui.requestToolEnvironment.allowPathPrependbooleanMONO_AGENT_TUI_REQUEST_TOOL_ENVIRONMENT_ALLOW_PATH_PREPENDfalsefalseAllows an ACP request to prepend up to four absolute directories to process-tool PATH for one turn. The caller cannot replace PATH.
webhook.allowNonLoopbackbooleanMONO_AGENT_WEBHOOK_ALLOW_NON_LOOPBACKunsettrueConfigures allowNonLoopback for the webhook section.
webhook.apiKeystringMONO_AGENT_WEBHOOK_API_KEYunsetset-via-MONO_AGENT_WEBHOOK_API_KEYSecret value for webhook.apiKey; prefer the env override.
webhook.defaultModestringMONO_AGENT_WEBHOOK_DEFAULT_MODEsyncsyncConfigures defaultMode for the webhook section.
webhook.dirstringMONO_AGENT_WEBHOOK_DIRwebhookwebhookConfigures dir for the webhook section.
webhook.effortstringMONO_AGENT_WEBHOOK_EFFORTunsetexampleConfigures effort for the webhook section.
webhook.enabledbooleanMONO_AGENT_WEBHOOK_ENABLEDfalsetrueEnables the webhook capability.
webhook.endpointsarrayMONO_AGENT_WEBHOOK_ENDPOINTS_JSON[][{"name":"triage","path":"/webhook/triage","prompt":"Triage this payload."}]Named webhook endpoints with per-endpoint prompt, model/effort, and maxRunMs overrides.
webhook.hoststringMONO_AGENT_WEBHOOK_HOST127.0.0.1127.0.0.1Configures host for the webhook section.
webhook.maxAttachmentBytesintegerMONO_AGENT_WEBHOOK_MAX_ATTACHMENT_BYTES2097152020971520Configures maxAttachmentBytes for the webhook section.
webhook.maxRunMsintegerMONO_AGENT_WEBHOOK_MAX_RUN_MSunset1Configures maxRunMs for the webhook section.
webhook.maxStoredRequestsintegerMONO_AGENT_WEBHOOK_MAX_STORED_REQUESTS100100Configures maxStoredRequests for the webhook section.
webhook.modelstringMONO_AGENT_WEBHOOK_MODELunsetexampleConfigures model for the webhook section.
webhook.notifybooleanMONO_AGENT_WEBHOOK_NOTIFYunsetexampleConfigures notify for the webhook section.
webhook.notifyConversationIdstringMONO_AGENT_WEBHOOK_NOTIFY_CONVERSATION_IDunsetexampleConfigures notifyConversationId for the webhook section.
webhook.pathstringMONO_AGENT_WEBHOOK_PATH/webhook/invoke/webhook/invokeConfigures path for the webhook section.
webhook.portintegerMONO_AGENT_WEBHOOK_PORT00Configures port for the webhook section.
webhook.promptstringMONO_AGENT_WEBHOOK_PROMPTunsetexampleConfigures prompt for the webhook section.
webhook.retentionMsintegerMONO_AGENT_WEBHOOK_RETENTION_MS300000300000Configures retentionMs for the webhook section.

channels.plugins[] entries are intentionally open at config: the plugin package owns that nested payload. The host validates the plugin envelope (package, optional id, optional label, and config) and each loaded plugin reports its own config warnings.