AgentReady Protocol
The open standard for agent-discoverable websites. Help browser automation agents discover, understand, and navigate your site with confidence.
Overview
Understanding why agent discoverability matters and how the protocol works.
What is the AgentReady Protocol?
The AgentReady Protocol is a set of conventions for exposing structured metadata about your website to AI agents. It combines well-known file locations, JSON-LD structured data, meta tags, and DOM attributes to create a comprehensive discovery layer.
Think of it as structured data for agent onboarding—just like Schema.org helps search crawlers understand your content, AgentReady helps AI agents understand how to navigate and interact with your site.
Why Agent Discoverability?
AI agents are increasingly being used to evaluate products, navigate documentation, and complete onboarding flows on behalf of users. Without explicit guidance, agents must guess—leading to:
- - Missed conversion paths
- - Incorrect information from outdated blog posts
- - Abandoned onboarding flows
- - Security concerns from improvised actions
Discovery Flow
/.well-known/ai-agent.json
agent-manifest.json
Agents first check for the discovery file, then fetch the full manifest with onboarding steps, canonical docs, and guardrails. DOM attributes provide additional context for interactive elements.
Discovery Specification
File locations, schemas, and conventions for agent discovery.
/.well-known/ai-agent.json
The primary discovery endpoint. Agents check this URL first to determine if a site supports the AgentReady protocol.
{
"schema_version": "1.0",
"name": "Your Product Name",
"description": "Brief description of your product for agents",
"url": "https://yoursite.com",
"logo_url": "https://yoursite.com/logo.png",
"contact_email": "support@yoursite.com",
"manifest_url": "https://yoursite.com/.well-known/agent-manifest.json",
"capabilities": {
"auth_methods": ["api_key", "oauth2"],
"has_api": true,
"has_docs": true,
"has_widget": true
},
"verification": {
"dns_txt": "agentready=abc123",
"meta_tag": "agentready-verification"
}
}
Protocol version for compatibility. Currently "1.0".
URL to the full agent manifest with onboarding steps.
Declares what features the site supports for agents.
Optional verification methods to prove site ownership.
/.well-known/agent-manifest.json
The full manifest containing onboarding steps, canonical documentation, and agent guardrails.
{
"schema_version": "1.0",
"name": "Your Product Name",
"description": "Help agents understand what your product does",
"onboarding": {
"start_url": "https://yoursite.com/signup",
"steps": [
{
"id": "signup",
"title": "Create Account",
"url": "https://yoursite.com/signup",
"description": "Create a free account to get started"
},
{
"id": "api_key",
"title": "Get API Key",
"url": "https://yoursite.com/settings/api",
"description": "Generate an API key from the settings page"
},
{
"id": "quickstart",
"title": "Follow Quickstart",
"url": "https://yoursite.com/docs/quickstart",
"description": "Complete the quickstart guide"
}
]
},
"docs": {
"canonical": [
{
"title": "API Reference",
"url": "https://yoursite.com/docs/api",
"priority": "high"
},
{
"title": "Authentication",
"url": "https://yoursite.com/docs/auth",
"priority": "high"
},
{
"title": "Examples",
"url": "https://yoursite.com/docs/examples",
"priority": "medium"
}
],
"avoid": [
"https://yoursite.com/blog/*",
"https://community.yoursite.com/*"
]
},
"guardrails": {
"require_confirmation": [
"delete",
"payment",
"subscription_change"
],
"prohibited_actions": [
"share_api_key",
"modify_billing"
],
"rate_limits": {
"requests_per_minute": 60
}
},
"prompt": "You are onboarding to {{name}}.\n\nFollow ONLY the official path:\n{{#each onboarding.steps}}\n{{@index}}. {{url}}\n{{/each}}\n\nRules:\n- Ask before destructive actions.\n- Prefer official docs over blog posts."
}
JSON-LD Structured Data
Embed agent metadata directly in your HTML using JSON-LD for pages where the widget appears.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "Your Product Name",
"url": "https://yoursite.com",
"applicationCategory": "BusinessApplication",
"additionalProperty": {
"@type": "PropertyValue",
"name": "agentready:manifest",
"value": "https://yoursite.com/.well-known/agent-manifest.json"
}
}
</script>
Meta Tag Specification
Quick discovery via meta tags for agents that scan HTML before fetching external files.
<!-- Primary discovery --> <meta name="agentready:manifest" content="https://yoursite.com/.well-known/agent-manifest.json"> <!-- Quick info for agents --> <meta name="agentready:name" content="Your Product Name"> <meta name="agentready:version" content="1.0"> <meta name="agentready:start" content="https://yoursite.com/signup"> <!-- Verification --> <meta name="agentready-verification" content="abc123">
DOM Attribute Conventions
Data attributes provide contextual hints for interactive elements, helping agents understand what actions are available.
<!-- Modal triggers --> <button data-open-modal>Open Agent Modal</button> <button data-close-modal>Close</button> <!-- Action hints --> <button data-agent-action="signup">Sign Up</button> <button data-agent-action="get-api-key">Get API Key</button> <!-- Semantic hints --> <form data-agent-form="signup">...</form> <input data-agent-field="email" type="email"> <input data-agent-field="api-key" type="text" readonly> <!-- Navigation hints --> <nav data-agent-nav="primary">...</nav> <a data-agent-link="docs" href="/docs">Documentation</a> <!-- Content hints --> <main data-agent-content="primary">...</main> <aside data-agent-content="sidebar">...</aside> <!-- Dangerous action warnings --> <button data-agent-danger="true" data-agent-confirm="Are you sure?"> Delete Account </button>
Triggers the AgentReady widget modal.
Identifies the purpose of interactive elements.
Warns agents about destructive actions.
Widget Specification
Required elements, accessibility requirements, and JavaScript API for the AgentReady widget.
Required HTML Elements
The widget requires specific element IDs and structure to function properly.
<!-- Modal backdrop (required) --> <div id="backdrop" role="dialog" aria-modal="true"> ...modal content... </div> <!-- Prompt display (required) --> <pre id="modalPrompt">Your agent prompt here</pre> <!-- Download button (required) --> <button id="downloadManifestBtn">Download manifest</button> <!-- Toast notification (optional but recommended) --> <div id="toast" role="status" aria-live="polite">Done</div>
| Element ID | Purpose | Required |
|---|---|---|
#backdrop |
Modal container with backdrop | Yes |
#modalPrompt |
Contains the copyable agent prompt | Yes |
#downloadManifestBtn |
Triggers manifest download | Yes |
#toast |
Feedback notifications | Recommended |
#mobileMenuBtn |
Mobile menu toggle | Optional |
#mobileMenuPanel |
Mobile menu content | Optional |
JavaScript API Contract
The widget exposes a global window.AgentReady object for programmatic control.
// Open the widget modal
window.AgentReady.openModal();
// Close the widget modal
window.AgentReady.closeModal();
// Copy prompt to clipboard
window.AgentReady.copyPrompt();
// Download the manifest file
window.AgentReady.downloadManifest();
// Show toast notification
window.AgentReady.showToast("Message copied!");
// Get manifest data
const manifest = await window.AgentReady.getManifest();
// Check if widget is open
const isOpen = window.AgentReady.isModalOpen();
// Configure widget
window.AgentReady.configure({
manifestUrl: "/.well-known/agent-manifest.json",
theme: "light",
position: "bottom-right"
});
ARIA Accessibility Requirements
The widget must meet WCAG 2.1 AA accessibility standards.
role="dialog"on modal containeraria-modal="true"to trap focusaria-labeldescribing modal purpose- Focus trap within modal when open
- Escape key closes modal
aria-labelon icon buttonsrole="status"on toast notificationsaria-live="polite"for dynamic content- Visible focus indicators on all interactive elements
- Keyboard navigation support
Generated Artifacts
AgentReady can generate manifests in multiple formats for different agent ecosystems.
{
"schema_version": "v1",
"name_for_human": "Your Product",
"name_for_model": "your_product",
"description_for_human": "Description for users",
"description_for_model": "Description for the AI model",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "https://yoursite.com/openapi.yaml"
},
"logo_url": "https://yoursite.com/logo.png",
"contact_email": "support@yoursite.com",
"legal_info_url": "https://yoursite.com/legal"
}
{
"name": "your-product",
"version": "1.0.0",
"description": "Your product description",
"tools": [
{
"name": "get_started",
"description": "Navigate to signup page",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "get_api_key",
"description": "Navigate to API key settings",
"inputSchema": {
"type": "object",
"properties": {}
}
}
],
"resources": [
{
"uri": "docs://quickstart",
"name": "Quickstart Guide",
"mimeType": "text/markdown"
}
]
}
--- name: your-product-onboarding description: Onboard to Your Product allowed-tools: [Bash, Read, WebFetch] --- # Your Product Onboarding ## When to Use Use this skill when the user wants to set up or integrate with Your Product. ## Steps 1. Navigate to https://yoursite.com/signup 2. Create account with user's email 3. Go to https://yoursite.com/settings/api 4. Generate and save API key 5. Follow https://yoursite.com/docs/quickstart ## Guardrails - Always confirm before creating accounts - Never share API keys in logs - Prefer official docs over blog posts
{
"agents": [
{
"name": "Your Product Assistant",
"description": "Helps users onboard to Your Product",
"instructions": "Follow the official onboarding path...",
"capabilities": ["navigate", "form_fill", "read"],
"endpoints": {
"signup": "https://yoursite.com/signup",
"api_key": "https://yoursite.com/settings/api",
"docs": "https://yoursite.com/docs"
},
"auth_required": false
}
]
}
openapi: 3.0.0
info:
title: Your Product API
version: 1.0.0
description: API for Your Product
servers:
- url: https://api.yoursite.com/v1
paths:
/users:
post:
summary: Create user account
operationId: createUser
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
responses:
'201':
description: User created
/api-keys:
post:
summary: Generate API key
operationId: createApiKey
security:
- bearerAuth: []
responses:
'201':
description: API key generated
Implementation Guide
Step-by-step instructions for adding AgentReady to your site.
Create the discovery file
Add /.well-known/ai-agent.json to your site's public directory.
# Create the .well-known directory
mkdir -p public/.well-known
# Create the discovery file
cat > public/.well-known/ai-agent.json << 'EOF'
{
"schema_version": "1.0",
"name": "Your Product",
"manifest_url": "https://yoursite.com/.well-known/agent-manifest.json"
}
EOF
Create the agent manifest
Define your onboarding steps, canonical docs, and guardrails.
# Create the manifest file
cat > public/.well-known/agent-manifest.json << 'EOF'
{
"schema_version": "1.0",
"name": "Your Product",
"onboarding": {
"start_url": "https://yoursite.com/signup",
"steps": [
{"id": "signup", "title": "Sign Up", "url": "/signup"},
{"id": "api", "title": "Get API Key", "url": "/settings/api"},
{"id": "docs", "title": "Read Docs", "url": "/docs/quickstart"}
]
}
}
EOF
Add meta tags to your HTML
Include discovery meta tags in your page's <head>.
<head>
<!-- Existing meta tags... -->
<!-- AgentReady discovery -->
<meta name="agentready:manifest"
content="https://yoursite.com/.well-known/agent-manifest.json">
<meta name="agentready:name" content="Your Product">
<meta name="agentready:version" content="1.0">
</head>
Add the widget snippet
Include the AgentReady widget script before your closing </body> tag.
<!-- AgentReady Widget --> <script src="https://cdn.agentready.me/widget.js" data-manifest="/.well-known/agent-manifest.json" data-position="bottom-right" async ></script>
Test your implementation
Verify that agents can discover your manifest and the widget functions correctly.
# Test discovery endpoint curl -s https://yoursite.com/.well-known/ai-agent.json | jq # Test manifest endpoint curl -s https://yoursite.com/.well-known/agent-manifest.json | jq # Validate with AgentReady scanner npx agentready-cli scan https://yoursite.com
Version History
Protocol versions and changes over time.
The initial release of the AgentReady Protocol includes:
-
Discovery specification with
ai-agent.jsonandagent-manifest.json - JSON-LD structured data format
- Meta tag specification for quick discovery
- DOM attribute conventions for interactive elements
- Widget specification with JavaScript API
- Export formats: OpenAI Plugin, MCP, Claude Code Skill, agents.json, OpenAPI
The AgentReady Protocol is an open standard. We welcome feedback and contributions from the community. View the specification on GitHub to propose changes or report issues.
Ready to make your site Agent Ready?
Run a free scan to see how agents currently experience your site.