/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.
$ npx -y skills add flutter/agent-plugins --skill dart-skills-lint-validation --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/dart-skills-lint-validation
Context preview
The summary Claude sees to decide when to auto-load this skill.
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.
SKILL.md
dart-skills-lint-validation.SKILL.mdname: dart-skills-lint-validation
description: |-
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.
metadata:
internal: true
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`](../dart-skills-lint-setup/SKILL.md). The full rule reference (default severities, diagnostic shapes, fixability) lives in [`RULES.md`](../../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
1. **Run the validator.** 2. **Read the errors.** Each diagnostic names the rule that fired, the offending value, and a suggested fix when one applies. 3. **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. 4. **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()],
);
});
}Related
- [`dart-skills-lint-setup`](../dart-skills-lint-setup/SKILL.md) —
first-time wiring.
- [`RULES.md`](../../RULES.md) — canonical rule reference.
- [`README.md`](../../README.md) — installation, configuration,
integration recipes.
Read more
name: dart-skills-lint-validation description: |- 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. metadata: internal: true
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`](../dart-skills-lint-setup/SKILL.md). The full rule reference (default severities, diagnostic shapes, fixability) lives in [`RULES.md`](../../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
1. **Run the validator.** 2. **Read the errors.** Each diagnostic names the rule that fired, the offending value, and a suggested fix when one applies. 3. **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. 4. **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()],
);
});
}Related
- [`dart-skills-lint-setup`](../dart-skills-lint-setup/SKILL.md) —
first-time wiring.
- [`RULES.md`](../../RULES.md) — canonical rule reference.
- [`README.md`](../../README.md) — installation, configuration,
integration recipes.
Agent plugins for Flutter, maintained by the Flutter team. A collection of plugins designed to extend AI agent capabilities for Flutter development.
Other skills on dart-flutter.
- /dart-add-unit-test
Write and organize unit tests for functions, methods, and classes using `package:test`. Use when creating new logic or fixing bugs to ensure code remains correct and regression-free.
Open skill - /dart-build-cli-app
Entrypoint structure, exit codes, cross-platform scripts. Use when building command line utilities, scripts, or applications.
Open skill - /dart-collect-coverage
Collect coverage using the coverage packge and create an LCOV report
Open skill - /dart-fix-runtime-errors
Uses get_runtime_errors and lsp to fetch an active stack trace, locate the failing line, apply a fix, and verify resolution via hot_reload.
Open skill - /dart-generate-test-mocks
Define and generate mock objects for external dependencies using `package:mockito` and `build_runner`. Use when unit testing classes that depend on complex external services like APIs or databases.
Open skill - /dart-migrate-to-checks-package
Replace the usage of `expect` and similar functions from `package:matcher` to `package:checks` equivalents.
Open skill

