Custom rule loading is planned for v1.0. The internal v0.1 rule shape is intentionally simple:
interface Rule {
id: string;
title: string;
description: string;
defaultSeverity: Severity;
tags: string[];
appliesTo(context: RuleContext): boolean;
run(context: RuleContext): Finding[] | Promise<Finding[]>;
}Rule IDs are treated as public identifiers because suppressions and baselines depend on stable fingerprints.