From edc9486b1d98a1c4d2a426f32fd620cc13a87b71 Mon Sep 17 00:00:00 2001 From: Cairo Agent Guard Builder Date: Tue, 11 Aug 2026 17:11:20 -0500 Subject: [PATCH 1/2] Redesign Agent Guard launch website --- docs/WEBSITE-CONTENT-MANIFEST.md | 64 ++++++++++ docs/WEBSITE-REDESIGN-REPORT.md | 40 +++++++ website/app/globals.css | 84 ++++++++++++- website/app/layout.tsx | 20 ++-- website/app/site-client.tsx | 152 ++++++++++++++++++++---- website/public/agentguard-launch-og.png | Bin 0 -> 1269827 bytes website/tests/site.test.mjs | 15 +++ 7 files changed, 341 insertions(+), 34 deletions(-) create mode 100644 docs/WEBSITE-CONTENT-MANIFEST.md create mode 100644 docs/WEBSITE-REDESIGN-REPORT.md create mode 100644 website/public/agentguard-launch-og.png diff --git a/docs/WEBSITE-CONTENT-MANIFEST.md b/docs/WEBSITE-CONTENT-MANIFEST.md new file mode 100644 index 0000000..3e419fa --- /dev/null +++ b/docs/WEBSITE-CONTENT-MANIFEST.md @@ -0,0 +1,64 @@ +# Agent Guard website content preservation manifest + +This manifest records the public content and behavior present before the 2026 launch-experience redesign and where each item remains afterward. It is a regression contract for `https://cairo.sh/AgentGuard`. + +## Route, metadata, and brand + +| Before | Preserved after | Implementation | +| --- | --- | --- | +| Production route `/AgentGuard` | Yes | `website/next.config.ts` base path | +| Cairo Agent Guard name and Cairo logo | Yes | Header, hero security boundary, runtime, Edge, final CTA, footer | +| Product description covering Identity, AGP, Runtime, and Edge | Yes, expanded | Metadata, hero, pillars, documentation | +| Open Graph and X/Twitter preview | Yes | `website/app/layout.tsx` and `website/public/og.png` | +| GitHub repository URL | Yes | Hero/open-source, integrations, docs, footer | +| Apache-2.0 open-source statement | Yes | Open foundation and FAQ | + +## Sections and claims + +| Existing section | Preserved after | Notes | +| --- | --- | --- | +| Hero: intelligence is not authority | Yes | New identity-led headline; invariant retained verbatim | +| Identify / Control / Defend / Prove outcomes | Yes | Proof strip retained | +| Agent Identity | Yes | Lifecycle, signed claim, principal binding, validity, revocation, V0.1 HMAC/federation boundary retained | +| Agent Guard Protocol | Yes | Request example, object model, ten decision effects, default-deny and delegation invariants retained | +| Agent Guard Edge | Yes | Discover/verify/classify/authorize/enforce/record pipeline, trust states, targets, and managed-platform boundary retained | +| Runtime | Yes | Non-bypassable Guardian, executor targets, six controls, and reference contract retained | +| Deployment architecture | Yes | Data plane, control plane, and non-bypassability requirement retained | +| Cairo Super Agent | Yes | Security context, mandatory gateway, and protected surfaces retained | +| Certification | Yes | AGP-L1 through AGP-L4 and AGP-P, six-step flow, caveat, and application form retained | +| Documentation | Yes | All ten topics, code examples, GitHub links; search added | +| Open foundation | Yes | Repository tree, open-core scope, GitHub/docs CTAs retained | +| Final CTA and footer | Yes | Integration, certification, brand, version, ownership, GitHub/docs links retained | + +## Certification application contract + +The form continues to submit JSON to `/AgentGuard/api/certification/applications` and preserves every field and constraint: + +- `organization`: required, 160 characters maximum. +- `email`: required work email, 254 characters maximum. +- `target`: AI Agent, Agent Runtime / Harness, Platform / API, MCP Server, or Physical AI System. +- `level`: AGP-L1, AGP-L2, AGP-L3, AGP-L4, or AGP-P. +- `summary`: required architecture/security boundary, 40–4,000 characters. +- `companyWebsite`: inaccessible honeypot for automated abuse. + +The D1 storage binding, schema, migration, validation, success response, error response, and certification caveat are unchanged. The redesign adds recoverable draft persistence in `sessionStorage`, prevents duplicate submission while a request is in flight, and clears the draft only after success. + +## New launch content + +- Identity-led hero: “Every AI Agent Needs an Identity.” +- “Why Agent Guard / Why now” threat narrative. +- Five-pillar system model: Identity, Runtime, Policy, Certification, Platform Defense. +- Integration and ecosystem matrix. +- Searchable documentation navigation. +- Product-boundary FAQ. +- Active-section navigation and responsive/mobile refinements. + +## Technical boundaries retained + +- Identity is not permission. +- V0.1 uses locally pinned symmetric HMAC and is not a cross-organization federation system. +- Proof-of-possession and signed approval consumption remain next-protocol work. +- V0.1 Edge is architecture and reference primitives, not a managed distributed service. +- Non-bypassability requires deployment isolation and removal of alternate execution paths. +- AGP-P does not replace an independent physical safety controller or emergency stop. + diff --git a/docs/WEBSITE-REDESIGN-REPORT.md b/docs/WEBSITE-REDESIGN-REPORT.md new file mode 100644 index 0000000..8858f35 --- /dev/null +++ b/docs/WEBSITE-REDESIGN-REPORT.md @@ -0,0 +1,40 @@ +# Agent Guard website redesign report + +## Objective + +Upgrade the existing Agent Guard site into a launch-quality product and documentation experience while preserving its technical fidelity, production route, certification intake, integrations, metadata, and open-source links. + +## Before + +The site already contained a sophisticated one-page technical presentation of Agent Identity, AGP, Edge, Runtime, deployment architecture, Cairo integration, certification, embedded documentation, and the open repository. Its dominant narrative began with generic security infrastructure and organized the experience around three product components. Documentation was browsable but not searchable, the certification form had no recoverable local draft, and the site did not yet include a dedicated threat narrative, ecosystem matrix, or FAQ. + +## After + +The redesigned journey is organized for both executive evaluation and technical implementation: + +1. Identity-led launch promise and live authorization visualization. +2. Why-now threat model and independent-boundary design rule. +3. Five trust pillars with direct paths into the deeper system. +4. Identity, AGP policy, Edge, Runtime, architecture, and Cairo implementation detail. +5. Integration and ecosystem patterns with explicit maturity labels. +6. Evidence-based certification levels and durable application workflow. +7. Searchable embedded documentation and open-source adoption path. +8. Product-boundary FAQ and decisive integration/certification calls to action. + +## Interaction and accessibility upgrades + +- Semantic landmarks and heading hierarchy remain intact. +- Skip navigation, visible keyboard focus, reduced-motion behavior, accessible form labels, live form status, and native FAQ disclosure controls are preserved or added. +- Navigation now identifies the current section with `aria-current`. +- Documentation search is keyboard-native and reports available topic count. +- Certification application data survives recoverable navigation or request failures for the current tab and is removed after successful submission. +- Desktop, tablet, and mobile layouts receive explicit grid transitions without horizontal overflow. + +## Fidelity and security decisions + +No technical boundary was softened for marketing. Integration cards distinguish a reference integration, reference adapter, architecture pattern, and protocol profile. The certification application remains an intake for scoping and evidence review—not a conformance claim. The Edge managed-platform boundary, V0.1 HMAC limitation, proof-of-possession gap, signed approval limitation, non-bypassability requirement, and physical safety boundary remain visible. + +## Deployment status + +This redesign is prepared as a focused reviewable pull request. It is not directly deployed to production by this change set. + diff --git a/website/app/globals.css b/website/app/globals.css index 3727e4c..2c8052b 100644 --- a/website/app/globals.css +++ b/website/app/globals.css @@ -62,8 +62,9 @@ button, a { -webkit-tap-highlight-color: transparent; } .brand .cairo-logo { width: 34px; height: 34px; border-radius: 50%; background: rgba(255,255,255,.95); } .brand b { font-weight: 780; } .topbar nav { margin-left: auto; display: flex; align-items: center; gap: 25px; color: #b2b8ce; font-size: 12px; } -.topbar nav a { transition: color .2s; } -.topbar nav a:hover, .topbar nav a:focus-visible { color: white; } +.topbar nav a { position: relative; transition: color .2s; } +.topbar nav a:hover, .topbar nav a:focus-visible, .topbar nav a.active { color: white; } +.topbar nav a.active::after { content: ""; position: absolute; left: 0; right: 0; bottom: -10px; height: 2px; border-radius: 2px; background: linear-gradient(90deg, var(--violet), var(--cyan)); } .nav-toggle { display: none; margin-left: auto; border: 1px solid var(--line); background: transparent; color: white; border-radius: 8px; padding: 8px 11px; } .button { display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 0 20px; border: 1px solid transparent; border-radius: 9px; background: linear-gradient(120deg, var(--violet), var(--blue)); color: white; font-weight: 700; font-size: 12px; letter-spacing: .02em; cursor: pointer; box-shadow: 0 10px 36px rgba(69, 87, 255, .22); transition: transform .2s, box-shadow .2s, opacity .2s; } .button:hover { transform: translateY(-2px); box-shadow: 0 16px 42px rgba(69, 87, 255, .34); } @@ -77,6 +78,8 @@ button, a { -webkit-tap-highlight-color: transparent; } .eyebrow, .kicker { font: 700 10px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .16em; color: #9e8bff; } .eyebrow { display: flex; gap: 10px; align-items: center; margin-bottom: 24px; } .eyebrow span { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 18px var(--green); } +.hero-category { margin: 0 0 14px; color: #7f89a5; font: 700 10px ui-monospace, monospace; letter-spacing: .12em; text-transform: uppercase; } +.hero-category em { color: #a898ff; font-style: normal; } .hero h1 { margin: 0; max-width: 760px; font-size: clamp(56px, 6.2vw, 92px); line-height: .94; letter-spacing: -.062em; font-weight: 760; } .hero h1 em { display: block; color: transparent; background: linear-gradient(100deg, #af8cff 8%, #408cff 58%, #28d9ff); background-clip: text; font-style: normal; } .hero-lead { margin: 30px 0 12px; font-size: 20px; font-weight: 680; letter-spacing: -.02em; } @@ -108,6 +111,8 @@ button, a { -webkit-tap-highlight-color: transparent; } .signal-risk { left: 2%; bottom: 20%; } .signal-effect { right: 0; bottom: 18%; border-color: rgba(93,242,186,.42); } .signal-effect b { color: var(--green); } +.hero-flow { position: absolute; left: 50%; bottom: -10px; transform: translateX(-50%); display: flex; align-items: center; gap: 8px; width: max-content; padding: 10px 13px; border: 1px solid var(--line); border-radius: 999px; background: rgba(7,8,19,.88); color: #8c96b3; font: 700 8px ui-monospace, monospace; letter-spacing: .08em; } +.hero-flow i { color: var(--violet); font-style: normal; } .proof-strip { position: relative; z-index: 2; display: grid; grid-template-columns: repeat(4, 1fr); border-block: 1px solid var(--line); background: rgba(10,12,26,.7); } .proof-strip div { min-height: 112px; padding: 31px 34px; border-right: 1px solid var(--line); } @@ -120,7 +125,10 @@ button, a { -webkit-tap-highlight-color: transparent; } .section-heading h2, .split-layout h2, .open-grid h2, .finale h2 { margin: 14px 0 0; font-size: clamp(42px, 5vw, 67px); line-height: 1.02; letter-spacing: -.052em; } .section-heading > p, .section-lead { margin: 0; color: var(--muted); font-size: 15px; line-height: 1.75; } .section-heading.light > p { color: #a7aec7; } -.pillar-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; } +.pillar-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 14px; } +.pillar-grid .pillar { grid-column: span 2; } +.pillar-grid .pillar:nth-child(4) { grid-column: 2 / span 2; } +.pillar-grid .pillar:nth-child(5) { grid-column: 4 / span 2; } .pillar { min-height: 490px; position: relative; padding: 32px; overflow: hidden; border: 1px solid var(--line); border-radius: 20px; background: linear-gradient(145deg, rgba(19,23,45,.88), rgba(10,12,27,.82)); transition: transform .25s, border-color .25s; } .pillar:hover { transform: translateY(-6px); border-color: var(--line-strong); } .pillar::after { content: ""; position: absolute; width: 230px; height: 230px; border-radius: 50%; right: -120px; top: -110px; background: var(--violet); opacity: .12; filter: blur(20px); } @@ -135,6 +143,18 @@ button, a { -webkit-tap-highlight-color: transparent; } .pillar li::before { content: "+"; color: var(--cyan); margin-right: 10px; } .pillar a { color: #a899ff; font-size: 12px; font-weight: 700; } +.threat-section { padding-top: 145px; } +.threat-grid { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--line); border-radius: 20px; overflow: hidden; background: rgba(8,10,23,.82); } +.threat-grid article { min-height: 230px; padding: 28px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); } +.threat-grid article:nth-child(3n) { border-right: 0; } +.threat-grid article:nth-last-child(-n+3) { border-bottom: 0; } +.threat-grid article > span { color: #68728f; font: 700 9px ui-monospace, monospace; } +.threat-grid h3 { margin: 42px 0 10px; font-size: 18px; } +.threat-grid p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.7; } +.threat-statement { display: grid; grid-template-columns: 180px 1fr; gap: 30px; margin-top: 14px; padding: 24px 28px; border: 1px solid rgba(93,242,186,.26); border-radius: 13px; background: rgba(93,242,186,.04); } +.threat-statement b { color: var(--green); font: 800 10px ui-monospace, monospace; } +.threat-statement p { margin: 0; font-size: 14px; font-weight: 650; } + .identity-section { background: linear-gradient(180deg, rgba(34,27,74,.16), rgba(5,7,18,.05)); border-block: 1px solid var(--line); } .split-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 84px; align-items: center; } .split-layout h2 { max-width: 620px; } @@ -240,6 +260,18 @@ button, a { -webkit-tap-highlight-color: transparent; } .code-status { display: grid; grid-template-columns: repeat(3, 1fr 1fr); gap: 8px; padding: 18px; border-top: 1px solid var(--line); font: 700 8px ui-monospace, monospace; } .code-status span { color: #65708b; }.code-status b { color: var(--green); } +.integrations-section { padding-bottom: 80px; } +.integration-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; } +.integration-grid article { min-height: 220px; padding: 25px; border: 1px solid var(--line); border-radius: 15px; background: linear-gradient(145deg, rgba(18,21,42,.82), rgba(9,11,24,.78)); } +.integration-grid article > div { display: flex; justify-content: space-between; color: #7d87a3; font: 700 9px ui-monospace, monospace; text-transform: uppercase; letter-spacing: .08em; } +.integration-grid article > div b { color: var(--cyan); } +.integration-grid h3 { margin: 48px 0 12px; font-size: 19px; } +.integration-grid p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.7; } +.ecosystem-callout { display: grid; grid-template-columns: 1fr auto; gap: 50px; align-items: center; margin-top: 14px; padding: 34px; border: 1px solid rgba(117,95,255,.36); border-radius: 17px; background: linear-gradient(120deg, rgba(107,72,255,.1), rgba(39,215,255,.04)); } +.ecosystem-callout h3 { margin: 12px 0 8px; font-size: 26px; } +.ecosystem-callout p { max-width: 680px; margin: 0; color: var(--muted); font-size: 12px; line-height: 1.7; } +.ecosystem-callout .hero-actions { margin-top: 0; flex-wrap: nowrap; } + .levels { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; } .levels article { min-height: 150px; padding: 20px; border: 1px solid var(--line); border-radius: 13px; background: rgba(255,255,255,.018); } .levels b, .levels span, .levels small { display: block; } @@ -263,6 +295,12 @@ button, a { -webkit-tap-highlight-color: transparent; } .form-status.error { color: #ff7f9a; } .docs-layout { display: grid; grid-template-columns: 230px 1fr; min-height: 630px; border: 1px solid var(--line); border-radius: 18px; overflow: hidden; } +.docs-search { display: grid; grid-template-columns: auto 1fr auto; gap: 14px; align-items: center; margin-bottom: 12px; padding: 13px 16px; border: 1px solid var(--line); border-radius: 11px; background: #090b18; } +.docs-search label { color: #8992ad; font: 700 9px ui-monospace, monospace; text-transform: uppercase; letter-spacing: .08em; } +.docs-search input { min-width: 0; border: 0; outline: 0; background: transparent; color: white; } +.docs-search input::placeholder { color: #606a86; } +.docs-search span { color: #6d7691; font: 700 9px ui-monospace, monospace; } +.docs-empty { padding: 13px; color: #7f89a4; font-size: 11px; line-height: 1.6; } .docs-layout aside { padding: 16px; border-right: 1px solid var(--line); background: #090b18; } .docs-layout aside button { width: 100%; display: flex; justify-content: space-between; padding: 14px 13px; border: 0; border-radius: 7px; background: transparent; color: #858faa; text-align: left; font-size: 11px; cursor: pointer; } .docs-layout aside button.active { background: rgba(111,86,255,.12); color: white; } @@ -281,6 +319,14 @@ button, a { -webkit-tap-highlight-color: transparent; } .open-grid p { max-width: 580px; color: var(--muted); font-size: 14px; line-height: 1.75; } .repo-tree { border: 1px solid var(--line); border-radius: 18px; background: #090b19; overflow: hidden; box-shadow: 0 30px 100px rgba(0,0,0,.25); } .repo-tree::before { content: "OPEN SOURCE / APACHE-2.0"; display: block; padding: 14px 20px; border-bottom: 1px solid var(--line); color: #6f7895; font: 700 9px ui-monospace, monospace; } +.faq-list { border-top: 1px solid var(--line); } +.faq-list details { border-bottom: 1px solid var(--line); } +.faq-list summary { display: grid; grid-template-columns: 42px 1fr auto; gap: 18px; align-items: center; padding: 24px 4px; cursor: pointer; list-style: none; font-size: 17px; font-weight: 680; } +.faq-list summary::-webkit-details-marker { display: none; } +.faq-list summary span { color: #68728f; font: 700 9px ui-monospace, monospace; } +.faq-list summary b { color: var(--violet); font-size: 21px; transition: transform .2s; } +.faq-list details[open] summary b { transform: rotate(45deg); } +.faq-list details p { max-width: 820px; margin: -4px 0 24px 60px; color: var(--muted); font-size: 13px; line-height: 1.8; } .finale { padding-block: 150px; text-align: center; } .finale-logo { width: 82px; height: 82px; margin: 0 auto 30px; display: grid; place-items: center; border-radius: 50%; background: white; box-shadow: 0 0 70px rgba(91,83,255,.32); } .finale-logo .cairo-logo { width: 72px; height: 72px; } @@ -298,9 +344,17 @@ footer { border-top: 1px solid var(--line); background: #050610; } .topbar nav { gap: 15px; } .hero { grid-template-columns: 1fr; padding-top: 160px; } .hero-visual { min-height: 520px; } - .pillar-grid { grid-template-columns: 1fr; } + .pillar-grid { grid-template-columns: 1fr 1fr; } + .pillar-grid .pillar, .pillar-grid .pillar:nth-child(4), .pillar-grid .pillar:nth-child(5) { grid-column: auto; } + .pillar-grid .pillar:last-child { grid-column: 1 / -1; } .pillar { min-height: 0; } .split-layout, .protocol-content, .edge-grid, .open-grid, .cert-form { grid-template-columns: 1fr; } + .threat-grid, .integration-grid { grid-template-columns: 1fr 1fr; } + .threat-grid article:nth-child(3n) { border-right: 1px solid var(--line); } + .threat-grid article:nth-child(2n) { border-right: 0; } + .threat-grid article:nth-last-child(-n+3) { border-bottom: 1px solid var(--line); } + .threat-grid article:nth-last-child(-n+2) { border-bottom: 0; } + .ecosystem-callout { grid-template-columns: 1fr; } .runtime-targets { grid-template-columns: repeat(5, 1fr); } .levels { grid-template-columns: repeat(3, 1fr); } .footer-grid { grid-template-columns: 1fr 1fr; padding-block: 45px; } @@ -317,11 +371,23 @@ footer { border-top: 1px solid var(--line); background: #050610; } .topbar nav a { padding: 8px; } .hero { min-height: auto; padding-top: 135px; gap: 20px; } .hero h1 { font-size: clamp(48px, 15vw, 70px); } - .hero-visual { min-height: 460px; transform: scale(.88); margin-inline: -30px; } - .signal { min-width: 125px; } + .hero-visual { min-height: 440px; margin-inline: 0; overflow: clip; transform: none; } + .orbit-a { width: 300px; height: 300px; } + .orbit-b { width: 380px; height: 380px; } + .hero-shield { width: 210px; height: 260px; } + .hero-shield .cairo-logo { width: 112px; height: 112px; } + .signal { min-width: 110px; padding: 10px; } + .signal-identity, .signal-risk { left: 0; } + .signal-mission, .signal-effect { right: 0; } + .hero-flow { bottom: 6px; gap: 5px; padding-inline: 9px; font-size: 7px; } .proof-strip { grid-template-columns: 1fr 1fr; } .proof-strip div:nth-child(2) { border-right: 0; } .proof-strip div { border-bottom: 1px solid var(--line); } + .pillar-grid, .threat-grid, .integration-grid { grid-template-columns: 1fr; } + .pillar-grid .pillar:last-child { grid-column: auto; } + .threat-grid article, .threat-grid article:nth-child(2n), .threat-grid article:nth-child(3n), .threat-grid article:nth-last-child(-n+2) { border-right: 0; border-bottom: 1px solid var(--line); } + .threat-grid article:last-child { border-bottom: 0; } + .threat-statement { grid-template-columns: 1fr; gap: 12px; } .section-heading { grid-template-columns: 1fr; gap: 22px; } .section-heading h2, .split-layout h2, .open-grid h2, .finale h2 { font-size: clamp(38px, 12vw, 55px); } .identity-lifecycle { grid-template-columns: repeat(2, 1fr); } @@ -338,10 +404,16 @@ footer { border-top: 1px solid var(--line); background: #050610; } .levels { grid-template-columns: 1fr 1fr; } .cert-flow i { display: none; } .cert-form { padding: 26px; } + .ecosystem-callout { padding: 25px; } + .ecosystem-callout .hero-actions { flex-wrap: wrap; } .form-fields { grid-template-columns: 1fr; } + .docs-search { grid-template-columns: 1fr auto; } + .docs-search label { grid-column: 1 / -1; } .docs-layout { grid-template-columns: 1fr; } .docs-layout aside { display: grid; grid-template-columns: 1fr 1fr; border-right: 0; border-bottom: 1px solid var(--line); } .doc-content { padding: 28px; } + .faq-list summary { grid-template-columns: 30px 1fr auto; font-size: 14px; } + .faq-list details p { margin-left: 48px; } .footer-grid { grid-template-columns: 1fr; gap: 18px; } } diff --git a/website/app/layout.tsx b/website/app/layout.tsx index dd99f94..0ed5c4f 100644 --- a/website/app/layout.tsx +++ b/website/app/layout.tsx @@ -3,9 +3,12 @@ import "./globals.css"; export const metadata: Metadata = { metadataBase: new URL("https://cairo.sh"), - title: "Cairo Agent Guard — Security for the Agentic Internet", + title: "Cairo Agent Guard — Every AI Agent Needs an Identity", description: - "Agent Identity, Agent Guard Protocol, Runtime, and Agent Guard Edge for trustworthy autonomous systems.", + "Identity, containment, certification, and platform defense for trustworthy autonomous systems.", + alternates: { + canonical: "/AgentGuard", + }, icons: { icon: "/AgentGuard/cairo-logo.svg", shortcut: "/AgentGuard/cairo-logo.svg", @@ -13,16 +16,19 @@ export const metadata: Metadata = { openGraph: { type: "website", url: "https://cairo.sh/AgentGuard", - title: "Cairo Agent Guard — Security for the Agentic Internet", + title: "Cairo Agent Guard — Every AI Agent Needs an Identity", description: - "Know the agent. Bound its authority. Enforce at the edge.", - images: [{ url: "/AgentGuard/og.png", width: 1792, height: 896 }], + "Identity. Containment. Certification. Platform defense.", + images: [ + { url: "/AgentGuard/agentguard-launch-og.png", width: 1792, height: 896 }, + { url: "/AgentGuard/og.png", width: 1792, height: 896 }, + ], }, twitter: { card: "summary_large_image", title: "Cairo Agent Guard", - description: "The security layer for the Agentic Internet.", - images: ["/AgentGuard/og.png"], + description: "Every AI agent needs an identity—and an enforceable security boundary.", + images: ["/AgentGuard/agentguard-launch-og.png"], }, }; diff --git a/website/app/site-client.tsx b/website/app/site-client.tsx index 3183758..39bb019 100644 --- a/website/app/site-client.tsx +++ b/website/app/site-client.tsx @@ -1,7 +1,7 @@ "use client"; import type { FormEvent, ReactNode } from "react"; -import { useId, useState } from "react"; +import { useEffect, useId, useMemo, useRef, useState } from "react"; function CairoLogo({ title }: { title?: string }) { const gradientId = `cairo-logo-${useId().replaceAll(":", "")}`; @@ -57,6 +57,42 @@ const decisions = [ "TERMINATE", ]; +const navigation = [ + ["Why now", "why"], + ["Identity", "identity"], + ["Runtime", "runtime"], + ["Edge", "edge"], + ["Certification", "certification"], + ["Docs", "docs"], +] as const; + +const threats = [ + ["Unknown agents", "A platform cannot safely trust an actor it cannot identify, bind to a principal, or revoke."], + ["Prompt-level controls", "Instructions inside the same model context cannot be the final authority over consequential side effects."], + ["Over-broad credentials", "Static keys turn a narrow task into ambient authority across tools, data, cloud, commerce, and devices."], + ["Delegation sprawl", "Child agents can silently expand reach unless every handoff remains inside parent scope, time, risk, and depth."], + ["Bypass paths", "A guard is only real when untrusted code has no alternate path to executors, upstreams, secrets, or actuators."], + ["Unverifiable claims", "Security assertions need structured evidence, measurable profiles, revocation state, and independent validation."], +] as const; + +const integrations = [ + ["Cairo Super Agent", "Reference integration", "Mandatory execution gateway beneath the planner."], + ["MCP", "Reference adapter", "Authorize every tools/call before the upstream is reached."], + ["API gateways", "Architecture pattern", "Apply receiving-platform policy at agent-aware ingress."], + ["Service mesh", "Architecture pattern", "Enforce close to workloads through a sidecar or policy module."], + ["SaaS platforms", "Architecture pattern", "Classify, constrain, challenge, or deny external agents."], + ["Physical AI", "Protocol profile", "Carry safety context to a separate controller and emergency stop."], +] as const; + +const faqs = [ + ["Is Agent Guard another prompt firewall?", "No. Prompt controls can help, but Agent Guard places authorization and execution outside model control, then pairs that runtime boundary with receiving-side platform policy."], + ["Does a verified identity grant access?", "No. Identity establishes a signed subject and principal claim. Permission still requires mission-bound capability, local policy, current risk, and revocation checks."], + ["What is open source today?", "The V0.1 protocol, schemas, deterministic reference runtime, SDKs, adapters, Edge architecture, certification profiles, documentation, and threat model are published under Apache-2.0."], + ["Is Agent Guard Edge a managed service today?", "Not yet. V0.1 provides architecture and reference enforcement primitives. Distributed replay, semantic DLP, global control plane, high availability, and service-level commitments remain platform work."], + ["Can Agent Guard protect physical systems?", "AGP-P defines a physical-AI assurance profile, but software authorization never replaces an independent safety controller, operating envelope, or emergency stop."], + ["What does a certification application mean?", "It starts scoping and evidence review. Submission is not itself a certificate, approval, or claim of conformance."], +] as const; + const docs: Record = { overview: { label: "Overview", @@ -229,11 +265,61 @@ const requestExample = `{ export function AgentGuardSite() { const [navOpen, setNavOpen] = useState(false); + const [activeSection, setActiveSection] = useState("top"); const [activeDoc, setActiveDoc] = useState("overview"); + const [docQuery, setDocQuery] = useState(""); const [copyLabel, setCopyLabel] = useState("Copy request"); const [formStatus, setFormStatus] = useState(""); const [formError, setFormError] = useState(false); const [submitting, setSubmitting] = useState(false); + const formRef = useRef(null); + + useEffect(() => { + const observer = new IntersectionObserver( + (entries) => { + const current = entries + .filter((entry) => entry.isIntersecting) + .sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0]; + if (current?.target.id) setActiveSection(current.target.id); + }, + { rootMargin: "-25% 0px -60%", threshold: [0.05, 0.2, 0.5] }, + ); + navigation.forEach(([, id]) => { + const section = document.getElementById(id); + if (section) observer.observe(section); + }); + return () => observer.disconnect(); + }, []); + + useEffect(() => { + const saved = sessionStorage.getItem("agentguard-certification-draft"); + if (!saved || !formRef.current) return; + try { + const values = JSON.parse(saved) as Record; + Object.entries(values).forEach(([name, value]) => { + const field = formRef.current?.elements.namedItem(name); + if (field instanceof HTMLInputElement || field instanceof HTMLTextAreaElement || field instanceof HTMLSelectElement) field.value = value; + }); + } catch { + sessionStorage.removeItem("agentguard-certification-draft"); + } + }, []); + + const filteredDocs = useMemo(() => { + const query = docQuery.trim().toLowerCase(); + if (!query) return Object.entries(docs); + return Object.entries(docs).filter(([, doc]) => `${doc.label} ${doc.title}`.toLowerCase().includes(query)); + }, [docQuery]); + + function saveCertificationDraft() { + if (!formRef.current) return; + const fields = Object.fromEntries( + [...new FormData(formRef.current).entries()] + .filter(([name]) => name !== "companyWebsite") + .map(([name, value]) => [name, String(value)]), + ); + sessionStorage.setItem("agentguard-certification-draft", JSON.stringify(fields)); + } async function copyRequest() { try { @@ -262,6 +348,7 @@ export function AgentGuardSite() { const result = (await response.json()) as { application_id?: string; error?: string }; if (!response.ok) throw new Error(result.error || "Application could not be submitted."); form.reset(); + sessionStorage.removeItem("agentguard-certification-draft"); setFormStatus(`Application ${result.application_id} received. Evidence review is next.`); } catch (error) { setFormError(true); @@ -294,26 +381,22 @@ export function AgentGuardSite() { Menu - Start building + Integrate now
Cairo / ColomboAI · V0.1 Foundation
-

Security infrastructure for the Agentic Internet.

-

Know the agent. Bound its authority. Enforce before action.

+

Security infrastructure for the Agentic Internet.

+

Every AI Agent Needs an Identity.

+

Identity. Containment. Certification. Platform defense.

Cairo Agent Guard combines Agent Identity, an open trust protocol, a non-bypassable runtime, and receiving-side Edge protection for software agents and physical AI.

01

Intelligence is not authority. Every consequential action must be explicitly authorized, narrowly bounded, observable, and revocable.

@@ -325,7 +408,8 @@ export function AgentGuardSite() {
IDENTITYVERIFIED CLAIM
MISSIONBOUND
RISK17 / 100
-
DECISIONALLOW
+
DECISIONALLOW WITH LIMITS
+
@@ -336,15 +420,28 @@ export function AgentGuardSite() {
PROVEStructured, revocation-linked evidence
+
+
+
WHY AGENT GUARD / WHY NOW

Agents are becoming actors. Security has to catch up.

+

Autonomous systems now cross application boundaries, operate tools, delegate work, spend money, reach sensitive data, and affect the physical world. Existing human identity and API-key models do not describe that authority precisely enough.

+
+
+ {threats.map(([title, body], index) =>
{String(index + 1).padStart(2, "0")}

{title}

{body}

)} +
+
THE DESIGN RULE

Models may propose. Only an independent, deterministic security boundary may authorize and execute.

+
+
-
THE AGENT GUARD STACK

Three pillars.
One trust boundary.

-

AGP is the language—not the whole product. Identity establishes the signed subject. AGP carries authority. Edge makes the receiving platform sovereign.

+
THE AGENT GUARD STACK

Five trust pillars.
One enforceable boundary.

+

Identity establishes the signed subject. AGP carries mission-bound authority. Runtime contains the actor. Certification turns claims into evidence. Edge keeps the receiving platform sovereign.

01
ID

Agent Identity

Who is acting, which principal it represents, who issued the claim, and whether it remains valid.

  • Stable agent identity
  • Principal binding
  • Issuer trust and rotation
  • Revocation-aware verification
Explore Identity →
-
02
AGP

Agent Guard Protocol

Portable mission, capability, delegation, risk, decision, attestation, and incident context.

  • Default deny
  • Monotonic delegation
  • Risk-only tightening
  • Ten decision effects
Read the protocol →
-
03
EDGE

Agent Guard Edge

Receiving-side discovery, verification, platform policy, containment, and security evidence.

  • Trust classification
  • Challenge and step-up
  • Rate, data, economic control
  • Quarantine and denial
Explore Edge →
+
02
RUN

Runtime containment

A non-bypassable Guardian owns the only handles for tools, files, network, credentials, cloud, commerce, and devices.

  • Mandatory execution gateway
  • Blind secret use
  • Replay defense
  • Quarantine trees
Inspect the runtime →
+
03
AGP

Agent Guard Protocol

Portable mission, capability, delegation, risk, decision, attestation, and incident context.

  • Default deny
  • Monotonic delegation
  • Risk-only tightening
  • Ten decision effects
Read AGP →
+
04
CERT

Certification

Measurable assurance profiles for agents, runtimes, platforms, MCP servers, and physical AI systems.

  • Evidence review
  • Conformance testing
  • Independent validation
  • Revocation-aware status
View assurance levels →
+
05
EDGE

Platform defense

Receiving-side discovery, verification, local policy, containment, and security evidence.

  • Trust classification
  • Challenge and step-up
  • Rate, data, economic control
  • Quarantine and denial
Explore Edge →
@@ -396,13 +493,13 @@ export function AgentGuardSite() { -
+
DEPLOYMENT ARCHITECTURE

Policy centralization.
Enforcement everywhere.

A high-assurance deployment separates fast, local request decisions from administrative authority and global intelligence.

DATA PLANE

Decide in the path.

  • Canonical request parsing
  • Identity and capability verification
  • Mission, replay, revocation, and risk
  • Gateway enforcement and response limits
  • Structured security telemetry
CONTROL PLANE

Govern the fleet.

  • Issuer and key trust
  • Policy distribution and versioning
  • Revocation and threat intelligence
  • Agent registry and certification
  • Incidents, evidence, and operations
NON-BYPASSABILITY

The agent must have no alternate route to tools, upstream services, credentials, network egress, protected files, or physical actuators.

-
+
CAIRO SUPER AGENT

Cairo Super Agent security beneath the planner—not inside the prompt.

Every Cairo run receives a signed identity, principal, mission, capability, session, policy hash, and risk state. Direct executor handles never enter model-controlled code.

  • Tools and MCP
  • Shell and filesystem
  • Network and credentials
  • Purchases and cloud
  • Delegated agents
  • PAIP and physical AI
CairoExecutionGateway.tsREFERENCE CONTRACT
{`await gateway.execute(
@@ -416,18 +513,26 @@ export function AgentGuardSite() {
           
+
+
INTEGRATIONS & ECOSYSTEM

One security model across the agentic stack.

Start with a reference integration or carry the same identity, authority, enforcement, and evidence model into your own ingress and execution boundary.

+
+ {integrations.map(([name, status, body]) =>
{status}

{name}

{body}

)} +
+
BUILD WITH US

Bring Agent Identity to your platform.

Use the open schemas, verifier, capability model, runtime contracts, and Edge architecture as the foundation for an agent-aware trust boundary.

+
+
AGENT GUARD CERTIFICATION

Turn security claims into evidence.

Apply measurable assurance profiles to agents, runtimes, platforms, MCP servers, and physical AI systems.

AGP-L1Identity ReadyIdentity · principal · revocation
AGP-L2Capability ControlledMission · least authority · audit
AGP-L3Runtime ProtectedNon-bypassable enforcement
AGP-L4High AssuranceAttestation · independent validation
AGP-PPhysical AIPAIP · safety controller · E-stop
Apply→Scope→Evidence→Conformance→Validation→Certificate
-
+
START AN ASSESSMENT

Apply for Agent Guard certification.

Your submission begins scoping and evidence review. It is not itself a certificate or conformance claim.