Agent assets lint: check your AI instruction files against your own rules
A small Node tool that checks CLAUDE.md, AGENTS.md, skills and agent files against rules you write in one JSON file: line budgets, required headings, matching skill names, real descriptions. Comes with a starter policy for a plain Claude Code project.
Why I use it: I ran it across 81 of my own Claude Code projects. It found 30 agent files with no header at all, 28 of them in 7 projects I had copied from an older setup of mine.
The install prompt
Install the agent-assets-lint tool from Free-Public-Tools into this project. 1. Get the folder tools/agent-assets-lint/ from https://github.com/Mike-Byrne-AI/free-public-tools (branch main) and put it at tools/agent-assets-lint/ in this project, keeping its files and subfolders as they are. One way: clone the repo with --depth 1 into a temporary folder outside this project, copy tools/agent-assets-lint/ across, then delete the temporary folder. If tools/agent-assets-lint/ already exists, stop and ask me first. 2. Do not run anything from it yet. Read tools/agent-assets-lint/README.md and tell me in a few sentences what the tool does, what it needs (Node 22 or newer), and the command to try it. 3. Only if I then say go: copy tools/agent-assets-lint/examples/claude-code-starter.json to agent-assets.config.json at the root of this project (if a file with that name is already there, show me a diff and ask first), run node tools/agent-assets-lint/bin/agent-assets.mjs from the project root, and show me its output as it is.
1,034 characters
How to use this
- Any coding agent
- This tool is a folder of files. Use Copy install prompt and paste it into your coding agent, in your project: it downloads the folder to
tools/agent-assets-lint/and tells you how to run it. - By hand
- Use Explore on GitHub to see the files, then copy the folder
tools/agent-assets-lint/totools/agent-assets-lint/in your project (GitHub's Code button can download the whole repo as a ZIP).
A sample run
It's ordinary code: the same files always give the same output, so one run shows what it does. This is a small Claude Code project with two planted rule breaks, checked with the starter config (examples/claude-code-starter.json):
.claude/skills/release-notes/SKILL.mdgives itsnameasrelease-note, which doesn't match its folder..claude/agents/test-runner.mdhas the description "Runs tests.", which is 11 characters, under the starter's 20.
OK claude-md 1 file(s), 4 lines
FAIL claude-skills 2 file(s), 16 lines
- .claude/skills/release-notes/SKILL.md: frontmatter "name" is "release-note" but its directory is "release-notes".
FAIL claude-agents 1 file(s), 6 lines
- .claude/agents/test-runner.md: frontmatter "description" is 11 characters, below the 20 minimum.
Agent assets: 2 issue(s) across 4 instruction file(s) totalling 26 lines.
It exits with code 1, so a CI step that runs it fails. The project is test/fixtures/sample-project, and one of the tool's own tests runs it and compares the output with this block, so the two cannot drift apart.