Skip to content

Writing CRML models

This guide describes how to author CRML inputs in this repo’s document-oriented format.

Start here if you are new:


The core split: scenario vs portfolio

  • A scenario (crml_scenario: "1.0") describes one risk model (frequency + severity + optional referenced controls).
  • A portfolio (crml_portfolio: "1.0") describes exposure (assets, cardinalities) and binds scenarios to assets.

Schemas:


Minimal scenario

crml_scenario: "1.0"
meta:
  name: "phishing"
scenario:
  frequency:
    basis: per_organization_per_year
    model: poisson
    parameters: {lambda: 0.1}
  severity:
    model: lognormal
    parameters: {median: 22000, currency: USD, sigma: 1.0}

Exposure scaling

If you want “per asset unit per year” semantics, set:

  • scenario.frequency.basis: per_asset_unit_per_year

Then bind the scenario to portfolio assets so exposure cardinality E is defined.

The portable rules are specified here:


Controls

Scenarios can reference controls by id; portfolios provide measured values for those ids.

See:


Validate early

Use validation frequently while authoring:

crml-lang validate my.yaml

See: Validation