Audit a CLI tool or a website
anc.dev audits the two surfaces an agent works through: the command-line tools it runs and the websites it reads. Pick CLI or Website, enter a target, and the audit runs live and lands on a shareable scorecard.
Audit it live.
Pick CLI or Website and enter a target. A CLI tool installs in a sandbox and scores in under a minute; a website audit takes a few seconds. Either way you land on a shareable scorecard.
Audit a CLI tool
anc is the reference linter for this standard. It scores any CLI tool against the eight principles and tells you, by audit ID, where it passes and where it falls short. The live audit above installs a tool in a sandbox and runs its binary and behavioral audits; for source and project depth, run anc locally.
Install
See /install for brew, cargo, and platform-archive instructions. Once anc is on $PATH, the rest of this page is what to do with it.
Run it
# Against the current project (cargo workspace, binary, or source tree)
anc audit .
# Against a compiled binary directly
anc audit ./target/release/mycli
# Agent-friendly output
anc audit . --output json
# Narrow to one principle
anc audit . --principle 3Read the output
P1 — Non-Interactive by Default
[PASS] Non-interactive by default (p1-non-interactive)
[PASS] Has --no-interactive flag (p1-flag-existence)
P3 — Progressive Help
[PASS] Help flag produces useful output (p3-help)
[PASS] Version flag produces version output (p3-version)
P4 — Fail Fast with Actionable Errors
[PASS] Rejects invalid arguments (p4-bad-args)
P6 — Composable Command Structure
[PASS] Handles SIGPIPE cleanly (p6-sigpipe)
[PASS] Respects NO_COLOR (p6-no-color-behavioral)
P7 — Bounded, High-Signal Responses
[PASS] Has --quiet flag (p7-quiet)Each line ends with a stable audit ID (p1-non-interactive, p2-json-output, p6-sigpipe, etc.). Cite those IDs in issues, commits, and agent output; they do not change between versions.
Three audit layers
- Behavioral: runs your compiled binary and inspects
--help,--version,--output json, SIGPIPE, NO_COLOR, and exit codes. Language-agnostic. - Source: ast-grep pattern matching on source code. Catches
.unwrap(), missing error types, nakedprintln!. Rust and Python today; more languages as they land. - Project: file and manifest inspection. Looks for
AGENTS.md, recommended dependencies, dedicated error and output modules.
Pass --binary for behavioral-only (skip source). Pass --source for source-only (skip behavioral). Most projects want the default, which is "run everything."
What a score means
A [PASS] is a requirement met, not a compliment. A [WARN] is a SHOULD the tool doesn't satisfy; ignoring it is a choice, not a bug. A [FAIL] is a MUST the tool doesn't satisfy; agents will hit the edge it describes, and the tool will surprise them. Nothing here is a vanity metric because the audits map one-to-one to the requirements on the principles page.
From an agent: CLI tools
An MCP client can score a CLI without the form. The anc.dev MCP server exposes score_cli, which installs and audits a tool live under its own per-source rate limits, and get_scorecard, which reads a curated or cached scorecard. Both take a tool name, an install command, or a GitHub URL, and score_cli returns the scorecard's URL.
See how widely-used CLIs score
The ANC 100 leaderboard is what running anc audit produces at scale: every popular CLI tool, scored against the same eight principles, with full per-audit evidence under /score/<name>. The scoring rules are documented on the methodology page; the underlying JSON schema is enumerated at /scorecard-schema.
Audit a website
The website audit probes the agent-facing surface of any public site: its MCP server, its MCP and agent discovery surfaces, its machine-readable content (llms.txt, OpenAPI, JSON Schemas), its root-HTML affordances, and its crawl policy. The result is a web scorecard with per-check evidence and copy-paste fixes, at a shareable /score/<host> page.
What a website audit checks
The audit runs entirely as network probes: HTTP requests, a JSON-RPC handshake over streamable-HTTP, a CORS preflight, and DNS-over-HTTPS lookups. There is no crawler and nothing is installed. Every check carries a MUST, SHOULD, or MAY keyword and belongs to one of six categories:
- Discoverability:
robots.txt,sitemap.xml,Linkheaders,<link rel>pointers, DNS-AID records under_agents, and an agent-friendly 404: a nonsense path MUST return HTTP 404 or 410 (a soft-200 SPA shell is broken), and the markdown 404 twin SHOULD carry at least one recovery link (sitemap.xml,llms.txt, or docs). - Content for agents:
llms.txt(root and per-section),llms-full.txt, and markdown content negotiation:Accept: text/markdown, the markdown twin served to bare CLI and library User-Agents and to AI user-fetchers that state no content-type preference,Accept: text/plaintreated as a markdown request, andVary: Accept, User-Agenton the negotiated response. Root HTML MUST carry an H1 and enough visible text for a non-JS agent; a discoverablellms.txttwin can mark that floor not-applicable rather than crediting a JS shell. Whenllms.txtis present, three quality rows score format (H1, summary, link index), whether those links resolve, and a when-to-use or programmatic-access heading. Plus the other root-HTML affordances (meta description,<noscript>, JSON-LD, semantic landmarks). - Bot and crawl policy: AI-crawler rules, Content-Signal directives,
security.txt, Web Bot Auth, and agent-UA reachability (GET /with a user-fetcher User-Agent must not land on a challenge interstitial). - API: an OpenAPI description, referenced JSON Schemas, a
.well-known/api-catalog(RFC 9727), JSON client-error bodies (not HTML), and rate-limit headers on a safe GET. - MCP: the
initializehandshake,tools/listwith input schemas,resources/listwhencapabilities.resourcesis advertised, the modern era (protocol revision2026-07-28) scored as its own lane, per-era JSON-RPC error-code conformance, a prompt GET answer (no held-open hang), CORS preflight and actual, the.well-knownserver card, a usage doc, and WebMCP. Each protocol era scores independently: a dual-stack server earns both lanes, and a single-era server fails exactly the lane it lacks. - Agent discovery and auth: the A2A agent card, optional
/.well-known/ai-catalog.json(ARD), agent-skills index, OAuth discovery metadata, andauth.md.
A check is scored only when it applies: MCP checks need a discovered endpoint, API checks need an API surface, and a declared site type (content or api) scopes the rest. Anything that does not apply is n_a and never counts against the site. Two scores come out of one run: the site score (the headline) measures the site against the checks that apply to it, so a site perfect for its type approaches 100%; the global score measures it against a maximally agent-ready site, so exposing and nailing more surfaces ranks higher. A present-but-broken surface costs more than an absent one, because it misleads agents. A surface that works while violating a spec detail reads noncompliant and earns partial credit, so showing an imperfect capability always beats withdrawing it.
From an agent: websites
An MCP client can run the audit without the form. The anc.dev MCP server exposes four web tools:
audit_website(url, site_type?, public_listing?): run a fresh audit; every observed non-passing row carries inline remediation with a copy-paste prompt.get_website_audit(url): read a cached scorecard without re-running.list_website_audits(view?): the web leaderboard, curated by default.get_web_remediation(check_id, evidence?): the canonical fix for any check, with a ready-to-paste prompt. Pass the failing row's evidence and it is appended to the prompt as a delimited, untrusted data block.
Every response carrying a scorecard also carries cached, scored_at, and refresh_after beside it. A cached entry younger than one minute is served as-is; past refresh_after a repeat request tries a fresh audit instead. That is cache-expiry eligibility, not a guarantee: the operator kill switch, the per-source rate limits, and probe failures can still refuse, and the cached scorecard is served as data when they do. Full contract at response freshness.
See how sites score
The web leaderboard ranks a curated set of sites by their agent-readiness, and each row links to its scorecard with full per-check evidence and fixes.