mcpbeat

Dart Skills Lint Validation

flutter/dart-skills-lint-validation

|- Use this skill when you need to validate AI agent skills with dart_skills_lint — running the linter, interpreting failures, fixing violations, and authoring custom rules.

2k tokens
context cost
the whole folder, loaded on every use
2
files
instructions only
0
copies elsewhere
how many repositories repackaged it
2776
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/flutter/agent-plugins --skill dart-skills-lint-validation

What comes with it

3 120 bytes besides the instruction
evals/evals.json

The instruction itself

6 sections, as written by the author

Validating Skills with dart_skills_lint

This skill covers day-to-day use: running the linter, walking

through a failing run, and writing a custom rule when defaults

aren't enough. For first-time wiring (adding the dep, creating the

config file, generating a baseline) see

dart-skills-lint-setup. The

full rule reference (default severities, diagnostic shapes,

fixability) lives in RULES.md.

Running the linter

If dart_skills_lint is in pubspec.yaml:

dart run dart_skills_lint:cli -d .agents/skills

If it's installed globally with dart pub global activate:

dart pub global run dart_skills_lint:cli -d .agents/skills

Run dart run dart_skills_lint:cli --help for the full flag list

(skip the inline duplicate so it never goes stale).

Workflow for a failing run

  • Run the validator.
  • Read the errors. Each diagnostic names the rule that fired,

the offending value, and a suggested fix when one applies.

  • Fix the violations. For fixable rules

(check-absolute-paths, check-trailing-whitespace,

invalid-skill-name), pass --fix to write the corrections

to disk; add --dry-run to preview the diff first.

  • Re-run to confirm the run is clean.

Task progress

  • [ ] Run validator
  • [ ] Read errors
  • [ ] Fix violations (manual or --fix / --fix --dry-run)
  • [ ] Verify clean run

Authoring a custom rule

Extend SkillRule and pass the rule into validateSkills:

import 'package:dart_skills_lint/dart_skills_lint.dart';

class DeprecatedSkillRule extends SkillRule {
  @override
  final String name = 'deprecated-skill';

  @override
  final AnalysisSeverity severity = AnalysisSeverity.warning;

  @override
  Future<List<ValidationError>> validate(SkillContext context) async {
    final errors = <ValidationError>[];
    final yaml = context.parsedYaml;
    if (yaml == null) return errors;

    if (yaml['metadata']?['deprecated'] == true) {
      errors.add(ValidationError(
        ruleId: name,
        severity: severity,
        file: 'SKILL.md',
        message: 'This skill is marked as deprecated.',
      ));
    }
    return errors;
  }
}

Wire it up in a Dart test:

import 'package:dart_skills_lint/dart_skills_lint.dart';
import 'package:test/test.dart';

void main() {
  test('skills pass with deprecated-skill custom rule', () async {
    final config = await ConfigParser.loadConfig();
    expect(
      config.directoryConfigs,
      isNotEmpty,
      reason: 'Configuration directoryConfigs should not be empty.',
    );
    await validateSkills(
      config: config,
      customRules: [DeprecatedSkillRule()],
    );
  });
}
  • dart-skills-lint-setup

first-time wiring.

  • RULES.md — canonical rule reference.
  • README.md — installation, configuration,

integration recipes.

How to use it

Copy the folder

Take flutter/dart-skills-lint-validation from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.