> levels

> how we rate AI-agent friendliness

┌────────────────────────────────────────────────────────────┐
│  SCORING: 6 binary criteria per level. Need 4/6 to pass.  │
│  Levels are CUMULATIVE: must pass all previous levels.     │
│  L0 = doesn't meet L1 requirements.                       │
└────────────────────────────────────────────────────────────┘
    
╔═══════════════════════════════════════════╗
║  LEVEL 1 - Basic Accessibility          ║
╚═══════════════════════════════════════════╝
l1_semantic_html

Uses semantic HTML elements (header, nav, main, article, section, footer) instead of just divs

l1_meta_tags

Has proper meta tags (title, description, og:tags, twitter:card)

l1_schema_org

Includes Schema.org JSON-LD structured data

l1_no_captcha

Does not block automated access with CAPTCHAs on public content

l1_ssr_content

Content is server-side rendered (visible in HTML source, not just JS-rendered)

l1_clean_urls

Uses clean, readable URLs (no excessive query params or hash fragments)

╔═══════════════════════════════════════════╗
║  LEVEL 2 - Discoverability                ║
╚═══════════════════════════════════════════╝
l2_robots_txt

Has a robots.txt that allows legitimate bot access

l2_sitemap

Provides an XML sitemap

l2_llms_txt

Has a /llms.txt file describing the site for LLMs

l2_openapi_spec

Publishes an OpenAPI/Swagger specification for its API

l2_documentation

Has comprehensive, machine-readable documentation

l2_text_content

Primary content is text-based (not locked in images/videos/PDFs)

╔═══════════════════════════════════════════╗
║  LEVEL 3 - Structured Interaction        ║
╚═══════════════════════════════════════════╝
l3_structured_api

Provides a structured REST or GraphQL API

l3_json_responses

API returns JSON responses with consistent schema

l3_search_filter_api

API supports search and filtering parameters

l3_a2a_agent_card

Has an A2A agent card at /.well-known/agent.json

l3_rate_limits_documented

Rate limits are documented and return proper 429 responses with Retry-After

l3_structured_errors

API returns structured error responses with error codes and messages

╔═══════════════════════════════════════════╗
║  LEVEL 4 - Agent Integration              ║
╚═══════════════════════════════════════════╝
l4_mcp_server

Provides an MCP (Model Context Protocol) server

l4_webmcp

Supports WebMCP for browser-based agent interaction

l4_write_api

API supports write operations (POST/PUT/PATCH/DELETE), not just reads

l4_agent_auth

Supports agent-friendly authentication (API keys, OAuth client credentials)

l4_webhooks

Supports webhooks for event notifications

l4_idempotency

Write operations support idempotency keys

╔═══════════════════════════════════════════╗
║  LEVEL 5 - Autonomous Operation           ║
╚═══════════════════════════════════════════╝
l5_event_streaming

Supports event streaming (SSE, WebSockets) for real-time updates

l5_agent_negotiation

Supports agent-to-agent capability negotiation

l5_subscription_api

Has a subscription/management API for agents

l5_workflow_orchestration

Supports multi-step workflow orchestration

l5_proactive_notifications

Can proactively notify agents of relevant changes

l5_cross_service_handoff

Supports cross-service handoff between agents