Skip to main content
Evaluators are YAML files under evaluators/agent/ or evaluators/mcp/ at the repo root. Adding one needs no code. After adding or editing, run npm run build:catalog to rebuild the skill catalogs.

Minimal evaluator

schema_version: 1
id: system-prompt-leakage
name: System Prompt Leakage
severity: critical # critical | high | medium | low
standards:
  owasp-llm: LLM07
  atlas: AML.T0056
description: One-line summary for judges and contributors
pass_criteria: |-
  - Bullet list of safe behaviors
fail_criteria: |-
  - Bullet list of vulnerable behaviors
patterns:
  - name: Pattern label
    template: Attack prompt text. Use {{placeholder}} for LLM-filled variables.

Fields

FieldRequiredNotes
idYesKebab-case, unique across both catalogs
nameYesDisplay name
severityYescritical, high, medium, low
standardsRecommendedMap of taxonomy key → ID; drives auto-derived suites (omit if unmapped)
pass_criteriaYesInjected verbatim into the judge prompt
fail_criteriaYesInjected verbatim into the judge prompt
patternsFlat layout onlyNon-empty array of { name, template }; omit when using the directory layout
descriptionRecommendedShort summary for docs and skills

Optional fields

FieldPurpose
schema_version1 when set
judge_needs_llmtrue for semantic judgment; false for regex/static checks
applies_to_all_toolsMCP only — generate attacks for every tool in tools/list
judge_hintExtra guidance appended to the judge prompt
surfacesagent, browser, mcp — informational
turn_modesingle or multi — informational; the run config decides at runtime

Standards → auto-derived suites

Setting a standards key automatically includes the evaluator in the matching suite.
KeyExample valuesAuto-derived suite
owasp-llmLLM01LLM10owasp-llm-top10
owasp-mcpMCP01MCP10owasp-mcp-top10
owasp-agenticASI01owasp-agentic-ai
owasp-apiAPI1, API4, …
atlasAML.T0056, …mitre-atlas
eu-ai-actgeneraleu-ai-act-bias
trust-safetygeneral
Don’t use ref: or mitre: keys — the pre-commit hook rejects them on staged evaluator files.

Directory layout for many patterns

When patterns are long or numerous, split them into their own files:
evaluators/agent/<category>/<id>/
  evaluator.yaml      ← all fields except patterns
  patterns/
    <slug>.yaml       ← { name, template }
  <id>.test.yaml      ← { kind: response, pass_case, fail_case }

Validate

npm run validate:skills        # check frontmatter against the Zod schema
npm run build:catalog:check    # verify the catalog is up to date
Both run on pre-commit via Husky. validate:skills checks against the same schema the runtime loader uses, so a passing check means the engine will load your evaluator.