Borrowing it
Nothing to install: this file belongs to sitelint/auditor-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/sitelint/auditor-mcp/main/AGENTS.mdgit clone --depth 1 https://github.com/sitelint/auditor-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/sitelint/auditor-mcp/agents-md)<a href="https://agentmods.dev/instructions/sitelint/auditor-mcp/agents-md"><img src="https://agentmods.dev/badge/instructions/sitelint/auditor-mcp/agents-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/sitelint/auditor-mcp/agents-md"><img src="https://agentmods.dev/badge/instructions/sitelint/auditor-mcp/agents-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.02333 | $0.02333 |
| Opus 5 | $0.01167 | $0.01167 |
| Sonnet 5 | $0.00467 | $0.00467 |
| Haiku 4.5 | $0.00233 | $0.00233 |
Grade A, and why
auditor-mcp AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 62 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AGENTS.MD
Project
SiteLint MCP server for the SiteLint Auditor engine - WCAG and SiteLint Best Practices audits for accessibility, SEO, performance, and security via LLM agents. TypeScript, ESM ("type": "module"), builds to dist/ with tsc. Distributed via npm (@sitelint/auditor-mcp); uses Puppeteer to drive Chrome/Chromium. MCP registry metadata lives in server.json (releases sync its version to package.json via scripts/sync-server-json-version.js). Agent plugins live in the repo root (Claude Code + Codex) with marketplace manifests at .claude-plugin/marketplace.json and .agents/plugins/marketplace.json; the sync script also keeps plugin versions in step with package.json.
Code style notes (supplementing ESLint)
no-process-envis an error – don't useprocess.env.- Prettier is configured for formatting but the repo does not have a
formatscript – runeslint --fixinstead. - No lockfile –
package-lock=falsein.npmrc. Exact versions (save-exact=true).
Code style additional rules
- Meaningful names – avoid
data,temp,foo. - Empty lines between logical sections – add blank lines to separate logical blocks within functions (e.g., between variable declarations, conditionals, loops, and return statements). For example, put an empty line between an
ifblock and a subsequentconstdeclaration, or between aconstand areturn. - Object properties sorted alphabetically.
- No implicit coercion – use strict
===and!==. Avoid loose equality operators (==,!=). - Negation for boolean toggling – the
!operator is allowed and encouraged for boolean assignment and toggling (e.g.,flag = !isEnabled,item.hidden = !isVisible). For conditional checks, follow rule 12 (useif (!value)for false checks, notif (value === false)). - Use
const+ arrow functions for callbacks/standalone functions. - Optional chaining allowed, but not to change control flow silently. Prefer explicit checks when null/undefined is an error state.
- Callback functions – extract the inline callbacks into named
constfunctions. One-liners are fine inline. No large anonymous functions inline. - Context execution – use
globalThisinstead ofwindow,global, orselfunless explicitly justified. awaitmust be wrapped in try-catch – everyawaitcall must be inside a try-catch block. No unhandled promise rejections. If you don't need the error, at minimum log it withconsole.error.- Always use fully qualified global references – don't rely on implicit globals. Use
globalThis.fetchnotfetch,globalThis.setTimeoutnotsetTimeout, etc. Exceptions:consoleanddocumentmay be used withoutglobalThis. - No negation in boolean conditions – when checking a boolean value in a conditional (e.g.,
if,while, ternary), useif (value)for true checks andif (value === false)for false checks. Do not use the logical NOT operator (!) for false checks (e.g.,if (!value)is forbidden). This makes the condition explicit and avoids subtle bugs. - No TypeScript typings in JavaScript files –
.jsfiles should not contain type annotations. Keep types only in.tsfiles. - Parentheses around arrow function arguments – always wrap arrow function arguments in parentheses, even for single parameters. Use
(x) => x * 2notx => x * 2. - Prefer early returns over nested if blocks – avoid large
ifblocks by inverting conditions and returning early. Keep nesting to a minimum (max 2-3 levels deep). - No async misuse at top-level – wrap top-level async logic in an immediately invoked function expression (IIFE) or use a named function that gets called. Never leave top-level
awaitunhandled. - Explicit type checking – don't check just for
undefined. Always validate that the value matches the expected type. Watch for thenulltrap:typeof null === 'object'. Always explicitly excludenullwhen checking for objects. For example, usetypeof value === 'object' && value !== nullinstead of justtypeof value === 'object'. 17.1. Complete explicit types – include all relevant runtime states in explicit type annotations, includingnullandundefinedwhen an API can return them. For example, useRegExpMatchArray | nullforString.match(), not onlyRegExpMatchArray. - Class member order – maintain the following order within classes:
- Class properties:
protected,private,public(alphabetically within each group) - Constructor
- Methods:
protected,private,public(alphabetically within each group) - Angular lifecycle methods (e.g.,
ngOnInit,ngOnDestroy) must come after all public methods
- Class properties:
- Avoid hard-coded strings – extract string literals into named constants or enums. This ensures consistency, prevents typos, and makes refactoring easier. Use, for example,
const ACTION_SAVE = 'save'instead of repeating'save'throughout the codebase. - Pass function references directly – when adding event listeners, pass the function reference directly instead of wrapping in an anonymous function. Use
addEventListener('click', handler)notaddEventListener('click', () => handler()). For class methods, usethis.method.bind(this). - Avoid self-explanatory comments – don't comment what the code does if the code itself is clear. Comments should explain "why" (business logic, edge cases, workarounds) not "what". Exception: complex algorithms, non-obvious performance optimizations, or temporary // TODO comments.
- Use
+= 1for increments – avoid the++operator. Usei += 1instead ofi++in loops and counters. This makes increment behavior explicit and avoids confusion between post-increment and pre-increment. - Explicit array emptiness check – when checking if an array has elements, use
Array.isArray(array) && array.length > 0. Don't rely on truthiness or optional chaining alone, as they can be ambiguous withnull,undefined, or empty arrays. - Multi-line object and array formatting – when an object or array has more than one property/element, format it vertically with line breaks after the opening bracket and before the closing bracket. Each property/element on its own line. Single-property objects or single-element arrays may remain on one line.
- Avoid
as unknown as Typecasting – casting throughunknownbypasses type safety and hides type mismatches. If you must cast, preferas Typewith a runtime check. Useunknowncasting only as an absolute last resort when interfacing with truly untyped data (e.g.,JSON.parse), and always add a comment explaining why. - No trailing commas – avoid trailing commas in objects, arrays, function arguments, or any other syntax. Trailing commas can cause issues in older JavaScript environments and create inconsistent git diffs.
- Indentation – use 2 spaces for indentation. No tabs.
- No underscore prefix for private members – don't use underscore prefix (e.g.,
_privateProperty). TypeScript'sprivatekeyword already indicates visibility. Use standard naming without underscores. - Use template literals for string concatenation – avoid
+for string concatenation. Use template literals (backticks) instead. For example, use${pct}%notpct + '%', and useHello ${name}not'Hello ' + name. - Class property initialization in constructor – all class properties must be initialized directly in the constructor. Do not initialize properties at declaration (e.g.,
private count = 0). The exceptions are@Input()properties (which are set by Angular), rule classes extendingAbstractRule(whereselectorandruleConfigare initialized at declaration), and properties using the!definite assignment assertion (with a comment explaining why). This ensures clear initialization flow and avoids the "not definitely assigned" error. - Use
Number.parseIntinstead ofparseInt– always useNumber.parseIntrather than the bareparseIntfunction. This makes the global namespace explicit and avoids ambiguity. Always include the radix parameter (e.g.,Number.parseInt(value, 10)). - Avoid long anonymous functions in
new Promise– when creating a new Promise, keep the executor function short (2-3 lines max). If the logic is longer, extract it to a namedconstfunction. This improves readability and reusability. - Use
addEventListenerinstead of on-event properties – avoid assigning event handlers directly to DOM element properties likeimg.onload,button.onclick, orwindow.onload. UseaddEventListenerinstead. This allows multiple listeners, better cleanup, and avoids accidental overrides. - Use
{ once: true }for one-time event listeners – when an event listener is intended to run only once (e.g.,load,error,clickfor a one‑time action), always pass the{ once: true }option. This automatically removes the listener after execution, preventing memory leaks and unintended multiple calls. - Interfaces prefixed with
I(e.g.,IAuditorReport). Enforced by@typescript-eslint/naming-convention. - No implicit coercion with
!on non‑booleans – do not use the logical NOT operator (!) to coerce a non‑boolean value to a boolean (e.g.,if (!obj),!!value). Instead, use explicit type‑specific checks that validate the expected shape or type of the data. For example, usetypeof value === 'object' && value !== nullfor objects,Array.isArray(value)for arrays,value !== null && value !== undefinedfor optional values, etc. The!operator is allowed only when the operand is already a boolean (e.g., toggling a flag:flag = !flag).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · -6 tokens per session 958fcf146cc5
- 2d ago First seen · 62 lines · 2,339 tokens per session scan A bae0237cc864
auditor-mcp AGENTS.md is an instructions file published in the GitHub repository sitelint/auditor-mcp (0 stars, last pushed 2d ago), licensed MPL-2.0. It adds 2,333 tokens to every session, about $0.0117 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-15.
Other instructions, from other repositories
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
spec-kit AGENTS.md
AGENTS.md instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.
next.js AGENTS.md
AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.
codex AGENTS.md
AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).