Finalizing the report
Preparing the stored Is Agentic score
Preparing the stored Is Agentic score
xerj.org
These checks describe whether an ordinary agent can enter, read, and operate the public site.
Agents can reach the site
Crawler access and bot defenses.
Core content is available
Useful content remains accessible without a fragile browser-only path.
Navigation fails safely
Redirects and missing pages give agents a recoverable path.
Controls are understandable
Forms and interactive controls expose usable names and structure.
The public website is always evaluated. Optional surfaces appear when the scan finds positive evidence that they apply.
Needs work
Weighted across 17 applicable checks
Needs work
Weighted across 12 applicable checks
Critical access gaps come first, followed by other applicable readiness gaps.
Return a real HTTP 404 (or 410) status for nonexistent paths - never a 200 with your app shell, which makes agents believe every path exists. For full credit, give the 404 response a short markdown body pointing agents at your sitemap, llms.txt, or docs index. Verify with curl -s -o /dev/null -w "%{http_code}" https://yourdomain.com/some-path-that-does-not-exist - it must print 404.
Return structured JSON error responses with error codes, messages, and resolution hints. Agents can't parse HTML error pages.
On the responses that serve text/markdown via Accept negotiation, add Accept to the Vary header (Vary: Accept, Accept-Encoding). Without it, CDNs can serve the cached HTML variant to an agent asking for markdown (or vice versa), depending on which variant landed in cache first.
Make your developer resources (API docs, OpenAPI spec, auth docs, webhooks, MCP server) discoverable by name. Publish them at predictable URLs, list them in llms.txt, and include your product name in page titles and headings so search engines surface them for name-based queries.
Add JSON-LD structured data to your homepage using the identity type that matches your site - SoftwareApplication for products, Organization or LocalBusiness for companies, Person for personal sites, Article for blogs - with name, description, url, and type-appropriate fields (offers, sameAs, author) so AI can parse your identity programmatically.
Checks are grouped by relevance for Docs & content sites.
9078 chars, semantic headings (H1 + 5 H2s), 41.9% content ratio
Site accessible to 6 AI agent user-agents
No meta-refresh stubs, JavaScript-redirect stubs, or cross-domain hops across 6 checked pages
All 5 sampled pages are publicly readable (5 with substantive content)
OpenAPI spec found at https://xerj.org/openapi.json (version: 3.1.0)
Not acceptmarkdown.com compliant: Accept: text/markdown returned text/html; charset=utf-8; Vary header missing Accept (got "none")
How to pass
On the responses that serve text/markdown via Accept negotiation, add Accept to the Vary header (Vary: Accept, Accept-Encoding). Without it, CDNs can serve the cached HTML variant to an agent asking for markdown (or vice versa), depending on which variant landed in cache first.
API does not return JSON error responses (or no API detected)
How to pass
Return structured JSON error responses with error codes, messages, and resolution hints. Agents can't parse HTML error pages.
Nonexistent paths return HTTP 200 with the app shell (soft-404). Agents probing for resources conclude every path exists. Return a real HTTP 404 status for unknown paths.
How to pass
Return a real HTTP 404 (or 410) status for nonexistent paths - never a 200 with your app shell, which makes agents believe every path exists. For full credit, give the 404 response a short markdown body pointing agents at your sitemap, llms.txt, or docs index. Verify with curl -s -o /dev/null -w "%{http_code}" https://yourdomain.com/some-path-that-does-not-exist - it must print 404.
Agent searched for "xerj" developer resources but found nothing relevant
How to pass
Make your developer resources (API docs, OpenAPI spec, auth docs, webhooks, MCP server) discoverable by name. Publish them at predictable URLs, list them in llms.txt, and include your product name in page titles and headings so search engines surface them for name-based queries.
xerj.org appears once in brand-name search results for "XERJ.ai" (position #4 out of 9)
How to pass
Make sure a clean search for your brand name returns your own domain in the top results. If it does not, your brand may be too generic, conflict with a more established term, or not yet indexed. Strengthen brand-name search by claiming consistent NAP across listings, earning press mentions that link to the canonical domain, and avoiding redirect chains that mask the apex domain in search results.
Valid sitemap found at https://xerj.org/sitemap.xml with 20 entries
Content efficiency: 42.47% (9275 text chars / 21KB HTML)
No JSON-LD structured data found on homepage
How to pass
Add JSON-LD structured data to your homepage using the identity type that matches your site - SoftwareApplication for products, Organization or LocalBusiness for companies, Person for personal sites, Article for blogs - with name, description, url, and type-appropriate fields (offers, sameAs, author) so AI can parse your identity programmatically.
API/docs link found on homepage and resolves: /docs/index.html
When-to-use guidance found in llms.txt
2/4 metadata signals present - missing: og:image, og:type
How to pass
Add all four signals to your homepage: <link rel="canonical">, <html lang="...">, <meta property="og:image">, and <meta property="og:type">. Agents use these for entity resolution and attribution.
No JSON-LD found - Organization schema missing
How to pass
Add Organization JSON-LD that includes both contactPoint (with email/phone and contactType) and address (PostalAddress). This lets AI verify your business legitimacy and answer contact queries.
Only About page verified - missing: Contact, Privacy
How to pass
Publish real /about, /contact, and /privacy pages with at least 500 characters of content each. These are the pages AI agents check to verify your business is legitimate before recommending you.
All 6 measured pages fit an agent context budget (largest ~10K tokens)
Code fences balanced across 1 markdown document
Developer portal found at /docs
Documented REST API detected; endpoints require authentication (API key / OAuth), which is expected for agent access. Best-of-protocols score: 7/7.
No REST rate-limit headers found on probed endpoints
How to pass
Return standard rate-limit headers on your API responses (the RFC RateLimit headers, plus Retry-After on a 429) so agents can self-throttle in real time, and document the conventions alongside your API.
Partial typed error model: error schema defined but not consistently referenced (or vice versa)
How to pass
Document your error responses in your OpenAPI spec: give 4xx and 5xx responses a typed error schema (or use RFC 9457 application/problem+json). A consistent error object with a machine-readable code and a human-readable message lets agents handle failures without guessing.
No API versioning strategy found - add URL path versioning (/v1/, /v2/) or a versioned header parameter in your OpenAPI spec
How to pass
Declare a versioning policy agents can rely on: version your API (in the URL path or a version header) and publish how you signal deprecation (a Sunset/Deprecation header or a documented timeline). Agents avoid integrating against a surface that can change without warning.
CLI tool mentioned in llms.txt
How to pass
Publish an official CLI tool on npm, PyPI, or Homebrew. A CLI lets agents and developers script interactions with your product without building API integrations from scratch.
100% of operations define typed response schemas, 100% use application/json
REST: agent-friendly schema (7 operations, operationIds present, well-documented)
Compatible: 7/7 ops with IDs, 7/7 with typed schemas
Agent config found: github.com/xerj-org/xerj/blob/main/AGENTS.md
100% of 20 sampled sitemap entries carry lastmod; newest is 25 day(s) old
Found the llms.txt at https://xerj.org/llms.txt.
The llms.txt is well-formatted with markdown links, but at 33,142 characters it exceeds the 30,000-character recommendation for a navigation index.
How to pass
Format your llms.txt as a navigation index: start with a markdown heading, include markdown links to deeper resources, and keep it under 30,000 characters. If you have more to say, move long-form content into /llms-full.txt or per-section files (e.g. /docs/llms.txt, /api/llms.txt) and link to them from the main index.
2 of 5 probed llms.txt links do not resolve: https://github.com/xerj-org/xerj/blob/main/user-feedback/11-reference-coding-field-reports/2026-08-11-token-savings-reports.md and https://github.com/xerj-org/xerj/blob/main/CHANGELOG.md
How to pass
Make every link your llms.txt declares resolve to real content. Verify each one with curl -L <url> - you should see the linked document, not your homepage. If your app returns the homepage shell for unknown paths (common with single-page apps), a 200 status is not proof: check the body. Fix or remove any dead link; agents that follow the index treat a broken link as a dead end.
api-catalog responded but body is not valid JSON
How to pass
Publish an API catalog at /.well-known/api-catalog per RFC 9727. Serve it with Content-Type: application/linkset+json;profile="https://www.rfc-editor.org/info/rfc9727" and include a 'linkset' array with item entries pointing to your OpenAPI specs and service descriptions.
Web Bot Auth directory found but body is not valid JSON
How to pass
Publish a Web Bot Auth directory at /.well-known/http-message-signatures-directory. Serve a JSON document with a 'keys' array of Ed25519 JWKs (kty=OKP, crv=Ed25519, kid, nbf, exp). This lets agents sign their requests per RFC 9421 so you can distinguish legitimate bots from spoofers.
Batch/bulk operations referenced in llms.txt
How to pass
Offer a batch endpoint that accepts an array of operations in one request, documented in your spec, so an agent acting on many items can do it in bulk instead of looping one call at a time.
32 native controls, 0 non-native div-soup affordances (100% native).
32/32 interactive elements have a computable accessible name (100%).
No hidden instruction text detected in accessibility-tree attributes or off-screen content.
What does xerj.org do and who is it for? Explain it back to me.
Sign me up for Vercel product updates and marketing emails.
Unsubscribe anytime. Privacy Notice
Source: Ora API
What does xerj.org do and who is it for? Explain it back to me.
17 steps7 reasoning steps2 searches
The agent successfully gathered enough information to explain XERJ's core function, target audience, and key differentiators, but encountered a significant gap: pricing and business model are genuinely absent from the site. The agent pieced together what XERJ does from the homepage, product page, use-cases page, for-agents page, case studies, and GitHub repo — all of which were directly fetchable and contained substantive information. However, the site does not publish pricing, deployment options, or commercial strategy in any machine-readable or human-visible form, forcing the agent to report this as a notable confusion point rather than an oversight.