{
  "schemaVersion": "1.0",
  "item": {
    "slug": "roblox",
    "name": "Roblox",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/roblox",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/roblox",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/roblox",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=roblox",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/roblox"
    },
    "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/roblox",
    "agentPageUrl": "https://openagent3.xyz/skills/roblox/agent",
    "manifestUrl": "https://openagent3.xyz/skills/roblox/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/roblox/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": "Server vs Client",
        "body": "Server scripts in ServerScriptService — never trust client data\nLocalScripts in StarterPlayerScripts or StarterGui — client-only\nRemoteEvent for fire-and-forget — RemoteFunction when server needs to return value\nALWAYS validate on server — client can send anything, exploiters will"
      },
      {
        "title": "Security",
        "body": "Never trust client input — validate everything server-side\nServer-side sanity checks — is player allowed? Is value reasonable?\nFilteringEnabled is always on — but doesn't protect your RemoteEvents\nDon't expose admin commands via RemoteEvents — check permissions server-side"
      },
      {
        "title": "DataStore",
        "body": ":GetAsync() and :SetAsync() can fail — wrap in pcall, retry with backoff\nRate limits: 60 + numPlayers × 10 requests/minute — queue writes, batch when possible\n:UpdateAsync() for read-modify-write — prevents race conditions\nSession locking — prevent data loss on rejoin, use :UpdateAsync() with check\nTest with Studio API access enabled — Settings → Security → API Services"
      },
      {
        "title": "Memory Leaks",
        "body": "Connections not disconnected — store and :Disconnect() when done\n:Destroy() instances when removed — sets Parent to nil and disconnects events\nPlayer leaving without cleanup — Players.PlayerRemoving to clean up\nTables holding references — nil out references you don't need"
      },
      {
        "title": "Character Handling",
        "body": "Character may not exist at PlayerAdded — use player.CharacterAdded:Wait() or event\nCharacter respawns = new character — reconnect events on CharacterAdded\nHumanoid.Died fires on death — for death handling logic\nLoadCharacter() to force respawn — but prefer natural respawn usually"
      },
      {
        "title": "Replication",
        "body": "ServerStorage: server-only — clients can't see\nReplicatedStorage: both see — shared modules and assets\nReplicatedFirst: loads first on client — loading screens\nWorkspace replicates to clients — but server is authority"
      },
      {
        "title": "Services Pattern",
        "body": "game:GetService(\"ServiceName\") — don't index directly, fails in different contexts\nCache service references — local Players = game:GetService(\"Players\")\nCommon: Players, ReplicatedStorage, ServerStorage, RunService, DataStoreService"
      },
      {
        "title": "RunService",
        "body": "Heartbeat after physics — most gameplay logic\nRenderStepped client only, before render — camera, visual updates\nStepped before physics — physics manipulation\nAvoid heavy computation every frame — spread over multiple frames"
      },
      {
        "title": "Common Mistakes",
        "body": "wait() deprecated — use task.wait() for reliable timing\nspawn() deprecated — use task.spawn() or task.defer()\nModule require returns cached — same table across requires, changes shared\n:Clone() doesn't fire events — manually fire if needed\nPart collisions with CanCollide false — still fire Touched, use CanTouch"
      }
    ],
    "body": "Server vs Client\nServer scripts in ServerScriptService — never trust client data\nLocalScripts in StarterPlayerScripts or StarterGui — client-only\nRemoteEvent for fire-and-forget — RemoteFunction when server needs to return value\nALWAYS validate on server — client can send anything, exploiters will\nSecurity\nNever trust client input — validate everything server-side\nServer-side sanity checks — is player allowed? Is value reasonable?\nFilteringEnabled is always on — but doesn't protect your RemoteEvents\nDon't expose admin commands via RemoteEvents — check permissions server-side\nDataStore\n:GetAsync() and :SetAsync() can fail — wrap in pcall, retry with backoff\nRate limits: 60 + numPlayers × 10 requests/minute — queue writes, batch when possible\n:UpdateAsync() for read-modify-write — prevents race conditions\nSession locking — prevent data loss on rejoin, use :UpdateAsync() with check\nTest with Studio API access enabled — Settings → Security → API Services\nMemory Leaks\nConnections not disconnected — store and :Disconnect() when done\n:Destroy() instances when removed — sets Parent to nil and disconnects events\nPlayer leaving without cleanup — Players.PlayerRemoving to clean up\nTables holding references — nil out references you don't need\nCharacter Handling\nCharacter may not exist at PlayerAdded — use player.CharacterAdded:Wait() or event\nCharacter respawns = new character — reconnect events on CharacterAdded\nHumanoid.Died fires on death — for death handling logic\nLoadCharacter() to force respawn — but prefer natural respawn usually\nReplication\nServerStorage: server-only — clients can't see\nReplicatedStorage: both see — shared modules and assets\nReplicatedFirst: loads first on client — loading screens\nWorkspace replicates to clients — but server is authority\nServices Pattern\ngame:GetService(\"ServiceName\") — don't index directly, fails in different contexts\nCache service references — local Players = game:GetService(\"Players\")\nCommon: Players, ReplicatedStorage, ServerStorage, RunService, DataStoreService\nRunService\nHeartbeat after physics — most gameplay logic\nRenderStepped client only, before render — camera, visual updates\nStepped before physics — physics manipulation\nAvoid heavy computation every frame — spread over multiple frames\nCommon Mistakes\nwait() deprecated — use task.wait() for reliable timing\nspawn() deprecated — use task.spawn() or task.defer()\nModule require returns cached — same table across requires, changes shared\n:Clone() doesn't fire events — manually fire if needed\nPart collisions with CanCollide false — still fire Touched, use CanTouch"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/roblox",
    "publisherUrl": "https://clawhub.ai/ivangdavila/roblox",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/roblox",
    "downloadUrl": "https://openagent3.xyz/downloads/roblox",
    "agentUrl": "https://openagent3.xyz/skills/roblox/agent",
    "manifestUrl": "https://openagent3.xyz/skills/roblox/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/roblox/agent.md"
  }
}