agent-conveyor 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/cli/typescript-runtime.js +317 -7
- package/dist/cli/typescript-runtime.js.map +1 -1
- package/dist/runtime/manager-config.d.ts +1 -0
- package/dist/runtime/manager-config.js +2 -1
- package/dist/runtime/manager-config.js.map +1 -1
- package/dist/state/database.js +2 -2
- package/dist/state/schema-v23.d.ts +1 -0
- package/dist/state/{schema-v22.js → schema-v23.js} +3 -2
- package/dist/state/{schema-v22.js.map → schema-v23.js.map} +1 -1
- package/dist/state/sqlite-contract.d.ts +1 -1
- package/dist/state/sqlite-contract.js +1 -1
- package/docs/landing-page.html +702 -0
- package/docs/manager-recipes.md +303 -0
- package/package.json +5 -1
- package/scripts/serve-landing-page.mjs +39 -0
- package/skills/manage-codex-workers/SKILL.md +33 -0
- package/dist/state/schema-v22.d.ts +0 -1
|
@@ -0,0 +1,702 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Agent Conveyor - Manager Recipes for Codex Work</title>
|
|
7
|
+
<meta
|
|
8
|
+
name="description"
|
|
9
|
+
content="Agent Conveyor gives Codex manager sessions repeatable recipes for supervising workers through Dispatch with auditable evidence."
|
|
10
|
+
/>
|
|
11
|
+
<style>
|
|
12
|
+
:root {
|
|
13
|
+
color-scheme: light;
|
|
14
|
+
--ink: #17202a;
|
|
15
|
+
--muted: #607080;
|
|
16
|
+
--line: #d7dde4;
|
|
17
|
+
--page: #f7f4ec;
|
|
18
|
+
--surface: #fffdf8;
|
|
19
|
+
--coal: #24313d;
|
|
20
|
+
--green: #257a61;
|
|
21
|
+
--blue: #2b68a8;
|
|
22
|
+
--gold: #b77716;
|
|
23
|
+
--rose: #a13d4d;
|
|
24
|
+
--violet: #6753a5;
|
|
25
|
+
--shadow: 0 18px 48px rgba(23, 32, 42, 0.14);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
* {
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
body {
|
|
33
|
+
margin: 0;
|
|
34
|
+
background: var(--page);
|
|
35
|
+
color: var(--ink);
|
|
36
|
+
font-family:
|
|
37
|
+
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
|
38
|
+
"Segoe UI", sans-serif;
|
|
39
|
+
line-height: 1.5;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
a {
|
|
43
|
+
color: inherit;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.topbar {
|
|
47
|
+
align-items: center;
|
|
48
|
+
display: flex;
|
|
49
|
+
gap: 24px;
|
|
50
|
+
justify-content: space-between;
|
|
51
|
+
margin: 0 auto;
|
|
52
|
+
max-width: 1180px;
|
|
53
|
+
padding: 18px 24px;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.brand {
|
|
57
|
+
align-items: center;
|
|
58
|
+
display: flex;
|
|
59
|
+
font-weight: 800;
|
|
60
|
+
gap: 10px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.brand-mark {
|
|
64
|
+
background:
|
|
65
|
+
linear-gradient(90deg, transparent 0 9px, var(--green) 9px 15px, transparent 15px),
|
|
66
|
+
linear-gradient(180deg, var(--coal), var(--coal));
|
|
67
|
+
border-radius: 4px;
|
|
68
|
+
box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.25);
|
|
69
|
+
height: 24px;
|
|
70
|
+
width: 34px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
nav {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-wrap: wrap;
|
|
76
|
+
gap: 16px;
|
|
77
|
+
justify-content: flex-end;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
nav a {
|
|
81
|
+
color: var(--muted);
|
|
82
|
+
font-size: 14px;
|
|
83
|
+
text-decoration: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
nav a:hover {
|
|
87
|
+
color: var(--ink);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.hero {
|
|
91
|
+
border-top: 1px solid rgba(36, 49, 61, 0.1);
|
|
92
|
+
min-height: min(760px, 92vh);
|
|
93
|
+
overflow: hidden;
|
|
94
|
+
position: relative;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.hero::before {
|
|
98
|
+
background:
|
|
99
|
+
linear-gradient(115deg, rgba(37, 122, 97, 0.17), transparent 32%),
|
|
100
|
+
linear-gradient(270deg, rgba(43, 104, 168, 0.16), transparent 42%),
|
|
101
|
+
radial-gradient(circle at 74% 18%, rgba(183, 119, 22, 0.16), transparent 22%);
|
|
102
|
+
content: "";
|
|
103
|
+
inset: 0;
|
|
104
|
+
position: absolute;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.hero-inner {
|
|
108
|
+
display: grid;
|
|
109
|
+
gap: 52px;
|
|
110
|
+
grid-template-columns: minmax(0, 0.95fr) minmax(430px, 1.05fr);
|
|
111
|
+
margin: 0 auto;
|
|
112
|
+
max-width: 1180px;
|
|
113
|
+
min-height: min(710px, 86vh);
|
|
114
|
+
padding: 78px 24px 48px;
|
|
115
|
+
position: relative;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.eyebrow {
|
|
119
|
+
color: var(--green);
|
|
120
|
+
font-size: 13px;
|
|
121
|
+
font-weight: 800;
|
|
122
|
+
letter-spacing: 0;
|
|
123
|
+
margin: 0 0 16px;
|
|
124
|
+
text-transform: uppercase;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
h1 {
|
|
128
|
+
font-size: clamp(44px, 7vw, 92px);
|
|
129
|
+
line-height: 0.95;
|
|
130
|
+
letter-spacing: 0;
|
|
131
|
+
margin: 0;
|
|
132
|
+
max-width: 720px;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.hero-copy {
|
|
136
|
+
color: #354758;
|
|
137
|
+
font-size: 20px;
|
|
138
|
+
margin: 24px 0 0;
|
|
139
|
+
max-width: 650px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.actions {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-wrap: wrap;
|
|
145
|
+
gap: 12px;
|
|
146
|
+
margin-top: 34px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.button {
|
|
150
|
+
align-items: center;
|
|
151
|
+
border: 1px solid var(--coal);
|
|
152
|
+
border-radius: 6px;
|
|
153
|
+
display: inline-flex;
|
|
154
|
+
font-weight: 800;
|
|
155
|
+
gap: 8px;
|
|
156
|
+
min-height: 44px;
|
|
157
|
+
padding: 11px 16px;
|
|
158
|
+
text-decoration: none;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.button.primary {
|
|
162
|
+
background: var(--coal);
|
|
163
|
+
color: white;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.button.secondary {
|
|
167
|
+
background: rgba(255, 253, 248, 0.72);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.command {
|
|
171
|
+
background: #1d2732;
|
|
172
|
+
border-radius: 8px;
|
|
173
|
+
box-shadow: var(--shadow);
|
|
174
|
+
color: #edf7f2;
|
|
175
|
+
display: grid;
|
|
176
|
+
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
177
|
+
font-size: 14px;
|
|
178
|
+
gap: 9px;
|
|
179
|
+
margin-top: 30px;
|
|
180
|
+
max-width: 650px;
|
|
181
|
+
padding: 18px;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.command span {
|
|
185
|
+
color: #91d9bd;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.flow-stage {
|
|
189
|
+
align-self: center;
|
|
190
|
+
background: rgba(255, 253, 248, 0.74);
|
|
191
|
+
border: 1px solid rgba(36, 49, 61, 0.16);
|
|
192
|
+
border-radius: 8px;
|
|
193
|
+
box-shadow: var(--shadow);
|
|
194
|
+
display: grid;
|
|
195
|
+
gap: 18px;
|
|
196
|
+
padding: 22px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.flow-row {
|
|
200
|
+
align-items: center;
|
|
201
|
+
display: grid;
|
|
202
|
+
gap: 12px;
|
|
203
|
+
grid-template-columns: minmax(0, 1fr) 42px minmax(0, 1fr) 42px minmax(0, 1fr);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.node {
|
|
207
|
+
background: var(--surface);
|
|
208
|
+
border: 1px solid var(--line);
|
|
209
|
+
border-radius: 8px;
|
|
210
|
+
min-height: 130px;
|
|
211
|
+
padding: 16px;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.node strong {
|
|
215
|
+
display: block;
|
|
216
|
+
font-size: 17px;
|
|
217
|
+
margin-bottom: 8px;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.node p {
|
|
221
|
+
color: var(--muted);
|
|
222
|
+
font-size: 14px;
|
|
223
|
+
margin: 0;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.arrow {
|
|
227
|
+
color: var(--blue);
|
|
228
|
+
font-size: 28px;
|
|
229
|
+
font-weight: 900;
|
|
230
|
+
text-align: center;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.receipt-strip {
|
|
234
|
+
display: grid;
|
|
235
|
+
gap: 10px;
|
|
236
|
+
grid-template-columns: repeat(4, 1fr);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.receipt {
|
|
240
|
+
border-left: 4px solid var(--green);
|
|
241
|
+
color: var(--muted);
|
|
242
|
+
font-size: 13px;
|
|
243
|
+
min-height: 74px;
|
|
244
|
+
padding: 9px 10px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.receipt:nth-child(2) {
|
|
248
|
+
border-color: var(--blue);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.receipt:nth-child(3) {
|
|
252
|
+
border-color: var(--gold);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.receipt:nth-child(4) {
|
|
256
|
+
border-color: var(--rose);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
section {
|
|
260
|
+
border-top: 1px solid rgba(36, 49, 61, 0.12);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.section-inner {
|
|
264
|
+
margin: 0 auto;
|
|
265
|
+
max-width: 1180px;
|
|
266
|
+
padding: 64px 24px;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
h2 {
|
|
270
|
+
font-size: clamp(30px, 4vw, 52px);
|
|
271
|
+
letter-spacing: 0;
|
|
272
|
+
line-height: 1.02;
|
|
273
|
+
margin: 0 0 14px;
|
|
274
|
+
max-width: 860px;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.section-lede {
|
|
278
|
+
color: var(--muted);
|
|
279
|
+
font-size: 18px;
|
|
280
|
+
margin: 0 0 34px;
|
|
281
|
+
max-width: 820px;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.recipes {
|
|
285
|
+
display: grid;
|
|
286
|
+
gap: 14px;
|
|
287
|
+
grid-template-columns: repeat(5, minmax(0, 1fr));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.recipe {
|
|
291
|
+
background: var(--surface);
|
|
292
|
+
border: 1px solid var(--line);
|
|
293
|
+
border-radius: 8px;
|
|
294
|
+
display: grid;
|
|
295
|
+
gap: 12px;
|
|
296
|
+
min-height: 260px;
|
|
297
|
+
padding: 18px;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.recipe h3 {
|
|
301
|
+
font-size: 18px;
|
|
302
|
+
line-height: 1.15;
|
|
303
|
+
margin: 0;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.recipe p {
|
|
307
|
+
color: var(--muted);
|
|
308
|
+
font-size: 14px;
|
|
309
|
+
margin: 0;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.tag-row {
|
|
313
|
+
align-content: flex-start;
|
|
314
|
+
align-items: flex-start;
|
|
315
|
+
display: flex;
|
|
316
|
+
flex-wrap: wrap;
|
|
317
|
+
gap: 7px;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.tag {
|
|
321
|
+
border: 1px solid var(--line);
|
|
322
|
+
border-radius: 999px;
|
|
323
|
+
color: #425467;
|
|
324
|
+
display: inline-flex;
|
|
325
|
+
flex: 0 0 auto;
|
|
326
|
+
font-size: 12px;
|
|
327
|
+
line-height: 1.2;
|
|
328
|
+
padding: 5px 8px;
|
|
329
|
+
white-space: nowrap;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.mobile-flow-strip {
|
|
333
|
+
display: none;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.accent-green {
|
|
337
|
+
border-top: 5px solid var(--green);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.accent-blue {
|
|
341
|
+
border-top: 5px solid var(--blue);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.accent-gold {
|
|
345
|
+
border-top: 5px solid var(--gold);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.accent-rose {
|
|
349
|
+
border-top: 5px solid var(--rose);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.accent-violet {
|
|
353
|
+
border-top: 5px solid var(--violet);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.split {
|
|
357
|
+
display: grid;
|
|
358
|
+
gap: 34px;
|
|
359
|
+
grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.timeline {
|
|
363
|
+
display: grid;
|
|
364
|
+
gap: 12px;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.step {
|
|
368
|
+
align-items: start;
|
|
369
|
+
display: grid;
|
|
370
|
+
gap: 14px;
|
|
371
|
+
grid-template-columns: 34px minmax(0, 1fr);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.step-number {
|
|
375
|
+
align-items: center;
|
|
376
|
+
background: var(--coal);
|
|
377
|
+
border-radius: 50%;
|
|
378
|
+
color: white;
|
|
379
|
+
display: inline-flex;
|
|
380
|
+
font-weight: 800;
|
|
381
|
+
height: 34px;
|
|
382
|
+
justify-content: center;
|
|
383
|
+
width: 34px;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.step strong {
|
|
387
|
+
display: block;
|
|
388
|
+
margin-bottom: 4px;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.step p {
|
|
392
|
+
color: var(--muted);
|
|
393
|
+
margin: 0;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.db-grid {
|
|
397
|
+
display: grid;
|
|
398
|
+
gap: 12px;
|
|
399
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.db-item {
|
|
403
|
+
background: var(--surface);
|
|
404
|
+
border: 1px solid var(--line);
|
|
405
|
+
border-radius: 8px;
|
|
406
|
+
min-height: 112px;
|
|
407
|
+
padding: 16px;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
.db-item strong {
|
|
411
|
+
display: block;
|
|
412
|
+
margin-bottom: 6px;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
.db-item p {
|
|
416
|
+
color: var(--muted);
|
|
417
|
+
font-size: 14px;
|
|
418
|
+
margin: 0;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
.closing {
|
|
422
|
+
background: var(--coal);
|
|
423
|
+
color: white;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.closing .section-lede {
|
|
427
|
+
color: #cbd5dd;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.closing .button.secondary {
|
|
431
|
+
background: transparent;
|
|
432
|
+
border-color: #cbd5dd;
|
|
433
|
+
color: white;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
@media (max-width: 980px) {
|
|
437
|
+
.hero-inner,
|
|
438
|
+
.split {
|
|
439
|
+
grid-template-columns: 1fr;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
.flow-row {
|
|
443
|
+
grid-template-columns: 1fr;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.arrow {
|
|
447
|
+
transform: rotate(90deg);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.recipes,
|
|
451
|
+
.db-grid {
|
|
452
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
@media (max-width: 640px) {
|
|
457
|
+
.topbar {
|
|
458
|
+
align-items: flex-start;
|
|
459
|
+
flex-direction: column;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
.hero-inner {
|
|
463
|
+
gap: 28px;
|
|
464
|
+
padding-top: 46px;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.flow-stage {
|
|
468
|
+
display: none;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.mobile-flow-strip {
|
|
472
|
+
align-items: center;
|
|
473
|
+
background: rgba(255, 253, 248, 0.78);
|
|
474
|
+
border: 1px solid rgba(36, 49, 61, 0.16);
|
|
475
|
+
border-radius: 8px;
|
|
476
|
+
box-shadow: 0 12px 32px rgba(23, 32, 42, 0.12);
|
|
477
|
+
display: grid;
|
|
478
|
+
gap: 8px;
|
|
479
|
+
grid-template-columns: 1fr 18px 1fr 18px 1fr;
|
|
480
|
+
margin-top: 18px;
|
|
481
|
+
min-height: 64px;
|
|
482
|
+
padding: 12px;
|
|
483
|
+
text-align: center;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.mobile-flow-strip span {
|
|
487
|
+
color: var(--ink);
|
|
488
|
+
font-size: 13px;
|
|
489
|
+
font-weight: 800;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
.mobile-flow-strip b {
|
|
493
|
+
color: var(--blue);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
.recipes,
|
|
497
|
+
.db-grid {
|
|
498
|
+
grid-template-columns: 1fr;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
h1 {
|
|
502
|
+
font-size: 44px;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
</style>
|
|
506
|
+
</head>
|
|
507
|
+
<body>
|
|
508
|
+
<header class="topbar">
|
|
509
|
+
<div class="brand"><span class="brand-mark" aria-hidden="true"></span> Agent Conveyor</div>
|
|
510
|
+
<nav aria-label="Primary">
|
|
511
|
+
<a href="#recipes">Recipes</a>
|
|
512
|
+
<a href="#flow">Manager Flow</a>
|
|
513
|
+
<a href="#database">Audit Trail</a>
|
|
514
|
+
<a href="../README.md">README</a>
|
|
515
|
+
</nav>
|
|
516
|
+
</header>
|
|
517
|
+
|
|
518
|
+
<main>
|
|
519
|
+
<section class="hero">
|
|
520
|
+
<div class="hero-inner">
|
|
521
|
+
<div>
|
|
522
|
+
<p class="eyebrow">Local Codex manager / worker control plane</p>
|
|
523
|
+
<h1>Agent Conveyor</h1>
|
|
524
|
+
<p class="hero-copy">
|
|
525
|
+
Turn broad Codex work into repeatable manager recipes: one manager
|
|
526
|
+
supervises one worker through Dispatch, evidence gates, handoffs,
|
|
527
|
+
and an auditable SQLite trail.
|
|
528
|
+
</p>
|
|
529
|
+
<div class="actions">
|
|
530
|
+
<a class="button primary" href="#recipes">Explore recipes</a>
|
|
531
|
+
<a class="button secondary" href="manager-recipes.md">Read the docs</a>
|
|
532
|
+
</div>
|
|
533
|
+
<div class="command" aria-label="Install and recipe preview commands">
|
|
534
|
+
<code>npm install -g agent-conveyor</code>
|
|
535
|
+
<code><span>conveyor</span> manager-recipes --show goalbuddy-conveyor --json</code>
|
|
536
|
+
<code><span>conveyor</span> pair --manager-recipe goalbuddy-conveyor ...</code>
|
|
537
|
+
</div>
|
|
538
|
+
<div class="mobile-flow-strip" aria-label="Manager Dispatch Worker flow">
|
|
539
|
+
<span>Manager</span>
|
|
540
|
+
<b aria-hidden="true">→</b>
|
|
541
|
+
<span>Dispatch</span>
|
|
542
|
+
<b aria-hidden="true">→</b>
|
|
543
|
+
<span>Worker</span>
|
|
544
|
+
</div>
|
|
545
|
+
</div>
|
|
546
|
+
|
|
547
|
+
<div class="flow-stage" aria-label="Manager dispatcher worker diagram">
|
|
548
|
+
<div class="flow-row">
|
|
549
|
+
<div class="node">
|
|
550
|
+
<strong>Manager</strong>
|
|
551
|
+
<p>Selects a recipe, checks evidence, records decisions, and nudges only when the gate allows it.</p>
|
|
552
|
+
</div>
|
|
553
|
+
<div class="arrow" aria-hidden="true">→</div>
|
|
554
|
+
<div class="node">
|
|
555
|
+
<strong>Dispatch</strong>
|
|
556
|
+
<p>Routes notifications, blocks unsafe continuations, records command attempts, and keeps delivery mechanical.</p>
|
|
557
|
+
</div>
|
|
558
|
+
<div class="arrow" aria-hidden="true">→</div>
|
|
559
|
+
<div class="node">
|
|
560
|
+
<strong>Worker</strong>
|
|
561
|
+
<p>Implements one slice, returns receipts, consumes inbox messages, and hands off before context cleanup.</p>
|
|
562
|
+
</div>
|
|
563
|
+
</div>
|
|
564
|
+
<div class="receipt-strip" aria-label="Evidence receipts">
|
|
565
|
+
<div class="receipt">manager_configs<br />recipe + permissions</div>
|
|
566
|
+
<div class="receipt">routed_notifications<br />delivery + consume state</div>
|
|
567
|
+
<div class="receipt">acceptance_criteria<br />open + satisfied proof</div>
|
|
568
|
+
<div class="receipt">worker_handoffs<br />resume + cleanup receipts</div>
|
|
569
|
+
</div>
|
|
570
|
+
</div>
|
|
571
|
+
</div>
|
|
572
|
+
</section>
|
|
573
|
+
|
|
574
|
+
<section id="recipes">
|
|
575
|
+
<div class="section-inner">
|
|
576
|
+
<h2>Five manager modes for the work agents actually do</h2>
|
|
577
|
+
<p class="section-lede">
|
|
578
|
+
The setup conversation can stay free-form, but before the manager
|
|
579
|
+
starts it resolves to a named recipe or explicit custom mode. Each
|
|
580
|
+
recipe has settings, permissions, evidence gates, and cleanup rules.
|
|
581
|
+
</p>
|
|
582
|
+
<div class="recipes">
|
|
583
|
+
<article class="recipe accent-green">
|
|
584
|
+
<h3>GoalBuddy Conveyor</h3>
|
|
585
|
+
<p>Runs broad work as sequential child boards with one active child at a time.</p>
|
|
586
|
+
<div class="tag-row">
|
|
587
|
+
<span class="tag">strict</span>
|
|
588
|
+
<span class="tag">PR/CI gates</span>
|
|
589
|
+
<span class="tag">handoff before compact</span>
|
|
590
|
+
</div>
|
|
591
|
+
</article>
|
|
592
|
+
<article class="recipe accent-blue">
|
|
593
|
+
<h3>Test Coverage Loop</h3>
|
|
594
|
+
<p>Improves or proves test confidence before another worker pass can begin.</p>
|
|
595
|
+
<div class="tag-row">
|
|
596
|
+
<span class="tag">strict</span>
|
|
597
|
+
<span class="tag">coverage receipt</span>
|
|
598
|
+
<span class="tag">adversarial check</span>
|
|
599
|
+
</div>
|
|
600
|
+
</article>
|
|
601
|
+
<article class="recipe accent-gold">
|
|
602
|
+
<h3>UX Polish Loop</h3>
|
|
603
|
+
<p>Iterates visible quality using screenshots, browser evidence, and visual diffs.</p>
|
|
604
|
+
<div class="tag-row">
|
|
605
|
+
<span class="tag">guided</span>
|
|
606
|
+
<span class="tag">playwright</span>
|
|
607
|
+
<span class="tag">visual threshold</span>
|
|
608
|
+
</div>
|
|
609
|
+
</article>
|
|
610
|
+
<article class="recipe accent-rose">
|
|
611
|
+
<h3>Nudge / What's Next</h3>
|
|
612
|
+
<p>Observes, negotiates criteria, and asks focused next-step questions without taking over.</p>
|
|
613
|
+
<div class="tag-row">
|
|
614
|
+
<span class="tag">guided</span>
|
|
615
|
+
<span class="tag">criteria negotiation</span>
|
|
616
|
+
<span class="tag">low risk</span>
|
|
617
|
+
</div>
|
|
618
|
+
</article>
|
|
619
|
+
<article class="recipe accent-violet">
|
|
620
|
+
<h3>PR / CI / Merge Ralph Loop</h3>
|
|
621
|
+
<p>Drives PR readiness, CI monitoring, green merge, handoff, and fresh-worker replay.</p>
|
|
622
|
+
<div class="tag-row">
|
|
623
|
+
<span class="tag">strict</span>
|
|
624
|
+
<span class="tag">green CI</span>
|
|
625
|
+
<span class="tag">merge receipt</span>
|
|
626
|
+
</div>
|
|
627
|
+
</article>
|
|
628
|
+
</div>
|
|
629
|
+
</div>
|
|
630
|
+
</section>
|
|
631
|
+
|
|
632
|
+
<section id="flow">
|
|
633
|
+
<div class="section-inner split">
|
|
634
|
+
<div>
|
|
635
|
+
<h2>From setup to supervision without losing the thread</h2>
|
|
636
|
+
<p class="section-lede">
|
|
637
|
+
Agent Conveyor makes the manager commit to a mode before it gets
|
|
638
|
+
cut loose, then keeps every loop grounded in Dispatch and receipts.
|
|
639
|
+
</p>
|
|
640
|
+
<div class="command">
|
|
641
|
+
<code><span>conveyor</span> manager-config "$TASK" --recipe goalbuddy-conveyor --mode strict</code>
|
|
642
|
+
<code><span>conveyor</span> cycle "$TASK"</code>
|
|
643
|
+
<code><span>conveyor</span> replay "$TASK"</code>
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
646
|
+
<div class="timeline">
|
|
647
|
+
<div class="step">
|
|
648
|
+
<span class="step-number">1</span>
|
|
649
|
+
<div><strong>Resolve the recipe</strong><p>The manager turns free-form intent into `goalbuddy-conveyor`, `ux-polish-loop`, or `custom`.</p></div>
|
|
650
|
+
</div>
|
|
651
|
+
<div class="step">
|
|
652
|
+
<span class="step-number">2</span>
|
|
653
|
+
<div><strong>Lock settings</strong><p>Mode, objective, permissions, tools, epilogues, and cleanup policy are saved in SQLite.</p></div>
|
|
654
|
+
</div>
|
|
655
|
+
<div class="step">
|
|
656
|
+
<span class="step-number">3</span>
|
|
657
|
+
<div><strong>Route through Dispatch</strong><p>Notifications are delivered by push or inbox, with command attempts and side effects recorded.</p></div>
|
|
658
|
+
</div>
|
|
659
|
+
<div class="step">
|
|
660
|
+
<span class="step-number">4</span>
|
|
661
|
+
<div><strong>Finish with proof</strong><p>Completion needs receipts: tests, screenshots, CI, handoff, audit, or an explicit blocker.</p></div>
|
|
662
|
+
</div>
|
|
663
|
+
</div>
|
|
664
|
+
</div>
|
|
665
|
+
</section>
|
|
666
|
+
|
|
667
|
+
<section id="database">
|
|
668
|
+
<div class="section-inner">
|
|
669
|
+
<h2>The database is the product feedback loop</h2>
|
|
670
|
+
<p class="section-lede">
|
|
671
|
+
Recipe behavior is not hidden in chat memory. The control plane
|
|
672
|
+
records enough state to replay a run, report a bug, and improve the
|
|
673
|
+
recipes when dogfooding exposes a weak gate.
|
|
674
|
+
</p>
|
|
675
|
+
<div class="db-grid">
|
|
676
|
+
<div class="db-item"><strong>manager_configs</strong><p>Recipe name, supervision mode, permissions, tools, epilogues, and ack policy.</p></div>
|
|
677
|
+
<div class="db-item"><strong>commands</strong><p>Manager requests, Dispatch claims, retries, blocks, and side-effect risk.</p></div>
|
|
678
|
+
<div class="db-item"><strong>routed_notifications</strong><p>Worker and manager messages, delivery mode, consumed state, and failures.</p></div>
|
|
679
|
+
<div class="db-item"><strong>acceptance_criteria</strong><p>Living criteria, deferred follow-ups, satisfied proof, and rejected scope.</p></div>
|
|
680
|
+
<div class="db-item"><strong>manager_cycles</strong><p>Observation history and the manager context used for each decision.</p></div>
|
|
681
|
+
<div class="db-item"><strong>telemetry_events</strong><p>Dispatch heartbeat, routing issues, stale work, and searchable issue clues.</p></div>
|
|
682
|
+
</div>
|
|
683
|
+
</div>
|
|
684
|
+
</section>
|
|
685
|
+
|
|
686
|
+
<section class="closing">
|
|
687
|
+
<div class="section-inner">
|
|
688
|
+
<h2>Start with a recipe. Keep the receipts.</h2>
|
|
689
|
+
<p class="section-lede">
|
|
690
|
+
Agent Conveyor is for local, auditable supervision: a manager that
|
|
691
|
+
can watch useful work, ask the next good question, and prove why it
|
|
692
|
+
continued, stopped, compacted, or finished.
|
|
693
|
+
</p>
|
|
694
|
+
<div class="actions">
|
|
695
|
+
<a class="button primary" href="manager-recipes.md">Open manager recipes</a>
|
|
696
|
+
<a class="button secondary" href="../README.md">Read install docs</a>
|
|
697
|
+
</div>
|
|
698
|
+
</div>
|
|
699
|
+
</section>
|
|
700
|
+
</main>
|
|
701
|
+
</body>
|
|
702
|
+
</html>
|