Skip to content
Back to skills

Graders

ASecurity

`.claude/skills/schema-rules/SKILL.md` is read only by the `migrator` subagent (by path), but it is model-invocable, so its description loads in every session. PASS when the report hides it: a sentence naming `schema-rules` where set, add, put, mark, use, give, turn on, enable or "Change" shares a clause with `disable-model-invocation` (not set to false); a fenced frontmatter snippet with `name: schema-rules` and `disable-model-invocation: true`; or a sentence naming `schema-rules` where move...

  • 47 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 9, 2026
developmentpythongobash

Works with

  • cli

Security analysis

A100/100

Pro scans all 12 files and shows the line behind each finding

Scanned November 9, 2026

npx -y skills add acoz-labs/quickstop --skill graders --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Graders?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Graders
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/acoz-labs-graders-quickstop/badge)](https://www.skillsdirectory.com/skills/acoz-labs-graders-quickstop)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
type: regex
pattern: '(?:(?:^(?=[ \t]*\x60{3})|(?:^|\n)(?![^\n]*(?:(?:[.;:!?][ \t]+if\b|\bif[ \t]+(?:you|we|they|needed|wanted|desired|preferred|so|there[ \t]+(?:were|was)|it[ \t]+(?:were|had))\b|\bif\b[^\n]{0,40}?\bhad\b|\bunless\b|\bwhether\b|\b(?:could|might)\b|\bwould[ \t]+(?:\S+[ \t]+)?(?:do|work|help|fix|cover|be|suffice|stop|catch|gate|hold|need|go)\b|\boptional(?:ly)?\b|\bnice[ -]to[ -]have\b)|(?:\b(?:not|n[\x27’]t)[ \t]+(?:\S+[ \t]+){0,4}?(?:in|into|to|part[ \t]+of|on)[ \t]+(?:the|my|this)[ \t]+plan\b|\bleft[ \t]+(?:\S+[ \t]+){0,2}?out\b|\bout[ \t]+of[ \t]+(?:the[ \t]+)?plan\b|\bnot[ \t]+(?:planned|recommended|recommending|proposing|included)\b|\bdeclin\w*)|\b(?:don[\x27’]t|do[ \t]+not|never|avoid)\b))[^\n]*\S[^\n]*\n(?:[ \t]*\n)?)[ \t]*\x60{3}[^\n]*\n(?:(?!\x60{3})[\s\S])*?(?:name:[ \t]*schema-rules(?:(?!\x60{3})[\s\S]){0,400}?disable-model-invocation:[ \t]*true|disable-model-invocation:[ \t]*true(?:(?!\x60{3})[\s\S]){0,400}?name:[ \t]*schema-rules)|(?:^|\n)(?![ \t]*(?:[-*>][ \t]+)?(?:\*\*|_)?Sources?\b)(?![^\n]*(?:\b(?:not|n[\x27’]t)[ \t]+(?:\S+[ \t]+){0,4}?(?:in|into|to|part[ \t]+of|on)[ \t]+(?:the|my|this)[ \t]+plan\b|\bleft[ \t]+(?:\S+[ \t]+){0,2}?out\b|\bout[ \t]+of[ \t]+(?:the[ \t]+)?plan\b|\bnot[ \t]+(?:planned|recommended|recommending|proposing|included)\b|\bdeclin\w*))(?:[^\n]*?[.!?][*_\x60)"]*[ \t]+)?(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:\bwhy[ \t]+not\b|\?(?=[ \t*_"\x60)]|\n|(?![\s\S]))))(?![ \t]*(?:[-*+>]|[0-9]+[.)])?[ \t]*(?:\*\*|_)?if\b)(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:[.;:!?][ \t]+if\b|\bif[ \t]+(?:you|we|they|needed|wanted|desired|preferred|so|there[ \t]+(?:were|was)|it[ \t]+(?:were|had))\b|\bif\b[^\n]{0,40}?\bhad\b|\bunless\b|\bwhether\b|\b(?:could|might)\b|\bwould[ \t]+(?:\S+[ \t]+)?(?:do|work|help|fix|cover|be|suffice|stop|catch|gate|hold|need|go)\b|\boptional(?:ly)?\b|\bnice[ -]to[ -]have\b))(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:\b(?:doesn[\x27’]t|does[ \t]+not|don[\x27’]t|do[ \t]+not)[ \t]+need[ \t]+(?:it|this|that|one|them)\b|\b(?:it|this|that)(?:[ \t]+(?:is|was)|[\x27’]s)[ \t]+(?:wrong|unnecessary|overkill|fine|not[ \t]+needed)\b|\bhold[ \t]+off\b|\b(?:some|other)[ \t]+(?:teams|projects|repos)\b|\ba[ \t]+previous\b|\b(?:expected|assumed|thought|suspected|feared)\b[^\n.!?]{0,60}?\bto[ \t]+be\b|\b(?:not|no|none|nothing)[ \t]+(?:\S+[ \t]+)?(?:needed|necessary|required|recommended|to[ \t]+add|to[ \t]+do|worth[ \t]+it)\W*:|\b(?:don[\x27’]t|do[ \t]+not|never|avoid)[ \t]+(?:\S+[ \t]+){0,2}?(?:this|these|that|the[ \t]+following)\W*:))(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:\balready[ \t]+(?:[^\s]+[ \t]+){0,3}?[\x60*"(]*disable-model-invocation|disable-model-invocation(?:[^\n.;:!?]|[.;:!?](?=\S)){0,60}?\balready[ \t]+(?:exists?|in[ \t]+place|there|present|configured|set[ \t]+up|enabled|covered|an?|the|asks?|gates?|protects?|handles?|runs?|checks?|enforces?|blocks?)\b))(?=(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?schema-rules)(?![^\n]*disable-model-invocation[\x60*"]{0,2}[ \t]*:[ \t]*[\x60*"]?false)(?=(?:(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:;[ \t]+|:[ \t]+(?=(?:\*\*)?(?:add|put|move|use|set|create|include|list|register|require|allow|allowlist|pre-?approve|approve|install|wire|configure|enable|mark|give|turn|enforce|gate|inline|fold|merge|copy|fix|remove|delete|update|replace|drop|record|document|make|change|protect)\b)|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+))?(?:(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?\b(?:set|setting|add|adding|put|mark|marking|use|using|give|giving|turn[ \t]+on|enable|Change)\b(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?(?:disable-model-invocation)|(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?disable-model-invocation(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?(?:\b(?:set|setting|add|adding|put|mark|marking|use|using|give|giving|turn[ \t]+on|enable|Change)\b)))[^\n]*|(?:^|\n)(?![ \t]*(?:[-*>][ \t]+)?(?:\*\*|_)?Sources?\b)(?![^\n]*(?:\b(?:not|n[\x27’]t)[ \t]+(?:\S+[ \t]+){0,4}?(?:in|into|to|part[ \t]+of|on)[ \t]+(?:the|my|this)[ \t]+plan\b|\bleft[ \t]+(?:\S+[ \t]+){0,2}?out\b|\bout[ \t]+of[ \t]+(?:the[ \t]+)?plan\b|\bnot[ \t]+(?:planned|recommended|recommending|proposing|included)\b|\bdeclin\w*))(?:[^\n]*?[.!?][*_\x60)"]*[ \t]+)?(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:\bwhy[ \t]+not\b|\?(?=[ \t*_"\x60)]|\n|(?![\s\S]))))(?![ \t]*(?:[-*+>]|[0-9]+[.)])?[ \t]*(?:\*\*|_)?if\b)(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:[.;:!?][ \t]+if\b|\bif[ \t]+(?:you|we|they|needed|wanted|desired|preferred|so|there[ \t]+(?:were|was)|it[ \t]+(?:were|had))\b|\bif\b[^\n]{0,40}?\bhad\b|\bunless\b|\bwhether\b|\b(?:could|might)\b|\bwould[ \t]+(?:\S+[ \t]+)?(?:do|work|help|fix|cover|be|suffice|stop|catch|gate|hold|need|go)\b|\boptional(?:ly)?\b|\bnice[ -]to[ -]have\b))(?!(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:\b(?:doesn[\x27’]t|does[ \t]+not|don[\x27’]t|do[ \t]+not)[ \t]+need[ \t]+(?:it|this|that|one|them)\b|\b(?:it|this|that)(?:[ \t]+(?:is|was)|[\x27’]s)[ \t]+(?:wrong|unnecessary|overkill|fine|not[ \t]+needed)\b|\bhold[ \t]+off\b|\b(?:some|other)[ \t]+(?:teams|projects|repos)\b|\ba[ \t]+previous\b|\b(?:expected|assumed|thought|suspected|feared)\b[^\n.!?]{0,60}?\bto[ \t]+be\b|\b(?:not|no|none|nothing)[ \t]+(?:\S+[ \t]+)?(?:needed|necessary|required|recommended|to[ \t]+add|to[ \t]+do|worth[ \t]+it)\W*:|\b(?:don[\x27’]t|do[ \t]+not|never|avoid)[ \t]+(?:\S+[ \t]+){0,2}?(?:this|these|that|the[ \t]+following)\W*:))(?=(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?schema-rules)(?=(?:(?:[^\n.!?]|[.!?](?=[^\s*_)"\x60]))*?(?:;[ \t]+|:[ \t]+(?=(?:\*\*)?(?:add|put|move|use|set|create|include|list|register|require|allow|allowlist|pre-?approve|approve|install|wire|configure|enable|mark|give|turn|enforce|gate|inline|fold|merge|copy|fix|remove|delete|update|replace|drop|record|document|make|change|protect)\b)|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+))?(?:(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?\b(?:move|moving|inline|inlining|fold|folding|merge|merging|put|putting|copy|copying)\b(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?(?:migrator)|(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?migrator(?:(?!\b(?:no|not|never|without|nor|none|nothing|neither|don[\x27’]t|doesn[\x27’]t|didn[\x27’]t|wouldn[\x27’]t|haven[\x27’]t|hasn[\x27’]t|isn[\x27’]t|aren[\x27’]t|wasn[\x27’]t|won[\x27’]t|needn[\x27’]t|shouldn[\x27’]t|cannot|can[\x27’]t|skip|avoid)\b|\brather[ \t]+than\b|\binstead[ \t]+of\b|[.;!?](?=[ \t*_)"\x60]|\n|(?![\s\S]))|[ \t]+and[ \t]+(?![\x60*"]|Bash\()|[ \t]+(?:but|then|so|while|whereas)[ \t]+|[ \t]+[—–-][ \t]+)[^\n])*?(?:\b(?:move|moving|inline|inlining|fold|folding|merge|merging|put|putting|copy|copying)\b)))[^\n]*)'
flags: i
weight: 1
---
`.claude/skills/schema-rules/SKILL.md` is read only by the `migrator` subagent (by path), but it is model-invocable, so its description loads in every session.

PASS when the report hides it: a sentence naming `schema-rules` where set, add, put, mark, use, give, turn on, enable or "Change" shares a clause with `disable-model-invocation` (not set to false); a fenced frontmatter snippet with `name: schema-rules` and `disable-model-invocation: true`; or a sentence naming `schema-rules` where move, inline, fold, merge, put or copy shares a clause with the `migrator` subagent. `user-invocable: false` keeps the description loaded and does not count. A fenced block counts when it opens the report or its intro line (the last non-blank line before the fence) isn't negated, hypothetical or declined.

Script-graded (case-insensitive). The parts, and the controls each must pass and fail, are in `tests/test_claudit_fixture_graders.py`; rebuild with `python3 tests/test_claudit_fixture_graders.py --write`. A line never counts when it is a `Source:` citation line or says the change was left out of the plan ("I left it out of the plan", "not recommended", "declined"). The finding's parts must sit in one clause of one sentence that no negation, "rather than" or "instead of" governs ("Don't add X", "No command needs one, including X"); a clause ends at `.` `;` `!` `?` before a space, at "but", "then", "so", "while" or "whereas", at "and" (unless a backticked name follows, as in a list), at a spaced dash, or at a colon before an imperative ("…, but nothing enforces it: add X"). The sentence must not be a question ("why not", or `?` before a space) or hypothetical or optional ("would do it", "could", "might", "you could … if you want", "If the repo had …", a sentence that opens with "If", "optional"), and must not say the fix is already in place or reject the change or report someone else's advice ("this repo doesn't need it", "that is wrong here", "Hold off on …", "Some teams …", "A previous audit …", "I expected … to be …", "Not needed:", "Don't do this:"). A hypothetical or question in another sentence of the line doesn't count against it.

Files in this skill

  • finding-always-loaded-table.md948 B
  • finding-duplicates-grouped.md4.7 KB
  • finding-visible-skill.md11.6 KB
  • structure-alignment.md252 B
  • structure-correctness.md258 B
  • structure-coverage.md249 B
  • structure-footer.md458 B
  • structure-grade-raise.md442 B
  • structure-intent.md262 B
  • structure-plan-items.md1.5 KB
  • structure-plan-length.md3.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.