Configuration
Configuration
Operator configuration is stored in .tickets/operator/config.toml.
Configuration Sections
| Section | Description |
|---|---|
[agents] |
Agent lifecycle, parallelism, and health monitoring |
[notifications] |
macOS notification preferences |
[queue] |
Queue processing and ticket assignment |
[paths] |
Directory paths for tickets, projects, and state |
[ui] |
Terminal UI appearance and behavior |
[launch] |
Agent launch behavior and confirmations |
[templates] |
Issue type collections and presets |
[api] |
External API integration settings |
[logging] |
Log level and output configuration |
[tmux] |
Tmux integration settings |
[backstage] |
Backstage server integration |
[llm_tools] |
LLM CLI tool detection and providers |
[agents]
Agent lifecycle, parallelism, and health monitoring
| Field | Type | Default | Description |
|---|---|---|---|
max_parallel * |
integer |
5 | |
cores_reserved * |
integer |
1 | |
health_check_interval * |
integer |
30 | |
generation_timeout_secs |
integer |
300 | Timeout in seconds for each agent generation (default: 300 = 5 min) |
sync_interval |
integer |
60 | Interval in seconds between ticket-session syncs (default: 60) |
step_timeout |
integer |
1800 | Maximum seconds a step can run before timing out (default: 1800 = 30 min) |
silence_threshold |
integer |
30 | Seconds of tmux silence before considering agent awaiting input (default: 30) |
[notifications]
macOS notification preferences
| Field | Type | Default | Description |
|---|---|---|---|
enabled * |
boolean |
true | Global enabled flag for all notifications |
os |
→ OsNotificationConfig |
- | OS notification configuration |
webhook |
any |
- | Single webhook configuration (for simple setups) |
webhooks |
array[→ WebhookConfig] |
- | Multiple webhook configurations |
[queue]
Queue processing and ticket assignment
| Field | Type | Default | Description |
|---|---|---|---|
auto_assign * |
boolean |
true | |
priority_order * |
array[string] |
[“INV”, “FIX”, “TASK”, “FEAT”, “SPIKE”] | |
poll_interval_ms * |
integer |
1000 |
[paths]
Directory paths for tickets, projects, and state
| Field | Type | Default | Description |
|---|---|---|---|
tickets * |
string |
.tickets | |
projects * |
string |
. | |
state * |
string |
.tickets/operator | |
worktrees |
string |
- | Base directory for per-ticket worktrees (default: ~/.operator/worktrees) |
[ui]
Terminal UI appearance and behavior
| Field | Type | Default | Description |
|---|---|---|---|
refresh_rate_ms * |
integer |
250 | |
completed_history_hours * |
integer |
24 | |
summary_max_length * |
integer |
40 | |
panel_names |
→ PanelNamesConfig |
- |
[launch]
Agent launch behavior and confirmations
| Field | Type | Default | Description |
|---|---|---|---|
confirm_autonomous * |
boolean |
true | |
confirm_paired * |
boolean |
true | |
launch_delay_ms * |
integer |
2000 | |
docker |
→ DockerConfig |
- | Docker execution configuration |
yolo |
→ YoloConfig |
- | YOLO (auto-accept) mode configuration |
[templates]
Issue type collections and presets
| Field | Type | Default | Description |
|---|---|---|---|
preset |
→ CollectionPreset |
- | Named preset for issue type collection Options: simple, dev_kanban, devops_kanban, custom |
collection |
array[string] |
- | Custom issuetype collection (only used when preset = custom) List of issue type keys: TASK, FEAT, FIX, SPIKE, INV |
active_collection |
string | null |
- | Active collection name (overrides preset if set) Can be a builtin preset name or a user-defined collection |
[api]
External API integration settings
| Field | Type | Default | Description |
|---|---|---|---|
pr_check_interval_secs |
integer |
60 | Interval in seconds between PR status checks (default: 60) |
rate_limit_check_interval_secs |
integer |
300 | Interval in seconds between rate limit checks (default: 300) |
rate_limit_warning_threshold |
number |
0.2 | Show warning when rate limit remaining is below this percentage (default: 0.2) |
[logging]
Log level and output configuration
| Field | Type | Default | Description |
|---|---|---|---|
level |
string |
info | Log level filter (trace, debug, info, warn, error) |
to_file |
boolean |
true | Whether to log to file in TUI mode (false = stderr for debugging) |
[tmux]
Tmux integration settings
| Field | Type | Default | Description |
|---|---|---|---|
config_generated |
boolean |
- | Whether custom tmux config has been generated |
[backstage]
Backstage server integration
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
boolean |
true | Whether Backstage integration is enabled |
port |
integer |
7007 | Port for the Backstage server |
auto_start |
boolean |
false | Auto-start Backstage server when TUI launches |
subpath |
string |
backstage | Subdirectory within state_path for Backstage installation |
branding_subpath |
string |
branding | Subdirectory within backstage path for branding customization |
release_url |
string |
- | Base URL for downloading backstage-server binary |
local_binary_path |
string | null |
- | Optional local path to backstage-server binary If set, this is used instead of downloading from release_url |
branding |
→ BrandingConfig |
- | Branding and theming configuration |
[llm_tools]
LLM CLI tool detection and providers
| Field | Type | Default | Description |
|---|---|---|---|
detected |
array[→ DetectedTool] |
- | Detected CLI tools (populated on first startup) |
providers |
array[→ LlmProvider] |
- | Available {tool, model} pairs for launching tickets Built from detected tools + their model aliases |
detection_complete |
boolean |
- | Whether detection has been completed |
Example Configuration
projects = []
[agents]
max_parallel = 5
cores_reserved = 1
health_check_interval = 30
generation_timeout_secs = 300
sync_interval = 60
step_timeout = 1800
silence_threshold = 30
[notifications]
enabled = true
webhooks = []
on_agent_start = true
on_agent_complete = true
on_agent_needs_input = true
on_pr_created = true
on_investigation_created = true
sound = false
[notifications.os]
enabled = true
sound = false
events = []
[queue]
auto_assign = true
priority_order = [
"INV",
"FIX",
"TASK",
"FEAT",
"SPIKE",
]
poll_interval_ms = 1000
[paths]
tickets = ".tickets"
projects = "."
state = ".tickets/operator"
worktrees = "/home/runner/.operator/worktrees"
[ui]
refresh_rate_ms = 250
completed_history_hours = 24
summary_max_length = 40
[ui.panel_names]
queue = "TODO QUEUE"
agents = "DOING"
awaiting = "AWAITING"
completed = "DONE"
[launch]
confirm_autonomous = true
confirm_paired = true
launch_delay_ms = 2000
[launch.docker]
enabled = false
image = ""
extra_args = []
mount_path = "/workspace"
env_vars = []
[launch.yolo]
enabled = false
[templates]
preset = "dev_kanban"
collection = []
[api]
pr_check_interval_secs = 60
rate_limit_check_interval_secs = 300
rate_limit_warning_threshold = 0.20000000298023224
[logging]
level = "info"
to_file = true
[tmux]
config_generated = false
[sessions]
wrapper = "tmux"
[sessions.tmux]
config_generated = false
socket_name = "operator"
[sessions.vscode]
webhook_port = 7009
connect_timeout_ms = 5000
[llm_tools]
detected = []
providers = []
detection_complete = false
[backstage]
enabled = true
port = 7007
auto_start = false
subpath = "backstage"
branding_subpath = "branding"
release_url = "https://github.com/untra/operator/releases/latest/download"
[backstage.branding]
app_title = "Operator Portal"
org_name = "Operator"
logo_path = "logo.svg"
[backstage.branding.colors]
primary = "#cc6c55"
secondary = "#114145"
accent = "#f4dbb7"
warning = "#d46048"
muted = "#8a4a3a"
[rest_api]
enabled = true
port = 7008
cors_origins = []
[git]
branch_format = "{type}/{ticket_id}"
[git.github]
enabled = false
token_env = ""
[git.gitlab]
enabled = false
token_env = ""
[kanban.jira]
[kanban.linear]
[version_check]
enabled = true
url = "https://operator.untra.io/VERSION"
timeout_secs = 3
Configuration Files
Configuration is loaded in this order (later sources override earlier):
- Built-in defaults - Embedded in the binary
- Project config -
.tickets/operator/config.toml - User config -
~/.config/operator/config.toml - CLI flag -
--config <path> - Environment variables -
OPERATOR_*prefix with__separator
Environment Variable Override
Any configuration option can be overridden via environment variables.
Format: OPERATOR_<SECTION>__<FIELD>
Examples:
OPERATOR_AGENTS__MAX_PARALLEL=2OPERATOR_LOGGING__LEVEL=debugOPERATOR_BACKSTAGE__PORT=8080