agentsclimarketplace

Agent readiness scan

Skill techhorizonlabs/thl-open/skills/agent-readiness-scan

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.From its SKILL.md

Install
npx -y skills add techhorizonlabs/thl-open --skill agent-readiness-scan

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 14 stars14 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 2 commands, including `scripts/run_scan.sh https://<domain> <outdir>/raw-data` and 1 more.
  • fetches URLsInstructs the agent to fetch 2 URLs, including POST https://isitagentready.com/api/scan and 1 more.

SKILL.md

4.4 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it

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)

  1. Two sources, both required:
    • POST https://isitagentready.com/api/scan body {"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> carrying aria-label="Overall score: N out of 100". Never wait_for that text — it's an attribute, not visible text (text-waits time out). Take a page snapshot or evaluate document.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).
  2. Don't freeze the checklist. The scanner evolves (new checks appear). Emit whatever .checks returns, mapped through the fixed CSV schema — never hand-author check rows.
  3. 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.
  4. Commerce is informational unless isCommerce is true — one NOT CHECKED row, "does not affect score".

Workflow

scripts/run_scan.sh https://<domain> <outdir>/raw-data

Then 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 — matches 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), never neutral ones.
  • 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 = scanner message verbatim (commas stripped/quoted)
  • Supplementary rows last, PRESENT/ABSENT from 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

MistakeFix
Reporting only Level, no 0-100UI aria-label is the only score source — Playwright step is not optional
Inventing/renaming categories ("Protocol Discovery")Use the mapping in scan_to_csv.py; discoveryAPI 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 scancurl corroborates; the scan JSON is the authority for scored checks
Mixing llms.txt into scored categoriesSupplementary, not scored

What ships with it: 2 files

7.1 KB alongside SKILL.md, 2 of them executable

scripts/

Gives 0 of the 12 instructions most context ai engineering skills give in ~1.0k tokens

Counted across 1,328 of the 2,349 authors here whose files we hold, read 2026-09-06

  • Dispatch a fresh subagent for each taskin 76 of 1328, across 59 files
  • Perform spec compliance review before code quality reviewin 44 of 1328, across 34 files
  • Dispatch a final code reviewer after all tasksin 38 of 1328, across 26 files
  • Answer subagent questions before allowing implementationin 36 of 1328, across 26 files
  • Use the least powerful model capable of the taskin 33 of 1328, across 26 files
  • Create a TodoWrite list for all tasksin 32 of 1328, across 22 files
  • Perform a task review after each implementationin 31 of 1328, across 24 files
  • Extract all tasks and context from the planin 29 of 1328, across 20 files
  • Provide full task text to subagentsin 28 of 1328, across 20 files
  • Use git worktrees for isolated workspacesin 25 of 1328, across 20 files
  • Specify the model explicitly when dispatching a subagentin 23 of 1328, across 18 files
  • Execute all tasks from the plan without stoppingin 21 of 1328, across 16 files

Said here and by no other author read

  • Post scan request to API
  • Navigate to site with Playwright for score
  • Read score from aria-label attribute
  • Save page snapshot to raw data directory
  • Run scan to CSV conversion script
  • Map scanner results to fixed CSV schema

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.