npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

siteready

v1.15.0

Published

Scan a website with agent-readiness scanners (afdocs, Vercel Is Agentic, Ora), get a unified scorecard, auto-fix supported issues (Astro + Starlight, or plain Astro, + Cloudflare Pages, Netlify, or GitLab Pages; Next.js + Vercel or Netlify; Jekyll + GitHu

Readme

siteready

Full docs site →

Scan a website with multiple agent-readiness scanners, get one unified scorecard, auto-fix the issues a fixer supports for your framework/platform, then re-scan and get a before/after diff. All from the CLI, no browser automation, no scanner UI scraping.

Not a new scanner. It's an orchestration + remediation layer on top of existing scanners, because no single scanner covers the whole "can an AI agent actually use this site" standard (discoverability, machine-readable content, controlled interaction), and none of them auto-fix anything.

siteready doesn't just advise. It ships the fix and proves it worked. Scores come from the standards' own scanners (afdocs, Is Agentic / Ora), not from a model grading itself. Fixes are real code, applied idempotently and verified cross-platform in CI. A local scan-local → enhance → rescan-local cycle shows you the before/after diff before anything deploys.

What this is: a tool, not a skill

siteready is a runnable CLI — real code with a real binary, a pinned scanner contract, and CI. It is deliberately not a prompt-only "skill," because the value here is in code that has already been debugged against real sites (see "Why use this…" below), and instructions alone can't carry that.

It has two front doors onto the same engine, and neither is privileged:

| Audience | Entry point | Notes | |---|---|---| | Humans | the siteready binary (or node src/cli.js from a source checkout) | Every command below works standalone in any terminal. No agent, no LLM, no API key. | | Agents | SKILL.md | A thin adapter — when to run which command and how to read the output. It contains no logic of its own; it shells out to the same CLI. |

The rule that keeps this honest: SKILL.md never implements behavior. If an agent needs siteready to do something new, that's a change in src/, exposed as a CLI flag or command, which the human CLI gets for free in the same commit. Anything an agent can do here, a human can do by typing the same command — and vice versa.

Install

npm install -g siteready
siteready https://example.com
1. Scan     — run the site through multiple agent-readiness scanners
2. Report   — normalize results into one scorecard (score, grade, failing/warning checks, evidence)
3. Enhance  — detect the site's framework/host, apply matching fixes as a diff (or a PR), never a silent commit
4. Re-scan  — run the same scanners again, diff against baseline, produce a before/after report

Full install guide (npx, source checkout, Claude Code skill setup, Node version): docs/install

Status: v1.10

| Piece | Status | |---|---| | Scanners | afdocs (doc-heavy sites), Vercel Is Agentic (any content site) — both run by default. Ora (the engine behind Is Agentic) is opt-in (--scanners ora) | | Fixer | Astro + Starlight or plain Astro, on Cloudflare Pages, Netlify, or GitLab Pages; Next.js (App Router) on Vercel or Netlify; Jekyll on GitHub Pages or GitLab Pages | | Loop | scan → enhance → rescan → diff-report, fully local (no live deployment needed) | | Scan-local | Baseline scan against a repo checkout, no public URL — for a site not deployed yet | | Skill install | install-skill — writes SKILL.md for Claude Code, Codex CLI, and OpenCode | | CI | Windows, macOS, and Linux, on every push — see .github/workflows/ci.yml | | Other frameworks/platforms | Not yet — additive, by demand (see Contributing) |

Real numbers: the Astro+Starlight+Cloudflare-Pages fixer takes a fresh Starlight site from 0/100 (F) → 97/100 (A) on afdocs. Fixer-by-fixer rationale (why the plain-Astro and Next.js fixers are smaller in scope than the Starlight one): docs/install

Why use this, instead of pointing an agent at the scanners directly?

Every scanner here already returns a fix/recommendation string on each failing check, so an agent with repo access could in principle act on that text directly, with no siteready involved. The scan/report layer really is a convenience an agent doesn't strictly need. But the fixers are the real value: turning a scanner's one-line suggestion into idempotent, cross-platform-verified code is where the actual difficulty lives. And a scan → enhance → rescan → diff-report cycle proves a fix worked before anything deploys, which no ad hoc agent fix session gets for free. The honest limit is real too: outside the framework/platform combos a fixer covers (see the Fixer row above), siteready is just a nicer wrapper around scanner output.

This is also a different question than GEO ("Generative Engine Optimization") skill packs answer. Those are prompt-driven advisors for AI visibility (will an LLM mention me). siteready is a build tool for AI usability (can an agent complete a task here), with third-party scores instead of a model grading itself, and real code instead of suggested templates.

Full comparison, with the specific bugs/edge-cases that make hand-rolled fixes fail in practice: docs/why

Usage

siteready https://example.com                       # scan + report
siteready enhance ../my-astro-starlight-site         # apply fixes to a local checkout
siteready scan-local ../my-astro-starlight-site       # one local scan, no public URL (pre-deploy)
siteready rescan-local ../my-astro-starlight-site --baseline ./out/.../report.json   # local re-scan + diff
siteready loop ../my-astro-starlight-site            # scan-local + enhance + rescan-local, one shot
siteready compare https://example.com https://a-competitor.com
siteready monitor https://example.com                # score-over-time from past scans
siteready install-skill claude codex opencode         # install SKILL.md for these agents

Every command also has a rescan/diff-report counterpart and works the same as node src/cli.js <command> from a source checkout. Full command list, every flag, output file formats, and how enhance finds/writes fixes: docs/cli-reference

Architecture

siteready/
├── src/
│   ├── cli.js              # entry point: scan / enhance / rescan / diff-report / scan-local / rescan-local
│   ├── scan.js              # runs configured scanner adapters -> normalized report (shared by scan & rescan)
│   ├── report.js            # normalized report -> report.md / report.json
│   ├── diff-report.js       # baseline vs re-scan -> diff-report.md / diff-report.json
│   ├── detect-stack.js      # framework/host fingerprinting from the LOCAL repo (package.json, config files)
│   ├── enhance.js           # detects stack, applies the matching fixer + platform module
│   ├── pr.js                # opt-in enhance --pr flow (branch, commit, push, gh pr create)
│   ├── loop.js               # local baseline scan orchestration (`scan-local`/`rescan-local`), no live deployment
│   ├── scanners/            # pluggable scanner adapters — export run*Scan(url, options) -> { normalized, raw }
│   ├── fixers/               # pluggable, framework-scoped remediation
│   ├── platforms/            # deployment-target adapters (negotiation/headers)
│   └── lib/
│       ├── npx-runner.js     # cross-platform npx invocation (see docs/architecture)
│       └── local-server.js   # build + serve a repo locally for `scan-local`/`rescan-local` (no live deployment)
└── fixtures/
    ├── astro-starlight-cf-pages/   # reference fixture the Astro+Starlight fixer is verified against
    ├── astro-cf-pages/             # reference fixture the plain-Astro fixer is verified against
    └── nextjs-vercel/              # reference fixture the Next.js+Vercel fixer is verified against

Every scanner adapter and every fixer is independently pluggable — a scanner going offline or a framework having no fixer yet degrades to "unsupported," never breaks the pipeline.

Design rationale (site-type filtering, scanner version pinning, rate-limit handling, the is-agentic caching trap, Astro smartQuotes() bug) and cross-platform notes (npx resolution, Windows .cmd shims, Node version requirements): docs/architecture

Contributing

Adding a scanner adapter or a framework fixer is additive — new files under scanners/ or fixers/+platforms/, no changes to what's already shipped. See CONTRIBUTING.md for the interface contract.

License

MIT — see LICENSE.