Configuration Schema
Configuration Schema
JSON Schema for the Operator configuration file (config.toml).
Schema Information
- $schema:
https://json-schema.org/draft/2020-12/schema - title:
Config
Required Fields
agentsnotificationsqueuepathsuilaunchtemplates
Properties
| Property | Type | Required | Description |
|---|---|---|---|
projects |
array |
No | List of projects operator can assign work to |
agents |
→ AgentsConfig |
Yes | |
notifications |
→ NotificationsConfig |
Yes | |
queue |
→ QueueConfig |
Yes | |
paths |
→ PathsConfig |
Yes | |
ui |
→ UiConfig |
Yes | |
launch |
→ LaunchConfig |
Yes | |
templates |
→ TemplatesConfig |
Yes | |
api |
→ ApiConfig |
No | |
logging |
→ LoggingConfig |
No | |
tmux |
→ TmuxConfig |
No | |
sessions |
→ SessionsConfig |
No | Session wrapper configuration (tmux, vscode, or cmux) |
llm_tools |
→ LlmToolsConfig |
No | |
rest_api |
→ RestApiConfig |
No | |
git |
→ GitConfig |
No | |
kanban |
→ KanbanConfig |
No | Kanban provider configuration for syncing issues from Jira, Linear, etc. |
version_check |
→ VersionCheckConfig |
No | Version check configuration for automatic update notifications |
delegators |
array |
No | Agent delegator configurations for autonomous ticket launching |
model_servers |
array |
No | User-declared model servers (ollama, lmstudio, any OpenAI-compat host). Implicit builtin servers exist for each llm_tool’s vendor API and do not need declaration. |
relay |
→ RelayConfig |
No | Relay MCP injection configuration |
mcp |
→ McpConfig |
No | Model Context Protocol (MCP) server configuration |
acp |
→ AcpConfig |
No | Agent Client Protocol (ACP) agent configuration |
Type Definitions
AgentsConfig
| Property | Type | Required | Description |
|---|---|---|---|
max_parallel |
integer |
Yes | |
cores_reserved |
integer |
Yes | |
max_agents_per_repo |
integer |
No | Maximum concurrent agents per project/repo (default: 1). Requires git.use_worktrees = true when > 1 to avoid conflicts. |
health_check_interval |
integer |
Yes | |
generation_timeout_secs |
integer |
No | Timeout in seconds for each agent generation (default: 300 = 5 min) |
sync_interval |
integer |
No | Interval in seconds between ticket-session syncs (default: 60) |
step_timeout |
integer |
No | Maximum seconds a step can run before timing out (default: 1800 = 30 min) |
silence_threshold |
integer |
No | Seconds of tmux silence before considering agent awaiting input (default: 30) |
NotificationsConfig
Notifications configuration with support for multiple integrations.
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
Yes | Global enabled flag for all notifications |
os |
→ OsNotificationConfig |
No | OS notification configuration |
webhook |
object | No | Single webhook configuration (for simple setups) |
webhooks |
array |
No | Multiple webhook configurations |
OsNotificationConfig
OS notification configuration.
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether OS notifications are enabled |
sound |
boolean |
No | Play sound with notifications |
events |
array |
No | Events to send (empty = all events) Possible values: agent.started, agent.completed, agent.failed, agent.awaiting_input, agent.session_lost, pr.created, pr.merged, pr.closed, pr.ready_to_merge, pr.changes_requested, ticket.returned, investigation.created |
WebhookConfig
Webhook notification configuration.
| Property | Type | Required | Description |
|---|---|---|---|
name |
string | null |
No | Optional name for this webhook (for logging) |
enabled |
boolean |
No | Whether this webhook is enabled |
url |
string |
No | Webhook URL |
auth_type |
string | null |
No | Authentication type: “bearer” or “basic” |
token_env |
string | null |
No | Environment variable containing the bearer token |
username |
string | null |
No | Username for basic auth |
password_env |
string | null |
No | Environment variable containing the password for basic auth |
events |
array | null |
No | Events to send (empty = all events) |
QueueConfig
| Property | Type | Required | Description |
|---|---|---|---|
auto_assign |
boolean |
Yes | |
priority_order |
array |
Yes | |
poll_interval_ms |
integer |
Yes |
PathsConfig
| Property | Type | Required | Description |
|---|---|---|---|
tickets |
string |
Yes | |
projects |
string |
Yes | |
state |
string |
Yes | |
worktrees |
string |
No | Base directory for per-ticket worktrees (default: ~/.operator/worktrees) |
UiConfig
| Property | Type | Required | Description |
|---|---|---|---|
refresh_rate_ms |
integer |
Yes | |
completed_history_hours |
integer |
Yes | |
summary_max_length |
integer |
Yes | |
panel_names |
→ PanelNamesConfig |
No |
PanelNamesConfig
| Property | Type | Required | Description |
|---|---|---|---|
status |
string |
No | |
queue |
string |
No | |
in_progress |
string |
No | |
completed |
string |
No |
LaunchConfig
| Property | Type | Required | Description |
|---|---|---|---|
confirm_autonomous |
boolean |
Yes | |
confirm_paired |
boolean |
Yes | |
launch_delay_ms |
integer |
Yes | |
docker |
→ DockerConfig |
No | Docker execution configuration |
yolo |
→ YoloConfig |
No | YOLO (auto-accept) mode configuration |
DockerConfig
Docker execution configuration for running agents in containers
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether docker mode option is available in launch dialog |
image |
string |
No | Docker image to use (required if enabled) |
extra_args |
array |
No | Additional docker run arguments |
mount_path |
string |
No | Container mount path for the project (default: /workspace) |
env_vars |
array |
No | Environment variables to pass through to the container |
YoloConfig
YOLO (auto-accept) mode configuration for fully autonomous execution
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether YOLO mode option is available in launch dialog |
TemplatesConfig
| Property | Type | Required | Description |
|---|---|---|---|
preset |
→ CollectionPreset |
No | Named preset for issue type collection Options: simple, dev_kanban, devops_kanban, custom |
collection |
array |
No | Custom issuetype collection (only used when preset = custom) List of issue type keys: TASK, FEAT, FIX, SPIKE, INV |
active_collection |
string | null |
No | Active collection name (overrides preset if set) Can be a builtin preset name or a user-defined collection |
CollectionPreset
Predefined issue type collections
Allowed Values:
simple- Simple tasks only: TASKdev_kanban- Developer kanban: TASK, FEAT, FIXdevops_kanban- DevOps kanban: TASK, SPIKE, INV, FEAT, FIXcustom- Custom collection (use the collection field)
ApiConfig
API integrations configuration
| Property | Type | Required | Description |
|---|---|---|---|
pr_check_interval_secs |
integer |
No | Interval in seconds between PR status checks (default: 60) |
rate_limit_check_interval_secs |
integer |
No | Interval in seconds between rate limit checks (default: 300) |
rate_limit_warning_threshold |
number |
No | Show warning when rate limit remaining is below this percentage (default: 0.2) |
LoggingConfig
Logging configuration
| Property | Type | Required | Description |
|---|---|---|---|
level |
string |
No | Log level filter (trace, debug, info, warn, error) |
to_file |
boolean |
No | Whether to log to file in TUI mode (false = stderr for debugging) |
TmuxConfig
| Property | Type | Required | Description |
|---|---|---|---|
config_generated |
boolean |
No | Whether custom tmux config has been generated |
SessionsConfig
Session wrapper configuration
Controls how operator creates and manages terminal sessions for agents. Four modes are supported:
- tmux: Standalone tmux sessions (default)
- vscode: VS Code integrated terminal (requires extension)
- cmux: macOS terminal multiplexer (requires running inside cmux)
- zellij: Zellij terminal workspace manager
| Property | Type | Required | Description |
|---|---|---|---|
wrapper |
→ SessionWrapperType |
No | Which session wrapper to use |
tmux |
→ SessionsTmuxConfig |
No | Tmux-specific configuration |
vscode |
→ SessionsVSCodeConfig |
No | VS Code-specific configuration |
cmux |
→ SessionsCmuxConfig |
No | cmux-specific configuration |
zellij |
→ SessionsZellijConfig |
No | Zellij-specific configuration |
SessionWrapperType
Session wrapper type for terminal session management
Allowed Values:
tmux- Standalone tmux sessions (default)vscode- VS Code integrated terminal (via extension webhook)cmux- cmux macOS terminal multiplexerzellij- Zellij terminal workspace manager
SessionsTmuxConfig
Tmux-specific session configuration
| Property | Type | Required | Description |
|---|---|---|---|
config_generated |
boolean |
No | Whether custom tmux config has been generated |
socket_name |
string |
No | Socket name for session isolation |
SessionsVSCodeConfig
VS Code extension session configuration
| Property | Type | Required | Description |
|---|---|---|---|
webhook_port |
integer |
No | Port for extension webhook server |
connect_timeout_ms |
integer |
No | Connection timeout in milliseconds |
SessionsCmuxConfig
cmux macOS terminal multiplexer session configuration
| Property | Type | Required | Description |
|---|---|---|---|
binary_path |
string |
No | Path to the cmux binary |
require_in_cmux |
boolean |
No | Require running inside cmux (CMUX_WORKSPACE_ID env var present) |
placement |
→ CmuxPlacementPolicy |
No | Where to place new agent sessions: “auto”, “workspace”, or “window” |
CmuxPlacementPolicy
Placement policy for cmux sessions: where to create new agent terminals
Allowed Values:
auto- Automatically choose: 0-1 windows → new workspace, >1 windows → new windowworkspace- Always create a new workspace in the active windowwindow- Always create a new window for each ticket
SessionsZellijConfig
Zellij terminal workspace manager session configuration
| Property | Type | Required | Description |
|---|---|---|---|
require_in_zellij |
boolean |
No | Require running inside Zellij (ZELLIJ env var present) |
LlmToolsConfig
LLM CLI tools configuration
| Property | Type | Required | Description |
|---|---|---|---|
detected |
array |
No | Detected CLI tools (populated on first startup) |
providers |
array |
No | Available {tool, model} pairs for launching tickets Built from detected tools + their model aliases |
detection_complete |
boolean |
No | Whether detection has been completed |
default_tool |
string | null |
No | User’s preferred default LLM tool (e.g., “claude”) |
default_model |
string | null |
No | User’s preferred default model alias (e.g., “opus”) |
skill_directory_overrides |
object |
No | Per-tool overrides for skill directories (keyed by tool_name) |
DetectedTool
A detected CLI tool (e.g., claude binary)
| Property | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Tool name (e.g., “claude”) |
path |
string |
Yes | Path to the binary |
version |
string |
Yes | Version string |
min_version |
string | null |
No | Minimum required version for Operator compatibility |
version_ok |
boolean |
No | Whether the installed version meets the minimum requirement |
model_aliases |
array |
No | Available model aliases (e.g., [“opus”, “sonnet”, “haiku”]) |
command_template |
string |
No | Command template with , , placeholders |
capabilities |
→ ToolCapabilities |
No | Tool capabilities |
yolo_flags |
array |
No | CLI flags for YOLO (auto-accept) mode |
ToolCapabilities
Tool capabilities
| Property | Type | Required | Description |
|---|---|---|---|
supports_sessions |
boolean |
No | Whether the tool supports session continuity via UUID |
supports_headless |
boolean |
No | Whether the tool can run in headless/non-interactive mode |
LlmProvider
A {tool, model} pair that can be selected when launching tickets. Includes optional variant fields adopted from vibe-kanban’s profile system.
| Property | Type | Required | Description |
|---|---|---|---|
tool |
string |
Yes | CLI tool name (e.g., “claude”, “codex”, “gemini”) |
model |
string |
Yes | Model alias or name (e.g., “opus”, “sonnet”, “gpt-4.1”) |
display_name |
string | null |
No | Optional display name for UI (e.g., “Claude Opus”, “Codex High”) |
flags |
array |
No | Additional CLI flags for this provider (e.g., [”–dangerously-skip-permissions”]) |
env |
object |
No | Environment variables to set when launching |
approvals |
boolean |
No | Whether this provider requires approval gates |
plan_only |
boolean |
No | Whether to run in plan-only mode |
reasoning_effort |
string | null |
No | Reasoning effort level (Codex: “low”, “medium”, “high”) |
sandbox |
string | null |
No | Sandbox mode (Codex: “danger-full-access”, “workspace-write”) |
SkillDirectoriesOverride
Per-tool skill directory overrides
| Property | Type | Required | Description |
|---|---|---|---|
global |
array |
No | Additional global skill directories |
project |
array |
No | Additional project-relative skill directories |
RestApiConfig
REST API server configuration
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether the REST API is enabled |
host |
string |
No | Address the REST API binds to. Defaults to 127.0.0.1 (local only) so the server — which reports the project directory name — is not reachable from other hosts. Set to 0.0.0.0 to expose it on all interfaces. |
port |
integer |
No | Port for the REST API server |
cors_origins |
array |
No | CORS allowed origins (empty = allow all) |
GitConfig
Git provider configuration for PR/MR operations
| Property | Type | Required | Description |
|---|---|---|---|
provider |
object | No | Active provider (auto-detected from remote URL if not specified) |
github |
→ GitHubConfig |
No | GitHub-specific configuration |
gitlab |
→ GitLabConfig |
No | GitLab-specific configuration (planned) |
branch_format |
string |
No | Branch naming format (e.g., “{type}/{ticket_id}-{slug}”) |
use_worktrees |
boolean |
No | Whether to use git worktrees for per-ticket isolation (default: false) When false, tickets work directly in the project directory with branches |
GitProviderConfig
Git provider selection
Allowed Values:
github- GitHub (github.com)gitlab- GitLab (gitlab.com or self-hosted)bitbucket- Bitbucket (bitbucket.org)azuredevops- Azure DevOps (dev.azure.com)
GitHubConfig
GitHub-specific configuration
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether GitHub integration is enabled |
token_env |
string |
No | Environment variable containing the GitHub token (default: GITHUB_TOKEN) |
GitLabConfig
GitLab-specific configuration (planned)
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether GitLab integration is enabled |
token_env |
string |
No | Environment variable containing the GitLab token (default: GITLAB_TOKEN) |
host |
string | null |
No | GitLab host (default: gitlab.com, can be self-hosted) |
KanbanConfig
Kanban provider configuration for syncing issues from external systems
Providers are keyed by domain/workspace:
- Jira: keyed by domain (e.g., “foobar.atlassian.net”)
- Linear: keyed by workspace slug (e.g., “myworkspace”)
- GitHub Projects: keyed by owner login (e.g., “my-org”)
| Property | Type | Required | Description |
|---|---|---|---|
jira |
object |
No | Jira Cloud instances keyed by domain (e.g., “foobar.atlassian.net”) |
linear |
object |
No | Linear instances keyed by workspace slug |
github |
object |
No | GitHub Projects v2 instances keyed by owner login (user or org) NOTE: This is the kanban GitHub integration (Projects v2), distinct from GitHubConfig which is the git provider used for PRs and branches. The two use different env vars and different scopes — see docs/getting-started/kanban/github.md for the full disambiguation. |
JiraConfig
Jira Cloud provider configuration
The domain is specified as the HashMap key in KanbanConfig.jira
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether this provider is enabled |
api_key_env |
string |
No | Environment variable name containing the API key (default: OPERATOR_JIRA_API_KEY) |
email |
string |
No | Atlassian account email for authentication |
projects |
object |
No | Per-project sync configuration |
ProjectSyncConfig
Per-project/team sync configuration for a kanban provider
| Property | Type | Required | Description |
|---|---|---|---|
sync_user_id |
string |
No | User ID to sync issues for (provider-specific format) - Jira: accountId (e.g., “5e3f7acd9876543210abcdef”) - Linear: user ID (e.g., “abc12345-6789-0abc-def0-123456789abc”) - GitHub Projects: numeric GitHub databaseId (e.g., “12345678”) |
sync_statuses |
array |
No | Workflow statuses to sync (empty = default/first status only) |
collection_name |
string | null |
No | Optional IssueTypeCollection name this project maps to. Not required for kanban onboarding or sync. |
type_mappings |
object |
No | Explicit mapping: kanban issue type ID → operator issue type key (e.g., TASK, FEAT, FIX). Multiple kanban types can map to the same operator template. |
bidirectional |
boolean |
No | When true, operator pushes status changes and activity logs back to this kanban project. Ticket state changes (todo→doing, doing→done) and step completions with delegator info are reflected upstream. Default: false. |
LinearConfig
Linear provider configuration
The workspace slug is specified as the HashMap key in KanbanConfig.linear
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether this provider is enabled |
api_key_env |
string |
No | Environment variable name containing the API key (default: OPERATOR_LINEAR_API_KEY) |
projects |
object |
No | Per-team sync configuration |
GithubProjectsConfig
GitHub Projects v2 (kanban) provider configuration
The owner login (user or org) is specified as the HashMap key in
KanbanConfig.github. Project keys inside projects are GraphQL node
IDs (e.g., PVT_kwDOABcdefg) — opaque, stable identifiers used directly
by every GitHub Projects v2 mutation without needing a lookup.
Distinct from GitHubConfig (the git provider used for PR/branch
operations). They live in different parts of the config tree, use
different env vars (OPERATOR_GITHUB_TOKEN vs GITHUB_TOKEN), and
require different OAuth scopes (project vs repo). See
docs/getting-started/kanban/github.md for the full rationale.
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Whether this provider is enabled |
api_key_env |
string |
No | Environment variable name containing the GitHub token (default: OPERATOR_GITHUB_TOKEN). The token must have project (or read:project) scope, NOT just repo — see the disambiguation guide in the kanban github docs. |
projects |
object |
No | Per-project sync configuration. Keys are GraphQL project node IDs. |
VersionCheckConfig
Version check configuration for automatic update notifications
| Property | Type | Required | Description |
|---|---|---|---|
enabled |
boolean |
No | Enable automatic version checking on startup |
url |
string | null |
No | URL to fetch latest version from (optional, can be removed) |
timeout_secs |
integer |
No | Timeout in seconds for version check HTTP request |
Delegator
Agent delegator configuration for autonomous ticket launching
A delegator is a named {tool, model} pairing with optional launch configuration that can be used to launch agents for tickets.
| Property | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Unique name for this delegator (e.g., “claude-opus-auto”) |
llm_tool |
string |
Yes | LLM tool name (must match a detected tool, e.g., “claude”, “codex”) |
model |
string |
Yes | Model alias (e.g., “opus”, “sonnet”, “gpt-4o”) |
display_name |
string | null |
No | Optional display name for UI |
model_properties |
object |
No | Arbitrary model properties (e.g., reasoning_effort, sandbox) |
launch_config |
object | No | Optional launch configuration |
model_server |
string | null |
No | Name of a declared ModelServer (from Config.model_servers). None means use the llm_tool’s implicit vendor default (claude → anthropic-api, codex → openai-api, gemini → google-api). |
remote_agent |
object | No | Declarative reference to a remote, named agent on another platform (e.g. an AGNT agent or an OpenAI Assistant; see [crate::config::AgentProfile]). Export-only: Operator has no runtime client for those platforms, so a delegator carrying this CANNOT be launched locally — resolution errors out (see delegator_resolution). It is stored, listed, serialized into an AgentProfile, and — for platform == "agnt" — surfaced in the --format agnt workflow export as an agnt-agent node. None = ordinary, locally launchable delegator. |
x_agnt |
object | No | Opaque AGNT-namespaced extension fields, preserved verbatim across an AgentProfile round-trip so re-export is lossless (e.g. memory, assignedWorkflows, creditLimit). Operator never interprets this. |
x_openai |
object | No | Opaque OpenAI-namespaced extension fields, preserved verbatim across an AgentProfile round-trip (e.g. instructions, tools, tool_resources, metadata, thread refs). Mirror of [Self::x_agnt]; never interpreted. |
unmapped_core |
object | No | Opaque carry for AgentProfile shared-core fields Operator cannot model first-class (system_prompt / skills / mcp_servers / tools) so an import→export round-trip is lossless. Distinct from x_agnt: these are shared-core fields, not AGNT-specific, so folding them into x_agnt would corrupt that namespace. Operator never interprets this. |
DelegatorLaunchConfig
Launch configuration for a delegator
Controls how the delegator launches agents. Optional fields use tri-state
semantics: None = inherit from global config, Some(true/false) = override.
| Property | Type | Required | Description |
|---|---|---|---|
yolo |
boolean |
No | Run in YOLO (auto-accept) mode |
permission_mode |
string | null |
No | Permission mode override |
flags |
array |
No | Additional CLI flags |
use_worktrees |
boolean | null |
No | Override global git.use_worktrees per-delegator (None = use global setting) |
create_branch |
boolean | null |
No | Whether to create a git branch for the ticket (None = default behavior) |
docker |
boolean | null |
No | Run in docker container (None = use global launch.docker.enabled) |
prompt_prefix |
string | null |
No | Prompt text to prepend before the generated step prompt |
prompt_suffix |
string | null |
No | Prompt text to append after the generated step prompt |
operator_relay |
boolean | null |
No | Override global relay auto-inject MCP setting per-delegator (None = use global setting) |
RemoteAgentRef
A declarative reference to a remote, named agent hosted by another platform.
platform is the hosting service ("agnt", "openai") — deliberately
distinct from the core provider/llm_tool (the model or coding CLI). These
agents are API/memory-native and live on the remote side; Operator has no
runtime client for them, so a delegator carrying one is export-only and
cannot be launched locally (see the guard in delegator_resolution).
| Property | Type | Required | Description |
|---|---|---|---|
platform |
string |
Yes | Hosting platform (e.g. "agnt", "openai"). |
id |
string |
Yes | Platform-native agent identifier (e.g. an AGNT agent name, an OpenAI asst_… id). |
ModelServer
A named host that serves models via an inference API.
Model servers are orthogonal to llm_tools: a delegator pairs an agentic CLI
(llm_tool, e.g. claude/codex/gemini) with a model-serving endpoint
(model_server, e.g. ollama-local, openai-api, a custom vllm host).
Implicit builtin servers (anthropic-api, openai-api, google-api) are
returned by [implicit_model_server_for_tool] and do not need to be declared
in config.
| Property | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Unique name (e.g., “ollama-local”, “vllm-gpu1”) |
kind |
string |
Yes | Kind: “ollama”, “openrouter”, “openai-compat”, “anthropic-api”, “openai-api”, “google-api”, “lmstudio” |
base_url |
string | null |
No | Base URL of the inference endpoint (e.g., http://localhost:11434). None for implicit vendor servers means use the SDK default. |
api_key_env |
string | null |
No | Name of an env var providing the API key (e.g., OLLAMA_API_KEY) |
extra_env |
object |
No | Additional environment variables set when spawning agents that use this server |
display_name |
string | null |
No | Optional display name for UI |
RelayConfig
Relay MCP injection configuration
| Property | Type | Required | Description |
|---|---|---|---|
auto_inject_mcp |
boolean |
No | When true, automatically inject the relay MCP server for all delegators. When false (default), relay injection is opt-in per delegator. |
McpConfig
Model Context Protocol (MCP) server configuration
| Property | Type | Required | Description |
|---|---|---|---|
http_enabled |
boolean |
No | Whether to mount MCP HTTP/SSE endpoints on the REST API server. Toggling requires an API restart (no hot-swap of the axum router). |
stdio_advertised |
boolean |
No | Whether the descriptor endpoint advertises the operator mcp stdio command. Set to false on multi-tenant/remote deployments where clients shouldn’t spawn local subprocesses. |
expose_ticket_write_tools |
boolean |
No | Whether to expose ticket-mutating tools (claim, complete, return-to-queue, create) over MCP. Defaults to false because any MCP client can call them. |
external_servers |
array |
No | External MCP servers to inject into spawned agent sessions. Each entry produces a separate --mcp-config file alongside the relay config when launching Claude Code agents. |
ExternalMcpServer
An external MCP server to inject into spawned agent sessions.
Values in command, args, and env support ${VAR} interpolation,
expanded at spawn time from the operator process environment.
When discover_from is set, operator reads an MCP server spec from that
JSON sidecar file at spawn time. The sidecar must contain a top-level
mcpServer object with command, args, and env fields. If the file
is absent and command is empty, the server is silently skipped.
| Property | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Server name used as the key in the mcpServers JSON object (e.g., “kanbots”). Must be unique across all external servers. |
command |
string |
No | Command to execute. Supports ${VAR} interpolation. |
args |
array |
No | Command arguments. Each element supports ${VAR} interpolation. |
env |
object |
No | Environment variables passed to the MCP server process. Values support ${VAR} interpolation. |
enabled |
boolean |
No | Whether this server is enabled. Allows disabling without removing config. |
discover_from |
string | null |
No | Path to a JSON sidecar discovery file. Relative paths resolve from the project directory. The sidecar must contain { "mcpServer": { ... } }. When the file exists, its mcpServer spec is used verbatim (overriding command/args/env). When absent and command is empty, the server is silently skipped. |
AcpConfig
Agent Client Protocol (ACP) agent configuration.
Operator runs as an ACP agent over stdio when editors (Zed, JetBrains,
Emacs agent-shell, Kiro, etc.) spawn operator acp. Each ACP session
maps to an in-progress ACP ticket and a delegator subprocess.
| Property | Type | Required | Description |
|---|---|---|---|
stdio_advertised |
boolean |
No | Whether the dashboard advertises the operator acp stdio entrypoint (and editor-config snippet actions). Set to false on machines that shouldn’t be used as ACP agents. |
default_delegator |
string | null |
No | Name of the delegator (from [[delegators]]) to use for ACP prompts. If unset or not found, falls back to the operator’s default delegator resolution. |
max_concurrent_sessions |
integer |
No | Maximum number of concurrent ACP sessions. New session/new requests beyond this limit are rejected with a JSON-RPC error. |