# Agent support matrix.

Which AI agents send `Accept: text/markdown` (or otherwise advertise a Markdown preference) when their built-in browse or fetch tools hit a URL.

| Agent | Vendor | Status | Mechanism | Verified |
| --- | --- | --- | --- | --- |
| Claude Code | Anthropic | Supports | `Accept: text/markdown, text/html, */*` · [RFC 7763](https://www.rfc-editor.org/rfc/rfc7763) · [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110) | 2025-11-13 |
| Cursor | Anysphere | Supports | `Accept: text/markdown, text/plain;q=0.9, */*;q=0.8` · [RFC 7763](https://www.rfc-editor.org/rfc/rfc7763) · [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110) | 2026-04-18 |
| Codex CLI | OpenAI | Partial | `Follows <link rel="alternate" type="text/markdown" href="https://example.com/page.md">` · [RFC 7763](https://www.rfc-editor.org/rfc/rfc7763) · [RFC 8288](https://www.rfc-editor.org/rfc/rfc8288) | 2026-04-18 |
| Claude.ai (web app) | Anthropic | No | `Fetches only HTML` | 2026-04-18 |
| ChatGPT (browse) | OpenAI | No | `Fetches only HTML` | 2026-04-18 |
| Gemini CLI | Google | No | `Fetches only HTML` | 2026-04-18 |
| Gemini (web app) | Google | No | `Fetches only HTML` | 2026-04-18 |
| Perplexity | Perplexity | No | `Fetches only HTML` | 2026-04-18 |
| Grok | xAI | No | `Fetches only HTML` | 2026-04-18 |
| Copilot CLI | GitHub / Microsoft | No | `Fetches only HTML` | 2026-04-18 |
| Copilot Chat (VS Code) | GitHub / Microsoft | No | `Fetches only HTML` | 2026-04-18 |

## Notes

**Codex CLI** — Fetches the canonical URL as HTML first (no text/markdown Accept preference), then parses the response for <link rel="alternate" type="text/markdown" href="…"> in the document <head> and makes a second request for the .md sibling.

_Last updated 2026-04-18._

## Verify an agent yourself

We test the matrix ourselves, but agent behavior shifts across versions, plans, and newly-added tools. You can corroborate any row — or catch a regression — by triggering an agent against your own server and reading the request from your access logs.

### 1. Capture the Accept header in your logs

Default log formats usually drop it. Add it once:

```nginx
# Nginx
log_format with_accept '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent" '
                       'accept="$http_accept"';
access_log /var/log/nginx/access.log with_accept;
```

```apache
# Apache
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" accept=\"%{Accept}i\"" with_accept
```

```caddy
# Caddy
example.com {
  log {
    output file /var/log/caddy/access.log
    format json
  }
}
# JSON access logs include request.headers.Accept by default.
```

### 2. Trigger a known agent against a specific URL

Pick a URL on your site — ideally a unique or freshly-published one so the request isn't masked by background traffic. Then ask the agent to fetch or summarize it:

- **ChatGPT** — *"Summarize https://yoursite.com/article-xyz"* (with the browse tool enabled)
- **Claude** — *"What does https://yoursite.com/article-xyz say?"* (requires web_fetch / web_search)
- **Perplexity** — paste the URL directly into a query
- …and so on for whichever agent you're testing.

### 3. Report what you saw

Grep for the URL in your access log and send the line(s) to [feedback](https://acceptmarkdown.com/about#feedback), along with the agent you used and the prompt you sent. The `accept=` field tells us whether `text/markdown` was advertised.