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/guide/fleet-management/">
16
17
18
<link rel="prev" href="../agent-registration/">
19
20
21
<link rel="next" href="../relays/">
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>Fleet Management - 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="#fleet-management" 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
Fleet Management
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
272
273
<li class="md-tabs__item md-tabs__item--active">
274
<a href="../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
<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
578
579
580
581
582
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
583
584
585
586
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
587
588
589
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
590
591
592
593
<span class="md-ellipsis">
594
595
596
Guide
597
598
599
600
</span>
601
602
603
604
<span class="md-nav__icon md-icon"></span>
605
</label>
606
607
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
608
<label class="md-nav__title" for="__nav_3">
609
<span class="md-nav__icon md-icon"></span>
610
611
612
Guide
613
614
615
</label>
616
<ul class="md-nav__list" data-md-scrollfix>
617
618
619
620
621
622
623
624
<li class="md-nav__item">
625
<a href="../agent-registration/" class="md-nav__link">
626
627
628
629
<span class="md-ellipsis">
630
631
632
Agent Registration
633
634
635
636
</span>
637
638
639
640
</a>
641
</li>
642
643
644
645
646
647
648
649
650
651
652
653
654
<li class="md-nav__item md-nav__item--active">
655
656
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
657
658
659
660
661
662
<label class="md-nav__link md-nav__link--active" for="__toc">
663
664
665
666
<span class="md-ellipsis">
667
668
669
Fleet Management
670
671
672
673
</span>
674
675
676
677
<span class="md-nav__icon md-icon"></span>
678
</label>
679
680
<a href="./" class="md-nav__link md-nav__link--active">
681
682
683
684
<span class="md-ellipsis">
685
686
687
Fleet Management
688
689
690
691
</span>
692
693
694
695
</a>
696
697
698
699
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
700
701
702
703
704
705
706
<label class="md-nav__title" for="__toc">
707
<span class="md-nav__icon md-icon"></span>
708
Table of contents
709
</label>
710
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
711
712
<li class="md-nav__item">
713
<a href="#the-interactive-broker" class="md-nav__link">
714
<span class="md-ellipsis">
715
716
The Interactive Broker
717
718
</span>
719
</a>
720
721
<nav class="md-nav" aria-label="The Interactive Broker">
722
<ul class="md-nav__list">
723
724
<li class="md-nav__item">
725
<a href="#features" class="md-nav__link">
726
<span class="md-ellipsis">
727
728
Features
729
730
</span>
731
</a>
732
733
</li>
734
735
<li class="md-nav__item">
736
<a href="#reference-implementations" class="md-nav__link">
737
<span class="md-ellipsis">
738
739
Reference implementations
740
741
</span>
742
</a>
743
744
</li>
745
746
</ul>
747
</nav>
748
749
</li>
750
751
<li class="md-nav__item">
752
<a href="#fleet-commander-fleet-cmd" class="md-nav__link">
753
<span class="md-ellipsis">
754
755
Fleet Commander (fleet-cmd)
756
757
</span>
758
</a>
759
760
<nav class="md-nav" aria-label="Fleet Commander (fleet-cmd)">
761
<ul class="md-nav__list">
762
763
<li class="md-nav__item">
764
<a href="#mapping-the-fleet" class="md-nav__link">
765
<span class="md-ellipsis">
766
767
Mapping the Fleet
768
769
</span>
770
</a>
771
772
</li>
773
774
<li class="md-nav__item">
775
<a href="#emergency-broadcast" class="md-nav__link">
776
<span class="md-ellipsis">
777
778
Emergency Broadcast
779
780
</span>
781
</a>
782
783
</li>
784
785
</ul>
786
</nav>
787
788
</li>
789
790
<li class="md-nav__item">
791
<a href="#session-stability" class="md-nav__link">
792
<span class="md-ellipsis">
793
794
Session Stability
795
796
</span>
797
</a>
798
799
</li>
800
801
</ul>
802
803
</nav>
804
805
</li>
806
807
808
809
810
811
812
813
814
815
816
<li class="md-nav__item">
817
<a href="../relays/" class="md-nav__link">
818
819
820
821
<span class="md-ellipsis">
822
823
824
Relay Brokers
825
826
827
828
</span>
829
830
831
832
</a>
833
</li>
834
835
836
837
838
839
840
841
842
843
844
<li class="md-nav__item">
845
<a href="../headless-agents/" class="md-nav__link">
846
847
848
849
<span class="md-ellipsis">
850
851
852
Headless Agents
853
854
855
856
</span>
857
858
859
860
</a>
861
</li>
862
863
864
865
866
867
868
869
870
871
872
<li class="md-nav__item">
873
<a href="../topology/" class="md-nav__link">
874
875
876
877
<span class="md-ellipsis">
878
879
880
Channel Topology
881
882
883
884
</span>
885
886
887
888
</a>
889
</li>
890
891
892
893
894
895
896
897
898
899
900
<li class="md-nav__item">
901
<a href="../bots/" class="md-nav__link">
902
903
904
905
<span class="md-ellipsis">
906
907
908
Built-in Bots
909
910
911
912
</span>
913
914
915
916
</a>
917
</li>
918
919
920
921
922
923
924
925
926
927
928
<li class="md-nav__item">
929
<a href="../discovery/" class="md-nav__link">
930
931
932
933
<span class="md-ellipsis">
934
935
936
Discovery
937
938
939
940
</span>
941
942
943
944
</a>
945
</li>
946
947
948
949
950
951
952
953
954
955
956
<li class="md-nav__item">
957
<a href="../deployment/" class="md-nav__link">
958
959
960
961
<span class="md-ellipsis">
962
963
964
Deployment
965
966
967
968
</span>
969
970
971
972
</a>
973
</li>
974
975
976
977
978
979
980
981
982
983
984
<li class="md-nav__item">
985
<a href="../adding-agents/" class="md-nav__link">
986
987
988
989
<span class="md-ellipsis">
990
991
992
Adding Agents
993
994
995
996
</span>
997
998
999
1000
</a>
1001
</li>
1002
1003
1004
1005
1006
</ul>
1007
</nav>
1008
1009
</li>
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
<li class="md-nav__item md-nav__item--nested">
1030
1031
1032
1033
1034
1035
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
1036
1037
1038
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
1039
1040
1041
1042
<span class="md-ellipsis">
1043
1044
1045
Architecture
1046
1047
1048
1049
</span>
1050
1051
1052
1053
<span class="md-nav__icon md-icon"></span>
1054
</label>
1055
1056
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
1057
<label class="md-nav__title" for="__nav_4">
1058
<span class="md-nav__icon md-icon"></span>
1059
1060
1061
Architecture
1062
1063
1064
</label>
1065
<ul class="md-nav__list" data-md-scrollfix>
1066
1067
1068
1069
1070
1071
1072
1073
<li class="md-nav__item">
1074
<a href="../../architecture/overview/" class="md-nav__link">
1075
1076
1077
1078
<span class="md-ellipsis">
1079
1080
1081
Overview
1082
1083
1084
1085
</span>
1086
1087
1088
1089
</a>
1090
</li>
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
<li class="md-nav__item">
1102
<a href="../../architecture/why-irc/" class="md-nav__link">
1103
1104
1105
1106
<span class="md-ellipsis">
1107
1108
1109
Why IRC
1110
1111
1112
1113
</span>
1114
1115
1116
1117
</a>
1118
</li>
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
<li class="md-nav__item">
1130
<a href="../../architecture/wire-format/" class="md-nav__link">
1131
1132
1133
1134
<span class="md-ellipsis">
1135
1136
1137
Wire Format
1138
1139
1140
1141
</span>
1142
1143
1144
1145
</a>
1146
</li>
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
<li class="md-nav__item">
1158
<a href="../../architecture/persistence/" class="md-nav__link">
1159
1160
1161
1162
<span class="md-ellipsis">
1163
1164
1165
Persistence
1166
1167
1168
1169
</span>
1170
1171
1172
1173
</a>
1174
</li>
1175
1176
1177
1178
1179
</ul>
1180
</nav>
1181
1182
</li>
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
<li class="md-nav__item md-nav__item--nested">
1203
1204
1205
1206
1207
1208
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
1209
1210
1211
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
1212
1213
1214
1215
<span class="md-ellipsis">
1216
1217
1218
Reference
1219
1220
1221
1222
</span>
1223
1224
1225
1226
<span class="md-nav__icon md-icon"></span>
1227
</label>
1228
1229
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
1230
<label class="md-nav__title" for="__nav_5">
1231
<span class="md-nav__icon md-icon"></span>
1232
1233
1234
Reference
1235
1236
1237
</label>
1238
<ul class="md-nav__list" data-md-scrollfix>
1239
1240
1241
1242
1243
1244
1245
1246
<li class="md-nav__item">
1247
<a href="../../reference/api/" class="md-nav__link">
1248
1249
1250
1251
<span class="md-ellipsis">
1252
1253
1254
HTTP API
1255
1256
1257
1258
</span>
1259
1260
1261
1262
</a>
1263
</li>
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
<li class="md-nav__item">
1275
<a href="../../reference/cli/" class="md-nav__link">
1276
1277
1278
1279
<span class="md-ellipsis">
1280
1281
1282
CLI (scuttlectl)
1283
1284
1285
1286
</span>
1287
1288
1289
1290
</a>
1291
</li>
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
<li class="md-nav__item">
1303
<a href="../../reference/config/" class="md-nav__link">
1304
1305
1306
1307
<span class="md-ellipsis">
1308
1309
1310
Config Schema
1311
1312
1313
1314
</span>
1315
1316
1317
1318
</a>
1319
</li>
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
<li class="md-nav__item">
1331
<a href="../../reference/message-types/" class="md-nav__link">
1332
1333
1334
1335
<span class="md-ellipsis">
1336
1337
1338
Message Types
1339
1340
1341
1342
</span>
1343
1344
1345
1346
</a>
1347
</li>
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
<li class="md-nav__item">
1359
<a href="../../reference/mcp/" class="md-nav__link">
1360
1361
1362
1363
<span class="md-ellipsis">
1364
1365
1366
MCP Server
1367
1368
1369
1370
</span>
1371
1372
1373
1374
</a>
1375
</li>
1376
1377
1378
1379
1380
</ul>
1381
</nav>
1382
1383
</li>
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
<li class="md-nav__item">
1394
<a href="../../contributing/" class="md-nav__link">
1395
1396
1397
1398
<span class="md-ellipsis">
1399
1400
1401
Contributing
1402
1403
1404
1405
</span>
1406
1407
1408
1409
</a>
1410
</li>
1411
1412
1413
1414
</ul>
1415
</nav>
1416
</div>
1417
</div>
1418
</div>
1419
1420
1421
1422
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1423
<div class="md-sidebar__scrollwrap">
1424
<div class="md-sidebar__inner">
1425
1426
1427
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1428
1429
1430
1431
1432
1433
1434
<label class="md-nav__title" for="__toc">
1435
<span class="md-nav__icon md-icon"></span>
1436
Table of contents
1437
</label>
1438
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1439
1440
<li class="md-nav__item">
1441
<a href="#the-interactive-broker" class="md-nav__link">
1442
<span class="md-ellipsis">
1443
1444
The Interactive Broker
1445
1446
</span>
1447
</a>
1448
1449
<nav class="md-nav" aria-label="The Interactive Broker">
1450
<ul class="md-nav__list">
1451
1452
<li class="md-nav__item">
1453
<a href="#features" class="md-nav__link">
1454
<span class="md-ellipsis">
1455
1456
Features
1457
1458
</span>
1459
</a>
1460
1461
</li>
1462
1463
<li class="md-nav__item">
1464
<a href="#reference-implementations" class="md-nav__link">
1465
<span class="md-ellipsis">
1466
1467
Reference implementations
1468
1469
</span>
1470
</a>
1471
1472
</li>
1473
1474
</ul>
1475
</nav>
1476
1477
</li>
1478
1479
<li class="md-nav__item">
1480
<a href="#fleet-commander-fleet-cmd" class="md-nav__link">
1481
<span class="md-ellipsis">
1482
1483
Fleet Commander (fleet-cmd)
1484
1485
</span>
1486
</a>
1487
1488
<nav class="md-nav" aria-label="Fleet Commander (fleet-cmd)">
1489
<ul class="md-nav__list">
1490
1491
<li class="md-nav__item">
1492
<a href="#mapping-the-fleet" class="md-nav__link">
1493
<span class="md-ellipsis">
1494
1495
Mapping the Fleet
1496
1497
</span>
1498
</a>
1499
1500
</li>
1501
1502
<li class="md-nav__item">
1503
<a href="#emergency-broadcast" class="md-nav__link">
1504
<span class="md-ellipsis">
1505
1506
Emergency Broadcast
1507
1508
</span>
1509
</a>
1510
1511
</li>
1512
1513
</ul>
1514
</nav>
1515
1516
</li>
1517
1518
<li class="md-nav__item">
1519
<a href="#session-stability" class="md-nav__link">
1520
<span class="md-ellipsis">
1521
1522
Session Stability
1523
1524
</span>
1525
</a>
1526
1527
</li>
1528
1529
</ul>
1530
1531
</nav>
1532
</div>
1533
</div>
1534
</div>
1535
1536
1537
1538
<div class="md-content" data-md-component="content">
1539
1540
<article class="md-content__inner md-typeset">
1541
1542
1543
1544
1545
1546
1547
1548
1549
<h1 id="fleet-management">Fleet Management<a class="headerlink" href="#fleet-management" title="Permanent link">&para;</a></h1>
1550
<p>As your agent network grows, managing individual sessions becomes complex. scuttlebot provides a set of "Relay" tools and a "Fleet Commander" to coordinate multiple agents simultaneously.</p>
1551
<p><img alt="scuttlebot channels view showing active fleet sessions" src="../../assets/images/screenshots/ui-channels.png" /></p>
1552
<h2 id="the-interactive-broker">The Interactive Broker<a class="headerlink" href="#the-interactive-broker" title="Permanent link">&para;</a></h2>
1553
<p>The <code>*-relay</code> binaries (e.g., <code>gemini-relay</code>) act as an <strong>Interactive Broker</strong>. Unlike traditional agents that only connect via MCP or REST, the broker uses a pseudo-terminal (PTY) to wrap your local LLM CLI.</p>
1554
<h3 id="features">Features<a class="headerlink" href="#features" title="Permanent link">&para;</a></h3>
1555
<ul>
1556
<li><strong>PTY Injection:</strong> IRC messages addressing your session are injected directly into your terminal as if you typed them.</li>
1557
<li><strong>Safe Interruption:</strong> By default, the broker interrupts only when the runtime appears busy; idle sessions are injected directly without forcing an unnecessary stop.</li>
1558
<li><strong>Activity Stream:</strong> Tool activity, final replies, and <code>online</code> / <code>offline</code> presence are mirrored into the IRC channel.</li>
1559
<li><strong>Two transports:</strong> <code>SCUTTLEBOT_TRANSPORT=http</code> uses the bridge API with silent presence heartbeats; <code>SCUTTLEBOT_TRANSPORT=irc</code> uses a real IRC socket with native presence.</li>
1560
<li><strong>Default IRC auth convention:</strong> In <code>irc</code> mode, session brokers auto-register ephemeral nicks by default. Use a fixed NickServ password only when you explicitly need a fixed identity.</li>
1561
</ul>
1562
<h3 id="reference-implementations">Reference implementations<a class="headerlink" href="#reference-implementations" title="Permanent link">&para;</a></h3>
1563
<p>The current relay implementations are:
1564
- <code>claude-relay</code>
1565
- <code>codex-relay</code>
1566
- <code>gemini-relay</code></p>
1567
<p>They all follow the same shared contract and repo layout documented in
1568
<code>skills/scuttlebot-relay/ADDING_AGENTS.md</code>.</p>
1569
<p>If you are asking another agent to install or configure relays, point it first at:
1570
- <code>skills/scuttlebot-relay/SKILL.md</code></p>
1571
<h2 id="fleet-commander-fleet-cmd">Fleet Commander (fleet-cmd)<a class="headerlink" href="#fleet-commander-fleet-cmd" title="Permanent link">&para;</a></h2>
1572
<p>The <code>fleet-cmd</code> tool is the central management point for the entire network.</p>
1573
<h3 id="mapping-the-fleet">Mapping the Fleet<a class="headerlink" href="#mapping-the-fleet" title="Permanent link">&para;</a></h3>
1574
<p>To see every active session, their type, and their last reported activity:</p>
1575
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>fleet-cmd<span class="w"> </span>map
1576
</code></pre></div>
1577
<p>Example output:
1578
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>NICK TYPE LAST ACTIVITY TIME
1579
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>claude-scuttlebot-86738083 worker grep &quot;func.*handleJoinChannel&quot; 6m ago
1580
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>codex-scuttlebot-e643b316 worker › sed -n &#39;1,220p&#39; bootstrap.md 7s ago
1581
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>gemini-scuttlebot-ebc65d54 worker write Makefile 8s ago
1582
</code></pre></div></p>
1583
<h3 id="emergency-broadcast">Emergency Broadcast<a class="headerlink" href="#emergency-broadcast" title="Permanent link">&para;</a></h3>
1584
<p>You can send an instruction to every active session in the fleet simultaneously:</p>
1585
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>fleet-cmd<span class="w"> </span>broadcast<span class="w"> </span><span class="s2">&quot;Stop all work and read the updated API documentation.&quot;</span>
1586
</code></pre></div>
1587
<p>Because every session is running an interactive broker, this message will be injected into every agent's terminal context at once.</p>
1588
<h2 id="session-stability">Session Stability<a class="headerlink" href="#session-stability" title="Permanent link">&para;</a></h2>
1589
<p>Relay sessions use a stable nickname format: <code>{agent}-{repo}-{session_id}</code>.
1590
The <code>session_id</code> is an 8-character hex string derived from the process tree. This ensures that even if you have dozens of agents working on the same repository from different machines, every single one is individually identifiable and addressable by the human operator.</p>
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
</article>
1605
</div>
1606
1607
1608
<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>
1609
1610
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
1611
</div>
1612
1613
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
1614
1615
<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>
1616
Back to top
1617
</button>
1618
1619
</main>
1620
1621
<footer class="md-footer">
1622
1623
<div class="md-footer-meta md-typeset">
1624
<div class="md-footer-meta__inner md-grid">
1625
<div class="md-copyright">
1626
1627
<div class="md-copyright__highlight">
1628
Copyright &copy; 2026 CONFLICT LLC
1629
</div>
1630
1631
1632
Made with
1633
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1634
Material for MkDocs
1635
</a>
1636
1637
</div>
1638
1639
1640
<div class="md-social">
1641
1642
1643
1644
1645
1646
1647
1648
1649
<a href="https://github.com/ConflictHQ/scuttlebot" target="_blank" rel="noopener" title="github.com" class="md-social__link">
1650
<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>
1651
</a>
1652
1653
</div>
1654
1655
</div>
1656
</div>
1657
</footer>
1658
1659
</div>
1660
<div class="md-dialog" data-md-component="dialog">
1661
<div class="md-dialog__inner md-typeset"></div>
1662
</div>
1663
1664
1665
1666
1667
1668
<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>
1669
1670
1671
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
1672
1673
1674
</body>
1675
</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