# Why Onto · The compatibility layer for the agent web
> The web already shipped Markdown for agents. Nobody manages it, and nobody has built the layer that lets an agent act. Three layers, one engine.

**Source:** /why-onto
**Extracted:** 2026-09-24T18:14:19.930Z

---
Why Onto

## The web already shipped the easy half.

7 of the 10 homepages we benchmark already serve AI agents a Markdown version. None of them serve it through anything that keeps it current or shows who reads it — and nobody has built the layer that lets an agent act. Read and Serve are live. Act is next.

3

layers, one engine

7 / 10

homepages serving Markdown

0

managing it

The full stack

### Three layers. One engine.

Read is the way in. Serve is on sites. Act is where it's going. Not three products — the same cleaner, scorer and agent list, used at three depths.

1.  Layer 01**Read**_Live_
    
    ### Developers call an API.
    
    Any URL comes back as clean Markdown, with an AIO score that flags hallucination risk before a model sees the page. Over HTTP, or as six tools in Claude, ChatGPT, Cursor and any MCP client.
    
    [More on Read](/read-api)
    
2.  Layer 02**Serve**_Live_
    
    ### Site owners add a middleware and a build step.
    
    Known AI agents get a Markdown copy of each page, built at deploy and served from the site itself; people get the page unchanged. With a key, every agent visit shows up in the dashboard — which agent, which page — and Pro adds context per route.
    
    [More on Serve](/serve-sdk)
    
3.  Layer 03**Act**_Next · not built_
    
    ### Agents act through the same engine.
    
    The web was built for people clicking pixels. Act is meant to let an agent use a site by intent — the same understanding of a page that Read and Serve already build, applied to doing things on it. It isn't built yet; the roadmap says so.
    
    [See the roadmap](/roadmap)
    
4.  One engine · cleaner · scorer · agent list_under all three_

What we measured

### Everyone solved the first problem. Nobody solved the second.

Not a forecast: ten real homepages, narrowed down to the gap that's left.

1.  **10**benchmarked
    
    *   stripe.com
    *   vercel.com
    *   resend.com
    *   planetscale.com
    *   notion.com
    *   linear.app
    *   cal.com
    *   raycast.com
    *   figma.com
    *   loom.com
2.  **8**let AI agents in
    
    *   stripe.com
    *   vercel.com
    *   resend.com
    *   planetscale.com
    *   notion.com
    *   linear.app
    *   cal.com
    *   raycast.com
    *   figma.com
    *   loom.com
    
    −2: robots.txt shuts agents out
    
3.  **7**serve a Markdown version
    
    *   stripe.com
    *   vercel.com
    *   resend.com
    *   planetscale.com
    *   notion.com
    *   linear.app
    *   cal.com
    *   raycast.com
    *   figma.com
    *   loom.com
    
    −1: no Markdown version
    
4.  **0**serve it through something that manages it
    
    *   stripe.com
    *   vercel.com
    *   resend.com
    *   planetscale.com
    *   notion.com
    *   linear.app
    *   cal.com
    *   raycast.com
    *   figma.com
    *   loom.com
    
    −7: their own file — nothing tracks or updates it
    

Ten homepages, scored by the free scanner on 24 Sep 2026 — the same data as /scoring.

Dogfood

### We score 80, and here's why.

Scored by the same scanner as everyone else — including the 20 points we lose to a fault we haven't fixed, which puts us below the sites we benchmark.

buildonto.dev_scanned 24 Sep 2026_

**80**/ 100 · Good

What costs us

**−20**No JSON-LD schema — the exact fault we penalise everyone else for.

What doesn't

**0**Markdown served by the Serve SDK: agents get 8.5 KB instead of the 97.2 KB page — so none of the Markdown or page-weight penalties apply.

Against the benchmark

buildonto.dev**80**

stripe.com, vercel.com, resend.com, planetscale.com**90**

Ten points below the sites we publish teardowns of. Add JSON-LD and we'd be the only one at 100.

The name

### Ontology: what a thing is, apart from how it looks.

Onto takes its name from ontology. It separates what your site says from how it's drawn — one substance, rendered faithfully more than once.

Your content**one substance**

*   **HTML**for people
*   **Markdown**for agents — today
*   **Actions**for agents that do things — next

Not a shadow web for bots: the same facts, represented more than once — so an agent and a person reading you can't disagree.

What's at stake

### Two audiences, two different bills.

Three costs land on whoever owns the site; one lands on whoever builds the agent reading it. Same root cause, different payer.

1.  #### Facts guessed in your name
    
    Without JSON-LD an agent can't check your prices, plans or claims, so it infers them. 4 of the 8 homepages we could score have none.
    
    _Site owner_
2.  #### A Markdown file nobody keeps in step
    
    Shipping /llms.txt once is easy. Keeping it matched to the site you actually run is the hard part, and nothing in a static file does it — so a stale one tells agents last quarter's pricing, and they trust it.
    
    _Site owner_
3.  #### Out-read by whoever is easier to parse
    
    When two sources answer the same question, the one an agent can read cleanly is the one it uses. 7 of the 10 homepages we benchmark already serve a Markdown version — it's quickly becoming the baseline.
    
    _Site owner_
4.  #### Paying 41× in tokens for markup
    
    stripe.com/pricing is 699 KB to a browser and 17 KB as Markdown — about 179,000 tokens against 4,352, at ~4 bytes a token, for the same content. Every agent reading the raw web pays that on every call.
    
    _Agent builder_

Start here

### Two ways in.

Whichever side of the gap you're on.

Agent builder

#### Stop paying 41× in tokens for markup.

One call returns the page as clean Markdown. 1 credit; failures refunded.

curl https://api.buildonto.dev/v1/read \\
  -H "Authorization: Bearer onto\_sk\_…" \\
  -d '{"url":"https://stripe.com/pricing"}'

← { "markdown": "# Pricing & Fees …",
    "stats": { "raw\_html\_size\_kb": 699.1,
               "markdown\_size\_kb": 17, … } }

[Read API](/read-api)

Site owner

#### Find out what an agent sees.

Every fault comes back with a name and a fix.

https://Scan

Free · no signup · honours robots.txt

Get started

### Start with Read.

Read and Serve are live, on the same engine. Act is next.

[Get started](https://app.buildonto.dev/signup) [Scan your site](/scanner)

Free tier · 1,000 credits / month · no card

---
## Structured Data (JSON-LD)
```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://buildonto.dev/#org",
      "name": "Onto",
      "url": "https://buildonto.dev",
      "logo": "https://buildonto.dev/icon.png",
      "sameAs": [
        "https://x.com/buildonto",
        "https://github.com/ravixalgorithm/ontosdk"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://buildonto.dev/#site",
      "url": "https://buildonto.dev",
      "name": "Onto",
      "publisher": {
        "@id": "https://buildonto.dev/#org"
      }
    },
    {
      "@type": "SoftwareApplication",
      "name": "Onto",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "Web",
      "url": "https://buildonto.dev",
      "description": "Onto serves AI agents clean Markdown from your own site, at the same URL, and shows you which agents came. Plus the AIO score, a Read API and an MCP server.",
      "publisher": {
        "@id": "https://buildonto.dev/#org"
      },
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier: 1,000 credits / month"
      }
    }
  ]
}
```
