<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Ajay Walia</title><link>https://curiousbit.netlify.app/</link><description>Digital workplace, artificial intelligence, cloud, security, automation, and enterprise technology notes by Ajay Walia.</description><language>en-au</language><managingEditor>Ajay Walia</managingEditor><webMaster>Ajay Walia</webMaster><copyright>Copyright 2026 Ajay Walia</copyright><lastBuildDate>Sun, 21 Jun 2026 05:46:10 +0000</lastBuildDate><atom:link href="https://curiousbit.netlify.app/categories/projects/index.xml" rel="self" type="application/rss+xml"/><image><url>https://curiousbit.netlify.app/images/og-default.png</url><title>Ajay Walia</title><link>https://curiousbit.netlify.app/</link></image><item><title>The Minion Who Wanted a Touchscreen</title><link>https://curiousbit.netlify.app/the-minion-who-wanted-a-touchscreen-glide/</link><guid isPermaLink="true">https://curiousbit.netlify.app/the-minion-who-wanted-a-touchscreen-glide/</guid><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><dc:creator>Ajay Walia</dc:creator><description>&lt;h2 id="chapter-1--the-problem"&gt;Chapter 1 — The Problem&lt;/h2&gt;
&lt;p&gt;We live in a world of glass that responds to us. Tap an iPhone, it opens. Swipe an iPad, it scrolls.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<img src="https://curiousbit.netlify.app/images/Minion/hero.jpg" alt="Projects" style="max-width:100%;height:auto;margin-bottom:1.5em;"/><h2 id="chapter-1--the-problem">Chapter 1 — The Problem</h2><p>We live in a world of glass that responds to us. Tap an iPhone, it opens. Swipe an iPad, it scrolls.</p><p>But when I reach out to my MacBook display? Nothing. Just fingerprints.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/ANIM-001.mp4" type="video/mp4"/></p><p>The interaction model is broken. We expect a simple flow:<strong><code>Finger</code> ↓<code>Screen</code> ↓<code>Content Moves</code></strong></p><p>But reality on a Mac is:<strong><code>Finger</code> ↓<code>Screen</code> ↓<code>Nothing Happens</code></strong></p><h2 id="chapter-2--the-crazy-idea">Chapter 2 — The Crazy Idea</h2><p>I didn&rsquo;t want to buy an external touchscreen, and I certainly didn&rsquo;t want a clunky piece of hardware taped to my bezel. I just wanted my Mac to understand when my finger was moving across it.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-002.mp4" type="video/mp4"/></p><p>What if we could create an invisible sheet of glass in front of the display?</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-003.mp4" type="video/mp4"/></p><h2 id="chapter-3--building-an-invisible-touchscreen">Chapter 3 — Building an Invisible Touchscreen</h2><p>To make this work without lag, it couldn&rsquo;t be a Python script running in a terminal. It had to be a native macOS menu bar app, tapping directly into the Apple Neural Engine. Here is how the v2 architecture flows:</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/DIAG-002.mp4" type="video/mp4"/></p><p>To explain this, let&rsquo;s meet the engineering team:</p><p><strong>Camera Manager</strong><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-004.mp4" type="video/mp4"/>
Captures an<code>AVCaptureSession</code> at a strict 30/60 fps with actor isolation.</p><p><strong>Vision Pipeline</strong><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-005.mp4" type="video/mp4"/>
Uses<code>VNDetectHumanHandPoseRequest</code> to identify the index finger in the frame.</p><p><strong>Hand Tracker</strong><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-006.mp4" type="video/mp4"/>
Applies a centroid-based lock (0.15 threshold) so the system doesn&rsquo;t jump between hands.</p><p><strong>Scroll Engine</strong><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-007.mp4" type="video/mp4"/>
A GestureStateMachine (Idle → Dwelling → TouchActive → Releasing) that posts FPS-normalised scroll events directly into the macOS HID system.</p><h2 id="chapter-4--why-gesture-control-is-wrong">Chapter 4 — Why Gesture Control Is Wrong</h2><p>The first instinct when building camera control is to use gestures.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-008.mp4" type="video/mp4"/></p><p>If I have to learn sign language to read an article, the tool failed. I didn&rsquo;t want gesture recognition. I wanted<strong>direct manipulation</strong>.</p><p>With Glide:</p><ol><li>Point finger.</li><li>Touch page.</li><li>Move page.</li></ol><h2 id="chapter-5--the-ux-rabbit-hole">Chapter 5 — The UX Rabbit Hole</h2><p>If you&rsquo;ve ever used a bad gesture system, you know the feeling.</p><p>Imagine hovering your hand in mid-air. In a typical gesture system, you enter a &ldquo;touch zone&rdquo; and then are forced to wait. A mandatory 200-millisecond delay kicks in just to confirm your intent before the system finally registers the action. That tiny fraction of a second feels sluggish, unnatural, and deeply frustrating.</p><p>Now imagine a true physical touchscreen. The moment your finger touches the glass, the response is instant. No waiting. No unnatural pausing. The digital content tracks perfectly and immediately with your physical movement.</p><p>The difference between a gimmick and a tool is latency.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/DIAG-003.mp4" type="video/mp4"/></p><h2 id="chapter-6--the-touch-plane">Chapter 6 — The Touch Plane</h2><p>To make it feel like a touchscreen, we had to invent a virtual screen floating exactly 10 inches in front of the actual screen.</p><p>Imagine a strict, invisible boundary hovering parallel to your MacBook display. Until your finger crosses that exact depth threshold, the system entirely ignores your movements. But the moment your fingertip pierces that invisible layer, the interface wakes up—locking onto your finger&rsquo;s precise coordinates and translating them into immediate, pixel-perfect scrolling.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/ANIM-004.mp4" type="video/mp4"/></p><h2 id="chapter-7--the-tech-stack">Chapter 7 — The Tech Stack</h2><p>To run a continuous computer vision pipeline without setting a MacBook on fire, the tech stack had to be heavily optimized.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-010.mp4" type="video/mp4"/></p><p><strong>Why Swift?</strong></p><p>Using Swift gave us direct access to native macOS APIs and the Vision Framework. It meant better latency, memory safety, and lower power consumption since the Neural Engine does the heavy lifting.</p><p><strong>Tech Stack Callout:</strong></p><ul><li><strong>Language:</strong> Swift 5.9+ (Strict concurrency)</li><li><strong>UI:</strong> SwiftUI</li><li><strong>Computer Vision:</strong> Vision Framework</li><li><strong>Event Injection:</strong> Quartz Event Services</li><li><strong>Architecture:</strong> Menu Bar App</li><li><strong>Platform:</strong> Apple Silicon (M-series)</li></ul><h2 id="chapter-8--the-real-challenge">Chapter 8 — The Real Challenge</h2><p>The hardest problem wasn&rsquo;t the computer vision or the math.</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-011.mp4" type="video/mp4"/></p><p>The hardest problem was comfort. Humans aren&rsquo;t built to hold their arms out straight for eight hours a day.</p><p>Our Test Matrix (from the v1.0 Test Plan) reflected this. We had to pass:</p><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-012.mp4" type="video/mp4"/></p><h2 id="chapter-9--what-success-looks-like">Chapter 9 — What Success Looks Like</h2><p><video autoplay= loop= muted= playsinline= style="width:100%; border-radius:8px; margin:1.5rem 0;"><source src="/images/Minion/IMG-013.mp4" type="video/mp4"/></p><h2 id="final-section">Final Section</h2><p>The journey doesn&rsquo;t stop at scrolling.</p><p><strong>Today</strong> ↓ Scrolling<br><strong>Tomorrow</strong> ↓ Zoom ↓ Click ↓ Window Management ↓ Presentations</p><p>At Aera, we are building a camera-native interaction layer for macOS. Glide is just the beginning.</p><h2 id="an-honest-postscript--into-cold-storage">An Honest Postscript — Into Cold Storage</h2><p>I&rsquo;ll be straight about where this actually ended: I left Glide midway. It&rsquo;s in cold storage, not shipped.</p><p>A few things stacked up. Token limits and the sheer time Antigravity took to grind through each problem made every iteration expensive. And the LLM never managed the one breakthrough that mattered — the scrolling logic. We could detect the hand, lock onto the finger, calibrate the touch plane, and light up the debug HUD, but turning that into scrolling that felt genuinely like a touchscreen stayed just out of reach. At some point I chose to stop rather than keep forcing it.</p><p>But I don&rsquo;t count it as wasted. I set out to treat this like a proper software-engineering project rather than a weekend hack — a real architecture, a menu-bar app instead of a terminal script, and detailed documentation that a serious project would keep: a maintained CHANGELOG, a test plan and test matrix, an architecture and a gesture spec. That discipline is the thing I&rsquo;m taking with me. Even shelved, the project is fully legible — anyone (including future me) can pick it up and know exactly where it stands and why. That&rsquo;s the real learning: good documentation is what lets a project survive being put down.</p><div style="background:linear-gradient(135deg,#10151f,#161d2b);border:1px solid rgba(96,165,250,0.28);border-radius:12px;padding:36px 32px;margin:44px 0;text-align:center;"><h2 style="margin:0 0 12px;color:#fff;">See it on the bench — the screenshots</h2><p style="color:#c7d0df;max-width:620px;margin:0 auto 24px;font-size:1.08rem;line-height:1.7;">Seven captioned frames from the build: the Xcode project and its CHANGELOG, the AI agent wrestling with the scroll logic, the full five-step onboarding flow, and the live debug HUD.</p><a href="/glide-screens.html" target="_blank" rel="noopener" style="display:inline-block;background:#3b82f6;color:#fff;font-weight:700;padding:15px 32px;border-radius:6px;font-size:1.02rem;">Open the screenshot gallery →</a></div>
]]></content:encoded><media:content url="https://curiousbit.netlify.app/images/Minion/hero.jpg" medium="image"><media:title type="plain">Projects</media:title></media:content><category>swift</category><category>computer-vision</category><category>macos</category><category>Projects</category></item><item><title>Cortex Swarm: Upgrading the Traditional IT Operations with Agentic AI</title><link>https://curiousbit.netlify.app/cortex-swarm-replacing-the-follow-the-sun-model/</link><guid isPermaLink="true">https://curiousbit.netlify.app/cortex-swarm-replacing-the-follow-the-sun-model/</guid><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><dc:creator>Ajay Walia</dc:creator><description>&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Noto+Serif:ital,wght@0,400;0,700;1,400&amp;family=Noto+Sans:wght@300;400;600;700&amp;display=swap');
.cs-article {
--bg: #080810;
--bg2: #0d0d1a;
--bg3: #111122;
--gold: #c9a227;
--gold-light: #e8cc6a;
--gold-dark: #7a5f0e;
--blue: #1a2744;
--blue2: #0f1d38;
--cream: #e8dcc8;
--muted: #9a8a6a;
--blossom: #c4909a;
--rule: rgba(201,162,39,0.22);
font-family: 'Noto Sans', sans-serif;
line-height: 1.75;
color: var(--cream);
background: var(--bg);
padding: 2.5rem;
border-radius: 16px;
box-shadow: 0 4px 30px rgba(0,0,0,0.6);
}
.cs-article * { box-sizing: border-box; }
.cs-section { padding: 56px 0; border-bottom: 1px solid var(--rule); }
.cs-section:last-child { border-bottom: none; }
.cs-label { font-size: .7rem; letter-spacing: .2em; text-transform: uppercase; color: var(--gold); font-weight: 600; margin-bottom: 10px; }
.cs-article h2 { font-family: 'Noto Serif', serif; font-size: clamp(1.5rem, 3.5vw, 2.2rem); color: var(--gold-light); margin-bottom: 20px; margin-top: 0; }
.cs-article h3 { font-family: 'Noto Serif', serif; font-size: 1.2rem; color: var(--gold-light); margin-bottom: 12px; margin-top: 0; }
.cs-article p { margin-bottom: 18px; font-size: 1rem; color: var(--cream); opacity: 0.95; }
.cs-article ul { list-style: none; padding: 0; margin-bottom: 18px; }
.cs-article ul li { padding: 4px 0 4px 20px; position: relative; font-size: 1rem; }
.cs-article ul li::before { content: "—"; position: absolute; left: 0; color: var(--gold); }
.cs-statbar { display: grid; grid-template-columns: repeat(4,1fr); gap: 1px; background: var(--rule); border: 1px solid var(--rule); margin: 36px 0; border-radius: 4px; overflow: hidden; }
.cs-stat { background: var(--bg2); padding: 20px 14px; text-align: center; }
.cs-stat .num { font-family: 'Noto Serif', serif; font-size: 1.8rem; color: var(--gold); display: block; }
.cs-stat .lbl { font-size: .68rem; letter-spacing: .08em; color: var(--muted); text-transform: uppercase; }
.cs-visual { margin: 32px 0; border-radius: 6px; overflow-x: auto; overflow-y: hidden; border: 1px solid var(--rule); }
.cs-visual svg { display: block; width: 100%; height: auto; }
.cs-figure { margin: 32px 0; }
.cs-figure img, .cs-figure video { display: block; width: 100%; height: auto; border-radius: 6px; border: 1px solid var(--rule); }
.cs-figure figcaption { text-align: center; font-size: .78rem; color: var(--muted); font-style: italic; margin-top: 8px; }
.cs-hero-video { position: relative; margin: 0 0 16px 0; border-radius: 8px; overflow: hidden; border: 1px solid var(--rule); box-shadow: 0 4px 20px rgba(0,0,0,.5); }
.cs-hero-video video { display: block; width: 100%; height: auto; }
.cs-hero-video .overlay { position: absolute; left: 0; right: 0; bottom: 0; padding: 40px 30px 48px; background: linear-gradient(transparent, rgba(8,8,16,.92) 30%); text-align: center; pointer-events: none; }
.cs-hero-video .overlay .h-title { font-family: 'Noto Serif', serif; font-size: clamp(2.2rem, 5.5vw, 4.5rem); color: #fff; font-weight: 900; letter-spacing: 2px; }
.cs-hero-video .overlay .h-sub { font-size: clamp(1rem, 2vw, 1.4rem); letter-spacing: .25em; color: var(--gold); font-weight: 700; margin-top: 14px; }
.cs-hero-video .overlay .h-by { font-size: clamp(0.85rem, 1.5vw, 1.15rem); letter-spacing: .15em; color: var(--muted); margin-top: 18px; font-weight: 500; }
.cs-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(230px,1fr)); gap: 14px; margin: 24px 0; }
.cs-card { background: var(--bg2); border: 1px solid var(--rule); border-radius: 6px; padding: 20px 18px; }
.cs-agent-row { display: grid; grid-template-columns: 150px 1fr; border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; margin-bottom: 10px; background: var(--bg2); }
.cs-agent-label { background: var(--blue2); padding: 16px 14px; border-right: 1px solid var(--rule); display: flex; flex-direction: column; justify-content: center; }
.cs-agent-label .tier { font-size: .67rem; letter-spacing: .14em; color: var(--gold); text-transform: uppercase; margin-bottom: 3px; }
.cs-agent-label .role { font-family: 'Noto Serif', serif; font-size: .95rem; color: #fff; }
.cs-agent-label .replace { font-size: .67rem; color: var(--muted); margin-top: 5px; }
.cs-agent-body { padding: 14px 18px; }
.cs-agent-body .desc { font-size: .8rem; color: var(--muted); font-style: italic; margin-bottom: 8px; }
.cs-tag-row { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.cs-tag { font-size: .67rem; padding: 2px 8px; border-radius: 20px; background: rgba(201,162,39,.1); border: 1px solid var(--gold-dark); color: var(--gold-light); }
.cs-timeline { position: relative; margin: 24px 0; }
.cs-timeline::before { content: ''; position: absolute; left: 19px; top: 0; bottom: 0; width: 1px; background: var(--rule); }
.cs-tl-item { display: grid; grid-template-columns: 38px 1fr; gap: 14px; margin-bottom: 20px; }
.cs-tl-dot { width: 38px; height: 38px; border-radius: 50%; background: var(--bg2); border: 1px solid var(--gold); display: flex; align-items: center; justify-content: center; font-size: .7rem; color: var(--gold); font-weight: 700; position: relative; z-index: 1; }
.cs-tl-content { padding-top: 6px; }
.cs-tl-content h3 { font-size: .9rem; margin-bottom: 3px; }
.cs-tl-content p { font-size: .82rem; color: var(--muted); margin: 0; }
.cs-phase-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 10px; margin: 24px 0; }
.cs-phase-card { background: var(--bg2); border: 1px solid var(--rule); border-radius: 6px; padding: 16px 14px; }
.cs-phase-num { font-size: .65rem; letter-spacing: .14em; color: var(--gold); text-transform: uppercase; margin-bottom: 5px; }
.cs-phase-title { font-family: 'Noto Serif', serif; font-size: .95rem; color: #fff; margin-bottom: 7px; }
.cs-phase-trigger { font-size: .68rem; color: var(--muted); border-top: 1px solid var(--rule); padding-top: 7px; margin-top: 7px; }
.cs-table { width: 100%; border-collapse: collapse; margin: 20px 0; font-size: .85rem; }
.cs-table th, .cs-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--rule); vertical-align: top; }
.cs-table th { color: var(--gold); font-weight: 600; font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; border-bottom: 1px solid var(--gold-dark); }
.cs-table td.k { color: var(--gold-light); font-family: 'Noto Serif', serif; width: 30%; }
.cs-table td.v { color: var(--cream); }
.cs-table td.w { color: var(--muted); font-size: .8rem; }
.cs-pull { border-left: 2px solid var(--gold); padding: 6px 0 6px 16px; margin: 24px 0; font-family: 'Noto Serif', serif; font-size: 1.05rem; color: var(--gold-light); font-style: italic; }
.cs-ornament { text-align: center; padding: 14px 0; color: var(--gold-dark); letter-spacing: .4em; font-size: .78rem; }
@media (max-width: 600px) {
.cs-article { padding: 1.25rem; }
.cs-statbar { grid-template-columns: repeat(2,1fr); }
.cs-phase-grid { grid-template-columns: 1fr 1fr; }
.cs-agent-row { grid-template-columns: 1fr; }
.cs-agent-label { border-right: none; border-bottom: 1px solid var(--rule); }
.cs-table { font-size: .78rem; }
.cs-table td.k { width: 35%; }
}
&lt;/style&gt;
&lt;div class="cs-article"&gt;
&lt;!-- ── HERO ── --&gt;
&lt;div class="cs-hero-video"&gt;
&lt;video autoplay muted loop playsinline preload="metadata" poster="/images/cortex-swarm/cortex-swarm-hero-v2.png"&gt;
&lt;source src="https://curiousbit.netlify.app/images/cortex-swarm/cortex-swarm-hero-v2.mp4" type="video/mp4"&gt;
&lt;img src="https://curiousbit.netlify.app/images/cortex-swarm/cortex-swarm-hero-v2.png" alt="Five masked specialists seated around a low table at twilight — the swarm as a team"&gt;
&lt;/video&gt;
&lt;div class="overlay"&gt;
&lt;div class="h-title"&gt;Cortex Swarm&lt;/div&gt;
&lt;div class="h-sub"&gt;REPLACING THE FOLLOW-THE-SUN MODEL · 2026&lt;/div&gt;
&lt;div class="h-by"&gt;AJAY WALIA · DIGITAL WORKPLACE OPERATIONS · MAY 2026&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ══════════════════════════════
OPENING — set the thesis upfront
══════════════════════════════ --&gt;
&lt;div class="cs-section" style="padding-top:8px"&gt;
&lt;p&gt;Every employee depends on a Workplace Operations team they will never meet. It is the team that resets their MFA when they fly to a new country, recovers their shared mailbox when it stops syncing, pushes the Intune policy that lets them install a piece of software, and decides at 3am whether a regional O365 Or Exchange outage warrants paging a human.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<img src="https://curiousbit.netlify.app/images/cortex-swarm/cortex-swarm-hero-v2.png" alt="Projects" style="max-width:100%;height:auto;margin-bottom:1.5em;"/><style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Serif:ital,wght@0,400;0,700;1,400&family=Noto+Sans:wght@300;400;600;700&display=swap');
.cs-article {
--bg: #080810;
--bg2: #0d0d1a;
--bg3: #111122;
--gold: #c9a227;
--gold-light: #e8cc6a;
--gold-dark: #7a5f0e;
--blue: #1a2744;
--blue2: #0f1d38;
--cream: #e8dcc8;
--muted: #9a8a6a;
--blossom: #c4909a;
--rule: rgba(201,162,39,0.22);
font-family: 'Noto Sans', sans-serif;
line-height: 1.75;
color: var(--cream);
background: var(--bg);
padding: 2.5rem;
border-radius: 16px;
box-shadow: 0 4px 30px rgba(0,0,0,0.6);
}
.cs-article * { box-sizing: border-box; }
.cs-section { padding: 56px 0; border-bottom: 1px solid var(--rule); }
.cs-section:last-child { border-bottom: none; }
.cs-label { font-size: .7rem; letter-spacing: .2em; text-transform: uppercase; color: var(--gold); font-weight: 600; margin-bottom: 10px; }
.cs-article h2 { font-family: 'Noto Serif', serif; font-size: clamp(1.5rem, 3.5vw, 2.2rem); color: var(--gold-light); margin-bottom: 20px; margin-top: 0; }
.cs-article h3 { font-family: 'Noto Serif', serif; font-size: 1.2rem; color: var(--gold-light); margin-bottom: 12px; margin-top: 0; }
.cs-article p { margin-bottom: 18px; font-size: 1rem; color: var(--cream); opacity: 0.95; }
.cs-article ul { list-style: none; padding: 0; margin-bottom: 18px; }
.cs-article ul li { padding: 4px 0 4px 20px; position: relative; font-size: 1rem; }
.cs-article ul li::before { content: "—"; position: absolute; left: 0; color: var(--gold); }
.cs-statbar { display: grid; grid-template-columns: repeat(4,1fr); gap: 1px; background: var(--rule); border: 1px solid var(--rule); margin: 36px 0; border-radius: 4px; overflow: hidden; }
.cs-stat { background: var(--bg2); padding: 20px 14px; text-align: center; }
.cs-stat .num { font-family: 'Noto Serif', serif; font-size: 1.8rem; color: var(--gold); display: block; }
.cs-stat .lbl { font-size: .68rem; letter-spacing: .08em; color: var(--muted); text-transform: uppercase; }
.cs-visual { margin: 32px 0; border-radius: 6px; overflow-x: auto; overflow-y: hidden; border: 1px solid var(--rule); }
.cs-visual svg { display: block; width: 100%; height: auto; }
.cs-figure { margin: 32px 0; }
.cs-figure img, .cs-figure video { display: block; width: 100%; height: auto; border-radius: 6px; border: 1px solid var(--rule); }
.cs-figure figcaption { text-align: center; font-size: .78rem; color: var(--muted); font-style: italic; margin-top: 8px; }
.cs-hero-video { position: relative; margin: 0 0 16px 0; border-radius: 8px; overflow: hidden; border: 1px solid var(--rule); box-shadow: 0 4px 20px rgba(0,0,0,.5); }
.cs-hero-video video { display: block; width: 100%; height: auto; }
.cs-hero-video .overlay { position: absolute; left: 0; right: 0; bottom: 0; padding: 40px 30px 48px; background: linear-gradient(transparent, rgba(8,8,16,.92) 30%); text-align: center; pointer-events: none; }
.cs-hero-video .overlay .h-title { font-family: 'Noto Serif', serif; font-size: clamp(2.2rem, 5.5vw, 4.5rem); color: #fff; font-weight: 900; letter-spacing: 2px; }
.cs-hero-video .overlay .h-sub { font-size: clamp(1rem, 2vw, 1.4rem); letter-spacing: .25em; color: var(--gold); font-weight: 700; margin-top: 14px; }
.cs-hero-video .overlay .h-by { font-size: clamp(0.85rem, 1.5vw, 1.15rem); letter-spacing: .15em; color: var(--muted); margin-top: 18px; font-weight: 500; }
.cs-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(230px,1fr)); gap: 14px; margin: 24px 0; }
.cs-card { background: var(--bg2); border: 1px solid var(--rule); border-radius: 6px; padding: 20px 18px; }
.cs-agent-row { display: grid; grid-template-columns: 150px 1fr; border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; margin-bottom: 10px; background: var(--bg2); }
.cs-agent-label { background: var(--blue2); padding: 16px 14px; border-right: 1px solid var(--rule); display: flex; flex-direction: column; justify-content: center; }
.cs-agent-label .tier { font-size: .67rem; letter-spacing: .14em; color: var(--gold); text-transform: uppercase; margin-bottom: 3px; }
.cs-agent-label .role { font-family: 'Noto Serif', serif; font-size: .95rem; color: #fff; }
.cs-agent-label .replace { font-size: .67rem; color: var(--muted); margin-top: 5px; }
.cs-agent-body { padding: 14px 18px; }
.cs-agent-body .desc { font-size: .8rem; color: var(--muted); font-style: italic; margin-bottom: 8px; }
.cs-tag-row { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.cs-tag { font-size: .67rem; padding: 2px 8px; border-radius: 20px; background: rgba(201,162,39,.1); border: 1px solid var(--gold-dark); color: var(--gold-light); }
.cs-timeline { position: relative; margin: 24px 0; }
.cs-timeline::before { content: ''; position: absolute; left: 19px; top: 0; bottom: 0; width: 1px; background: var(--rule); }
.cs-tl-item { display: grid; grid-template-columns: 38px 1fr; gap: 14px; margin-bottom: 20px; }
.cs-tl-dot { width: 38px; height: 38px; border-radius: 50%; background: var(--bg2); border: 1px solid var(--gold); display: flex; align-items: center; justify-content: center; font-size: .7rem; color: var(--gold); font-weight: 700; position: relative; z-index: 1; }
.cs-tl-content { padding-top: 6px; }
.cs-tl-content h3 { font-size: .9rem; margin-bottom: 3px; }
.cs-tl-content p { font-size: .82rem; color: var(--muted); margin: 0; }
.cs-phase-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 10px; margin: 24px 0; }
.cs-phase-card { background: var(--bg2); border: 1px solid var(--rule); border-radius: 6px; padding: 16px 14px; }
.cs-phase-num { font-size: .65rem; letter-spacing: .14em; color: var(--gold); text-transform: uppercase; margin-bottom: 5px; }
.cs-phase-title { font-family: 'Noto Serif', serif; font-size: .95rem; color: #fff; margin-bottom: 7px; }
.cs-phase-trigger { font-size: .68rem; color: var(--muted); border-top: 1px solid var(--rule); padding-top: 7px; margin-top: 7px; }
.cs-table { width: 100%; border-collapse: collapse; margin: 20px 0; font-size: .85rem; }
.cs-table th, .cs-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--rule); vertical-align: top; }
.cs-table th { color: var(--gold); font-weight: 600; font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; border-bottom: 1px solid var(--gold-dark); }
.cs-table td.k { color: var(--gold-light); font-family: 'Noto Serif', serif; width: 30%; }
.cs-table td.v { color: var(--cream); }
.cs-table td.w { color: var(--muted); font-size: .8rem; }
.cs-pull { border-left: 2px solid var(--gold); padding: 6px 0 6px 16px; margin: 24px 0; font-family: 'Noto Serif', serif; font-size: 1.05rem; color: var(--gold-light); font-style: italic; }
.cs-ornament { text-align: center; padding: 14px 0; color: var(--gold-dark); letter-spacing: .4em; font-size: .78rem; }
@media (max-width: 600px) {
.cs-article { padding: 1.25rem; }
.cs-statbar { grid-template-columns: repeat(2,1fr); }
.cs-phase-grid { grid-template-columns: 1fr 1fr; }
.cs-agent-row { grid-template-columns: 1fr; }
.cs-agent-label { border-right: none; border-bottom: 1px solid var(--rule); }
.cs-table { font-size: .78rem; }
.cs-table td.k { width: 35%; }
}</style><div class="cs-article"><div class="cs-hero-video"><video autoplay= muted= loop= playsinline= preload="metadata" poster="/images/cortex-swarm/cortex-swarm-hero-v2.png"><source src="/images/cortex-swarm/cortex-swarm-hero-v2.mp4" type="video/mp4"><img src="/images/cortex-swarm/cortex-swarm-hero-v2.png" alt="Five masked specialists seated around a low table at twilight — the swarm as a team"/><div class="overlay"><div class="h-title">Cortex Swarm</div><div class="h-sub">REPLACING THE FOLLOW-THE-SUN MODEL · 2026</div><div class="h-by">AJAY WALIA · DIGITAL WORKPLACE OPERATIONS · MAY 2026</div></div></div><div class="cs-section" style="padding-top:8px"><p>Every employee depends on a Workplace Operations team they will never meet. It is the team that resets their MFA when they fly to a new country, recovers their shared mailbox when it stops syncing, pushes the Intune policy that lets them install a piece of software, and decides at 3am whether a regional O365 Or Exchange outage warrants paging a human.</p><p>This piece is about three things, in order:</p><ul><li><strong style="color:var(--gold-light)">First</strong> — how those teams are actually structured today, how they function day-to-day, and the structural problems they carry.</li><li><strong style="color:var(--gold-light)">Second</strong> — where agentic AI sits in 2026, and where the field is heading over the next two to three years.</li><li><strong style="color:var(--gold-light)">Third</strong> — how a small swarm of specialised agents can replace this team tier-for-tier, what efficiencies that produces, and the new set of challenges it creates in return.</li></ul><div class="cs-pull">The org chart is the answer. The five tiers that make a DWP team work for humans are the same five seams that make it work for agents.</div><div class="cs-statbar"><div class="cs-stat"><span class="num">5</span><span class="lbl">Autonomous agents<br>L1 → SDM</span></div><div class="cs-stat"><span class="num">~137</span><span class="lbl">FTE mirrored<br>across all tiers</span></div><div class="cs-stat"><span class="num">24×7</span><span class="lbl">Single team<br>no shift roster</span></div><div class="cs-stat"><span class="num">1-click</span><span class="lbl">Audit verify<br>any ticket</span></div></div></div><div class="cs-section"><div class="cs-label">Part 1 · Structure</div><h2>How Digital Workplace Operations Teams Are Structured Today</h2><p>A DWP team exists because every employee uses IT every day, and someone has to keep that working. For a Global 500 with 10,000–100,000+ employees, the work is too broad, too multilingual, and too time-zone-spanning for an in-house team. Almost without exception, it is outsourced to a Tier-1 IT services firm — TCS, Infosys, Wipro, Accenture, HCLTech, Cognizant — running a 24×7 follow-the-sun roster across multiple delivery centres.</p><h3 style="margin-top:28px">The Scope — What Actually Sits Under "Workplace"</h3><p>The label undersells the breadth. A typical DWP contract covers seven functional areas, each with its own runbooks, its own vendors, and its own escalation paths.</p><div class="cs-cards"><div class="cs-card"><h3>Identity</h3><p style="font-size:.82rem;color:var(--muted);margin:0">Who you are — joiner / mover / leaver, password, MFA, SSO, entitlements</p></div><div class="cs-card"><h3>Access</h3><p style="font-size:.82rem;color:var(--muted);margin:0">What you can use — catalogs, licenses, groups, approvals</p></div><div class="cs-card"><h3>Productivity</h3><p style="font-size:.82rem;color:var(--muted);margin:0">Outlook, Teams, M365, OneDrive, SharePoint</p></div><div class="cs-card"><h3>Endpoint</h3><p style="font-size:.82rem;color:var(--muted);margin:0">Laptops, peripherals, network, Intune compliance, patching</p></div><div class="cs-card"><h3>Applications</h3><p style="font-size:.82rem;color:var(--muted);margin:0">Line-of-business app support, vendor liaison</p></div><div class="cs-card"><h3>Infrastructure</h3><p style="font-size:.82rem;color:var(--muted);margin:0">Connectivity, VPN, cloud health, capacity</p></div><div class="cs-card"><h3>Change &amp; Governance</h3><p style="font-size:.82rem;color:var(--muted);margin:0">RFCs, CAB, RCAs, SLA reporting, customer comms</p></div></div><h3 style="margin-top:36px">The Five-Tier Hierarchy</h3><p>To deliver against this scope at scale, providers build a five-tier hierarchy. Each tier exists because of what the tier below it can't or shouldn't do. Tickets enter at the bottom and move upward only when scope, authority, or evidence demands it.</p><div class="cs-visual"><svg viewBox="0 0 820 420" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="420" fill="#0d0d1a"/><text x="410" y="28" text-anchor="middle" font-family="Georgia,serif" font-size="11" fill="#c9a227" letter-spacing="2.5">REPORTING LINES, RESPONSIBILITY, AND VOLUME</text><line x1="120" y1="38" x2="700" y2="38" stroke="#c9a227" stroke-width=".4" stroke-opacity=".35"/><defs><marker id="dwparr" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="#c9a227" fill-opacity=".5"/></marker></defs><pre><code> &lt;!-- SDM --&gt;
&lt;rect x="340" y="58" width="140" height="44" rx="4" fill="#1a2744" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="410" y="76" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;SDM&lt;/text&gt;
&lt;text x="410" y="90" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Service Delivery Manager · ~2 FTE&lt;/text&gt;
&lt;!-- Architect --&gt;
&lt;rect x="340" y="128" width="140" height="44" rx="4" fill="#1a2744" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="410" y="146" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;Architect&lt;/text&gt;
&lt;text x="410" y="160" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Design Authority · ~3 FTE&lt;/text&gt;
&lt;!-- L3 --&gt;
&lt;rect x="340" y="198" width="140" height="44" rx="4" fill="#1a2744" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="410" y="216" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;L3 Engineering&lt;/text&gt;
&lt;text x="410" y="230" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Senior Engineers · ~12 FTE&lt;/text&gt;
&lt;!-- L2 --&gt;
&lt;rect x="200" y="268" width="420" height="44" rx="4" fill="#0f1a30" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="410" y="286" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;L2 Specialists&lt;/text&gt;
&lt;text x="410" y="300" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;M365 · Intune · Exchange · ServiceNow · ~40 FTE · 2 shifts&lt;/text&gt;
&lt;!-- L1 --&gt;
&lt;rect x="80" y="338" width="660" height="48" rx="4" fill="#0a1020" stroke="#c9a227" stroke-width="1.2"/&gt;
&lt;text x="410" y="358" text-anchor="middle" font-size="11" fill="#c9a227" font-weight="700" font-family="sans-serif"&gt;L1 Service Desk&lt;/text&gt;
&lt;text x="410" y="374" text-anchor="middle" font-size="8.5" fill="#9a8a6a" font-family="sans-serif"&gt;~80 FTE · 3 follow-the-sun shifts · handles ~80% of all ticket volume&lt;/text&gt;
&lt;!-- Reporting lines --&gt;
&lt;line x1="410" y1="172" x2="410" y2="198" stroke="#c9a227" stroke-width=".8" stroke-opacity=".55" stroke-dasharray="3,2"/&gt;
&lt;line x1="410" y1="102" x2="410" y2="128" stroke="#c9a227" stroke-width=".8" stroke-opacity=".55" stroke-dasharray="3,2"/&gt;
&lt;line x1="410" y1="242" x2="410" y2="268" stroke="#c9a227" stroke-width=".8" stroke-opacity=".55" marker-end="url(#dwparr)"/&gt;
&lt;line x1="410" y1="312" x2="410" y2="338" stroke="#c9a227" stroke-width=".8" stroke-opacity=".55" marker-end="url(#dwparr)"/&gt;
&lt;!-- Side annotations --&gt;
&lt;text x="500" y="80" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;↔ owns the customer relationship&lt;/text&gt;
&lt;text x="500" y="150" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;↔ owns design + RCA authority&lt;/text&gt;
&lt;text x="500" y="220" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;↔ root cause + change requests&lt;/text&gt;
&lt;text x="160" y="290" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;↔ specialist diagnosis&lt;/text&gt;
&lt;text x="40" y="360" font-size="8" fill="#9a8a6a" font-family="sans-serif" font-weight="600"&gt;FRONT LINE&lt;/text&gt;
&lt;text x="410" y="408" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif" font-style="italic"&gt;Tickets enter at L1 and escalate upward only when scope, authority, or evidence demands it.&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><p style="font-size:.88rem;color:var(--muted);font-style:italic">The exact FTE counts vary with employee population and contract scope. The shape — heavy at the base, narrowing to a point — is universal.</p></div><div class="cs-section"><div class="cs-label">Part 2 · Function</div><h2>How They Actually Function Day-to-Day</h2><p>Three forces govern day-to-day operation: time zones, ticket flow, and knowledge. Understanding all three is what makes the rest of the piece make sense.</p><h3 style="margin-top:24px">Time Zones — the Follow-the-Sun Roster</h3><p>Coverage is achieved by handing tickets between geographies as the sun moves. A ticket opened in Sydney at 4pm local rolls over to Manila, then to Mumbai or Hyderabad, then to Krakow or Sofia, then to a US east-coast hub. Three or four formal shift handoffs per day, every day, forever.</p><div class="cs-visual"><svg viewBox="0 0 820 320" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="320" fill="#0d0d1a"/><text x="410" y="24" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2.5" font-family="Georgia,serif">A 24-HOUR DAY ACROSS THREE GEOGRAPHIES</text><pre><code> &lt;!-- 24-hour ring --&gt;
&lt;circle cx="410" cy="170" r="120" fill="#0a1020" stroke="#c9a227" stroke-width=".6" stroke-opacity=".45"/&gt;
&lt;circle cx="410" cy="170" r="98" fill="none" stroke="#c9a227" stroke-width=".3" stroke-opacity=".3"/&gt;
&lt;text x="410" y="62" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;00:00 UTC&lt;/text&gt;
&lt;text x="540" y="174" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;06:00&lt;/text&gt;
&lt;text x="410" y="296" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;12:00&lt;/text&gt;
&lt;text x="280" y="174" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;18:00&lt;/text&gt;
&lt;!-- APAC sector (0-8 UTC) --&gt;
&lt;path d="M 410 170 L 410 50 A 120 120 0 0 1 514 230 Z" fill="#1a2744" fill-opacity=".55" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;text x="478" y="120" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;APAC&lt;/text&gt;
&lt;text x="478" y="134" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Manila · Sydney&lt;/text&gt;
&lt;text x="478" y="145" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;08:00 – 18:00 local&lt;/text&gt;
&lt;!-- EMEA sector (8-16 UTC) --&gt;
&lt;path d="M 410 170 L 514 230 A 120 120 0 0 1 306 230 Z" fill="#162038" fill-opacity=".55" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;text x="410" y="240" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;EMEA / India&lt;/text&gt;
&lt;text x="410" y="254" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Mumbai · Krakow · Sofia&lt;/text&gt;
&lt;text x="410" y="265" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;08:00 – 18:00 local&lt;/text&gt;
&lt;!-- AMER sector (16-24 UTC) --&gt;
&lt;path d="M 410 170 L 306 230 A 120 120 0 0 1 410 50 Z" fill="#111830" fill-opacity=".55" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;text x="342" y="120" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;AMER&lt;/text&gt;
&lt;text x="342" y="134" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Atlanta · Dallas&lt;/text&gt;
&lt;text x="342" y="145" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;08:00 – 18:00 local&lt;/text&gt;
&lt;!-- Handoff markers --&gt;
&lt;circle cx="410" cy="50" r="5" fill="#c9a227"/&gt;
&lt;circle cx="514" cy="230" r="5" fill="#c9a227"/&gt;
&lt;circle cx="306" cy="230" r="5" fill="#c9a227"/&gt;
&lt;!-- Right-side notes --&gt;
&lt;text x="660" y="80" font-size="9" fill="#c9a227" font-family="Georgia,serif"&gt;Three handoffs / day&lt;/text&gt;
&lt;text x="660" y="100" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Open tickets transfer at each&lt;/text&gt;
&lt;text x="660" y="112" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;geographic boundary&lt;/text&gt;
&lt;text x="660" y="140" font-size="9" fill="#c9a227" font-family="Georgia,serif"&gt;Context lost at each handoff&lt;/text&gt;
&lt;text x="660" y="160" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Notes summarised, not&lt;/text&gt;
&lt;text x="660" y="172" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;replayed in full&lt;/text&gt;
&lt;text x="660" y="200" font-size="9" fill="#c9a227" font-family="Georgia,serif"&gt;Weekend &amp;amp; holiday gaps&lt;/text&gt;
&lt;text x="660" y="220" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Coverage thins where&lt;/text&gt;
&lt;text x="660" y="232" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;no region is in business hours&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">Ticket Flow — Entry, Triage, Escalation, Closure</h3><p>Every employee interaction is a ticket. Most enter via chat or self-service portal, a smaller share through phone or email. From entry, the path is the same: triage at L1, attempt resolution, escalate if the agent at the current tier cannot solve it within authority and budget, then close.</p><div class="cs-visual"><svg viewBox="0 0 820 230" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="230" fill="#0d0d1a"/><text x="410" y="22" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2" font-family="Georgia,serif">TICKET LIFECYCLE — THE COMMON PATH</text><defs><marker id="tfarr" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="#c9a227"/></marker></defs><pre><code> &lt;!-- Entry sources --&gt;
&lt;g transform="translate(40,80)"&gt;
&lt;rect width="100" height="34" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="50" y="15" text-anchor="middle" font-size="7.5" fill="#e8cc6a" font-family="sans-serif"&gt;CHAT / PORTAL&lt;/text&gt;
&lt;text x="50" y="27" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;~70% of entries&lt;/text&gt;
&lt;rect y="44" width="100" height="34" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;text x="50" y="59" text-anchor="middle" font-size="7.5" fill="#e8cc6a" font-family="sans-serif"&gt;PHONE&lt;/text&gt;
&lt;text x="50" y="71" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;~20%&lt;/text&gt;
&lt;rect y="88" width="100" height="34" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;text x="50" y="103" text-anchor="middle" font-size="7.5" fill="#e8cc6a" font-family="sans-serif"&gt;EMAIL / OTHER&lt;/text&gt;
&lt;text x="50" y="115" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;~10%&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="145" y1="118" x2="195" y2="118" stroke="#c9a227" stroke-width=".7" marker-end="url(#tfarr)"/&gt;
&lt;!-- Triage --&gt;
&lt;g transform="translate(200,98)"&gt;
&lt;rect width="105" height="44" rx="3" fill="#162038" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="52" y="20" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="Georgia,serif"&gt;L1 Triage&lt;/text&gt;
&lt;text x="52" y="34" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;Categorise · prioritise&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="310" y1="120" x2="360" y2="120" stroke="#c9a227" stroke-width=".7" marker-end="url(#tfarr)"/&gt;
&lt;!-- Resolution attempt --&gt;
&lt;g transform="translate(365,98)"&gt;
&lt;rect width="120" height="44" rx="3" fill="#162038" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="60" y="20" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="Georgia,serif"&gt;Resolve in tier&lt;/text&gt;
&lt;text x="60" y="34" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;SOP · KB · tools&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Branch up: escalate --&gt;
&lt;line x1="425" y1="98" x2="425" y2="60" stroke="#c9a227" stroke-width=".7" marker-end="url(#tfarr)"/&gt;
&lt;g transform="translate(380,30)"&gt;
&lt;rect width="90" height="34" rx="3" fill="#1a2744" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="45" y="15" text-anchor="middle" font-size="8" fill="#e8cc6a" font-family="Georgia,serif"&gt;Escalate&lt;/text&gt;
&lt;text x="45" y="27" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;L1 → L2 → L3&lt;/text&gt;
&lt;/g&gt;
&lt;text x="442" y="80" font-size="6.5" fill="#9a8a6a" font-family="sans-serif"&gt;~20%&lt;/text&gt;
&lt;!-- Branch right: close --&gt;
&lt;line x1="487" y1="120" x2="550" y2="120" stroke="#c9a227" stroke-width=".7" marker-end="url(#tfarr)"/&gt;
&lt;g transform="translate(555,98)"&gt;
&lt;rect width="95" height="44" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text x="47" y="20" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="Georgia,serif"&gt;Close&lt;/text&gt;
&lt;text x="47" y="34" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;Notify · KB tag&lt;/text&gt;
&lt;/g&gt;
&lt;text x="510" y="115" font-size="6.5" fill="#9a8a6a" font-family="sans-serif"&gt;~80%&lt;/text&gt;
&lt;!-- Loop back from escalate to resolve at higher tier --&gt;
&lt;path d="M 470 47 Q 540 47 540 100" fill="none" stroke="#c9a227" stroke-width=".6" stroke-opacity=".5" stroke-dasharray="3,2"/&gt;
&lt;text x="615" y="55" font-size="7" fill="#9a8a6a" font-family="sans-serif" font-style="italic"&gt;Higher tier owns it now,&lt;/text&gt;
&lt;text x="615" y="67" font-size="7" fill="#9a8a6a" font-family="sans-serif" font-style="italic"&gt;same flow recurses&lt;/text&gt;
&lt;!-- Bottom strip: SLA clock --&gt;
&lt;rect x="40" y="170" width="740" height="40" rx="3" fill="#080810" stroke="#c9a227" stroke-width=".4" stroke-opacity=".4"/&gt;
&lt;text x="410" y="188" text-anchor="middle" font-size="8.5" fill="#c9a227" font-family="Georgia,serif"&gt;SLA CLOCK runs continuously · pauses only on AWAITING_USER · resumes on every state change&lt;/text&gt;
&lt;text x="410" y="202" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Time to acknowledge · time to resolve · time to communicate — measured per priority (P1–P4)&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">Knowledge — Runbooks, KBs, and Tribal Memory</h3><p>Each tier owns a knowledge base scoped to its authority. L1 has SOPs for ~40 standard scenarios. L2 holds vendor documentation, Intune policy templates, and Exchange runbooks. L3 holds architecture decision records, past postmortems, and vendor escalation contacts. The Architect carries the long-term design library; the SDM holds SLA templates, comms playbooks, and historical breach reports.</p><p>A great deal also lives in<em>tribal memory</em> — the senior engineer who happens to remember that a similar incident last August was caused by a CA policy. That memory walks out the door every time someone resigns.</p><figure class="cs-figure"><video autoplay= muted= loop= playsinline= preload="metadata" poster="/images/cortex-swarm/dwp-operations-floor.png"><source src="/images/cortex-swarm/dwp-operations-floor.mp4" type="video/mp4"><img src="/images/cortex-swarm/dwp-operations-floor.png" alt="Atmospheric illustration of a 24×7 IT operations floor across three time zones"/><figcaption>The operations floor — a continent away, three shifts deep, somewhere working through your ticket right now.</figcaption></figure></div><div class="cs-section"><div class="cs-label">Part 3 · Challenges</div><h2>What's Structurally Wrong With This Model</h2><p>Nothing in the model is broken; it just isn't designed for the kind of demand it now carries. The pain points below are not the fault of any one team — they are consequences of<em>how</em> the model is built. Each tier carries some version of every one of them.</p><div class="cs-cards"><div class="cs-card"><div class="cs-label" style="font-size:.62rem">01</div><h3>Shift Gravity</h3><ul><li>Three follow-the-sun shifts every 24 hours</li><li>Context is summarised, not replayed, at every boundary</li><li>Onshore-offshore split hides inefficiency in plain sight</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">02</div><h3>Quality Variance</h3><ul><li>Varies by shift, by tenure, by individual</li><li>SLA breaches cluster on weekends and holidays</li><li>The customer never sees an even service level</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">03</div><h3>Attrition Tax</h3><ul><li>20–35% annual attrition at L1, lower but real higher up</li><li>4–8 weeks of training before a new hire is productive</li><li>Tribal knowledge leaves with every resignation</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">04</div><h3>Inelastic Capacity</h3><ul><li>A 2× ticket spike cannot be staffed in &lt; 24 hours</li><li>Patch-Tuesday outages routinely take SLA hits</li><li>Surge headcount is a fiction; surge overtime is what actually happens</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">05</div><h3>Audit Friction</h3><ul><li>Reconstructing what happened on a ticket takes weeks</li><li>Chat logs, ticket history, and admin-tool actions live in different systems</li><li>G500 internal-audit reviews drag on for months</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">06</div><h3>Language &amp; KB Silos</h3><ul><li>Multilingual coverage means hiring native speakers locally</li><li>Knowledge bases drift between tiers, regions, and locales</li><li>New runbooks are rarely peer-reviewed for quality</li></ul></div></div><h3 style="margin-top:36px">The Headcount Paradox</h3><p>Stack the team by volume and headcount and the same shape appears every time: an inverted pyramid where the tier carrying the most repetition is also the tier carrying the most people, the most attrition, and the lowest unit-economics. The next two parts argue this is exactly the part the next wave of agentic AI can credibly absorb.</p><div class="cs-visual"><svg viewBox="0 0 820 320" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="320" fill="#0d0d1a"/><text x="410" y="24" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2.5" font-family="Georgia,serif">WHERE THE PEOPLE AND THE TICKETS SIT</text><line x1="120" y1="34" x2="700" y2="34" stroke="#c9a227" stroke-width=".4" stroke-opacity=".3"/><pre><code> &lt;polygon points="410,46 468,80 352,80" fill="#1a2744" stroke="#c9a227" stroke-width=".8"/&gt;
&lt;text x="410" y="68" text-anchor="middle" font-size="8" fill="#e8cc6a" font-family="sans-serif"&gt;SDM · ~2 FTE · 10% touches&lt;/text&gt;
&lt;polygon points="352,82 468,82 500,118 320,118" fill="#162038" stroke="#c9a227" stroke-width=".8"/&gt;
&lt;text x="410" y="105" text-anchor="middle" font-size="8.5" fill="#e8cc6a" font-family="sans-serif"&gt;ARCHITECT · ~3 FTE · 5% touches&lt;/text&gt;
&lt;polygon points="320,120 500,120 536,158 284,158" fill="#111830" stroke="#c9a227" stroke-width=".8"/&gt;
&lt;text x="410" y="144" text-anchor="middle" font-size="9.5" fill="#e8cc6a" font-family="sans-serif"&gt;L3 · ~12 FTE · 4% tickets&lt;/text&gt;
&lt;polygon points="284,160 536,160 576,202 244,202" fill="#0e1528" stroke="#c9a227" stroke-width=".8"/&gt;
&lt;text x="410" y="187" text-anchor="middle" font-size="10.5" fill="#e8cc6a" font-family="sans-serif"&gt;L2 · ~40 FTE · 15% tickets&lt;/text&gt;
&lt;polygon points="244,204 576,204 630,262 190,262" fill="#0a1020" stroke="#c9a227" stroke-width="1.1"/&gt;
&lt;text x="410" y="234" text-anchor="middle" font-size="12.5" fill="#c9a227" font-weight="bold" font-family="sans-serif"&gt;L1 · ~80 FTE · 3 SHIFTS · 80% tickets&lt;/text&gt;
&lt;text x="410" y="250" text-anchor="middle" font-size="8.5" fill="#9a8a6a" font-family="sans-serif"&gt;most volume · most repetition · highest attrition&lt;/text&gt;
&lt;rect x="60" y="282" width="700" height="30" rx="4" fill="#111122" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;text x="410" y="302" text-anchor="middle" font-size="9.5" fill="#c9a227" font-family="Georgia,serif" font-style="italic"&gt;Headcount and decisions are concentrated exactly where they are easiest to automate.&lt;/text&gt;
&lt;/svg&gt;</code></pre></div></div><div class="cs-section"><div class="cs-label">Part 4 · State of the Art</div><h2>Where Agentic AI Sits in 2026</h2><figure class="cs-figure"><video autoplay= muted= loop= playsinline= preload="metadata" poster="/images/cortex-swarm/capability-ramp-temple.png"><source src="/images/cortex-swarm/capability-ramp-temple.mp4" type="video/mp4"><img src="/images/cortex-swarm/capability-ramp-temple.png" alt="Six-step stone temple staircase ascending into a starlit sky"/><figcaption>Six years, six steps — each layer of capability built on the one beneath it.</figcaption></figure><p>Two years ago, "AI agent" meant a chatbot with a system prompt. In 2026 it means something specific: a model that can decompose a goal, call tools to gather evidence, maintain state across turns, and stop when the work is done. The shift is real, and it is what makes the rest of this piece possible.</p><h3 style="margin-top:24px">A Six-Year Capability Ramp</h3><p>Each year since 2020 has unlocked a layer of capability that wasn't there the year before. The cumulative effect is what now allows specialised agents to do specialist work, not just general chat.</p><div class="cs-visual"><svg viewBox="0 0 820 280" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="280" fill="#0d0d1a"/><text x="410" y="22" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2" font-family="Georgia,serif">LLM CAPABILITY · CUMULATIVE LAYERS · 2020 → 2026</text><line x1="50" y1="240" x2="780" y2="240" stroke="#c9a227" stroke-width=".7" stroke-opacity=".55"/><pre><code> &lt;!-- Year ticks --&gt;
&lt;g font-size="8" fill="#9a8a6a" font-family="sans-serif" text-anchor="middle"&gt;
&lt;text x="110" y="258"&gt;2020&lt;/text&gt;
&lt;text x="220" y="258"&gt;2021&lt;/text&gt;
&lt;text x="330" y="258"&gt;2022&lt;/text&gt;
&lt;text x="440" y="258"&gt;2023&lt;/text&gt;
&lt;text x="550" y="258"&gt;2024&lt;/text&gt;
&lt;text x="660" y="258"&gt;2025&lt;/text&gt;
&lt;text x="770" y="258"&gt;2026&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Capability stacking bars --&gt;
&lt;g&gt;
&lt;rect x="92" y="200" width="36" height="40" fill="#1a2744" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;rect x="202" y="180" width="36" height="60" fill="#1a2744" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;rect x="312" y="158" width="36" height="82" fill="#1a2744" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;rect x="422" y="128" width="36" height="112" fill="#1a2744" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;rect x="532" y="98" width="36" height="142" fill="#1a2744" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;rect x="642" y="74" width="36" height="166" fill="#1a2744" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;rect x="752" y="58" width="22" height="182" fill="#e8cc6a" stroke="#c9a227" stroke-width=".4"/&gt;
&lt;/g&gt;
&lt;!-- Layer labels --&gt;
&lt;text x="50" y="80" font-size="8.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Multi-agent&lt;/text&gt;
&lt;text x="50" y="92" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;orchestration&lt;/text&gt;
&lt;text x="50" y="115" font-size="8.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Local inference&lt;/text&gt;
&lt;text x="50" y="127" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;30B–70B on laptop&lt;/text&gt;
&lt;text x="50" y="148" font-size="8.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Reliable tool use&lt;/text&gt;
&lt;text x="50" y="160" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;structured output&lt;/text&gt;
&lt;text x="50" y="178" font-size="8.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Reasoning &amp;amp; RAG&lt;/text&gt;
&lt;text x="50" y="190" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;retrieval-augmented&lt;/text&gt;
&lt;text x="50" y="208" font-size="8.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Instruction tuning&lt;/text&gt;
&lt;text x="50" y="220" font-size="7" fill="#9a8a6a" font-family="sans-serif"&gt;long context&lt;/text&gt;
&lt;text x="50" y="234" font-size="8.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Pre-training&lt;/text&gt;
&lt;text x="410" y="48" text-anchor="middle" font-size="9" fill="#c9a227" font-family="Georgia,serif" font-style="italic"&gt;2026: every layer needed for autonomous tier-aligned agents is in place.&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">What "Agentic" Actually Means</h3><p>Four ingredients distinguish an agent from a chatbot. Every component is now boring engineering — no novel research required.</p><div class="cs-visual"><svg viewBox="0 0 820 280" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="280" fill="#0d0d1a"/><text x="410" y="22" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2" font-family="Georgia,serif">ANATOMY OF AN AGENT</text><pre><code> &lt;!-- Central agent core --&gt;
&lt;circle cx="410" cy="150" r="58" fill="#1a2744" stroke="#e8cc6a" stroke-width="1.2"/&gt;
&lt;text x="410" y="148" text-anchor="middle" font-size="12" fill="#e8cc6a" font-family="Georgia,serif"&gt;Agent&lt;/text&gt;
&lt;text x="410" y="164" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;persona + system prompt&lt;/text&gt;
&lt;!-- Four ingredients --&gt;
&lt;g transform="translate(140,90)"&gt;
&lt;rect width="150" height="60" rx="4" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="75" y="20" text-anchor="middle" font-size="9.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Reasoning&lt;/text&gt;
&lt;text x="75" y="34" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Decompose · plan · reflect&lt;/text&gt;
&lt;text x="75" y="46" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Why a step, not just what&lt;/text&gt;
&lt;/g&gt;
&lt;g transform="translate(530,90)"&gt;
&lt;rect width="150" height="60" rx="4" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="75" y="20" text-anchor="middle" font-size="9.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Tool Use&lt;/text&gt;
&lt;text x="75" y="34" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Structured calls · typed inputs&lt;/text&gt;
&lt;text x="75" y="46" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Real-world side effects&lt;/text&gt;
&lt;/g&gt;
&lt;g transform="translate(140,170)"&gt;
&lt;rect width="150" height="60" rx="4" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="75" y="20" text-anchor="middle" font-size="9.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Memory&lt;/text&gt;
&lt;text x="75" y="34" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Conversation · KB retrieval&lt;/text&gt;
&lt;text x="75" y="46" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;State across turns&lt;/text&gt;
&lt;/g&gt;
&lt;g transform="translate(530,170)"&gt;
&lt;rect width="150" height="60" rx="4" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="75" y="20" text-anchor="middle" font-size="9.5" fill="#e8cc6a" font-family="Georgia,serif"&gt;Authority&lt;/text&gt;
&lt;text x="75" y="34" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Bounded scope · approvals&lt;/text&gt;
&lt;text x="75" y="46" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;When to act vs escalate&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Connecting lines --&gt;
&lt;line x1="290" y1="120" x2="358" y2="135" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;line x1="530" y1="120" x2="462" y2="135" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;line x1="290" y1="200" x2="358" y2="170" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;line x1="530" y1="200" x2="462" y2="170" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/&gt;
&lt;text x="410" y="266" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif" font-style="italic"&gt;An agent is a system prompt, a model, a memory, a tool registry, and rules about when to call which.&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">Three Independent Shifts That Made This Credible</h3><p>Each on its own is interesting. Together, they remove the standard objections G500 buyers raise to bringing AI inside the perimeter.</p><div class="cs-visual"><svg viewBox="0 0 820 240" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="240" fill="#0d0d1a"/><circle cx="185" cy="120" r="80" fill="#0a1428" stroke="#c9a227" stroke-width=".8" stroke-opacity=".7"/><circle cx="410" cy="120" r="80" fill="#0a1428" stroke="#c9a227" stroke-width=".8" stroke-opacity=".7"/><circle cx="635" cy="120" r="80" fill="#0a1428" stroke="#c9a227" stroke-width=".8" stroke-opacity=".7"/><text x="185" y="98" text-anchor="middle" font-size="22" fill="#c9a227" font-family="Georgia,serif">30B–70B</text><text x="185" y="116" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif">open-weight params</text><text x="185" y="138" text-anchor="middle" font-size="8.5" fill="#e8dcc8" font-family="sans-serif">Tool-calling · reasoning</text><text x="185" y="152" text-anchor="middle" font-size="8.5" fill="#e8dcc8" font-family="sans-serif">Multi-step planning</text><text x="185" y="178" text-anchor="middle" font-size="8" fill="#c9a227" font-family="Georgia,serif" font-style="italic">Model Capability</text><pre><code> &lt;text x="410" y="98" text-anchor="middle" font-size="22" fill="#c9a227" font-family="Georgia,serif"&gt;Local&lt;/text&gt;
&lt;text x="410" y="116" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;on-device inference&lt;/text&gt;
&lt;text x="410" y="138" text-anchor="middle" font-size="8.5" fill="#e8dcc8" font-family="sans-serif"&gt;No data leaves building&lt;/text&gt;
&lt;text x="410" y="152" text-anchor="middle" font-size="8.5" fill="#e8dcc8" font-family="sans-serif"&gt;Compliance objection gone&lt;/text&gt;
&lt;text x="410" y="178" text-anchor="middle" font-size="8" fill="#c9a227" font-family="Georgia,serif" font-style="italic"&gt;Inference Economics&lt;/text&gt;
&lt;text x="635" y="98" text-anchor="middle" font-size="22" fill="#c9a227" font-family="Georgia,serif"&gt;100%&lt;/text&gt;
&lt;text x="635" y="116" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;safety-pass target&lt;/text&gt;
&lt;text x="635" y="138" text-anchor="middle" font-size="8.5" fill="#e8dcc8" font-family="sans-serif"&gt;Semantic grading&lt;/text&gt;
&lt;text x="635" y="152" text-anchor="middle" font-size="8.5" fill="#e8dcc8" font-family="sans-serif"&gt;Adversarial eval cases&lt;/text&gt;
&lt;text x="635" y="178" text-anchor="middle" font-size="8" fill="#c9a227" font-family="Georgia,serif" font-style="italic"&gt;Eval Discipline&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">A Capability Map by Tier — Ready Now vs Emerging</h3><p>This is not a roadmap; it is an honest read of what's possible today. "Ready" means the prompt, tool set, KB and eval pattern are known. "Emerging" means the approach is understood but still being measured.</p><div class="cs-cards"><div class="cs-card"><div class="cs-label" style="font-size:.62rem;color:var(--gold-light)">L1 · Ready Now</div><h3>Front-Line Desk</h3><ul><li>Identity verification · password / MFA / unlock</li><li>Catalog software install + approval</li><li>Outlook / Teams diagnostics</li><li>Printer · peripheral pairing</li><li>KB retrieval + grounded response</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem;color:var(--gold-light)">L2 · Ready</div><h3>App Specialist</h3><ul><li>App log structured analysis</li><li>Service health diagnostic</li><li>Intune compliance + push</li><li>Mailbox + M365 admin actions</li><li>Hypothesis-test workflows</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem;color:var(--gold-light)">L3 · Emerging</div><h3>Senior Engineer</h3><ul><li>Infrastructure root-cause</li><li>AD attribute engineering</li><li>Kusto / log-analytics</li><li>Change request authoring</li><li>Emergency change application</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem;color:var(--gold-light)">Architect · Emerging</div><h3>Design Authority</h3><ul><li>Change review against ADR library</li><li>P1 RCA authoring</li><li>Pattern-vs-one-off classification</li><li>Capacity-review triggers</li><li>Design-impact assessment</li></ul></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem;color:var(--gold-light)">SDM · Emerging</div><h3>Delivery Manager</h3><ul><li>Customer comms drafting</li><li>SLA dashboard + breach alerts</li><li>War-room convene flow</li><li>Weekly briefing generation</li><li>Status update cadence</li></ul></div></div></div><div class="cs-section"><div class="cs-label">Part 5 · Trajectory</div><h2>Where Agentic AI Is Heading — Next 2–3 Years</h2><p>The trajectory of the last six years points in a clear direction: from a single model answering a single question, to<em>swarms</em> of specialised agents collaborating on bounded problems under an orchestrator they cannot themselves modify.</p><div class="cs-visual"><svg viewBox="0 0 820 260" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="260" fill="#0d0d1a"/><text x="410" y="22" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2.5" font-family="Georgia,serif">FROM SINGLE MODEL TO SPECIALISED SWARM</text><line x1="50" y1="180" x2="780" y2="180" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5"/><defs><marker id="evarr" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="#c9a227" fill-opacity=".7"/></marker></defs><pre><code> &lt;!-- Stage 1: LLM --&gt;
&lt;g transform="translate(90,80)"&gt;
&lt;circle r="32" fill="#0a1428" stroke="#c9a227" stroke-width=".8"/&gt;
&lt;text y="4" text-anchor="middle" font-size="11" fill="#e8cc6a" font-family="Georgia,serif"&gt;LLM&lt;/text&gt;
&lt;text y="56" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700"&gt;2020–2023&lt;/text&gt;
&lt;text y="72" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Single model&lt;/text&gt;
&lt;text y="84" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Chat completion&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="130" y1="110" x2="195" y2="110" stroke="#c9a227" stroke-width=".7" marker-end="url(#evarr)"/&gt;
&lt;!-- Stage 2: Agent --&gt;
&lt;g transform="translate(245,80)"&gt;
&lt;circle r="34" fill="#0a1428" stroke="#c9a227" stroke-width=".9"/&gt;
&lt;text y="4" text-anchor="middle" font-size="11" fill="#e8cc6a" font-family="Georgia,serif"&gt;Agent&lt;/text&gt;
&lt;text y="56" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700"&gt;2023–2024&lt;/text&gt;
&lt;text y="72" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;+ Tools + Memory&lt;/text&gt;
&lt;text y="84" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Single task loop&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="287" y1="110" x2="352" y2="110" stroke="#c9a227" stroke-width=".7" marker-end="url(#evarr)"/&gt;
&lt;!-- Stage 3: Multi-agent --&gt;
&lt;g transform="translate(404,80)"&gt;
&lt;circle r="36" fill="#0a1428" stroke="#c9a227" stroke-width="1"/&gt;
&lt;text y="0" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;Multi-&lt;/text&gt;
&lt;text y="12" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;agent&lt;/text&gt;
&lt;text y="56" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700"&gt;2024–2026&lt;/text&gt;
&lt;text y="72" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Planner + executors&lt;/text&gt;
&lt;text y="84" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Verifier loops&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="448" y1="110" x2="513" y2="110" stroke="#c9a227" stroke-width=".7" marker-end="url(#evarr)"/&gt;
&lt;!-- Stage 4: Specialised Swarm --&gt;
&lt;g transform="translate(573,80)"&gt;
&lt;circle r="38" fill="#1a2744" stroke="#e8cc6a" stroke-width="1.4"/&gt;
&lt;text y="0" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;Specialised&lt;/text&gt;
&lt;text y="12" text-anchor="middle" font-size="10" fill="#e8cc6a" font-family="Georgia,serif"&gt;Swarm&lt;/text&gt;
&lt;text y="56" text-anchor="middle" font-size="8" fill="#e8cc6a" font-family="sans-serif" font-weight="700"&gt;2026 →&lt;/text&gt;
&lt;text y="72" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Role-aligned agents&lt;/text&gt;
&lt;text y="84" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Bounded authority&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="619" y1="110" x2="694" y2="110" stroke="#c9a227" stroke-width=".7" marker-end="url(#evarr)"/&gt;
&lt;!-- Stage 5: Enterprise --&gt;
&lt;g transform="translate(740,80)"&gt;
&lt;circle r="32" fill="#0a1428" stroke="#c9a227" stroke-width=".6" stroke-dasharray="3,2"/&gt;
&lt;text y="4" text-anchor="middle" font-size="9" fill="#9a8a6a" font-family="Georgia,serif"&gt;Enterprise&lt;/text&gt;
&lt;text y="56" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif" font-weight="700"&gt;2027 →&lt;/text&gt;
&lt;text y="72" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Cross-function&lt;/text&gt;
&lt;text y="84" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif"&gt;Swarm-of-swarms&lt;/text&gt;
&lt;/g&gt;
&lt;text x="410" y="218" text-anchor="middle" font-size="9" fill="#c9a227" font-family="Georgia,serif" font-style="italic"&gt;Cortex Swarm sits at the fourth stage. The fifth is what this pattern unlocks once it's proven inside one function.&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">Three Bets About the Next 24 Months</h3><div class="cs-cards"><div class="cs-card"><div class="cs-label" style="font-size:.62rem">Bet 01</div><h3>Specialisation beats generalisation</h3><p style="font-size:.85rem;color:var(--cream);margin:0">One large general agent doing everything is brittle. Five small role-aligned agents — each with its own persona, tools, and KB — are more reliable, more debuggable, and more auditable.</p></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">Bet 02</div><h3>The orchestrator is the operating system</h3><p style="font-size:.85rem;color:var(--cream);margin:0">Frameworks like LangChain / LangGraph / Autogen are scaffolding. Production systems will hold their durable value in a bespoke orchestrator that owns state, audit, identity, and policy — not in any library it depends on.</p></div><div class="cs-card"><div class="cs-label" style="font-size:.62rem">Bet 03</div><h3>Compliance becomes the product</h3><p style="font-size:.85rem;color:var(--cream);margin:0">The agent that wins inside a regulated enterprise is not the one with the highest benchmark — it's the one whose every action a G500 internal-audit team can replay in one click.</p></div></div></div><div class="cs-section"><div class="cs-label">Part 6 · The Cortex Swarm</div><h2>How a Five-Agent Swarm Replaces the Five-Tier Team</h2><figure class="cs-figure"><img src="/images/cortex-swarm/mirror-reflection.png" alt="A Japanese silver mirror reflecting five human silhouettes as five glowing agent crests — the mirror principle made literal"><figcaption>The mirror principle — the agent inherits the role the human already plays.</figcaption></figure><p>The idea is structurally simple.<em>Don't reinvent the team. Mirror it.</em> One agent per tier. Distinct persona, tools, knowledge base, and authority. The org chart<strong style="color:var(--gold)">is</strong> the system architecture.</p><div class="cs-pull">If a human L2 specialist refuses to apply a config change without log evidence, the L2 agent does the same. If the Architect won't approve a change without checking the ADR library, neither does the Architect agent.</div><h3 style="margin-top:24px">Human Team ↔ Agent Swarm — Tier for Tier</h3><div class="cs-visual"><svg viewBox="0 0 820 360" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="360" fill="#0d0d1a"/><text x="200" y="28" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2" font-family="Georgia,serif">HUMAN TEAM</text><text x="620" y="28" text-anchor="middle" font-size="10" fill="#c9a227" letter-spacing="2" font-family="Georgia,serif">CORTEX SWARM</text><line x1="50" y1="38" x2="350" y2="38" stroke="#c9a227" stroke-width=".4" stroke-opacity=".4"/><line x1="470" y1="38" x2="770" y2="38" stroke="#c9a227" stroke-width=".4" stroke-opacity=".4"/><defs><marker id="mirarr" markerWidth="6" markerHeight="6" refX="3" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="#c9a227"/></marker></defs><pre><code> &lt;!-- Pairs --&gt;
&lt;g font-family="Georgia,serif"&gt;
&lt;!-- SDM --&gt;
&lt;rect x="80" y="56" width="240" height="44" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="200" y="74" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;SDM · 2 FTE&lt;/text&gt;
&lt;text x="200" y="88" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Customer voice · SLA · war room&lt;/text&gt;
&lt;line x1="320" y1="78" x2="470" y2="78" stroke="#c9a227" stroke-width=".6" stroke-opacity=".5" marker-end="url(#mirarr)"/&gt;
&lt;rect x="480" y="56" width="240" height="44" rx="3" fill="#1a2744" stroke="#e8cc6a" stroke-width=".9"/&gt;
&lt;text x="600" y="74" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;SDM Agent&lt;/text&gt;
&lt;text x="600" y="88" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Same persona · same tools · always on&lt;/text&gt;
&lt;!-- Architect --&gt;
&lt;rect x="80" y="112" width="240" height="44" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="200" y="130" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;Architect · 3 FTE&lt;/text&gt;
&lt;text x="200" y="144" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Design authority · ADRs · RCAs&lt;/text&gt;
&lt;line x1="320" y1="134" x2="470" y2="134" stroke="#c9a227" stroke-width=".6" stroke-opacity=".5" marker-end="url(#mirarr)"/&gt;
&lt;rect x="480" y="112" width="240" height="44" rx="3" fill="#1a2744" stroke="#e8cc6a" stroke-width=".9"/&gt;
&lt;text x="600" y="130" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;Architect Agent&lt;/text&gt;
&lt;text x="600" y="144" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Pattern-vs-one-off · ADR-gated&lt;/text&gt;
&lt;!-- L3 --&gt;
&lt;rect x="80" y="168" width="240" height="44" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="200" y="186" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;L3 · 12 FTE&lt;/text&gt;
&lt;text x="200" y="200" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Root cause · changes · vendor escalation&lt;/text&gt;
&lt;line x1="320" y1="190" x2="470" y2="190" stroke="#c9a227" stroke-width=".6" stroke-opacity=".5" marker-end="url(#mirarr)"/&gt;
&lt;rect x="480" y="168" width="240" height="44" rx="3" fill="#1a2744" stroke="#e8cc6a" stroke-width=".9"/&gt;
&lt;text x="600" y="186" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;L3 Agent&lt;/text&gt;
&lt;text x="600" y="200" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Same diagnostics · proposes change request&lt;/text&gt;
&lt;!-- L2 --&gt;
&lt;rect x="80" y="224" width="240" height="44" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/&gt;
&lt;text x="200" y="242" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;L2 · 40 FTE&lt;/text&gt;
&lt;text x="200" y="256" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;App / platform · log-driven diagnosis&lt;/text&gt;
&lt;line x1="320" y1="246" x2="470" y2="246" stroke="#c9a227" stroke-width=".6" stroke-opacity=".5" marker-end="url(#mirarr)"/&gt;
&lt;rect x="480" y="224" width="240" height="44" rx="3" fill="#1a2744" stroke="#e8cc6a" stroke-width=".9"/&gt;
&lt;text x="600" y="242" text-anchor="middle" font-size="10" fill="#e8cc6a"&gt;L2 Agent&lt;/text&gt;
&lt;text x="600" y="256" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Reads logs · hypothesis-test · bounces back&lt;/text&gt;
&lt;!-- L1 --&gt;
&lt;rect x="80" y="280" width="240" height="44" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width="1.1"/&gt;
&lt;text x="200" y="298" text-anchor="middle" font-size="10" fill="#c9a227" font-weight="700"&gt;L1 · 80 FTE · 3 shifts&lt;/text&gt;
&lt;text x="200" y="312" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Front-line desk · password · catalog · printer&lt;/text&gt;
&lt;line x1="320" y1="302" x2="470" y2="302" stroke="#c9a227" stroke-width="1" marker-end="url(#mirarr)"/&gt;
&lt;rect x="480" y="280" width="240" height="44" rx="3" fill="#1a2744" stroke="#e8cc6a" stroke-width="1.4"/&gt;
&lt;text x="600" y="298" text-anchor="middle" font-size="10" fill="#e8cc6a" font-weight="700"&gt;L1 Agent · always on&lt;/text&gt;
&lt;text x="600" y="312" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif"&gt;Same persona · 25 tools · escalates on rule&lt;/text&gt;
&lt;/g&gt;
&lt;text x="410" y="348" text-anchor="middle" font-size="8.5" fill="#9a8a6a" font-family="sans-serif" font-style="italic"&gt;Each pair shares the same persona, scope and authority. The agent inherits the role; the orchestrator inherits the rules.&lt;/text&gt;
&lt;/svg&gt;</code></pre></div><h3 style="margin-top:36px">One Orchestrator. Five Agents. Clean Seams.</h3><p>The architecture is deliberately conservative. The model proposes; the orchestrator and adapters decide whether the proposal executes. Bespoke ~250-line orchestrator. No LangChain. No LangGraph. No Autogen.</p><div class="cs-visual"><svg viewBox="0 0 820 340" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="340" fill="#0d0d1a"/><text x="14" y="68" font-size="7" fill="#9a8a6a" font-family="sans-serif">FRONTEND</text><text x="14" y="126" font-size="7" fill="#9a8a6a" font-family="sans-serif">ORCHESTRATOR</text><text x="14" y="182" font-size="7" fill="#9a8a6a" font-family="sans-serif">AGENTS</text><text x="14" y="238" font-size="7" fill="#9a8a6a" font-family="sans-serif">TOOLS</text><text x="14" y="288" font-size="7" fill="#9a8a6a" font-family="sans-serif">ADAPTERS</text><text x="14" y="328" font-size="7" fill="#9a8a6a" font-family="sans-serif">INFERENCE</text><rect x="74" y="46" width="730" height="36" rx="3" fill="#1a2744" stroke="#c9a227" stroke-width=".7"/><text x="439" y="61" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="600">Web Portal</text><text x="439" y="74" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">Next.js 15 · Tailwind · shadcn/ui · Chat · Ticket Explorer · SDM Dashboard</text><rect x="74" y="94" width="730" height="36" rx="3" fill="#162038" stroke="#e8cc6a" stroke-width="1"/><text x="439" y="109" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="700">Orchestrator (bespoke ~250 lines)</text><text x="439" y="122" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">State machine · Identity gate · Audit emission · Output validation · Budget enforcement</text><rect x="74" y="142" width="730" height="36" rx="3" fill="#0f1a30" stroke="#c9a227" stroke-width=".7"/><text x="439" y="157" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="600">Agent Registry</text><text x="439" y="170" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">l1 · l2 · l3 · architect · sdm · planner/verifier (P3) · voice/i18n (P4-5)</text><rect x="74" y="192" width="730" height="36" rx="3" fill="#0a1020" stroke="#c9a227" stroke-width=".7"/><text x="439" y="207" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="600">Tool Registry (~60 tools)</text><text x="439" y="220" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">Identity · Access · Productivity · Endpoint · Observability · Change · Communications</text><rect x="74" y="242" width="730" height="36" rx="3" fill="#080f1c" stroke="#c9a227" stroke-width=".7"/><text x="439" y="257" text-anchor="middle" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="600">Adapter Layer</text><text x="439" y="270" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">ITSM · Identity · Endpoint · Catalog · Approval · Obs · Change · Comms · Voice (mock | real)</text><rect x="74" y="290" width="348" height="36" rx="3" fill="#080810" stroke="#c9a227" stroke-width=".5" stroke-opacity=".5" stroke-dasharray="4,3"/><text x="248" y="305" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif">Sidecars: ChromaDB+BGE-M3 · SHA-256 audit chain · State machine · Budgets</text><text x="248" y="319" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">SQLite (P1) → Postgres (P2+) · per-role namespace</text><rect x="434" y="290" width="370" height="36" rx="3" fill="#080810" stroke="#e8cc6a" stroke-width=".8"/><text x="619" y="305" text-anchor="middle" font-size="8.5" fill="#e8cc6a" font-family="sans-serif">LM Studio @ 127.0.0.1:1234/v1</text><text x="619" y="319" text-anchor="middle" font-size="7.5" fill="#9a8a6a" font-family="sans-serif">Qwen3-Coder-Next (P1) · Larger models for L3/Architect in P2-3</text><line x1="439" y1="82" x2="439" y2="94" stroke="#c9a227" stroke-width=".5" stroke-opacity=".4"/><line x1="439" y1="130" x2="439" y2="142" stroke="#c9a227" stroke-width=".5" stroke-opacity=".4"/><line x1="439" y1="178" x2="439" y2="192" stroke="#c9a227" stroke-width=".5" stroke-opacity=".4"/><line x1="439" y1="228" x2="439" y2="242" stroke="#c9a227" stroke-width=".5" stroke-opacity=".4"/><line x1="439" y1="278" x2="439" y2="290" stroke="#c9a227" stroke-width=".5" stroke-opacity=".4"/></svg></div><h3 style="margin-top:36px">The Five Agents — in Detail</h3><div style="margin-top:20px"><div class="cs-agent-row"><div class="cs-agent-label"><div class="tier">L1 · Phase 1</div><div class="role">Service Desk</div><div class="replace">replaces ~80 FTE · 3 shifts · 80% tickets</div></div><div class="cs-agent-body"><div class="desc">"Polite. Fast. Scripted. Resolves common categories. Never speculates on root cause."</div><ul><li>Password / MFA / unlock · Catalog install · Printer · Outlook/Teams basics</li><li>25 tools without further approval; mutating tools pass the identity gate</li><li>Escalates after 2 failed attempts; infra/outage/security always escalate</li><li>Target SLA: TTA &lt; 5 min · TTR &lt; 30 min</li></ul><div class="cs-tag-row"><span class="cs-tag">Identity</span><span class="cs-tag">Access</span><span class="cs-tag">Productivity</span><span class="cs-tag">Endpoint</span></div></div></div><div class="cs-agent-row"><div class="cs-agent-label"><div class="tier">L2 · Phase 2</div><div class="role">App Specialist</div><div class="replace">replaces ~40 FTE · 2 shifts · 15% tickets</div></div><div class="cs-agent-body"><div class="desc">"Specialist. Methodical. Demands diagnostics before acting. Reads logs."</div><ul><li>App log analysis · Intune compliance + push · Exchange diagnostics</li><li>Hypothesis-test workflows — escalates only after evidence is gathered</li><li>Rejects wrongly-escalated tickets back to L1 with structured rationale</li><li>Target SLA: TTA &lt; 30 min · TTR &lt; 4 hrs</li></ul><div class="cs-tag-row"><span class="cs-tag">M365</span><span class="cs-tag">Intune</span><span class="cs-tag">Exchange</span><span class="cs-tag">ServiceNow</span></div></div></div><div class="cs-agent-row"><div class="cs-agent-label"><div class="tier">L3 · Phase 2</div><div class="role">Senior Engineer</div><div class="replace">replaces ~12 FTE · day + oncall · 4% tickets</div></div><div class="cs-agent-body"><div class="desc">"Root-cause focused. Drives change requests. Consults Architect for design-impacting fixes."</div><ul><li>AD/Identity engineering · Kusto/log-analytics · Emergency change application</li><li>Authors RCA stubs — Architect finalises</li><li>Consults Architect for design-impacting changes</li><li>Target SLA: TTA &lt; 2 hrs · TTR &lt; 24 hrs</li></ul><div class="cs-tag-row"><span class="cs-tag">AD Engineering</span><span class="cs-tag">Infrastructure</span><span class="cs-tag">Change Mgmt</span><span class="cs-tag">Security</span></div></div></div><div class="cs-agent-row"><div class="cs-agent-label"><div class="tier">Architect · Phase 3</div><div class="role">Design Authority</div><div class="replace">replaces ~3 FTE · 5% touches</div></div><div class="cs-agent-body"><div class="desc">"Asks 'is this a one-off or a pattern?' Advises and gates — not a doer."</div><ul><li>Approves/rejects change requests against the ADR library</li><li>Authors P1 RCAs · pattern-vs-one-off classification · capacity reviews</li><li>May veto L3-proposed changes</li><li>Target SLA: Design review ≤ 2 biz days · RCA ≤ 5 days</li></ul><div class="cs-tag-row"><span class="cs-tag">ADR Library</span><span class="cs-tag">Change Review</span><span class="cs-tag">RCA</span><span class="cs-tag">Capacity</span></div></div></div><div class="cs-agent-row"><div class="cs-agent-label"><div class="tier">SDM · Phase 3</div><div class="role">Delivery Manager</div><div class="replace">replaces ~2 FTE · 10% touches</div></div><div class="cs-agent-body"><div class="desc">"Customer-facing. SLA-driven. Calm under pressure. Owns comms cadence."</div><ul><li>SLA dashboard · customer comms · war-room convening · weekly briefing</li><li>Cannot make technical decisions — can demand them by SLA-bound deadline</li><li>Can convene a war room without prior approval</li><li>Target SLA: Customer comms &lt; 1 hr (P1) · weekly briefing every Friday</li></ul><div class="cs-tag-row"><span class="cs-tag">SLA Governance</span><span class="cs-tag">Customer Comms</span><span class="cs-tag">War Room</span><span class="cs-tag">Weekly Briefing</span></div></div></div></div><h3 style="margin-top:44px">Five Collaboration Patterns</h3><p>Five patterns cover every interaction between the five agents. Escalation is just the first.</p><div class="cs-cards"><div class="cs-card"><h3>Escalation</h3><p style="font-size:.82rem;color:var(--cream);margin:0">L1 → L2 → L3 with filtered conversation history per tier scope. The higher tier sees only what's relevant to its authority.</p></div><div class="cs-card"><h3>Bounce-back</h3><p style="font-size:.82rem;color:var(--cream);margin:0">L2 or L3 → L1 with structured de-escalation rationale. Cycle detection prevents loops.</p></div><div class="cs-card"><h3>Design gate</h3><p style="font-size:.82rem;color:var(--cream);margin:0">L3 → Architect via<code style="font-size:.75rem;color:var(--gold-light)">propose_change_request</code>; result returns via<code style="font-size:.75rem;color:var(--gold-light)">respond_to_l3</code>.</p></div><div class="cs-card"><h3>War-room</h3><p style="font-size:.82rem;color:var(--cream);margin:0">SDM forces L3 + Architect to sync on a single ticket thread under stricter time budgets.</p></div><div class="cs-card"><h3>Internal escalate</h3><p style="font-size:.82rem;color:var(--cream);margin:0">SDM → SP leadership (humans) on systemic breach patterns — humans re-enter the loop only when patterns demand it.</p></div></div><h3 style="margin-top:44px">A Representative Ticket — End to End</h3><p><em style="color:var(--muted)">Scenario: "Team shared mailbox stopped syncing."</em> A representative ticket traversing all five agents under a formal 13-state machine.</p><div class="cs-visual"><svg viewBox="0 0 820 400" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="400" fill="#0d0d1a"/><text x="410" y="20" text-anchor="middle" font-size="7" fill="#9a8a6a" letter-spacing="1.5" font-family="sans-serif">STATE MACHINE TRACE</text><text x="410" y="35" text-anchor="middle" font-size="6" fill="#c9a227" font-family="monospace">NEW → TRIAGED → DIAGNOSING → AWAITING_L2 → DIAGNOSING(L2) → AWAITING_L3 → DIAGNOSING(L3) → AWAITING_APPROVAL → ACTING(L3) → VERIFYING → RESOLVED</text><line x1="40" y1="43" x2="780" y2="43" stroke="#c9a227" stroke-width=".3" stroke-opacity=".35"/><g transform="translate(0,52)"><circle cx="40" cy="20" r="16" fill="#0a1020" stroke="#9a8a6a" stroke-width=".7"/><text x="40" y="25" text-anchor="middle" font-size="11" fill="#9a8a6a">👤</text><text x="78" y="16" font-size="9" fill="#9a8a6a" font-family="sans-serif" font-weight="600">EMPLOYEE</text><text x="78" y="29" font-size="8" fill="#e8dcc8" font-family="sans-serif">Files chat: "Team shared mailbox stopped syncing"</text><line x1="40" y1="36" x2="40" y2="52" stroke="#c9a227" stroke-width=".5" stroke-opacity=".3"/></g><g transform="translate(0,108)"><circle cx="40" cy="20" r="16" fill="#0a1020" stroke="#c9a227" stroke-width=".8"/><text x="40" y="25" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700">L1</text><text x="78" y="16" font-size="9" fill="#c9a227" font-family="sans-serif" font-weight="600">DESK AGENT</text><text x="78" y="29" font-size="8" fill="#e8dcc8" font-family="sans-serif">Triages → Productivity/Mailbox. Beyond L1 SOPs. Calls<tspan font-family="monospace" font-size="7.5">escalate_to_l2()</tspan></text><line x1="40" y1="36" x2="40" y2="52" stroke="#c9a227" stroke-width=".5" stroke-opacity=".3"/></g><g transform="translate(0,164)"><circle cx="40" cy="20" r="16" fill="#0a1020" stroke="#c9a227" stroke-width=".8"/><text x="40" y="25" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700">L2</text><text x="78" y="16" font-size="9" fill="#c9a227" font-family="sans-serif" font-weight="600">APP SPECIALIST</text><text x="78" y="29" font-size="8" fill="#e8dcc8" font-family="sans-serif">Inspects Exchange logs. Tenant-level drift detected. Calls<tspan font-family="monospace" font-size="7.5">escalate_to_l3()</tspan></text><line x1="40" y1="36" x2="40" y2="52" stroke="#c9a227" stroke-width=".5" stroke-opacity=".3"/></g><g transform="translate(0,220)"><circle cx="40" cy="20" r="16" fill="#1a2744" stroke="#e8cc6a" stroke-width=".9"/><text x="40" y="25" text-anchor="middle" font-size="8" fill="#e8cc6a" font-family="sans-serif" font-weight="700">L3</text><text x="78" y="16" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="600">SENIOR ENGINEER</text><text x="78" y="29" font-size="8" fill="#e8dcc8" font-family="sans-serif">Queries AD + tenant. CA policy change = root cause. Calls<tspan font-family="monospace" font-size="7.5">propose_change_request()</tspan></text><line x1="40" y1="36" x2="40" y2="52" stroke="#c9a227" stroke-width=".5" stroke-opacity=".3"/></g><g transform="translate(0,276)"><circle cx="40" cy="20" r="16" fill="#0a1020" stroke="#c9a227" stroke-width=".8"/><text x="40" y="25" text-anchor="middle" font-size="7" fill="#c9a227" font-family="sans-serif" font-weight="700">ARCH</text><text x="78" y="16" font-size="9" fill="#c9a227" font-family="sans-serif" font-weight="600">ARCHITECT</text><text x="78" y="29" font-size="8" fill="#e8dcc8" font-family="sans-serif">Reviews ADR library. Approves:<tspan font-family="monospace" font-size="7.5">approve_change(conditions=["monitor_7d"])</tspan></text><line x1="40" y1="36" x2="40" y2="52" stroke="#c9a227" stroke-width=".5" stroke-opacity=".3"/></g><g transform="translate(0,332)"><circle cx="40" cy="20" r="16" fill="#1a2744" stroke="#e8cc6a" stroke-width=".9"/><text x="40" y="25" text-anchor="middle" font-size="8" fill="#e8cc6a" font-family="sans-serif" font-weight="700">L3</text><text x="78" y="16" font-size="9" fill="#e8cc6a" font-family="sans-serif" font-weight="600">RESOLVED — L3 APPLIES · L1 CLOSES · SDM LOGS</text><text x="78" y="29" font-size="8" fill="#e8dcc8" font-family="sans-serif">Change applied. Sync verified. Employee notified. Hash-chained audit emitted for full lifecycle.</text></g><rect x="490" y="100" width="302" height="188" rx="4" fill="#111122" stroke="#c9a227" stroke-width=".6" stroke-opacity=".4"/><text x="641" y="120" text-anchor="middle" font-size="8.5" fill="#c9a227" letter-spacing="1.5" font-family="sans-serif">WHAT THIS PROVES</text><line x1="508" y1="127" x2="775" y2="127" stroke="#c9a227" stroke-width=".3" stroke-opacity=".3"/><text x="510" y="146" font-size="8" fill="#e8dcc8" font-family="sans-serif">→ Every tier did exactly its scope — no overreach</text><text x="510" y="163" font-size="8" fill="#e8dcc8" font-family="sans-serif">→ Architect gated without executing</text><text x="510" y="180" font-size="8" fill="#e8dcc8" font-family="sans-serif">→ SDM never intervened (SLA healthy)</text><text x="510" y="197" font-size="8" fill="#e8dcc8" font-family="sans-serif">→ State machine refused backward transitions</text><text x="510" y="214" font-size="8" fill="#e8dcc8" font-family="sans-serif">→ G500 audit team replays from single ticket ID</text><text x="510" y="231" font-size="8" fill="#e8dcc8" font-family="sans-serif">→ Every tool call, KB hit &amp; state change logged</text></svg></div><h3 style="margin-top:44px">A P1 Incident — 5 Minutes, No Human Paged</h3><p>Region-wide Exchange Online failure. The swarm runs the entire war-room cycle while humans are asleep.</p><div class="cs-visual"><svg viewBox="0 0 820 175" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="175" fill="#0d0d1a"/><line x1="36" y1="72" x2="784" y2="72" stroke="#c9a227" stroke-width=".9" stroke-opacity=".45"/><g transform="translate(62,72)"><circle cy="0" r="9" fill="#c9a227"/><text y="-17" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700">T+0</text><text y="20" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">DETECTOR</text><text y="34" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">14 failures</text><text y="46" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">in 60 secs</text><text y="58" text-anchor="middle" font-size="7" fill="#c9a227" font-family="sans-serif">P1 created</text></g><g transform="translate(198,72)"><circle cy="0" r="9" fill="#c9a227"/><text y="-17" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700">T+15s</text><text y="20" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">SDM</text><text y="34" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">War room</text><text y="46" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">L3+Arch sync</text><text y="58" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">comms/15min</text></g><g transform="translate(366,72)"><circle cy="0" r="10" fill="#1a2744" stroke="#e8cc6a" stroke-width="1.3"/><text y="-17" text-anchor="middle" font-size="8" fill="#e8cc6a" font-family="sans-serif" font-weight="700">T+45s</text><text y="20" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">L3</text><text y="34" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">CA policy</text><text y="46" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">identified</text><text y="58" text-anchor="middle" font-size="7" fill="#c9a227" font-family="sans-serif">propose rollback</text></g><g transform="translate(530,72)"><circle cy="0" r="9" fill="#c9a227"/><text y="-17" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700">T+90s</text><text y="20" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">ARCHITECT</text><text y="34" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">ADR review</text><text y="46" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">Approves</text><text y="58" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">5% sample</text></g><g transform="translate(700,72)"><circle cy="0" r="10" fill="#c9a227" stroke="#e8cc6a" stroke-width="1.3"/><text y="-17" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif" font-weight="700">T+5min</text><text y="20" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">RESOLVED</text><text y="34" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">Applied &amp;</text><text y="46" text-anchor="middle" font-size="7" fill="#e8dcc8" font-family="sans-serif">verified</text><text y="58" text-anchor="middle" font-size="7" fill="#c9a227" font-family="sans-serif">Comms sent</text></g><text x="410" y="152" text-anchor="middle" font-size="8" fill="#9a8a6a" font-family="sans-serif" font-style="italic">Humans receive the post-incident notification — they were never paged at 3am.</text></svg></div></div><div class="cs-section"><div class="cs-label">Part 7 · Efficiency</div><h2>What Changes — and Why It Compounds</h2><p>None of the gains below are individually surprising. The point is that all seven happen simultaneously, on the same architecture, against the same SLAs that already exist on the contract.</p><table class="cs-table"><thead><tr><th>Dimension</th><th>Today (Human Team)</th><th>With Cortex Swarm</th></tr></thead><tbody><tr><td class="k">Coverage</td><td class="v">3 follow-the-sun shifts with formal handoffs</td><td class="v">Single team, always on. No handoffs. No context lost between geographies.</td></tr><tr><td class="k">Capacity</td><td class="v">Inelastic. 2× spike can't be staffed in &lt; 24h</td><td class="v">Elastic by definition. 10× spike = 10× concurrent agent instances.</td></tr><tr><td class="k">Quality</td><td class="v">Varies by shift, tenure, individual</td><td class="v">Even. Same prompt, same KB, same eval bar everywhere.</td></tr><tr><td class="k">Speed</td><td class="v">P1 page → human awake → diagnose: 30–60 min</td><td class="v">P1 detect → diagnose → propose → approve → apply: 5 min.</td></tr><tr><td class="k">Languages</td><td class="v">Each language needs native-speaker hiring</td><td class="v">EN/HI/DE on the same agent. Locale bundle is a config file.</td></tr><tr><td class="k">Audit</td><td class="v">Reconstruct from chat + ticket + admin logs over weeks</td><td class="v">One ticket ID → hash-chained replay of every tool call and state change.</td></tr><tr><td class="k">Knowledge</td><td class="v">Walks out with every resignation. 4–8 weeks to rebuild.</td><td class="v">Persistent. KB is versioned. Prompts and tools are reviewed in PR.</td></tr></tbody></table><h3 style="margin-top:36px">The Compounding Effect</h3><p>Speed compounds with capacity (faster resolution × elastic concurrency = shorter incident windows). Audit compounds with quality (every action is replayable, so every regression has a fix that ships in a single PR rather than a memo). Language compounds with coverage (one swarm serves every region in every supported language at the same SLA).</p><div class="cs-pull">The org chart was never the bottleneck. The bottleneck was the shift roster underneath it.</div></div><div class="cs-section"><div class="cs-label">Part 8 · New Challenges</div><h2>The Honest List — What Could Go Wrong</h2><p>The model is not free. It trades a familiar set of operational problems for a less familiar set of socio-technical ones. Each one below is real; each one has a specific mitigation already wired into Cortex Swarm.</p><table class="cs-table"><thead><tr><th>Challenge</th><th>What It Looks Like</th><th>Mitigation</th></tr></thead><tbody><tr><td class="k">Trust gap</td><td class="v">End users distrust "the bot". CIOs distrust autonomy.</td><td class="w">Phase-gated rollout. Human approval on every mutating tool until evals plateau. Audit replay UI for skeptical buyers.</td></tr><tr><td class="k">Audit scrutiny</td><td class="v">Regulators want to know "what did the model decide and why?"</td><td class="w">Hash-chained SHA-256 audit. Every tool call, KB chunk, and state change is replayable in one click via<code style="font-size:.78rem;color:var(--gold-light)">/audit/verify</code>.</td></tr><tr><td class="k">Prompt injection</td><td class="v">Adversarial input tries to make the model exfiltrate or escalate.</td><td class="w">Six layered defences: directive precedence, &lt;data&gt;-tagged inputs, identity gate, Pydantic validation, rate limits, output filter.</td></tr><tr><td class="k">Model drift</td><td class="v">A new model version regresses on something nobody noticed.</td><td class="w">52 eval cases as a CI gate. Semantic grading on resolution, tool-correctness, grounding, citation.<code style="font-size:.78rem;color:var(--gold-light)">make evals</code> fails the build.</td></tr><tr><td class="k">Long-tail edge cases</td><td class="v">Rare scenarios the agent has never seen.</td><td class="w">Escalation patterns. Out-of-scope intent triggers<code style="font-size:.78rem;color:var(--gold-light)">escalate_out_of_scope()</code> to the next tier or to a human.</td></tr><tr><td class="k">Change management</td><td class="v">Humans whose roles dissolve. SP commercial models built on FTE counts.</td><td class="w">The hardest one. Honest position: agents replace tier responsibilities, not the function. Senior staff move to swarm operations, KB curation, and eval authoring.</td></tr><tr><td class="k">Cost &amp; scaling</td><td class="v">Inference cost grows with ticket volume.</td><td class="w">Local inference (LM Studio + Qwen3-Coder-Next) keeps marginal cost low. Bigger models reserved for L3/Architect on rare paths.</td></tr><tr><td class="k">Failure modes</td><td class="v">"Right tool, hallucinated reasoning." Confident wrong answers.</td><td class="w">Formal 13-state machine. Mutating tools callable only in<code style="font-size:.78rem;color:var(--gold-light)">ACTING</code>.<code style="font-size:.78rem;color:var(--gold-light)">RESOLVED</code> reachable only from<code style="font-size:.78rem;color:var(--gold-light)">VERIFYING</code>.</td></tr></tbody></table><h3 style="margin-top:36px">Six Security Defences in Depth</h3><div class="cs-timeline"><div class="cs-tl-item"><div class="cs-tl-dot">01</div><div class="cs-tl-content"><h3>System-prompt directive</h3><p>SECURITY DIRECTIVE at highest precedence — cannot be overridden by user input.</p></div></div><div class="cs-tl-item"><div class="cs-tl-dot">02</div><div class="cs-tl-content"><h3>Input/output normalisation</h3><p>&lt;user_message&gt; and &lt;tool_output&gt; treated as DATA, never instructions.</p></div></div><div class="cs-tl-item"><div class="cs-tl-dot">03</div><div class="cs-tl-content"><h3>Identity-gate decorator</h3><p>Orchestrator blocks cross-user mutations even if the model forgets to check.</p></div></div><div class="cs-tl-item"><div class="cs-tl-dot">04</div><div class="cs-tl-content"><h3>Tool input validation</h3><p>Pydantic + allow-lists. Schema mismatches rejected before execution.</p></div></div><div class="cs-tl-item"><div class="cs-tl-dot">05</div><div class="cs-tl-content"><h3>Per-session rate limit</h3><p>Max 30 tool calls / 10 min · 50 chat turns / hour — prevents runaway loops.</p></div></div><div class="cs-tl-item"><div class="cs-tl-dot">06</div><div class="cs-tl-content"><h3>Output filter</h3><p>Leaked-secret patterns stripped before reaching the UI layer.</p></div></div></div><figure class="cs-figure"><img src="/images/cortex-swarm/swarm-with-guardrails.png" alt="Nihonga-style illustration of five agent crests bound by gold cord — guardrails as composition"><figcaption>Authority is bounded by composition: the model proposes, the orchestrator and adapters dispose.</figcaption></figure></div><div class="cs-section"><div class="cs-label">Part 9 · Delivery</div><h2>Six Phases Over ~12 Months</h2><p>Phase 1 ships in 5 weeks. Each later phase is a drop-in module gated on an explicit trigger — not an arbitrary date.</p><div class="cs-phase-grid"><div class="cs-phase-card"><div class="cs-phase-num">Phase 01 · Now · ~50h</div><div class="cs-phase-title">Foundation</div><ul><li>L1 agent · EN chat</li><li>Stub L2/L3 · mock backends</li><li>State machine + 52 evals</li><li>Hash-chained audit</li></ul><div class="cs-phase-trigger">Trigger: Building now</div></div><div class="cs-phase-card"><div class="cs-phase-num">Phase 02 · ~35h</div><div class="cs-phase-title">Specialist Tiers</div><ul><li>Full L2 + L3 agents</li><li>Real ServiceNow / AD / Intune</li><li>Real OIDC SSO</li><li>KB pruning via evals</li></ul><div class="cs-phase-trigger">Trigger: First pilot signed</div></div><div class="cs-phase-card"><div class="cs-phase-num">Phase 03 · ~45h</div><div class="cs-phase-title">Planning Architecture</div><ul><li>Architect + SDM agents</li><li>Planner / Executor / Verifier</li><li>SDM dashboard + war-room</li></ul><div class="cs-phase-trigger">Trigger: Eval data shows plateau</div></div><div class="cs-phase-card"><div class="cs-phase-num">Phase 04 · ~25h</div><div class="cs-phase-title">Multilingual</div><ul><li>HI + DE locale bundles</li><li>Per-locale KB ingest</li><li>KB provenance + trust tiers</li></ul><div class="cs-phase-trigger">Trigger: External KB integrated</div></div><div class="cs-phase-card"><div class="cs-phase-num">Phase 05 · ~20h</div><div class="cs-phase-title">Voice</div><ul><li>Sarvam (EN/HI) · Azure (DE)</li><li>ElevenLabs alternate</li><li>Browser mic + playback</li></ul><div class="cs-phase-trigger">Trigger: Demand-driven</div></div><div class="cs-phase-card"><div class="cs-phase-num">Phase 06 · ~12h</div><div class="cs-phase-title">Multi-Tenant</div><ul><li>Tenant ID propagation</li><li>Branded shells per tenant</li><li>Per-tenant SLA dashboards</li></ul><div class="cs-phase-trigger">Trigger: Second client signed</div></div></div><div class="cs-visual" style="margin-top:24px"><svg viewBox="0 0 820 90" xmlns="http://www.w3.org/2000/svg"><rect width="820" height="90" fill="#0d0d1a"/><text x="410" y="18" text-anchor="middle" font-size="7" fill="#9a8a6a" letter-spacing="2" font-family="sans-serif">~12 MONTHS · TRIGGER-GATED · EACH PHASE IS A DROP-IN MODULE</text><line x1="36" y1="46" x2="784" y2="46" stroke="#c9a227" stroke-width=".8" stroke-opacity=".4"/><circle cx="90" cy="46" r="13" fill="#c9a227"/><text x="90" y="50" text-anchor="middle" font-size="8" fill="#080810" font-weight="700" font-family="sans-serif">P1</text><text x="90" y="72" text-anchor="middle" font-size="7" fill="#c9a227" font-family="sans-serif">5 weeks</text><circle cx="218" cy="46" r="10" fill="#0a1428" stroke="#c9a227" stroke-width="1"/><text x="218" y="50" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif">P2</text><text x="218" y="72" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">pilot+</text><circle cx="374" cy="46" r="10" fill="#0a1428" stroke="#c9a227" stroke-width="1"/><text x="374" y="50" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif">P3</text><text x="374" y="72" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">plateau</text><circle cx="522" cy="46" r="10" fill="#0a1428" stroke="#c9a227" stroke-width="1"/><text x="522" y="50" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif">P4</text><text x="522" y="72" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">multilingual</text><circle cx="644" cy="46" r="10" fill="#0a1428" stroke="#c9a227" stroke-width="1"/><text x="644" y="50" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif">P5</text><text x="644" y="72" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">voice</text><circle cx="750" cy="46" r="10" fill="#0a1428" stroke="#c9a227" stroke-width="1"/><text x="750" y="50" text-anchor="middle" font-size="8" fill="#c9a227" font-family="sans-serif">P6</text><text x="750" y="72" text-anchor="middle" font-size="7" fill="#9a8a6a" font-family="sans-serif">multi-tenant</text></svg></div></div><div class="cs-section" style="border-bottom:none"><div class="cs-label">Closing</div><h2>The Org Chart Was Always the Answer</h2><p>Every senior engineer who has ever worked in IT operations recognises the five-tier shape. It's the shape that emerges every time, in every geography, in every sector, because the responsibilities map cleanly onto the kinds of decisions a team needs to make. That same shape is exactly what makes a swarm legible: each agent does what the role already does, no more, no less, and the rest of the building knows where to send its ticket.</p><p>The interesting work over the next year is not adding more agents. It is sharpening the seams between them — better identity gates, better KB provenance, faster audit replays, tighter eval cases — so that what runs in production is a system anyone in IT operations can trust without having to also be an AI specialist.</p><div class="cs-statbar"><div class="cs-stat"><span class="num">5</span><span class="lbl">Agents<br>L1 · L2 · L3 · Arch · SDM</span></div><div class="cs-stat"><span class="num">~137</span><span class="lbl">FTE mirrored<br>across all tiers</span></div><div class="cs-stat"><span class="num">24×7</span><span class="lbl">Single team<br>no shift roster</span></div><div class="cs-stat"><span class="num">1-click</span><span class="lbl">Audit verify<br>any ticket</span></div></div><div class="cs-ornament" style="margin-top:40px">· · ·</div><p style="text-align:center;margin-top:20px;color:var(--muted);font-size:.85rem"><strong style="color:var(--gold);font-family:'Noto Serif',serif">Ajay Walia</strong> · Digital Workplace Operations · May 2026<br><a href="https://linkedin.com/in/ajaywalia" style="color:var(--gold)">LinkedIn: /in/ajaywalia</a></p></div></div>
]]></content:encoded><media:content url="https://curiousbit.netlify.app/images/cortex-swarm/cortex-swarm-hero-v2.png" medium="image"><media:title type="plain">Projects</media:title></media:content><category>artificial-intelligence</category><category>agentic-ai</category><category>digital-workplace</category><category>itil</category><category>automation</category><category>llm</category><category>Projects</category></item></channel></rss>