Part 3 of this series documented two agent-readiness scan results against DoveRunner Docs site: 43/100 on isitagentready.com and 0/100 on Fern Agent Score. Both pointed to the same root problem: the infrastructure for agents to consume this documentation optimally was not in place.

This post covers the fixes applied to the infrastructure layer.

The Starting Point: isitagentready.com

isitagentready.com scored DoveRunner Docs at 43/100 — Level 1: Basic Web Presence on a content-site profile. Of seven applicable checks, four were failing. 

Category Check Baseline
Discoverability robots.txt ✅ Pass
Discoverability Sitemap ✅ Pass
Discoverability Link headers (RFC 8288)❌ Fail
Discoverability DNS-AID ❌ Fail
Content Markdown negotiation❌ Fail
Bot Access Control AI bot rules in robots.txt✅ Conditional pass
Bot Access Control Content Signals ❌ Fail

Three fixes addressed three of the four failures. The fourth, DNS-AID, was a deliberate skip. 

Fix 1: Link Response Headers 

Effort: Low 

Link headers (RFC 8288) let a server declare relationships between resources in the HTTP response. For agent readiness, the relevant use is pointing to the Markdown version of a page: an agent that reads the header knows where to find clean content without parsing HTML first. 

DoveRunner Docs was not emitting any Link headers. This problem is solved by a simple configuration on Vercel a cloud platform hosting the website. 

Score: 43 → 57 

Fix 2: Markdown Content Negotiation 

Effort: Medium 

This was the most involved fix, because it required changing how the site is built, not just how it is served. 

The requirement: when an agent sends Accept: text/markdown in its request, the server returns the page as plain Markdown instead of HTML. HTML contains navigation elements, sidebars, and layout markup that add noise when an agent is trying to read documentation. Markdown is what agents work with cleanly. 

DoveRunner Docs is a statically built site. The source content is written in Markdown, but every HTTP response is HTML. The fix required pre-generating a Markdown version of every page at build time and configuring the CDN to serve those files transparently when the Accept 

header matches. No changes to the documentation content itself. No changes to the source files. Only the delivery layer. 

The result: agents sending Accept: text/markdown now receive clean Markdown. Browsers requesting HTML still get HTML. The same URL handles both. 

Score: 57 → 71 

The DNS-AID Decision 

Check: Discoverability / DNS-AID Decision: Skipped, not applicable 

DNS-AID is a specification for an agent to register itself in an agents directory. It is designed for agents that needs to be discovered by other agents or orchestrators. 

DoveRunner Docs is a documentation site being made ready for agents to consume. It is not an agent registering itself. The check does not apply. 

This distinction is worth flagging for any team running the same scan: not every check in an agent-readiness tool assumes the target is a content site. Some assume the target is itself an agent. Reading the check description before treating a failure as a fix priority saves effort. 

Fix 3: Content Signals 

Effort: Low, one line in robots.txt 

Content Signals is a standard that lets a site declare its AI usage preferences directly in robots.txt . Three preferences matter here: 

  • ai-train : can this content be used to train AI models? 
  • search : can search engines index it? 
  • ai-input : can AI agents use it as context? 

For DoveRunner Docs, each choice is intentional. 

  • ai-train=no : DoveRunner’s documentation contains proprietary integration patterns and platform-specific implementation details. Using it to train AI models could benefit competitors. The documentation should help developers who work with DoveRunner’s products, not serve as a training corpus for anyone else. 
  • search=yes : Public developer documentation should be indexed. No reason to restrict this. 
  • ai-input=yes : This is the purpose of the entire agent-readiness project. The documentation is being optimized so AI coding agents can use it as context when helping developers integrate. Blocking this would contradict the goal.

The practical value of Content Signals is this distinction: ai-train=no, ai-input=yes . A blanket Disallow: GPTBot block makes documentation invisible to the agents it was meant to help. Content Signals let a site say something more precise: use our docs to assist developers; do not use them to train your model. 

Score: 71 → 86 

The Result 

Final score: 86/100 — Level 5: Agent-Native 

Three fixes. No documentation content was touched. The improvement from 43 to 86 came entirely from infrastructure: how the site is served, what headers it emits, and what it declares about its own AI usage preferences. 

That is the point of separating infrastructure from content in the agent readiness framework. The two problems require different remediation approaches and move on different timescales. Infrastructure gaps close in days. Content gaps require tracing actual integration journeys through the documentation which will covered in the next part. 

Mapped to the three-stage maturity model from Part 2: 

  • Stage 1 (Discoverability):

    Substantially complete. robots.txt, sitemap, and Link headers all pass. One meaningful gap remains: llms.txt , the machine-readable site index for AI agents. That is a Fern Agent Score check, not an isitagentready.com check — addressed in the next section. 
  • Stage 2 (Governance):

    Complete. Markdown delivery, Content Signals, and AI bot rules all pass.
  • Stage 3 (Controlled Interaction):

    Not applicable. API Catalog, MCP Server Card, and OAuth Discovery are not necessary to document-based content websites. 

The Second Scanner: Fern Agent Score 

The second tool, Fern Agent Score, measures a different layer. It is about whether the site publishes a single index file that lists every page for AI agents, and whether it serves clean text versions of those pages. 

That tool scored DoveRunner Docs at 0 out of 100 at the start. The number looked alarming, but the cause was simple: the site had no index file for agents. Without one, the scanner could only find a single page to look at. So almost every category came back blank, and the score collapsed to zero. The machinery for serving clean content to agents was already built (that was Fix 2 above). The site had simply never published the index that tells agents it exists. 

One file, one decision 

The popular way to add this index file to a static documents site like ours is a ready-made plugin. We tried it and removed it. It bundled five features, we needed one, and it brought version conflicts with tools we already used. Instead, we wrote a small piece of code, modeled on patterns already in our codebase, that regenerates the index automatically every time the site builds. No extra dependencies, and the index can never fall out of date with the pages. 

A plugin that bundles five features is a bad trade when you need one and already own the other four.

From 0 to 99 

Publishing the index jumped the score from 0 to 91 immediately. The last few points came from two bugs that only showed up once the site was live. Both taught the same lesson: test the way the agent tests. 

  • The first attempt put the agent-facing pointer in a part of the page the scanner doesn’t read. Moving it to where the scanner actually looks fixed the problem. 
  • The second was subtler. Our manual tests all passed because we tested page addresses with a trailing slash. The scanner tested them without one. And on those, the server quietly returned the wrong format. Reproducing the scanner’s exact request made the bug obvious in seconds. 

The final Fern Agent Score: 99 out of 100. The single remaining point is a content problem where a couple of oversized pages that should be split. So we stopped there on purpose. The whole effort cost one new piece of code, one small template change, a handful of config lines, and zero new dependencies. 

When a check disagrees with your own testing, reproduce exactly what the checker does before assuming it is wrong. 

What’s Next 

Both scanners are now addressed. 86 on the first, 99 on the second. That covers the infrastructure layer: whether agents can find and consume the documentation. It says nothing about the harder question, whether agents can generate correct integration code from it.

In the final post (Part 5), I will show you how AI agents help identify and fix issues in the content layer of documents. 

This series documents a systematic effort to define and close the gaps between DoveRunner’s developer documentation and what AI coding agents need.