New Capability: Aegis Website Ownership

New Capability: Aegis Website Ownership

Date: 2026-03-18 Origin: Blank agent cards shipped to production on the /about/ai-team/org-chart page and went undetected for 2 days. Root cause: the data source shifted from HTML job descriptions to Sanity CMS bios, but no agent owned the consumer pages or was accountable for verifying the data flow. Impact: Aegis now owns the public-facing AI team pages on valuefirstteam.com, with documented data flow from agent definitions through Sanity CMS to the website. Clear accountability for org chart health eliminates the ambiguity that allowed blank cards to ship undetected. Filed by: V (COO)


Capability

The Value-First AI organization has 72 agents. The public-facing representation of that organization -- the AI team roster and interactive org chart at valuefirstteam.com -- draws from 6 different data sources that must stay synchronized. Before this capability, no agent owned those pages. When the canonical data source shifted from static HTML job descriptions to Sanity CMS contributor records, nothing validated that the consumer components still rendered correctly. Blank cards appeared in production.

Aegis -- the org chart and structure agent -- now has explicit ownership of these pages, a documented data flow architecture, and a health check protocol for detecting drift between sources. This is not a code fix. It is an accountability fix. The code changes (adding missing agents, fixing bio priority, making counts dynamic) are consequences of having an owner who can identify and resolve the problems.


What Was Built

Aegis Agent Definition Expansion

The Aegis agent definition (.claude/agents/aegis.md) was expanded from a generic stub to a comprehensive ownership document covering:

Owned Website Pages:

Page URL Rendering Data Source
AI Team Roster /about/ai-team SSR from Sanity 72 Sanity contributor records
Interactive Org Chart /about/ai-team/org-chart React Flow with hardcoded structure ORG_STRUCTURE constant + Sanity bios in drawer

Owned Components:

Component Purpose
OrgChartPanel.tsx React Flow canvas with territory zones (Operations, Customer, Finance, Cross-Org)
AgentDetailDrawer.tsx Slide-out detail panel with structured JD + plain bio fallback

Documented Data Sources (must stay in sync):

Source Location Record Count Role
Claude agent definitions .claude/agents/*.md 70 files Spawnable agent behavior
Sanity CMS contributors Sanity dataset 72 AI records Website source of truth
Org roster agents/org-roster.yaml 71 entries Machine-readable roster
Agent Office snapshot data/office-snapshot.json 66 entries Runtime state
Leadership INDEX skills/ai-leadership/INDEX.md Documented roster Leadership framework docs
Static reference /mnt/d/Leadership/assessments/2026-03-15-ai-org-chart.html 67 agents Cytoscape.js reference

Health Check Protocol

Aegis can now validate org chart health by comparing counts across all 6 sources and flagging mismatches with specific numbers. The protocol:

  1. Count .claude/agents/*.md files
  2. Compare against Sanity AI contributor count
  3. Compare against org-roster.yaml entries
  4. Compare against INDEX.md claimed count
  5. Flag mismatches with specific counts per source

This turns "are our pages accurate?" from a question nobody asks into a check any agent can run.

HTML JD Deprecation

Job description files at /mnt/d/Leadership/assessments/job-descriptions/ (79 markdown, 52 HTML) are now designated as legacy artifacts. Sanity CMS is the canonical source for website display. The HTML JDs remain available as reference material or for generating Sanity content, but they are no longer the primary data path to the website.

Org Chart Data Fixes

Fix Before After
Missing agents in ORG_STRUCTURE Audit and Baldwin absent from hardcoded structure Both agents present in correct org positions
Agent counts in page meta Static numbers that drift Dynamic counts from actual data
Bio display priority shortBio preferred (often empty) Full bio preferred, shortBio as fallback

Architecture

Data Flow

.claude/agents/*.md (agent behavior definitions)
    |
    v
Sanity CMS contributor records (website source of truth)
    |
    +---> /about/ai-team (team roster page, SSR)
    |
    +---> /about/ai-team/org-chart (interactive org chart, React Flow)
              |
              +---> OrgChartPanel.tsx (canvas with territory zones)
              |
              +---> AgentDetailDrawer.tsx (detail panel, bio from Sanity)

agents/org-roster.yaml + data/office-snapshot.json (operational state)
    |
    v
skills/ai-leadership/INDEX.md (leadership documentation)

The architectural dependency is clear: agent definitions feed Sanity, Sanity feeds the website. Operational state (roster YAML, office snapshot) feeds documentation. The two paths converge at the org chart page, where the hardcoded ORG_STRUCTURE determines layout and Sanity provides the content displayed in the drawer.

Ownership Boundary

Aegis owns the pages, components, and the synchronization between data sources. Aegis does not own the data sources themselves -- .claude/agents/*.md files are maintained by V and each agent's respective leader, Sanity records are maintained through standard content operations, and the Agent Office snapshot is maintained by runtime infrastructure.

What Aegis owns is the contract between these sources and the website: when a new agent is added to the roster, Aegis is accountable for ensuring the agent appears correctly on both pages.


Why It Matters

The Blank Card Problem

Two agents (Audit and Baldwin) were missing from the hardcoded ORG_STRUCTURE in the org chart component. Their nodes existed in the Sanity data but had no position in the layout, resulting in blank cards rendering in production. The AgentDetailDrawer was also preferring shortBio over bio, and many agents had empty shortBio fields -- producing drawers with no content.

This shipped and remained undetected for 2 days. Not because the code was wrong in an obvious way, but because nobody was looking. No agent was assigned to verify the public AI team pages reflected the actual organization.

Accountability Over Auditing

The fix is not "audit more often." The fix is ownership. When Aegis owns these pages, the health check protocol becomes part of Aegis's operational responsibility. When the org grows from 67 to 72 agents, the mismatch between the hardcoded structure and Sanity contributor count is something Aegis catches -- not something that accumulates silently until a visitor sees blank cards.

Data Source Clarity

The HTML job descriptions at /mnt/d/Leadership/assessments/job-descriptions/ were the original source for agent bios. When Sanity became the website's data layer, the HTML JDs became legacy artifacts. But nothing documented this transition. The Aegis agent definition now makes the data flow explicit: Sanity is canonical for the website, HTML JDs are reference material. Future contributors will not need to guess which source matters.


Commit Reference

Commit: e30a13f4 Summary: Fix org chart blank cards + add missing agents + expand Aegis ownership


Verification

The capability is confirmed when:

  • Aegis agent definition at .claude/agents/aegis.md contains owned pages, components, data sources, and health check protocol
  • ORG_STRUCTURE in the org chart component includes all agents (Audit and Baldwin added)
  • AgentDetailDrawer.tsx prefers full bio over shortBio
  • Page titles use dynamic agent counts
  • No blank cards render on /about/ai-team/org-chart

Significance

This is a small capability with an outsized implication. The Value-First AI organization is growing -- from 39 agents at the first all-hands to 72 today. Every addition creates a synchronization obligation across 6 data sources. Without clear ownership, that obligation is nobody's job. Blank cards, stale bios, missing agents -- these are not bugs in the traditional sense. They are governance gaps.

Aegis closing this gap means the public representation of the AI organization is someone's responsibility. Not in a "we should check this periodically" sense, but in a "this agent owns these pages and has a protocol for validating them" sense. The difference between those two sentences is the difference between drift and accountability.

The human role is relationships and judgment. The system role is everything else -- including knowing when its own public face is broken.