When to use
Use this skill any time the task involves attaching domain-specific data outside the Core/Layout vocabulary: industrial machinery, materials, MEP systems, site context, or vendor metadata (Autodesk/Revit families, APS URNs). If the data fits a Core entity directly (e.g. a Furniture placement), keep it in Core — don't reach for an extension.
Key types
Extensionenvelope — top-levelextensionsdictionary keyed by extension nameMachinery— industrial equipment with multi-axis rotation and CAD geometry sourceMaterial— material definitions referenced by id from Core/Layout entitiesSite— site context (boundaries, orientation, surroundings)AutodeskMetadata— Revit family names, APS URNs, vendor-specific identifiers
Critical rules
- Dictionary format in OAS 1.1.0+ —
"extensions": { "oas-machinery": { "version": "..." }, "oas-autodesk": { ... } }. Parsers must still accept the legacy array form, but new documents should emit the dictionary. - Furniture and 3D fields are no longer extensions — they moved into Core.
oas-furniture(position, rotation, dimensions, in_room) andoas-3d(wall_height_mm, base_offset_mm, top_profile_points, etc.) are deprecated extension names. Put these fields directly on Core entities; do not declare"oas-furniture"inextensions. - Versioned per extension. Each extension block carries its own
versionfield independent of the OAS document version. Semver applies. - Machinery has three independent rotation axes —
rotation_deg(Z, the default),rotation_x_deg,rotation_y_deg. Separate fields in degrees; don't fold them into one. - Machinery ids must be globally unique across the entire document, not just within the machinery array.
geometry_refvsgeometry_source. Baseoas-machineryuses a simplegeometry_refURI/path string. Whenoas-autodeskis also active, machinery may carry the structuredgeometry_sourceobject (urn,external_id,item_id,file_name,is_y_up,import_mode,mesh_quality) for APS Model Derivative / ACC imports.- Vendor-specific names live in their extension, not in Core. Revit
revit_family/revit_type, APSexternal_id, etc., go underoas-autodesk, never inline on CoreWall.type_name. - Extensions may not override Core invariants — no decimal coordinates, no redefining Room/Wall/Opening, no breaking the mm-integer rule.
Full schema
See docs/extensions.md for the full reference, including the dictionary envelope, per-extension schemas (machinery, autodesk, MEP, materials, site), and the 1.0→1.1 migration notes.
Related skills
oas-core— the document an extension augmentsoas-layout— extensions also attach to resolved layouts (e.g. machinery placed on a floor)