agent-readiness-audit
Audit agent readiness by script: AI-crawler rules, product schema, no-JS HTML, feeds.
Skill by indranilbanerjee
Chalk Labs
Need help deploying agent-readiness-audit?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/indranilbanerjee-agent-readiness-audit
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend, security, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/agent-readiness-audit
What's inside
- Skill name
agent-readiness-audit- Description
- Audit agent readiness by script: AI-crawler rules, product schema, no-JS HTML, feeds. "can AI agents use our site"
- License
- MIT
- Instructions
- 154 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Agent Skills spec issues
- files: referenced but missing: scripts/agent-readiness-audit.py
Files (1)
- SKILL.md
SKILL.md (first lines)
# /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](https://developers.google.com/search/docs/fundamentals/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)
| Token | Vendor | Role in the audit | What blocking it means (vendor's words, paraphrased) | Source |
|---|---|---|---|---|
| `OAI-SearchBot` | OpenAI | search: **must be allowed** | Site not surfaced in ChatGPT search features | [OpenAI bots](https://developers.openai.com/api/docs/bots) |
| `ChatGPT-User` | OpenAI | user fetch: **must be allowed** | User-initiated visits. OpenAI: robots.txt "may not apply" to these | same |
| `OAI-AdsBot` | OpenAI | ads: **must be allowed** if the brand runs ChatGPT Ads | Validates the safety of pages submitted as ChatGPT ads | same |
| `GPTBot` | OpenAI | training: **policy** | Content excluded from foundation-model training | same |
| `Claude-SearchBot` | Anthropic | search: **must be allowed** | Content not indexed for Claude's search results | [Anthropic](https://support.claude.com/en/articles/8896518) |
| `Claude-User` | Anthropic | user fetch: **must be allowed** | Claude can't retrieve the page for a user's question. Anthropic honors robots.txt for all three of its bots | same |
| `ClaudeBot` | Anthropic | training: **policy** | Future content excluded from training datasets | same |
| `PerplexityBot` | Perplexity | search: **must be allowed** | Not surfaced or linked in Perplexity results (Perplexity says it is not used for model training) | [Perplexity bots](https://docs.perplexity.ai/guides/bots) |
| `Perplexity-User` | Perplexity | user fetch: **must be allowed** | Perplexity says this fetcher "generally ignores robots.txt rules" | same |
| `Google-Agent` | Google | user fetch: **must be allowed** | Agents on Google infrastructure that browse and act on a user's request. Google: user-triggered fetchers "generally ignore robots.txt rules"; Google is testing Web Bot Auth with the `https://agent.bot.goog` identity | [Google user-triggered fetchers](https://developers.google.com/crawling/docs/crawlers-fetchers/google-user-triggered-fetchers) (checked 2026-10-27) |
| `Google-GeminiNotebook` | Google | user fetch: **must be allowed** | Fetches URLs a user adds as sources in a Gemini Notebook project. It replaces `Google-NotebookLM`, "supported until August 2026": the audit warns when robots.txt still names the old token | same |
| `Google-Extended` | Google | training: **policy** | Controls 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 string | [Google crawlers](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers) |
| `Applebot-Extended` | Apple | training: **policy** | Controls use in Apple foundation-model training. It does not crawl, and pages that disallow it "can still be included in search results" | [Apple](https://support.apple.com/en-us/119829) |
"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 `/`. On Windows, Claude Code's Bash tool is Git Bash, which rewrites `/products/` into a Windows folder: set `MSYS_NO_PATHCONV=1` for the command (as below) or write `//products/`. The script refuses a `--path` that doesn't start with `/`.
- **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 JSONL in OpenAI's product file format or the Google-compatible CSV/TSV ([spec](https://developers.openai.com/commerce/specs/file-upload/products)).
- **Discovery feed first; checkout is partner-gated on both platforms.** OpenAI onboards product feeds into ChatGPT for approved partners only (apply at chatgpt.com/merchants) and recommends a full snapshot at least daily ([get started](https://developers.openai.com/commerce/guides/get-started), read 2026-10-28). On 2026-03-24 OpenAI said the first Instant Checkout "did not offer the level of flexibility" it wanted and now lets merchants use their own checkout while it focuses on discovery (OpenAI, "Powering Product Discovery in ChatGPT"). Google's UCP-powered checkout in AI Mode and the Gemini app is for select merchants, with products eligible in the US, Canada and Australia (see `native_commerce` below). So the audit scores the feed; checkout is an application the merchant makes, not a field to fill.
- **WebMCP (optional, experimental)**: `--webmcp`.
- **Brand policy**: `--training-policy either|allow|block`. The default, `either`, reports training-crawler rules without judging them.
- **Access logs (optional)**: the site's server or CDN logs, for `scripts/crawler-log-report.py` (step 5). Combined format or JSON lines (Cloudflare Logpush keys work), `.gz` allowed.
## 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.** Create the output folder first; nothing else creates it.
```bash
mkdir -p "${CLAUDE_PLUGIN_DATA}/{brand}/seo/agent-readiness/{date}"
MSYS_NO_PATHCONV=1 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](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing))
- 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](https://developers.google.com/search/docs/appearance/structured-data/faqpage))
- **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](https://support.google.com/merchants/answer/7052112))
- 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](https://support.google.com/merchants/answer/16837055); [UCP guide](https://developers.google.com/merchant/ucp/guides/merchant-center)). 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](https://support.google.com/merchants/answer/17085370)). 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](https://developer.chrome.com/docs/ai/webmcp)). Report the declarative `toolname` / `tooldescription` forms and the inline `registerTool` calls found. Recommend nothing beyond "optional experiment".
5. **See what the crawlers actually did (optional; needs the site's access logs).** robots.txt says what a crawler may fetch; the logs say what it fetched. Anyone can send a crawler's user-agent string, so the report checks each request against the addresses the vendor publishes.
```bash
python "${CLAUDE_PLUGIN_ROOT}/scripts/crawler-log-report.py" --refresh-ranges # downloads the vendors' lists; the only network call
python "${CLAUDE_PLUGIN_ROOT}/scripts/crawler-log-report.py" --log access.log --log access.log.1.gz \
> "${CLAUDE_PLUGIN_DATA}/{brand}/seo/agent-readiness/{date}/02b-crawler-log.json"
```
- The logs never leave the machine, and the report prints no full IP address. Ask the user before reading logs they haven't offered, and say they contain visitors' addresses.
- Each crawler is counted as **verified** (from a published address), **spoofed** (its name from an address the vendor does not list: robots.txt won't stop it, a firewall or CDN rule will) or **unverified** (the lists are not downloaded, or not all of them). Never call an unverified request genuine.
- Read it beside step 4: a search or user-fetch bot that robots.txt allows but that made no verified request may not have the site in its index yet; a bot that gets many 4xx/5xx needs those paths fixed before its visits mean interest.
- Lists older than 14 days are flagged; run `--refresh-ranges` again before a report you will act on.
6. **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.
7. **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}/`:From indranilbanerjee/digital-marketing-pro, MIT.
More from indranilbanerjee/digital-marketing-pro
- 0.674score
competitor-monitor
indranilbanerjee
Monitor competitors over time: baseline sites, pricing and ads by script, flag changes.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
credential-switch
indranilbanerjee
Switch the active credential profile to another client, validating keys first, approval-gated.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
campaign-status
indranilbanerjee
Show status of every tracked campaign: health, spend, executions, pending approvals.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
competitor-analysis
indranilbanerjee
Analyze 2-5 competitors once: positioning, content, SEO, ads, pricing.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
continuous-improvement-loop
indranilbanerjee
Run the Part 12 continuous improvement loop into a quarterly brief for leadership.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
counter-narrative
indranilbanerjee
Build a counter-narrative playbook for a competitor's rebrand, category claim or attack.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
analytics-insights
indranilbanerjee
Design the analytics layer with script-backed benchmarks: KPI trees, report templates, MMM, cookieless.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
budget-tracker
indranilbanerjee
Project ad budget pacing by script from live accounts or given numbers: month-end overspend.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
client-report
indranilbanerjee
Write a white-labeled report for one client from tracked data.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
client-validation-document
indranilbanerjee
Produce the Part 5 client validation document: evidence-cited findings for client decisions.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
creative-testing-framework
indranilbanerjee
Plan a creative testing roadmap with script-computed sample sizes.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
crisis-response
indranilbanerjee
Respond to a breaking PR crisis: severity, holding statement, stakeholder messages, timeline.
SkillAFreshness: A★ 909Claude Code +9
Signals
- Stars
- 909
- Forks
- 146
- Open issues
- 0
- Last commit (this folder)
- Oct 11, 2026 (21 days ago)
- Last release
- Jul 29, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Website
- indranil.in
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from indranilbanerjee
- 0.674score
campaign-status
indranilbanerjee
Show status of every tracked campaign: health, spend, executions, pending approvals.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
client-report
indranilbanerjee
Write a white-labeled report for one client from tracked data.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
analytics-insights
indranilbanerjee
Design the analytics layer with script-backed benchmarks: KPI trees, report templates, MMM, cookieless.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
budget-tracker
indranilbanerjee
Project ad budget pacing by script from live accounts or given numbers: month-end overspend.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
creative-testing-framework
indranilbanerjee
Plan a creative testing roadmap with script-computed sample sizes.
SkillAFreshness: A★ 909Claude Code +9 - 0.674score
client-validation-document
indranilbanerjee
Produce the Part 5 client validation document: evidence-cited findings for client decisions.
SkillAFreshness: A★ 909Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get agent-readiness-audit running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
agent-readiness-audit skill. Agent Mart. https://agentmart.dev/skills/indranilbanerjee-agent-readiness-audit (last updated 2026-10-24)