Borrowing it
Nothing to install: this file belongs to yoheimuta/protolint. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/yoheimuta/protolint/master/.claude/skills/add-lint-rule/SKILL.mdgit clone --depth 1 https://github.com/yoheimuta/protolintWrote 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/skills/yoheimuta/protolint/add-lint-rule)<a href="https://agentmods.dev/skills/yoheimuta/protolint/add-lint-rule"><img src="https://agentmods.dev/badge/skills/yoheimuta/protolint/add-lint-rule/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/yoheimuta/protolint/add-lint-rule"><img src="https://agentmods.dev/badge/skills/yoheimuta/protolint/add-lint-rule.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
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.1 | $0.00052 | $0.00811 |
| Opus 5.5 | $0.00021 | $0.00324 |
| Sonnet 5.5 | $0.00010 | $0.00162 |
| Haiku 4.5 | $0.00005 | $0.00081 |
Grade A, and why
add-lint-rule 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 2mo ago.
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 — 79 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Adding a lint rule
A rule is not done when Apply works — it has to be registered, made
configurable, and documented, or it is invisible to users. Copy the closest
existing rule rather than starting from scratch.
Files to touch
| File | Always? | What goes in |
|---|---|---|
internal/addon/rules/<camelCase>Rule.go |
yes | the rule |
internal/addon/rules/<camelCase>Rule_test.go |
yes | table-driven tests |
internal/cmd/subcmds/rules.go |
yes | register in newAllInternalRules |
internal/linter/config/rulesOption.go |
yes | one field on RulesOption |
README.md |
yes | a row in the ## Rules table |
_example/config/.protolint.yaml |
yes | a commented example entry |
internal/linter/config/<name>Option.go (+ test) |
only if configurable | a dedicated option type |
_testdata/rules/<name>/*.proto |
when fixtures help | input protos |
Naming is mechanical: rule ID FIELD_NUMBERS_ORDER_ASCENDING → type
FieldNumbersOrderAscendingRule → file fieldNumbersOrderAscendingRule.go →
config key field_numbers_order_ascending.
The rule type
Embed RuleWithSeverity and implement:
ID() string—UPPER_SNAKE_CASE, uniquePurpose() string— one sentence; it is user-facing and goes in the README verbatimIsOfficial() bool— this decides whether the rule is on by default
Rules.Default() in internal/linter/rule/rules.go keeps only rules where
IsOfficial() is true. Return true only for rules from the
official style guide; anything
opinionated returns false and users opt in via .protolint.yaml.
Apply(proto *parser.Proto) ([]report.Failure, error) walks the AST with a
visitor from linter/visitor.
Fixable and auto-disable
Both are opt-in and both show up as columns in the README table.
- Fixable — build the visitor with
visitor.NewBaseFixableVisitorand take afixMode boolin the constructor. Users get it via-fix. - AutoDisable — take
autoDisableType autodisable.PlacementType. The constructor must forcefixMode = falsewhenautoDisableType != autodisable.Noop; the two cannot both apply. Users get it via-auto_disable.
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.
- 2mo ago First seen · 79 lines · 52 tokens per session scan A 23fcd8133c10
add-lint-rule is a skill published in the GitHub repository yoheimuta/protolint (697 stars, last pushed 2d ago), licensed MIT. It adds 52 tokens to every session and 811 once invoked, about $0.0002 per session on Opus 5.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-30.
Other skills, from other repositories
golang-refactoring
Golang refactoring — safe, at-scale restructuring of existing Go code: a coverage-adaptive safety net, behavior-preserving transforms (gopls Rename/Extract, gofmt -r, gopatch), the Fowler catalog mapped to Go, breaking import cycles, and small stacked PRs. Apply when a function or type has grown too large, a code…
go-spec-reviewer
Review design specification documents for Go programs before implementation begins. Use this skill when a user has a Go spec, design doc, RFC, or PRD to review, wants feedback on a planned feature in a Go codebase, is about to start implementing from a spec, or asks "is this spec ready?" or "review this before I build…
design-review
Deep design review of Go codebase — naming, structure, consistency, interfaces, error handling. Scores each dimension and provides actionable fixes.
agents-md
Generate AGENTS.md files for Go, Rust, TypeScript, and Java projects. Use this skill whenever the user asks to create, scaffold, bootstrap, update, or review an AGENTS.md (or agent-instructions, CLAUDE.md, repo guide for agents) file in a codebase. Also trigger when the user says "add AGENTS.md", "make this repo…
ring:verifying-code
Verifying a Go project: runs every quality check (lint, vet, imports, format, docs, unit, integration, E2E) and returns a single MERGEREADY or NEEDSFIX verdict. Report-only: never fixes anything. Use for a quick pre-merge or pre-PR check outside a full dev-cycle. Skip when not a Go project, when you want a single…
go-coding-standards
Use when writing or reviewing Go code — explains harness9 project coding conventions and patterns.