AI Tools Governance Index
.
Not present in production builds. Safe no-op in prod. */
body {
padding: 0 !important;
}
/* Colors Used
#3CB540 - Jade Green
#2b9a66 - Light Green
#18794E - Dark Green
Complementary Greens
See https://coolors.co/004225-1a794e-08a045-3cb540-62ba4f
#004225 - Deep Forrest
#1A794E - Turf Green
#08A045 - Medium Jungle
#3CB540 - Jade Green
#6BBF59 - Moss Green
See https://coolors.co/0c0c0c-073b3a-1a794e-08a045-6bbf59
#0C0C0C - Onyx Black
#073B3A - Dark Teal
#1A794E - Turf Green
#08A045 - Medium Jungle
#6BBF59 - Moss Green
See https://coolors.co/fffffa-073b3a-1a794e-08a045-6bbf59
#FFFFFA - Porcelain
#073B3A - Dark Teal
#1A794E - Turf Green
#08A045 - Medium Jungle
#6BBF59 - Moss Green
Pink Offset Colour
See https://coolors.co/073b3a-1a794e-f61067-08a045-6bbf59
#F61067 - Razzmatazz Pink
#073B3A - Dark Teal
#1A794E - Turf Green
#08A045 - Medium Jungle
#6BBF59 - Moss Green
*/
/* ============================================
GLOBAL THEME VARIABLES
Component governance source of truth
============================================ */
:root {
--lp-color-accent: #3cb540;
--lp-color-accent-strong: #18794e;
--lp-color-accent-soft: #6bbf59;
--lp-color-accent-bright: #5dd662;
--lp-color-accent-brightest: #a0f0a5;
--lp-color-arbitrum: #3ea6f8;
--lp-color-text-primary: #181c18;
--lp-color-text-secondary: #717571;
--lp-color-text-muted: #9ca3af;
--lp-color-bg-page: #ffffff;
--lp-color-bg-card: #f9fafb;
--lp-color-bg-elevated: #f3f6f4;
--lp-color-bg-subtle: rgba(24, 28, 24, 0.04);
--lp-color-bg-overlay: rgba(12, 12, 12, 0.5);
--lp-color-border-default: #e5e7eb;
--lp-color-border-strong: rgba(24, 28, 24, 0.18);
--lp-color-border-inverse: rgba(255, 255, 255, 0.5);
--lp-color-on-accent: #ffffff;
--lp-color-link: #18794e;
--lp-color-link-hover: #004225;
--lp-color-brand-discord: #5865f2;
--lp-color-brand-forum: #00aeef;
--lp-color-brand-github: #181c18;
--lp-color-brand-x: #181c18;
--lp-color-brand-globe: #00c0ff;
--lp-color-brand-twitch: #9048ff;
--lp-color-brand-youtube: #ff0034;
--lp-color-brand-instagram: #dc2275;
--lp-color-brand-linkedin: #0189df;
--lp-color-brand-preview: #b636dd;
--lp-color-brand-coming-soon: #ef1a73;
--lp-color-brand-linux: #ff9a0e;
--lp-color-brand-windows: #14bbf7;
--lp-color-brand-macos: #60ba47;
--lp-color-status-good: #22c55e;
--lp-color-status-warn: #fbbf24;
--lp-color-status-bad: #ef4444;
--lp-spacing-1: 0.25rem;
--lp-spacing-2: 0.5rem;
--lp-spacing-3: 0.75rem;
--lp-spacing-4: 1rem;
--lp-spacing-6: 1.5rem;
--lp-spacing-8: 2rem;
--lp-spacing-px-3: 3px;
--lp-spacing-px-4: 4px;
--lp-spacing-px-6: 6px;
--lp-spacing-px-8: 8px;
--lp-spacing-px-12: 12px;
--lp-font-sans: 'Inter', 'Segoe UI', sans-serif;
--lp-font-mono: 'SFMono-Regular', 'SF Mono', 'Menlo', monospace;
--lp-radius-sm: 0.25rem;
--lp-radius-md: 0.5rem;
--lp-radius-lg: 0.75rem;
--lp-shadow-card: 0 8px 24px rgba(24, 28, 24, 0.08);
--lp-z-base: 1;
--lp-z-overlay: 10;
--lp-z-modal: 50;
/* Legacy aliases maintained during migration */
--accent: var(--lp-color-accent);
--accent-dark: var(--lp-color-accent-strong);
--hero-text: var(--lp-color-text-primary);
--text: var(--lp-color-text-secondary);
--text-secondary: var(--lp-color-text-secondary);
--muted-text: var(--lp-color-text-muted);
--background: var(--lp-color-bg-page);
--card-background: var(--lp-color-bg-card);
--background-highlight: var(--lp-color-bg-subtle);
--border: var(--lp-color-border-default);
--button-text: var(--lp-color-on-accent);
--page-header-description-color: var(--lp-color-text-secondary);
--arbitrum: var(--lp-color-arbitrum);
}
.dark {
--lp-color-accent: #2b9a66;
--lp-color-accent-strong: #18794e;
--lp-color-accent-soft: #3cb540;
--lp-color-accent-bright: #5dd662;
--lp-color-accent-brightest: #7fe584;
--lp-color-text-primary: #e0e4e0;
--lp-color-text-secondary: #a0a4a0;
--lp-color-text-muted: #6b7280;
--lp-color-bg-page: #0d0d0d;
--lp-color-bg-card: #1a1a1a;
--lp-color-bg-elevated: #141a16;
--lp-color-bg-subtle: rgba(255, 255, 255, 0.1);
--lp-color-bg-overlay: rgba(0, 0, 0, 0.5);
--lp-color-border-default: #333333;
--lp-color-border-strong: rgba(255, 255, 255, 0.3);
--lp-color-border-inverse: rgba(255, 255, 255, 0.5);
--lp-color-on-accent: #ffffff;
--lp-color-link: #5dd662;
--lp-color-link-hover: #a0f0a5;
--lp-color-brand-github: #f0f0f0;
/* Legacy aliases maintained during migration */
--accent: var(--lp-color-accent);
--accent-dark: var(--lp-color-accent-strong);
--hero-text: var(--lp-color-text-primary);
--text: var(--lp-color-text-secondary);
--text-secondary: var(--lp-color-text-secondary);
--muted-text: var(--lp-color-text-muted);
--background: var(--lp-color-bg-page);
--card-background: var(--lp-color-bg-card);
--background-highlight: var(--lp-color-bg-subtle);
--border: var(--lp-color-border-default);
--button-text: var(--lp-color-on-accent);
--page-header-description-color: var(--lp-color-text-secondary);
--arbitrum: var(--lp-color-arbitrum);
}
/* ============================================ */
/* Code block themes
hiki codeblock themes:
Popular Dark Themes:
github-dark (what you have now)
github-dark-dimmed
github-dark-high-contrast
dracula
dracula-soft
monokai
nord
one-dark-pro
poimandres
rose-pine
everforest-dark
vitesse-dark
Popular Light Themes:
github-light (what you have now)
github-light-high-contrast
solarized-light
rose-pine-dawn
everforest-light
vitesse-light */
/* img[alt="dark logo"],
img[alt="light logo"] {
max-width: 180px;
} */
/* V2 TEST */
/* a.nav-tabs-item[href="/pages/resources/resources_hub.mdx"],
a.nav-tabs-item[href="/pages/08_help/README"] {
color: rgba(255, 90, 90, 0.342) !important;
} */
/* Make the nav-tabs container full width */
.nav-tabs {
width: 100%;
justify-content: flex-start;
}
/* Fix Mintlify content width and centering.
Regular pages: balance padding + widen inner cap.
Portal/frame pages: balance padding (smaller) + widen inner cap for full-width hero. */
@media (min-width: 1024px) {
/* Regular pages */
#content-container:not(:has(.frame-mode-hero-full)):not(
:has(.frame-mode-container)
) {
padding-left: 3rem !important;
padding-right: 3rem !important;
}
#content-container:not(:has(.frame-mode-hero-full)):not(
:has(.frame-mode-container)
)
> .max-w-5xl {
max-width: 72rem !important;
}
/* Portal/frame pages — tighter balanced padding, wider inner cap */
#content-container:has(.frame-mode-hero-full),
#content-container:has(.frame-mode-container) {
padding-left: 2rem !important;
padding-right: 2rem !important;
}
#content-container:has(.frame-mode-hero-full) > .max-w-5xl,
#content-container:has(.frame-mode-container) > .max-w-5xl {
max-width: 80rem !important;
}
}
#navbar > div.z-10.mx-auto.relative > div.hidden.lg\:flex.px-12.h-12 > div {
column-gap: 2rem !important;
}
a.nav-tabs-item[href*='/internal/'] {
margin-left: 1rem;
margin-right: -1rem;
padding-right: 0;
border-bottom-color: transparent !important;
}
/* .gap-x-6 {
column-gap: 2rem !important;
} */
/* .nav-tabs h-full flex text-sm gap-x-6 {
column-gap: 2rem !important;
} */
/* Push Resource HUB to the right and style as outlined button */
a.nav-tabs-item[href$='/resources/redirect'],
a.nav-tabs-item[href$='/resources/portal'],
a.nav-tabs-item[href$='/07_resources/redirect'],
a.nav-tabs-item[href$='/07_resources/portal'] {
margin-left: auto;
background-color: transparent;
border: 1px solid var(--accent) !important;
padding: 4px 8px;
border-radius: 4px;
font-size: 0.7rem;
height: auto !important;
align-self: center;
margin-right: -2rem;
}
/* Color the text */
/* a.nav-tabs-item[href="/v2/resources/resources_hub"] {
color: #2b9a66 !important;
} */
/* Shrink & color the icon */
a.nav-tabs-item[href$='/resources/redirect'] svg,
a.nav-tabs-item[href$='/resources/portal'] svg,
a.nav-tabs-item[href$='/07_resources/redirect'] svg,
a.nav-tabs-item[href$='/07_resources/portal'] svg,
a.nav-tabs-item[href$='/07_resources/resources_hub'] svg {
height: 0.75rem;
width: 0.75rem;
/* background-color: #2b9a66 !important; */
}
/* Hide the underline on the button */
a.nav-tabs-item[href$='/resources/redirect'] > div:last-child,
a.nav-tabs-item[href$='/resources/portal'] > div:last-child,
a.nav-tabs-item[href$='/07_resources/redirect'] > div:last-child,
a.nav-tabs-item[href$='/07_resources/portal'] > div:last-child,
a.nav-tabs-item[href$='/07_resources/resources_hub'] > div:last-child {
display: none;
}
/* Stack footer links vertically */
#footer .flex-col .flex.gap-4 {
flex-direction: column !important;
gap: 0rem !important;
}
/* Reduce footer padding */
#footer > div {
padding-top: 2rem !important;
padding-bottom: 1rem !important;
}
/* Accessibility: prevent hidden assistant sheet from receiving focus */
#chat-assistant-sheet[aria-hidden='true'] {
display: none !important;
}
/* Accessibility: ensure CTA buttons meet minimum target size */
button.text-left.text-gray-600.text-sm.font-medium {
min-height: 24px;
padding-top: 4px;
padding-bottom: 4px;
}
/* #footer > div > div:first-child {
display: flex;
flex-direction: row !important;
color: red !important;
}
#footer > div > div:first-child > div {
display: flex;
flex-direction: row !important;
color: green !important;
} */
/* Fix bad styling of cards with arrows */
[data-component-part='card-content-container'] {
padding-right: 2.5rem; /* Creates space for the arrow */
}
/* Reposition View component dropdown */
/*
To find the correct selector:
1. Open your page with View components in the browser
2. Right-click on the dropdown in the top-right corner
3. Select "Inspect Element"
4. Find the class name or data attribute
5. Replace the selector below with the actual one
*/
/* Common possible selectors - uncomment and adjust the one that works */
/* Option 1: If it has a data attribute */
/* [data-view-dropdown] {
position: relative !important;
top: 60px !important;
right: 20px !important;
} */
/* Option 2: If it's in a fixed container */
/* .fixed [class*="view"] {
position: relative !important;
top: 60px !important;
} */
/* Option 3: Target by position (fixed elements in top-right) */
/* .fixed.top-0.right-0 [class*="select"],
.fixed.top-0.right-0 [class*="dropdown"] {
position: relative !important;
top: 60px !important;
margin-right: 20px !important;
} */
/* Option 4: Move it inline with content instead of fixed position */
/* Replace 'ACTUAL_SELECTOR' with the real class name from browser inspection */
/* ACTUAL_SELECTOR {
position: static !important;
display: inline-block !important;
margin-bottom: 20px !important;
} */
.code-block > div > div > svg {
background-color: #18794e !important;
}
/* Error 404 Styling */
#error-description > span > div > div {
border: 1px solid #18794e !important;
}
body
> div.relative.antialiased.text-gray-500.dark\:text-gray-400
> div.peer-\[\.is-not-custom\]\:lg\:flex.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:sm\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:md\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:lg\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:xl\:\!hidden
> div.flex.flex-col.items-center.justify-center.w-full.max-w-lg.overflow-x-hidden.mx-auto.py-48.px-5.text-center.\*\:text-center.gap-y-8.not-found-container
> div {
margin-top: -5rem;
}
#error-description
> span
> div
> div
> div.relative.rounded-xl.overflow-hidden.flex.justify-center
> img {
width: 500px;
aspect-ratio: 4 / 3;
object-fit: cover;
/* border: 1px solid #fff; */
}
/* Step List Color Icons Styling */
/* #content > div.steps > div > div.absolute.ml-\[-13px\].py-2 > div {
background-color: #18794e !important;
} */
/* Step List Color Titles */
#content
> div.steps.ml-3\.5.mt-10.mb-6
> div
> div.w-full.overflow-hidden.pl-8.pr-px
> p {
color: #2b9a66 !important;
}
/* View Dropdown */
/* #radix-_R_5slubt9fen9fdb_ */
/* Turn off bg-white in dark mode for multi-view dropdown (PALM THEME BUG) */
.dark .bg-white\/\[0\.95\].multi-view-dropdown-trigger {
background-color: transparent !important;
background: none !important;
}
/* Sidebar collapse button - bigger and easier to click */
/* #sidebar button.absolute {
min-width: 2.5rem !important;
min-height: 2.5rem !important;
padding: 0.75rem !important;
z-index: 100 !important;
} */
/* Override US flag with UK flag in language selector */
/* Hide the original img and use background-image instead */
/* #localization-select-trigger img[alt="US"],
#localization-select-item-en img[alt="US"],
img[alt="US"][src*="flags/US.svg"] {
opacity: 0 !important;
position: relative !important;
}
#localization-select-trigger img[alt="US"]::before,
#localization-select-item-en img[alt="US"]::before,
img[alt="US"][src*="flags/US.svg"]::before {
content: "" !important;
position: absolute !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
background-image: url("/snippets/assets/media/images/site/united-kingdom-flag-icon.svg") !important;
background-size: cover !important;
background-position: center !important;
border-radius: 50% !important;
opacity: 1 !important;
} */
/* Hide the panel on frame mode pages (MINTLIFY SUCKS) */
/* Hide empty table of contents layout only when it's empty */
#table-of-contents-layout:empty,
#content-side-layout:has(#table-of-contents-layout:empty) {
display: none;
}
/* DynamicTable: force fixed layout so columnWidths prop values take effect.
Mintlify's Tailwind prose resets table-layout to auto — !important required. */
[data-docs-dynamic-table] {
table-layout: fixed !important;
}
/* StyledTable should sit flush inside its own border shell.
Mint wraps rendered tables in a scroll container with vertical padding,
which creates a false gap above/below the header row. */
[data-docs-styled-table-shell] > div {
padding-top: 0 !important;
padding-bottom: 0 !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
/* BorderedBox should own its internal spacing.
Trim default block margins on the first/last rendered child so headings
and paragraphs do not add a false gap inside the padded shell. */
[data-docs-bordered-box] > :first-child {
margin-top: 0 !important;
}
[data-docs-bordered-box] > :last-child {
margin-bottom: 0 !important;
}
[data-docs-bordered-box][data-accent-bar]::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 4px;
background-color: var(--accent-bar-color);
border-radius: inherit;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
/* Frame mode container - 80% of #content-container width, centered */
/* Breaks out of #content padding to center in full #content-container */
.frame-mode-container {
width: calc(100% + 96px + 20px); /* 976px */
margin-left: -96px;
margin-right: -20px;
margin-bottom: 2rem;
padding-left: 15%; /* Adjust this for desired content width */
padding-right: 15%; /* Adjust this for desired content width */
box-sizing: border-box;
}
/* Frame mode container inside hero - already broken out, so reset */
.frame-mode-hero-full .frame-mode-container {
width: 100%;
margin-left: 0;
margin-right: 0;
padding-left: 0%;
padding-right: 0%;
}
/* Pagination on frame mode pages ONLY - match container padding */
[data-page-mode='frame'] #pagination {
width: calc(100% + 96px + 20px);
margin-left: -96px;
margin-right: -20px;
padding-left: calc((100% + 96px + 20px) * 0.1 + 96px);
padding-right: calc((100% + 96px + 20px) * 0.1 + 20px);
box-sizing: border-box;
}
/* Hero full width - breaks out of #content padding to fill #content-container */
.frame-mode-hero-full {
width: calc(100% + 96px + 20px);
margin-left: -96px;
margin-right: -20px;
position: relative;
}
@media (max-width: 1023px) {
.frame-mode-container {
width: 100%;
margin-left: 0;
margin-right: 0;
padding-left: 1rem;
padding-right: 1rem;
}
[data-page-mode='frame'] #pagination {
width: 100%;
margin-left: 0;
margin-right: 0;
padding-left: 1rem;
padding-right: 1rem;
}
.frame-mode-hero-full {
width: 100%;
margin-left: 0;
margin-right: 0;
}
}
#starfield {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
}
/* Target the card content container */
.frame-mode-hero-full [data-component-part='card-content-container'] {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
padding-left: 1rem;
padding-right: 2.5rem; /* Space for arrow icon (0.75rem right + icon width ~1rem + margin) */
}
/* Target the arrow icon */
.frame-mode-hero-full #card-link-arrow-icon {
top: 0.75rem;
right: 0.75rem;
}
/* #content > div.frame-mode-hero-full > div.frame-mode-container > div > div:nth-child(2) > div > div > div:nth-child(4) > a > div {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
#content > div.frame-mode-hero-full > div.frame-mode-container > div > div:nth-child(2) > div > div > div:nth-child(4) > a > div > #card-link-arrow-icon {
top: 0.75rem;
right: 0.75rem;
} */
/* ============================================
ACCESSIBILITY — Focus indicators
============================================ */
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
button:focus-visible,
a:focus-visible,
[tabindex]:focus-visible {
outline: 2px solid var(--accent) !important;
outline-offset: 2px;
}
/* ============================================
ACCESSIBILITY — Responsive breakpoints
============================================ */
@media (max-width: 767px) {
.frame-mode-hero-full {
width: 100%;
max-width: 100%;
overflow-x: hidden;
}
}
@media (max-width: 480px) {
#content {
padding-left: 1rem;
padding-right: 1rem;
}
}
/* ============================================
UTILITY CLASSES — inline element styling
Used where components can't replace inline spans
(e.g., inside Mintlify
, components)
============================================ */
.lp-inline-flex {
display: flex;
align-items: center;
}
.lp-text-muted {
color: var(--lp-color-text-secondary);
}
.lp-text-italic-muted {
font-style: italic;
color: var(--lp-color-text-secondary);
}
.lp-inline-flex-gap {
display: flex;
align-items: center;
gap: 0.2rem;
}
.lp-link-underline {
border-bottom: 1.5px solid var(--lp-color-text-primary);
color: var(--lp-color-text-primary);
padding-bottom: 0.25rem;
}
This page is the technical governance index for AI tooling in the Livepeer docs repository. It answers: what is the AI tools governance model, where is the registry, how are tools classified, and how do you validate compliance.
For the human-facing guide to AI features on the docs site, see docs-guide/features/ai-features.mdx .
Registry
The AI-tools registry is the canonical source of truth for everything under ai-tools/**. It records what exists, how each artifact is classified, which lane it belongs to, and its lifecycle state.
Artefact Path Registry (canonical inventory) ai-tools/registry/ai-tools-registry.jsonRegistry schema ai-tools/registry/ai-tools-registry.schema.jsonGenerated inventory report ai-tools/registry/ai-tools-inventory.mdValidator CLI operations/scripts/validators/governance/compliance/validate-ai-tools-registry.js
Validator commands
# Validate registry against schema and check coverage
node operations/scripts/validators/governance/compliance/validate-ai-tools-registry.js --check --coverage
# Validate lane assignments
node operations/scripts/validators/governance/compliance/validate-ai-tools-registry.js --check --lanes
# Generate the inventory report
node operations/scripts/validators/governance/compliance/validate-ai-tools-registry.js --write-report
Registry schema summary
The registry schema (ai-tools-registry.schema.json) requires five top-level keys:
Key Type Purpose versioninteger Schema version (currently 1) discovery_rootsstring[] Root directories the registry covers (currently ["ai-tools"]) exclusionsstring[] Paths excluded from discovery laneslane[] Classification lanes with path patterns lifecycle_stateslifecycleState[] Allowed lifecycle states for artifacts artifactsartifact[] Every registered artifact with full metadata
Each artifact entry records: id, path, artifact_type, category, lifecycle_state, current_lane, target_lane, canonical_source, derived_outputs, runtime_targets, validators, repair_commands, catalog_group, status, migration_wave, and notes.
Lane model
The registry organises all AI-tools artefacts into seven lanes. Lane assignment is enforced by path pattern matching in the registry schema.
Lane What it governs Path patterns Advisory only templatesCanonical portable-skill templates and companion bundles ai-tools/ai-skills/templates/**No localRepo-local SKILL.md roots consumed in-place ai-tools/ai-skills/*/SKILL.mdNo workspaceResearch, packages, and source snapshots (non-canonical) ai-tools/ai-skills/source-content/**, *research*.md, *package*.mdYes exportsGenerated agent-pack manifests and portable skill exports ai-tools/agent-packs/**No rulesLegacy or imported AI rule material pending normalisation ai-tools/ai-rules/**Yes manual-docRegistry artefacts, subsystem-scoped governance/support docs ai-tools/*.mdx, ai-tools/registry/**, ai-tools/ai-skills/catalog/**, and othersNo retiredHistorical material retained for reference only ai-tools/retired/**Yes
Root Governance Status
ai-tools/ is an approved root subsystem in the current root-governance contract.
Current implementation rule:
keep ai-tools/ at repo root
govern it explicitly instead of treating it as tolerated drift
keep generated outputs derived only
defer any structural review of whether it should move to a later governance pass
Canonical planning references:
workspace/plan/active/AI-TOOLS-GOVERNANCE/structure.md
workspace/plan/active/AI-TOOLS-GOVERNANCE/architecture-audit.md
Shared classification model
The governed skill system now uses a script-like taxonomy plus AI-specific layers:
Field Values typeatomic, dispatcher, adapter, governance, referenceconcernreview, research, authoring, repo-ops, validation, migration, release, agent-runtimescoperepo, agent, platform, generated, personal-globalstatusactive, experimental, generated, deprecated, retiredlayercanonical, adapter, generated, global-platform, legacy
metadata.category remains in place as a compatibility field while the current skill/export stack still depends on it.
Lifecycle states
Every artifact in the registry carries one of these lifecycle states:
State Meaning canonical-templateCanonical editable source for portable skills and companion template bundles local-syncedRepo-local skill roots derived from canonical portable templates portable-exportGenerated export artefacts derived from canonical AI-tools sources manual-docHuman-readable canonical docs, registry artefacts, or subsystem-scoped governance documents workspace-draftNon-canonical research, drafts, or handoff material excluded from active generated catalogs legacy-activeActive legacy surfaces still in use but requiring later normalisation or retirement retiredHistorical material retained only as reference
Adapter inventory
All active native adapter files and their owning tools. Each adapter is a thin pointer back to AGENTS.md; policy must not drift between surfaces. Canonical governance policy: docs-guide/policies/agent-governance-framework.mdx .
Canonical adapter files
Every file listed below has been verified on disk.
Agent family Canonical adapter path Files on disk Notes Cross-agent baseline AGENTS.mdAGENTS.mdPrimary source of truth for all repo-wide rules GitHub Copilot .github/copilot-instructions.mdcopilot-instructions.mdGitHub-native path; thin adapter Claude Code .claude/CLAUDE.mdCLAUDE.mdClaude Code native path Cursor .cursor/rules/*.mdcrepo-governance.mdc, no-deletions.mdcActive canonical Cursor adapter surface Windsurf .windsurf/rules/*.mdrepo-governance.mdWindsurf native path Augment Code .augment/rules/*.mdrepo-governance.md, git-safety.md, no-deletions.mdAdded Phase 9 Mintlify Assistant .mintlify/Assistant.mdAssistant.mdChat widget context for the docs site (not an AI coding adapter) Codex (task layer) .github/AGENTS.mdAGENTS.mdCodex-specific HitL and checkpoint rules; extends root AGENTS.md via directory-walk
Legacy assistant redirects may still exist outside the active adapter set, but they are not part of the governed root contract.
Supplemental cross-agent packs (generated, not canonical)
Output Path Generator Codex skills manifest ai-tools/agent-packs/codex/skills-manifest.jsoncross-agent-packager.js --agent-pack allCursor rules pack ai-tools/agent-packs/cursor/rules.mdsame Claude Code pack ai-tools/agent-packs/claude/CLAUDE.mdsame Windsurf rules pack ai-tools/agent-packs/windsurf/rules.mdsame Portable skills pack ai-tools/agent-packs/skills/same Pack README ai-tools/agent-packs/README.mdsame
Shared adapter rules
All active agent-governance surfaces enforce:
Agents must not use port 3000 for local Mintlify, preview, or browser-validation sessions.
Choose a non-3000 port explicitly when running local preview commands.
Adapter consumption model
The adapter rule is now explicit:
canonical logic should exist once
agent wrappers may exist many times
generated outputs should exist zero times by hand
Adapter responsibilities:
register or expose canonical repo capabilities in the native interface of the agent
add agent-specific invocation or runtime glue only where required
avoid owning unique workflow logic, policy, or taxonomy definitions
Concrete implications:
.claude/skills/* may stay for Claude discovery, but should be thin wrappers only
.github/AGENTS.md remains a Codex runtime extension layer, not a parallel skill catalogue
generated packs under ai-tools/agent-packs/** are onboarding/reference outputs, not canonical adapter sources
Skills governance
Portable skills are the primary unit of reusable AI capability in this repository. They follow a template-based authoring model with deterministic sync to local and external targets.
Template source
Canonical source: ai-tools/ai-skills/templates/*.template.md
The templates directory currently contains 42 template files (numbered 01 through 42) covering bootstrap, authoring, auditing, validation, generation, and research workflows. Several templates include companion reference bundles stored in sibling directories named <template-stem>.references/.
Canonical versus adapter versus generated
Use this boundary when deciding where a capability belongs:
Layer What belongs there canonical Shared atomic skills, dispatcher definitions, references, and governance metadata adapter Agent-specific registrations and runtime-facing wrappers generated Exported skill copies, manifests, and reference packs global/platform User-local skills, plugins, and system-provided capabilities outside repo governance
Repo-governed logic should not live only in generated outputs or only in a user-local install target such as ~/.codex/skills.
Dispatcher/orchestrator model
Dispatchers are first-class governed assets for repeatable delivery workflows. They orchestrate atomic skills but do not replace them.
Phase 1 dispatcher family:
research-review-packet
review-fix
handover-readiness
page-ship
repo-cleanup-handover
These dispatcher families are governed targets even where the repo still exposes the underlying work as adjacent atomic skills or workflow pairs.
Skill lifecycle
Author a template in ai-tools/ai-skills/templates/ following the naming convention NN-skill-name.template.md.
Register the new artifact in ai-tools/registry/ai-tools-registry.json with correct lane (templates), lifecycle state (canonical-template), and metadata.
Sync to local skill roots via the sync mechanism (see below).
Export to agent packs via the cross-agent packager.
Validate with the registry validator to confirm coverage and lane alignment.
Sync mechanism
The sync-codex-skills.js script handles safe upsert of templates into Codex-compatible skill directories.
Property Value Script operations/scripts/integrators/ai/agents/sync-codex-skills.jsInstall target $CODEX_HOME/skills (fallback: ~/.codex/skills)Sync behaviour Safe upsert only (creates/updates managed skills; no deletion) Bootstrap path bash lpd setup --yes syncs the planning skill automatically
Runbook:
# Full bootstrap (includes skill sync)
bash lpd setup --yes
# Sync a specific skill
node operations/scripts/integrators/ai/agents/sync-codex-skills.js --skills agentic-project-management-orchestrator
# Check sync status
node operations/scripts/integrators/ai/agents/sync-codex-skills.js --check
# Sync all managed skills
node operations/scripts/integrators/ai/agents/sync-codex-skills.js
# Dry-run for specific skills
node operations/scripts/integrators/ai/agents/sync-codex-skills.js --skills lpd-bootstrap-and-doctor,staged-test-suite-runner --dry-run
Generated metadata per synced skill:
agents/openai.yaml is generated deterministically.
Optional companion bundles are sourced from directories beside the template file:
<template-stem>.references/ syncs to references/
<template-stem>.scripts/ syncs to scripts/
<template-stem>.assets/ syncs to assets/
Sync is managed, not destructive: managed files are created or updated from the canonical template bundle; stale managed bundle files are pruned on resync; unmanaged skills and unmanaged files inside a skill folder are preserved.
Local Codex boundary
~/.codex/skills must be treated as two distinct buckets:
repo-managed skills synced from this repo’s canonical templates
global/plugin/system skills that are not part of repo governance
Do not use the full local Codex install as the authoritative repo inventory.
Subsystem-scoped audit pipeline catalog
These files remain active for the repo-audit pipeline but are not the full AI-tools registry:
Artefact Path Catalogue schema ai-tools/ai-skills/catalog/skill-catalog.schema.jsonCatalogue data ai-tools/ai-skills/catalog/skill-catalog.jsonExecution manifest ai-tools/ai-skills/catalog/execution-manifest.json
Use these files only for repo-audit orchestrator run order, cross-agent packager manifest inputs, and audit-pipeline policy docs that describe that subsystem specifically.
Rules governance
The ai-tools/ai-rules/ directory contains legacy and imported AI rule material. This lane is classified as advisory_only in the registry and is pending later normalisation.
Current contents
Path Purpose ai-tools/ai-rules/best-practices.mdActive best-practices reference ai-tools/ai-rules/HUMAN-OVERRIDE-POLICY.mdHuman override policy for AI agent actions ai-tools/ai-rules/ROLLBACK-GUIDE.mdRollback procedures for AI-initiated changes ai-tools/ai-rules/rules/git-safety.mdGit safety rules (active) ai-tools/ai-rules/.augment/Augment-specific imported rules (legacy; canonical path is .augment/rules/) ai-tools/ai-rules/_retired/Retired rules preserved for reference only
Retired rules
The _retired/ subdirectory contains six retired files: .augment-guidelines, .AI-SAFEGUARDS.md, REVIEW_TABLE.md, AI_GUIDELINES.md, tasks-directory-structure.mdc, UNIVERSAL-AI-PROTOCOL.md, and imported-copilot-instructions.md. These are not active governance sources.
Relationship to adapter files
Active rules in ai-tools/ai-rules/ are reference material. Canonical enforcement happens through the adapter files listed in the Adapter Inventory section above. The rules lane exists to hold imported or legacy rule surfaces until they are normalised into the adapter model or retired.
Agent packs
The ai-tools/agent-packs/ directory contains generated outputs from the cross-agent packager. These are reference packs and onboarding aids, never canonical sources of repo governance policy.
Generation
node operations/scripts/integrators/ai/agents/cross-agent-packager.js --agent-pack all
Pack structure
Directory Contents ai-tools/agent-packs/codex/skills-manifest.json for Codex skill discoveryai-tools/agent-packs/claude/CLAUDE.md reference pack for Claude Codeai-tools/agent-packs/cursor/rules.md reference pack for Cursorai-tools/agent-packs/windsurf/rules.md reference pack for Windsurfai-tools/agent-packs/skills/Portable skill exports with SKILL.md files and companion reference bundles; includes manifest.json ai-tools/agent-packs/README.mdPack documentation
The skills/ subdirectory contains exported copies of all managed skills (currently 42 skills) with their SKILL.md files and, where applicable, references/ companion bundles.
One-command audit
node operations/scripts/dispatch/governance/repo/repo-audit-orchestrator.js --mode static --scope full
Agent onboarding path
Read docs-guide/policies/agent-governance-framework.mdx and docs-guide/policies/root-allowlist-governance.mdx.
Use the approved runtime target for the chosen agent family (see Adapter Inventory above).
Optionally run node operations/scripts/integrators/ai/agents/cross-agent-packager.js --agent-pack all to generate supplemental reference packs under ai-tools/agent-packs/.
Run node operations/scripts/dispatch/governance/repo/repo-audit-orchestrator.js --mode static --scope full as the first verification run.
Codex planning entry point
Skill: agentic-project-management-orchestrator
Triggers: skill-plan, plan this repo change, full plan for this
Use this as the first step for ambiguous repo-change planning, especially when the work may touch docs content, navigation, scripts, generated indexes, or governance surfaces.
Fact-check research workflow
The page-content research workflow is the active docs fact-checking skill family.
Canonical operator references:
Primary entrypoints:
node operations/scripts/validators/content/veracity/docs-fact-registry.js --validate --registry workspace/research/claims
node operations/scripts/audits/content/veracity/docs-page-research.js --page v2/orchestrators/guides/deployment-details/setup-options.mdx --report-md /tmp/docs-page-research.md --report-json /tmp/docs-page-research.json
node operations/scripts/dispatch/content/veracity/docs-page-research-pr-report.js --files v2/orchestrators/guides/deployment-details/setup-options.mdx,v2/orchestrators/setup/prepare.mdx,v2/orchestrators/guides/operator-considerations/business-case.mdx --report-md /tmp/page-content-research-pr.md --report-json /tmp/page-content-research-pr.json
node operations/scripts/dispatch/content/veracity/docs-research-packet.js --nav tools/config/scoped-navigation/docs-gate-work.json --version v2 --language en --tab Orchestrators --group Guides --out workspace/reports/orchestrator-guides-review/research-guides-review
The workflow is experimental and advisory-first. Use it for factual verification, contradiction review, claim-family propagation, and research packets, not generic MDX or link hygiene.
When research findings need phased execution planning rather than direct fixes, use the docs-research-to-implementation-plan follow-on skill.
Cross-references
Resource Path Purpose AI features guide (human-facing) docs-guide/features/ai-features.mdxUser-facing guide to AI features on the docs site Agent governance framework docs-guide/policies/agent-governance-framework.mdxCanonical adapter governance policy Root allowlist governance docs-guide/policies/root-allowlist-governance.mdxRoot-level file governance Governance index docs-guide/policies/governance-index.mdxMaster index of all governed surfaces Skill pipeline map docs-guide/policies/skill-pipeline-map.mdxSkill build and deployment pipeline
Last modified on April 8, 2026