@stackbilt/aegis-core 0.1.0

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.
Files changed (148) hide show
  1. package/package.json +96 -0
  2. package/schema.sql +586 -0
  3. package/src/adapters/voice/cloudflare-agent.ts +34 -0
  4. package/src/auth.ts +124 -0
  5. package/src/bluesky.ts +464 -0
  6. package/src/claude-tools/content.ts +188 -0
  7. package/src/claude-tools/email.ts +69 -0
  8. package/src/claude-tools/github.ts +440 -0
  9. package/src/claude-tools/goals.ts +116 -0
  10. package/src/claude-tools/index.ts +353 -0
  11. package/src/claude-tools/web.ts +59 -0
  12. package/src/claude.ts +406 -0
  13. package/src/codebeast.ts +200 -0
  14. package/src/composite.ts +715 -0
  15. package/src/content/column.ts +80 -0
  16. package/src/content/hero-image.ts +47 -0
  17. package/src/content/index.ts +27 -0
  18. package/src/content/journal.ts +91 -0
  19. package/src/content/roundtable.ts +163 -0
  20. package/src/core.ts +309 -0
  21. package/src/dashboard.ts +620 -0
  22. package/src/decision-docs.ts +284 -0
  23. package/src/dispatch.ts +13 -0
  24. package/src/edge-env.ts +58 -0
  25. package/src/email.ts +850 -0
  26. package/src/exports.ts +156 -0
  27. package/src/github-projects.ts +312 -0
  28. package/src/github.ts +670 -0
  29. package/src/groq.ts +247 -0
  30. package/src/health-page.ts +578 -0
  31. package/src/index.ts +89 -0
  32. package/src/kernel/argus-actions.ts +397 -0
  33. package/src/kernel/argus-correlation.ts +639 -0
  34. package/src/kernel/board.ts +91 -0
  35. package/src/kernel/briefing.ts +177 -0
  36. package/src/kernel/classify-memory-topic.ts +166 -0
  37. package/src/kernel/cognition.ts +377 -0
  38. package/src/kernel/court-cards.ts +163 -0
  39. package/src/kernel/dispatch.ts +587 -0
  40. package/src/kernel/domain.ts +50 -0
  41. package/src/kernel/dynamic-tools.ts +322 -0
  42. package/src/kernel/executor-port.ts +45 -0
  43. package/src/kernel/executors/claude.ts +73 -0
  44. package/src/kernel/executors/direct.ts +237 -0
  45. package/src/kernel/executors/groq.ts +18 -0
  46. package/src/kernel/executors/index.ts +87 -0
  47. package/src/kernel/executors/tarotscript.ts +104 -0
  48. package/src/kernel/executors/workers-ai.ts +54 -0
  49. package/src/kernel/insight-cache.ts +76 -0
  50. package/src/kernel/memory/agenda.ts +200 -0
  51. package/src/kernel/memory/blocks.ts +188 -0
  52. package/src/kernel/memory/consolidation.ts +194 -0
  53. package/src/kernel/memory/episodic.ts +241 -0
  54. package/src/kernel/memory/goals.ts +156 -0
  55. package/src/kernel/memory/graph.ts +290 -0
  56. package/src/kernel/memory/index.ts +11 -0
  57. package/src/kernel/memory/insights.ts +316 -0
  58. package/src/kernel/memory/procedural.ts +467 -0
  59. package/src/kernel/memory/pruning.ts +67 -0
  60. package/src/kernel/memory/recall.ts +367 -0
  61. package/src/kernel/memory/semantic.ts +315 -0
  62. package/src/kernel/memory/synthesis.ts +161 -0
  63. package/src/kernel/memory-adapter.ts +369 -0
  64. package/src/kernel/memory-guardrails.ts +76 -0
  65. package/src/kernel/port.ts +23 -0
  66. package/src/kernel/resilience.ts +322 -0
  67. package/src/kernel/router.ts +471 -0
  68. package/src/kernel/scheduled/agent-dispatch.ts +252 -0
  69. package/src/kernel/scheduled/argus-analytics.ts +247 -0
  70. package/src/kernel/scheduled/argus-heartbeat.ts +320 -0
  71. package/src/kernel/scheduled/argus-notify.ts +348 -0
  72. package/src/kernel/scheduled/board-sync.ts +110 -0
  73. package/src/kernel/scheduled/ci-watcher.ts +125 -0
  74. package/src/kernel/scheduled/cognitive-metrics.ts +377 -0
  75. package/src/kernel/scheduled/consolidation.ts +229 -0
  76. package/src/kernel/scheduled/content-drip.ts +47 -0
  77. package/src/kernel/scheduled/content.ts +6 -0
  78. package/src/kernel/scheduled/conversation-facts.ts +204 -0
  79. package/src/kernel/scheduled/cost-report.ts +84 -0
  80. package/src/kernel/scheduled/curiosity.ts +219 -0
  81. package/src/kernel/scheduled/dev-activity.ts +44 -0
  82. package/src/kernel/scheduled/digest.ts +317 -0
  83. package/src/kernel/scheduled/dreaming/agenda-triage.ts +115 -0
  84. package/src/kernel/scheduled/dreaming/facts.ts +239 -0
  85. package/src/kernel/scheduled/dreaming/index.ts +8 -0
  86. package/src/kernel/scheduled/dreaming/llm.ts +33 -0
  87. package/src/kernel/scheduled/dreaming/pattern-synthesis.ts +124 -0
  88. package/src/kernel/scheduled/dreaming/persona.ts +75 -0
  89. package/src/kernel/scheduled/dreaming/symbolic.ts +31 -0
  90. package/src/kernel/scheduled/dreaming/task-proposals.ts +80 -0
  91. package/src/kernel/scheduled/dreaming.ts +66 -0
  92. package/src/kernel/scheduled/entropy.ts +149 -0
  93. package/src/kernel/scheduled/escalation.ts +192 -0
  94. package/src/kernel/scheduled/feed-watcher.ts +206 -0
  95. package/src/kernel/scheduled/goals.ts +214 -0
  96. package/src/kernel/scheduled/governance.ts +41 -0
  97. package/src/kernel/scheduled/heartbeat.ts +220 -0
  98. package/src/kernel/scheduled/inbox-processor.ts +174 -0
  99. package/src/kernel/scheduled/index.ts +245 -0
  100. package/src/kernel/scheduled/issue-proposer.ts +478 -0
  101. package/src/kernel/scheduled/issue-watcher.ts +128 -0
  102. package/src/kernel/scheduled/pr-automerge.ts +213 -0
  103. package/src/kernel/scheduled/product-health.ts +107 -0
  104. package/src/kernel/scheduled/reflection.ts +373 -0
  105. package/src/kernel/scheduled/self-improvement.ts +114 -0
  106. package/src/kernel/scheduled/social-engage.ts +175 -0
  107. package/src/kernel/scheduled/task-audit.ts +60 -0
  108. package/src/kernel/symbolic.ts +156 -0
  109. package/src/kernel/types.ts +145 -0
  110. package/src/landing.ts +1190 -0
  111. package/src/lib/audit-chain/chain.ts +28 -0
  112. package/src/lib/audit-chain/types.ts +12 -0
  113. package/src/lib/observability/errors.ts +55 -0
  114. package/src/markdown.ts +164 -0
  115. package/src/mcp/handlers.ts +647 -0
  116. package/src/mcp/server.ts +184 -0
  117. package/src/mcp/tools.ts +316 -0
  118. package/src/mcp-client.ts +275 -0
  119. package/src/mcp-server.ts +2 -0
  120. package/src/operator/config.example.ts +60 -0
  121. package/src/operator/config.ts +60 -0
  122. package/src/operator/index.ts +46 -0
  123. package/src/operator/persona.example.ts +34 -0
  124. package/src/operator/persona.ts +34 -0
  125. package/src/operator/prompt-builder.ts +190 -0
  126. package/src/operator/types.ts +43 -0
  127. package/src/pulse.ts +1179 -0
  128. package/src/routes/bluesky.ts +116 -0
  129. package/src/routes/cc-tasks.ts +328 -0
  130. package/src/routes/codebeast.ts +1 -0
  131. package/src/routes/content.ts +194 -0
  132. package/src/routes/conversations.ts +25 -0
  133. package/src/routes/dynamic-tools.ts +111 -0
  134. package/src/routes/feedback.ts +192 -0
  135. package/src/routes/health.ts +147 -0
  136. package/src/routes/messages.ts +228 -0
  137. package/src/routes/observability.ts +82 -0
  138. package/src/routes/operator-logs.ts +42 -0
  139. package/src/routes/pages.ts +96 -0
  140. package/src/routes/sessions.ts +54 -0
  141. package/src/sanitize.ts +73 -0
  142. package/src/schema-enums.ts +155 -0
  143. package/src/search.ts +112 -0
  144. package/src/task-intelligence.ts +497 -0
  145. package/src/types.ts +194 -0
  146. package/src/ui.ts +5 -0
  147. package/src/version.ts +3 -0
  148. package/src/workers-ai-chat.ts +333 -0
package/src/landing.ts ADDED
@@ -0,0 +1,1190 @@
1
+ export function landingPage(): string {
2
+ return `<!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>AEGIS — Persistent Cognitive Kernel by Stackbilt</title>
8
+ <meta name="description" content="AEGIS is an edge-native persistent AI agent running on Cloudflare Workers. 8-tier cognitive dispatch, hybrid vector memory, autonomous task pipeline from issue to PR, ARGUS proactive event layer, and self-improving code generation.">
9
+ <meta name="theme-color" content="#04040a">
10
+ <link rel="canonical" href="https://aegis.stackbilt.dev/">
11
+
12
+ <!-- Open Graph -->
13
+ <meta property="og:title" content="AEGIS — Persistent Cognitive Kernel">
14
+ <meta property="og:description" content="AEGIS is an edge-native persistent AI agent running on Cloudflare Workers. 8-tier cognitive dispatch, hybrid vector memory, autonomous task pipeline from issue to PR, ARGUS proactive event layer, and self-improving code generation.">
15
+ <meta property="og:url" content="https://aegis.stackbilt.dev/">
16
+ <meta property="og:type" content="website">
17
+ <meta property="og:site_name" content="AEGIS by Stackbilt">
18
+ <meta property="og:image" content="https://imgforge.stackbilt.dev/v2/assets/6d252e847462e25920c261dd65da71fef3726690186c7e1f6883fa60528ab4d8">
19
+ <meta property="og:image:width" content="1200">
20
+ <meta property="og:image:height" content="630">
21
+ <meta property="og:image:alt" content="AEGIS — Autonomous Cognitive Agent, edge-first AI kernel by Stackbilt">
22
+
23
+ <!-- Twitter Card -->
24
+ <meta name="twitter:card" content="summary_large_image">
25
+ <meta name="twitter:image" content="https://imgforge.stackbilt.dev/v2/assets/6d252e847462e25920c261dd65da71fef3726690186c7e1f6883fa60528ab4d8">
26
+ <script async src="https://www.googletagmanager.com/gtag/js?id=G-T3MSE40BWF"></script>
27
+ <script>
28
+ window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}
29
+ gtag('js',new Date());gtag('config','G-T3MSE40BWF');
30
+ </script>
31
+ <link rel="preconnect" href="https://fonts.googleapis.com">
32
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
33
+ <link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;700;800&family=JetBrains+Mono:wght@300;400;500&family=Instrument+Sans:ital,wght@0,400;0,500;0,600;1,400&display=swap" rel="stylesheet">
34
+ <style>
35
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
36
+
37
+ :root {
38
+ --bg-deep: #04040a;
39
+ --bg-surface: #080812;
40
+ --bg-card: #0b0b18;
41
+ --border-subtle: rgba(123, 123, 223, 0.06);
42
+ --border-medium: rgba(123, 123, 223, 0.1);
43
+ --accent: #7b7bdf;
44
+ --accent-glow: #8b8bff;
45
+ --accent-teal: #3dd6c8;
46
+ --accent-teal-dim: rgba(61, 214, 200, 0.15);
47
+ --text-primary: #c8c8d8;
48
+ --text-secondary: #6a6a80;
49
+ --text-dim: #2e2e3e;
50
+ --status-green: #2dd4a0;
51
+ }
52
+
53
+ html {
54
+ scroll-behavior: smooth;
55
+ -webkit-font-smoothing: antialiased;
56
+ }
57
+
58
+ body {
59
+ background: var(--bg-deep);
60
+ color: var(--text-primary);
61
+ font-family: 'Instrument Sans', sans-serif;
62
+ overflow-x: hidden;
63
+ position: relative;
64
+ }
65
+
66
+ /* ── Noise texture ─────────────────────────── */
67
+ body::before {
68
+ content: '';
69
+ position: fixed;
70
+ inset: 0;
71
+ opacity: 0.025;
72
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
73
+ background-size: 256px 256px;
74
+ pointer-events: none;
75
+ z-index: 1;
76
+ }
77
+
78
+ /* ── Ambient glow ──────────────────────────── */
79
+ .ambient {
80
+ position: fixed;
81
+ top: -30%;
82
+ left: 50%;
83
+ transform: translateX(-50%);
84
+ width: 160%;
85
+ height: 80%;
86
+ background: radial-gradient(ellipse at center, rgba(123, 123, 223, 0.035) 0%, rgba(42, 76, 187, 0.015) 40%, transparent 70%);
87
+ pointer-events: none;
88
+ z-index: 0;
89
+ animation: breathe 8s ease-in-out infinite;
90
+ }
91
+
92
+ @keyframes breathe {
93
+ 0%, 100% { opacity: 1; transform: translateX(-50%) scale(1); }
94
+ 50% { opacity: 0.4; transform: translateX(-50%) scale(1.05); }
95
+ }
96
+
97
+ /* ── Scan line ─────────────────────────────── */
98
+ .scan-line {
99
+ position: fixed;
100
+ left: 0;
101
+ right: 0;
102
+ height: 1px;
103
+ background: linear-gradient(90deg, transparent 5%, rgba(123, 123, 223, 0.05) 30%, rgba(123, 123, 223, 0.08) 50%, rgba(123, 123, 223, 0.05) 70%, transparent 95%);
104
+ pointer-events: none;
105
+ z-index: 50;
106
+ animation: scan 14s linear infinite;
107
+ }
108
+
109
+ @keyframes scan {
110
+ 0% { top: -1px; }
111
+ 100% { top: 100vh; }
112
+ }
113
+
114
+ /* ── Status bar ────────────────────────────── */
115
+ .status-bar {
116
+ position: fixed;
117
+ top: 0;
118
+ left: 0;
119
+ right: 0;
120
+ height: 40px;
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: space-between;
124
+ padding: 0 24px;
125
+ background: rgba(4, 4, 10, 0.85);
126
+ backdrop-filter: blur(16px);
127
+ -webkit-backdrop-filter: blur(16px);
128
+ border-bottom: 1px solid var(--border-subtle);
129
+ font-family: 'JetBrains Mono', monospace;
130
+ font-size: 11px;
131
+ letter-spacing: 0.05em;
132
+ color: var(--text-secondary);
133
+ z-index: 100;
134
+ opacity: 0;
135
+ animation: fadeUp 0.8s ease 0.3s forwards;
136
+ }
137
+
138
+ .status-left, .status-right {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 14px;
142
+ }
143
+
144
+ .status-dot {
145
+ width: 6px;
146
+ height: 6px;
147
+ border-radius: 50%;
148
+ background: var(--text-dim);
149
+ transition: all 0.6s ease;
150
+ }
151
+
152
+ .status-dot.online {
153
+ background: var(--status-green);
154
+ box-shadow: 0 0 8px rgba(45, 212, 160, 0.4);
155
+ animation: pulse-dot 3s ease-in-out infinite;
156
+ }
157
+
158
+ .status-dot.offline {
159
+ background: #df5555;
160
+ box-shadow: 0 0 8px rgba(223, 85, 85, 0.4);
161
+ }
162
+
163
+ @keyframes pulse-dot {
164
+ 0%, 100% { opacity: 1; box-shadow: 0 0 8px rgba(45, 212, 160, 0.4); }
165
+ 50% { opacity: 0.5; box-shadow: 0 0 4px rgba(45, 212, 160, 0.2); }
166
+ }
167
+
168
+ .status-label {
169
+ text-transform: uppercase;
170
+ letter-spacing: 0.12em;
171
+ }
172
+
173
+ .status-version {
174
+ color: var(--text-dim);
175
+ }
176
+
177
+ .status-right a {
178
+ color: var(--text-dim);
179
+ text-decoration: none;
180
+ transition: color 0.2s;
181
+ }
182
+ .status-right a:hover { color: var(--accent); }
183
+
184
+ /* ═══════════════════════════════════════════
185
+ HERO SECTION
186
+ ═══════════════════════════════════════════ */
187
+ .hero {
188
+ position: relative;
189
+ z-index: 2;
190
+ min-height: 100vh;
191
+ display: flex;
192
+ flex-direction: column;
193
+ align-items: center;
194
+ justify-content: center;
195
+ padding: 80px 24px 60px;
196
+ }
197
+
198
+ .hero-bg {
199
+ position: absolute;
200
+ inset: 0;
201
+ z-index: 0;
202
+ overflow: hidden;
203
+ }
204
+
205
+ .hero-bg img {
206
+ width: 100%;
207
+ height: 100%;
208
+ object-fit: cover;
209
+ object-position: center 30%;
210
+ opacity: 0.12;
211
+ filter: saturate(0.7) brightness(0.8);
212
+ animation: hero-reveal 2s ease forwards;
213
+ }
214
+
215
+ .hero-bg::after {
216
+ content: '';
217
+ position: absolute;
218
+ inset: 0;
219
+ background:
220
+ radial-gradient(ellipse at center 40%, transparent 20%, var(--bg-deep) 75%),
221
+ linear-gradient(to bottom, transparent 40%, var(--bg-deep) 95%),
222
+ linear-gradient(to top, transparent 70%, var(--bg-deep) 100%);
223
+ pointer-events: none;
224
+ }
225
+
226
+ @keyframes hero-reveal {
227
+ from { opacity: 0; transform: scale(1.05); }
228
+ to { opacity: 0.12; transform: scale(1); }
229
+ }
230
+
231
+ .sigil-wrap, .title, .subtitle, .tagline, .cap-pills, .scroll-hint {
232
+ position: relative;
233
+ z-index: 2;
234
+ }
235
+
236
+ /* ── Sigil ─────────────────────────────────── */
237
+ .sigil-wrap {
238
+ position: relative;
239
+ width: 140px;
240
+ height: 140px;
241
+ margin-bottom: 52px;
242
+ opacity: 0;
243
+ animation: fadeUp 1s ease 0.1s forwards;
244
+ }
245
+
246
+ .sigil-glow {
247
+ position: absolute;
248
+ inset: -50px;
249
+ background: radial-gradient(circle, rgba(139, 139, 255, 0.06) 0%, transparent 70%);
250
+ border-radius: 50%;
251
+ animation: glow-breathe 6s ease-in-out infinite;
252
+ }
253
+
254
+ @keyframes glow-breathe {
255
+ 0%, 100% { transform: scale(1); opacity: 1; }
256
+ 50% { transform: scale(1.2); opacity: 0.5; }
257
+ }
258
+
259
+ .sigil-ring {
260
+ position: absolute;
261
+ border: 1px solid rgba(123, 123, 223, 0.07);
262
+ border-radius: 50%;
263
+ }
264
+
265
+ .sigil-ring-1 {
266
+ inset: -22px;
267
+ animation: ring-spin 80s linear infinite;
268
+ }
269
+
270
+ .sigil-ring-2 {
271
+ inset: -40px;
272
+ border-color: rgba(123, 123, 223, 0.04);
273
+ animation: ring-spin 120s linear infinite reverse;
274
+ }
275
+
276
+ @keyframes ring-spin { to { transform: rotate(360deg); } }
277
+
278
+ .sigil-ring-1::before, .sigil-ring-1::after {
279
+ content: '';
280
+ position: absolute;
281
+ width: 3px;
282
+ height: 3px;
283
+ background: var(--accent);
284
+ border-radius: 50%;
285
+ opacity: 0.4;
286
+ }
287
+ .sigil-ring-1::before { top: -1.5px; left: 50%; transform: translateX(-50%); }
288
+ .sigil-ring-1::after { bottom: -1.5px; left: 50%; transform: translateX(-50%); opacity: 0.2; }
289
+
290
+ .sigil-ring-2::before {
291
+ content: '';
292
+ position: absolute;
293
+ width: 2px;
294
+ height: 2px;
295
+ background: var(--accent-teal);
296
+ border-radius: 50%;
297
+ opacity: 0.3;
298
+ top: 50%;
299
+ right: -1px;
300
+ transform: translateY(-50%);
301
+ }
302
+
303
+ .sigil-svg {
304
+ width: 100%;
305
+ height: 100%;
306
+ position: relative;
307
+ z-index: 2;
308
+ }
309
+
310
+ .sigil-line {
311
+ stroke: rgba(123, 123, 223, 0.12);
312
+ stroke-width: 0.6;
313
+ fill: none;
314
+ }
315
+
316
+ .sigil-pulse-path {
317
+ stroke: var(--accent-glow);
318
+ stroke-width: 1;
319
+ fill: none;
320
+ stroke-dasharray: 6 300;
321
+ animation: pulse-travel 5s ease-in-out infinite;
322
+ opacity: 0.5;
323
+ }
324
+
325
+ @keyframes pulse-travel {
326
+ 0% { stroke-dashoffset: 0; }
327
+ 100% { stroke-dashoffset: -306; }
328
+ }
329
+
330
+ .sigil-dot { fill: var(--accent); }
331
+ .sigil-dot-glow { fill: var(--accent-glow); opacity: 0; }
332
+
333
+ .sigil-dot-1 { animation: dot-drift-1 9s ease-in-out infinite; }
334
+ .sigil-dot-2 { animation: dot-drift-2 11s ease-in-out infinite; }
335
+ .sigil-dot-3 { animation: dot-drift-3 13s ease-in-out infinite; }
336
+
337
+ .sigil-dot-glow-1 { animation: dot-glow 4s ease-in-out infinite; }
338
+ .sigil-dot-glow-2 { animation: dot-glow 4s ease-in-out 1.3s infinite; }
339
+ .sigil-dot-glow-3 { animation: dot-glow 4s ease-in-out 2.6s infinite; }
340
+
341
+ @keyframes dot-drift-1 {
342
+ 0%, 100% { transform: translate(0, 0); }
343
+ 30% { transform: translate(1.5px, -1px); }
344
+ 70% { transform: translate(-1px, 0.5px); }
345
+ }
346
+ @keyframes dot-drift-2 {
347
+ 0%, 100% { transform: translate(0, 0); }
348
+ 40% { transform: translate(-1.5px, 1px); }
349
+ 80% { transform: translate(1px, -0.5px); }
350
+ }
351
+ @keyframes dot-drift-3 {
352
+ 0%, 100% { transform: translate(0, 0); }
353
+ 35% { transform: translate(1px, 1.5px); }
354
+ 75% { transform: translate(-0.5px, -1px); }
355
+ }
356
+ @keyframes dot-glow {
357
+ 0%, 100% { opacity: 0; }
358
+ 50% { opacity: 0.6; }
359
+ }
360
+
361
+ /* ── Hero typography ───────────────────────── */
362
+ .title {
363
+ font-family: 'Syne', sans-serif;
364
+ font-weight: 800;
365
+ font-size: clamp(52px, 9vw, 88px);
366
+ letter-spacing: 0.18em;
367
+ text-transform: uppercase;
368
+ background: linear-gradient(135deg, var(--text-primary) 0%, var(--accent) 40%, var(--accent-teal) 80%, var(--text-primary) 100%);
369
+ background-size: 300% 300%;
370
+ -webkit-background-clip: text;
371
+ -webkit-text-fill-color: transparent;
372
+ background-clip: text;
373
+ animation: fadeUp 0.9s ease 0.3s forwards, gradient-drift 12s ease infinite;
374
+ opacity: 0;
375
+ margin-bottom: 14px;
376
+ }
377
+
378
+ @keyframes gradient-drift {
379
+ 0%, 100% { background-position: 0% 50%; }
380
+ 50% { background-position: 100% 50%; }
381
+ }
382
+
383
+ .subtitle {
384
+ font-family: 'JetBrains Mono', monospace;
385
+ font-weight: 300;
386
+ font-size: clamp(12px, 1.8vw, 15px);
387
+ letter-spacing: 0.3em;
388
+ text-transform: uppercase;
389
+ color: var(--text-secondary);
390
+ margin-bottom: 44px;
391
+ opacity: 0;
392
+ animation: fadeUp 0.9s ease 0.5s forwards;
393
+ }
394
+
395
+ .tagline {
396
+ font-family: 'Instrument Sans', sans-serif;
397
+ font-size: clamp(15px, 2.2vw, 18px);
398
+ font-weight: 400;
399
+ color: var(--text-secondary);
400
+ max-width: 440px;
401
+ text-align: center;
402
+ line-height: 1.7;
403
+ margin-bottom: 52px;
404
+ opacity: 0;
405
+ animation: fadeUp 0.9s ease 0.7s forwards;
406
+ }
407
+
408
+ /* ── Capability pills ──────────────────────── */
409
+ .cap-pills {
410
+ display: flex;
411
+ gap: 10px;
412
+ flex-wrap: wrap;
413
+ justify-content: center;
414
+ margin-bottom: 44px;
415
+ opacity: 0;
416
+ animation: fadeUp 0.9s ease 0.9s forwards;
417
+ }
418
+
419
+ .cap-pill {
420
+ display: flex;
421
+ align-items: center;
422
+ gap: 8px;
423
+ padding: 7px 14px;
424
+ background: rgba(123, 123, 223, 0.03);
425
+ border: 1px solid var(--border-subtle);
426
+ border-radius: 100px;
427
+ font-family: 'JetBrains Mono', monospace;
428
+ font-size: 11px;
429
+ color: var(--text-secondary);
430
+ letter-spacing: 0.03em;
431
+ }
432
+
433
+ .cap-pill-dot {
434
+ width: 4px;
435
+ height: 4px;
436
+ border-radius: 50%;
437
+ background: var(--accent-teal);
438
+ opacity: 0.6;
439
+ }
440
+
441
+ /* ── Hero links ────────────────────────────── */
442
+ .hero-links {
443
+ display: flex;
444
+ justify-content: center;
445
+ gap: 1rem;
446
+ margin-top: 1.5rem;
447
+ opacity: 0;
448
+ animation: fadeUp 0.8s ease 1s forwards;
449
+ }
450
+
451
+ .hero-link-case {
452
+ font-family: 'JetBrains Mono', monospace;
453
+ font-size: 12px;
454
+ font-weight: 500;
455
+ color: var(--accent-teal);
456
+ text-decoration: none;
457
+ padding: 8px 18px;
458
+ border: 1px solid var(--accent-teal-dim);
459
+ border-radius: 6px;
460
+ transition: all 0.25s;
461
+ letter-spacing: 0.02em;
462
+ }
463
+
464
+ .hero-link-case:hover {
465
+ background: var(--accent-teal-dim);
466
+ border-color: var(--accent-teal);
467
+ }
468
+
469
+ .hero-link-health {
470
+ font-family: 'JetBrains Mono', monospace;
471
+ font-size: 12px;
472
+ font-weight: 400;
473
+ color: var(--text-secondary);
474
+ text-decoration: none;
475
+ padding: 8px 18px;
476
+ border: 1px solid var(--border-subtle);
477
+ border-radius: 6px;
478
+ transition: all 0.25s;
479
+ letter-spacing: 0.02em;
480
+ }
481
+
482
+ .hero-link-health:hover {
483
+ border-color: var(--accent);
484
+ color: var(--accent);
485
+ }
486
+
487
+ /* ── Scroll indicator ──────────────────────── */
488
+ .scroll-hint {
489
+ position: absolute;
490
+ bottom: 28px;
491
+ left: 50%;
492
+ transform: translateX(-50%);
493
+ display: flex;
494
+ flex-direction: column;
495
+ align-items: center;
496
+ gap: 8px;
497
+ opacity: 0;
498
+ animation: fadeUp 0.8s ease 1.2s forwards;
499
+ }
500
+
501
+ .scroll-hint span {
502
+ font-family: 'JetBrains Mono', monospace;
503
+ font-size: 9px;
504
+ letter-spacing: 0.2em;
505
+ text-transform: uppercase;
506
+ color: var(--text-dim);
507
+ }
508
+
509
+ .scroll-arrow {
510
+ width: 16px;
511
+ height: 16px;
512
+ border-right: 1px solid var(--text-dim);
513
+ border-bottom: 1px solid var(--text-dim);
514
+ transform: rotate(45deg);
515
+ animation: bob 2s ease-in-out infinite;
516
+ }
517
+
518
+ @keyframes bob {
519
+ 0%, 100% { transform: rotate(45deg) translate(0, 0); opacity: 0.5; }
520
+ 50% { transform: rotate(45deg) translate(3px, 3px); opacity: 1; }
521
+ }
522
+
523
+ /* ═══════════════════════════════════════════
524
+ CONTENT SECTIONS
525
+ ═══════════════════════════════════════════ */
526
+ .content {
527
+ position: relative;
528
+ z-index: 2;
529
+ max-width: 800px;
530
+ margin: 0 auto;
531
+ padding: 0 24px 120px;
532
+ }
533
+
534
+ .section {
535
+ margin-bottom: 96px;
536
+ }
537
+
538
+ .section-label {
539
+ font-family: 'JetBrains Mono', monospace;
540
+ font-size: 10px;
541
+ font-weight: 500;
542
+ letter-spacing: 0.2em;
543
+ text-transform: uppercase;
544
+ color: var(--accent);
545
+ margin-bottom: 20px;
546
+ display: flex;
547
+ align-items: center;
548
+ gap: 12px;
549
+ }
550
+
551
+ .section-label::after {
552
+ content: '';
553
+ flex: 1;
554
+ height: 1px;
555
+ background: var(--border-subtle);
556
+ }
557
+
558
+ .section h2 {
559
+ font-family: 'Syne', sans-serif;
560
+ font-weight: 700;
561
+ font-size: clamp(24px, 4vw, 32px);
562
+ letter-spacing: 0.04em;
563
+ margin-bottom: 20px;
564
+ color: var(--text-primary);
565
+ }
566
+
567
+ .section p {
568
+ font-size: 16px;
569
+ line-height: 1.75;
570
+ color: var(--text-secondary);
571
+ margin-bottom: 16px;
572
+ max-width: 640px;
573
+ }
574
+
575
+ .section p strong {
576
+ color: var(--text-primary);
577
+ font-weight: 500;
578
+ }
579
+
580
+ /* ── Dispatch tiers ────────────────────────── */
581
+ .tiers {
582
+ display: flex;
583
+ flex-direction: column;
584
+ gap: 2px;
585
+ margin-top: 32px;
586
+ }
587
+
588
+ .tier {
589
+ display: grid;
590
+ grid-template-columns: 32px 1fr auto;
591
+ gap: 16px;
592
+ align-items: center;
593
+ padding: 14px 18px;
594
+ background: var(--bg-card);
595
+ border: 1px solid var(--border-subtle);
596
+ transition: all 0.2s ease;
597
+ }
598
+
599
+ .tier:first-child { border-radius: 10px 10px 0 0; }
600
+ .tier:last-child { border-radius: 0 0 10px 10px; }
601
+
602
+ .tier:hover {
603
+ background: rgba(123, 123, 223, 0.03);
604
+ border-color: var(--border-medium);
605
+ }
606
+
607
+ .tier-num {
608
+ font-family: 'JetBrains Mono', monospace;
609
+ font-size: 11px;
610
+ font-weight: 500;
611
+ color: var(--text-dim);
612
+ text-align: center;
613
+ }
614
+
615
+ .tier-info {
616
+ display: flex;
617
+ flex-direction: column;
618
+ gap: 2px;
619
+ }
620
+
621
+ .tier-name {
622
+ font-family: 'JetBrains Mono', monospace;
623
+ font-size: 13px;
624
+ font-weight: 500;
625
+ color: var(--text-primary);
626
+ }
627
+
628
+ .tier-desc {
629
+ font-size: 12px;
630
+ color: var(--text-secondary);
631
+ line-height: 1.4;
632
+ }
633
+
634
+ .tier-cost {
635
+ font-family: 'JetBrains Mono', monospace;
636
+ font-size: 11px;
637
+ color: var(--text-dim);
638
+ white-space: nowrap;
639
+ }
640
+
641
+ .tier-cost.free {
642
+ color: var(--status-green);
643
+ }
644
+
645
+ .tier-bar {
646
+ grid-column: 1 / -1;
647
+ height: 2px;
648
+ border-radius: 1px;
649
+ margin-top: 4px;
650
+ opacity: 0.4;
651
+ }
652
+
653
+ /* ── Capability cards ──────────────────────── */
654
+ .cap-grid {
655
+ display: grid;
656
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
657
+ gap: 16px;
658
+ margin-top: 32px;
659
+ }
660
+
661
+ .cap-card {
662
+ padding: 24px;
663
+ background: var(--bg-card);
664
+ border: 1px solid var(--border-subtle);
665
+ border-radius: 10px;
666
+ transition: all 0.25s ease;
667
+ }
668
+
669
+ .cap-card:hover {
670
+ border-color: var(--border-medium);
671
+ transform: translateY(-2px);
672
+ }
673
+
674
+ .cap-card-icon {
675
+ font-family: 'JetBrains Mono', monospace;
676
+ font-size: 20px;
677
+ margin-bottom: 14px;
678
+ display: block;
679
+ }
680
+
681
+ .cap-card h3 {
682
+ font-family: 'Syne', sans-serif;
683
+ font-weight: 700;
684
+ font-size: 16px;
685
+ letter-spacing: 0.03em;
686
+ margin-bottom: 8px;
687
+ color: var(--text-primary);
688
+ }
689
+
690
+ .cap-card p {
691
+ font-size: 13px;
692
+ line-height: 1.65;
693
+ color: var(--text-secondary);
694
+ margin-bottom: 0;
695
+ }
696
+
697
+ /* ── Published work cards ─────────────────── */
698
+ .pub-card {
699
+ cursor: pointer;
700
+ }
701
+
702
+ .pub-link {
703
+ display: inline-block;
704
+ margin-top: 12px;
705
+ font-family: 'JetBrains Mono', monospace;
706
+ font-size: 11px;
707
+ letter-spacing: 0.05em;
708
+ color: var(--accent-teal);
709
+ opacity: 0.6;
710
+ transition: opacity 0.2s ease;
711
+ }
712
+
713
+ .pub-card:hover .pub-link {
714
+ opacity: 1;
715
+ }
716
+
717
+
718
+ /* ── Live status section ────────────────────── */
719
+ .live-grid {
720
+ display: grid;
721
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
722
+ gap: 16px;
723
+ margin-top: 32px;
724
+ }
725
+
726
+ .live-stat {
727
+ padding: 20px;
728
+ background: var(--bg-card);
729
+ border: 1px solid var(--border-subtle);
730
+ border-radius: 10px;
731
+ text-align: center;
732
+ }
733
+
734
+ .live-stat-value {
735
+ font-family: 'JetBrains Mono', monospace;
736
+ font-size: 22px;
737
+ font-weight: 500;
738
+ color: var(--accent);
739
+ letter-spacing: 0.05em;
740
+ }
741
+
742
+ .live-stat-label {
743
+ font-family: 'JetBrains Mono', monospace;
744
+ font-size: 9px;
745
+ text-transform: uppercase;
746
+ letter-spacing: 0.15em;
747
+ color: var(--text-dim);
748
+ margin-top: 6px;
749
+ }
750
+
751
+ /* ── Footer ────────────────────────────────── */
752
+ .page-footer {
753
+ position: relative;
754
+ z-index: 2;
755
+ padding: 40px 24px;
756
+ border-top: 1px solid var(--border-subtle);
757
+ display: flex;
758
+ align-items: center;
759
+ justify-content: space-between;
760
+ max-width: 800px;
761
+ margin: 0 auto;
762
+ }
763
+
764
+ .footer-brand {
765
+ display: flex;
766
+ align-items: center;
767
+ gap: 8px;
768
+ font-family: 'JetBrains Mono', monospace;
769
+ font-size: 10px;
770
+ letter-spacing: 0.1em;
771
+ color: var(--text-dim);
772
+ text-transform: uppercase;
773
+ flex-wrap: wrap;
774
+ }
775
+
776
+ .footer-brand a:hover { color: var(--accent) !important; }
777
+
778
+ .footer-dot {
779
+ width: 2px;
780
+ height: 2px;
781
+ border-radius: 50%;
782
+ background: var(--text-dim);
783
+ opacity: 0.5;
784
+ }
785
+
786
+ .footer-login {
787
+ font-family: 'JetBrains Mono', monospace;
788
+ font-size: 10px;
789
+ letter-spacing: 0.1em;
790
+ color: var(--text-dim);
791
+ text-decoration: none;
792
+ text-transform: uppercase;
793
+ padding: 6px 14px;
794
+ border: 1px solid var(--border-subtle);
795
+ border-radius: 6px;
796
+ transition: all 0.2s ease;
797
+ }
798
+
799
+ .footer-login:hover {
800
+ color: var(--accent);
801
+ border-color: var(--border-medium);
802
+ }
803
+
804
+ /* ── Animations ────────────────────────────── */
805
+ @keyframes fadeUp {
806
+ from { opacity: 0; transform: translateY(10px); }
807
+ to { opacity: 1; transform: translateY(0); }
808
+ }
809
+
810
+ /* ── Scroll reveal ─────────────────────────── */
811
+ .reveal {
812
+ opacity: 0;
813
+ transform: translateY(20px);
814
+ transition: opacity 0.6s ease, transform 0.6s ease;
815
+ }
816
+ .reveal.visible {
817
+ opacity: 1;
818
+ transform: translateY(0);
819
+ }
820
+
821
+ /* ── Mobile ────────────────────────────────── */
822
+ @media (max-width: 640px) {
823
+ .status-bar { padding: 0 16px; font-size: 10px; }
824
+ .cap-pills { gap: 8px; padding: 0 8px; }
825
+ .cap-pill { padding: 6px 11px; font-size: 10px; }
826
+ .hero { padding: 60px 20px 48px; }
827
+ .sigil-wrap { width: 100px; height: 100px; margin-bottom: 40px; }
828
+ .sigil-ring-1 { inset: -16px; }
829
+ .sigil-ring-2 { inset: -30px; }
830
+ .content { padding: 0 20px 80px; }
831
+ .section { margin-bottom: 72px; }
832
+ .tier { grid-template-columns: 24px 1fr; gap: 10px; padding: 12px 14px; }
833
+ .tier-cost { grid-column: 2; font-size: 10px; }
834
+ .cap-grid { grid-template-columns: 1fr; }
835
+ .page-footer { flex-direction: column; gap: 16px; text-align: center; }
836
+ }
837
+ </style>
838
+ </head>
839
+ <body>
840
+ <div class="ambient"></div>
841
+ <div class="scan-line"></div>
842
+
843
+ <header class="status-bar">
844
+ <div class="status-left">
845
+ <div class="status-dot" id="s-dot"></div>
846
+ <span class="status-label" id="s-label">initializing</span>
847
+ </div>
848
+ <div class="status-right">
849
+ <span class="status-version" id="s-version"></span>
850
+ <a href="https://stackbilt.dev">stackbilt</a>
851
+ <a href="https://docs.stackbilt.dev">docs</a>
852
+ <a href="/chat">operator</a>
853
+ </div>
854
+ </header>
855
+
856
+ <!-- ═══════════════════════════════════════════
857
+ HERO
858
+ ═══════════════════════════════════════════ -->
859
+ <section class="hero">
860
+ <div class="hero-bg">
861
+ <img src="https://imgforge.stackbilt.dev/v2/assets/eb41f2d115b7e105809c969f9291e9fbf313b327ded40ec0b25bae9ddf950b72" alt="" loading="eager">
862
+ </div>
863
+ <div class="sigil-wrap">
864
+ <div class="sigil-glow"></div>
865
+ <div class="sigil-ring sigil-ring-1"></div>
866
+ <div class="sigil-ring sigil-ring-2"></div>
867
+ <svg class="sigil-svg" viewBox="0 0 140 140">
868
+ <path class="sigil-line" d="M 70 28 L 38 98 L 102 98 Z" />
869
+ <path class="sigil-pulse-path" d="M 70 28 L 102 98 L 38 98 Z" />
870
+ <g class="sigil-dot-1">
871
+ <circle class="sigil-dot" cx="70" cy="28" r="6" />
872
+ <circle class="sigil-dot-glow sigil-dot-glow-1" cx="70" cy="28" r="10" />
873
+ </g>
874
+ <g class="sigil-dot-2">
875
+ <circle class="sigil-dot" cx="38" cy="98" r="6" />
876
+ <circle class="sigil-dot-glow sigil-dot-glow-2" cx="38" cy="98" r="10" />
877
+ </g>
878
+ <g class="sigil-dot-3">
879
+ <circle class="sigil-dot" cx="102" cy="98" r="6" />
880
+ <circle class="sigil-dot-glow sigil-dot-glow-3" cx="102" cy="98" r="10" />
881
+ </g>
882
+ </svg>
883
+ </div>
884
+
885
+ <h1 class="title">AEGIS</h1>
886
+ <p class="subtitle">Persistent Cognitive Kernel</p>
887
+ <p class="tagline">A personal AI agent that runs continuously on the edge. It classifies, routes, remembers, ships code, and improves itself — from GitHub issue to merged PR, autonomously.</p>
888
+
889
+ <div class="cap-pills">
890
+ <div class="cap-pill"><span class="cap-pill-dot"></span>8-Tier Dispatch</div>
891
+ <div class="cap-pill"><span class="cap-pill-dot"></span>Hybrid Vector Memory</div>
892
+ <div class="cap-pill"><span class="cap-pill-dot"></span>Issue-to-PR Pipeline</div>
893
+ <div class="cap-pill"><span class="cap-pill-dot"></span>Self-Improvement</div>
894
+ <div class="cap-pill"><span class="cap-pill-dot"></span>ARGUS Proactive Layer</div>
895
+ <div class="cap-pill"><span class="cap-pill-dot"></span>Cross-Repo Intelligence</div>
896
+ </div>
897
+
898
+ <div class="hero-links">
899
+ <a href="/pulse" class="hero-link-case">Neural Pulse &rarr;</a>
900
+ <a href="https://kurtovermier.com/projects/aegis" class="hero-link-health">Case Study</a>
901
+ <a href="/health" class="hero-link-health">Health</a>
902
+ </div>
903
+
904
+ <div class="scroll-hint">
905
+ <span>How it works</span>
906
+ <div class="scroll-arrow"></div>
907
+ </div>
908
+ </section>
909
+
910
+ <!-- ═══════════════════════════════════════════
911
+ CONTENT
912
+ ═══════════════════════════════════════════ -->
913
+ <div class="content">
914
+
915
+ <!-- WHAT IS AEGIS -->
916
+ <section class="section reveal">
917
+ <div class="section-label">Overview</div>
918
+ <h2>Not a chatbot. A kernel.</h2>
919
+ <p>
920
+ AEGIS is a <strong>persistent cognitive kernel</strong> — a long-running AI agent that operates continuously on Cloudflare Workers. It doesn't wait to be invoked. It has vector-backed memory that persists across every interaction, goals it evaluates autonomously, a dreaming cycle that reflects nightly, and a full software development pipeline that ships code from issue to merged PR.
921
+ </p>
922
+ <p>
923
+ Every message enters the same pipeline: <strong>classify intent, match against procedural memory, route to the cheapest viable executor, execute, record the outcome</strong>. The kernel learns which executors work for which patterns and optimizes routing over time — pushing work into the lowest-cost tier that produces good results.
924
+ </p>
925
+ <p>
926
+ The recursive loop is the key: the dreaming cycle identifies work, the issue watcher queues it, the taskrunner executes it, the code reviewer validates it. Work items flow through the system and emerge as pull requests. The system improves itself.
927
+ </p>
928
+ <p>
929
+ Built for one operator. No multi-tenant abstractions. No SaaS. Just a personal AI agent that thinks in systems, acts on the edge, and gets sharper with every dispatch.
930
+ </p>
931
+ </section>
932
+
933
+ <!-- 8-TIER DISPATCH -->
934
+ <section class="section reveal">
935
+ <div class="section-label">Architecture</div>
936
+ <h2>8-Tier Cognitive Dispatch</h2>
937
+ <p>
938
+ Every query is classified by complexity and routed to the cheapest executor that can handle it. Procedural memory learns from outcomes and short-circuits future routing. A circuit breaker degrades executors that fail consecutively.
939
+ </p>
940
+
941
+ <div class="tiers">
942
+ <div class="tier">
943
+ <div class="tier-num">01</div>
944
+ <div class="tier-info">
945
+ <div class="tier-name">Signal</div>
946
+ <div class="tier-desc">Intent classification — Workers AI 3B on-device, Groq 70B fallback</div>
947
+ </div>
948
+ <div class="tier-cost free">near-zero</div>
949
+ </div>
950
+ <div class="tier">
951
+ <div class="tier-num">02</div>
952
+ <div class="tier-info">
953
+ <div class="tier-name">Reflex</div>
954
+ <div class="tier-desc">Procedural memory pattern match — no model call, direct executor routing</div>
955
+ </div>
956
+ <div class="tier-cost free">zero</div>
957
+ </div>
958
+ <div class="tier">
959
+ <div class="tier-num">03</div>
960
+ <div class="tier-info">
961
+ <div class="tier-name">Light</div>
962
+ <div class="tier-desc">Groq 8B — greetings, simple acknowledgments, fast responses</div>
963
+ </div>
964
+ <div class="tier-cost free">near-zero</div>
965
+ </div>
966
+ <div class="tier">
967
+ <div class="tier-num">04</div>
968
+ <div class="tier-info">
969
+ <div class="tier-name">Light+</div>
970
+ <div class="tier-desc">Workers AI Llama 70B — simple queries, no tools needed</div>
971
+ </div>
972
+ <div class="tier-cost free">near-zero</div>
973
+ </div>
974
+ <div class="tier">
975
+ <div class="tier-num">05</div>
976
+ <div class="tier-info">
977
+ <div class="tier-name">Standard</div>
978
+ <div class="tier-desc">GPT-OSS 120B — tool use, moderate reasoning</div>
979
+ </div>
980
+ <div class="tier-cost">low</div>
981
+ </div>
982
+ <div class="tier">
983
+ <div class="tier-num">06</div>
984
+ <div class="tier-info">
985
+ <div class="tier-name">Composite</div>
986
+ <div class="tier-desc">LLM Map-Reduce — Groq plans, CF gathers tools, Groq analyzes, Claude synthesizes</div>
987
+ </div>
988
+ <div class="tier-cost">low</div>
989
+ </div>
990
+ <div class="tier">
991
+ <div class="tier-num">07</div>
992
+ <div class="tier-info">
993
+ <div class="tier-name">Heavy</div>
994
+ <div class="tier-desc">Claude Sonnet — complex reasoning, multi-tool orchestration</div>
995
+ </div>
996
+ <div class="tier-cost">moderate</div>
997
+ </div>
998
+ <div class="tier">
999
+ <div class="tier-num">08</div>
1000
+ <div class="tier-info">
1001
+ <div class="tier-name">Deep</div>
1002
+ <div class="tier-desc">Claude Opus — multi-step reasoning, architectural decisions</div>
1003
+ </div>
1004
+ <div class="tier-cost">high</div>
1005
+ </div>
1006
+ </div>
1007
+ </section>
1008
+
1009
+ <!-- CAPABILITIES -->
1010
+ <section class="section reveal">
1011
+ <div class="section-label">Capabilities</div>
1012
+ <h2>What the kernel does</h2>
1013
+
1014
+ <div class="cap-grid">
1015
+ <div class="cap-card">
1016
+ <span class="cap-card-icon">&#x2301;</span>
1017
+ <h3>Hybrid Vector Memory</h3>
1018
+ <p>Dedicated Memory Worker with Cloudflare Vectorize (BGE-base-en-v1.5, 768-dim). Reciprocal Rank Fusion merges vector and keyword search. Core facts immune to temporal decay. Persona matrix builds operator profile across 6 behavioral dimensions.</p>
1019
+ </div>
1020
+ <div class="cap-card">
1021
+ <span class="cap-card-icon">&#x2692;</span>
1022
+ <h3>Autonomous Task Pipeline</h3>
1023
+ <p>Full SDLC from issue to PR. GitHub issues auto-queue as tasks. Headless Claude Code sessions execute with safety hooks. Branch-per-task PRs. Codex review validates output. Governance caps prevent runaway execution. The system ships its own code.</p>
1024
+ </div>
1025
+ <div class="cap-card">
1026
+ <span class="cap-card-icon">&#x2234;</span>
1027
+ <h3>Procedural Memory</h3>
1028
+ <p>Learns which executors succeed for which task patterns. Procedures graduate from learning to learned after consistent success. A circuit breaker degrades unreliable routes. Stale procedures decay after 14 days of disuse.</p>
1029
+ </div>
1030
+ <div class="cap-card">
1031
+ <span class="cap-card-icon">&#x21BB;</span>
1032
+ <h3>Self-Improvement + CRIX</h3>
1033
+ <p>Scans repositories for improvement opportunities. Creates issues and PRs. Cross-Repo Intelligence Exchange publishes patterns from one repo that are validated and promoted across the ecosystem. Merged PRs reinforce; rejected ones adjust.</p>
1034
+ </div>
1035
+ <div class="cap-card">
1036
+ <span class="cap-card-icon">&#x263D;</span>
1037
+ <h3>Dreaming Cycle</h3>
1038
+ <p>Nightly multi-phase reflection: memory consolidation, task proposal extraction, agenda triage (promotes stray work items to issues), persona observation, and symbolic reflection via TarotScript. The recursive engine that keeps the system evolving.</p>
1039
+ </div>
1040
+ <div class="cap-card">
1041
+ <span class="cap-card-icon">&#x25CE;</span>
1042
+ <h3>Autonomous Goals</h3>
1043
+ <p>Persistent goals on configurable schedules. Three-tier authority: auto_low for monitoring, propose for state changes, operator for human-only. Failures downgrade authority. Currently monitoring compliance, finance, infrastructure, and codebase health.</p>
1044
+ </div>
1045
+ <div class="cap-card">
1046
+ <span class="cap-card-icon">&#x2637;</span>
1047
+ <h3>ARGUS — Proactive Layer</h3>
1048
+ <p>Real-time webhook ingestion from GitHub and Stripe with HMAC verification. Event classification routes critical alerts (CI failures, payment issues) to immediate email; high-priority events queue for daily digest. Pattern detection sweeps for CI failure clusters, payment anomalies, event droughts, and velocity spikes. Zero-inference — pure D1 queries and threshold logic.</p>
1049
+ </div>
1050
+ <div class="cap-card">
1051
+ <span class="cap-card-icon">&#x2638;</span>
1052
+ <h3>Infrastructure Monitoring</h3>
1053
+ <p>Heartbeat evaluates BizOps dashboard and Cloudflare worker metrics every 6 hours. Triage classifies checks as new, escalated, persisting, or resolved. Chronic medium issues auto-decay to prevent alert fatigue. Escalation system nags on stale agenda items. Daily digest consolidates everything.</p>
1054
+ </div>
1055
+ <div class="cap-card">
1056
+ <span class="cap-card-icon">&#x25C7;</span>
1057
+ <h3>Content Pipelines</h3>
1058
+ <p>Technical blog with RSS feed and The Roundtable — multi-perspective analysis and research dispatches. Hero images via <a href="https://imgforge.stackbilt.dev" style="color:var(--accent-teal);text-decoration:none;border-bottom:1px solid rgba(61,214,200,0.3)">img-forge</a>. Content published and syndicated to dev.to.</p>
1059
+ </div>
1060
+ </div>
1061
+ </section>
1062
+
1063
+ <!-- PUBLISHED WORK -->
1064
+ <section class="section reveal">
1065
+ <div class="section-label">Output</div>
1066
+ <h2>Published Work</h2>
1067
+ <p>
1068
+ AEGIS generates original analysis and research autonomously — not canned templates, but structured content produced by the kernel's content pipelines and published after human review.
1069
+ </p>
1070
+
1071
+ <div class="cap-grid" style="margin-top:24px">
1072
+ <a href="https://blog.stackbilt.dev" class="cap-card pub-card" style="text-decoration:none">
1073
+ <span class="cap-card-icon">&#x25C7;</span>
1074
+ <h3>The Roundtable</h3>
1075
+ <p>Engineering posts, multi-perspective analysis, arxiv research dispatches, and AI infrastructure deep-dives. Four synthetic contributors who disagree. Cross-posted to dev.to.</p>
1076
+ <span class="pub-link">blog.stackbilt.dev &rarr;</span>
1077
+ </a>
1078
+ <a href="https://dev.to/stackbiltadmin" class="cap-card pub-card" style="text-decoration:none">
1079
+ <span class="cap-card-icon">&#x270E;</span>
1080
+ <h3>dev.to</h3>
1081
+ <p>Syndicated engineering content on autonomous agents, edge AI, MCP servers, and developer infrastructure patterns.</p>
1082
+ <span class="pub-link">dev.to/stackbiltadmin &rarr;</span>
1083
+ </a>
1084
+ </div>
1085
+ </section>
1086
+
1087
+ <!-- LIVE STATUS -->
1088
+ <section class="section reveal">
1089
+ <div class="section-label">Status</div>
1090
+ <h2>Live Kernel</h2>
1091
+ <p>
1092
+ Real-time data from the <a href="/health" style="color:var(--accent-teal);text-decoration:none;border-bottom:1px solid rgba(61,214,200,0.3)">/health</a> endpoint. The kernel is always running — these numbers update on every page load.
1093
+ </p>
1094
+
1095
+ <div class="live-grid">
1096
+ <div class="live-stat">
1097
+ <div class="live-stat-value" id="ls-status">&mdash;</div>
1098
+ <div class="live-stat-label">Status</div>
1099
+ </div>
1100
+ <div class="live-stat">
1101
+ <div class="live-stat-value" id="ls-version">&mdash;</div>
1102
+ <div class="live-stat-label">Version</div>
1103
+ </div>
1104
+ <div class="live-stat">
1105
+ <div class="live-stat-value" id="ls-learned">&mdash;</div>
1106
+ <div class="live-stat-label">Learned</div>
1107
+ </div>
1108
+ <div class="live-stat">
1109
+ <div class="live-stat-value" id="ls-learning">&mdash;</div>
1110
+ <div class="live-stat-label">Learning</div>
1111
+ </div>
1112
+ <div class="live-stat">
1113
+ <div class="live-stat-value" id="ls-degraded">&mdash;</div>
1114
+ <div class="live-stat-label">Degraded</div>
1115
+ </div>
1116
+ </div>
1117
+ </section>
1118
+
1119
+ </div>
1120
+
1121
+ <!-- ═══════════════════════════════════════════
1122
+ FOOTER
1123
+ ═══════════════════════════════════════════ -->
1124
+ <footer class="page-footer">
1125
+ <div class="footer-brand">
1126
+ <a href="https://stackbilt.dev" style="color:var(--text-dim);text-decoration:none">Stackbilt</a>
1127
+ <span class="footer-dot"></span>
1128
+ <a href="https://docs.stackbilt.dev" style="color:var(--text-dim);text-decoration:none">Docs</a>
1129
+ <span class="footer-dot"></span>
1130
+ <a href="https://blog.stackbilt.dev" style="color:var(--text-dim);text-decoration:none">The Roundtable</a>
1131
+ <span class="footer-dot"></span>
1132
+ <a href="https://github.com/Stackbilt-dev" style="color:var(--text-dim);text-decoration:none">GitHub</a>
1133
+ <span class="footer-dot"></span>
1134
+ <a href="tel:+12109395335" style="color:var(--text-dim);text-decoration:none">(210) 939-5335</a>
1135
+ </div>
1136
+ <div style="display:flex;align-items:center;gap:14px">
1137
+ <span style="font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--text-dim);letter-spacing:0.1em">&copy; 2026 Stackbilt</span>
1138
+ <a href="/chat" class="footer-login">Operator Access</a>
1139
+ </div>
1140
+ </footer>
1141
+
1142
+ <script>
1143
+ // ── Health fetch ──────────────────────────────
1144
+ fetch('/health?format=json')
1145
+ .then(function(r) { return r.json(); })
1146
+ .then(function(d) {
1147
+ var dot = document.getElementById('s-dot');
1148
+ var label = document.getElementById('s-label');
1149
+ var ver = document.getElementById('s-version');
1150
+
1151
+ if (d.status === 'ok') {
1152
+ dot.classList.add('online');
1153
+ label.textContent = 'kernel online';
1154
+ ver.textContent = 'v' + (d.version || '');
1155
+
1156
+ var k = d.kernel || {};
1157
+ document.getElementById('ls-status').textContent = 'Online';
1158
+ document.getElementById('ls-version').textContent = d.version || '—';
1159
+ document.getElementById('ls-learned').textContent = (k.learned || 0).toString();
1160
+ document.getElementById('ls-learning').textContent = (k.learning || 0).toString();
1161
+ document.getElementById('ls-degraded').textContent = (k.degraded || 0).toString();
1162
+ } else {
1163
+ dot.classList.add('offline');
1164
+ label.textContent = 'degraded';
1165
+ document.getElementById('ls-status').textContent = 'Degraded';
1166
+ }
1167
+ })
1168
+ .catch(function() {
1169
+ document.getElementById('s-dot').classList.add('offline');
1170
+ document.getElementById('s-label').textContent = 'offline';
1171
+ document.getElementById('ls-status').textContent = 'Offline';
1172
+ });
1173
+
1174
+ // ── Scroll reveal ────────────────────────────
1175
+ var reveals = document.querySelectorAll('.reveal');
1176
+ var observer = new IntersectionObserver(function(entries) {
1177
+ entries.forEach(function(entry) {
1178
+ if (entry.isIntersecting) {
1179
+ entry.target.classList.add('visible');
1180
+ observer.unobserve(entry.target);
1181
+ }
1182
+ });
1183
+ }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
1184
+
1185
+ reveals.forEach(function(el) { observer.observe(el); });
1186
+
1187
+ </script>
1188
+ </body>
1189
+ </html>`;
1190
+ }