Skip to content

AI-Assisted Authoring

Use AI agents to create physically realistic twin models and plant templates. Install the model-author skill and let your agent handle research, signal design, and validation.

AI agents can author .twin.yaml models and .miravo.yaml templates from a natural-language prompt. The model-author skill teaches any compatible agent the full modeling workflow.

Agent Skills CLI:

Terminal window
npx skills add amine-amaach/miravo/skills/model-author

Claude Code:

Terminal window
ln -s /path/to/miravo/skills/model-author ~/.claude/skills/model-author

Codex:

Terminal window
ln -s /path/to/miravo/skills/model-author ~/.codex/skills/model-author

No dependencies. Works with any agent that supports Agent Skills.

Create a twin model for a variable frequency drive controlling an industrial fan
Model a centrifugal pump with hydraulic response and cavitation faults
Write a plant template for a water treatment facility with 3 pumping stages

The agent follows an 8-step workflow: research the physical asset, define parameters, order members by dependency, compose generator chains, design lifecycle and faults, then self-validate against a 25-point checklist.

The skill maps real-world physics to the correct generator type:

Physical PhenomenonGeneratorExample
Setpoint / scheduletimetable or stepDaily pump speed profile
Motor accelerationslew-rate-limiter200 rpm/s up, 320 rpm/s down
Thermal inertiafirst-order-lagBearing temp follows speed (tau 120s)
Process couplingcorrelatedFuel rate = 0.19 * load + 8
Stochastic loadmean-reverting-noiseLoad factor drifts around 0.72 pu
On/off with deadbandhysteresis-relayCompressor load/unload
Multi-signal combinationweighted-sumCurrent = speed*k1 + load*k2
AccumulationintegratorkWh totalizer, tank level
Wear-dependenthealth-dependentVibration increases with lifecycle

A speed-control chain the agent produces for a pump:

speed_setpoint:
kind: variable
data_type: Double
access: readwrite
unit: rpm
eu_range: [0, 3600]
generator:
type: timetable
repeat: true
interpolation: step
points:
- { time: 0, value: 0 }
- { time: 21600, value: 1200 }
- { time: 64800, value: 900 }
- { time: 79200, value: 0 }
speed_reference:
kind: variable
data_type: Double
access: read
unit: rpm
generator:
type: gate
enabled_member: run_command
input: { member: speed_setpoint }
disabled_value: 0
speed_feedback:
kind: variable
data_type: Double
access: read
unit: rpm
eu_range: [0, 1850]
generator:
type: slew-rate-limiter
input: { member: speed_reference }
rate_up: 220
rate_down: 320
min: 0
max: 1850

Motors do not reach full speed instantly (slew-rate-limiter). Process signals are zero when the asset is off (gate).

The agent checks every model against these rules:

  • schema_version: "2" present, members reference only previously declared members
  • No instant temperatures — must use first-order-lag (tau 60-600s)
  • No instant speed changes — must use slew-rate-limiter
  • Lifecycle effects observable above noise (multiplier >= 1.3)
  • gain * rated_input + bias produces expected output
  • factor * source_range stays within eu_range

Generators use linear math. Non-linear physics (pump power cube law, valve flow square root) are approximated with linear factors tuned for the primary operating range. The agent documents these simplifications with YAML comments.