Substring rules live in
internal/rules/catalog_rules.yaml: data, not code. Adding one is a YAML entry plus a corpus fixture. Contributing →
Attack paths (AP001–AP006)
Conclusions about compositions, not observations. Each names two capabilities, the evidence for both, the path hop by hop, the impact and a remediation.
Severity and confidence rules →
Scan rules (MCP)
Trace rules (AT)
Evaluated on recorded sessions; no proxy or runtime dependency. Stateful rules (AT011 error burst, AT013 mass enumeration, AT015 cross-server chain) track state across the whole session.Agent hooks (HOOK000–HOOK005)
Severity
--fail-on (scan and trace) accepts these values.
aspex scan --explain expands every High and Critical finding into WHY, EXPLOIT, IMPACT and CONFIDENCE.
Framework coverage
- OWASP LLM Top 10 2025
- MITRE ATLAS
- CWE
LLM01 Prompt Injection · LLM02 Sensitive Information Disclosure · LLM03 Supply Chain · LLM06 Excessive Agency · LLM08 Excessive Permissions
Contributing a rule
About 15 minutes: a YAML entry incatalog_rules.yaml (or a check function in internal/rules / internal/trace for stateful rules), a positive fixture that must fire and a negative fixture that must not, and a doc entry above. CONTRIBUTING.md →