diff --git a/web/app/blog/page.tsx b/web/app/blog/page.tsx index 09d66b6..067a246 100644 --- a/web/app/blog/page.tsx +++ b/web/app/blog/page.tsx @@ -12,8 +12,9 @@ import { defaultOgImage } from '../../lib/og-meta'; import { absoluteUrl, SITE_NAME, SITE_URL } from '../../lib/site'; export const metadata: Metadata = { - title: 'Blog', - description: 'News, tutorials, and insights from the Agent Relay team.', + title: { absolute: 'Agent Relay Blog — Multi-Agent Systems & AI Coordination' }, + description: + 'News, tutorials, and insights from the Agent Relay team — essays, playbooks, and product thinking on multi-agent systems, orchestration, and AI coordination.', alternates: { canonical: absoluteUrl('/blog'), }, diff --git a/web/app/docs/7.1.1/[slug]/page.tsx b/web/app/docs/7.1.1/[slug]/page.tsx index 4eaefcf..5dc63d7 100644 --- a/web/app/docs/7.1.1/[slug]/page.tsx +++ b/web/app/docs/7.1.1/[slug]/page.tsx @@ -71,14 +71,16 @@ export async function generateMetadata({ params }: PageProps): Promise return { title: 'Not Found' }; } + const seoTitle = doc.frontmatter.metaTitle ?? `${doc.frontmatter.title} - Version 7.1.1`; + return { - title: `${doc.frontmatter.title} - Version 7.1.1`, + title: seoTitle, description: doc.frontmatter.description, alternates: { canonical: absoluteUrl(`/docs/7.1.1/${slug}`), }, openGraph: { - title: `${doc.frontmatter.title} - Version 7.1.1`, + title: seoTitle, description: doc.frontmatter.description, url: absoluteUrl(`/docs/7.1.1/${slug}`), type: 'article', @@ -86,7 +88,7 @@ export async function generateMetadata({ params }: PageProps): Promise }, twitter: { card: 'summary_large_image', - title: `${doc.frontmatter.title} - Version 7.1.1`, + title: seoTitle, description: doc.frontmatter.description, images: [defaultOgImage().url], }, diff --git a/web/app/docs/[slug]/page.tsx b/web/app/docs/[slug]/page.tsx index 44f2046..e8cc502 100644 --- a/web/app/docs/[slug]/page.tsx +++ b/web/app/docs/[slug]/page.tsx @@ -32,7 +32,7 @@ export async function generateMetadata({ params }: PageProps): Promise const legacyDoc = getDoc(slug, 'v7.1.1'); const canonical = absoluteUrl(`/docs/7.1.1/${slug}`); return { - title: legacyDoc?.frontmatter.title ?? 'Not Found', + title: legacyDoc?.frontmatter.metaTitle ?? legacyDoc?.frontmatter.title ?? 'Not Found', description: legacyDoc?.frontmatter.description, alternates: { canonical }, }; @@ -44,15 +44,17 @@ export async function generateMetadata({ params }: PageProps): Promise return { title: 'Not Found' }; } + const seoTitle = doc.frontmatter.metaTitle ?? doc.frontmatter.title; + return { - title: doc.frontmatter.title, + title: seoTitle, description: doc.frontmatter.description, alternates: { canonical: absoluteUrl(`/docs/${slug}`), types: { 'text/markdown': getDocMarkdownUrl(slug) }, }, openGraph: { - title: doc.frontmatter.title, + title: seoTitle, description: doc.frontmatter.description, url: absoluteUrl(`/docs/${slug}`), type: 'article', @@ -60,7 +62,7 @@ export async function generateMetadata({ params }: PageProps): Promise }, twitter: { card: 'summary_large_image', - title: doc.frontmatter.title, + title: seoTitle, description: doc.frontmatter.description, images: [absoluteUrl(`/docs/${slug}/og.png`)], }, diff --git a/web/content/docs/7.1.1/authentication.mdx b/web/content/docs/7.1.1/authentication.mdx index 7e1ad82..984f87a 100644 --- a/web/content/docs/7.1.1/authentication.mdx +++ b/web/content/docs/7.1.1/authentication.mdx @@ -1,6 +1,7 @@ --- title: 'Authentication' -description: 'Use Relayauth for identity, authorization, and policy control around agent systems.' +metaTitle: 'Authentication & Policy with Relayauth' +description: 'Use Relayauth for identity, authorization, and policy control around agent systems, securing how agents join workspaces and access relay resources safely.' --- Authentication and authorization live next to orchestration, not inside it. When agents need identities, scoped access, or policy enforcement, the relevant platform piece is Relayauth. diff --git a/web/content/docs/7.1.1/cloud.mdx b/web/content/docs/7.1.1/cloud.mdx index 43d0844..ae01ba0 100644 --- a/web/content/docs/7.1.1/cloud.mdx +++ b/web/content/docs/7.1.1/cloud.mdx @@ -1,6 +1,7 @@ --- title: 'Cloud' -description: 'Run the same Relay patterns locally or in sandboxed cloud environments.' +metaTitle: 'Run Agent Relay Locally or in the Cloud' +description: 'Run the same Agent Relay messaging and orchestration patterns locally or in sandboxed cloud environments, with identical workspace and session behavior.' --- The SDK is designed so local and cloud execution share the same mental model. Local mode keeps agents on your machine. Cloud mode moves execution into sandboxed environments while preserving the coordination patterns above it. diff --git a/web/content/docs/7.1.1/communicate-ai-sdk.mdx b/web/content/docs/7.1.1/communicate-ai-sdk.mdx index 4838074..d337482 100644 --- a/web/content/docs/7.1.1/communicate-ai-sdk.mdx +++ b/web/content/docs/7.1.1/communicate-ai-sdk.mdx @@ -1,6 +1,7 @@ --- title: 'AI SDK' -description: 'Connect Vercel AI SDK apps to Relaycast with onRelay().' +metaTitle: 'Connect Vercel AI SDK Apps to Relaycast' +description: 'Connect a Vercel AI SDK app to Relaycast with a single onRelay() call, giving your streamText agents DMs, channel messages, and a live multi-agent roster.' --- Connect an [AI SDK](https://ai-sdk.dev/docs/introduction) app to Relaycast with a single `onRelay()` call. diff --git a/web/content/docs/7.1.1/communicate-claude-sdk.mdx b/web/content/docs/7.1.1/communicate-claude-sdk.mdx index b7c13c4..b250f3a 100644 --- a/web/content/docs/7.1.1/communicate-claude-sdk.mdx +++ b/web/content/docs/7.1.1/communicate-claude-sdk.mdx @@ -1,6 +1,7 @@ --- title: 'Claude Agent SDK' -description: 'Connect Claude Agent SDK agents to the relay.' +metaTitle: 'Connect Claude Agent SDK Agents to Relay' +description: 'Connect Claude Agent SDK agents to Relaycast in Python or TypeScript, injecting DMs and channel messages mid-execution via PostToolUse and Stop hooks.' --- Connect a [Claude Agent SDK](https://docs.anthropic.com/en/docs/agents) agent to Relaycast. Supports both Python and TypeScript. diff --git a/web/content/docs/7.1.1/communicate-google-adk.mdx b/web/content/docs/7.1.1/communicate-google-adk.mdx index 584b60d..d61770b 100644 --- a/web/content/docs/7.1.1/communicate-google-adk.mdx +++ b/web/content/docs/7.1.1/communicate-google-adk.mdx @@ -1,6 +1,7 @@ --- title: 'Google ADK' -description: 'Connect Google ADK agents to the relay.' +metaTitle: 'Connect Google ADK Agents to Relaycast' +description: 'Connect a Google Agent Development Kit (ADK) agent to Relaycast with a single on_relay() call, injecting relay messages via the before_model_callback hook.' --- Connect a [Google Agent Development Kit](https://google.github.io/adk-docs/) agent to Relaycast with a single `on_relay()` call. diff --git a/web/content/docs/7.1.1/communicate-openai-agents.mdx b/web/content/docs/7.1.1/communicate-openai-agents.mdx index ce647c0..664d8c6 100644 --- a/web/content/docs/7.1.1/communicate-openai-agents.mdx +++ b/web/content/docs/7.1.1/communicate-openai-agents.mdx @@ -1,6 +1,7 @@ --- title: 'OpenAI Agents' -description: 'Connect OpenAI Agents to the relay.' +metaTitle: 'Connect OpenAI Agents SDK to Relaycast' +description: 'Connect an OpenAI Agents SDK agent to Relaycast with a single on_relay() call in Python, receiving relay DMs and channel messages at tool-call boundaries.' --- Connect an [OpenAI Agents SDK](https://github.com/openai/openai-agents-python) agent to Relaycast with a single `on_relay()` call. diff --git a/web/content/docs/7.1.1/communicate-pi.mdx b/web/content/docs/7.1.1/communicate-pi.mdx index b01b8c6..ad6cc0a 100644 --- a/web/content/docs/7.1.1/communicate-pi.mdx +++ b/web/content/docs/7.1.1/communicate-pi.mdx @@ -1,6 +1,7 @@ --- title: 'Pi' -description: 'Connect Pi agents to the relay.' +metaTitle: 'Connect a Pi Coding Agent to Relaycast' +description: 'Connect a Pi coding agent to Relaycast so messages are pushed into the session in real time via the session.steer() and session.followUp() TypeScript APIs.' --- Connect a [Pi](https://github.com/anthropics/pi) coding agent to Relaycast. Messages are pushed into the session in real time. diff --git a/web/content/docs/7.1.1/communicate.mdx b/web/content/docs/7.1.1/communicate.mdx index 49f7506..bdc7031 100644 --- a/web/content/docs/7.1.1/communicate.mdx +++ b/web/content/docs/7.1.1/communicate.mdx @@ -1,6 +1,7 @@ --- title: 'Communicate Mode' -description: 'Put any framework agent on the relay with on_relay().' +metaTitle: 'Communicate Mode: Put Any Agent on Relay' +description: 'Put any framework agent on Relaycast with on_relay(): your agent gets DMs, channel messages, and a live roster of other agents without changing how it runs.' --- Communicate mode connects an existing agent framework to Relaycast. Your agent gets DMs, channel messages, and a live roster of other agents — without changing how it runs. diff --git a/web/content/docs/7.1.1/file-sharing.mdx b/web/content/docs/7.1.1/file-sharing.mdx index d19bcbc..44c801d 100644 --- a/web/content/docs/7.1.1/file-sharing.mdx +++ b/web/content/docs/7.1.1/file-sharing.mdx @@ -1,6 +1,7 @@ --- title: 'File sharing' -description: 'Use Relayfile when agents need shared state, artifacts, and coordinated file access.' +metaTitle: 'File Sharing for Agents with Relayfile' +description: 'Use Relayfile when agents need shared state, artifacts, and coordinated file access, giving your multi-agent system a common workspace for its outputs.' --- Messaging handles coordination. Relayfile handles shared state. When several agents need to read, write, watch, and diff --git a/web/content/docs/7.1.1/harness-runtime-config.mdx b/web/content/docs/7.1.1/harness-runtime-config.mdx index 2ffb385..a2c984f 100644 --- a/web/content/docs/7.1.1/harness-runtime-config.mdx +++ b/web/content/docs/7.1.1/harness-runtime-config.mdx @@ -1,6 +1,7 @@ --- title: Harness runtime config -description: Reference for the concrete HarnessConfig objects that SDK adapters send to the broker. +metaTitle: 'Harness Runtime Config & HarnessConfig Shape' +description: 'Reference for the concrete HarnessConfig objects that SDK adapters send to the broker, covering runtime categories and serializable spawn configuration.' --- Use this page when you need the exact `HarnessConfig` shape. For a shorter diff --git a/web/content/docs/7.1.1/observer.mdx b/web/content/docs/7.1.1/observer.mdx index b5f4641..6b084aa 100644 --- a/web/content/docs/7.1.1/observer.mdx +++ b/web/content/docs/7.1.1/observer.mdx @@ -1,6 +1,7 @@ --- title: 'Observer' -description: 'Follow relay traffic in real time from a lightweight read-only workspace view.' +metaTitle: 'Observer: Watch Relay Traffic in Real Time' +description: 'Follow Agent Relay traffic in real time from a lightweight, read-only workspace view to monitor messages and agent activity without joining the conversation.' --- Observer is the fastest way to watch a Relaycast workspace live. It is a read-only view built for following agent conversations, handoffs, and progress without joining the workflow as an active participant. diff --git a/web/content/docs/7.1.1/permissions.mdx b/web/content/docs/7.1.1/permissions.mdx index 2cd62aa..24afafd 100644 --- a/web/content/docs/7.1.1/permissions.mdx +++ b/web/content/docs/7.1.1/permissions.mdx @@ -1,7 +1,8 @@ --- title: 'Permissions' +metaTitle: 'Permissions & Policy Control via relay.yaml' nav_title: 'Permissions' -description: 'Control what workflow agents can read, write, reach over the network, and execute from relay.yaml.' +description: 'Control what workflow agents can read, write, reach over the network, and execute by defining policy in relay.yaml for safe and tightly scoped multi-agent runs.' --- Permissions in `relay.yaml` control what each workflow agent can see and do. diff --git a/web/content/docs/7.1.1/python-sdk.mdx b/web/content/docs/7.1.1/python-sdk.mdx index af92d42..796000a 100644 --- a/web/content/docs/7.1.1/python-sdk.mdx +++ b/web/content/docs/7.1.1/python-sdk.mdx @@ -1,6 +1,7 @@ --- title: Python SDK Reference -description: Complete reference for the agent-relay-sdk Python package +metaTitle: 'Python SDK Reference for Agent Relay' +description: 'Complete reference for the agent-relay-sdk Python package, covering installation, spawning agents, messaging, and coordinating your multi-agent workflows.' --- ```bash diff --git a/web/content/docs/7.1.1/reference-openclaw.mdx b/web/content/docs/7.1.1/reference-openclaw.mdx index 8da90cb..c73b972 100644 --- a/web/content/docs/7.1.1/reference-openclaw.mdx +++ b/web/content/docs/7.1.1/reference-openclaw.mdx @@ -1,6 +1,7 @@ --- title: "OpenClaw Bridge" -description: "Relaycast bridge for OpenClaw" +metaTitle: 'OpenClaw Bridge for Relaycast Orchestration' +description: 'The @agent-relay/openclaw Relaycast bridge connects local OpenClaw instances for DMs, channels, threads, worker spawning, and MCP-based orchestration.' --- # @agent-relay/openclaw diff --git a/web/content/docs/7.1.1/relay-dashboard.mdx b/web/content/docs/7.1.1/relay-dashboard.mdx index be53e8a..8071ff6 100644 --- a/web/content/docs/7.1.1/relay-dashboard.mdx +++ b/web/content/docs/7.1.1/relay-dashboard.mdx @@ -1,6 +1,7 @@ --- title: 'Relay Dashboard' -description: 'Operate a relay workspace from a visual UI for messaging, spawning, and live status.' +metaTitle: 'Relay Dashboard: Visual Workspace Control' +description: 'Operate an Agent Relay workspace from a visual dashboard UI for messaging, spawning agents, and monitoring live status across your multi-agent system.' --- Relay Dashboard is the operator-facing UI for Agent Relay. It gives you a live view of workspace activity so you can watch messages, inspect agent state, and intervene without dropping back to raw CLI commands for every action. diff --git a/web/content/docs/7.1.1/scheduling.mdx b/web/content/docs/7.1.1/scheduling.mdx index c729960..e7a8ccb 100644 --- a/web/content/docs/7.1.1/scheduling.mdx +++ b/web/content/docs/7.1.1/scheduling.mdx @@ -1,6 +1,7 @@ --- title: 'Scheduling' -description: 'Use RelayCron for recurring jobs, webhook delivery, and time-based agent automation.' +metaTitle: 'Scheduling & RelayCron Jobs for AI Agents' +description: 'Use RelayCron to schedule recurring jobs, deliver webhooks, and drive time-based agent automation across your Agent Relay workspace and active sessions.' --- Scheduling is the time-based layer of the platform. Use it when an agent flow should run on a cron, deliver webhooks, or wake up on a schedule instead of only reacting to live messages. diff --git a/web/content/docs/7.1.1/spawning-an-agent.mdx b/web/content/docs/7.1.1/spawning-an-agent.mdx index 56e86a6..1d1dee1 100644 --- a/web/content/docs/7.1.1/spawning-an-agent.mdx +++ b/web/content/docs/7.1.1/spawning-an-agent.mdx @@ -1,6 +1,7 @@ --- title: 'Spawning an agent' -description: 'Spawn an agent on the relay deterministically or dynamically.' +metaTitle: 'Spawning Agents on the Relay, Step by Step' +description: 'Spawn an agent on the relay deterministically or dynamically, configuring its harness, identity, and runtime so it can join your multi-agent workspace.' --- Spawning starts an agent "on the relay" and returns an `Agent` handle you can wait on, message, observe, and release later. diff --git a/web/content/docs/7.1.1/swift-sdk.mdx b/web/content/docs/7.1.1/swift-sdk.mdx index e979fed..40a3335 100644 --- a/web/content/docs/7.1.1/swift-sdk.mdx +++ b/web/content/docs/7.1.1/swift-sdk.mdx @@ -1,6 +1,7 @@ --- title: 'Swift SDK' -description: 'Native Swift SDK for Relay messaging and channel-based coordination.' +metaTitle: 'Swift SDK for Agent Relay on iOS & macOS' +description: 'Native Swift SDK for Agent Relay messaging and channel-based coordination, letting iOS and macOS apps join multi-agent workspaces and exchange messages.' --- The repository includes a native Swift SDK in `packages/sdk-swift`. It is currently documented from the package README rather than a larger docs reference page. diff --git a/web/content/docs/7.1.1/typescript-examples.mdx b/web/content/docs/7.1.1/typescript-examples.mdx index 35687c1..f82cd71 100644 --- a/web/content/docs/7.1.1/typescript-examples.mdx +++ b/web/content/docs/7.1.1/typescript-examples.mdx @@ -1,6 +1,7 @@ --- title: 'TypeScript Examples' -description: 'Starting points for building with Agent Relay from TypeScript.' +metaTitle: 'Agent Relay TypeScript Examples & Starters' +description: 'Practical starting points and example projects for building multi-agent systems with Agent Relay from TypeScript, spanning messaging and orchestration.' --- The repository ships several TypeScript examples ranging from small demos to more complete app integrations. diff --git a/web/content/docs/7.1.1/workforce.mdx b/web/content/docs/7.1.1/workforce.mdx index 6095762..7abbcad 100644 --- a/web/content/docs/7.1.1/workforce.mdx +++ b/web/content/docs/7.1.1/workforce.mdx @@ -1,6 +1,7 @@ --- title: 'Workforce' -description: 'Treat a set of agents as a coordinated team with shared communication and execution patterns.' +metaTitle: 'Workforce: Coordinate Agent Teams on Relay' +description: 'Treat a set of agents as a coordinated team with shared communication, roles, and execution patterns for collaborative multi-agent work running on the relay.' --- A workforce is the practical unit above individual agents: several workers, one coordination model, and enough shared context to make progress without constant manual steering. diff --git a/web/content/docs/agent-relay-mcp.mdx b/web/content/docs/agent-relay-mcp.mdx index 43e63d9..e745a92 100644 --- a/web/content/docs/agent-relay-mcp.mdx +++ b/web/content/docs/agent-relay-mcp.mdx @@ -1,6 +1,7 @@ --- title: 'Agent Relay MCP' -description: 'Expose Relay messaging and registered actions to agents as MCP tools.' +metaTitle: 'Agent Relay MCP: Expose Messaging as Tools' +description: 'Expose Agent Relay messaging and registered actions to any agent as MCP tools, turning channels, DMs, and Zod-backed actions into callable MCP endpoints.' --- `agent-relay mcp` is how agents use Relay when they cannot or should not embed the SDK. diff --git a/web/content/docs/cli-overview.mdx b/web/content/docs/cli-overview.mdx index 47cc325..a914e16 100644 --- a/web/content/docs/cli-overview.mdx +++ b/web/content/docs/cli-overview.mdx @@ -1,6 +1,7 @@ --- title: 'CLI' -description: 'Use the agent-relay CLI for workspaces, agent identities, channels, messages, MCP, and optional local broker sessions.' +metaTitle: 'agent-relay CLI: Workspaces, Channels & MCP' +description: 'Use the agent-relay CLI to manage workspaces, agent identities, channels, messages, MCP servers, and optional local broker sessions directly from your terminal.' --- The version 8 CLI has two layers: diff --git a/web/content/docs/dms.mdx b/web/content/docs/dms.mdx index 9a167f8..08a8f13 100644 --- a/web/content/docs/dms.mdx +++ b/web/content/docs/dms.mdx @@ -1,6 +1,7 @@ --- title: 'DMs and group DMs' -description: 'Use direct messages for private one-to-one and small-group coordination between agents.' +metaTitle: 'Direct Messages & Group DMs for AI Agents' +description: 'Use Agent Relay direct messages for private one-to-one and small-group coordination, ideal for targeted assignments, quiet status checks, and private sidebars.' --- DMs are private conversations between agents. They are best for targeted assignments, quiet status checks, and sidebars that should not become a shared channel transcript. diff --git a/web/content/docs/quickstart.mdx b/web/content/docs/quickstart.mdx index dd82016..5560f20 100644 --- a/web/content/docs/quickstart.mdx +++ b/web/content/docs/quickstart.mdx @@ -1,6 +1,7 @@ --- title: 'Quickstart' -description: 'Create a workspace, register sessions, send messages, and expose a Zod-backed action.' +metaTitle: 'Quickstart: Build a Multi-Agent Workspace' +description: 'Get started with Agent Relay: create a workspace, register sessions, send messages between agents, and expose a Zod-backed action in just a few short minutes.' --- This quickstart shows the target Agent Relay shape: a workspace first, then messaging, delivery, actions, and optional managed sessions. diff --git a/web/content/docs/reference-cli.mdx b/web/content/docs/reference-cli.mdx index eaf682d..a66e4ee 100644 --- a/web/content/docs/reference-cli.mdx +++ b/web/content/docs/reference-cli.mdx @@ -1,6 +1,7 @@ --- title: 'CLI reference' -description: 'Command matrix for the version 8 agent-relay CLI.' +metaTitle: 'agent-relay CLI Reference & Command Matrix' +description: 'Complete command matrix for the version 8 agent-relay CLI, covering workspaces, agent identities, channels, messaging, MCP servers, and local broker sessions.' --- This page lists the version 8 CLI surface by command group. Run any command with `--help` for Commander-generated usage and current flags. diff --git a/web/content/docs/sending-messages.mdx b/web/content/docs/sending-messages.mdx index be3ce12..083b9ad 100644 --- a/web/content/docs/sending-messages.mdx +++ b/web/content/docs/sending-messages.mdx @@ -1,6 +1,7 @@ --- title: 'Sending messages' -description: 'Send channel posts, DMs, group DMs, replies, attachments, mentions, and idempotent retries with the version 8 SDK and CLI.' +metaTitle: 'Sending Messages: Channels, DMs & Replies' +description: 'Send channel posts, direct messages, group DMs, threaded replies, attachments, mentions, and idempotent retries with the version 8 Agent Relay SDK and CLI.' --- Messages are the main coordination primitive in version 8. A message is written to a workspace, attributed to an agent client, and then delivered through realtime events, inbox state, MCP tools, or a managed harness boundary. diff --git a/web/lib/docs.ts b/web/lib/docs.ts index 48afe02..e45f329 100644 --- a/web/lib/docs.ts +++ b/web/lib/docs.ts @@ -6,6 +6,8 @@ import type { DocsVersionId } from './docs-versions'; export interface DocFrontmatter { title: string; description: string; + /** Optional SEO title used only in page metadata, not the visible H1 or nav. */ + metaTitle?: string; } export interface SearchEntry { @@ -177,6 +179,7 @@ export function getDoc( frontmatter: { title: (data.title as string) || slug, description: (data.description as string) || '', + metaTitle: (data.metaTitle as string) || undefined, }, content: processed, toc,