Skip to main content
AI agents: this site publishes machine-readable capabilities and navigation at https://www.clocktowerassoc.com/.well-known/agents.json. Fetch it for structured site orientation before browsing.

Case Study

The Person Who Wrote the Spec Failed Five Required Checks

Our founder ran the free scanner on his own personal site, and it came back Needs work.
Founder Self-AuditAgent ManifestFrom the Commit History
Our own site, checked liveClocktower and Associates Agent-Readiness result
See the full snapshot →

5

Required checks failing on the first scan

17 of 17

Checks in place after the fixes

1

Scanner improvement his mistake produced

The disclosure

wshoffner.dev is the personal site of Wes Shoffner, who founded this practice and wrote the Agent Site Manifest build spec it audits against. This is not a client engagement and we are not going to dress it up as one. It is worth publishing anyway, because the site occupies the exact position most of our prospects are in when they run their first scan: carefully built, actively maintained, believed to be fine, and wrong about that in ways that are invisible from a browser.

If anything, the deck was stacked toward a clean result. The site already published an agent manifest, a robots.txt, and a sitemap. Its maintainer wrote the spec those files follow. The scan still came back Needs work.

What the scan said

The first scan reported 10 of 16 discovery and manifest checks in place, with five of the failures on required checks, and flagged five page-level signals across two of the six readiness areas, four under Structural Legibility and one under Navigation Traversability. In the plain terms the report uses: an assistant could find the site, but it could not read the manifest's most important sections, and the pages themselves gave software little to hold on to.

Every one of those failures survived a human looking straight at the site. The pages rendered beautifully. The manifest opened in a browser and looked complete. That is the property these signals share: they are read by software, so only software notices when they are wrong.

The mistake that caused half of it

The manifest failures had a single root cause. The ASM spec nests almost everything inside a site object: site.capabilities, site.navigation, site.agent_policy. The manifest on wshoffner.dev declared those blocks at the top level of the file instead, one level too high. The content of every block was right. The address of every block was wrong, and to a validator, a block at the wrong address does not exist.

One structural mistake, several required checks failing at once. And the person who made it wrote the section of the spec it violates. We do not know a cleaner way to demonstrate that this class of error has nothing to do with how much you know and everything to do with whether anything is checking.

The fix was one commit that moved five blocks one level deeper.

The fix a React site cannot copy from the spec

The spec's simplest discovery layer is an HTML comment near the top of the page pointing at the manifest. A React site cannot ship that. The framework strips comments during server rendering, so the layer that costs everyone else one pasted line is structurally unavailable to an entire generation of frontends.

The site's answer, and the pattern we now recommend to every Next.js and React shop, is to move the same pointer into an HTTP response header (Link: </.well-known/agents.json>; rel="agents-manifest") plus a <link> element in the document head, with a <noscript> navigation block as the fallback for readers that execute nothing at all. It works, it validates, and you will not find it by reading your own page source with human eyes, which is rather the theme of this study.

The rest of the list

The remaining fixes each took one commit, and each carried its own small lesson:

  • llms.txt did not exist. Instead of writing one by hand, the fix generates it at build time from the same content sources that render the blog and project pages, so the file cannot drift out of date without the site drifting with it. It took a framework-specific flag to make the route exist as a static file, which is the kind of footnote that never appears in a spec and always appears in an implementation.
  • The homepage had no landmarks. The site's front page is a playful desktop metaphor, windows and icons, and it is easy to assume semantic structure does not apply to something that unusual. It applies. The desktop gained a header, a main, a footer, and a page heading, and none of it changed a single pixel.
  • Structured data was missing where it was cheapest. Breadcrumb JSON-LD went onto the about page and the blog index in a few lines each.

Even the victory lap had a finding in it: when the site went to embed its own readiness badge, its Content Security Policy blocked the image. The strictness that protects a site and the openness that lets it prove things about itself have to be configured to coexist.

What the site still does not offer agents

wshoffner.dev hides games and animations inside a terminal, and none of that is legible to software, deliberately. Agent readiness does not mean converting every corner of a site into an API. It means publishing honest signals about what is there: the blog, the project showcase, and the contact routes are fully declared and readable, and the playful parts belong to human visitors. The scanner measures what a site publishes, not whether everything on it was built for machines, and the site now scores Strong with the games exactly as unreadable as their author intends.

What the scanner learned from the founder's mistake

The wrong-depth manifest turned out not to be a one-person error. The same mistake surfaced again on another site within days, built independently, which told us it is a shape of failure the spec invites. So we taught the validator to recognize it: when a required block is missing from site but present at the top level, the scan now says so in plain language, that the content looks right and sits one level too high, instead of reporting a generic missing field.

That is the part of this study we would ask a skeptical reader to weigh. The founder's error did not just get fixed, it made the product better for every site scanned after his.

Verification

The badge at the top of this page reads live from the saved scan of wshoffner.dev, and the snapshot behind it shows the full check, including the site's scan history: 10 of 16 checks in place in the morning, 17 of 17 by the end of the same day, with the readiness band moving from Needs work to Strong. The site's repository is private, so the verification we offer is the kind that does not require trusting us with anything: the scan record above is saved output from the same free assessment anyone can run from this site, on any domain, in about thirty seconds, and the live site itself shows every published signal this study describes.