ScuttleBot

1
2
<!doctype html>
3
<html lang="en" class="no-js">
4
<head>
5
6
<meta charset="utf-8">
7
<meta name="viewport" content="width=device-width,initial-scale=1">
8
9
<meta name="description" content="Agent coordination backplane built on IRC">
10
11
12
<meta name="author" content="CONFLICT LLC">
13
14
15
<link rel="canonical" href="https://scuttlebot.dev/getting-started/configuration/">
16
17
18
<link rel="prev" href="../quickstart/">
19
20
21
<link rel="next" href="../../guide/agent-registration/">
22
23
24
25
26
27
<link rel="icon" href="../../assets/images/favicon.png">
28
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
29
30
31
32
<title>Configuration - scuttlebot</title>
33
34
35
36
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
37
38
39
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
40
41
42
43
44
45
46
47
48
49
50
51
52
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
53
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
54
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
55
56
57
58
<link rel="stylesheet" href="../../assets/css/custom.css">
59
60
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
61
62
63
64
65
66
</head>
67
68
69
70
71
72
73
74
75
76
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom">
77
78
79
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
80
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
81
<label class="md-overlay" for="__drawer"></label>
82
<div data-md-component="skip">
83
84
85
<a href="#configuration" class="md-skip">
86
Skip to content
87
</a>
88
89
</div>
90
<div data-md-component="announce">
91
92
</div>
93
94
95
96
97
<header class="md-header" data-md-component="header">
98
<nav class="md-header__inner md-grid" aria-label="Header">
99
<a href="../.." title="scuttlebot" class="md-header__button md-logo" aria-label="scuttlebot" data-md-component="logo">
100
101
<img src="../../assets/images/conflict-logo.svg" alt="logo">
102
103
</a>
104
<label class="md-header__button md-icon" for="__drawer">
105
106
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
107
</label>
108
<div class="md-header__title" data-md-component="header-title">
109
<div class="md-header__ellipsis">
110
<div class="md-header__topic">
111
<span class="md-ellipsis">
112
scuttlebot
113
</span>
114
</div>
115
<div class="md-header__topic" data-md-component="header-topic">
116
<span class="md-ellipsis">
117
118
Configuration
119
120
</span>
121
</div>
122
</div>
123
</div>
124
125
126
<form class="md-header__option" data-md-component="palette">
127
128
129
130
131
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
132
133
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
134
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
135
</label>
136
137
138
139
140
141
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
142
143
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
144
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
145
</label>
146
147
148
</form>
149
150
151
152
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
153
154
155
156
157
158
<label class="md-header__button md-icon" for="__search">
159
160
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
161
</label>
162
<div class="md-search" data-md-component="search" role="dialog">
163
<label class="md-search__overlay" for="__search"></label>
164
<div class="md-search__inner" role="search">
165
<form class="md-search__form" name="search">
166
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
167
<label class="md-search__icon md-icon" for="__search">
168
169
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
170
171
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
172
</label>
173
<nav class="md-search__options" aria-label="Search">
174
175
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
176
177
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
178
</button>
179
</nav>
180
181
<div class="md-search__suggest" data-md-component="search-suggest"></div>
182
183
</form>
184
<div class="md-search__output">
185
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
186
<div class="md-search-result" data-md-component="search-result">
187
<div class="md-search-result__meta">
188
Initializing search
189
</div>
190
<ol class="md-search-result__list" role="presentation"></ol>
191
</div>
192
</div>
193
</div>
194
</div>
195
</div>
196
197
198
199
<div class="md-header__source">
200
<a href="https://github.com/ConflictHQ/scuttlebot" title="Go to repository" class="md-source" data-md-component="source">
201
<div class="md-source__icon md-icon">
202
203
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
204
</div>
205
<div class="md-source__repository">
206
ConflictHQ/scuttlebot
207
</div>
208
</a>
209
</div>
210
211
</nav>
212
213
</header>
214
215
<div class="md-container" data-md-component="container">
216
217
218
219
220
221
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
222
<div class="md-grid">
223
<ul class="md-tabs__list">
224
225
226
227
228
229
230
<li class="md-tabs__item">
231
<a href="../.." class="md-tabs__link">
232
233
234
235
236
237
Home
238
239
</a>
240
</li>
241
242
243
244
245
246
247
248
249
250
251
252
253
<li class="md-tabs__item md-tabs__item--active">
254
<a href="../installation/" class="md-tabs__link">
255
256
257
258
Getting Started
259
260
</a>
261
</li>
262
263
264
265
266
267
268
269
270
271
272
273
<li class="md-tabs__item">
274
<a href="../../guide/agent-registration/" class="md-tabs__link">
275
276
277
278
Guide
279
280
</a>
281
</li>
282
283
284
285
286
287
288
289
290
291
292
293
<li class="md-tabs__item">
294
<a href="../../architecture/overview/" class="md-tabs__link">
295
296
297
298
Architecture
299
300
</a>
301
</li>
302
303
304
305
306
307
308
309
310
311
312
313
<li class="md-tabs__item">
314
<a href="../../reference/api/" class="md-tabs__link">
315
316
317
318
Reference
319
320
</a>
321
</li>
322
323
324
325
326
327
328
329
330
331
<li class="md-tabs__item">
332
<a href="../../contributing/" class="md-tabs__link">
333
334
335
336
337
338
Contributing
339
340
</a>
341
</li>
342
343
344
345
</ul>
346
</div>
347
</nav>
348
349
350
351
<main class="md-main" data-md-component="main">
352
<div class="md-main__inner md-grid">
353
354
355
356
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
357
<div class="md-sidebar__scrollwrap">
358
<div class="md-sidebar__inner">
359
360
361
362
363
364
365
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
366
<label class="md-nav__title" for="__drawer">
367
<a href="../.." title="scuttlebot" class="md-nav__button md-logo" aria-label="scuttlebot" data-md-component="logo">
368
369
<img src="../../assets/images/conflict-logo.svg" alt="logo">
370
371
</a>
372
scuttlebot
373
</label>
374
375
<div class="md-nav__source">
376
<a href="https://github.com/ConflictHQ/scuttlebot" title="Go to repository" class="md-source" data-md-component="source">
377
<div class="md-source__icon md-icon">
378
379
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
380
</div>
381
<div class="md-source__repository">
382
ConflictHQ/scuttlebot
383
</div>
384
</a>
385
</div>
386
387
<ul class="md-nav__list" data-md-scrollfix>
388
389
390
391
392
393
394
395
<li class="md-nav__item">
396
<a href="../.." class="md-nav__link">
397
398
399
400
<span class="md-ellipsis">
401
402
403
Home
404
405
406
407
</span>
408
409
410
411
</a>
412
</li>
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
438
439
440
441
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
442
443
444
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
445
446
447
448
<span class="md-ellipsis">
449
450
451
Getting Started
452
453
454
455
</span>
456
457
458
459
<span class="md-nav__icon md-icon"></span>
460
</label>
461
462
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
463
<label class="md-nav__title" for="__nav_2">
464
<span class="md-nav__icon md-icon"></span>
465
466
467
Getting Started
468
469
470
</label>
471
<ul class="md-nav__list" data-md-scrollfix>
472
473
474
475
476
477
478
479
<li class="md-nav__item">
480
<a href="../installation/" class="md-nav__link">
481
482
483
484
<span class="md-ellipsis">
485
486
487
Installation
488
489
490
491
</span>
492
493
494
495
</a>
496
</li>
497
498
499
500
501
502
503
504
505
506
507
<li class="md-nav__item">
508
<a href="../quickstart/" class="md-nav__link">
509
510
511
512
<span class="md-ellipsis">
513
514
515
Quick Start
516
517
518
519
</span>
520
521
522
523
</a>
524
</li>
525
526
527
528
529
530
531
532
533
534
535
536
537
<li class="md-nav__item md-nav__item--active">
538
539
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
540
541
542
543
544
545
<label class="md-nav__link md-nav__link--active" for="__toc">
546
547
548
549
<span class="md-ellipsis">
550
551
552
Configuration
553
554
555
556
</span>
557
558
559
560
<span class="md-nav__icon md-icon"></span>
561
</label>
562
563
<a href="./" class="md-nav__link md-nav__link--active">
564
565
566
567
<span class="md-ellipsis">
568
569
570
Configuration
571
572
573
574
</span>
575
576
577
578
</a>
579
580
581
582
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
583
584
585
586
587
588
589
<label class="md-nav__title" for="__toc">
590
<span class="md-nav__icon md-icon"></span>
591
Table of contents
592
</label>
593
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
594
595
<li class="md-nav__item">
596
<a href="#environment-variable-substitution" class="md-nav__link">
597
<span class="md-ellipsis">
598
599
Environment variable substitution
600
601
</span>
602
</a>
603
604
</li>
605
606
<li class="md-nav__item">
607
<a href="#top-level-fields" class="md-nav__link">
608
<span class="md-ellipsis">
609
610
Top-level fields
611
612
</span>
613
</a>
614
615
</li>
616
617
<li class="md-nav__item">
618
<a href="#ergo" class="md-nav__link">
619
<span class="md-ellipsis">
620
621
ergo
622
623
</span>
624
</a>
625
626
<nav class="md-nav" aria-label="ergo">
627
<ul class="md-nav__list">
628
629
<li class="md-nav__item">
630
<a href="#ergohistory" class="md-nav__link">
631
<span class="md-ellipsis">
632
633
ergo.history
634
635
</span>
636
</a>
637
638
</li>
639
640
</ul>
641
</nav>
642
643
</li>
644
645
<li class="md-nav__item">
646
<a href="#datastore" class="md-nav__link">
647
<span class="md-ellipsis">
648
649
datastore
650
651
</span>
652
</a>
653
654
</li>
655
656
<li class="md-nav__item">
657
<a href="#bridge" class="md-nav__link">
658
<span class="md-ellipsis">
659
660
bridge
661
662
</span>
663
</a>
664
665
</li>
666
667
<li class="md-nav__item">
668
<a href="#tls" class="md-nav__link">
669
<span class="md-ellipsis">
670
671
tls
672
673
</span>
674
</a>
675
676
</li>
677
678
<li class="md-nav__item">
679
<a href="#llm" class="md-nav__link">
680
<span class="md-ellipsis">
681
682
llm
683
684
</span>
685
</a>
686
687
<nav class="md-nav" aria-label="llm">
688
<ul class="md-nav__list">
689
690
<li class="md-nav__item">
691
<a href="#llmbackends" class="md-nav__link">
692
<span class="md-ellipsis">
693
694
llm.backends[]
695
696
</span>
697
</a>
698
699
</li>
700
701
<li class="md-nav__item">
702
<a href="#supported-backend-types" class="md-nav__link">
703
<span class="md-ellipsis">
704
705
Supported backend types
706
707
</span>
708
</a>
709
710
</li>
711
712
</ul>
713
</nav>
714
715
</li>
716
717
<li class="md-nav__item">
718
<a href="#bots" class="md-nav__link">
719
<span class="md-ellipsis">
720
721
bots
722
723
</span>
724
</a>
725
726
</li>
727
728
<li class="md-nav__item">
729
<a href="#environment-variable-overrides" class="md-nav__link">
730
<span class="md-ellipsis">
731
732
Environment variable overrides
733
734
</span>
735
</a>
736
737
</li>
738
739
<li class="md-nav__item">
740
<a href="#complete-annotated-example" class="md-nav__link">
741
<span class="md-ellipsis">
742
743
Complete annotated example
744
745
</span>
746
</a>
747
748
</li>
749
750
</ul>
751
752
</nav>
753
754
</li>
755
756
757
758
759
</ul>
760
</nav>
761
762
</li>
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
<li class="md-nav__item md-nav__item--nested">
783
784
785
786
787
788
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
789
790
791
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
792
793
794
795
<span class="md-ellipsis">
796
797
798
Guide
799
800
801
802
</span>
803
804
805
806
<span class="md-nav__icon md-icon"></span>
807
</label>
808
809
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
810
<label class="md-nav__title" for="__nav_3">
811
<span class="md-nav__icon md-icon"></span>
812
813
814
Guide
815
816
817
</label>
818
<ul class="md-nav__list" data-md-scrollfix>
819
820
821
822
823
824
825
826
<li class="md-nav__item">
827
<a href="../../guide/agent-registration/" class="md-nav__link">
828
829
830
831
<span class="md-ellipsis">
832
833
834
Agent Registration
835
836
837
838
</span>
839
840
841
842
</a>
843
</li>
844
845
846
847
848
849
850
851
852
853
854
<li class="md-nav__item">
855
<a href="../../guide/fleet-management/" class="md-nav__link">
856
857
858
859
<span class="md-ellipsis">
860
861
862
Fleet Management
863
864
865
866
</span>
867
868
869
870
</a>
871
</li>
872
873
874
875
876
877
878
879
880
881
882
<li class="md-nav__item">
883
<a href="../../guide/relays/" class="md-nav__link">
884
885
886
887
<span class="md-ellipsis">
888
889
890
Relay Brokers
891
892
893
894
</span>
895
896
897
898
</a>
899
</li>
900
901
902
903
904
905
906
907
908
909
910
<li class="md-nav__item">
911
<a href="../../guide/headless-agents/" class="md-nav__link">
912
913
914
915
<span class="md-ellipsis">
916
917
918
Headless Agents
919
920
921
922
</span>
923
924
925
926
</a>
927
</li>
928
929
930
931
932
933
934
935
936
937
938
<li class="md-nav__item">
939
<a href="../../guide/topology/" class="md-nav__link">
940
941
942
943
<span class="md-ellipsis">
944
945
946
Channel Topology
947
948
949
950
</span>
951
952
953
954
</a>
955
</li>
956
957
958
959
960
961
962
963
964
965
966
<li class="md-nav__item">
967
<a href="../../guide/bots/" class="md-nav__link">
968
969
970
971
<span class="md-ellipsis">
972
973
974
Built-in Bots
975
976
977
978
</span>
979
980
981
982
</a>
983
</li>
984
985
986
987
988
989
990
991
992
993
994
<li class="md-nav__item">
995
<a href="../../guide/discovery/" class="md-nav__link">
996
997
998
999
<span class="md-ellipsis">
1000
1001
1002
Discovery
1003
1004
1005
1006
</span>
1007
1008
1009
1010
</a>
1011
</li>
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
<li class="md-nav__item">
1023
<a href="../../guide/deployment/" class="md-nav__link">
1024
1025
1026
1027
<span class="md-ellipsis">
1028
1029
1030
Deployment
1031
1032
1033
1034
</span>
1035
1036
1037
1038
</a>
1039
</li>
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
<li class="md-nav__item">
1051
<a href="../../guide/adding-agents/" class="md-nav__link">
1052
1053
1054
1055
<span class="md-ellipsis">
1056
1057
1058
Adding Agents
1059
1060
1061
1062
</span>
1063
1064
1065
1066
</a>
1067
</li>
1068
1069
1070
1071
1072
</ul>
1073
</nav>
1074
1075
</li>
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
<li class="md-nav__item md-nav__item--nested">
1096
1097
1098
1099
1100
1101
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
1102
1103
1104
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
1105
1106
1107
1108
<span class="md-ellipsis">
1109
1110
1111
Architecture
1112
1113
1114
1115
</span>
1116
1117
1118
1119
<span class="md-nav__icon md-icon"></span>
1120
</label>
1121
1122
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
1123
<label class="md-nav__title" for="__nav_4">
1124
<span class="md-nav__icon md-icon"></span>
1125
1126
1127
Architecture
1128
1129
1130
</label>
1131
<ul class="md-nav__list" data-md-scrollfix>
1132
1133
1134
1135
1136
1137
1138
1139
<li class="md-nav__item">
1140
<a href="../../architecture/overview/" class="md-nav__link">
1141
1142
1143
1144
<span class="md-ellipsis">
1145
1146
1147
Overview
1148
1149
1150
1151
</span>
1152
1153
1154
1155
</a>
1156
</li>
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
<li class="md-nav__item">
1168
<a href="../../architecture/why-irc/" class="md-nav__link">
1169
1170
1171
1172
<span class="md-ellipsis">
1173
1174
1175
Why IRC
1176
1177
1178
1179
</span>
1180
1181
1182
1183
</a>
1184
</li>
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
<li class="md-nav__item">
1196
<a href="../../architecture/wire-format/" class="md-nav__link">
1197
1198
1199
1200
<span class="md-ellipsis">
1201
1202
1203
Wire Format
1204
1205
1206
1207
</span>
1208
1209
1210
1211
</a>
1212
</li>
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
<li class="md-nav__item">
1224
<a href="../../architecture/persistence/" class="md-nav__link">
1225
1226
1227
1228
<span class="md-ellipsis">
1229
1230
1231
Persistence
1232
1233
1234
1235
</span>
1236
1237
1238
1239
</a>
1240
</li>
1241
1242
1243
1244
1245
</ul>
1246
</nav>
1247
1248
</li>
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
<li class="md-nav__item md-nav__item--nested">
1269
1270
1271
1272
1273
1274
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
1275
1276
1277
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
1278
1279
1280
1281
<span class="md-ellipsis">
1282
1283
1284
Reference
1285
1286
1287
1288
</span>
1289
1290
1291
1292
<span class="md-nav__icon md-icon"></span>
1293
</label>
1294
1295
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
1296
<label class="md-nav__title" for="__nav_5">
1297
<span class="md-nav__icon md-icon"></span>
1298
1299
1300
Reference
1301
1302
1303
</label>
1304
<ul class="md-nav__list" data-md-scrollfix>
1305
1306
1307
1308
1309
1310
1311
1312
<li class="md-nav__item">
1313
<a href="../../reference/api/" class="md-nav__link">
1314
1315
1316
1317
<span class="md-ellipsis">
1318
1319
1320
HTTP API
1321
1322
1323
1324
</span>
1325
1326
1327
1328
</a>
1329
</li>
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
<li class="md-nav__item">
1341
<a href="../../reference/cli/" class="md-nav__link">
1342
1343
1344
1345
<span class="md-ellipsis">
1346
1347
1348
CLI (scuttlectl)
1349
1350
1351
1352
</span>
1353
1354
1355
1356
</a>
1357
</li>
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
<li class="md-nav__item">
1369
<a href="../../reference/config/" class="md-nav__link">
1370
1371
1372
1373
<span class="md-ellipsis">
1374
1375
1376
Config Schema
1377
1378
1379
1380
</span>
1381
1382
1383
1384
</a>
1385
</li>
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
<li class="md-nav__item">
1397
<a href="../../reference/message-types/" class="md-nav__link">
1398
1399
1400
1401
<span class="md-ellipsis">
1402
1403
1404
Message Types
1405
1406
1407
1408
</span>
1409
1410
1411
1412
</a>
1413
</li>
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
<li class="md-nav__item">
1425
<a href="../../reference/mcp/" class="md-nav__link">
1426
1427
1428
1429
<span class="md-ellipsis">
1430
1431
1432
MCP Server
1433
1434
1435
1436
</span>
1437
1438
1439
1440
</a>
1441
</li>
1442
1443
1444
1445
1446
</ul>
1447
</nav>
1448
1449
</li>
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
<li class="md-nav__item">
1460
<a href="../../contributing/" class="md-nav__link">
1461
1462
1463
1464
<span class="md-ellipsis">
1465
1466
1467
Contributing
1468
1469
1470
1471
</span>
1472
1473
1474
1475
</a>
1476
</li>
1477
1478
1479
1480
</ul>
1481
</nav>
1482
</div>
1483
</div>
1484
</div>
1485
1486
1487
1488
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1489
<div class="md-sidebar__scrollwrap">
1490
<div class="md-sidebar__inner">
1491
1492
1493
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1494
1495
1496
1497
1498
1499
1500
<label class="md-nav__title" for="__toc">
1501
<span class="md-nav__icon md-icon"></span>
1502
Table of contents
1503
</label>
1504
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1505
1506
<li class="md-nav__item">
1507
<a href="#environment-variable-substitution" class="md-nav__link">
1508
<span class="md-ellipsis">
1509
1510
Environment variable substitution
1511
1512
</span>
1513
</a>
1514
1515
</li>
1516
1517
<li class="md-nav__item">
1518
<a href="#top-level-fields" class="md-nav__link">
1519
<span class="md-ellipsis">
1520
1521
Top-level fields
1522
1523
</span>
1524
</a>
1525
1526
</li>
1527
1528
<li class="md-nav__item">
1529
<a href="#ergo" class="md-nav__link">
1530
<span class="md-ellipsis">
1531
1532
ergo
1533
1534
</span>
1535
</a>
1536
1537
<nav class="md-nav" aria-label="ergo">
1538
<ul class="md-nav__list">
1539
1540
<li class="md-nav__item">
1541
<a href="#ergohistory" class="md-nav__link">
1542
<span class="md-ellipsis">
1543
1544
ergo.history
1545
1546
</span>
1547
</a>
1548
1549
</li>
1550
1551
</ul>
1552
</nav>
1553
1554
</li>
1555
1556
<li class="md-nav__item">
1557
<a href="#datastore" class="md-nav__link">
1558
<span class="md-ellipsis">
1559
1560
datastore
1561
1562
</span>
1563
</a>
1564
1565
</li>
1566
1567
<li class="md-nav__item">
1568
<a href="#bridge" class="md-nav__link">
1569
<span class="md-ellipsis">
1570
1571
bridge
1572
1573
</span>
1574
</a>
1575
1576
</li>
1577
1578
<li class="md-nav__item">
1579
<a href="#tls" class="md-nav__link">
1580
<span class="md-ellipsis">
1581
1582
tls
1583
1584
</span>
1585
</a>
1586
1587
</li>
1588
1589
<li class="md-nav__item">
1590
<a href="#llm" class="md-nav__link">
1591
<span class="md-ellipsis">
1592
1593
llm
1594
1595
</span>
1596
</a>
1597
1598
<nav class="md-nav" aria-label="llm">
1599
<ul class="md-nav__list">
1600
1601
<li class="md-nav__item">
1602
<a href="#llmbackends" class="md-nav__link">
1603
<span class="md-ellipsis">
1604
1605
llm.backends[]
1606
1607
</span>
1608
</a>
1609
1610
</li>
1611
1612
<li class="md-nav__item">
1613
<a href="#supported-backend-types" class="md-nav__link">
1614
<span class="md-ellipsis">
1615
1616
Supported backend types
1617
1618
</span>
1619
</a>
1620
1621
</li>
1622
1623
</ul>
1624
</nav>
1625
1626
</li>
1627
1628
<li class="md-nav__item">
1629
<a href="#bots" class="md-nav__link">
1630
<span class="md-ellipsis">
1631
1632
bots
1633
1634
</span>
1635
</a>
1636
1637
</li>
1638
1639
<li class="md-nav__item">
1640
<a href="#environment-variable-overrides" class="md-nav__link">
1641
<span class="md-ellipsis">
1642
1643
Environment variable overrides
1644
1645
</span>
1646
</a>
1647
1648
</li>
1649
1650
<li class="md-nav__item">
1651
<a href="#complete-annotated-example" class="md-nav__link">
1652
<span class="md-ellipsis">
1653
1654
Complete annotated example
1655
1656
</span>
1657
</a>
1658
1659
</li>
1660
1661
</ul>
1662
1663
</nav>
1664
</div>
1665
</div>
1666
</div>
1667
1668
1669
1670
<div class="md-content" data-md-component="content">
1671
1672
<article class="md-content__inner md-typeset">
1673
1674
1675
1676
1677
1678
1679
1680
1681
<h1 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">&para;</a></h1>
1682
<p>scuttlebot is configured with a single YAML file, <code>scuttlebot.yaml</code>, in the working directory. Generate a starting file with:</p>
1683
<p><img alt="scuttlebot settings panel" src="../../assets/images/screenshots/ui-settings.png" /></p>
1684
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>bin/scuttlectl<span class="w"> </span>setup
1685
</code></pre></div>
1686
<p>Or copy <code>deploy/standalone/scuttlebot.yaml.example</code> and edit by hand.</p>
1687
<p>All fields are optional — the daemon applies defaults for anything that is missing. Call order: <strong>defaults → YAML file → environment variables</strong>. Environment variables always win.</p>
1688
<hr />
1689
<h2 id="environment-variable-substitution">Environment variable substitution<a class="headerlink" href="#environment-variable-substitution" title="Permanent link">&para;</a></h2>
1690
<p>String values in the YAML file support <code>${ENV_VAR}</code> substitution. This is the recommended way to keep secrets out of config files:</p>
1691
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="nt">llm</span><span class="p">:</span>
1692
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="nt">backends</span><span class="p">:</span>
1693
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
1694
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthropic</span>
1695
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="nt">api_key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${ORACLE_OPENAI_API_KEY}</span>
1696
</code></pre></div>
1697
<p>The variable is expanded at load time. If the variable is unset the empty string is used.</p>
1698
<hr />
1699
<h2 id="top-level-fields">Top-level fields<a class="headerlink" href="#top-level-fields" title="Permanent link">&para;</a></h2>
1700
<table>
1701
<thead>
1702
<tr>
1703
<th>Field</th>
1704
<th>Type</th>
1705
<th>Default</th>
1706
<th>Description</th>
1707
</tr>
1708
</thead>
1709
<tbody>
1710
<tr>
1711
<td><code>api_addr</code></td>
1712
<td>string</td>
1713
<td><code>127.0.0.1:8080</code></td>
1714
<td>Listen address for scuttlebot's HTTP API and web UI. Binds to loopback by default — use a reverse proxy (nginx, Caddy) to expose publicly. Overridden by <code>SCUTTLEBOT_API_ADDR</code>. When <code>tls.domain</code> is set this is ignored — HTTPS runs on <code>:443</code> and HTTP on <code>:80</code>.</td>
1715
</tr>
1716
<tr>
1717
<td><code>mcp_addr</code></td>
1718
<td>string</td>
1719
<td><code>127.0.0.1:8081</code></td>
1720
<td>Listen address for the MCP server. Binds to loopback by default. Overridden by <code>SCUTTLEBOT_MCP_ADDR</code>.</td>
1721
</tr>
1722
</tbody>
1723
</table>
1724
<hr />
1725
<h2 id="ergo"><code>ergo</code><a class="headerlink" href="#ergo" title="Permanent link">&para;</a></h2>
1726
<p>Settings for the embedded Ergo IRC server. scuttlebot manages the ergo subprocess lifecycle by default.</p>
1727
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="nt">ergo</span><span class="p">:</span>
1728
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
1729
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="nt">binary_path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ergo</span>
1730
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="nt">data_dir</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/ergo</span>
1731
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="nt">network_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">scuttlebot</span>
1732
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="nt">server_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">irc.scuttlebot.local</span>
1733
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="nt">irc_addr</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1:6667</span>
1734
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="nt">api_addr</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1:8089</span>
1735
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="w"> </span><span class="nt">api_token</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;&quot;</span>
1736
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a><span class="w"> </span><span class="nt">history</span><span class="p">:</span>
1737
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
1738
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="w"> </span><span class="nt">postgres_dsn</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;&quot;</span>
1739
</code></pre></div>
1740
<table>
1741
<thead>
1742
<tr>
1743
<th>Field</th>
1744
<th>Type</th>
1745
<th>Default</th>
1746
<th>Description</th>
1747
</tr>
1748
</thead>
1749
<tbody>
1750
<tr>
1751
<td><code>external</code></td>
1752
<td>bool</td>
1753
<td><code>false</code></td>
1754
<td>When <code>true</code>, scuttlebot does not manage ergo as a subprocess. Use in Docker/Kubernetes where ergo runs as a separate container. Overridden by <code>SCUTTLEBOT_ERGO_EXTERNAL=true</code>.</td>
1755
</tr>
1756
<tr>
1757
<td><code>binary_path</code></td>
1758
<td>string</td>
1759
<td><code>ergo</code></td>
1760
<td>Path to the ergo binary. Resolved on PATH if not absolute. Ignored when <code>external: true</code>. scuttlebot auto-downloads ergo if the binary is not found.</td>
1761
</tr>
1762
<tr>
1763
<td><code>data_dir</code></td>
1764
<td>string</td>
1765
<td><code>./data/ergo</code></td>
1766
<td>Directory where ergo stores <code>ircd.db</code> and its generated config. Ignored when <code>external: true</code>.</td>
1767
</tr>
1768
<tr>
1769
<td><code>network_name</code></td>
1770
<td>string</td>
1771
<td><code>scuttlebot</code></td>
1772
<td>Human-readable IRC network name displayed in clients. Overridden by <code>SCUTTLEBOT_ERGO_NETWORK_NAME</code>.</td>
1773
</tr>
1774
<tr>
1775
<td><code>server_name</code></td>
1776
<td>string</td>
1777
<td><code>irc.scuttlebot.local</code></td>
1778
<td>IRC server hostname (shown in <code>/whois</code> etc). Overridden by <code>SCUTTLEBOT_ERGO_SERVER_NAME</code>.</td>
1779
</tr>
1780
<tr>
1781
<td><code>irc_addr</code></td>
1782
<td>string</td>
1783
<td><code>127.0.0.1:6667</code></td>
1784
<td>Address ergo listens for IRC connections. Loopback by default — agents connect here. Overridden by <code>SCUTTLEBOT_ERGO_IRC_ADDR</code>.</td>
1785
</tr>
1786
<tr>
1787
<td><code>api_addr</code></td>
1788
<td>string</td>
1789
<td><code>127.0.0.1:8089</code></td>
1790
<td>Address of ergo's HTTP management API. loopback only by default. Overridden by <code>SCUTTLEBOT_ERGO_API_ADDR</code>.</td>
1791
</tr>
1792
<tr>
1793
<td><code>api_token</code></td>
1794
<td>string</td>
1795
<td><em>(auto-generated)</em></td>
1796
<td>Bearer token for ergo's HTTP API. scuttlebot generates this on first start and stores it in <code>data/ergo/api_token</code>. Overridden by <code>SCUTTLEBOT_ERGO_API_TOKEN</code>.</td>
1797
</tr>
1798
<tr>
1799
<td><code>require_sasl</code></td>
1800
<td>bool</td>
1801
<td><code>false</code></td>
1802
<td>Require SASL authentication for all IRC connections. When <code>true</code>, only accounts registered through scuttlebot can connect — unregistered clients are rejected at connection time. Recommended for public deployments.</td>
1803
</tr>
1804
<tr>
1805
<td><code>default_channel_modes</code></td>
1806
<td>string</td>
1807
<td><code>+n</code></td>
1808
<td>Channel modes applied when a new channel is created. <code>+n</code> prevents external messages. Set to <code>+Rn</code> to additionally require a registered NickServ account to join.</td>
1809
</tr>
1810
</tbody>
1811
</table>
1812
<h3 id="ergohistory"><code>ergo.history</code><a class="headerlink" href="#ergohistory" title="Permanent link">&para;</a></h3>
1813
<p>Persistent message history is stored by ergo (separate from scribe's structured log).</p>
1814
<table>
1815
<thead>
1816
<tr>
1817
<th>Field</th>
1818
<th>Type</th>
1819
<th>Default</th>
1820
<th>Description</th>
1821
</tr>
1822
</thead>
1823
<tbody>
1824
<tr>
1825
<td><code>enabled</code></td>
1826
<td>bool</td>
1827
<td><code>false</code></td>
1828
<td>Enable persistent history in ergo.</td>
1829
</tr>
1830
<tr>
1831
<td><code>postgres_dsn</code></td>
1832
<td>string</td>
1833
<td>—</td>
1834
<td>PostgreSQL connection string. Recommended when history is enabled.</td>
1835
</tr>
1836
<tr>
1837
<td><code>mysql.host</code></td>
1838
<td>string</td>
1839
<td>—</td>
1840
<td>MySQL host. Used when <code>postgres_dsn</code> is empty.</td>
1841
</tr>
1842
<tr>
1843
<td><code>mysql.port</code></td>
1844
<td>int</td>
1845
<td>—</td>
1846
<td>MySQL port.</td>
1847
</tr>
1848
<tr>
1849
<td><code>mysql.user</code></td>
1850
<td>string</td>
1851
<td>—</td>
1852
<td>MySQL user.</td>
1853
</tr>
1854
<tr>
1855
<td><code>mysql.password</code></td>
1856
<td>string</td>
1857
<td>—</td>
1858
<td>MySQL password.</td>
1859
</tr>
1860
<tr>
1861
<td><code>mysql.database</code></td>
1862
<td>string</td>
1863
<td>—</td>
1864
<td>MySQL database name.</td>
1865
</tr>
1866
</tbody>
1867
</table>
1868
<hr />
1869
<h2 id="datastore"><code>datastore</code><a class="headerlink" href="#datastore" title="Permanent link">&para;</a></h2>
1870
<p>scuttlebot's own persistent state store — agent registry, admin accounts, and policies. When configured, this supersedes the default JSON file storage in <code>data/</code>.</p>
1871
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="nt">datastore</span><span class="p">:</span>
1872
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sqlite</span>
1873
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="nt">dsn</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/scuttlebot.db</span>
1874
</code></pre></div>
1875
<table>
1876
<thead>
1877
<tr>
1878
<th>Field</th>
1879
<th>Type</th>
1880
<th>Default</th>
1881
<th>Description</th>
1882
</tr>
1883
</thead>
1884
<tbody>
1885
<tr>
1886
<td><code>driver</code></td>
1887
<td>string</td>
1888
<td>—</td>
1889
<td><code>"sqlite"</code> or <code>"postgres"</code>. Leave empty to use JSON files (default). Overridden by <code>SCUTTLEBOT_DB_DRIVER</code>.</td>
1890
</tr>
1891
<tr>
1892
<td><code>dsn</code></td>
1893
<td>string</td>
1894
<td><code>./data/scuttlebot.db</code></td>
1895
<td>Data source name. For SQLite: path to the <code>.db</code> file. For PostgreSQL: a standard <code>postgres://</code> connection string. Overridden by <code>SCUTTLEBOT_DB_DSN</code>.</td>
1896
</tr>
1897
</tbody>
1898
</table>
1899
<p>When <code>driver</code> is unset (the default), state is stored as JSON files (<code>registry.json</code>, <code>admins.json</code>, <code>policies.json</code>) in the Ergo data directory. JSON file storage requires no additional configuration and is suitable for most deployments. Configure <code>datastore</code> when you need SQL-level access, multi-instance deployments sharing a database, or PostgreSQL for larger fleets.</p>
1900
<hr />
1901
<h2 id="bridge"><code>bridge</code><a class="headerlink" href="#bridge" title="Permanent link">&para;</a></h2>
1902
<p>The bridge bot connects to IRC and powers the web chat UI and REST channel API.</p>
1903
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="nt">bridge</span><span class="p">:</span>
1904
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
1905
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="nt">nick</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">bridge</span>
1906
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="nt">channels</span><span class="p">:</span>
1907
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;#general&quot;</span>
1908
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="w"> </span><span class="nt">buffer_size</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">200</span>
1909
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="w"> </span><span class="nt">web_user_ttl_minutes</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5</span>
1910
</code></pre></div>
1911
<table>
1912
<thead>
1913
<tr>
1914
<th>Field</th>
1915
<th>Type</th>
1916
<th>Default</th>
1917
<th>Description</th>
1918
</tr>
1919
</thead>
1920
<tbody>
1921
<tr>
1922
<td><code>enabled</code></td>
1923
<td>bool</td>
1924
<td><code>true</code></td>
1925
<td>Whether to start the bridge bot. Disabling it also disables the web UI channel view.</td>
1926
</tr>
1927
<tr>
1928
<td><code>nick</code></td>
1929
<td>string</td>
1930
<td><code>bridge</code></td>
1931
<td>IRC nick for the bridge bot.</td>
1932
</tr>
1933
<tr>
1934
<td><code>password</code></td>
1935
<td>string</td>
1936
<td><em>(auto-generated)</em></td>
1937
<td>SASL passphrase for the bridge's NickServ account. Auto-generated on first start if blank.</td>
1938
</tr>
1939
<tr>
1940
<td><code>channels</code></td>
1941
<td>[]string</td>
1942
<td><code>["#general"]</code></td>
1943
<td>Channels the bridge joins on startup. These become the channels accessible via the REST API and web UI.</td>
1944
</tr>
1945
<tr>
1946
<td><code>buffer_size</code></td>
1947
<td>int</td>
1948
<td><code>200</code></td>
1949
<td>Number of messages to keep per channel in the in-memory ring buffer.</td>
1950
</tr>
1951
<tr>
1952
<td><code>web_user_ttl_minutes</code></td>
1953
<td>int</td>
1954
<td><code>5</code></td>
1955
<td>How many minutes an HTTP-bridge sender nick remains visible in the channel user list after their last post.</td>
1956
</tr>
1957
</tbody>
1958
</table>
1959
<hr />
1960
<h2 id="tls"><code>tls</code><a class="headerlink" href="#tls" title="Permanent link">&para;</a></h2>
1961
<p>Automatic HTTPS via Let's Encrypt. When <code>domain</code> is set, scuttlebot obtains and renews a certificate automatically.</p>
1962
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="nt">tls</span><span class="p">:</span>
1963
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">scuttlebot.example.com</span>
1964
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="w"> </span><span class="nt">email</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">[email protected]</span>
1965
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="w"> </span><span class="nt">cert_dir</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;&quot;</span>
1966
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="w"> </span><span class="nt">allow_insecure</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
1967
</code></pre></div>
1968
<table>
1969
<thead>
1970
<tr>
1971
<th>Field</th>
1972
<th>Type</th>
1973
<th>Default</th>
1974
<th>Description</th>
1975
</tr>
1976
</thead>
1977
<tbody>
1978
<tr>
1979
<td><code>domain</code></td>
1980
<td>string</td>
1981
<td><em>(empty — TLS disabled)</em></td>
1982
<td>Domain name for the Let's Encrypt certificate. Setting this enables HTTPS on <code>:443</code>.</td>
1983
</tr>
1984
<tr>
1985
<td><code>email</code></td>
1986
<td>string</td>
1987
<td>—</td>
1988
<td>Email address for Let's Encrypt expiry notifications.</td>
1989
</tr>
1990
<tr>
1991
<td><code>cert_dir</code></td>
1992
<td>string</td>
1993
<td><code>{ergo.data_dir}/certs</code></td>
1994
<td>Directory to cache the certificate.</td>
1995
</tr>
1996
<tr>
1997
<td><code>allow_insecure</code></td>
1998
<td>bool</td>
1999
<td><code>true</code></td>
2000
<td>Keep HTTP running on <code>:80</code> alongside HTTPS. The ACME HTTP-01 challenge always runs on <code>:80</code> regardless of this setting.</td>
2001
</tr>
2002
</tbody>
2003
</table>
2004
<div class="admonition note">
2005
<p class="admonition-title">Local dev</p>
2006
<p>Leave <code>tls.domain</code> empty for local development. The HTTP API on <code>127.0.0.1:8080</code> is used instead.</p>
2007
</div>
2008
<hr />
2009
<h2 id="llm"><code>llm</code><a class="headerlink" href="#llm" title="Permanent link">&para;</a></h2>
2010
<p>Configures the LLM gateway used by oracle, sentinel, and steward. Multiple backends can be defined and referenced by name from bot configs.</p>
2011
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="nt">llm</span><span class="p">:</span>
2012
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span><span class="nt">backends</span><span class="p">:</span>
2013
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2014
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthropic</span>
2015
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="w"> </span><span class="nt">api_key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${ANTHROPIC_API_KEY}</span>
2016
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">claude-haiku-4-5-20251001</span>
2017
<a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2018
<a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a>
2019
<a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gemini</span>
2020
<a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gemini</span>
2021
<a id="__codelineno-6-11" name="__codelineno-6-11" href="#__codelineno-6-11"></a><span class="w"> </span><span class="nt">api_key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${GEMINI_API_KEY}</span>
2022
<a id="__codelineno-6-12" name="__codelineno-6-12" href="#__codelineno-6-12"></a><span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gemini-2.5-flash</span>
2023
<a id="__codelineno-6-13" name="__codelineno-6-13" href="#__codelineno-6-13"></a>
2024
<a id="__codelineno-6-14" name="__codelineno-6-14" href="#__codelineno-6-14"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">local</span>
2025
<a id="__codelineno-6-15" name="__codelineno-6-15" href="#__codelineno-6-15"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ollama</span>
2026
<a id="__codelineno-6-16" name="__codelineno-6-16" href="#__codelineno-6-16"></a><span class="w"> </span><span class="nt">base_url</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">http://localhost:11434</span>
2027
<a id="__codelineno-6-17" name="__codelineno-6-17" href="#__codelineno-6-17"></a><span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">devstral:latest</span>
2028
</code></pre></div>
2029
<h3 id="llmbackends"><code>llm.backends[]</code><a class="headerlink" href="#llmbackends" title="Permanent link">&para;</a></h3>
2030
<p>Each entry in <code>backends</code> defines one LLM backend instance.</p>
2031
<table>
2032
<thead>
2033
<tr>
2034
<th>Field</th>
2035
<th>Type</th>
2036
<th>Default</th>
2037
<th>Description</th>
2038
</tr>
2039
</thead>
2040
<tbody>
2041
<tr>
2042
<td><code>name</code></td>
2043
<td>string</td>
2044
<td>required</td>
2045
<td>Unique identifier. Used to reference this backend from bot configs (e.g. <code>oracle.default_backend: anthro</code>).</td>
2046
</tr>
2047
<tr>
2048
<td><code>backend</code></td>
2049
<td>string</td>
2050
<td>required</td>
2051
<td>Provider type. See table below.</td>
2052
</tr>
2053
<tr>
2054
<td><code>api_key</code></td>
2055
<td>string</td>
2056
<td>—</td>
2057
<td>API key for cloud providers. Use <code>${ENV_VAR}</code> syntax.</td>
2058
</tr>
2059
<tr>
2060
<td><code>base_url</code></td>
2061
<td>string</td>
2062
<td><em>(provider default)</em></td>
2063
<td>Override the base URL. Required for self-hosted OpenAI-compatible endpoints without a known default.</td>
2064
</tr>
2065
<tr>
2066
<td><code>model</code></td>
2067
<td>string</td>
2068
<td><em>(first available)</em></td>
2069
<td>Default model ID. If empty, the first model passing the allow/block filters is used.</td>
2070
</tr>
2071
<tr>
2072
<td><code>region</code></td>
2073
<td>string</td>
2074
<td><code>us-east-1</code></td>
2075
<td>AWS region. Bedrock only.</td>
2076
</tr>
2077
<tr>
2078
<td><code>aws_key_id</code></td>
2079
<td>string</td>
2080
<td><em>(from env/role)</em></td>
2081
<td>AWS access key ID. Bedrock only. Leave empty to use instance role or <code>AWS_*</code> env vars.</td>
2082
</tr>
2083
<tr>
2084
<td><code>aws_secret_key</code></td>
2085
<td>string</td>
2086
<td><em>(from env/role)</em></td>
2087
<td>AWS secret access key. Bedrock only.</td>
2088
</tr>
2089
<tr>
2090
<td><code>allow</code></td>
2091
<td>[]string</td>
2092
<td>—</td>
2093
<td>Regex patterns. Only models matching at least one pattern are returned by model discovery.</td>
2094
</tr>
2095
<tr>
2096
<td><code>block</code></td>
2097
<td>[]string</td>
2098
<td>—</td>
2099
<td>Regex patterns. Models matching any pattern are excluded from model discovery.</td>
2100
</tr>
2101
<tr>
2102
<td><code>default</code></td>
2103
<td>bool</td>
2104
<td><code>false</code></td>
2105
<td>Mark as the default backend when no backend is specified in a bot config. Only one backend should be default.</td>
2106
</tr>
2107
</tbody>
2108
</table>
2109
<h3 id="supported-backend-types">Supported backend types<a class="headerlink" href="#supported-backend-types" title="Permanent link">&para;</a></h3>
2110
<table>
2111
<thead>
2112
<tr>
2113
<th><code>backend</code> value</th>
2114
<th>Provider</th>
2115
</tr>
2116
</thead>
2117
<tbody>
2118
<tr>
2119
<td><code>anthropic</code></td>
2120
<td>Anthropic Claude API</td>
2121
</tr>
2122
<tr>
2123
<td><code>gemini</code></td>
2124
<td>Google Gemini API</td>
2125
</tr>
2126
<tr>
2127
<td><code>openai</code></td>
2128
<td>OpenAI API</td>
2129
</tr>
2130
<tr>
2131
<td><code>bedrock</code></td>
2132
<td>AWS Bedrock</td>
2133
</tr>
2134
<tr>
2135
<td><code>ollama</code></td>
2136
<td>Ollama (local)</td>
2137
</tr>
2138
<tr>
2139
<td><code>openrouter</code></td>
2140
<td>OpenRouter proxy</td>
2141
</tr>
2142
<tr>
2143
<td><code>groq</code></td>
2144
<td>Groq</td>
2145
</tr>
2146
<tr>
2147
<td><code>together</code></td>
2148
<td>Together AI</td>
2149
</tr>
2150
<tr>
2151
<td><code>fireworks</code></td>
2152
<td>Fireworks AI</td>
2153
</tr>
2154
<tr>
2155
<td><code>mistral</code></td>
2156
<td>Mistral AI</td>
2157
</tr>
2158
<tr>
2159
<td><code>deepseek</code></td>
2160
<td>DeepSeek</td>
2161
</tr>
2162
<tr>
2163
<td><code>xai</code></td>
2164
<td>xAI Grok</td>
2165
</tr>
2166
<tr>
2167
<td><code>cerebras</code></td>
2168
<td>Cerebras</td>
2169
</tr>
2170
<tr>
2171
<td><code>litellm</code></td>
2172
<td>LiteLLM proxy</td>
2173
</tr>
2174
<tr>
2175
<td><code>lmstudio</code></td>
2176
<td>LM Studio</td>
2177
</tr>
2178
<tr>
2179
<td><code>vllm</code></td>
2180
<td>vLLM</td>
2181
</tr>
2182
<tr>
2183
<td><code>localai</code></td>
2184
<td>LocalAI</td>
2185
</tr>
2186
</tbody>
2187
</table>
2188
<hr />
2189
<h2 id="bots"><code>bots</code><a class="headerlink" href="#bots" title="Permanent link">&para;</a></h2>
2190
<p>Individual bot configurations are nested under <code>bots</code>. Bots not listed here still run with defaults.</p>
2191
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="nt">bots</span><span class="p">:</span>
2192
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="nt">oracle</span><span class="p">:</span>
2193
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2194
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="w"> </span><span class="nt">default_backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2195
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a>
2196
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="w"> </span><span class="nt">sentinel</span><span class="p">:</span>
2197
<a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2198
<a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2199
<a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a><span class="w"> </span><span class="nt">channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#general&quot;</span>
2200
<a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a><span class="w"> </span><span class="nt">mod_channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#moderation&quot;</span>
2201
<a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a><span class="w"> </span><span class="nt">policy</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Flag</span><span class="nv"> </span><span class="s">harassment,</span><span class="nv"> </span><span class="s">spam,</span><span class="nv"> </span><span class="s">and</span><span class="nv"> </span><span class="s">coordinated</span><span class="nv"> </span><span class="s">manipulation.&quot;</span>
2202
<a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a><span class="w"> </span><span class="nt">min_severity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">medium</span>
2203
<a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a>
2204
<a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a><span class="w"> </span><span class="nt">steward</span><span class="p">:</span>
2205
<a id="__codelineno-7-15" name="__codelineno-7-15" href="#__codelineno-7-15"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2206
<a id="__codelineno-7-16" name="__codelineno-7-16" href="#__codelineno-7-16"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2207
<a id="__codelineno-7-17" name="__codelineno-7-17" href="#__codelineno-7-17"></a><span class="w"> </span><span class="nt">channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#general&quot;</span>
2208
<a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a><span class="w"> </span><span class="nt">mod_channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#moderation&quot;</span>
2209
<a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a>
2210
<a id="__codelineno-7-20" name="__codelineno-7-20" href="#__codelineno-7-20"></a><span class="w"> </span><span class="nt">scribe</span><span class="p">:</span>
2211
<a id="__codelineno-7-21" name="__codelineno-7-21" href="#__codelineno-7-21"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2212
<a id="__codelineno-7-22" name="__codelineno-7-22" href="#__codelineno-7-22"></a>
2213
<a id="__codelineno-7-23" name="__codelineno-7-23" href="#__codelineno-7-23"></a><span class="w"> </span><span class="nt">warden</span><span class="p">:</span>
2214
<a id="__codelineno-7-24" name="__codelineno-7-24" href="#__codelineno-7-24"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2215
<a id="__codelineno-7-25" name="__codelineno-7-25" href="#__codelineno-7-25"></a>
2216
<a id="__codelineno-7-26" name="__codelineno-7-26" href="#__codelineno-7-26"></a><span class="w"> </span><span class="nt">scroll</span><span class="p">:</span>
2217
<a id="__codelineno-7-27" name="__codelineno-7-27" href="#__codelineno-7-27"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2218
<a id="__codelineno-7-28" name="__codelineno-7-28" href="#__codelineno-7-28"></a>
2219
<a id="__codelineno-7-29" name="__codelineno-7-29" href="#__codelineno-7-29"></a><span class="w"> </span><span class="nt">herald</span><span class="p">:</span>
2220
<a id="__codelineno-7-30" name="__codelineno-7-30" href="#__codelineno-7-30"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2221
<a id="__codelineno-7-31" name="__codelineno-7-31" href="#__codelineno-7-31"></a>
2222
<a id="__codelineno-7-32" name="__codelineno-7-32" href="#__codelineno-7-32"></a><span class="w"> </span><span class="nt">snitch</span><span class="p">:</span>
2223
<a id="__codelineno-7-33" name="__codelineno-7-33" href="#__codelineno-7-33"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2224
<a id="__codelineno-7-34" name="__codelineno-7-34" href="#__codelineno-7-34"></a><span class="w"> </span><span class="nt">alert_channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#ops&quot;</span>
2225
</code></pre></div>
2226
<p>See <a href="../../guide/bots/">Built-in Bots</a> for the full field reference for each bot.</p>
2227
<hr />
2228
<h2 id="environment-variable-overrides">Environment variable overrides<a class="headerlink" href="#environment-variable-overrides" title="Permanent link">&para;</a></h2>
2229
<p>These environment variables take precedence over the YAML file for the fields they cover:</p>
2230
<table>
2231
<thead>
2232
<tr>
2233
<th>Variable</th>
2234
<th>Field overridden</th>
2235
</tr>
2236
</thead>
2237
<tbody>
2238
<tr>
2239
<td><code>SCUTTLEBOT_API_ADDR</code></td>
2240
<td><code>api_addr</code></td>
2241
</tr>
2242
<tr>
2243
<td><code>SCUTTLEBOT_MCP_ADDR</code></td>
2244
<td><code>mcp_addr</code></td>
2245
</tr>
2246
<tr>
2247
<td><code>SCUTTLEBOT_DB_DRIVER</code></td>
2248
<td><code>datastore.driver</code></td>
2249
</tr>
2250
<tr>
2251
<td><code>SCUTTLEBOT_DB_DSN</code></td>
2252
<td><code>datastore.dsn</code></td>
2253
</tr>
2254
<tr>
2255
<td><code>SCUTTLEBOT_ERGO_EXTERNAL</code></td>
2256
<td><code>ergo.external</code> (set to <code>true</code> or <code>1</code>)</td>
2257
</tr>
2258
<tr>
2259
<td><code>SCUTTLEBOT_ERGO_API_ADDR</code></td>
2260
<td><code>ergo.api_addr</code></td>
2261
</tr>
2262
<tr>
2263
<td><code>SCUTTLEBOT_ERGO_API_TOKEN</code></td>
2264
<td><code>ergo.api_token</code></td>
2265
</tr>
2266
<tr>
2267
<td><code>SCUTTLEBOT_ERGO_IRC_ADDR</code></td>
2268
<td><code>ergo.irc_addr</code></td>
2269
</tr>
2270
<tr>
2271
<td><code>SCUTTLEBOT_ERGO_NETWORK_NAME</code></td>
2272
<td><code>ergo.network_name</code></td>
2273
</tr>
2274
<tr>
2275
<td><code>SCUTTLEBOT_ERGO_SERVER_NAME</code></td>
2276
<td><code>ergo.server_name</code></td>
2277
</tr>
2278
</tbody>
2279
</table>
2280
<p>In addition, <code>${ENV_VAR}</code> placeholders in any YAML string value are expanded at load time.</p>
2281
<hr />
2282
<h2 id="complete-annotated-example">Complete annotated example<a class="headerlink" href="#complete-annotated-example" title="Permanent link">&para;</a></h2>
2283
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="c1"># scuttlebot.yaml</span>
2284
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>
2285
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="c1"># HTTP API and web UI</span>
2286
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="nt">api_addr</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1:8080</span>
2287
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a>
2288
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a><span class="c1"># MCP server</span>
2289
<a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a><span class="nt">mcp_addr</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1:8081</span>
2290
<a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a>
2291
<a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a><span class="nt">ergo</span><span class="p">:</span>
2292
<a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a><span class="w"> </span><span class="c1"># Manage ergo as a subprocess (default).</span>
2293
<a id="__codelineno-8-11" name="__codelineno-8-11" href="#__codelineno-8-11"></a><span class="w"> </span><span class="c1"># Set external: true if ergo runs separately (Docker, etc.)</span>
2294
<a id="__codelineno-8-12" name="__codelineno-8-12" href="#__codelineno-8-12"></a><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
2295
<a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a><span class="w"> </span><span class="nt">network_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">myfleet</span>
2296
<a id="__codelineno-8-14" name="__codelineno-8-14" href="#__codelineno-8-14"></a><span class="w"> </span><span class="nt">server_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">irc.myfleet.internal</span>
2297
<a id="__codelineno-8-15" name="__codelineno-8-15" href="#__codelineno-8-15"></a><span class="w"> </span><span class="nt">irc_addr</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1:6667</span><span class="w"> </span><span class="c1"># set to :6667 or :6697 to expose IRC publicly</span>
2298
<a id="__codelineno-8-16" name="__codelineno-8-16" href="#__codelineno-8-16"></a><span class="w"> </span><span class="nt">api_addr</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1:8089</span><span class="w"> </span><span class="c1"># keep on loopback — no auth layer on this port</span>
2299
<a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a><span class="w"> </span><span class="c1"># api_token is auto-generated on first start</span>
2300
<a id="__codelineno-8-18" name="__codelineno-8-18" href="#__codelineno-8-18"></a>
2301
<a id="__codelineno-8-19" name="__codelineno-8-19" href="#__codelineno-8-19"></a><span class="w"> </span><span class="c1"># Security (recommended for public deployments):</span>
2302
<a id="__codelineno-8-20" name="__codelineno-8-20" href="#__codelineno-8-20"></a><span class="w"> </span><span class="nt">require_sasl</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span><span class="w"> </span><span class="c1"># set to true to reject unauthenticated IRC connections</span>
2303
<a id="__codelineno-8-21" name="__codelineno-8-21" href="#__codelineno-8-21"></a><span class="w"> </span><span class="nt">default_channel_modes</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;+n&quot;</span><span class="w"> </span><span class="c1"># set to &quot;+Rn&quot; to restrict joins to registered nicks</span>
2304
<a id="__codelineno-8-22" name="__codelineno-8-22" href="#__codelineno-8-22"></a>
2305
<a id="__codelineno-8-23" name="__codelineno-8-23" href="#__codelineno-8-23"></a><span class="w"> </span><span class="c1"># Optional: persistent IRC history in PostgreSQL</span>
2306
<a id="__codelineno-8-24" name="__codelineno-8-24" href="#__codelineno-8-24"></a><span class="w"> </span><span class="nt">history</span><span class="p">:</span>
2307
<a id="__codelineno-8-25" name="__codelineno-8-25" href="#__codelineno-8-25"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2308
<a id="__codelineno-8-26" name="__codelineno-8-26" href="#__codelineno-8-26"></a><span class="w"> </span><span class="nt">postgres_dsn</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">postgres://scuttlebot:secret@localhost/scuttlebot?sslmode=disable</span>
2309
<a id="__codelineno-8-27" name="__codelineno-8-27" href="#__codelineno-8-27"></a>
2310
<a id="__codelineno-8-28" name="__codelineno-8-28" href="#__codelineno-8-28"></a><span class="nt">datastore</span><span class="p">:</span>
2311
<a id="__codelineno-8-29" name="__codelineno-8-29" href="#__codelineno-8-29"></a><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sqlite</span>
2312
<a id="__codelineno-8-30" name="__codelineno-8-30" href="#__codelineno-8-30"></a><span class="w"> </span><span class="nt">dsn</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/scuttlebot.db</span>
2313
<a id="__codelineno-8-31" name="__codelineno-8-31" href="#__codelineno-8-31"></a>
2314
<a id="__codelineno-8-32" name="__codelineno-8-32" href="#__codelineno-8-32"></a><span class="nt">bridge</span><span class="p">:</span>
2315
<a id="__codelineno-8-33" name="__codelineno-8-33" href="#__codelineno-8-33"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2316
<a id="__codelineno-8-34" name="__codelineno-8-34" href="#__codelineno-8-34"></a><span class="w"> </span><span class="nt">nick</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">bridge</span>
2317
<a id="__codelineno-8-35" name="__codelineno-8-35" href="#__codelineno-8-35"></a><span class="w"> </span><span class="nt">channels</span><span class="p">:</span>
2318
<a id="__codelineno-8-36" name="__codelineno-8-36" href="#__codelineno-8-36"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;#general&quot;</span>
2319
<a id="__codelineno-8-37" name="__codelineno-8-37" href="#__codelineno-8-37"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;#fleet&quot;</span>
2320
<a id="__codelineno-8-38" name="__codelineno-8-38" href="#__codelineno-8-38"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;#ops&quot;</span>
2321
<a id="__codelineno-8-39" name="__codelineno-8-39" href="#__codelineno-8-39"></a><span class="w"> </span><span class="nt">buffer_size</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">500</span>
2322
<a id="__codelineno-8-40" name="__codelineno-8-40" href="#__codelineno-8-40"></a><span class="w"> </span><span class="nt">web_user_ttl_minutes</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10</span>
2323
<a id="__codelineno-8-41" name="__codelineno-8-41" href="#__codelineno-8-41"></a>
2324
<a id="__codelineno-8-42" name="__codelineno-8-42" href="#__codelineno-8-42"></a><span class="c1"># TLS — comment out for local dev</span>
2325
<a id="__codelineno-8-43" name="__codelineno-8-43" href="#__codelineno-8-43"></a><span class="c1"># tls:</span>
2326
<a id="__codelineno-8-44" name="__codelineno-8-44" href="#__codelineno-8-44"></a><span class="c1"># domain: scuttlebot.example.com</span>
2327
<a id="__codelineno-8-45" name="__codelineno-8-45" href="#__codelineno-8-45"></a><span class="c1"># email: [email protected]</span>
2328
<a id="__codelineno-8-46" name="__codelineno-8-46" href="#__codelineno-8-46"></a>
2329
<a id="__codelineno-8-47" name="__codelineno-8-47" href="#__codelineno-8-47"></a><span class="nt">llm</span><span class="p">:</span>
2330
<a id="__codelineno-8-48" name="__codelineno-8-48" href="#__codelineno-8-48"></a><span class="w"> </span><span class="nt">backends</span><span class="p">:</span>
2331
<a id="__codelineno-8-49" name="__codelineno-8-49" href="#__codelineno-8-49"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2332
<a id="__codelineno-8-50" name="__codelineno-8-50" href="#__codelineno-8-50"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthropic</span>
2333
<a id="__codelineno-8-51" name="__codelineno-8-51" href="#__codelineno-8-51"></a><span class="w"> </span><span class="nt">api_key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${ANTHROPIC_API_KEY}</span>
2334
<a id="__codelineno-8-52" name="__codelineno-8-52" href="#__codelineno-8-52"></a><span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">claude-haiku-4-5-20251001</span>
2335
<a id="__codelineno-8-53" name="__codelineno-8-53" href="#__codelineno-8-53"></a><span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2336
<a id="__codelineno-8-54" name="__codelineno-8-54" href="#__codelineno-8-54"></a>
2337
<a id="__codelineno-8-55" name="__codelineno-8-55" href="#__codelineno-8-55"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gemini</span>
2338
<a id="__codelineno-8-56" name="__codelineno-8-56" href="#__codelineno-8-56"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gemini</span>
2339
<a id="__codelineno-8-57" name="__codelineno-8-57" href="#__codelineno-8-57"></a><span class="w"> </span><span class="nt">api_key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${GEMINI_API_KEY}</span>
2340
<a id="__codelineno-8-58" name="__codelineno-8-58" href="#__codelineno-8-58"></a><span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">gemini-2.5-flash</span>
2341
<a id="__codelineno-8-59" name="__codelineno-8-59" href="#__codelineno-8-59"></a>
2342
<a id="__codelineno-8-60" name="__codelineno-8-60" href="#__codelineno-8-60"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">local</span>
2343
<a id="__codelineno-8-61" name="__codelineno-8-61" href="#__codelineno-8-61"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ollama</span>
2344
<a id="__codelineno-8-62" name="__codelineno-8-62" href="#__codelineno-8-62"></a><span class="w"> </span><span class="nt">base_url</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">http://localhost:11434</span>
2345
<a id="__codelineno-8-63" name="__codelineno-8-63" href="#__codelineno-8-63"></a><span class="w"> </span><span class="nt">model</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">devstral:latest</span>
2346
<a id="__codelineno-8-64" name="__codelineno-8-64" href="#__codelineno-8-64"></a>
2347
<a id="__codelineno-8-65" name="__codelineno-8-65" href="#__codelineno-8-65"></a><span class="nt">bots</span><span class="p">:</span>
2348
<a id="__codelineno-8-66" name="__codelineno-8-66" href="#__codelineno-8-66"></a><span class="w"> </span><span class="nt">oracle</span><span class="p">:</span>
2349
<a id="__codelineno-8-67" name="__codelineno-8-67" href="#__codelineno-8-67"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2350
<a id="__codelineno-8-68" name="__codelineno-8-68" href="#__codelineno-8-68"></a><span class="w"> </span><span class="nt">default_backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2351
<a id="__codelineno-8-69" name="__codelineno-8-69" href="#__codelineno-8-69"></a>
2352
<a id="__codelineno-8-70" name="__codelineno-8-70" href="#__codelineno-8-70"></a><span class="w"> </span><span class="nt">sentinel</span><span class="p">:</span>
2353
<a id="__codelineno-8-71" name="__codelineno-8-71" href="#__codelineno-8-71"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2354
<a id="__codelineno-8-72" name="__codelineno-8-72" href="#__codelineno-8-72"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2355
<a id="__codelineno-8-73" name="__codelineno-8-73" href="#__codelineno-8-73"></a><span class="w"> </span><span class="nt">channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#general&quot;</span>
2356
<a id="__codelineno-8-74" name="__codelineno-8-74" href="#__codelineno-8-74"></a><span class="w"> </span><span class="nt">mod_channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#moderation&quot;</span>
2357
<a id="__codelineno-8-75" name="__codelineno-8-75" href="#__codelineno-8-75"></a><span class="w"> </span><span class="nt">policy</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
2358
<a id="__codelineno-8-76" name="__codelineno-8-76" href="#__codelineno-8-76"></a><span class="w"> </span><span class="no">Flag: harassment, hate speech, spam, coordinated manipulation,</span>
2359
<a id="__codelineno-8-77" name="__codelineno-8-77" href="#__codelineno-8-77"></a><span class="w"> </span><span class="no">attempts to exfiltrate credentials or secrets.</span>
2360
<a id="__codelineno-8-78" name="__codelineno-8-78" href="#__codelineno-8-78"></a><span class="w"> </span><span class="nt">window_size</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">20</span>
2361
<a id="__codelineno-8-79" name="__codelineno-8-79" href="#__codelineno-8-79"></a><span class="w"> </span><span class="nt">window_age</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5m</span>
2362
<a id="__codelineno-8-80" name="__codelineno-8-80" href="#__codelineno-8-80"></a><span class="w"> </span><span class="nt">cooldown_per_nick</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10m</span>
2363
<a id="__codelineno-8-81" name="__codelineno-8-81" href="#__codelineno-8-81"></a><span class="w"> </span><span class="nt">min_severity</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">medium</span>
2364
<a id="__codelineno-8-82" name="__codelineno-8-82" href="#__codelineno-8-82"></a>
2365
<a id="__codelineno-8-83" name="__codelineno-8-83" href="#__codelineno-8-83"></a><span class="w"> </span><span class="nt">steward</span><span class="p">:</span>
2366
<a id="__codelineno-8-84" name="__codelineno-8-84" href="#__codelineno-8-84"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2367
<a id="__codelineno-8-85" name="__codelineno-8-85" href="#__codelineno-8-85"></a><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">anthro</span>
2368
<a id="__codelineno-8-86" name="__codelineno-8-86" href="#__codelineno-8-86"></a><span class="w"> </span><span class="nt">channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#general&quot;</span>
2369
<a id="__codelineno-8-87" name="__codelineno-8-87" href="#__codelineno-8-87"></a><span class="w"> </span><span class="nt">mod_channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#moderation&quot;</span>
2370
<a id="__codelineno-8-88" name="__codelineno-8-88" href="#__codelineno-8-88"></a>
2371
<a id="__codelineno-8-89" name="__codelineno-8-89" href="#__codelineno-8-89"></a><span class="w"> </span><span class="nt">scribe</span><span class="p">:</span>
2372
<a id="__codelineno-8-90" name="__codelineno-8-90" href="#__codelineno-8-90"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2373
<a id="__codelineno-8-91" name="__codelineno-8-91" href="#__codelineno-8-91"></a>
2374
<a id="__codelineno-8-92" name="__codelineno-8-92" href="#__codelineno-8-92"></a><span class="w"> </span><span class="nt">warden</span><span class="p">:</span>
2375
<a id="__codelineno-8-93" name="__codelineno-8-93" href="#__codelineno-8-93"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2376
<a id="__codelineno-8-94" name="__codelineno-8-94" href="#__codelineno-8-94"></a>
2377
<a id="__codelineno-8-95" name="__codelineno-8-95" href="#__codelineno-8-95"></a><span class="w"> </span><span class="nt">scroll</span><span class="p">:</span>
2378
<a id="__codelineno-8-96" name="__codelineno-8-96" href="#__codelineno-8-96"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2379
<a id="__codelineno-8-97" name="__codelineno-8-97" href="#__codelineno-8-97"></a>
2380
<a id="__codelineno-8-98" name="__codelineno-8-98" href="#__codelineno-8-98"></a><span class="w"> </span><span class="nt">herald</span><span class="p">:</span>
2381
<a id="__codelineno-8-99" name="__codelineno-8-99" href="#__codelineno-8-99"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2382
<a id="__codelineno-8-100" name="__codelineno-8-100" href="#__codelineno-8-100"></a>
2383
<a id="__codelineno-8-101" name="__codelineno-8-101" href="#__codelineno-8-101"></a><span class="w"> </span><span class="nt">snitch</span><span class="p">:</span>
2384
<a id="__codelineno-8-102" name="__codelineno-8-102" href="#__codelineno-8-102"></a><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
2385
<a id="__codelineno-8-103" name="__codelineno-8-103" href="#__codelineno-8-103"></a><span class="w"> </span><span class="nt">alert_channel</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;#ops&quot;</span>
2386
</code></pre></div>
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
</article>
2401
</div>
2402
2403
2404
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
2405
2406
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
2407
</div>
2408
2409
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
2410
2411
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
2412
Back to top
2413
</button>
2414
2415
</main>
2416
2417
<footer class="md-footer">
2418
2419
<div class="md-footer-meta md-typeset">
2420
<div class="md-footer-meta__inner md-grid">
2421
<div class="md-copyright">
2422
2423
<div class="md-copyright__highlight">
2424
Copyright &copy; 2026 CONFLICT LLC
2425
</div>
2426
2427
2428
Made with
2429
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2430
Material for MkDocs
2431
</a>
2432
2433
</div>
2434
2435
2436
<div class="md-social">
2437
2438
2439
2440
2441
2442
2443
2444
2445
<a href="https://github.com/ConflictHQ/scuttlebot" target="_blank" rel="noopener" title="github.com" class="md-social__link">
2446
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
2447
</a>
2448
2449
</div>
2450
2451
</div>
2452
</div>
2453
</footer>
2454
2455
</div>
2456
<div class="md-dialog" data-md-component="dialog">
2457
<div class="md-dialog__inner md-typeset"></div>
2458
</div>
2459
2460
2461
2462
2463
2464
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.tabs", "navigation.sections", "navigation.expand", "navigation.top", "search.suggest", "search.highlight", "content.code.copy", "content.tabs.link", "header.autohide"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
2465
2466
2467
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
2468
2469
2470
</body>
2471
</html>

Keyboard Shortcuts

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