Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/chamroro/tailwind-a11y/claude-mdgit clone --depth 1 https://github.com/chamroro/tailwind-a11yWrote 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/chamroro/tailwind-a11y/claude-md)<a href="https://agentmods.dev/instructions/chamroro/tailwind-a11y/claude-md"><img src="https://agentmods.dev/badge/instructions/chamroro/tailwind-a11y/claude-md.svg" alt="Measured on agentmods" 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 | $0.01876 | $0.01876 |
| Opus 5 | $0.00938 | $0.00938 |
| Sonnet 5 | $0.00375 | $0.00375 |
| Haiku 4.5 | $0.00188 | $0.00188 |
Grade A, and why
tailwind-a11y CLAUDE.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 — 111 lines — stays where its author put it; the contents beside it link to each section on GitHub.
tailwind-a11y (monorepo root)
npm workspaces monorepo with four packages. Per-package conventions, scope boundaries,
and architecture live in each package's own CLAUDE.md — this file covers only
monorepo-level rules.
packages/
tailwind-a11y/ the engine + CLI — see packages/tailwind-a11y/CLAUDE.md
eslint-plugin-tailwind-a11y/ thin ESLint adapter over the engine
vscode-tailwind-a11y/ thin VS Code adapter over the engine (live diagnostics)
github-action-tailwind-a11y/ thin GitHub Action adapter (inline PR annotations);
its manifest is the root-level action.yml so consumers
can write `uses: chamroro/tailwind-a11y@v0`
All adapters call the engine's extract*/check* functions directly —
none of them reimplement detection logic. Adding another adapter (or
another check) should follow the same pattern.
Rules specific to the monorepo layout
workspacesin the rootpackage.jsonis an explicit ordered array, not apackages/*glob. Glob matches resolve alphabetically, which would build/testeslint-plugin-tailwind-a11ybeforetailwind-a11y— and the plugin imports types from the engine's build output, so that order fails. When adding a package, append it in dependency order.eslint-plugin-tailwind-a11y's dependency ontailwind-a11yis a plain semver range (^0.13.5), not a special workspace protocol — npm has noworkspace:protocol. npm resolves it to the local workspace symlink only while the range is satisfied by the engine's actualversion. Bump both together;npm run check:linkat the root guards against this drifting silently (a version bump that breaks the range makes npm silently fall back to the registry instead of local source — no error, just stale behavior).- One lockfile, at the root. Never commit a
package-lock.jsoninside a package directory. - Publish order: engine, then plugin, always — the plugin's published manifest depends on the engine actually being on the registry.
- Root
package.jsonname istailwind-a11y-monorepo, nottailwind-a11y— deliberately different from thepackages/tailwind-a11ypackage name to avoid a workspace name collision. Root is"private": trueand never published. vscode-tailwind-a11ymust bundle its dependencies (esbuild) and package withvsce package --no-dependencies.vsce's dependency collector only looks inside the extension's own directory; npm workspaces hoists everything (includingtailwind-a11yitself) to the monorepo root, so an unbundled build produces a.vsixwith broken../..paths or missing deps. A rawtscbuild here is broken, not just non-optimal.- A fix to the engine's detection logic requires bumping
vscode-tailwind-a11y's own version too, even when its source didn't change.eslint-plugin-tailwind-a11yresolvestailwind-a11ydynamically fromnode_modulesat each consumer's install, so a new engine patch reaches it automatically without a plugin republish. But becausevscode-tailwind-a11ybundles the engine into a static.vsixat build time, there is no dependency resolution happening on the end user's machine — a bug fix to the engine is frozen out of every Marketplace install until the extension itself is rebuilt and republished with a bumped version. The same applies togithub-action-tailwind-a11y(also a bundle — see below). packages/github-action-tailwind-a11y/dist/index.jsis a COMMITTED build artifact — the only dist in this repo that is (.gitignorere-includes that one directory). GitHub runs a JS action straight from the repo tree at a git ref with no npm install, so the bundle IS the release artifact; there is no publish step to force a rebuild. After any engine change, rebuild and commit it (npm run build -w tailwind-a11y && npm run build -w github-action-tailwind-a11y)..github/workflows/verify-action-bundle.ymlenforces this on every PR and push to main by rebuilding and failing ongit diff(deliberately no paths filter — a lockfile-only bump changes bundle bytes without touching any filterable path). The bundle build keepsminify: false, sourcemap: falseso rebuilds are reproducible given the lockfile-pinned esbuild.- Bundled adapters must not rely on
import.meta— esbuild's CJS output rewritesimport.metato an empty object, so e.g.createRequire(import.meta.url)throws inside a bundle (and if wrapped in try/catch, degrades silently — this shipped as a real bug in vscode-tailwind-a11y 0.5.0, where custom-theme detection silently never worked). The engine'sloadCustomThemeanchorscreateRequireto the config path itself instead; a bundling regression test inloadCustomTheme.test.tsbuilds a real CJS bundle and runs it. - Tag namespaces: bare
vX.Y.Ztags are the engine's releases. The GitHub Action releases via a floatingv0tag (what consumers pin) plus an immutableaction-vX.Y.Ztag, both handled by publish.yml'srelease-actionjob (gated on the action package's own version bump, like every other package). Never tag an action release as barevX.Y.Z. Unlikev0(deliberately force-moved every release),action-vX.Y.Zis pushed without-fand the job fails first if that tag already exists on origin — npm/vsce reject a duplicate version automatically, but git has no such built-in check, so this job does it explicitly rather than letting an "immutable" tag silently move. - Why the Action is a bundled JS action, not a composite running
npx tailwind-a11y: a composite gets no structured violation objects (so no inline annotations, the whole point) and pays npm-install latency per CI run. .github/workflows/publish.ymlauto-publishes on push tomain, gated per-package by whether that package'sversionfield actually changed in the push. A version bump landing via a merged PR is what triggers a real publish — don't bump a version casually in an unrelated PR. Every publish job targets thereleaseGitHub Environment (required reviewer approval gate before the actual publish step runs) and needsNPM_TOKEN(npm Automation token, not a regular one — regular tokens require a 2FA OTP that CI can't provide) andVSCE_PATset as secrets on that environment. One-time setup: repo Settings → Environments → New environment namedrelease→ enable Required reviewers → add the two secrets there (not the repo-level secrets page).NPM_TOKENcomes from npmjs.com → Access Tokens → Generate New Token → Automation;VSCE_PATis the same Azure DevOps PAT used for manualvsce publish(Marketplace → Manage scope, "All accessible organizations").- On a fresh clone,
npm installruns twice: once before the firstnpm run build --workspaces(to get the toolchain), once after (so thetailwind-a11yCLI'snode_modules/.binsymlink gets created — it's only linked for adist/cli.jsthat already exists at install time).
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 0e070c43defc
- 4d ago First seen · 111 lines · 1,876 tokens per session scan A 8e10b5d40783
tailwind-a11y CLAUDE.md is an instructions file published in the GitHub repository chamroro/tailwind-a11y (10 stars, last pushed yesterday), licensed MIT. It adds 1,876 tokens to every session, about $0.0094 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-08-31.
Other instructions, from other repositories
formkind AGENTS.md
Instructions for khanhcamap2020-sudo/formkind, covering agent guide, commands and change rules.
vital AGENTS.md
Instructions for jvidalv/vital, covering ai agent development guide, quick reference, component creation workflow, step 1: determine component level and step 2: create component files.
vital CLAUDE.md
Instructions for jvidalv/vital, covering claude ai assistant guide, project overview, tech stack, core framework and styling.
websoot-v1 AGENTS.md
AGENTS.md instructions for aaryanporwal/websoot-v1, covering agent guide, quick blog reference, other tasks and cursor cloud specific instructions.
laravel-vue-starter AGENTS.md
AGENTS.md instructions for gdarko/laravel-vue-starter, covering laravel boost guidelines, foundational context, skills activation, conventions and verification scripts.
laravel-vue-starter GEMINI.md
Gemini CLI instructions for gdarko/laravel-vue-starter, covering laravel boost guidelines, foundational context, skills activation, conventions and verification scripts.