|-
dart-skills-lint-setup. The
full rule reference (default severities, diagnostic shapes,
fixability) lives in RULES.md.dart_skills_lint is in pubspec.yaml:dart run dart_skills_lint:cli -d .agents/skills
dart pub global activate:dart pub global run dart_skills_lint:cli -d .agents/skills
dart run dart_skills_lint:cli --help for the full flag list
(skip the inline duplicate so it never goes stale).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.--fix / --fix --dry-run)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;
}
}
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();
await validateSkills(
config: config,
customRules: [DeprecatedSkillRule()],
);
});
}
dart-skills-lint-setup —
first-time wiring.RULES.md — canonical rule reference.README.md — installation, configuration,
integration recipes.