Linter 0.4.0: see exactly what your agent loads, monorepo and skill checks, leak audit
- This release folds in 0.3.1, which never shipped on its own. Release notes on GitHub; install with
npx -y -p @asitis/mcp@0.4.0 asitis lint, the ActionKatta041/asitis-agent-tools@v0.4.0, or update the plugin. asitis loads [dir],/asitis:md-loadsand theload_plantool: what Claude Code, Codex, Gemini CLI, Cursor and Copilot load when a session starts in a folder. The files at launch with their imports, what loads later (a subfolder CLAUDE.md on first read, path rules on a matching file, nested skills), what gets cut (Codex's 32 KiB chain, MEMORY.md after 200 lines) and what is never read and why. Each step says whether it rests on vendor docs, a canary run in the real tool, or an assumption./asitis:md-budgetis now a view of the same model, so the two can't disagree.- Monorepo rules: a
paths,globsorapplyTopattern that matches no file, a subfolder file that repeats or contradicts the one above it, and a subfolder file that tells the agent to ignore the files above it. - Skill checks: descriptions that are vague, written in the wrong person, or nearly the same as another skill's; descriptions in one folder or plugin over Claude Code's 8,000-character listing budget; and a
.claude/commandsfile with the same name as a skill, which never runs. secret-in-steering: an API key or private key in a steering file is an error. The message gives the key type, line and column and never a character of the key.- Agent leak audit, opt-in with
--include config: a password or token saved into a permission rule by "Yes, and don't ask again" (Claude Code, Cursor CLI, Gemini CLI),settings.local.json,CLAUDE.local.mdand other local agent files that no.gitignorecovers, and session transcripts committed to the repo. With that flag the linter now also reads.gitignore,.cursor/cli.jsonand the first 4 KB of<uuid>.jsonlfiles. Without it, nothing new is read. hidden-instructionin nine more languages (Spanish, Portuguese, French, German, Russian, Chinese, Japanese, Korean, Hindi), with the same error and warning split as English. No new findings on 4,363 real hidden comments.- MCP prompts
lint,budget,fixandloads(/mcp__asitis__lintin Claude Code), resourcesasitis://findingsandasitis://budget, andasitis lint --badgefor a "checked with AsItIs" README badge after a clean run. - Behaviour change for CI: on a repo too big to search in full,
asitis lintused to stop with exit code 2 and lint nothing. It now lints what it found and exits 4, so a partial run never looks clean. Add--allow-partial(Action inputallow-partial: true) to get 0 or 1 instead. The walk covers 200,000 folder entries now, was 50,000, so next.js, bun, node, rust and PostHog lint in full. broken-importreads@imports the way Claude Code does. I checked its parser and ran canary files through it:See @guide.md: for details,Follow @AGENTS.md.and(see @guide.md)load nothing even when the file is there, so those are warnings now.@guide.md#setupis no longer called missing. Imports inside imported files are followed, 4 hops for Claude Code and 5 for Gemini CLI, and a problem further down is reported on the import that starts the chain.- Fewer false positives. I ran 0.3.0 and 0.4.0 over the same 71 public repos and labelled every finding by hand: errors and warnings went from 900 to 655 and precision from 70% to 91%, with no real finding lost.
- Fixed: an empty
<!-->comment hid the rest of the file (issue #28); fix diffs no longer print a line that holds a key (#32); a 10 MB single-line file took over a minute, now about a second. - 86 rules, each with its own page. Not tested yet: the MCP prompts and resources in VS Code and Cursor, and the new language phrases haven't had a native-speaker review.