ScuttleBot

scuttlebot / reference / cli / index.html
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/reference/cli/">
16
17
18
<link rel="prev" href="../api/">
19
20
21
<link rel="next" href="../config/">
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>CLI (scuttlectl) - 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="#cli-reference" 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
CLI (scuttlectl)
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
<li class="md-tabs__item">
252
<a href="../../getting-started/installation/" class="md-tabs__link">
253
254
255
256
Getting Started
257
258
</a>
259
</li>
260
261
262
263
264
265
266
267
268
269
270
271
<li class="md-tabs__item">
272
<a href="../../guide/agent-registration/" class="md-tabs__link">
273
274
275
276
Guide
277
278
</a>
279
</li>
280
281
282
283
284
285
286
287
288
289
290
291
<li class="md-tabs__item">
292
<a href="../../architecture/overview/" class="md-tabs__link">
293
294
295
296
Architecture
297
298
</a>
299
</li>
300
301
302
303
304
305
306
307
308
309
310
311
312
313
<li class="md-tabs__item md-tabs__item--active">
314
<a href="../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
<li class="md-nav__item md-nav__item--nested">
433
434
435
436
437
438
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
439
440
441
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
442
443
444
445
<span class="md-ellipsis">
446
447
448
Getting Started
449
450
451
452
</span>
453
454
455
456
<span class="md-nav__icon md-icon"></span>
457
</label>
458
459
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
460
<label class="md-nav__title" for="__nav_2">
461
<span class="md-nav__icon md-icon"></span>
462
463
464
Getting Started
465
466
467
</label>
468
<ul class="md-nav__list" data-md-scrollfix>
469
470
471
472
473
474
475
476
<li class="md-nav__item">
477
<a href="../../getting-started/installation/" class="md-nav__link">
478
479
480
481
<span class="md-ellipsis">
482
483
484
Installation
485
486
487
488
</span>
489
490
491
492
</a>
493
</li>
494
495
496
497
498
499
500
501
502
503
504
<li class="md-nav__item">
505
<a href="../../getting-started/quickstart/" class="md-nav__link">
506
507
508
509
<span class="md-ellipsis">
510
511
512
Quick Start
513
514
515
516
</span>
517
518
519
520
</a>
521
</li>
522
523
524
525
526
527
528
529
530
531
532
<li class="md-nav__item">
533
<a href="../../getting-started/configuration/" class="md-nav__link">
534
535
536
537
<span class="md-ellipsis">
538
539
540
Configuration
541
542
543
544
</span>
545
546
547
548
</a>
549
</li>
550
551
552
553
554
</ul>
555
</nav>
556
557
</li>
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
<li class="md-nav__item md-nav__item--nested">
578
579
580
581
582
583
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
584
585
586
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
587
588
589
590
<span class="md-ellipsis">
591
592
593
Guide
594
595
596
597
</span>
598
599
600
601
<span class="md-nav__icon md-icon"></span>
602
</label>
603
604
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
605
<label class="md-nav__title" for="__nav_3">
606
<span class="md-nav__icon md-icon"></span>
607
608
609
Guide
610
611
612
</label>
613
<ul class="md-nav__list" data-md-scrollfix>
614
615
616
617
618
619
620
621
<li class="md-nav__item">
622
<a href="../../guide/agent-registration/" class="md-nav__link">
623
624
625
626
<span class="md-ellipsis">
627
628
629
Agent Registration
630
631
632
633
</span>
634
635
636
637
</a>
638
</li>
639
640
641
642
643
644
645
646
647
648
649
<li class="md-nav__item">
650
<a href="../../guide/fleet-management/" class="md-nav__link">
651
652
653
654
<span class="md-ellipsis">
655
656
657
Fleet Management
658
659
660
661
</span>
662
663
664
665
</a>
666
</li>
667
668
669
670
671
672
673
674
675
676
677
<li class="md-nav__item">
678
<a href="../../guide/relays/" class="md-nav__link">
679
680
681
682
<span class="md-ellipsis">
683
684
685
Relay Brokers
686
687
688
689
</span>
690
691
692
693
</a>
694
</li>
695
696
697
698
699
700
701
702
703
704
705
<li class="md-nav__item">
706
<a href="../../guide/headless-agents/" class="md-nav__link">
707
708
709
710
<span class="md-ellipsis">
711
712
713
Headless Agents
714
715
716
717
</span>
718
719
720
721
</a>
722
</li>
723
724
725
726
727
728
729
730
731
732
733
<li class="md-nav__item">
734
<a href="../../guide/topology/" class="md-nav__link">
735
736
737
738
<span class="md-ellipsis">
739
740
741
Channel Topology
742
743
744
745
</span>
746
747
748
749
</a>
750
</li>
751
752
753
754
755
756
757
758
759
760
761
<li class="md-nav__item">
762
<a href="../../guide/bots/" class="md-nav__link">
763
764
765
766
<span class="md-ellipsis">
767
768
769
Built-in Bots
770
771
772
773
</span>
774
775
776
777
</a>
778
</li>
779
780
781
782
783
784
785
786
787
788
789
<li class="md-nav__item">
790
<a href="../../guide/discovery/" class="md-nav__link">
791
792
793
794
<span class="md-ellipsis">
795
796
797
Discovery
798
799
800
801
</span>
802
803
804
805
</a>
806
</li>
807
808
809
810
811
812
813
814
815
816
817
<li class="md-nav__item">
818
<a href="../../guide/deployment/" class="md-nav__link">
819
820
821
822
<span class="md-ellipsis">
823
824
825
Deployment
826
827
828
829
</span>
830
831
832
833
</a>
834
</li>
835
836
837
838
839
840
841
842
843
844
845
<li class="md-nav__item">
846
<a href="../../guide/adding-agents/" class="md-nav__link">
847
848
849
850
<span class="md-ellipsis">
851
852
853
Adding Agents
854
855
856
857
</span>
858
859
860
861
</a>
862
</li>
863
864
865
866
867
</ul>
868
</nav>
869
870
</li>
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
<li class="md-nav__item md-nav__item--nested">
891
892
893
894
895
896
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
897
898
899
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
900
901
902
903
<span class="md-ellipsis">
904
905
906
Architecture
907
908
909
910
</span>
911
912
913
914
<span class="md-nav__icon md-icon"></span>
915
</label>
916
917
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
918
<label class="md-nav__title" for="__nav_4">
919
<span class="md-nav__icon md-icon"></span>
920
921
922
Architecture
923
924
925
</label>
926
<ul class="md-nav__list" data-md-scrollfix>
927
928
929
930
931
932
933
934
<li class="md-nav__item">
935
<a href="../../architecture/overview/" class="md-nav__link">
936
937
938
939
<span class="md-ellipsis">
940
941
942
Overview
943
944
945
946
</span>
947
948
949
950
</a>
951
</li>
952
953
954
955
956
957
958
959
960
961
962
<li class="md-nav__item">
963
<a href="../../architecture/why-irc/" class="md-nav__link">
964
965
966
967
<span class="md-ellipsis">
968
969
970
Why IRC
971
972
973
974
</span>
975
976
977
978
</a>
979
</li>
980
981
982
983
984
985
986
987
988
989
990
<li class="md-nav__item">
991
<a href="../../architecture/wire-format/" class="md-nav__link">
992
993
994
995
<span class="md-ellipsis">
996
997
998
Wire Format
999
1000
1001
1002
</span>
1003
1004
1005
1006
</a>
1007
</li>
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
<li class="md-nav__item">
1019
<a href="../../architecture/persistence/" class="md-nav__link">
1020
1021
1022
1023
<span class="md-ellipsis">
1024
1025
1026
Persistence
1027
1028
1029
1030
</span>
1031
1032
1033
1034
</a>
1035
</li>
1036
1037
1038
1039
1040
</ul>
1041
</nav>
1042
1043
</li>
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
1069
1070
1071
1072
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
1073
1074
1075
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
1076
1077
1078
1079
<span class="md-ellipsis">
1080
1081
1082
Reference
1083
1084
1085
1086
</span>
1087
1088
1089
1090
<span class="md-nav__icon md-icon"></span>
1091
</label>
1092
1093
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
1094
<label class="md-nav__title" for="__nav_5">
1095
<span class="md-nav__icon md-icon"></span>
1096
1097
1098
Reference
1099
1100
1101
</label>
1102
<ul class="md-nav__list" data-md-scrollfix>
1103
1104
1105
1106
1107
1108
1109
1110
<li class="md-nav__item">
1111
<a href="../api/" class="md-nav__link">
1112
1113
1114
1115
<span class="md-ellipsis">
1116
1117
1118
HTTP API
1119
1120
1121
1122
</span>
1123
1124
1125
1126
</a>
1127
</li>
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
<li class="md-nav__item md-nav__item--active">
1141
1142
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
1143
1144
1145
1146
1147
1148
<label class="md-nav__link md-nav__link--active" for="__toc">
1149
1150
1151
1152
<span class="md-ellipsis">
1153
1154
1155
CLI (scuttlectl)
1156
1157
1158
1159
</span>
1160
1161
1162
1163
<span class="md-nav__icon md-icon"></span>
1164
</label>
1165
1166
<a href="./" class="md-nav__link md-nav__link--active">
1167
1168
1169
1170
<span class="md-ellipsis">
1171
1172
1173
CLI (scuttlectl)
1174
1175
1176
1177
</span>
1178
1179
1180
1181
</a>
1182
1183
1184
1185
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1186
1187
1188
1189
1190
1191
1192
<label class="md-nav__title" for="__toc">
1193
<span class="md-nav__icon md-icon"></span>
1194
Table of contents
1195
</label>
1196
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1197
1198
<li class="md-nav__item">
1199
<a href="#scuttlectl" class="md-nav__link">
1200
<span class="md-ellipsis">
1201
1202
scuttlectl
1203
1204
</span>
1205
</a>
1206
1207
<nav class="md-nav" aria-label="scuttlectl">
1208
<ul class="md-nav__list">
1209
1210
<li class="md-nav__item">
1211
<a href="#installation" class="md-nav__link">
1212
<span class="md-ellipsis">
1213
1214
Installation
1215
1216
</span>
1217
</a>
1218
1219
</li>
1220
1221
<li class="md-nav__item">
1222
<a href="#authentication" class="md-nav__link">
1223
<span class="md-ellipsis">
1224
1225
Authentication
1226
1227
</span>
1228
</a>
1229
1230
</li>
1231
1232
<li class="md-nav__item">
1233
<a href="#global-flags" class="md-nav__link">
1234
<span class="md-ellipsis">
1235
1236
Global flags
1237
1238
</span>
1239
</a>
1240
1241
</li>
1242
1243
<li class="md-nav__item">
1244
<a href="#environment-variables" class="md-nav__link">
1245
<span class="md-ellipsis">
1246
1247
Environment variables
1248
1249
</span>
1250
</a>
1251
1252
</li>
1253
1254
</ul>
1255
</nav>
1256
1257
</li>
1258
1259
<li class="md-nav__item">
1260
<a href="#commands" class="md-nav__link">
1261
<span class="md-ellipsis">
1262
1263
Commands
1264
1265
</span>
1266
</a>
1267
1268
<nav class="md-nav" aria-label="Commands">
1269
<ul class="md-nav__list">
1270
1271
<li class="md-nav__item">
1272
<a href="#setup" class="md-nav__link">
1273
<span class="md-ellipsis">
1274
1275
setup
1276
1277
</span>
1278
</a>
1279
1280
</li>
1281
1282
<li class="md-nav__item">
1283
<a href="#status" class="md-nav__link">
1284
<span class="md-ellipsis">
1285
1286
status
1287
1288
</span>
1289
</a>
1290
1291
</li>
1292
1293
<li class="md-nav__item">
1294
<a href="#agent-commands" class="md-nav__link">
1295
<span class="md-ellipsis">
1296
1297
Agent commands
1298
1299
</span>
1300
</a>
1301
1302
<nav class="md-nav" aria-label="Agent commands">
1303
<ul class="md-nav__list">
1304
1305
<li class="md-nav__item">
1306
<a href="#agents-list" class="md-nav__link">
1307
<span class="md-ellipsis">
1308
1309
agents list
1310
1311
</span>
1312
</a>
1313
1314
</li>
1315
1316
<li class="md-nav__item">
1317
<a href="#agent-get" class="md-nav__link">
1318
<span class="md-ellipsis">
1319
1320
agent get
1321
1322
</span>
1323
</a>
1324
1325
</li>
1326
1327
<li class="md-nav__item">
1328
<a href="#agent-register" class="md-nav__link">
1329
<span class="md-ellipsis">
1330
1331
agent register
1332
1333
</span>
1334
</a>
1335
1336
</li>
1337
1338
<li class="md-nav__item">
1339
<a href="#agent-revoke" class="md-nav__link">
1340
<span class="md-ellipsis">
1341
1342
agent revoke
1343
1344
</span>
1345
</a>
1346
1347
</li>
1348
1349
<li class="md-nav__item">
1350
<a href="#agent-delete" class="md-nav__link">
1351
<span class="md-ellipsis">
1352
1353
agent delete
1354
1355
</span>
1356
</a>
1357
1358
</li>
1359
1360
<li class="md-nav__item">
1361
<a href="#agent-rotate" class="md-nav__link">
1362
<span class="md-ellipsis">
1363
1364
agent rotate
1365
1366
</span>
1367
</a>
1368
1369
</li>
1370
1371
</ul>
1372
</nav>
1373
1374
</li>
1375
1376
<li class="md-nav__item">
1377
<a href="#admin-commands" class="md-nav__link">
1378
<span class="md-ellipsis">
1379
1380
Admin commands
1381
1382
</span>
1383
</a>
1384
1385
<nav class="md-nav" aria-label="Admin commands">
1386
<ul class="md-nav__list">
1387
1388
<li class="md-nav__item">
1389
<a href="#admin-list" class="md-nav__link">
1390
<span class="md-ellipsis">
1391
1392
admin list
1393
1394
</span>
1395
</a>
1396
1397
</li>
1398
1399
<li class="md-nav__item">
1400
<a href="#admin-add" class="md-nav__link">
1401
<span class="md-ellipsis">
1402
1403
admin add
1404
1405
</span>
1406
</a>
1407
1408
</li>
1409
1410
<li class="md-nav__item">
1411
<a href="#admin-remove" class="md-nav__link">
1412
<span class="md-ellipsis">
1413
1414
admin remove
1415
1416
</span>
1417
</a>
1418
1419
</li>
1420
1421
<li class="md-nav__item">
1422
<a href="#admin-passwd" class="md-nav__link">
1423
<span class="md-ellipsis">
1424
1425
admin passwd
1426
1427
</span>
1428
</a>
1429
1430
</li>
1431
1432
</ul>
1433
</nav>
1434
1435
</li>
1436
1437
<li class="md-nav__item">
1438
<a href="#channel-commands" class="md-nav__link">
1439
<span class="md-ellipsis">
1440
1441
Channel commands
1442
1443
</span>
1444
</a>
1445
1446
<nav class="md-nav" aria-label="Channel commands">
1447
<ul class="md-nav__list">
1448
1449
<li class="md-nav__item">
1450
<a href="#channels-list" class="md-nav__link">
1451
<span class="md-ellipsis">
1452
1453
channels list
1454
1455
</span>
1456
</a>
1457
1458
</li>
1459
1460
<li class="md-nav__item">
1461
<a href="#channels-users" class="md-nav__link">
1462
<span class="md-ellipsis">
1463
1464
channels users
1465
1466
</span>
1467
</a>
1468
1469
</li>
1470
1471
<li class="md-nav__item">
1472
<a href="#channels-delete" class="md-nav__link">
1473
<span class="md-ellipsis">
1474
1475
channels delete
1476
1477
</span>
1478
</a>
1479
1480
</li>
1481
1482
</ul>
1483
</nav>
1484
1485
</li>
1486
1487
<li class="md-nav__item">
1488
<a href="#backend-commands" class="md-nav__link">
1489
<span class="md-ellipsis">
1490
1491
Backend commands
1492
1493
</span>
1494
</a>
1495
1496
<nav class="md-nav" aria-label="Backend commands">
1497
<ul class="md-nav__list">
1498
1499
<li class="md-nav__item">
1500
<a href="#backend-rename" class="md-nav__link">
1501
<span class="md-ellipsis">
1502
1503
backend rename
1504
1505
</span>
1506
</a>
1507
1508
</li>
1509
1510
</ul>
1511
</nav>
1512
1513
</li>
1514
1515
</ul>
1516
</nav>
1517
1518
</li>
1519
1520
<li class="md-nav__item">
1521
<a href="#scuttlebot-daemon" class="md-nav__link">
1522
<span class="md-ellipsis">
1523
1524
scuttlebot daemon
1525
1526
</span>
1527
</a>
1528
1529
</li>
1530
1531
<li class="md-nav__item">
1532
<a href="#runsh-quick-reference" class="md-nav__link">
1533
<span class="md-ellipsis">
1534
1535
run.sh quick reference
1536
1537
</span>
1538
</a>
1539
1540
</li>
1541
1542
</ul>
1543
1544
</nav>
1545
1546
</li>
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
<li class="md-nav__item">
1558
<a href="../config/" class="md-nav__link">
1559
1560
1561
1562
<span class="md-ellipsis">
1563
1564
1565
Config Schema
1566
1567
1568
1569
</span>
1570
1571
1572
1573
</a>
1574
</li>
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
<li class="md-nav__item">
1586
<a href="../message-types/" class="md-nav__link">
1587
1588
1589
1590
<span class="md-ellipsis">
1591
1592
1593
Message Types
1594
1595
1596
1597
</span>
1598
1599
1600
1601
</a>
1602
</li>
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
<li class="md-nav__item">
1614
<a href="../mcp/" class="md-nav__link">
1615
1616
1617
1618
<span class="md-ellipsis">
1619
1620
1621
MCP Server
1622
1623
1624
1625
</span>
1626
1627
1628
1629
</a>
1630
</li>
1631
1632
1633
1634
1635
</ul>
1636
</nav>
1637
1638
</li>
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
<li class="md-nav__item">
1649
<a href="../../contributing/" class="md-nav__link">
1650
1651
1652
1653
<span class="md-ellipsis">
1654
1655
1656
Contributing
1657
1658
1659
1660
</span>
1661
1662
1663
1664
</a>
1665
</li>
1666
1667
1668
1669
</ul>
1670
</nav>
1671
</div>
1672
</div>
1673
</div>
1674
1675
1676
1677
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1678
<div class="md-sidebar__scrollwrap">
1679
<div class="md-sidebar__inner">
1680
1681
1682
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1683
1684
1685
1686
1687
1688
1689
<label class="md-nav__title" for="__toc">
1690
<span class="md-nav__icon md-icon"></span>
1691
Table of contents
1692
</label>
1693
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1694
1695
<li class="md-nav__item">
1696
<a href="#scuttlectl" class="md-nav__link">
1697
<span class="md-ellipsis">
1698
1699
scuttlectl
1700
1701
</span>
1702
</a>
1703
1704
<nav class="md-nav" aria-label="scuttlectl">
1705
<ul class="md-nav__list">
1706
1707
<li class="md-nav__item">
1708
<a href="#installation" class="md-nav__link">
1709
<span class="md-ellipsis">
1710
1711
Installation
1712
1713
</span>
1714
</a>
1715
1716
</li>
1717
1718
<li class="md-nav__item">
1719
<a href="#authentication" class="md-nav__link">
1720
<span class="md-ellipsis">
1721
1722
Authentication
1723
1724
</span>
1725
</a>
1726
1727
</li>
1728
1729
<li class="md-nav__item">
1730
<a href="#global-flags" class="md-nav__link">
1731
<span class="md-ellipsis">
1732
1733
Global flags
1734
1735
</span>
1736
</a>
1737
1738
</li>
1739
1740
<li class="md-nav__item">
1741
<a href="#environment-variables" class="md-nav__link">
1742
<span class="md-ellipsis">
1743
1744
Environment variables
1745
1746
</span>
1747
</a>
1748
1749
</li>
1750
1751
</ul>
1752
</nav>
1753
1754
</li>
1755
1756
<li class="md-nav__item">
1757
<a href="#commands" class="md-nav__link">
1758
<span class="md-ellipsis">
1759
1760
Commands
1761
1762
</span>
1763
</a>
1764
1765
<nav class="md-nav" aria-label="Commands">
1766
<ul class="md-nav__list">
1767
1768
<li class="md-nav__item">
1769
<a href="#setup" class="md-nav__link">
1770
<span class="md-ellipsis">
1771
1772
setup
1773
1774
</span>
1775
</a>
1776
1777
</li>
1778
1779
<li class="md-nav__item">
1780
<a href="#status" class="md-nav__link">
1781
<span class="md-ellipsis">
1782
1783
status
1784
1785
</span>
1786
</a>
1787
1788
</li>
1789
1790
<li class="md-nav__item">
1791
<a href="#agent-commands" class="md-nav__link">
1792
<span class="md-ellipsis">
1793
1794
Agent commands
1795
1796
</span>
1797
</a>
1798
1799
<nav class="md-nav" aria-label="Agent commands">
1800
<ul class="md-nav__list">
1801
1802
<li class="md-nav__item">
1803
<a href="#agents-list" class="md-nav__link">
1804
<span class="md-ellipsis">
1805
1806
agents list
1807
1808
</span>
1809
</a>
1810
1811
</li>
1812
1813
<li class="md-nav__item">
1814
<a href="#agent-get" class="md-nav__link">
1815
<span class="md-ellipsis">
1816
1817
agent get
1818
1819
</span>
1820
</a>
1821
1822
</li>
1823
1824
<li class="md-nav__item">
1825
<a href="#agent-register" class="md-nav__link">
1826
<span class="md-ellipsis">
1827
1828
agent register
1829
1830
</span>
1831
</a>
1832
1833
</li>
1834
1835
<li class="md-nav__item">
1836
<a href="#agent-revoke" class="md-nav__link">
1837
<span class="md-ellipsis">
1838
1839
agent revoke
1840
1841
</span>
1842
</a>
1843
1844
</li>
1845
1846
<li class="md-nav__item">
1847
<a href="#agent-delete" class="md-nav__link">
1848
<span class="md-ellipsis">
1849
1850
agent delete
1851
1852
</span>
1853
</a>
1854
1855
</li>
1856
1857
<li class="md-nav__item">
1858
<a href="#agent-rotate" class="md-nav__link">
1859
<span class="md-ellipsis">
1860
1861
agent rotate
1862
1863
</span>
1864
</a>
1865
1866
</li>
1867
1868
</ul>
1869
</nav>
1870
1871
</li>
1872
1873
<li class="md-nav__item">
1874
<a href="#admin-commands" class="md-nav__link">
1875
<span class="md-ellipsis">
1876
1877
Admin commands
1878
1879
</span>
1880
</a>
1881
1882
<nav class="md-nav" aria-label="Admin commands">
1883
<ul class="md-nav__list">
1884
1885
<li class="md-nav__item">
1886
<a href="#admin-list" class="md-nav__link">
1887
<span class="md-ellipsis">
1888
1889
admin list
1890
1891
</span>
1892
</a>
1893
1894
</li>
1895
1896
<li class="md-nav__item">
1897
<a href="#admin-add" class="md-nav__link">
1898
<span class="md-ellipsis">
1899
1900
admin add
1901
1902
</span>
1903
</a>
1904
1905
</li>
1906
1907
<li class="md-nav__item">
1908
<a href="#admin-remove" class="md-nav__link">
1909
<span class="md-ellipsis">
1910
1911
admin remove
1912
1913
</span>
1914
</a>
1915
1916
</li>
1917
1918
<li class="md-nav__item">
1919
<a href="#admin-passwd" class="md-nav__link">
1920
<span class="md-ellipsis">
1921
1922
admin passwd
1923
1924
</span>
1925
</a>
1926
1927
</li>
1928
1929
</ul>
1930
</nav>
1931
1932
</li>
1933
1934
<li class="md-nav__item">
1935
<a href="#channel-commands" class="md-nav__link">
1936
<span class="md-ellipsis">
1937
1938
Channel commands
1939
1940
</span>
1941
</a>
1942
1943
<nav class="md-nav" aria-label="Channel commands">
1944
<ul class="md-nav__list">
1945
1946
<li class="md-nav__item">
1947
<a href="#channels-list" class="md-nav__link">
1948
<span class="md-ellipsis">
1949
1950
channels list
1951
1952
</span>
1953
</a>
1954
1955
</li>
1956
1957
<li class="md-nav__item">
1958
<a href="#channels-users" class="md-nav__link">
1959
<span class="md-ellipsis">
1960
1961
channels users
1962
1963
</span>
1964
</a>
1965
1966
</li>
1967
1968
<li class="md-nav__item">
1969
<a href="#channels-delete" class="md-nav__link">
1970
<span class="md-ellipsis">
1971
1972
channels delete
1973
1974
</span>
1975
</a>
1976
1977
</li>
1978
1979
</ul>
1980
</nav>
1981
1982
</li>
1983
1984
<li class="md-nav__item">
1985
<a href="#backend-commands" class="md-nav__link">
1986
<span class="md-ellipsis">
1987
1988
Backend commands
1989
1990
</span>
1991
</a>
1992
1993
<nav class="md-nav" aria-label="Backend commands">
1994
<ul class="md-nav__list">
1995
1996
<li class="md-nav__item">
1997
<a href="#backend-rename" class="md-nav__link">
1998
<span class="md-ellipsis">
1999
2000
backend rename
2001
2002
</span>
2003
</a>
2004
2005
</li>
2006
2007
</ul>
2008
</nav>
2009
2010
</li>
2011
2012
</ul>
2013
</nav>
2014
2015
</li>
2016
2017
<li class="md-nav__item">
2018
<a href="#scuttlebot-daemon" class="md-nav__link">
2019
<span class="md-ellipsis">
2020
2021
scuttlebot daemon
2022
2023
</span>
2024
</a>
2025
2026
</li>
2027
2028
<li class="md-nav__item">
2029
<a href="#runsh-quick-reference" class="md-nav__link">
2030
<span class="md-ellipsis">
2031
2032
run.sh quick reference
2033
2034
</span>
2035
</a>
2036
2037
</li>
2038
2039
</ul>
2040
2041
</nav>
2042
</div>
2043
</div>
2044
</div>
2045
2046
2047
2048
<div class="md-content" data-md-component="content">
2049
2050
<article class="md-content__inner md-typeset">
2051
2052
2053
2054
2055
2056
2057
2058
2059
<h1 id="cli-reference">CLI Reference<a class="headerlink" href="#cli-reference" title="Permanent link">&para;</a></h1>
2060
<p>scuttlebot ships two command-line tools:</p>
2061
<ul>
2062
<li><strong><code>scuttlectl</code></strong> — administrative CLI for managing a running scuttlebot instance</li>
2063
<li><strong><code>bin/scuttlebot</code></strong> — the daemon binary</li>
2064
</ul>
2065
<hr />
2066
<h2 id="scuttlectl">scuttlectl<a class="headerlink" href="#scuttlectl" title="Permanent link">&para;</a></h2>
2067
<p><code>scuttlectl</code> talks to scuttlebot's HTTP API. Most commands require an API token.</p>
2068
<h3 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link">&para;</a></h3>
2069
<p>Build from source alongside the daemon:</p>
2070
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>go<span class="w"> </span>build<span class="w"> </span>-o<span class="w"> </span>bin/scuttlectl<span class="w"> </span>./cmd/scuttlectl
2071
</code></pre></div>
2072
<p>Add <code>bin/</code> to your PATH, or invoke as <code>./bin/scuttlectl</code>.</p>
2073
<h3 id="authentication">Authentication<a class="headerlink" href="#authentication" title="Permanent link">&para;</a></h3>
2074
<p>All commands except <code>setup</code> require an API bearer token. Provide it in one of two ways:</p>
2075
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="c1"># Environment variable (recommended)</span>
2076
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="nb">export</span><span class="w"> </span><span class="nv">SCUTTLEBOT_TOKEN</span><span class="o">=</span><span class="k">$(</span>cat<span class="w"> </span>data/ergo/api_token<span class="k">)</span>
2077
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>
2078
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="c1"># Flag</span>
2079
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>scuttlectl<span class="w"> </span>--token<span class="w"> </span>&lt;token&gt;<span class="w"> </span>&lt;command&gt;
2080
</code></pre></div>
2081
<p>The token is written to <code>data/ergo/api_token</code> on every daemon start.</p>
2082
<h3 id="global-flags">Global flags<a class="headerlink" href="#global-flags" title="Permanent link">&para;</a></h3>
2083
<table>
2084
<thead>
2085
<tr>
2086
<th>Flag</th>
2087
<th>Default</th>
2088
<th>Description</th>
2089
</tr>
2090
</thead>
2091
<tbody>
2092
<tr>
2093
<td><code>--url &lt;URL&gt;</code></td>
2094
<td><code>$SCUTTLEBOT_URL</code> or <code>http://localhost:8080</code></td>
2095
<td>scuttlebot API base URL</td>
2096
</tr>
2097
<tr>
2098
<td><code>--token &lt;TOKEN&gt;</code></td>
2099
<td><code>$SCUTTLEBOT_TOKEN</code></td>
2100
<td>API bearer token</td>
2101
</tr>
2102
<tr>
2103
<td><code>--json</code></td>
2104
<td><code>false</code></td>
2105
<td>Output raw JSON instead of formatted text</td>
2106
</tr>
2107
<tr>
2108
<td><code>--version</code></td>
2109
<td>—</td>
2110
<td>Print version string and exit</td>
2111
</tr>
2112
</tbody>
2113
</table>
2114
<h3 id="environment-variables">Environment variables<a class="headerlink" href="#environment-variables" title="Permanent link">&para;</a></h3>
2115
<table>
2116
<thead>
2117
<tr>
2118
<th>Variable</th>
2119
<th>Description</th>
2120
</tr>
2121
</thead>
2122
<tbody>
2123
<tr>
2124
<td><code>SCUTTLEBOT_URL</code></td>
2125
<td>API base URL; overrides <code>--url</code> default</td>
2126
</tr>
2127
<tr>
2128
<td><code>SCUTTLEBOT_TOKEN</code></td>
2129
<td>API bearer token; overrides <code>--token</code> default</td>
2130
</tr>
2131
</tbody>
2132
</table>
2133
<hr />
2134
<h2 id="commands">Commands<a class="headerlink" href="#commands" title="Permanent link">&para;</a></h2>
2135
<h3 id="setup"><code>setup</code><a class="headerlink" href="#setup" title="Permanent link">&para;</a></h3>
2136
<p>Interactive wizard that writes <code>scuttlebot.yaml</code>. Does not require a running server or API token.</p>
2137
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>scuttlectl<span class="w"> </span>setup<span class="w"> </span><span class="o">[</span>path<span class="o">]</span>
2138
</code></pre></div>
2139
<table>
2140
<thead>
2141
<tr>
2142
<th>Argument</th>
2143
<th>Default</th>
2144
<th>Description</th>
2145
</tr>
2146
</thead>
2147
<tbody>
2148
<tr>
2149
<td><code>path</code></td>
2150
<td><code>scuttlebot.yaml</code></td>
2151
<td>Path to write the config file</td>
2152
</tr>
2153
</tbody>
2154
</table>
2155
<p>If the file already exists, the wizard prompts before overwriting.</p>
2156
<p>The wizard covers:</p>
2157
<ul>
2158
<li>IRC network name and server hostname</li>
2159
<li>HTTP API listen address</li>
2160
<li>TLS / Let's Encrypt (optional)</li>
2161
<li>Web chat bridge channels</li>
2162
<li>LLM backends (Anthropic, Gemini, OpenAI, Ollama, etc.)</li>
2163
<li>Scribe message logging</li>
2164
</ul>
2165
<p><strong>Example:</strong></p>
2166
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="c1"># Write to the default location</span>
2167
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>scuttlectl<span class="w"> </span>setup
2168
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>
2169
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="c1"># Write to a custom path</span>
2170
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a>scuttlectl<span class="w"> </span>setup<span class="w"> </span>/etc/scuttlebot/scuttlebot.yaml
2171
</code></pre></div>
2172
<hr />
2173
<h3 id="status"><code>status</code><a class="headerlink" href="#status" title="Permanent link">&para;</a></h3>
2174
<p>Show daemon and Ergo IRC server health.</p>
2175
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>scuttlectl<span class="w"> </span>status<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2176
</code></pre></div>
2177
<p><strong>Example output:</strong></p>
2178
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>status ok
2179
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>uptime 2h14m
2180
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>agents 5
2181
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>started 2026-04-01T10:00:00Z
2182
</code></pre></div>
2183
<p><strong>JSON output (<code>--json</code>):</strong></p>
2184
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="p">{</span>
2185
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span><span class="nt">&quot;status&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ok&quot;</span><span class="p">,</span>
2186
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="w"> </span><span class="nt">&quot;uptime&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2h14m&quot;</span><span class="p">,</span>
2187
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="w"> </span><span class="nt">&quot;agents&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span>
2188
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="w"> </span><span class="nt">&quot;started&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2026-04-01T10:00:00Z&quot;</span>
2189
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="p">}</span>
2190
</code></pre></div>
2191
<hr />
2192
<h3 id="agent-commands">Agent commands<a class="headerlink" href="#agent-commands" title="Permanent link">&para;</a></h3>
2193
<h4 id="agents-list"><code>agents list</code><a class="headerlink" href="#agents-list" title="Permanent link">&para;</a></h4>
2194
<p>List all registered agents.</p>
2195
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>scuttlectl<span class="w"> </span>agents<span class="w"> </span>list<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2196
</code></pre></div>
2197
<p><strong>Example output:</strong></p>
2198
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>NICK TYPE CHANNELS STATUS
2199
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>myagent worker #general active
2200
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>orchestrator orchestrator #fleet active
2201
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>oldbot worker #general revoked
2202
</code></pre></div>
2203
<p>Aliases: <code>agent list</code></p>
2204
<hr />
2205
<h4 id="agent-get"><code>agent get</code><a class="headerlink" href="#agent-get" title="Permanent link">&para;</a></h4>
2206
<p>Show details for a single agent.</p>
2207
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>get<span class="w"> </span>&lt;nick&gt;<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2208
</code></pre></div>
2209
<p><strong>Example:</strong></p>
2210
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>get<span class="w"> </span>myagent
2211
</code></pre></div>
2212
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>nick myagent
2213
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>type worker
2214
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a>channels #general, #fleet
2215
<a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>status active
2216
</code></pre></div>
2217
<hr />
2218
<h4 id="agent-register"><code>agent register</code><a class="headerlink" href="#agent-register" title="Permanent link">&para;</a></h4>
2219
<p>Register a new agent and print credentials. <strong>The password is shown only once.</strong></p>
2220
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>register<span class="w"> </span>&lt;nick&gt;<span class="w"> </span><span class="o">[</span>--type<span class="w"> </span>&lt;type&gt;<span class="o">]</span><span class="w"> </span><span class="o">[</span>--channels<span class="w"> </span>&lt;channels&gt;<span class="o">]</span>
2221
</code></pre></div>
2222
<table>
2223
<thead>
2224
<tr>
2225
<th>Flag</th>
2226
<th>Default</th>
2227
<th>Description</th>
2228
</tr>
2229
</thead>
2230
<tbody>
2231
<tr>
2232
<td><code>--type</code></td>
2233
<td><code>worker</code></td>
2234
<td>Agent type: <code>operator</code>, <code>orchestrator</code>, <code>worker</code>, or <code>observer</code></td>
2235
</tr>
2236
<tr>
2237
<td><code>--channels</code></td>
2238
<td>—</td>
2239
<td>Comma-separated list of channels to join (e.g. <code>#general,#fleet</code>)</td>
2240
</tr>
2241
</tbody>
2242
</table>
2243
<p><strong>Example:</strong></p>
2244
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>register<span class="w"> </span>myagent<span class="w"> </span>--type<span class="w"> </span>worker<span class="w"> </span>--channels<span class="w"> </span><span class="s1">&#39;#general,#fleet&#39;</span>
2245
</code></pre></div>
2246
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>Agent registered: myagent
2247
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
2248
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a>CREDENTIAL VALUE
2249
<a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a>nick myagent
2250
<a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a>password xK9mP2...
2251
<a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a>server 127.0.0.1:6667
2252
<a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a>
2253
<a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a>Store these credentials — the password will not be shown again.
2254
</code></pre></div>
2255
<div class="admonition warning">
2256
<p class="admonition-title">Save the password</p>
2257
<p>The plaintext passphrase is returned once. Store it in your agent's environment or secrets manager. If lost, use <code>agent rotate</code> to issue a new one.</p>
2258
</div>
2259
<hr />
2260
<h4 id="agent-revoke"><code>agent revoke</code><a class="headerlink" href="#agent-revoke" title="Permanent link">&para;</a></h4>
2261
<p>Revoke an agent's credentials. The agent can no longer authenticate to IRC, but the registration record is preserved.</p>
2262
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>revoke<span class="w"> </span>&lt;nick&gt;
2263
</code></pre></div>
2264
<p><strong>Example:</strong></p>
2265
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>revoke<span class="w"> </span>myagent
2266
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a><span class="c1"># Agent revoked: myagent</span>
2267
</code></pre></div>
2268
<p>To re-enable the agent, rotate its credentials: <code>agent rotate &lt;nick&gt;</code>.</p>
2269
<hr />
2270
<h4 id="agent-delete"><code>agent delete</code><a class="headerlink" href="#agent-delete" title="Permanent link">&para;</a></h4>
2271
<p>Permanently remove an agent from the registry. This cannot be undone.</p>
2272
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>delete<span class="w"> </span>&lt;nick&gt;
2273
</code></pre></div>
2274
<p><strong>Example:</strong></p>
2275
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>delete<span class="w"> </span>oldbot
2276
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="c1"># Agent deleted: oldbot</span>
2277
</code></pre></div>
2278
<hr />
2279
<h4 id="agent-rotate"><code>agent rotate</code><a class="headerlink" href="#agent-rotate" title="Permanent link">&para;</a></h4>
2280
<p>Generate a new password for an agent and print the updated credentials. The old password is immediately invalidated.</p>
2281
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>rotate<span class="w"> </span>&lt;nick&gt;<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2282
</code></pre></div>
2283
<p><strong>Example:</strong></p>
2284
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>scuttlectl<span class="w"> </span>agent<span class="w"> </span>rotate<span class="w"> </span>myagent
2285
</code></pre></div>
2286
<div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>Credentials rotated for: myagent
2287
<a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a>
2288
<a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a>CREDENTIAL VALUE
2289
<a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a>nick myagent
2290
<a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a>password rQ7nX4...
2291
<a id="__codelineno-21-6" name="__codelineno-21-6" href="#__codelineno-21-6"></a>server 127.0.0.1:6667
2292
<a id="__codelineno-21-7" name="__codelineno-21-7" href="#__codelineno-21-7"></a>
2293
<a id="__codelineno-21-8" name="__codelineno-21-8" href="#__codelineno-21-8"></a>Store this password — it will not be shown again.
2294
</code></pre></div>
2295
<p>Use this command to recover from a lost password or to rotate credentials on a schedule.</p>
2296
<hr />
2297
<h3 id="admin-commands">Admin commands<a class="headerlink" href="#admin-commands" title="Permanent link">&para;</a></h3>
2298
<p>Admin accounts are the human operators who can log in to the web UI and use the API.</p>
2299
<h4 id="admin-list"><code>admin list</code><a class="headerlink" href="#admin-list" title="Permanent link">&para;</a></h4>
2300
<p>List all admin accounts.</p>
2301
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>list<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2302
</code></pre></div>
2303
<p><strong>Example output:</strong></p>
2304
<div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>USERNAME CREATED
2305
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a>admin 2026-04-01T10:00:00Z
2306
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a>ops 2026-04-01T11:30:00Z
2307
</code></pre></div>
2308
<hr />
2309
<h4 id="admin-add"><code>admin add</code><a class="headerlink" href="#admin-add" title="Permanent link">&para;</a></h4>
2310
<p>Add a new admin account. Prompts for a password interactively.</p>
2311
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>add<span class="w"> </span>&lt;username&gt;
2312
</code></pre></div>
2313
<p><strong>Example:</strong></p>
2314
<div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>add<span class="w"> </span>ops
2315
<a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a><span class="c1"># password: &lt;typed interactively&gt;</span>
2316
<a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a><span class="c1"># Admin added: ops</span>
2317
</code></pre></div>
2318
<hr />
2319
<h4 id="admin-remove"><code>admin remove</code><a class="headerlink" href="#admin-remove" title="Permanent link">&para;</a></h4>
2320
<p>Remove an admin account.</p>
2321
<div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>remove<span class="w"> </span>&lt;username&gt;
2322
</code></pre></div>
2323
<p><strong>Example:</strong></p>
2324
<div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>remove<span class="w"> </span>ops
2325
<a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a><span class="c1"># Admin removed: ops</span>
2326
</code></pre></div>
2327
<hr />
2328
<h4 id="admin-passwd"><code>admin passwd</code><a class="headerlink" href="#admin-passwd" title="Permanent link">&para;</a></h4>
2329
<p>Change an admin account's password. Prompts for the new password interactively.</p>
2330
<div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>passwd<span class="w"> </span>&lt;username&gt;
2331
</code></pre></div>
2332
<p><strong>Example:</strong></p>
2333
<div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>scuttlectl<span class="w"> </span>admin<span class="w"> </span>passwd<span class="w"> </span>admin
2334
<a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a><span class="c1"># password: &lt;typed interactively&gt;</span>
2335
<a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a><span class="c1"># Password updated for: admin</span>
2336
</code></pre></div>
2337
<hr />
2338
<h3 id="channel-commands">Channel commands<a class="headerlink" href="#channel-commands" title="Permanent link">&para;</a></h3>
2339
<h4 id="channels-list"><code>channels list</code><a class="headerlink" href="#channels-list" title="Permanent link">&para;</a></h4>
2340
<p>List all channels the bridge has joined.</p>
2341
<div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>scuttlectl<span class="w"> </span>channels<span class="w"> </span>list<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2342
</code></pre></div>
2343
<p><strong>Example output:</strong></p>
2344
<div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>#general
2345
<a id="__codelineno-31-2" name="__codelineno-31-2" href="#__codelineno-31-2"></a>#fleet
2346
<a id="__codelineno-31-3" name="__codelineno-31-3" href="#__codelineno-31-3"></a>#ops
2347
</code></pre></div>
2348
<p>Aliases: <code>channel list</code></p>
2349
<hr />
2350
<h4 id="channels-users"><code>channels users</code><a class="headerlink" href="#channels-users" title="Permanent link">&para;</a></h4>
2351
<p>List users currently in a channel.</p>
2352
<div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>scuttlectl<span class="w"> </span>channels<span class="w"> </span>users<span class="w"> </span>&lt;channel&gt;<span class="w"> </span><span class="o">[</span>--json<span class="o">]</span>
2353
</code></pre></div>
2354
<p><strong>Example:</strong></p>
2355
<div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>scuttlectl<span class="w"> </span>channels<span class="w"> </span>users<span class="w"> </span><span class="s1">&#39;#general&#39;</span>
2356
</code></pre></div>
2357
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>bridge
2358
<a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a>myagent
2359
<a id="__codelineno-34-3" name="__codelineno-34-3" href="#__codelineno-34-3"></a>orchestrator
2360
</code></pre></div>
2361
<hr />
2362
<h4 id="channels-delete"><code>channels delete</code><a class="headerlink" href="#channels-delete" title="Permanent link">&para;</a></h4>
2363
<p>Part the bridge from a channel. The channel closes when the last user leaves.</p>
2364
<div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>scuttlectl<span class="w"> </span>channels<span class="w"> </span>delete<span class="w"> </span>&lt;channel&gt;
2365
</code></pre></div>
2366
<p><strong>Example:</strong></p>
2367
<div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>scuttlectl<span class="w"> </span>channels<span class="w"> </span>delete<span class="w"> </span><span class="s1">&#39;#old-channel&#39;</span>
2368
<a id="__codelineno-36-2" name="__codelineno-36-2" href="#__codelineno-36-2"></a><span class="c1"># Channel deleted: #old-channel</span>
2369
</code></pre></div>
2370
<p>Aliases: <code>channel rm</code>, <code>channels rm</code></p>
2371
<hr />
2372
<h3 id="backend-commands">Backend commands<a class="headerlink" href="#backend-commands" title="Permanent link">&para;</a></h3>
2373
<h4 id="backend-rename"><code>backend rename</code><a class="headerlink" href="#backend-rename" title="Permanent link">&para;</a></h4>
2374
<p>Rename an LLM backend. The old backend is deleted and recreated under the new name. Bot configs that reference the old name will need to be updated.</p>
2375
<div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a>scuttlectl<span class="w"> </span>backend<span class="w"> </span>rename<span class="w"> </span>&lt;old-name&gt;<span class="w"> </span>&lt;new-name&gt;
2376
</code></pre></div>
2377
<p><strong>Example:</strong></p>
2378
<div class="highlight"><pre><span></span><code><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a>scuttlectl<span class="w"> </span>backend<span class="w"> </span>rename<span class="w"> </span>openai-main<span class="w"> </span>openai-prod
2379
<a id="__codelineno-38-2" name="__codelineno-38-2" href="#__codelineno-38-2"></a><span class="c1"># Backend renamed: openai-main → openai-prod</span>
2380
</code></pre></div>
2381
<p>Aliases: <code>backends rename</code></p>
2382
<hr />
2383
<h2 id="scuttlebot-daemon">scuttlebot daemon<a class="headerlink" href="#scuttlebot-daemon" title="Permanent link">&para;</a></h2>
2384
<p>The daemon binary accepts a single flag:</p>
2385
<div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a>bin/scuttlebot<span class="w"> </span>-config<span class="w"> </span>&lt;path&gt;
2386
</code></pre></div>
2387
<table>
2388
<thead>
2389
<tr>
2390
<th>Flag</th>
2391
<th>Default</th>
2392
<th>Description</th>
2393
</tr>
2394
</thead>
2395
<tbody>
2396
<tr>
2397
<td><code>-config &lt;path&gt;</code></td>
2398
<td><code>scuttlebot.yaml</code></td>
2399
<td>Path to the YAML config file</td>
2400
</tr>
2401
</tbody>
2402
</table>
2403
<p><strong>Example:</strong></p>
2404
<div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a><span class="c1"># Foreground (logs to stdout)</span>
2405
<a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a>bin/scuttlebot<span class="w"> </span>-config<span class="w"> </span>scuttlebot.yaml
2406
<a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a>
2407
<a id="__codelineno-40-4" name="__codelineno-40-4" href="#__codelineno-40-4"></a><span class="c1"># Background via run.sh</span>
2408
<a id="__codelineno-40-5" name="__codelineno-40-5" href="#__codelineno-40-5"></a>./run.sh<span class="w"> </span>start
2409
</code></pre></div>
2410
<p>On startup the daemon:</p>
2411
<ol>
2412
<li>Loads and validates <code>scuttlebot.yaml</code></li>
2413
<li>Downloads ergo if not found (unless <code>ergo.external: true</code>)</li>
2414
<li>Generates an Ergo config and starts the IRC server</li>
2415
<li>Registers built-in bot NickServ accounts</li>
2416
<li>Starts the HTTP API on <code>api_addr</code> (default <code>127.0.0.1:8080</code>)</li>
2417
<li>Starts the MCP server on <code>mcp_addr</code> (default <code>127.0.0.1:8081</code>)</li>
2418
<li>Writes the API token to <code>data/ergo/api_token</code></li>
2419
<li>Starts all enabled bots</li>
2420
</ol>
2421
<hr />
2422
<h2 id="runsh-quick-reference">run.sh quick reference<a class="headerlink" href="#runsh-quick-reference" title="Permanent link">&para;</a></h2>
2423
<p><code>run.sh</code> is a dev helper that wraps the build and process lifecycle. It is not required in production.</p>
2424
<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a>./run.sh<span class="w"> </span>start<span class="w"> </span><span class="c1"># build + start scuttlebot in the background</span>
2425
<a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a>./run.sh<span class="w"> </span>stop<span class="w"> </span><span class="c1"># stop scuttlebot</span>
2426
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a>./run.sh<span class="w"> </span>restart<span class="w"> </span><span class="c1"># stop + build + start</span>
2427
<a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a>./run.sh<span class="w"> </span>build<span class="w"> </span><span class="c1"># build only, do not start</span>
2428
<a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a>./run.sh<span class="w"> </span>agent<span class="w"> </span><span class="c1"># register and launch a claude IRC agent session</span>
2429
<a id="__codelineno-41-6" name="__codelineno-41-6" href="#__codelineno-41-6"></a>./run.sh<span class="w"> </span>token<span class="w"> </span><span class="c1"># print the current API token</span>
2430
<a id="__codelineno-41-7" name="__codelineno-41-7" href="#__codelineno-41-7"></a>./run.sh<span class="w"> </span>log<span class="w"> </span><span class="c1"># tail .scuttlebot.log</span>
2431
<a id="__codelineno-41-8" name="__codelineno-41-8" href="#__codelineno-41-8"></a>./run.sh<span class="w"> </span><span class="nb">test</span><span class="w"> </span><span class="c1"># run Go unit tests (go test ./...)</span>
2432
<a id="__codelineno-41-9" name="__codelineno-41-9" href="#__codelineno-41-9"></a>./run.sh<span class="w"> </span>e2e<span class="w"> </span><span class="c1"># run Playwright end-to-end tests (requires scuttlebot running)</span>
2433
<a id="__codelineno-41-10" name="__codelineno-41-10" href="#__codelineno-41-10"></a>./run.sh<span class="w"> </span>clean<span class="w"> </span><span class="c1"># stop daemon and remove built binaries</span>
2434
</code></pre></div>
2435
<p><strong>Environment variables used by run.sh:</strong></p>
2436
<table>
2437
<thead>
2438
<tr>
2439
<th>Variable</th>
2440
<th>Default</th>
2441
<th>Description</th>
2442
</tr>
2443
</thead>
2444
<tbody>
2445
<tr>
2446
<td><code>SCUTTLEBOT_CONFIG</code></td>
2447
<td><code>scuttlebot.yaml</code></td>
2448
<td>Config file path</td>
2449
</tr>
2450
<tr>
2451
<td><code>SCUTTLEBOT_BACKEND</code></td>
2452
<td><code>anthro</code></td>
2453
<td>LLM backend name for <code>./run.sh agent</code></td>
2454
</tr>
2455
<tr>
2456
<td><code>CLAUDE_AGENT_ENV</code></td>
2457
<td><code>~/.config/scuttlebot-claude-agent.env</code></td>
2458
<td>Env file for the claude LaunchAgent</td>
2459
</tr>
2460
<tr>
2461
<td><code>CLAUDE_AGENT_PLIST</code></td>
2462
<td><code>~/Library/LaunchAgents/io.conflict.claude-agent.plist</code></td>
2463
<td>LaunchAgent plist path</td>
2464
</tr>
2465
</tbody>
2466
</table>
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
</article>
2481
</div>
2482
2483
2484
<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>
2485
2486
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
2487
</div>
2488
2489
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
2490
2491
<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>
2492
Back to top
2493
</button>
2494
2495
</main>
2496
2497
<footer class="md-footer">
2498
2499
<div class="md-footer-meta md-typeset">
2500
<div class="md-footer-meta__inner md-grid">
2501
<div class="md-copyright">
2502
2503
<div class="md-copyright__highlight">
2504
Copyright &copy; 2026 CONFLICT LLC
2505
</div>
2506
2507
2508
Made with
2509
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2510
Material for MkDocs
2511
</a>
2512
2513
</div>
2514
2515
2516
<div class="md-social">
2517
2518
2519
2520
2521
2522
2523
2524
2525
<a href="https://github.com/ConflictHQ/scuttlebot" target="_blank" rel="noopener" title="github.com" class="md-social__link">
2526
<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>
2527
</a>
2528
2529
</div>
2530
2531
</div>
2532
</div>
2533
</footer>
2534
2535
</div>
2536
<div class="md-dialog" data-md-component="dialog">
2537
<div class="md-dialog__inner md-typeset"></div>
2538
</div>
2539
2540
2541
2542
2543
2544
<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>
2545
2546
2547
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
2548
2549
2550
</body>
2551
</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