+ What it is
+ brand.json tells agents who your brand is and how it wants to be represented: names, logos, colors, fonts, tone, visual guidelines, and the properties you own. Agents read it the same way crawlers read robots.txt: from a well-known location on your own domain.
+
+ Who hosts it
+
+
+
You
+
Recommended. Put the file at https://yourdomain/.well-known/brand.json. The builder generates it and checks it once it's live.
+
+
+
Your agency or platform
+
They host the full file; you publish a small pointer on your domain with authoritative_location.
+
+
+
A hosting service
+
AgenticAdvertising.org can host it for you. Your domain still publishes the pointer, so you stay in control.
+
+
+
+ A minimal example
+{
+ "$schema": "https://brandjson.org/schemas/v3/brand.json",
+ "house": { "domain": "acme.example", "name": "Acme Corp" },
+ "brands": [
+ {
+ "id": "acme",
+ "names": [{ "en": "Acme" }],
+ "logos": [{ "url": "https://acme.example/logo.svg" }],
+ "colors": { "primary": "#1A4D8F" }
+ }
+ ]
+}
+
+ Schema
+ Validate against https://brandjson.org/schemas/v3/brand.json. The standard's agent and trust fields are moving to a separate record, trust.json, so brand.json can stay focused on identity.
+
+
+
+
+
diff --git a/server/public/sites/standard-site.css b/server/public/sites/standard-site.css
new file mode 100644
index 00000000000..d1eb42717cf
--- /dev/null
+++ b/server/public/sites/standard-site.css
@@ -0,0 +1,18 @@
+/* Shared layout for standalone standard sites (brandjson.org, trustjson.org).
+ Uses design system variables only - see /design-system.css. */
+body { padding-top: var(--nav-height); background: var(--color-bg-page); color: var(--color-text); font-family: var(--font-sans); }
+.std-hero { padding: var(--space-16) var(--space-5) var(--space-12); text-align: center; background: var(--gradient-primary-dark); color: var(--color-text-on-dark); }
+.std-hero h1 { font-family: var(--font-mono); font-size: var(--text-5xl); font-weight: var(--font-bold); margin: 0 0 var(--space-4); }
+.std-hero p { font-size: var(--text-xl); color: var(--color-text-on-dark-secondary); max-width: 640px; margin: 0 auto var(--space-6); line-height: 1.5; }
+.std-badge { display: inline-block; margin-bottom: var(--space-4); padding: var(--space-1) var(--space-3); border-radius: var(--radius-lg); background: var(--color-warning-100); color: var(--color-text); font-size: var(--text-sm); font-weight: var(--font-semibold); }
+.std-actions { display: flex; gap: var(--space-3); justify-content: center; flex-wrap: wrap; }
+.std-main { max-width: var(--container-md); margin: 0 auto; padding: var(--space-10) var(--space-5); }
+.std-main h2 { font-size: var(--text-2xl); margin: var(--space-10) 0 var(--space-3); color: var(--color-text-heading); }
+.std-main h2:first-child { margin-top: 0; }
+.std-main p, .std-main li { color: var(--color-text-secondary); line-height: 1.6; }
+.std-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-4); margin-top: var(--space-4); }
+.std-card { background: var(--color-bg-card); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-5); box-shadow: var(--shadow-sm); }
+.std-card h3 { margin: 0 0 var(--space-2); font-size: var(--text-lg); color: var(--color-text-heading); }
+.std-card p { margin: 0; font-size: var(--text-sm); }
+.std-main pre { background: var(--color-code-bg); border: 1px solid var(--color-code-border); color: var(--color-code-text); border-radius: var(--radius-lg); padding: var(--space-4); overflow-x: auto; font-family: var(--font-mono); font-size: var(--text-sm); }
+.std-main code { font-family: var(--font-mono); }
diff --git a/server/public/sites/trustjson/index.html b/server/public/sites/trustjson/index.html
new file mode 100644
index 00000000000..024c107222b
--- /dev/null
+++ b/server/public/sites/trustjson/index.html
@@ -0,0 +1,64 @@
+
+
+
+
+ What it answers
+
+
+
Which agents are ours?
+
agents[]: each agent's URL, roles, and signing keys, published from your own domain.
+
+
+
Who may act for us?
+
grants[]: authority you delegate to other organizations, scoped and time-boxed. Grants never carry keys.
+
+
+
Whose grants do we accept?
+
acknowledgements[]: a pointer to a grant someone else published. The terms stay in their file.
+
+
+
+ Not just for advertising
+ The core is protocol-neutral. Roles and scopes are namespaced, for example adcp:sales for the Ad Context Protocol, so any agent protocol can define its own profile.
+
+ A minimal example
+{
+ "agents": [
+ {
+ "url": "https://agents.acme.example/sales",
+ "roles": ["adcp:sales"],
+ "jwks_uri": "https://agents.acme.example/.well-known/jwks.json"
+ }
+ ]
+}
+
+ Status
+ trust.json is a draft under discussion in RFC #7809. Field names may change before v1. Identity stays in brand.json.
+
+
+
+
+
diff --git a/server/src/http.ts b/server/src/http.ts
index 2ecf23db47f..13f46165639 100644
--- a/server/src/http.ts
+++ b/server/src/http.ts
@@ -54,6 +54,7 @@ import { getBrandPrimaryDomain, getBrandPrimaryDomainsForOrgs } from "./services
import { getGitHubConnectedAccount, resolveGitHubConnectUrl, disconnectGitHub, buildPipesReturnTo } from "./services/pipes.js";
import { BrandDatabase, HostedBrandConflictError, canSurfaceBrandForMember, resolveBrandFromJson } from "./db/brand-db.js";
import { isDomainControlVerified, publicBrandJsonManifest } from "./services/brand-trust-fields.js";
+import { getStandaloneSite, resolveStandaloneRequest, type StandaloneSite } from "./standalone-sites.js";
import { CatalogEventsDatabase } from "./db/catalog-events-db.js";
import { AgentInventoryProfilesDatabase } from "./db/agent-inventory-profiles-db.js";
import { BrandManager } from "./brand-manager.js";
@@ -1223,6 +1224,12 @@ async function getUserFromRequest(
return null;
}
+/** Marks pages served on a standalone standard site so nav.js renders neutral chrome. */
+function standaloneSiteScript(res: express.Response): string {
+ const site = res.locals.standaloneSite as StandaloneSite | undefined;
+ return site ? `\n` : '';
+}
+
function stripLegacyBrandContext(manifest: Record