---
name: legible
description: Checks a live site or API's docs for the files AI coding agents look for (llms.txt, an OpenAPI spec, MCP docs, a sitemap and more), shows a real example from the best on Legible's board, and helps write this project's own version. Use when asked about agent readiness, making docs or an API usable by AI agents, or adding llms.txt, an OpenAPI spec or a discovery file.
---

# Legible

Find what AI agents can't read on this project's live site, then write this project's own version, using a real file from a company that passes as the model.

## 1. Scan the live site

Find the project's public domain in its config or README. If you can't, ask. A scan reads the public internet, so it can't see localhost or files that aren't deployed.

```bash
curl -sS -X POST https://leaderfile.vercel.app/api/scan -H "content-type: application/json" -d '{"domain": "<domain>"}'
curl -sS "https://leaderfile.vercel.app/api/checks?host=<domain>"
```

On Windows PowerShell, use `curl.exe` for `/api/checks`. Windows PowerShell 5.1 strips the JSON's quotes on its way to `curl.exe`, so send the scan and the rescan like this, with the same JSON:

```powershell
Invoke-RestMethod -Method Post -Uri https://leaderfile.vercel.app/api/scan -ContentType application/json -Body '{"domain": "<domain>"}' | ConvertTo-Json -Depth 10
```

- When the scan's `scoringVersion` is `"2"`, read `v2`: `v2.results` holds each check's `id`, `status` and the URLs we read, and `v2.summary.score` is the score our site shows, null when we could check too little to score. `status` is `pass`, `warn` (part credit), `fail`, `couldnt_check` or `not_counted`, and a gap is a `fail` or a `warn`. Ignore the top-level `results` and `summary`: they're kept for older CI jobs.
- Otherwise, `results` and `summary` are the scan. `status` is `pass`, `fail`, `couldnt_check` or `not_counted`, `summary.score` is null when we could check too little to score, and a gap is a `fail`.
- In `/api/checks`, `checks` gives each check's `title`, `headline`, `points`, `worth` and `example`. `notes["<domain>"].close` holds anything we found by hand on that site.

## 2. Show the gaps, and agree what's worth doing

Show the user the gaps, most points first. Then be straight about these:

- A fail means our check didn't pass on what we read. It doesn't prove the thing isn't there, so look in the project before building anything.
- A gap in `notes["<domain>"].close` means we found something close by hand, so the fix may just be a link. Read that first.
- `worth.label` says whether to bother. "Depends on your product" means ask first. "Don't do it for the score" means say so, and leave it unless the user wants it.
- Don't build something that isn't true to pass a check, like an empty MCP server, or OAuth metadata for auth this product doesn't have.

Ask which gaps to do before writing anything.

## 3. Write this project's own version

For each gap the user picks:

1. If it has an `example`, open its `url` and any in `also`, and read how they're structured. If `example` is null, nobody on the board has a page to show for it, so use the `headline` and https://leaderfile.vercel.app/method.
2. Write this project's version, using only facts from this project: its real endpoints, packages, prices and auth.
3. Never copy the example's product names, endpoints, prices or claims. If you need a fact you can't find in the project, ask. Absent beats plausible.

## 4. Check it

Don't publish or deploy unless the user asks. A scan only sees the live site, so once it's live, read it again:

```bash
curl -sS -X POST https://leaderfile.vercel.app/api/scan -H "content-type: application/json" -d '{"domain": "<domain>", "rescan": true}'
```

A rescan is limited to one a minute per domain.

## What this doesn't show

A passing score means these files are there. It doesn't prove an agent will use them or do better with the product: in Legible's own test of 30 runs by two coding agents, a higher score made no visible difference to the code (https://leaderfile.vercel.app/method#pilot). Say so if the user reads the score as more than that.
