Audit a linter descriptor YAML for completeness, correctness, and best practices. Checks all properties against the full schema.
allowed-tools
Read Grep Glob Bash WebSearch WebFetch
argument-hint
[descriptor-file-or-linter-name]
model
sonnet
metadata
{"internal":true}
Review the descriptor for $ARGUMENTS. If a linter name is given, find its descriptor in megalinter/descriptors/.
If a linter entry declares extends: <name>, audit the resolved definition: read megalinter/descriptors/shared/<name>.megalinter-linter.yml and apply the entry's overrides on top (shallow merge). Report gaps against the shared file when the property is common to all descriptors, against the entry when it is descriptor-specific.
For each linter entry, audit against the full property list below. Report a checklist with status for each category.
examples — at least 2: one plain, one with config file
2. Documentation Quality
linter_text — rich description with features, what it checks, use cases
linter_repo — GitHub/source repository URL
linter_rules_url — URL listing all rules/checks
linter_rules_configuration_url — how to configure
linter_rules_inline_disable_url — how to suppress inline
linter_rules_ignore_config_url — how to use ignore files
linter_spdx_license — valid SPDX ID (e.g., MIT, Apache-2.0)
linter_speed — rated 1-5 (check if realistic)
linter_image_url or linter_icon_png_url or linter_banner_image_url — at least one image
3. CLI Configuration
cli_lint_mode — default mode: file, list_of_files, or project
supported_cli_lint_modes — all modes the linter supports (must include cli_lint_mode); each listed mode gets its own success/failure test, so don't declare a mode the tool can't actually run in
config_file_name — set if linter uses a config file
cli_config_arg_name — set if config file is used
cli_lint_fix_arg_name — set if linter supports auto-fix
cli_lint_fix_remove_args — set if fix mode requires removing args (e.g., --check)
ignore_file_name + cli_lint_ignore_arg_name — set if linter has ignore files
Excluded directories forwarding — if project is a supported lint mode, exactly ONE mechanism must be declared: cli_lint_mode_project_exclude_arg_name (+ _arg_value template, _separator when a repeated flag overrides, _seed_values when the flag replaces built-in defaults, _config_key when it replaces a config-file list), OR the _ignore_file_* properties, OR _workspace_file_name, OR a manage_excluded_directories_config() class override. Search the internet to confirm flag semantics (path/glob/regex, anchoring, repeatability, config/defaults replacement) — see .claude/rules/descriptors.md for the trap list
If the linter class overrides build_lint_command without calling super(), verify it applies build_project_exclude_arguments() itself in project mode
Poison fixture present in .automation/test/<test_folder>/good/.wireit/ when forwarding is declared (and the folder is not shared with a non-forwarding project linter)
4. Error Parsing
cli_lint_errors_count — set (regex_count, regex_number, regex_sum, total_lines, or sarif)
cli_lint_errors_regex — set and matches actual linter output format
5. SARIF Support
If linter supports SARIF: can_output_sarif: true, cli_sarif_args with {{SARIF_OUTPUT_FILE}}
If not: confirmed that tool doesn't support SARIF output (search the internet to verify)
6. Install & Platforms
install section with proper renovate-compatible # renovate: datasource=... comments
Version explicitly pinned (no @latest in production)
supported_platforms lists linux/amd64 (and linux/arm64 if applicable)
install_override for ARM if install differs by platform
7. IDE Integration
ide.vscode — VS Code extension listed (if one exists; search if unsure)