# LLMScout
[](https://github.com/RudrenduPaul/LLMScout/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/llmscout-cli)
[](https://pypi.org/project/llmscout-cli/)
[](./LICENSE)
[Install](#install) • [Quickstart](#quickstart) • [CLI reference](#cli-reference) • [Comparison](#comparison) • [FAQ](#faq) • [Contributing](#contributing)

Runs 21 technical-SEO and GEO (generative-engine-optimization) checks against your site, in pure TypeScript or pure Python, with zero Python interpreter, zero headless browser, and zero external toolchain either way.

## Install
LLMScout ships as two independent, complementary distributions. Both run the same 21 checks with the same PASS/WARN/FAIL verdicts, so pick whichever fits your toolchain.
**Node/TypeScript (npm):**
```bash
npm install -g llmscout-cli
llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site
```
The CLI targets Node 18+ (declared in `package.json` `engines`). The two runtime dependencies are `cheerio` (HTML parsing) and `commander` (argument parsing): there is no Python interpreter, no `pip install`, and no Playwright/Chromium download anywhere in the npm install.
> [!NOTE]
> The npm install pulls in `undici` as a transitive dependency of `cheerio`. `npm audit` has flagged a high-severity advisory against it in the past; `package.json`'s `overrides` block pins `undici` (and `js-yaml`/`nanoid`) to patched ranges to close it. Run `npm audit` after install to confirm your resolved tree is clean.
**Python (PyPI):**
```bash
pip install llmscout-cli
llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site
```
Zero runtime dependencies -- HTML parsing and HTTP fetching both use only the Python standard library. See [python/README.md](./python/README.md) for the full Python-specific guide.
Then, in any project you want to check:
```bash
llmscout init .
```
That scaffolds a `llmscout.json` config and a small Claude Code skill file into the target directory. Set your site URL and run `llmscout check .`.
## Quickstart
Scaffold a config and run a check against a live site:
```bash
llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site
```
Real output from `llmscout check` against `https://example.com`:
```
LLMScout check -- https://example.com
[PASS] (technical) Title tag
Title "Example Domain" is 14 characters, within the recommended 10-60 range.
[WARN] (technical) Meta description
No meta description found.
Fix: Add