{
  "schemaVersion": "1.0",
  "item": {
    "slug": "mml",
    "name": "Mml",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/honeybee1130/mml",
    "canonicalUrl": "https://clawhub.ai/honeybee1130/mml",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/mml",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mml",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/elements.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/mml"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/mml",
    "agentPageUrl": "https://openagent3.xyz/skills/mml/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mml/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mml/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "MML (Metaverse Markup Language)",
        "body": "Full compiled reference: /home/ubuntu/.openclaw/workspace/research/mml-reference.md\nSource: mml.io + DashBODK Studio (dashbodk.vercel.app/docs). All elements, attrs, events, collision patterns.\n\nMML is an HTML-like markup language for building 3D scenes. Documents are served via WebSocket and rendered by clients (Web/Three.js or Unreal Engine). MML supports scripting via inline <script> tags (standard DOM APIs)."
      },
      {
        "title": "Key Concepts",
        "body": "Units: Positions in meters, rotations in degrees, font sizes in centimeters\nCoordinate system: x (right), y (up), z (forward)\nCommon attributes: All visible elements share x y z rx ry rz sx sy sz visible id class\nCollision system: Set collision-interval (ms) on an element to receive collisionstart, collisionmove, collisionend events\nDocument time: Animations and media use document lifecycle time (ms since document start)\nScripting: Standard DOM manipulation via <script> tags. Use document.getElementById(), addEventListener(), setAttribute(), etc."
      },
      {
        "title": "Elements Quick Reference",
        "body": "ElementPurposeKey Attrsm-groupContainer, transforms children as unit(transform only)m-cube3D boxwidth height depth color opacitym-sphere3D sphereradius color opacitym-cylinder3D cylinderradius height color opacitym-planeFlat surfacewidth height color opacitym-modelLoad 3D model (GLTF/OBJ/FBX)src anim-src anim-loop anim-enabled start-time pause-timem-character3D character (composable with m-model children)src anim-src anim-loop anim-enabled start-time pause-timem-lightPoint or spotlighttype intensity distance angle enabled cast-shadows colorm-imageDisplay image in 3Dsrc width height emissive opacitym-videoDisplay video in 3D (supports WHEP streaming)src width height emissive loop enabled volume start-time pause-timem-audioSpatial audiosrc loop loop-duration enabled volume cone-angle cone-falloff-angle start-time pause-timem-labelText on a planecontent width height font-size font-color padding alignment color emissivem-frameEmbed another MML documentsrc min-x max-x min-y max-y min-z max-z load-range unload-rangem-linkClickable link (no visual)href targetm-promptUser text input on clickmessage placeholder prefill onpromptm-interactionAction at a point in spacerange in-focus line-of-sight priority prompt oninteractm-position-probeTrack user positionsrange interval onpositionenter onpositionmove onpositionleavem-chat-probeReceive chat messagesrange onchatm-attr-animKeyframe animation (doc-time synced)attr start end start-time pause-time duration loop easing ping-pong ping-pong-delaym-attr-lerpSmooth attribute transitionsattr duration easing"
      },
      {
        "title": "Basic scene with transforms",
        "body": "<m-group x=\"0\" y=\"1\" z=\"-5\">\n  <m-cube color=\"red\" width=\"2\" height=\"0.5\" depth=\"2\"></m-cube>\n  <m-sphere color=\"blue\" radius=\"0.3\" y=\"1\"></m-sphere>\n</m-group>"
      },
      {
        "title": "Animation (looping rotation)",
        "body": "<m-cube color=\"green\" y=\"2\">\n  <m-attr-anim attr=\"ry\" start=\"0\" end=\"360\" duration=\"3000\" loop=\"true\"></m-attr-anim>\n</m-cube>"
      },
      {
        "title": "Smooth transitions on attribute changes",
        "body": "<m-cube id=\"box\" color=\"red\" y=\"1\">\n  <m-attr-lerp attr=\"x,y,z\" duration=\"500\" easing=\"easeInOutQuad\"></m-attr-lerp>\n</m-cube>"
      },
      {
        "title": "Click interaction",
        "body": "<m-cube id=\"btn\" color=\"blue\" onclick=\"\n  this.setAttribute('color', this.getAttribute('color') === 'blue' ? 'red' : 'blue');\n\"></m-cube>"
      },
      {
        "title": "Collision detection",
        "body": "<m-cube id=\"platform\" width=\"5\" height=\"0.2\" depth=\"5\" color=\"green\" collision-interval=\"100\">\n</m-cube>\n<script>\n  const platform = document.getElementById(\"platform\");\n  platform.addEventListener(\"collisionstart\", (e) => {\n    platform.setAttribute(\"color\", \"yellow\");\n  });\n  platform.addEventListener(\"collisionend\", (e) => {\n    platform.setAttribute(\"color\", \"green\");\n  });\n</script>"
      },
      {
        "title": "Position tracking",
        "body": "<m-position-probe id=\"probe\" range=\"20\" interval=\"500\"></m-position-probe>\n<m-label id=\"info\" content=\"Waiting...\" y=\"3\" width=\"3\" height=\"1\"></m-label>\n<script>\n  const probe = document.getElementById(\"probe\");\n  const info = document.getElementById(\"info\");\n  probe.addEventListener(\"positionenter\", (e) => {\n    info.setAttribute(\"content\", `User ${e.detail.connectionId} entered`);\n  });\n</script>"
      },
      {
        "title": "Load 3D model with animation",
        "body": "<m-model src=\"https://example.com/character.glb\" \n         anim-src=\"https://example.com/dance.glb\"\n         anim-loop=\"true\" y=\"0\" sx=\"1\" sy=\"1\" sz=\"1\">\n</m-model>"
      },
      {
        "title": "Composing documents with m-frame",
        "body": "<m-frame src=\"https://example.com/other-scene.html\" \n         x=\"10\" y=\"0\" z=\"0\"\n         min-x=\"-5\" max-x=\"5\" min-y=\"0\" max-y=\"10\" min-z=\"-5\" max-z=\"5\">\n</m-frame>"
      },
      {
        "title": "Spatial audio",
        "body": "<m-audio src=\"https://example.com/music.mp3\" \n         loop=\"true\" volume=\"0.5\" \n         x=\"0\" y=\"2\" z=\"0\">\n</m-audio>"
      },
      {
        "title": "Chat-reactive elements",
        "body": "<m-chat-probe id=\"chat\" range=\"10\"></m-chat-probe>\n<m-label id=\"msg\" content=\"\" y=\"3\" width=\"4\" height=\"1\"></m-label>\n<script>\n  document.getElementById(\"chat\").addEventListener(\"chat\", (e) => {\n    document.getElementById(\"msg\").setAttribute(\"content\", e.detail.message);\n  });\n</script>"
      },
      {
        "title": "Easing Functions",
        "body": "Available for m-attr-anim and m-attr-lerp:\neaseInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint, easeInSine, easeOutSine, easeInOutSine, easeInExpo, easeOutExpo, easeInOutExpo, easeInCirc, easeOutCirc, easeInOutCirc, easeInElastic, easeOutElastic, easeInOutElastic, easeInBack, easeOutBack, easeInOutBack, easeInBounce, easeOutBounce, easeInOutBounce\n\nOmit easing for linear interpolation."
      },
      {
        "title": "Events Reference",
        "body": "EventSourceKey PropertiesclickAny clickable elementdetail.connectionId, detail.positioncollisionstartElements with collision-intervaldetail.connectionId, detail.positioncollisionmoveElements with collision-intervaldetail.connectionId, detail.positioncollisionendElements with collision-intervaldetail.connectionIdpositionenterm-position-probedetail.connectionId, detail.position, detail.rotationpositionmovem-position-probedetail.connectionId, detail.position, detail.rotationpositionleavem-position-probedetail.connectionIdchatm-chat-probedetail.message, detail.connectionIdinteractm-interactiondetail.connectionIdpromptm-promptdetail.value, detail.connectionIdconnected / disconnectedDocument-leveldetail.connectionId"
      },
      {
        "title": "Platform Support",
        "body": "Most elements work on both Web and Unreal. Notable exceptions:\n\nm-link: Web only\nm-attr-lerp: Web only\nm-frame bounds/load-range: Web only\nsocket attribute: Web only"
      },
      {
        "title": "Full Element Docs",
        "body": "For detailed attribute lists per element, see references/elements.md."
      }
    ],
    "body": "MML (Metaverse Markup Language)\n\nFull compiled reference: /home/ubuntu/.openclaw/workspace/research/mml-reference.md Source: mml.io + DashBODK Studio (dashbodk.vercel.app/docs). All elements, attrs, events, collision patterns.\n\nMML is an HTML-like markup language for building 3D scenes. Documents are served via WebSocket and rendered by clients (Web/Three.js or Unreal Engine). MML supports scripting via inline <script> tags (standard DOM APIs).\n\nKey Concepts\nUnits: Positions in meters, rotations in degrees, font sizes in centimeters\nCoordinate system: x (right), y (up), z (forward)\nCommon attributes: All visible elements share x y z rx ry rz sx sy sz visible id class\nCollision system: Set collision-interval (ms) on an element to receive collisionstart, collisionmove, collisionend events\nDocument time: Animations and media use document lifecycle time (ms since document start)\nScripting: Standard DOM manipulation via <script> tags. Use document.getElementById(), addEventListener(), setAttribute(), etc.\nElements Quick Reference\nElement\tPurpose\tKey Attrs\nm-group\tContainer, transforms children as unit\t(transform only)\nm-cube\t3D box\twidth height depth color opacity\nm-sphere\t3D sphere\tradius color opacity\nm-cylinder\t3D cylinder\tradius height color opacity\nm-plane\tFlat surface\twidth height color opacity\nm-model\tLoad 3D model (GLTF/OBJ/FBX)\tsrc anim-src anim-loop anim-enabled start-time pause-time\nm-character\t3D character (composable with m-model children)\tsrc anim-src anim-loop anim-enabled start-time pause-time\nm-light\tPoint or spotlight\ttype intensity distance angle enabled cast-shadows color\nm-image\tDisplay image in 3D\tsrc width height emissive opacity\nm-video\tDisplay video in 3D (supports WHEP streaming)\tsrc width height emissive loop enabled volume start-time pause-time\nm-audio\tSpatial audio\tsrc loop loop-duration enabled volume cone-angle cone-falloff-angle start-time pause-time\nm-label\tText on a plane\tcontent width height font-size font-color padding alignment color emissive\nm-frame\tEmbed another MML document\tsrc min-x max-x min-y max-y min-z max-z load-range unload-range\nm-link\tClickable link (no visual)\thref target\nm-prompt\tUser text input on click\tmessage placeholder prefill onprompt\nm-interaction\tAction at a point in space\trange in-focus line-of-sight priority prompt oninteract\nm-position-probe\tTrack user positions\trange interval onpositionenter onpositionmove onpositionleave\nm-chat-probe\tReceive chat messages\trange onchat\nm-attr-anim\tKeyframe animation (doc-time synced)\tattr start end start-time pause-time duration loop easing ping-pong ping-pong-delay\nm-attr-lerp\tSmooth attribute transitions\tattr duration easing\nCommon Patterns\nBasic scene with transforms\n<m-group x=\"0\" y=\"1\" z=\"-5\">\n  <m-cube color=\"red\" width=\"2\" height=\"0.5\" depth=\"2\"></m-cube>\n  <m-sphere color=\"blue\" radius=\"0.3\" y=\"1\"></m-sphere>\n</m-group>\n\nAnimation (looping rotation)\n<m-cube color=\"green\" y=\"2\">\n  <m-attr-anim attr=\"ry\" start=\"0\" end=\"360\" duration=\"3000\" loop=\"true\"></m-attr-anim>\n</m-cube>\n\nSmooth transitions on attribute changes\n<m-cube id=\"box\" color=\"red\" y=\"1\">\n  <m-attr-lerp attr=\"x,y,z\" duration=\"500\" easing=\"easeInOutQuad\"></m-attr-lerp>\n</m-cube>\n\nClick interaction\n<m-cube id=\"btn\" color=\"blue\" onclick=\"\n  this.setAttribute('color', this.getAttribute('color') === 'blue' ? 'red' : 'blue');\n\"></m-cube>\n\nCollision detection\n<m-cube id=\"platform\" width=\"5\" height=\"0.2\" depth=\"5\" color=\"green\" collision-interval=\"100\">\n</m-cube>\n<script>\n  const platform = document.getElementById(\"platform\");\n  platform.addEventListener(\"collisionstart\", (e) => {\n    platform.setAttribute(\"color\", \"yellow\");\n  });\n  platform.addEventListener(\"collisionend\", (e) => {\n    platform.setAttribute(\"color\", \"green\");\n  });\n</script>\n\nPosition tracking\n<m-position-probe id=\"probe\" range=\"20\" interval=\"500\"></m-position-probe>\n<m-label id=\"info\" content=\"Waiting...\" y=\"3\" width=\"3\" height=\"1\"></m-label>\n<script>\n  const probe = document.getElementById(\"probe\");\n  const info = document.getElementById(\"info\");\n  probe.addEventListener(\"positionenter\", (e) => {\n    info.setAttribute(\"content\", `User ${e.detail.connectionId} entered`);\n  });\n</script>\n\nLoad 3D model with animation\n<m-model src=\"https://example.com/character.glb\" \n         anim-src=\"https://example.com/dance.glb\"\n         anim-loop=\"true\" y=\"0\" sx=\"1\" sy=\"1\" sz=\"1\">\n</m-model>\n\nComposing documents with m-frame\n<m-frame src=\"https://example.com/other-scene.html\" \n         x=\"10\" y=\"0\" z=\"0\"\n         min-x=\"-5\" max-x=\"5\" min-y=\"0\" max-y=\"10\" min-z=\"-5\" max-z=\"5\">\n</m-frame>\n\nSpatial audio\n<m-audio src=\"https://example.com/music.mp3\" \n         loop=\"true\" volume=\"0.5\" \n         x=\"0\" y=\"2\" z=\"0\">\n</m-audio>\n\nChat-reactive elements\n<m-chat-probe id=\"chat\" range=\"10\"></m-chat-probe>\n<m-label id=\"msg\" content=\"\" y=\"3\" width=\"4\" height=\"1\"></m-label>\n<script>\n  document.getElementById(\"chat\").addEventListener(\"chat\", (e) => {\n    document.getElementById(\"msg\").setAttribute(\"content\", e.detail.message);\n  });\n</script>\n\nEasing Functions\n\nAvailable for m-attr-anim and m-attr-lerp: easeInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint, easeInSine, easeOutSine, easeInOutSine, easeInExpo, easeOutExpo, easeInOutExpo, easeInCirc, easeOutCirc, easeInOutCirc, easeInElastic, easeOutElastic, easeInOutElastic, easeInBack, easeOutBack, easeInOutBack, easeInBounce, easeOutBounce, easeInOutBounce\n\nOmit easing for linear interpolation.\n\nEvents Reference\nEvent\tSource\tKey Properties\nclick\tAny clickable element\tdetail.connectionId, detail.position\ncollisionstart\tElements with collision-interval\tdetail.connectionId, detail.position\ncollisionmove\tElements with collision-interval\tdetail.connectionId, detail.position\ncollisionend\tElements with collision-interval\tdetail.connectionId\npositionenter\tm-position-probe\tdetail.connectionId, detail.position, detail.rotation\npositionmove\tm-position-probe\tdetail.connectionId, detail.position, detail.rotation\npositionleave\tm-position-probe\tdetail.connectionId\nchat\tm-chat-probe\tdetail.message, detail.connectionId\ninteract\tm-interaction\tdetail.connectionId\nprompt\tm-prompt\tdetail.value, detail.connectionId\nconnected / disconnected\tDocument-level\tdetail.connectionId\nPlatform Support\n\nMost elements work on both Web and Unreal. Notable exceptions:\n\nm-link: Web only\nm-attr-lerp: Web only\nm-frame bounds/load-range: Web only\nsocket attribute: Web only\nFull Element Docs\n\nFor detailed attribute lists per element, see references/elements.md."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/honeybee1130/mml",
    "publisherUrl": "https://clawhub.ai/honeybee1130/mml",
    "owner": "honeybee1130",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/mml",
    "downloadUrl": "https://openagent3.xyz/downloads/mml",
    "agentUrl": "https://openagent3.xyz/skills/mml/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mml/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mml/agent.md"
  }
}