Skip to main content

Zero-dependency, cross-platform LLM/GEO/AEO checker CLI — 21 checks, pure Python stdlib, no runtime dependencies.

Project description

llmscout-cli (Python)

Zero-config SEO and GEO (generative engine optimization) checker: 21 checks against a live site, plus a multi-site fleet mode for agencies checking several client sites at once, in pure Python with no extra runtime toolchain -- no headless browser, no separate interpreter to provision.

PyPI version License: MIT Python versions CI npm version

Why this exists

LLMScout checks a website for 21 technical-SEO and GEO issues -- title/meta description length, canonical tags, robots.txt/sitemap.xml reachability (with a robots.txt Sitemap: fallback), heading structure, image alt coverage and weight, Open Graph and Twitter Card tags, meta robots directives, redirect-chain health, JSON-LD structured data, llms.txt, AI-crawler directives (training and search crawlers tracked separately -- GPTBot/OAI-SearchBot, ClaudeBot/Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended), FAQ schema, Speakable schema, Organization schema, Markdown content negotiation, an RFC 8288 Link header, and content-extraction friendliness -- and reports PASS/WARN/FAIL with a fix suggestion for anything short of a clean pass. This package is the Python distribution of the tool: a genuine, independent port of the npm CLI's logic, not a wrapper around the Node binary. It ships with zero runtime dependencies -- HTML parsing and HTTP fetching both use only the Python standard library.

Install

pip install llmscout-cli

or with uv:

uv add llmscout-cli

The complementary JS/TS distribution installs from npm: npm install -g llmscout-cli -- see the project README for that package. Both packages read the same 21-check spec and are intended to report the same PASS/WARN/FAIL verdicts for the same site; neither is deprecated in favor of the other.

Quickstart

llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site

init scaffolds a llmscout.json config (and a Claude Code skill file) in the target directory; check runs all 21 checks against the configured siteUrl and prints a PASS/WARN/FAIL line per check plus a summary. Pass --json before the subcommand for structured output an agent can parse:

llmscout --json check ./my-site

Or call the library directly (the agent-native path, no subprocess):

from llmscout import load_site, run_checks, ALL_CHECKS

ctx = load_site("https://example.com")
results = run_checks(ALL_CHECKS, ctx)
for r in results:
    print(f"[{r.status}] ({r.category}) {r.name}: {r.message}")

How it works

llmscout.json -> site URL -> fetch homepage + robots.txt + sitemap.xml + llms.txt (parallel)
   -> 21 checks (12 technical + 9 GEO) run against the shared fetched context
   -> PASS / WARN / FAIL per check -> exit code (0 clean / 1 any FAIL / 2 usage error)

Full data model, the 21 checks explained, and fleet-mode semantics are in docs/concepts.md and docs/getting-started.md. The checks are reimplemented as genuine Python logic against the same check contract the npm package uses (Check.run(ctx) -> CheckResult) -- see those docs for what each check actually verifies.

Fleet mode

llmscout fleet ./fleet.json

Runs the full 21-check suite against every site declared in a local JSON manifest ({"sites": [{"name": ..., "path": ...}]}) in one invocation -- local filesystem only, no SSH, no remote execution. Aimed at agencies or teams checking several client repos side by side. Add --out-dir ./reports to also write one auto-named report file per site, named from the manifest's name field.

CI integration

- uses: actions/checkout@v4
- uses: actions/setup-python@v5
  with:
    python-version: '3.12'
- run: pip install llmscout-cli
- run: llmscout check ./my-site --json > results.json

Full walkthrough in docs/integrations/ci.md.

Security

llmscout's fetch layer only ever dials http(s), follows redirects manually one hop at a time, refuses to follow a redirect whose Location targets a non-http(s) scheme, and bounds the redirect chain at 5 hops so a redirect loop can't hang the process -- see SECURITY.md for the full policy and how to report a vulnerability. Honest note: this project does not currently publish SLSA provenance, Sigstore signatures, or an SBOM, and has no OpenSSF Scorecard badge set up -- none of that infrastructure exists yet for either distribution, so it isn't claimed here.

Contributing

See CONTRIBUTING.md.

cd python
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest

License

MIT, see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llmscout_cli-0.3.1.tar.gz (50.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llmscout_cli-0.3.1-py3-none-any.whl (55.0 kB view details)

Uploaded Python 3

File details

Details for the file llmscout_cli-0.3.1.tar.gz.

File metadata

  • Download URL: llmscout_cli-0.3.1.tar.gz
  • Upload date:
  • Size: 50.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for llmscout_cli-0.3.1.tar.gz
Algorithm Hash digest
SHA256 b8864a517f6e9f269ec82a4ae14063ae9b243902ae4ef72d69c44d026251bf01
MD5 68a837f9cd2e461af9724287896bb784
BLAKE2b-256 7367490b2063cb2b0d095267cfc1ea219b0769d1c7e1fc74853b4623fbc9f287

See more details on using hashes here.

File details

Details for the file llmscout_cli-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: llmscout_cli-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 55.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for llmscout_cli-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1fb5b313ab1dd2490486b67c76491b8cb2100981974f3a48e9b447526b378611
MD5 408549661d949cb5f8da8fd701150654
BLAKE2b-256 a0b383b277db3535596e420bd6f9832ae67b082591632d6752e7812690fa5b82

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page