惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
J
Java Code Geeks
月光博客
月光博客
博客园_首页
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
B
Blog RSS Feed
博客园 - 聂微东
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
Jina AI
Jina AI
S
SegmentFault 最新的问题
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
量子位
Martin Fowler
Martin Fowler
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
I built an open-source CLI that scores any site for AI-ag...
guardlabs_te · 2026-05-08 · via DEV Community

guardlabs_team

I built an open-source CLI that scores any site for AI-agent readiness (0-100)

TL;DRagent-readiness-cli checks how well your site talks to ChatGPT, Claude, Perplexity and other AI agents. Single-file Python, standard library only, MIT.
Repo: github.com/sspoisk/agent-readiness-cli
Install: pip install agent-readiness-cli

The problem

Every "AI SEO" article in the last six months tells you the same three things:

  1. Add llms.txt
  2. Add JSON-LD with the right @type
  3. Decide what to do about GPTBot, ClaudeBot, PerplexityBot in robots.txt

What none of them give you is a tool that opens your site, looks at it the way a crawler would, and tells you what's actually missing right now.

So I built one.

What it does

$ agent-ready https://example.com
✓ llms.txt               10/15  present, 4.2 KB, 12 URLs
✓ json-ld                23/25  3 block(s), types: Article, Organization, BreadcrumbList
✗ ai-bots-robots.txt      0/20  ClaudeBot, GPTBot disallowed at root
✓ canonical+hreflang     12/15  canonical=set, hreflang langs=['en','ru']
✗ mcp-card                0/10  no /.well-known/mcp.json (optional)
✓ meta                   10/10  10/10 of common signals
✓ sitemap                 5/5   valid, 1250 URLs

  Score: 60 / 100
  Tier: C  (middling — focus on ai-bots-robots.txt, mcp-card)

Enter fullscreen mode Exit fullscreen mode

One number for the whole site, plus seven sub-scores so you know what to fix first.

What gets checked, with weights

Section Weight What it looks for
llms.txt 15 presence, leading H1, at least 3 canonical URLs listed
json-ld 25 parseable, recognised @type, multiple distinct types
ai-bots-robots.txt 20 rules for GPTBot / ClaudeBot / Claude-Web / PerplexityBot / Google-Extended / CCBot / Applebot-Extended / Bytespider
canonical+hreflang 15 self-canonical, reciprocity, x-default for multi-lang
mcp-card 10 /.well-known/mcp.json valid JSON with name + description
meta 10 description, og:title, og:description, twitter:card, <html lang>
sitemap 5 /sitemap.xml exists, valid <urlset> or <sitemapindex>

Bands: A ≥ 90 · B ≥ 75 · C ≥ 55 · D ≥ 35 · F < 35.

I picked these weights based on what I see most often missing in the wild — JSON-LD is heaviest because it's the highest-leverage signal an LLM uses to understand your page kind. Disagree? All weights are in agent_ready/cli.py and contributors are welcome to challenge any of them.

Output formats for different jobs

agent-ready https://example.com           # human summary (default)
agent-ready --full https://example.com    # human summary + every finding
agent-ready --json https://example.com    # machine-readable
agent-ready --csv https://example.com     # one row, append to your monitoring
agent-ready --quiet https://example.com   # just the score; exit code = band

Enter fullscreen mode Exit fullscreen mode

CI gate example

If you want your build to fail when the site drifts below a threshold:

- name: Audit AI-agent readiness
  run: |
    pip install agent-readiness-cli
    SCORE=$(agent-ready --quiet https://your-site.example)
    echo "AI-readiness score: $SCORE"
    [ "$SCORE" -ge 75 ] || { echo "below threshold"; exit 1; }

Enter fullscreen mode Exit fullscreen mode

That single integer-on-stdout is why --quiet exists.

What it does NOT do

  • It does not crawl your whole site — one URL at a time. If you want the whole site, drive it from a sitemap loop.
  • It does not fix anything. It tells you what to fix; the fix is on you.
  • It does not check for vulnerabilities — use OWASP ZAP for that.
  • It does not validate JSON-LD against the full Schema.org grammar. It checks that types are recognised; for Schema-strict validation, use Google's Rich Results Test.
  • It does not score Core Web Vitals or accessibility.

If any of those is what you actually need, this is not the right tool.

Why a single file

The whole tool is one Python file plus tests. No third-party dependencies. Standard library only.

A few reasons this matters:

  • Auditable. You can read every check in one go. No layer of abstraction hides what gets weighted.
  • Portable. It runs on any box with Python 3.10+. No pip install-and-pray.
  • No telemetry. It hits your URL only. Nothing else leaves the machine.
  • Forkable. If you want to add a check or change a weight, fork it. The whole thing is shorter than most config files.

I think the future of small dev tools is a return to this — one file, one job, no surprise dependencies.

Where it sits in the landscape

There are excellent generators (e.g. firecrawl/llmstxt-generator) that produce llms.txt files for you. There are validators for JSON-LD (Google's web tool, schema linters). There are MCP doc tools like langchain-ai/mcpdoc for exposing llms-txt to IDEs.

What didn't exist was the audit slice — a single CLI that opens your URL, looks at the agent-readiness surface end-to-end, and says "score 62, weakest links are X and Y." So I wrote that.

How to try it now

pip install agent-readiness-cli
agent-ready https://your.site

Enter fullscreen mode Exit fullscreen mode

Available on PyPI and GitHub.

If you want continuous monitoring instead of one-off audits, I built it on top of Web-Audit Guardian — the same logic running every 30 min for a domain. The CLI is the audit slice as OSS; the continuous variant is the paid tier. Either way, the methodology is now public.

What's next

  • A --all mode that follows your sitemap and rolls up to a site-wide score
  • Optional check for ai.txt (Spawning's draft)
  • More AI bots if reasonable consensus emerges

Issues, PRs and disagreements with the weights all welcome. The repo is small enough that the bar to contribute is low.


Repo: github.com/sspoisk/agent-readiness-cli
License: MIT
Author: maintained by GuardLabs.

If you run it, let me know what your number is. Always interested to hear which check most surprised people.