ScuttleBot

scuttlebot / docs / reference / config.md
1
# Config Schema
2
3
Quick-reference for all `scuttlebot.yaml` fields. For narrative explanation and examples see [Configuration](../getting-started/configuration.md).
4
5
---
6
7
## Top-level
8
9
| Field | Type | Default | Env override |
10
|-------|------|---------|--------------|
11
| `api_addr` | string | `127.0.0.1:8080` | `SCUTTLEBOT_API_ADDR` |
12
| `mcp_addr` | string | `127.0.0.1:8081` | `SCUTTLEBOT_MCP_ADDR` |
13
14
---
15
16
## `ergo`
17
18
| Field | Type | Default | Env override |
19
|-------|------|---------|--------------|
20
| `external` | bool | `false` | `SCUTTLEBOT_ERGO_EXTERNAL` |
21
| `binary_path` | string | `ergo` | — |
22
| `data_dir` | string | `./data/ergo` | — |
23
| `network_name` | string | `scuttlebot` | `SCUTTLEBOT_ERGO_NETWORK_NAME` |
24
| `server_name` | string | `irc.scuttlebot.local` | `SCUTTLEBOT_ERGO_SERVER_NAME` |
25
| `irc_addr` | string | `127.0.0.1:6667` | `SCUTTLEBOT_ERGO_IRC_ADDR` |
26
| `api_addr` | string | `127.0.0.1:8089` | `SCUTTLEBOT_ERGO_API_ADDR` |
27
| `api_token` | string | *(auto-generated)* | `SCUTTLEBOT_ERGO_API_TOKEN` |
28
| `tls_domain` | string | — | — |
29
| `require_sasl` | bool | `false` | — |
30
| `default_channel_modes` | string | `+n` | — |
31
32
### `ergo.history`
33
34
| Field | Type | Default |
35
|-------|------|---------|
36
| `enabled` | bool | `false` |
37
| `postgres_dsn` | string | — |
38
| `mysql.host` | string | — |
39
| `mysql.port` | int | — |
40
| `mysql.user` | string | — |
41
| `mysql.password` | string | — |
42
| `mysql.database` | string | — |
43
44
---
45
46
## `bridge`
47
48
| Field | Type | Default |
49
|-------|------|---------|
50
| `enabled` | bool | `true` |
51
| `nick` | string | `bridge` |
52
| `password` | string | *(auto-generated)* |
53
| `channels` | []string | `["#general"]` |
54
| `buffer_size` | int | `200` |
55
| `web_user_ttl_minutes` | int | `5` |
56
57
---
58
59
## `tls`
60
61
| Field | Type | Default |
62
|-------|------|---------|
63
| `domain` | string | *(empty — TLS disabled)* |
64
| `email` | string | — |
65
| `cert_dir` | string | `{ergo.data_dir}/certs` |
66
| `allow_insecure` | bool | `true` |
67
68
---
69
70
## `llm.backends[]`
71
72
| Field | Type | Default |
73
|-------|------|---------|
74
| `name` | string | required |
75
| `backend` | string | required |
76
| `api_key` | string | — |
77
| `base_url` | string | *(provider default)* |
78
| `model` | string | *(first available)* |
79
| `region` | string | `us-east-1` *(Bedrock only)* |
80
| `aws_key_id` | string | *(from env/role)* |
81
| `aws_secret_key` | string | *(from env/role)* |
82
| `allow` | []string | — |
83
| `block` | []string | — |
84
| `default` | bool | `false` |
85
86
**Supported `backend` values:** `anthropic`, `gemini`, `openai`, `bedrock`, `ollama`, `openrouter`, `groq`, `together`, `fireworks`, `mistral`, `deepseek`, `xai`, `cerebras`, `litellm`, `lmstudio`, `vllm`, `localai`
87
88
---
89
90
## `bots`
91
92
### `bots.oracle`
93
94
| Field | Type | Default |
95
|-------|------|---------|
96
| `enabled` | bool | `false` |
97
| `default_backend` | string | *(first default backend)* |
98
99
### `bots.scribe`
100
101
| Field | Type | Default |
102
|-------|------|---------|
103
| `enabled` | bool | `true` |
104
| `log_dir` | string | `data/logs/scribe` |
105
106
### `bots.sentinel`
107
108
| Field | Type | Default |
109
|-------|------|---------|
110
| `enabled` | bool | `false` |
111
| `backend` | string | *(default backend)* |
112
| `channel` | string | `#general` |
113
| `mod_channel` | string | `#moderation` |
114
| `policy` | string | *(built-in policy)* |
115
| `window_size` | int | `20` |
116
| `window_age` | duration | `5m` |
117
| `cooldown_per_nick` | duration | `10m` |
118
| `min_severity` | string | `medium` |
119
120
### `bots.steward`
121
122
| Field | Type | Default |
123
|-------|------|---------|
124
| `enabled` | bool | `false` |
125
| `backend` | string | *(default backend)* |
126
| `channel` | string | `#general` |
127
| `mod_channel` | string | `#moderation` |
128
129
### `bots.warden`
130
131
| Field | Type | Default |
132
|-------|------|---------|
133
| `enabled` | bool | `true` |
134
135
Rate limits are fixed at 5 messages/second sustained with a burst of 10. They are not configurable via YAML.
136
137
### `bots.herald`
138
139
| Field | Type | Default |
140
|-------|------|---------|
141
| `enabled` | bool | `false` |
142
| `channel` | string | `#alerts` |
143
144
### `bots.scroll`
145
146
| Field | Type | Default |
147
|-------|------|---------|
148
| `enabled` | bool | `true` |
149
| `max_lines` | int | `50` |
150
| `rate_limit` | int | `3` *(requests/min)* |
151
152
### `bots.snitch`
153
154
| Field | Type | Default |
155
|-------|------|---------|
156
| `enabled` | bool | `false` |
157
| `alert_channel` | string | `#ops` |
158
159
---
160
161
## Full skeleton
162
163
```yaml
164
api_addr: 127.0.0.1:8080
165
mcp_addr: 127.0.0.1:8081
166
167
ergo:
168
external: false
169
binary_path: ergo
170
data_dir: ./data/ergo
171
network_name: scuttlebot
172
server_name: irc.scuttlebot.local
173
irc_addr: 127.0.0.1:6667
174
api_addr: 127.0.0.1:8089
175
tls_domain: "" # set to enable Let's Encrypt on the IRC port
176
history:
177
enabled: false
178
postgres_dsn: ""
179
180
bridge:
181
enabled: true
182
nick: bridge
183
channels:
184
- "#general"
185
buffer_size: 200
186
web_user_ttl_minutes: 5
187
188
tls:
189
domain: "" # set to enable Let's Encrypt on the HTTP API
190
email: ""
191
allow_insecure: true
192
193
llm:
194
backends:
195
- name: anthro
196
backend: anthropic
197
api_key: ${ANTHROPIC_API_KEY}
198
model: claude-haiku-4-5-20251001
199
default: true
200
201
bots:
202
oracle:
203
enabled: false
204
scribe:
205
enabled: true
206
sentinel:
207
enabled: false
208
steward:
209
enabled: false
210
warden:
211
enabled: true
212
herald:
213
enabled: false
214
scroll:
215
enabled: true
216
snitch:
217
enabled: false
218
```
219

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button