Skip to content

Specification

The URML specification lives in github.com/URML-MARS/URML/tree/main/spec, where every layer is versioned independently and tracked in git.

This page is a short index. The canonical text is the markdown in the repository.

Layers

  • Layer 1, Hardware Abstraction. What a robot declares it can do (capability manifest) and the safety envelope under which it operates. Source.
  • Layer 2, Intent Primitives. The core vocabulary: move_to, dock, hover, wait, wait_for, grasp, release, detect, scan, measure, capture, report. Source.
  • Layer 3, Behavior Composition. sequence, branch, parallel, retry, on_error. Source.
  • Layer 4, Natural-Language Interface. The prompt contract for LLMs emitting URML, plus revision semantics. Source.

Profiles

  • Home. Indoor service robots. Adds speak, listen. Source.
  • Drone. UAV operations. Adds take_off, land, return_to_home. Source.
  • Industrial. Cell-based manipulation. Constrains the core primitives with industrial safety semantics. Source.

Decision history

Spec changes go through RFCs. The decision history is at github.com/URML-MARS/URML/tree/main/docs/rfcs. Read RFC-0001 for the process, RFC-0002 for the initial primitive vocabulary, RFC-0003 for the US-federal alignment decision, RFC-0004 for compliance policy enforcement.

Layer-0 substrates

Layer 0 is the substrate URML compiles down to. It is explicitly not part of URML. ROS 2 is the first reference runtime because its community is largest. PX4 is next. AUTOSAR Adaptive, OPC UA Robotics, and vendor SDKs are first-class targets, not afterthoughts. The substrate-neutrality acid test in CLAUDE.md governs every primitive: can it be cleanly implemented on a runtime with zero ROS dependencies?