Agent Readiness Audit logo

Agent Readiness Audit

Community
indranilbanerjee
agent-readiness-audit

Audit agent readiness by script: AI-crawler rules, product schema, no-JS HTML, feeds. "can AI agents use our site"

Overview

Publisherindranilbanerjee
Repositorydigital-marketing-pro
Skill nameagent-readiness-audit
Stars
866
Forks
138
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by indranilbanerjee on GitHub. Read the source before you install it.

Installation

Install the Agent Readiness Audit AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/indranilbanerjee/digital-marketing-pro/tree/main/skills/agent-readiness-audit
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/indranilbanerjee/digital-marketing-pro.git /tmp/digital-marketing-pro
mkdir -p .claude/skills
cp -r /tmp/digital-marketing-pro/skills/agent-readiness-audit .claude/skills/agent-readiness-audit
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Agent Readiness Audit in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Agent Readiness Audit on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Agent Readiness Audit is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

/digital-marketing-pro:agent-readiness-audit

Script location. If your host does not set ${CLAUDE_PLUGIN_ROOT}, the scripts are in this plugin's scripts/ folder, next to skills/. Run them with Python 3.10 or newer: python, or python3 where python is not found (macOS, many Linux systems).

Purpose

Answer one question with evidence: can AI agents and AI crawlers use this site? Concretely, the audit checks five things:

  • AI crawlers are allowed to reach the content.
  • The content is in the HTML the server sends, so it does not depend on JavaScript running.
  • Structured data says what the page is.
  • The product feed is complete enough for AI shopping surfaces.
  • Optionally, the site exposes agent tools (WebMCP).

Every check is deterministic and runs in scripts/agent-readiness-audit.py. The skill adds interpretation and the brand's policy decisions on top of the script's output; it never replaces that output with judgment.

What the primary sources say (checked 2026-10-04)

From Google's AI optimization guide (last updated 2026-07-10):

  • No special files. Under the heading "Mythbusting generative AI search", Google lists "LLMS.txt files and other 'special' markup". It says "You don't need to create new machine readable files, AI text files, markup, or Markdown to appear in Google Search (including its generative AI capabilities), as Google Search itself doesn't use them." This skill never recommends llms.txt for Google.
  • Structured data: "Structured data isn't required for generative AI search, and there's no special schema.org markup you need to add." The audit checks JSON-LD because it powers rich results (merchant listings, organization info), not because AI features require it.
  • JavaScript: "Google is able to process content within JavaScript as long as it isn't blocked." The no-JS check is a robustness test: content that is already in the server HTML can be read by every crawler and agent, whether or not it runs JavaScript.
  • Agents: browser agents may analyze screenshots, inspect the DOM structure, and interpret the accessibility tree. Hence the accessibility-basics check. Google names the Universal Commerce Protocol (UCP) as an emerging protocol.

AI crawler tokens (each verified on the vendor's own page)

TokenVendorRole in the auditWhat blocking it means (vendor's words, paraphrased)Source
OAI-SearchBotOpenAIsearch: must be allowedSite not surfaced in ChatGPT search featuresOpenAI bots
ChatGPT-UserOpenAIuser fetch: must be allowedUser-initiated visits. OpenAI: robots.txt "may not apply" to thesesame
OAI-AdsBotOpenAIads: must be allowed if the brand runs ChatGPT AdsValidates the safety of pages submitted as ChatGPT adssame
GPTBotOpenAItraining: policyContent excluded from foundation-model trainingsame
Claude-SearchBotAnthropicsearch: must be allowedContent not indexed for Claude's search resultsAnthropic
Claude-UserAnthropicuser fetch: must be allowedClaude can't retrieve the page for a user's question. Anthropic honors robots.txt for all three of its botssame
ClaudeBotAnthropictraining: policyFuture content excluded from training datasetssame
PerplexityBotPerplexitysearch: must be allowedNot surfaced or linked in Perplexity results (Perplexity says it is not used for model training)Perplexity bots
Perplexity-UserPerplexityuser fetch: must be allowedPerplexity says this fetcher "generally ignores robots.txt rules"same
Google-ExtendedGoogletraining: policyControls use for Gemini training and grounding. It "does not impact a site's inclusion in Google Search nor is it used as a ranking signal", and it has no separate user-agent stringGoogle crawlers
Applebot-ExtendedAppletraining: policyControls use in Apple foundation-model training. It does not crawl, and pages that disallow it "can still be included in search results"Apple

"Policy" means that blocking training crawlers is the brand's choice. The audit reports it as info unless the brand sets --training-policy allow|block, in which case a mismatch fails the check.

Inputs

All checks run offline on files the user exports. The script fetches over the network only with --fetch.

  • robots.txt: --robots FILE, or --site URL --fetch. Add --path /products/ (repeatable) to test the paths that matter, beyond /.
  • Server HTML: --html FILE (repeatable). Save it as the server sends it, for example with curl -L URL > page.html, not "Save as" from a browser, which saves the post-JavaScript DOM. Add --expect "Product name" (repeatable) for text that must be in that HTML, such as a product name or price.
  • Merchant Center feed export: --feed FILE (TSV, CSV, or RSS/Atom XML with g: attributes).
  • Agentic-commerce product feed (optional): --acp-feed FILE. Accepts the JSONL "OpenAI format" or the Google-compatible CSV/TSV (spec).
  • WebMCP (optional, experimental): --webmcp.
  • Brand policy: --training-policy either|allow|block. The default, either, reports training-crawler rules without judging them.

Process

  1. Load brand context. Read ~/.claude-marketing/brands/_active-brand.json, then ~/.claude-marketing/brands/{slug}/profile.json.

    • From the profile, take the domain, whether the brand sells products (feed checks apply), and any stated AI-training policy (sets --training-policy).
    • If no brand exists, ask: "Set up a brand first (/digital-marketing-pro:brand-setup)?" or proceed with the inputs the user gives.
  2. Collect inputs. Ask for exports first. If the user only has a URL, confirm they want a live fetch before using --fetch.

  3. Run the audit.

    bash
    python "${CLAUDE_PLUGIN_ROOT}/scripts/agent-readiness-audit.py" \
        --robots robots.txt --path /products/ \
        --html home.html --html product.html --expect "Acme Anvil" \
        --feed products.tsv --acp-feed openai-feed.jsonl --webmcp \
        --training-policy either --format json > "${CLAUDE_PLUGIN_DATA}/{brand}/seo/agent-readiness/{date}/02-audit.json"

    Live variant, used only when the user agreed to network access:

    bash
    python "${CLAUDE_PLUGIN_ROOT}/scripts/agent-readiness-audit.py" --site https://example.com --fetch \
        --page https://example.com/products/anvil --format json

    Exit codes:

    • 0: no check failed (warnings allowed)
    • 1: at least one check failed
    • 2: bad input (nothing to audit, a missing or unparseable file, a bad flag)

    On 2, fix the input and re-run. Do not interpret a partial run.

  4. Interpret each check. Report the script's status per check: pass, warn, fail, info or skipped.

    • robots_ai_crawlers: a blocked search, user-fetch or ads bot is a fail. Name the bot and quote what blocking it costs, from the table above.
    • structured_data:
      • an unparseable JSON-LD block is a fail
      • a Product without offers is a warn, because merchant-listing rich results require name, image and offers (Google)
      • no Organization markup anywhere is a warn
      • FAQPage is fine to keep, but Google shows FAQ rich results only for "well-known, authoritative government and health websites" (Google)
    • no_js_render: a fail when visible text is below the floor (--min-text, default 250 characters), when an app-shell root (#root, #__next, #app, ...) holds little text, or when an --expect phrase is missing from the server HTML.
    • accessibility_basics: warn only. Covers a missing <html lang>, images without alt, unlabelled inputs, and unnamed buttons.
    • merchant_feed:
      • Fail conditions:
        • any required attribute is missing: id, title, description, link, image_link, availability, price (product data spec)
        • an availability value is outside in_stock, out_of_stock, preorder, backorder
        • a native_commerce(checkout_eligibility) value is not TRUE/FALSE
      • native_commerce: report how many products opt into checkout on Google. Only listings with native_commerce(checkout_eligibility) = TRUE show the "Buy" button. The feature is for select merchants, with products eligible in the US, Canada and Australia (Merchant Center help; UCP guide). The account-level return policy and customer-support contact can't be checked from a feed, so list them as manual checks.
      • Conversational attributes (question_and_answer, document_link, related_product, item_group_title, variant_option, popularity_rank) are optional (help). Report their coverage; never fail on them.
    • acp_feed: optional. If supplied, missing required fields are a fail. Report the is_eligible_search / is_eligible_checkout counts.
    • webmcp: always info. WebMCP is a Chrome origin trial (from Chrome 149) and "under active discussion and subject to change" (Chrome docs). Report the declarative toolname / tooldescription forms and the inline registerTool calls found. Recommend nothing beyond "optional experiment".
  5. Decide policy questions with the user, not for them. Two are the brand's call: whether to block training crawlers, and whether to opt products into checkout on Google. Present the trade-off and the source.

  6. Prioritize fixes. Use the script's recommendations array as the backbone.

    • Order by impact: blocked answer engines → content missing from server HTML → broken JSON-LD → feed required attributes → everything else.
    • Route the work: rendering to /digital-marketing-pro:tech-seo-audit, markup to /digital-marketing-pro:entity-audit, and visibility follow-up to /digital-marketing-pro:aeo-geo.

Numbered output convention

All outputs go to ${CLAUDE_PLUGIN_DATA}/{brand}/seo/agent-readiness/{YYYY-MM-DD}/:

00-input.md            domain, which exports were supplied, fetch yes/no, training policy
01-inputs/             the robots.txt, HTML and feed files actually audited (for reproducibility)
02-audit.json          raw script output
03-findings.md         per-check status, findings, sources (with the 2026-10-04 check date)
04-policy-decisions.md training-crawler stance, checkout opt-in decision — with rationale
05-fix-plan.md         prioritized fixes with owners and the skill each routes to
PLAN.md                one-page summary: verdict, top 3 fixes, re-audit date

Quality scorecard

GatePass when
script_ran_cleanExit code 0 or 1 (never 2). A 2 means the inputs were wrong, not the site
inputs_are_server_html00-input.md states the HTML was captured as served (curl or --fetch), not from a browser's saved DOM
sources_citedEvery finding in 03-findings.md carries the source URL from the script output or this skill
policy_explicit04-policy-decisions.md records the training-crawler stance and checkout opt-in as the brand's decisions
no_llms_txt_for_googleNothing in the deliverable recommends llms.txt as a Google visibility lever

Output

  • Verdict: ready (no warnings or failures), needs_work (warnings only), or not_ready (any failure). Experimental and skipped checks do not count.
  • Crawler access table: every token, its role, allowed / partially_blocked / blocked per tested path, the deciding robots rule, and the vendor's caveat.
  • Rendering and markup report: per page, the visible-text size, app-shell markers, missing expected phrases, JSON-LD types found, and parse errors.
  • Feed readiness: required-attribute gaps, the native_commerce opt-in count, conversational-attribute coverage, and the optional agentic-commerce feed result.
  • WebMCP note (if requested): tools found, clearly marked experimental.
  • Fix plan in priority order, each fix routed to the skill that implements it.

Caveats

  1. robots.txt is a request, not a wall, for user-initiated fetchers. OpenAI says robots.txt "may not apply" to ChatGPT-User. Perplexity says Perplexity-User "generally ignores robots.txt rules". Don't promise that blocking them keeps content out.
  2. The no-JS check is not a rendering test. It reads the HTML as served. It cannot tell you how a JavaScript-capable crawler renders the page; use /digital-marketing-pro:tech-seo-audit for that.
  3. A feed export is not Merchant Center's verdict. The audit checks the file. Merchant Center diagnostics, account-level policies, and UCP onboarding status live in the account.
  4. Being allowed is not being cited. This audit checks whether agents can use the site. Whether they do is measured by /digital-marketing-pro:geo-monitor (probes plus Bing Webmaster AI Performance) and /digital-marketing-pro:gsc-ai-performance.
  5. An unreachable robots.txt fails the robots check. With --fetch, a 4xx robots.txt means allow-all, and a 5xx or network error means every crawler must assume complete disallow (RFC 9309). The first finding says so; if the cause was your own network rather than the site, re-run.

Agents used

  • seo-specialist (primary): crawler policy, rendering, structured data, and the AI-visibility hand-offs
  • media-buyer: feed and checkout implications for Shopping, AI Max, and ChatGPT Ads product feeds (see skills/paid-advertising/ads-in-ai-answers.md)

See also

  • /digital-marketing-pro:tech-seo-audit: full technical crawl and rendering
  • /digital-marketing-pro:entity-audit: Organization and entity consistency
  • /digital-marketing-pro:aeo-geo: optimizing for AI answers once agents can read the site
  • /digital-marketing-pro:geo-monitor: whether AI answers actually cite the brand

Frequently asked questions

What does the Agent Readiness Audit AI skill do?

Audit agent readiness by script: AI-crawler rules, product schema, no-JS HTML, feeds. "can AI agents use our site"

Why use Agent Readiness Audit on TypingMind?

Because you install it once and use it with any model. Agent Readiness Audit is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Agent Readiness Audit in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/indranilbanerjee/digital-marketing-pro/tree/main/skills/agent-readiness-audit. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Agent Readiness Audit?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Agent Readiness Audit?

As many as you like. As long as a model supports skills, you can use Agent Readiness Audit with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Agent Readiness Audit AI skill free?

Yes. It is published on GitHub by indranilbanerjee under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇