New Capability: Aegis Website Ownership
Date: 2026-03-18 Origin: Blank agent cards shipped to production on the
/about/ai-team/org-chartpage 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:
- Count
.claude/agents/*.mdfiles - Compare against Sanity AI contributor count
- Compare against org-roster.yaml entries
- Compare against INDEX.md claimed count
- 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.mdcontains owned pages, components, data sources, and health check protocol - ORG_STRUCTURE in the org chart component includes all agents (Audit and Baldwin added)
AgentDetailDrawer.tsxprefers 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.