folder

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.

Explore on GitHub

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/ to tools/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.md gives its name as release-note, which doesn't match its folder.
  • .claude/agents/test-runner.md has 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.