Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/adoption-data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Adoption data

on:
pull_request:
paths:
- data/adoption.json
- scripts/render-adoption.mjs
- index.html
- .github/workflows/adoption-data.yml
push:
branches: [main]
paths:
- data/adoption.json
- scripts/render-adoption.mjs
- index.html

permissions:
contents: read

jobs:
generated-section:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: node scripts/render-adoption.mjs --check
Binary file added assets/action-state-group-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
94 changes: 94 additions & 0 deletions data/adoption.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
{
"relationships": [
{
"kind": "host",
"name": "The Linux Foundation",
"logo": "/assets/lf-logo-stacked-color.svg",
"label": "Neutral host",
"title": "TRACE Specification is an LF Project",
"description": "TRACE is hosted at the Linux Foundation as its own series. Its specification, IP, trademark, and conformance mark sit with the series under the Community Specification License and LF Projects policies, so no single vendor decides what conformance means.",
"evidenceUrl": "https://github.com/agentrust-io/trace-spec/blob/main/GOVERNANCE.md",
"evidenceLabel": "Read the project governance"
},
{
"kind": "evidence",
"name": "OPAQUE Systems",
"label": "Founding engineering and infrastructure sponsor",
"description": "OPAQUE provides funding, engineering time, infrastructure, and confidential-computing contributions. Sponsorship does not confer ownership of AgenTrust projects or governance authority over their technical decisions.",
"evidenceUrl": "https://github.com/agentrust-io",
"evidenceLabel": "Review the public project record"
},
{
"kind": "evidence",
"name": "Microsoft",
"markClass": "microsoft-mark",
"label": "Open-source project home",
"description": "Microsoft hosts the Agent Governance Toolkit, the open runtime-governance foundation that the AgenTrust trust chain builds on.",
"evidenceUrl": "https://github.com/microsoft/agent-governance-toolkit",
"evidenceLabel": "View the repository"
},
{
"kind": "evidence",
"name": "Technology Innovation Institute",
"markClass": "uae-mark",
"label": "Confirmed founding partner",
"description": "TII is the confirmed AgenTrust founding partner anchoring the work in sovereign-AI deployment requirements.",
"evidenceUrl": "https://www.opaque.co/resources/articles/opaque-extends-the-agent-governance-toolkit-with-verifiable-identity-and-first-ever-verifiably-governed-and-secure-mcp",
"evidenceLabel": "Read the OPAQUE announcement"
},
{
"kind": "evidence",
"name": "AMD",
"markClass": "amd-mark",
"label": "Founding member and hardware partner",
"description": "AMD is a founding partner of AgenTrust. AMD and OPAQUE published a joint implementation blueprint for hardware-backed Confidential AI, and the implementation verifies SEV-SNP report signatures to the AMD root.",
"evidenceUrl": "https://www.opaque.co/resources/downloadables/from-risk-to-resilience-confidential-computing-with-amd-and-opaque",
"evidenceLabel": "Read the joint white paper"
},
{
"kind": "evidence",
"name": "Intel",
"markClass": "intel-mark",
"label": "Founding member and hardware partner",
"description": "Intel is a founding partner of AgenTrust. The implementation verifies Intel TDX DCAP v4 quotes to the pinned Intel SGX Root CA, hardware-validated on GCP C3.",
"evidenceUrl": "https://github.com/agentrust-io",
"evidenceLabel": "Review the public implementation record"
},
{
"kind": "evidence",
"name": "ServiceNow",
"markClass": "servicenow-mark",
"label": "OPAQUE customer implementation",
"description": "OPAQUE publicly documents how ServiceNow used its Confidential AI Platform to reduce commission-inquiry workflows from days to seconds.",
"evidenceUrl": "https://www.opaque.co/resources",
"evidenceLabel": "View the OPAQUE customer story"
},
{
"kind": "evidence",
"name": "CSA Agentic Trust Framework",
"markClass": "atf-mark",
"label": "Public framework collaboration",
"description": "ATF's author publicly supports positioning AGT as a reference implementation and invited implementation input into the conformance specification.",
"evidenceUrl": "https://github.com/microsoft/agent-governance-toolkit/discussions/301",
"evidenceLabel": "Read the public collaboration thread"
},
{
"kind": "partner",
"name": "XRSI — Human Intelligence In The Loop",
"logo": "/assets/xrsi-logo-black.png",
"label": "Ecosystem partner",
"title": "Governance and Ecosystem Sustainability Partner",
"description": "XRSI brings governance, community-building, and long-term ecosystem sustainability expertise to the AgenTrust adoption programme."
},
{
"kind": "partner",
"name": "Action State Group",
"logo": "/assets/action-state-group-logo.png",
"label": "Technical collaborator",
"title": "Trust Registry and Verifiable Record Collaboration",
"description": "Action State Group is collaborating with AgenTrust on an open contribution path for the TRACE Trust Registry, connecting TRACE runtime evidence with neutral, independently verifiable record and witness infrastructure.",
"evidenceUrl": "https://www.actionstate.ai/",
"evidenceLabel": "Visit Action State Group"
}
]
}
23 changes: 13 additions & 10 deletions design-system.css
Original file line number Diff line number Diff line change
Expand Up @@ -1075,9 +1075,9 @@ html:has(body.agentrust-hub) { scroll-behavior: smooth; }
/* Adoption, partnership, governance, and compliance evidence */
.agentrust-hub .adoption-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
margin-top: 2.5rem;
margin-top: 1rem;
}
.agentrust-hub .adoption-card,
.agentrust-hub .governance-card,
Expand All @@ -1087,8 +1087,8 @@ html:has(body.agentrust-hub) { scroll-behavior: smooth; }
border-radius: var(--at-radius);
background: var(--at-white);
}
.agentrust-hub .adoption-card { min-height: 220px; padding: 1.6rem; }
.agentrust-hub .adopter-mark { min-height: 42px; color: var(--at-ink); font-size: 1.35rem; font-weight: 750; letter-spacing: -0.045em; }
.agentrust-hub .adoption-card { display: flex; min-height: 190px; flex-direction: column; padding: 1.25rem; }
.agentrust-hub .adopter-mark { min-height: 36px; color: var(--at-ink); font-size: 1.2rem; font-weight: 750; letter-spacing: -0.045em; }
.agentrust-hub .servicenow-mark { color: #16825d; }
.agentrust-hub .uae-mark { max-width: 13ch; font-family: var(--at-serif); font-size: 1.1rem; font-weight: 600; line-height: 1.05; }
.agentrust-hub .microsoft-mark { color: #505050; }
Expand All @@ -1098,7 +1098,7 @@ html:has(body.agentrust-hub) { scroll-behavior: smooth; }
.agentrust-hub .adopter-stage,
.agentrust-hub .governance-role,
.agentrust-hub .partner-kicker {
margin: 1.6rem 0 .55rem;
margin: .75rem 0 .45rem;
color: var(--at-red);
font-size: .66rem;
font-weight: 750;
Expand All @@ -1108,15 +1108,17 @@ html:has(body.agentrust-hub) { scroll-behavior: smooth; }
.agentrust-hub .adoption-card p,
.agentrust-hub .governance-card p,
.agentrust-hub .partner-card p { margin: 0; color: var(--at-muted); font-size: .9rem; line-height: 1.6; }
.agentrust-hub .evidence-link { display: inline-block; margin-top: 1.15rem; color: var(--at-ink); font-size: .72rem; font-weight: 700; text-decoration: underline; text-decoration-color: var(--at-line); text-underline-offset: .2em; }
.agentrust-hub .evidence-link { display: inline-block; margin-top: auto; padding-top: .8rem; color: var(--at-ink); font-size: .72rem; font-weight: 700; text-decoration: underline; text-decoration-color: var(--at-line); text-underline-offset: .2em; }
.agentrust-hub .evidence-link:hover { color: var(--at-red); }
.agentrust-hub .partner-card { display: grid; grid-template-columns: minmax(220px, .75fr) 1.25fr; gap: clamp(2rem, 5vw, 5rem); align-items: center; margin-top: 1rem; padding: clamp(1.8rem, 4vw, 3rem); }
.agentrust-hub .partner-logo-wrap { padding: 1.25rem; border-radius: 12px; background: var(--at-paper); }
.agentrust-hub .partner-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem; margin-top: 1rem; }
.agentrust-hub .partner-card { display: grid; grid-template-columns: minmax(130px, .65fr) 1.35fr; gap: 1.25rem; align-items: center; padding: 1.35rem; }
.agentrust-hub .partner-logo-wrap { display: flex; min-height: 110px; align-items: center; padding: 1rem; border-radius: 12px; background: var(--at-paper); }
.agentrust-hub .lf-card { margin-top: 2.5rem; }
.agentrust-hub .lf-card .partner-logo-wrap { padding: 1.6rem 1.4rem; }
.agentrust-hub .lf-card { grid-template-columns: minmax(180px, .55fr) 1.45fr; }
.agentrust-hub .lf-card .partner-logo-wrap { padding: 1.25rem; }
.agentrust-hub .partner-logo-wrap img { display: block; width: 100%; height: auto; }
.agentrust-hub .partner-kicker { margin-top: 0; }
.agentrust-hub .partner-card h3 { margin: 0 0 .7rem; color: var(--at-ink); font-family: var(--at-serif); font-size: clamp(1.6rem, 3vw, 2.4rem); font-weight: 500; line-height: 1.05; }
.agentrust-hub .partner-card h3 { margin: 0 0 .55rem; color: var(--at-ink); font-family: var(--at-serif); font-size: clamp(1.25rem, 2vw, 1.7rem); font-weight: 500; line-height: 1.08; }
.agentrust-hub .governance-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 2.5rem; }
.agentrust-hub .governance-card { min-height: 240px; padding: 1.5rem; }
.agentrust-hub .governance-card h3 { margin: 0 0 .6rem; color: var(--at-ink); font-size: 1.1rem; }
Expand All @@ -1137,6 +1139,7 @@ html:has(body.agentrust-hub) { scroll-behavior: smooth; }
.md-typeset h1 { font-size: clamp(2.35rem, 13vw, 3.6rem); }
.agentrust-hub .adoption-grid,
.agentrust-hub .governance-grid,
.agentrust-hub .partner-grid,
.agentrust-hub .partner-card { grid-template-columns: 1fr; }
.agentrust-hub .playbook-grid { grid-template-columns: 1fr; }
.agentrust-hub .playbook-card { min-height: 130px; }
Expand Down
30 changes: 19 additions & 11 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@
]
}
</script>
<link rel="stylesheet" href="/design-system.css?v=12">
<link rel="stylesheet" href="/design-system.css?v=13">
</head>
<body class="agentrust-hub" id="top">

Expand Down Expand Up @@ -300,13 +300,14 @@ <h1>Build the ecosystem for verifiable AI agents</h1>
<div class="section-title">Relationships the public record supports</div>
</div>
<p class="lead-copy">Every organization named here has a traceable relationship through a public announcement, open-source repository, or explicit AgenTrust partner statement. The label on each card states that relationship precisely; sponsorship, partnership, contribution, and adoption are distinct relationships, and none implies blanket endorsement of the full stack.</p>
<aside class="partner-card lf-card">
<div class="partner-logo-wrap"><img src="/assets/lf-logo-stacked-color.svg" alt="The Linux Foundation" loading="lazy"></div>
<div><div class="partner-kicker">Neutral host</div><h3>TRACE Specification is an LF Project</h3><p>TRACE is hosted at the Linux Foundation as its own series, <strong>TRACE Specification, a Series of LF Projects, LLC</strong>. The specification, its IP, its trademark, and the conformance mark sit with the series under the Community Specification License and <a href="https://lfprojects.org/policies/">LF Projects policies</a>, so no single vendor decides what conformance means.</p><a class="evidence-link" href="https://github.com/agentrust-io/trace-spec/blob/main/GOVERNANCE.md">Read the project governance ↗</a></div>
</aside>
<!-- adoption:generated:start -->
<article class="partner-card lf-card">
<div class="partner-logo-wrap"><img src="/assets/lf-logo-stacked-color.svg" alt="The Linux Foundation" loading="lazy"></div>
<div><div class="partner-kicker">Neutral host</div><h3>TRACE Specification is an LF Project</h3><p>TRACE is hosted at the Linux Foundation as its own series. Its specification, IP, trademark, and conformance mark sit with the series under the Community Specification License and LF Projects policies, so no single vendor decides what conformance means.</p><a class="evidence-link" href="https://github.com/agentrust-io/trace-spec/blob/main/GOVERNANCE.md">Read the project governance ↗</a></div>
</article>
<div class="adoption-grid">
<article class="adoption-card">
<div class="adopter-mark">OPAQUE Systems</div>
<div class="adopter-mark ">OPAQUE Systems</div>
<div class="adopter-stage">Founding engineering and infrastructure sponsor</div>
<p>OPAQUE provides funding, engineering time, infrastructure, and confidential-computing contributions. Sponsorship does not confer ownership of AgenTrust projects or governance authority over their technical decisions.</p>
<a class="evidence-link" href="https://github.com/agentrust-io">Review the public project record ↗</a>
Expand All @@ -326,7 +327,7 @@ <h1>Build the ecosystem for verifiable AI agents</h1>
<article class="adoption-card">
<div class="adopter-mark amd-mark">AMD</div>
<div class="adopter-stage">Founding member and hardware partner</div>
<p>AMD is a founding partner of AgenTrust. AMD and OPAQUE published a joint implementation blueprint for hardware-backed Confidential AI, and the implementation verifies SEV-SNP report signatures to the AMD root (VCEK then ASK then ARK).</p>
<p>AMD is a founding partner of AgenTrust. AMD and OPAQUE published a joint implementation blueprint for hardware-backed Confidential AI, and the implementation verifies SEV-SNP report signatures to the AMD root.</p>
<a class="evidence-link" href="https://www.opaque.co/resources/downloadables/from-risk-to-resilience-confidential-computing-with-amd-and-opaque">Read the joint white paper ↗</a>
</article>
<article class="adoption-card">
Expand All @@ -348,10 +349,17 @@ <h1>Build the ecosystem for verifiable AI agents</h1>
<a class="evidence-link" href="https://github.com/microsoft/agent-governance-toolkit/discussions/301">Read the public collaboration thread ↗</a>
</article>
</div>
<aside class="partner-card">
<div class="partner-logo-wrap"><img src="/assets/xrsi-logo-black.png" alt="XRSI — Human Intelligence In The Loop" loading="lazy"></div>
<div><div class="partner-kicker">Ecosystem partner</div><h3>Governance and Ecosystem Sustainability Partner</h3><p>XRSI brings governance, community-building, and long-term ecosystem sustainability expertise to the AgenTrust adoption programme.</p></div>
</aside>
<div class="partner-grid">
<article class="partner-card">
<div class="partner-logo-wrap"><img src="/assets/xrsi-logo-black.png" alt="XRSI — Human Intelligence In The Loop" loading="lazy"></div>
<div><div class="partner-kicker">Ecosystem partner</div><h3>Governance and Ecosystem Sustainability Partner</h3><p>XRSI brings governance, community-building, and long-term ecosystem sustainability expertise to the AgenTrust adoption programme.</p></div>
</article>
<article class="partner-card">
<div class="partner-logo-wrap"><img src="/assets/action-state-group-logo.png" alt="Action State Group" loading="lazy"></div>
<div><div class="partner-kicker">Technical collaborator</div><h3>Trust Registry and Verifiable Record Collaboration</h3><p>Action State Group is collaborating with AgenTrust on an open contribution path for the TRACE Trust Registry, connecting TRACE runtime evidence with neutral, independently verifiable record and witness infrastructure.</p><a class="evidence-link" href="https://www.actionstate.ai/">Visit Action State Group ↗</a></div>
</article>
</div>
<!-- adoption:generated:end -->
</section>

<hr class="divider">
Expand Down
80 changes: 80 additions & 0 deletions scripts/render-adoption.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import { access, readFile, writeFile } from 'node:fs/promises';

const root = new URL('../', import.meta.url);
const dataUrl = new URL('data/adoption.json', root);
const pageUrl = new URL('index.html', root);
const start = ' <!-- adoption:generated:start -->';
const end = ' <!-- adoption:generated:end -->';

const escapeText = value => String(value)
.replaceAll('&', '&amp;')
.replaceAll('<', '&lt;')
.replaceAll('>', '&gt;')
.replaceAll('"', '&quot;');

const evidence = item => item.evidenceUrl
? `<a class="evidence-link" href="${escapeText(item.evidenceUrl)}">${escapeText(item.evidenceLabel)} ↗</a>`
: '';

const renderEvidence = item => ` <article class="adoption-card">
<div class="adopter-mark ${escapeText(item.markClass || '')}">${escapeText(item.name)}</div>
<div class="adopter-stage">${escapeText(item.label)}</div>
<p>${escapeText(item.description)}</p>
${evidence(item)}
</article>`;

const renderPartner = (item, featured = false) => ` <article class="partner-card${featured ? ' lf-card' : ''}">
<div class="partner-logo-wrap"><img src="${escapeText(item.logo)}" alt="${escapeText(item.name)}" loading="lazy"></div>
<div><div class="partner-kicker">${escapeText(item.label)}</div><h3>${escapeText(item.title)}</h3><p>${escapeText(item.description)}</p>${evidence(item)}</div>
</article>`;

const data = JSON.parse(await readFile(dataUrl, 'utf8'));
const relationships = data.relationships;
if (!Array.isArray(relationships) || relationships.length === 0) throw new Error('data/adoption.json must contain relationships');
for (const item of relationships) {
if (!['host', 'evidence', 'partner'].includes(item.kind) || !item.name || !item.label || !item.description) {
throw new Error(`Invalid relationship entry: ${item.name || '<unnamed>'}`);
}
if ((item.kind === 'host' || item.kind === 'partner') && (!item.logo || !item.title)) {
throw new Error(`Logo and title are required for ${item.name}`);
}
if (item.evidenceUrl && !item.evidenceLabel) throw new Error(`Evidence label is required for ${item.name}`);
if (item.evidenceUrl && new URL(item.evidenceUrl).protocol !== 'https:') throw new Error(`Evidence URL must use HTTPS for ${item.name}`);
if (item.markClass && !/^[a-z0-9-]+$/.test(item.markClass)) throw new Error(`Invalid markClass for ${item.name}`);
if (item.logo) {
if (!item.logo.startsWith('/assets/')) throw new Error(`Logo must be stored under /assets for ${item.name}`);
await access(new URL(`.${item.logo}`, root));
}
}

const hosts = relationships.filter(item => item.kind === 'host');
const evidenceItems = relationships.filter(item => item.kind === 'evidence');
const partners = relationships.filter(item => item.kind === 'partner');
const generated = [
start,
...hosts.map(item => renderPartner(item, true)),
' <div class="adoption-grid">',
...evidenceItems.map(renderEvidence),
' </div>',
' <div class="partner-grid">',
...partners.map(item => renderPartner(item)),
' </div>',
end
].join('\n');

const page = await readFile(pageUrl, 'utf8');
const startAt = page.indexOf(start);
const endAt = page.indexOf(end);
if (startAt < 0 || endAt < startAt) throw new Error('Generated adoption markers are missing or out of order');
const next = page.slice(0, startAt) + generated + page.slice(endAt + end.length);

if (process.argv.includes('--check')) {
if (page !== next) {
console.error('index.html adoption section is stale; run node scripts/render-adoption.mjs');
process.exit(1);
}
console.log(`PASS ${relationships.length} adoption relationships are in sync`);
} else {
await writeFile(pageUrl, next);
console.log(`Rendered ${relationships.length} adoption relationships`);
}
Loading