agent-readiness-scan
Skill16 starsChanged 35 days agoMITView on GitHub
Use when a client audit, GEO/AI-visibility snapshot, or remediation re-scan needs the Cloudflare agent-readiness score from isitagentready.com, e.g. Theo client audits, "is the site agent-ready", markdown negotiation / MCP / llms.txt / Content-Signal checks, or tracking score deltas after Tier 0/1 fixes.
In this repository17 other files it gives its agents.
- llms.txtllms.txt
- found-by-aiSkill
- geo-auditSkill
- geo-brand-mentionsSkill
- geo-citabilitySkill
- geo-compareSkill
- geo-contentSkill
- geo-crawlersSkill
- geo-llmstxtSkill
- geo-platform-optimizerSkill
- geo-proposalSkill
- geo-prospectSkill
- geo-report-pdfSkill
- geo-reportSkill
- geo-schemaSkill
- geoSkill
- geo-technicalSkill
The file
Files
Agent-Readiness Scan (isitagentready.com)
Produce the official Cloudflare agent-readiness result for a domain as audit-grade artifacts: fixed-schema CSV + raw evidence + the 0-100 score.
Critical facts (learned the hard way)
- Two sources, both required:
POST https://isitagentready.com/api/scanbody{"url":"https://<domain>"}→ full JSON (level, levelName, per-check status + embedded request/response evidence, nextLevel remediation prompts + skillUrls). No numeric score in the JSON.- The 0-100 score renders only in the web UI. Playwright-navigate to
https://isitagentready.com/<host>and read the score dial: an<svg>carryingaria-label="Overall score: N out of 100". Neverwait_forthat text: it's an attribute, not visible text (text-waits time out). Take a page snapshot or evaluatedocument.querySelector('[aria-label*="Overall score"]'). A fresh "Last scanned" timestamp = results are rendered (the step-1 API POST itself refreshes the scan, so no Scan click is normally needed). Without the 0-100 you cannot track deltas (e.g. a site improving 21→43 after fixes).
- Don't freeze the checklist. The scanner evolves (new checks appear). Emit whatever
.checksreturns, mapped through the fixed CSV schema; never hand-author check rows. - Scored vs supplementary. llms.txt, llms-full.txt, security.txt are NOT scored by Cloudflare but Theo audits track them. They go in
Supplementary (not scored)rows from curl probes, never mixed into scored categories. - Commerce is informational unless
isCommerceis true: oneNOT CHECKEDrow, "does not affect score".
Workflow
scripts/run_scan.sh https://<domain> <outdir>/raw-dataThen get the official score via Playwright (see Critical fact 1 for the exact method). Save the page snapshot to raw-data/isitagentready_<client-slug>_snapshot.txt (client slug, e.g. acme, matching your audit config slug). Then:
python3 scripts/scan_to_csv.py \
<outdir>/raw-data/iar_scan.json --score <N> --out <outdir>/csv-base-data/agent_readiness_checks.csv(csv-base-data/ is the Theo full-pack convention; scoped snapshots have used plain csv/; either is fine, pass --out explicitly.)
CSV schema (fixed: cross-client comparability depends on it)
category,check,result,detail,source
- Row 1:
OVERALL,Agent-readiness score,<N>/100 - Level <L> <Name>,<p> pass / <f> fails; Commerce <note>,isitagentready.com/<host> (Cloudflare) <YYYY-MM-DD> - Category names carry computed tallies, e.g.
Discoverability (1/4). Denominators come from whatever the scanner returns that run (it grows new checks), counting scored checks only (pass/fail), neverneutralones. - Results:
PASS/FAIL/NOT CHECKED(scanner statuses other than pass/fail (e.g.neutral,skip) map to NOT CHECKED and are excluded from tallies); detail = scannermessageverbatim (commas stripped/quoted) - Supplementary rows last,
PRESENT/ABSENTfrom curl.
Report section + remediation
Headline format: Agent readiness (Cloudflare isitagentready.com) | **N/100, Level L "Name"** (p pass, f fails). For remediation, lift nextLevel.requirements[].prompt verbatim (they're copy-paste fix prompts with spec URLs); the common Tier 0/1 fix pattern is a markdown negotiation map, robots Content-Signal, link headers, llms-full.txt, and security.txt.
Common mistakes
| Mistake | Fix |
| Reporting only Level, no 0-100 | UI aria-label is the only score source; the Playwright step is not optional |
| Inventing/renaming categories ("Protocol Discovery") | Use the mapping in scan_to_csv.py; discovery → API Auth MCP & Skill Discovery |
WebFetch on isitagentready.com/<host> | JS app: returns shell, no results. API or Playwright only |
| curl-only assessment without the official scan | curl corroborates; the scan JSON is the authority for scored checks |
| Mixing llms.txt into scored categories | Supplementary, not scored |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

