=== StudioMeyer Agent Readiness ===
Contributors: studiomeyerio
Tags: agents, markdown, discovery, api, crawlers
Requires at least: 6.6
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 1.0.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Check what AI agents really get from your site, then publish the machine-readable files it is missing. Local only, no account, no cloud.

== Description ==

**Auf Deutsch:** StudioMeyer Agent Readiness prüft, was KI-Agenten von Ihrer Website tatsächlich bekommen — und veröffentlicht die maschinenlesbaren Dateien, die noch fehlen. Der Bericht fragt Ihre eigene Seite über HTTP ab, so wie ein Agent es täte, statt nur die eigenen Einstellungen abzulesen. Damit sehen Sie auch, wenn ein Cache oder eine Server-Einstellung etwas anderes ausliefert, als das Plugin glaubt. Vier Dinge kann das Plugin selbst veröffentlichen: Ihre Inhalte als Markdown (auf `Accept: text/markdown` oder mit angehängtem `.md`), ein Agent-Skills-Dokument, einen API-Katalog nach RFC 9727 und HTTP-Link-Header nach RFC 8288. Alles läuft lokal auf Ihrem Server — kein Konto, keine API-Schlüssel, kein Fremddienst. Standardmäßig ist alles ausgeschaltet; Sie entscheiden, was veröffentlicht wird. Nur bereits öffentliche Inhalte werden ausgeliefert — Entwürfe und private Seiten nie, und eine passwortgeschützte Seite verlangt ihr Passwort genau wie im Browser.

**AI agents read websites differently than people do. This plugin tells you how yours looks to them, and fixes the part a plugin can fix.**

This is an independent plugin by StudioMeyer. It is not affiliated with, endorsed by or connected to any company that publishes an agent-readiness checker or scoring service.

= The report =

One button runs the checks. Each one asks your own site over HTTP — the same loopback technique WordPress Site Health uses — because what matters is what a client actually receives. A check that only read the plugin's own settings would show green on a site where a cache, a static file or a server rule serves something else entirely.

For every signal you get one of three honest answers:

* **In place** — a client asking for it receives it
* **Missing** — it is not there, and you are told who can provide it
* **Not measurable** — it cannot be determined from your server, and it is left out of the count rather than quietly scored as a failure

Signals covered include robots.txt and its rules for AI crawlers, XML sitemap, HTTP Link headers, Markdown availability, llms.txt, JSON-LD structured data, Content Signals, Agent Skills, the API catalog, MCP and OAuth discovery, and the WooCommerce commerce manifest. Where something belongs to your server, your CDN, your DNS or the browser, the plugin says so plainly instead of pretending a plugin could fix it.

= What this plugin publishes =

Four surfaces, each off until you switch it on:

**1. Markdown**

Every published page becomes available as Markdown. Request its normal URL with `Accept: text/markdown`, or append `.md` to the permalink. Agents get your text without navigation, styling or scripts, and without having to guess which part of the page is the content. You choose which post types take part.

**2. Agent Skills**

A short instruction sheet at `/.well-known/agent-skills/index.json` telling an agent how to work with this specific site: how to search it, which structured endpoints exist, where the Markdown lives, and the ground rules. You can write the one-line summary yourself or use the generated one.

**3. API catalog**

`/.well-known/api-catalog` in the standard format defined by RFC 9727, listing your REST API, sitemap, feed and skills index in one predictable place — so a client does not need to know WordPress conventions to find them.

**4. Link headers**

An RFC 8288 `Link` header pointing at your sitemap, feed, API catalog and, on a single post or page, its Markdown twin. Existing Link headers from WordPress or other plugins are preserved, never replaced.

= What it deliberately does not do =

Being useful here means not overlapping with what you already run:

* **No llms.txt.** Several SEO plugins now generate one. Two plugins writing the same file helps nobody — this one reports whether yours is there.
* **No robots.txt writing.** Your SEO or crawler plugin owns that file. This one reads it and tells you what it says.
* **No MCP server card.** Its location is still being settled in the Model Context Protocol specification, and a card with no MCP server behind it would be a green tick over nothing.

= Private by design =

* Everything runs locally in PHP on your server
* No cloud service, no account, no API keys, no third-party service
* The checks talk to your own site, and follow a redirect only while it stays there
* No personal data is collected or transmitted
* Only published, publicly viewable content is ever served — drafts, private and scheduled content stay invisible, and password-protected posts behave exactly as they do in HTML: nothing without the password, the content once it has been entered
* All plugin data is removed on uninstall

= Who is this for? =

* Site owners who want to know how their site looks to AI agents, in plain language
* Publishers who would rather hand agents clean Markdown than have them scrape rendered HTML
* Agencies preparing client sites — one local, no-SaaS tool across every site

= More free plugins by StudioMeyer =

* [AI-Ready WP](https://wordpress.org/plugins/ai-ready-wp/) — agents.json, llms.txt, JSON-LD and SEO in one
* [SmartBot — AI Chatbot](https://wordpress.org/plugins/smartbot-ai-chatbot/) — an AI chat widget with a permanently free plan
* [Agent Discovery for WooCommerce](https://wordpress.org/plugins/studiomeyer-agent-discovery-for-woocommerce/) — make your store discoverable by AI shopping agents
* [Barrierefrei-Check](https://wordpress.org/plugins/studiomeyer-barrierefrei-check/) — accessibility scanner and statement generator
* [Transparency Toolkit for the EU AI Act](https://wordpress.org/plugins/studiomeyer-ai-transparency-toolkit/) — Article 50 disclosure and AI content labels

== External services ==

This plugin contacts no third party service of its own. There is no API, no
analytics, no telemetry, no update server, no font or asset CDN. Nothing about
your site, its content or its visitors is sent to StudioMeyer, and the plugin
has no other address to send anything to. It needs no account and no API key.

The readiness check does make HTTP requests, and it addresses every one of them
to your own site at its own home URL, the way a visitor's browser would. That is
what makes the result worth having: the plugin reads what your server actually
returns rather than what its own settings claim.

Redirects are followed only while they stay on your own site, up to three of
them. Your own site means the same host, the `www.` variant of it, or a
subdomain such as `de.example.com`, because a home page sending visitors to one
of those is doing something ordinary. A redirect leading anywhere else is
reported as a finding instead of followed.

Being honest about the limit of that: the check asks WordPress not to follow
redirects and inspects each one itself, but any plugin on your site may change
that request, and WordPress then follows inside its own HTTP library, where
nothing is visible to a plugin. So there is a second check that does not depend
on the first. The address an answer actually arrived from is read back out of
the response, and an answer from anywhere else is discarded instead of being
used as a reading of your site.

If the loopback fails outright, which happens behind some reverse proxies and
inside containers, the plugin retries against 127.0.0.1 carrying your own host
name in the Host header, so your web server still answers as the right site.
That retry is this plugin's own arrangement.

One external URL does appear in the plugin source and in the documents it
publishes: `https://schemas.agentskills.io/discovery/0.2.0/schema.json`. It is a
schema identifier, written into the published `agent-skills` index as a `$schema`
value so that a consuming agent knows which format the document follows. The
plugin never requests it, and nothing is sent to that host. It is a name, in the
same way a namespace URI in an XML document is a name rather than an address the
parser fetches.

== Installation ==

= Quick start =

1. Install and activate. You land on the report.
2. Press **Check this site**. The plugin asks your own site what it serves and lists the result.
3. Open **What to publish** and switch on what you want. Save.
4. Press **Check again** to confirm the new files are really being delivered.

Nothing is published until you switch it on.

== Frequently Asked Questions ==

= Does this send my site to an external service? =

No. Every check is a request from your server to your own site, and a redirect is followed only while it stays there. Nothing is sent to StudioMeyer, and the plugin has no other address to send anything to. If you want an independent second opinion, public checkers exist and you can visit one yourself — the plugin does not contact any of them for you.

= Is this affiliated with a particular agent-readiness score? =

No. It is an independent plugin by StudioMeyer. It measures publicly documented signals — robots.txt rules, sitemaps, RFC 8288 Link headers, RFC 9727 API catalogs, Markdown content negotiation and others — and does not reproduce any specific vendor's scoring formula.

= Will the Markdown version hurt my SEO? =

Markdown responses are sent with `X-Robots-Tag: noindex` and a `Link: rel="canonical"` header pointing back at the normal page, so search engines keep indexing the HTML version.

= Why does my count not include every signal? =

Some things cannot be seen from your server: DNS records, bot signature verification at your CDN, and browser JavaScript APIs. Counting those as failures would blame you for something no plugin can change, so they are reported separately and left out of the ratio.

= I switched something on but the check still says missing. =

A caching layer or a real static file at the same path can intercept the response before WordPress sees it. Clear your cache and check again. If a `.well-known` file exists on disk, your web server will serve that instead of WordPress.

= Does it work with my SEO plugin? =

Yes. It writes no robots.txt, no sitemap and no llms.txt, so there is nothing for the two to fight over. Its Link header is appended to existing ones rather than replacing them.

= Which content is exposed as Markdown? =

Only published, publicly viewable posts of the types you tick. Drafts, private posts and scheduled posts are never served. A password-protected post behaves exactly as it does in HTML: nothing is served without the password, and the content is served once the password has been entered.

== Screenshots ==

1. The report — every signal with an honest verdict, grouped by category
2. What to publish — four switches, all off until you choose
3. A page served as Markdown with front matter
4. The Agent Skills document generated for the site

== Changelog ==

= 1.0.1 =
* The guard that keeps the machine-readable surfaces on their own URLs now reads the path WordPress actually routed on, instead of parsing the request itself.
* A loopback check follows a redirect only while it stays on your own site, subdomains included. One leading anywhere else is reported as a finding instead of followed, and an answer that turns out to have arrived from another address is discarded rather than reported as a reading of your site.
* Name that case in the report instead of describing a redirect loop that is not there.
* Ask the sitemap server for the index URL instead of assembling a fixed filename, so a site without pretty permalinks gets a link that works.
* Send `X-Content-Type-Options: nosniff` with the skills and API catalog documents.
* Give REQUEST_URI and PATH_INFO back exactly as they were after a `.md` request, so anything reading them later sees the real request.
* Say plainly in the readme what the readiness check contacts.

= 1.0.0 =
* First release.
* Report card measured over HTTP against your own site, with separate handling for signals that cannot be measured from a server.
* Markdown for published content via `Accept: text/markdown` and `.md` permalinks, with `Vary: Accept`, `noindex` and a canonical link header.
* Agent Skills discovery document and index.
* API catalog in RFC 9727 linkset format.
* RFC 8288 Link headers, appended to existing ones.

== Upgrade Notice ==

= 1.0.1 =
Tighter request handling, redirects kept on your own host, and a sitemap link that works without pretty permalinks.

= 1.0.0 =
First release.
