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 key | Type | Env override | Default | Example | Notes |
|---|---|---|---|---|---|
agent.name | string | -- | unset | Research Partner | Public display identity used for trace labels and default A2A metadata; never used in paths or service ids. |
artifacts.dir | string | -- | .mono-agent/artifacts | .mono-agent/artifacts | Configures dir for the artifacts section. |
artifacts.memoryRetention.dryRun | boolean | -- | false | true | Configures memoryRetention.dryRun for the artifacts section. |
artifacts.memoryRetention.maxAgeDays | integer | -- | 7 | 7 | Configures memoryRetention.maxAgeDays for the artifacts section. |
artifacts.memoryRetention.maxCount | integer | -- | 5000 | 5000 | Configures memoryRetention.maxCount for the artifacts section. |
artifacts.replyFiles.maxFileBytes | integer | -- | 20971520 | 20971520 | Maximum bytes per published reply file (default and maximum 20 MiB); larger values cannot be delivered safely by all channels. |
artifacts.replyFiles.maxStorageBytes | `integer | unlimited` | -- | 2147483648 | unlimited |
artifacts.retention.dryRun | boolean | -- | false | true | Configures retention.dryRun for the artifacts section. |
artifacts.retention.maxAgeDays | integer | -- | 365 | 365 | Configures retention.maxAgeDays for the artifacts section. |
artifacts.retention.maxCount | integer | -- | 50000 | 50000 | Configures retention.maxCount for the artifacts section. |
channels.plugins | array | -- | [] | [{"package":"@mono-agent/channel-whatsapp","config":{"enabled":true}}] | External channel plugin envelopes loaded by package name. |
concurrency.maxConcurrentRuns | integer | -- | unset | 1 | Configures maxConcurrentRuns for the concurrency section. |
concurrency.maxPendingRuns | integer | -- | unset | 1 | Configures maxPendingRuns for the concurrency section. |
context.identityPath | string | -- | required | ./IDENTITY.md | Configures identityPath for the context section. |
context.selectedSkills | string[] | -- | [] | ["example"] | Configures selectedSkills for the context section. |
context.skillDisclosure | string | -- | full | full | Configures skillDisclosure for the context section. |
context.skillMaxBytes | integer | -- | 48000 | 48000 | Configures skillMaxBytes for the context section. |
context.skillsRoot | string | -- | unset | example | Configures skillsRoot for the context section. |
context.soulPath | string | -- | unset | example | Configures soulPath for the context section. |
continuations.detachedServices | array | -- | [] | [{"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.enabled | boolean | -- | true | true | Enables the host-owned durable continuation service when the block is configured. |
continuations.host | string | -- | 127.0.0.1 | 127.0.0.1 | Loopback bind host; non-loopback values are rejected. |
continuations.limits.deliveryTimeoutMs | integer | -- | 120000 | 120000 | Hard native-delivery and history-only commit timeout; ambiguous sends are never replayed automatically. |
continuations.limits.maxActivePerOrigin | integer | -- | 500 | 500 | Admission ceiling for one immutable run or detached-route claim origin. |
continuations.limits.maxActiveRecords | integer | -- | 10000 | 10000 | Global admission ceiling for non-terminal durable continuations. |
continuations.limits.maxConcurrent | integer | -- | 16 | 16 | Maximum independently tracked continuation workers; one hung provider cannot occupy the whole service. |
continuations.limits.operatorPageSize | integer | -- | 100 | 100 | Maximum keyset-paginated records returned by one operator list request. |
continuations.limits.synthesisTimeoutMs | integer | -- | 600000 | 600000 | Hard synthesis timeout; an ambiguous timeout is dead-lettered and never synthesized twice. |
continuations.namedRoutes | object | -- | {} | {"verification":{"mode":"capture","conversationId":"slack:D123"}} | Host-owned detached delivery policies: notify_if_actionable, capture, or silent. |
continuations.port | integer | -- | 4319 | 4319 | Fixed loopback continuation service port (1-65535); persisted result/status URLs and the operator CLI remain valid across restarts. |
continuations.retention.capturedTextMaxAgeMs | integer | -- | 2592000000 | 2592000000 | Maximum age in milliseconds for retained captured synthesis text. |
continuations.retention.capturedTextMaxRecords | integer | -- | 1000 | 1000 | Maximum delivered capture continuations whose synthesized text remains retrievable. |
continuations.retention.terminalMaxAgeMs | integer | -- | 31536000000 | 31536000000 | Maximum age in milliseconds for terminal continuation tombstones. |
continuations.retention.terminalMaxRecords | integer | -- | 50000 | 50000 | Maximum retained terminal metadata/idempotency tombstones after payload compaction. |
continuations.stateDir | string | -- | .mono-agent/continuations | .mono-agent/continuations | Owner-only per-record continuation store and token-derivation secret. |
cron.conversationId | string | MONO_AGENT_CRON_CONVERSATION_ID | unset | example | Configures conversationId for the cron section. |
cron.dir | string | MONO_AGENT_CRON_DIR | cron | cron | Configures dir for the cron section. |
cron.effort | string | MONO_AGENT_CRON_EFFORT | unset | example | Configures effort for the cron section. |
cron.enabled | boolean | MONO_AGENT_CRON_ENABLED | false | true | Enables the cron capability. |
cron.expression | string | MONO_AGENT_CRON_EXPRESSION | unset | example | Configures expression for the cron section. |
cron.jobs | array | MONO_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.model | string | MONO_AGENT_CRON_MODEL | unset | example | Configures model for the cron section. |
cron.notify | boolean | MONO_AGENT_CRON_NOTIFY | false | false | Configures notify for the cron section. |
cron.notifyConversationId | string | MONO_AGENT_CRON_NOTIFY_CONVERSATION_ID | unset | example | Configures notifyConversationId for the cron section. |
cron.notifyFailureCooldownHours | integer | MONO_AGENT_CRON_NOTIFY_FAILURE_COOLDOWN_HOURS | 6 | 6 | Configures notifyFailureCooldownHours for the cron section. |
cron.operatorActions.enabled | boolean | MONO_AGENT_CRON_OPERATOR_ACTIONS_ENABLED | false | true | Allows API-key-authenticated, explicitly confirmed run-now and runtime enable/disable actions. Defaults off and never rewrites cron config sources. |
cron.preflight | string[] | MONO_AGENT_CRON_PREFLIGHT_JSON | unset | ["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.preflightTimeoutMs | integer | MONO_AGENT_CRON_PREFLIGHT_TIMEOUT_MS | 5000 | 5000 | Wall-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.prompt | string | MONO_AGENT_CRON_PROMPT | unset | example | Configures prompt for the cron section. |
cron.timezone | string | MONO_AGENT_CRON_TIMEZONE | UTC | UTC | Configures timezone for the cron section. |
interaction.askUser.timeoutMs | integer | -- | 600000 | 600000 | Maximum wait for one AskUser interaction (one to five questions); set null to disable automatic expiry. |
interaction.bridge.host | string | -- | 127.0.0.1 | 127.0.0.1 | Bind host for the app-owned AskUser/tool-progress bridge. Defaults to loopback; keep it local because non-loopback values are not rejected. |
interaction.bridge.port | integer | -- | 0 | 0 | Bridge port. 0 chooses an ephemeral port. |
interaction.progress.enabled | boolean | -- | true | true | Whether tool progress posts are relayed to channel status messages. |
memory.backend | string | -- | bujo | bujo | Configures backend for the memory section. |
memory.capture.cron | boolean | -- | unset | false | Set 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.focus | string | -- | unset | Keep 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.intentLifecycle | boolean | -- | false | true | BuJo 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.only | string[] | -- | 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.reconcileModel | string | -- | unset | openai-codex:gpt-6-sol | Optional 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.webhook | boolean | -- | unset | false | Set 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.cron | string | -- | 0 */2 * * * | 0 */2 * * * | Configures consolidation.cron for the memory section. |
memory.consolidation.enabled | boolean | -- | true | true | Enables the memory capability. |
memory.embeddings.apiKey | string | -- | unset | example | Secret value for memory.embeddings.apiKey; prefer the env override. |
memory.embeddings.apiKeyEnv | string | -- | unset | example | Environment-variable name containing an optional provider bearer token; an explicitly declared name must resolve before memory starts. |
memory.embeddings.circuitBreaker.cooldownMs | integer | -- | 30000 | 30000 | Configures embeddings.circuitBreaker.cooldownMs for the memory section. |
memory.embeddings.circuitBreaker.failureThreshold | integer | -- | 3 | 3 | Configures embeddings.circuitBreaker.failureThreshold for the memory section. |
memory.embeddings.dim | integer | -- | unset | 1 | Configures embeddings.dim for the memory section. |
memory.embeddings.endpoint | string | -- | unset | example | Provider service root. LM Studio uses |
memory.embeddings.instructions | string | -- | auto | auto | Query/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.model | string | -- | unset | nomic-embed-text:v1.5 | Configures embeddings.model for the memory section. |
memory.embeddings.provider | string | -- | unset | ollama | Embedding service used by Journal/BuJo memory: ollama, lmstudio, or openai. |
memory.embeddings.timeoutMs | integer | -- | 10000 | 10000 | Configures embeddings.timeoutMs for the memory section. |
memory.llm.endpoint | string | -- | unset | example | Configures llm.endpoint for the memory section. |
memory.llm.model | string | -- | unset | openai-codex:gpt-5.6-terra | Configures llm.model for the memory section. |
memory.llm.provider | string | -- | unset | agent-host | Configures llm.provider for the memory section. |
memory.llm.timeoutMs | integer | -- | 60000 | 60000 | Configures llm.timeoutMs for the memory section. |
memory.llm.trace | boolean | -- | true | true | Configures llm.trace for the memory section. |
memory.maxBytes | integer | -- | 64000 | 64000 | Configures maxBytes for the memory section. |
memory.mode | string | -- | lite | journal | Configures mode for the memory section. |
memory.path | string | -- | unset | ./.mono-agent/memory | Configures path for the memory section. |
memory.profile.enabled | boolean | -- | false | true | BuJo-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.intentExpiry | boolean | -- | false | true | BuJo-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.recency | boolean | -- | false | true | BuJo-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.enabled | boolean | -- | true | true | Enables explicit memory reads: targeted MemoryRecall for every backend and chronological MemoryJournal when a local store supports it. Automatic recall is unchanged. |
memory.rememberTool.enabled | boolean | -- | true | true | Enables the memory capability. |
memory.writeMode | string | -- | disabled | disabled | Configures writeMode for the memory section. |
monitors | object | -- | unset | {} | Deprecated compatibility object. The whole object, including unknown nested keys, is accepted and ignored. Use background process jobs for finite work. |
openaiApi.allowNonLoopback | boolean | MONO_AGENT_OPENAI_API_ALLOW_NON_LOOPBACK | false | true | Configures allowNonLoopback for the openaiApi section. |
openaiApi.apiKey | string | MONO_AGENT_OPENAI_API_KEY | unset | env:MONO_AGENT_OPENAI_API_KEY | Secret value for openaiApi.apiKey; prefer the env override. |
openaiApi.basePath | string | MONO_AGENT_OPENAI_API_BASE_PATH | /v1 | /v1 | Configures basePath for the openaiApi section. |
openaiApi.enabled | boolean | MONO_AGENT_OPENAI_API_ENABLED | false | true | Enables the openaiApi capability. |
openaiApi.host | string | MONO_AGENT_OPENAI_API_HOST | 127.0.0.1 | 127.0.0.1 | Configures host for the openaiApi section. |
openaiApi.modelId | string | MONO_AGENT_OPENAI_API_MODEL_ID | agent | agent | Configures modelId for the openaiApi section. |
openaiApi.port | integer | MONO_AGENT_OPENAI_API_PORT | 0 | 0 | Configures port for the openaiApi section. |
peers | object | -- | 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.enabled | boolean | -- | false | true | Opt in to owner-private Pi-native Exec/Bash background process jobs (unsupported on Windows). |
processJobs.maxActivePerConversation | integer | -- | 2 | 2 | Maximum 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.maxChainDepth | integer | -- | 4 | 4 | Maximum host-owned background wake chain depth (compiled cap 64). |
processJobs.maxConcurrent | integer | -- | 4 | 4 | Maximum simultaneously running process jobs (compiled cap 32). |
processJobs.maxOutputBytes | integer | -- | 1048576 | 1048576 | Combined retained process-output ceiling (compiled cap 8 MiB). |
processJobs.maxQueueAgeMs | integer | -- | 300000 | 300000 | Maximum admission-to-spawn queue age (compiled cap one hour). |
processJobs.maxQueued | integer | -- | 8 | 8 | Maximum waiting process jobs globally, including jobs waiting on a conversation slot (compiled cap 64). |
processJobs.maxRuntimeMs | integer | -- | 1800000 | 1800000 | Host runtime ceiling per owned process group (compiled cap 24 hours; calls may narrow it). |
processJobs.previewChars | integer | -- | 2000 | 2000 | Bound for redacted wake/operator output previews (compiled cap 8000; calls may narrow it). |
processJobs.retention.artifactMaxBytes | integer | -- | 268435456 | 268435456 | Aggregate retained terminal output artifact budget (compiled cap 1 GiB). |
processJobs.retention.maxAgeMs | integer | -- | 604800000 | 604800000 | Maximum terminal process-job record age (compiled cap 30 days). |
processJobs.retention.maxRecords | integer | -- | 1000 | 1000 | Maximum retained terminal process-job records (compiled cap 10000). |
processJobs.stateDir | string | -- | .mono-agent/process-jobs | .mono-agent/process-jobs | Agent-root-confined owner-private process-job records and artifacts; must be disjoint from every restart —clear-sessions purge root. |
processJobs.unsafeAllowUnprotectedState | boolean | -- | false | false | Dangerous 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. |
providers | object | -- | unset | {"openai-codex":{},"ollama":{"baseUrl":"http://localhost:11434"}} | Provider-id map that widens or narrows the selectable Pi model catalog. |
providers.piAuthPath | string | -- | unset | ~/.pi/agent/auth.json | Configures piAuthPath for the providers section. |
providers.piNative.cacheRetention | string | -- | long | long | Anthropic 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.maxRetryDelayMs | integer | -- | 60000 | 60000 | Ceiling for provider-requested retry delays in milliseconds (default 60000). Nonpositive embedder values use the default; longer requested delays fail. |
providers.piNative.piMaxRetries | integer | -- | 2 | 2 | Provider 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.promptCacheDiagnostics | boolean | -- | false | true | Emit metadata-only prompt-cache request fingerprints into run artifacts; never prompt text, tool arguments, cache keys, endpoints or credentials. |
providers.piNative.transport | string | -- | auto | sse | Preferred Pi provider transport: auto, sse, websocket, or websocket-cached. Providers without multiple transports ignore it. |
runtime.compaction.contextWindowOverride | integer | -- | auto-detected | 128000 | Persistent correction for inaccurate provider context-window metadata; learned overflow ceilings may lower it process-locally. |
runtime.compaction.effort | string | -- | auto | auto | Independent summary effort: auto disables thinking when supported, otherwise uses low or the lowest supported level; never inherits conversation effort. |
runtime.compaction.enabled | boolean | -- | true | true | Enables adaptive proactive compaction and one-shot reactive overflow recovery. |
runtime.compaction.failureCooldownMs | integer | -- | 900000 | 900000 | Suppress 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.fixedOverheadEnabled | boolean | -- | true | true | Includes system instructions, tool schemas, and the current user turn in proactive request-size estimates. |
runtime.compaction.keepRecentTokens | integer | -- | adaptive by model | 12800 | Explicit recent-context retention override; omitted derives 10% of the effective context window, clamped to 4,000-20,000 tokens. |
runtime.compaction.maxInputTokens | integer | -- | 200000 | 300000 | Absolute 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.minSavingsTokens | integer | -- | adaptive by model | 12800 | Minimum 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.summaryMaxTokens | integer | -- | adaptive by model | 5120 | Combined 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.triggerRatio | number | -- | 0.9 | 0.9 | Fraction 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.effort | string | -- | unset | medium | Route-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.fallbacks | array | -- | [] | [{"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.maxTurns | integer | -- | unset | 1 | Configures maxTurns for the runtime section. |
runtime.model | `string | object` | -- | required | {"model":"openai-codex:gpt-6.1-sol","context1M":true} |
runtime.retry.backoffMs | integer | -- | 1000 | 2000 | Delay before the first same-model retry. Doubles on each further retry, capped by runtime.retry.maxBackoffMs. |
runtime.retry.maxBackoffMs | integer | -- | 15000 | 30000 | Ceiling for the doubling same-model retry delay. |
runtime.retry.primaryAttempts | integer | -- | 2 | 3 | Total 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.enabled | boolean | -- | true | true | Default-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.ledgerEnabled | boolean | -- | false | true | Opt-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.packEnabled | boolean | -- | true | true | Default-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.enabled | boolean | -- | false | true | Opt-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.extractionModel | string | -- | conversation model | openai:gpt-4o-mini | Explicit 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.requireRequestCap | boolean | -- | false | true | Skip 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.idleTimeoutMs | integer | -- | 1800000 | 1800000 | Configures session.idleTimeoutMs for the runtime section. |
runtime.session.isolateProactive | boolean | -- | false | true | Configures session.isolateProactive for the runtime section. |
runtime.session.mode | string | -- | continuous | continuous | Conversation 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.enabled | boolean | -- | false | true | OFF-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.rollover | string | -- | none | none | Configures session.rollover for the runtime section. |
runtime.session.rolloverNotice | boolean | -- | false | true | Configures session.rolloverNotice for the runtime section. |
runtime.session.rolloverTimezone | string | -- | unset | example | Configures session.rolloverTimezone for the runtime section. |
runtime.session.root | string | -- | unset | example | Durable 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.workspace | string | -- | . | . | Configures workspace for the runtime section. |
sandbox.denyWrite | string[] | -- | unset | ["example"] | Configures denyWrite for the sandbox section. |
sandbox.fallback | string | -- | fail-closed | fail-closed | Configures fallback for the sandbox section. |
sandbox.mode | string | -- | unset | native | Configures mode for the sandbox section. |
sandbox.network.allowlist | string[] | -- | unset | ["example"] | Configures network.allowlist for the sandbox section. |
sandbox.network.mode | string | -- | none | none | Configures network.mode for the sandbox section. |
sandbox.readableRoots | string[] | -- | unset | ["example"] | Configures readableRoots for the sandbox section. |
sandbox.unsafeAllowHostProcess | boolean | -- | false | true | Configures unsafeAllowHostProcess for the sandbox section. |
sandbox.writableRoots | string[] | -- | unset | ["example"] | Configures writableRoots for the sandbox section. |
slack.allowAllChannels | boolean | MONO_AGENT_SLACK_ALLOW_ALL_CHANNELS | false | true | Configures allowAllChannels for the slack section. |
slack.allowedChannelIds | string[] | MONO_AGENT_SLACK_ALLOWED_CHANNEL_IDS | unset | ["example"] | Configures allowedChannelIds for the slack section. |
slack.appToken | string | MONO_AGENT_SLACK_APP_TOKEN | unset | env:MONO_AGENT_SLACK_APP_TOKEN | Secret value for slack.appToken; prefer the env override. |
slack.botToken | string | MONO_AGENT_SLACK_BOT_TOKEN | unset | env:MONO_AGENT_SLACK_BOT_TOKEN | Secret value for slack.botToken; prefer the env override. |
slack.botUserIds | string[] | MONO_AGENT_SLACK_BOT_USER_IDS | unset | ["example"] | Configures botUserIds for the slack section. |
slack.drainDeadlineMs | integer | MONO_AGENT_SLACK_DRAIN_DEADLINE_MS | unset | 1 | Configures drainDeadlineMs for the slack section. |
slack.enabled | boolean | MONO_AGENT_SLACK_ENABLED | false | true | Enables the slack capability. |
slack.heartbeatIntervalMs | integer | MONO_AGENT_SLACK_HEARTBEAT_INTERVAL_MS | unset | 1 | Configures heartbeatIntervalMs for the slack section. |
slack.heartbeatTimeoutMs | integer | MONO_AGENT_SLACK_HEARTBEAT_TIMEOUT_MS | unset | 1 | Configures heartbeatTimeoutMs for the slack section. |
slack.homeTab | object | -- | 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.mentionTextAliases | string[] | MONO_AGENT_SLACK_MENTION_TEXT_ALIASES | unset | ["example"] | Configures mentionTextAliases for the slack section. |
slack.reconnectInitialBackoffMs | integer | MONO_AGENT_SLACK_RECONNECT_INITIAL_BACKOFF_MS | unset | 1 | Configures reconnectInitialBackoffMs for the slack section. |
slack.reconnectMaxBackoffMs | integer | MONO_AGENT_SLACK_RECONNECT_MAX_BACKOFF_MS | unset | 1 | Configures reconnectMaxBackoffMs for the slack section. |
slack.reconnectStabilityMs | integer | MONO_AGENT_SLACK_RECONNECT_STABILITY_MS | unset | 1 | Configures reconnectStabilityMs for the slack section. |
slack.reconnectStartupGraceMs | integer | MONO_AGENT_SLACK_RECONNECT_STARTUP_GRACE_MS | unset | 1 | Configures reconnectStartupGraceMs for the slack section. |
slack.resolveChannelNames | boolean | MONO_AGENT_SLACK_RESOLVE_CHANNEL_NAMES | true | true | Resolves 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.resolveUserNames | boolean | MONO_AGENT_SLACK_RESOLVE_USER_NAMES | true | true | Resolves 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.shortcuts | array | -- | [] | [{"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.stripMentionText | boolean | MONO_AGENT_SLACK_STRIP_MENTION_TEXT | preserve | false | When unset, preserves one readable authenticated self-mention marker; true restores legacy full stripping and false keeps raw mention forms. |
slack.threadContext.enabled | boolean | MONO_AGENT_SLACK_THREAD_CONTEXT_ENABLED | true | true | Sends 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.includeBotMessages | boolean | MONO_AGENT_SLACK_THREAD_CONTEXT_INCLUDE_BOT_MESSAGES | true | true | Include other apps’ messages (a CI or alert bot) labelled as bots. The agent’s own posts are always excluded. |
slack.threadContext.maxMessages | integer | MONO_AGENT_SLACK_THREAD_CONTEXT_MAX_MESSAGES | 15 | 15 | Messages of context sent per turn, newest kept. 0 disables the read. Capped at the harness’s own 30-message bound. |
slack.threadContext.requestLimit | integer | MONO_AGENT_SLACK_THREAD_CONTEXT_REQUEST_LIMIT | 15 | 15 | Objects requested from Slack per read. Slack caps this at 15 for non-Marketplace apps; internal apps can raise it. |
slack.threadContext.timeoutMs | integer | MONO_AGENT_SLACK_THREAD_CONTEXT_TIMEOUT_MS | 4000 | 4000 | Budget 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.unfurlLinks | boolean | MONO_AGENT_SLACK_UNFURL_LINKS | unset | false | Controls 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.unfurlMedia | boolean | MONO_AGENT_SLACK_UNFURL_MEDIA | unset | false | Controls media previews on native Slack agent chat.postMessage requests. When unset, the request field is omitted and Slack’s current default behavior is preserved. |
subagents | object | -- | {“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.allowAllChats | boolean | MONO_AGENT_TELEGRAM_ALLOW_ALL_CHATS | false | true | Configures allowAllChats for the telegram section. |
telegram.allowedChatIds | string[] | MONO_AGENT_TELEGRAM_ALLOWED_CHAT_IDS | unset | ["example"] | Configures allowedChatIds for the telegram section. |
telegram.apiRoot | string | MONO_AGENT_TELEGRAM_API_ROOT | unset | example | Configures apiRoot for the telegram section. |
telegram.attachments.downloadTimeoutMs | integer | MONO_AGENT_TELEGRAM_ATTACHMENT_DOWNLOAD_TIMEOUT_MS | unset | 1 | Configures attachments.downloadTimeoutMs for the telegram section. |
telegram.attachments.maxBytes | integer | MONO_AGENT_TELEGRAM_ATTACHMENT_MAX_BYTES | unset | 1 | Configures attachments.maxBytes for the telegram section. |
telegram.attachments.maxUploadBytes | integer | MONO_AGENT_TELEGRAM_UPLOAD_MAX_BYTES | unset | 1 | Configures attachments.maxUploadBytes for the telegram section. |
telegram.botToken | string | MONO_AGENT_TELEGRAM_BOT_TOKEN | unset | env:MONO_AGENT_TELEGRAM_BOT_TOKEN | Secret value for telegram.botToken; prefer the env override. |
telegram.commands | array | -- | [] | [{"command":"status","prompt":"Report current status."}] | Telegram command definitions handled by the Telegram adapter. |
telegram.enabled | boolean | MONO_AGENT_TELEGRAM_ENABLED | false | true | Enables the telegram capability. |
telegram.groupMode | string | MONO_AGENT_TELEGRAM_GROUP_MODE | any | mention | Group-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.pollWatchdogMs | integer | MONO_AGENT_TELEGRAM_POLL_WATCHDOG_MS | unset | 1 | Configures pollWatchdogMs for the telegram section. |
telegram.projects.enabled | boolean | -- | false | true | Mirror 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.quietHours | object | -- | unset | {"timezone":"UTC","start":"22:00","end":"07:00"} | Quiet-hours rules for Telegram notifications. |
telegram.reactions | object | MONO_AGENT_TELEGRAM_REACTIONS | unset | {"working":true,"done":true,"error":true} | Telegram lifecycle reactions. The env override is boolean and toggles all states. |
telegram.sendTools.pathScope | string | -- | unset | run-output | Confine Telegram path uploads to the current run output directory. |
telegram.sendTools.scope | string | -- | unset | producing-conversation | Bind Telegram send tools to the chat, or forum topic, that produced the current run. |
telegram.stripMentionText | boolean | MONO_AGENT_TELEGRAM_STRIP_MENTION_TEXT | true | true | Removes matching native @mentions from responder text in mention mode; replies without a mention are unchanged. |
telegram.topics | array | -- | [] | [{"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.endpoint | string | MONO_AGENT_TELEGRAM_TRANSCRIPTION_ENDPOINT | unset | example | Configures transcription.endpoint for the telegram section. |
telegram.transcription.language | string | MONO_AGENT_TELEGRAM_TRANSCRIPTION_LANGUAGE | unset | example | Configures transcription.language for the telegram section. |
telegram.transcription.model | string | MONO_AGENT_TELEGRAM_TRANSCRIPTION_MODEL | unset | example | Configures transcription.model for the telegram section. |
telegram.transcription.timeoutMs | integer | MONO_AGENT_TELEGRAM_TRANSCRIPTION_TIMEOUT_MS | unset | 1 | Configures transcription.timeoutMs for the telegram section. |
telegram.transport.ipFamily | integer | MONO_AGENT_TELEGRAM_IP_FAMILY | unset | example | Configures transport.ipFamily for the telegram section. |
tools.allowedTools | string[] | -- | [”*“] | ["Read","Grep"] | Configures allowedTools for the tools section. |
tools.computerUse.backend | string | -- | unset | cua-driver | Opt 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.command | string | -- | unset | /opt/tools/cua-driver | Optional executable name or path. Relative paths resolve against the config workspace. Otherwise resolve PATH, then platform installation locations; doctor reports the selected path. |
tools.continuationServers | string[] | -- | unset | ["example"] | Configures continuationServers for the tools section. |
tools.conversationSearch.datedSnippets | boolean | -- | false | true | Opt 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.disallowedTools | string[] | -- | [] | ["Read","Grep"] | Configures disallowedTools for the tools section. |
tools.filesystem.readableRoots | string[] | -- | 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.writableRoots | string[] | -- | 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.mcpCallMaxTotalTimeoutMs | integer | -- | 2700000 | 2700000 | Configures mcpCallMaxTotalTimeoutMs for the tools section. |
tools.mcpCallTimeoutMs | integer | -- | 120000 | 120000 | Configures mcpCallTimeoutMs for the tools section. |
tools.mcpConfigPath | string | -- | unset | example | Configures mcpConfigPath for the tools section. |
tools.mcpRequestContextServers | string[] | -- | [] | ["transcribe"] | Configured stdio MCP server names that receive trusted per-request conversation, run, output-directory, and scoped progress context. |
tools.web.coordination | string | -- | process | process | Host mode shares web request budgets and cooldowns across participating local mono-agent processes; process preserves isolated coordination. |
tools.web.fetch.browserCommand | string | -- | agent-browser | agent-browser | Direct executable name or path for agent-browser; shell fragments are not evaluated. |
tools.web.fetch.parallel.apiKeyEnv | string | -- | unset | example | Secret value for tools.web.fetch.parallel.apiKeyEnv; prefer the env override. |
tools.web.fetch.provider | `string | string[]` | -- | local | local |
tools.web.fetch.render | string | -- | never | never | Browser-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 | `string | string[]` | -- | [“parallel”,“ollama”] | parallel,ollama |
tools.web.search.codex.model | string | -- | gpt-5.6-luna | gpt-5.6-luna | Codex 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.endpoint | string | -- | unset | example | Compatibility alias for tools.web.search.searxng.endpoint. Existing configurations remain valid; new configurations should use the provider-specific block. |
tools.web.search.maxRequestsPerRun | integer | -- | 4 | 4 | Hard 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.apiKeyEnv | string | -- | unset | OLLAMA_API_KEY | Environment 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.baseUrl | string | -- | http://127.0.0.1:11434 | https://ollama.com | Ollama 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.trustPublicUrl | boolean | -- | false | true | Explicit acknowledgement for an HTTPS custom public Ollama origin. It never permits sending hosted credentials to that origin. |
tools.web.search.parallel.apiKeyEnv | string | -- | unset | example | Secret value for tools.web.search.parallel.apiKeyEnv; prefer the env override. |
tools.web.search.searxng.endpoint | string | -- | unset | http://127.0.0.1:8088 | Optional unauthenticated loopback HTTP SearXNG base URL. Remote HTTPS, credentials, query strings, and fragments are rejected. |
traceability.globalDiscovery | boolean | -- | true | true | Configures globalDiscovery for the traceability section. |
traceability.heartbeatMs | integer | -- | 10000 | 10000 | Configures heartbeatMs for the traceability section. |
traceability.registryDir | string | -- | .mono-agent/trace-sources | .mono-agent/trace-sources | Configures registryDir for the traceability section. |
traceability.sourceId | string | -- | unset | my-agent | Configures sourceId for the traceability section. |
traceability.sourceLabel | string | -- | unset | My Agent | Configures sourceLabel for the traceability section. |
traceability.staleAfterMs | integer | -- | 30000 | 30000 | Configures staleAfterMs for the traceability section. |
tui.allowNonLoopback | boolean | MONO_AGENT_TUI_ALLOW_NON_LOOPBACK | false | true | Configures allowNonLoopback for the tui section. |
tui.apiKey | string | MONO_AGENT_TUI_API_KEY | unset | example | Secret value for tui.apiKey; prefer the env override. |
tui.basePath | string | MONO_AGENT_TUI_BASE_PATH | /gui | /gui | Configures basePath for the tui section. |
tui.enabled | boolean | MONO_AGENT_TUI_ENABLED | true | true | Enables the tui capability. |
tui.host | string | MONO_AGENT_TUI_HOST | 127.0.0.1 | 127.0.0.1 | Configures host for the tui section. |
tui.port | integer | MONO_AGENT_TUI_PORT | 0 | 0 | Configures port for the tui section. |
tui.requestToolEnvironment.allowedKeys | string[] | 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.allowPathPrepend | boolean | MONO_AGENT_TUI_REQUEST_TOOL_ENVIRONMENT_ALLOW_PATH_PREPEND | false | false | Allows an ACP request to prepend up to four absolute directories to process-tool PATH for one turn. The caller cannot replace PATH. |
webhook.allowNonLoopback | boolean | MONO_AGENT_WEBHOOK_ALLOW_NON_LOOPBACK | unset | true | Configures allowNonLoopback for the webhook section. |
webhook.apiKey | string | MONO_AGENT_WEBHOOK_API_KEY | unset | set-via-MONO_AGENT_WEBHOOK_API_KEY | Secret value for webhook.apiKey; prefer the env override. |
webhook.defaultMode | string | MONO_AGENT_WEBHOOK_DEFAULT_MODE | sync | sync | Configures defaultMode for the webhook section. |
webhook.dir | string | MONO_AGENT_WEBHOOK_DIR | webhook | webhook | Configures dir for the webhook section. |
webhook.effort | string | MONO_AGENT_WEBHOOK_EFFORT | unset | example | Configures effort for the webhook section. |
webhook.enabled | boolean | MONO_AGENT_WEBHOOK_ENABLED | false | true | Enables the webhook capability. |
webhook.endpoints | array | MONO_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.host | string | MONO_AGENT_WEBHOOK_HOST | 127.0.0.1 | 127.0.0.1 | Configures host for the webhook section. |
webhook.maxAttachmentBytes | integer | MONO_AGENT_WEBHOOK_MAX_ATTACHMENT_BYTES | 20971520 | 20971520 | Configures maxAttachmentBytes for the webhook section. |
webhook.maxRunMs | integer | MONO_AGENT_WEBHOOK_MAX_RUN_MS | unset | 1 | Configures maxRunMs for the webhook section. |
webhook.maxStoredRequests | integer | MONO_AGENT_WEBHOOK_MAX_STORED_REQUESTS | 100 | 100 | Configures maxStoredRequests for the webhook section. |
webhook.model | string | MONO_AGENT_WEBHOOK_MODEL | unset | example | Configures model for the webhook section. |
webhook.notify | boolean | MONO_AGENT_WEBHOOK_NOTIFY | unset | example | Configures notify for the webhook section. |
webhook.notifyConversationId | string | MONO_AGENT_WEBHOOK_NOTIFY_CONVERSATION_ID | unset | example | Configures notifyConversationId for the webhook section. |
webhook.path | string | MONO_AGENT_WEBHOOK_PATH | /webhook/invoke | /webhook/invoke | Configures path for the webhook section. |
webhook.port | integer | MONO_AGENT_WEBHOOK_PORT | 0 | 0 | Configures port for the webhook section. |
webhook.prompt | string | MONO_AGENT_WEBHOOK_PROMPT | unset | example | Configures prompt for the webhook section. |
webhook.retentionMs | integer | MONO_AGENT_WEBHOOK_RETENTION_MS | 300000 | 300000 | Configures retentionMs for the webhook section. |
Plugin channels
Section titled “Plugin channels”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.