跳到正文
cccskills
免费在 GitHub 公开

scenario-roblox-expert

Use when an agent builds, fixes or tests anything in Roblox Studio: "make a Roblox game", "Roblox Studio", a Luau script, "my Roblox game lags", agent control of Studio, the Studio MCP server (execute_luau, start_stop_play, screen_capture), Rojo or Script Sync projects, offline Luau checks, playtests driven by code; when the MCP server lists no Studio, a playtest hangs, or 2019 to 2023 Roblox code breaks; or when a Roblox brief (UI, data, networking, combat, monetization, assets, performance) must go to the right scenario-roblox-* specialist.

中文简介正在准备中。当前显示原文说明。

集成工具Blender
查看安装方法

包含的文件(17)

  • SKILL.md20.3 KB
  • references/critique.md2.6 KB
  • references/expert-notes.md5.2 KB
  • references/gui-paths.md6.1 KB
  • references/procedures.md26.3 KB
  • references/sources.md8.8 KB
  • references/traps.md13.7 KB
  • scripts/agentkit/Audit.luau16.3 KB
  • scripts/agentkit/lune_audit.luau719 B
  • scripts/agentkit/Spec.luau3.2 KB
  • scripts/agentkit/Stats.luau3.5 KB
  • scripts/rbx_check.py8.2 KB
  • scripts/rbx_env.py14.2 KB
  • scripts/rbx_mcp.py12.3 KB
  • scripts/rbx_play.py11.7 KB
  • scripts/rbx_review.py9.1 KB
  • scripts/rbx_run.py9.7 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Roblox expert (technical director and agent protocol)

Target: Roblox Studio (October 2026 build) on macOS, driven through the scenario-roblox-expert toolkit.

Expert Roblox work is a loop run against evidence: set the budget, build one stage, measure it, look at it, fix it, advance. An agent without a mouse gets there through Studio's built-in MCP server, offline checks and text files, passing only on a parsed result and never on one signal alone. This skill is that protocol, the shared toolkit every scenario-roblox-* skill calls (scripts/), and the map of the team. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

Status (2026-10-18): the toolkit ran live in Studio 0.743, 36 live tests and 16 offline tests, all pass (references/procedures.md). run_headless is live run pending: it needs a machine with no interactive Studio.

Stance (the expert delta)

  1. Pass on a parsed result, never on tool text. execute_luau returns only the first return value, and prints go to the Output log (observed). rbx_run.run returns ok, result, error, output with your chunk's line numbers. "Audit the results" of anything an agent made over the MCP (Roblox IAS Q&A, KnFJl6z5UN0 [00:21:23]).
  2. One place per agent, opened once, never closed by an agent. Never run code in a window you did not open; the server asks you to confirm with the user before modifying their game. A SIGTERM to a place hung its window and hid every Studio from the server (observed). Closing places belongs to the orchestrator, with the user's agreement.
  3. Frame time against a budget, on the target. Consistent frame time beats average FPS (Andrew, XLCZfGEm9tU [00:02:12]). Triage: works, real device, frame rate, Stats, then MicroProfiler (McNeill, rwLEnBtXr30 [00:29:19]). Studio memory "is incorrect" (McNeill, cWDNVvOh4o0 [00:28:25]): it read 3,800 MB in a small playtest here.
  4. Look AND check. Every visual change gets captures from fixed cameras, image_checks, a before and after compare, and a contact sheet you open. Feel cannot be automated (RDC 2026, vumAuOqSmNA [00:29:36]); AI "doesn't automatically have taste" (SmartyRBX, da-wHJpNhBo [00:07:35]).
  5. Small steps, red before green. One feature per prompt (SmartyRBX, 0ENeVVC9QT0 [00:10:26]). Follow a working answer with a security review, and test death and respawn (SimTek, -0H6JRtrA2Y [00:03:53, 00:06:42]). Write the Spec test first and watch it fail.
  6. Text files, Git, and a gate before Studio. A CI gate on type and lint errors catches "90 percent of what breaks a game" (CJ_Oyer, gapG2tH-etI [00:12:50]); Git is the safety net (Roblox Learn, v8r1d80DxOY [00:00:45]). Gate with rbx_check (luau-lsp with Roblox definitions), not bare luau-analyze.
  7. Know what persists. An Edit change lives in the open session until someone saves, and no MCP tool saves; Server writes vanish when play stops (L24, L25). A Rojo reconnect deletes Studio-only instances without $ignoreUnknownInstances (Distracted Games, Zhl_NAPMztY [00:44:28]).
  8. Be honest about GUI-only tools. The Animation Editor, terrain brushes, Avatar Setup, the Accessory Fitting Tool, Creator Hub dashboards and publishing are GUI steps. Give the substitute (Terrain:WriteVoxels, KeyframeSequenceProvider:RegisterKeyframeSequence, AvatarCreationService:ValidateUGCAccessoryAsync) or the GUI path (references/gui-paths.md). Never publish, upload or spend Robux without the user's go.

Channels

ChannelUse forCost (measured)Rules
Studio MCP, Edit (rbx_run.run)build, audit, inspect, edit scripts67 ms per call; first open 18.3 syour own place; chunks yield every 1,000 items
Playtest (rbx_play.Playtest)Server and Client code, keys, walking, mouse, play capturesready in 4.2 sone server, one client; stops even after an exception
Offline (rbx_check, Lune, lune_audit)gate before Studio, CI, pure-logic testssecondsLune has no physics, no network
Files (Rojo, Script Sync)durable code in Gitrojo build 0.04 snever rebuild a .rbxl that Studio holds open
Headless RunScript (rbx_run.run_headless)CI with no interactive Studioabout 6 s per runrefuses while any Studio runs
Open Cloud Luau ExecutionCI assertions on a published place5 tasks per minuteAPI key and the user's go; no physics, nothing persists

Concurrency: at most RBX_MAX (default 3) agents hold a place through rbx_env.place_slot(). Each place is its own Studio process of about 2.9 GB, and every window renders all the time. open_place waits while RBX_MAX_PLACES (default 4) place windows are open machine-wide, GPU use or GPU memory is above 85%, or RAM is above 75%. Close a place as soon as its run ends. Several StudioMCP proxies share one port, so Studio.call retries for 45 s while the host proxy changes.

Establish first

Ask once, then run:

  • target devices and the lowest one (default: phone, 60 fps, 16.67 ms);
  • players per server and genre;
  • Rojo, Script Sync or Studio-only;
  • whether Server Authority or streaming is wanted (StreamingEnabled is on in new places);
  • which place is the agent's own, and the deliverable.

Then rbx_env.doctor() and an Audit.all(game) of the starting place. Write the budget, sync tool, data model plan and owners into the plan.

The expert loop

  1. Brief in numbers. Budgets per device, players, memory, art style. GATE: every later check has a number.
  2. Place. new_place then open_place inside place_slot, once. GATE: open_places() lists it; Audit tally has no error.
    • new_place overwrites <dir>/default.project.json: dir is a new folder of your own, never the user's project.
    • Existing game: ask the user to save first, since edits in their open window are not on disk. Merge a copy of the saved place with the code build (scenario-roblox-tooling P15, merge_place, any repository) and open the merge, never the user's file.
    • Edit a worktree or copy of their sources: their rojo serve syncs src/ into their window.
  3. Baseline. Audit, Spec tests that fail first, captures from fixed cameras, Stats.frames in a playtest. GATE: numbers recorded, sheet opened.
  4. Build one stage with idempotent chunks or files; route domain work to its owner (below). Adding instances to the open place: procedures.md P2.
  5. Measure. rbx_check 0 errors, Spec all green, Audit clean, Stats.frames on Server and Client within the frame gate: p95 at most 1.2 x the frame budget (20 ms at 60 fps) and worst at most 2 x (33.3 ms). Heartbeat steps jitter around the vsync interval, so a healthy 60 fps place reads p95 17.2 to 17.4 ms and a bare 16.67 ms gate fails it; a dropped frame reads about 33 ms.
  6. Look AND check. Same cameras, image_checks ok, compare changed where it should, contact sheet opened, judged with the owner's critique.
  7. Fix before advancing, one change at a time.
  8. Deliver with evidence: Verified (what ran, result file, numbers, frames) and Assumed (not run). List what a human must still play for feel.

Toolkit (scripts/, the contract for every scenario-roblox-* skill)

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1].parent / "scenario-roblox-expert" / "scripts"))
ModuleMain callsReturns
rbx_envdoctor(), new_place(dir, name, template, src), open_place(path), open_places(), place_slot(), machine_load(), wait_for_gpu()dict; Path; bound Studio; [{id, name}]; slot index; percents
rbx_mcpStudio(place=...): .call(tool, args), .luau(code, dm), .capture(png, extra), .studios(), .tools()MCP result dict; text; Path
rbx_runrun(studio, code, dm="Edit", kit=[...]), run_headless(place, code, kit){ok, result, error, output}
rbx_playPlaytest(studio): .server(code, kit), .client(code, kit), .wait_for, .press(key, hold), .walk_to([x, y, z]), .keys, .mouse, .console, .capture, .moderbx_run dicts; tool text
rbx_checkcheck(paths, code, sourcemap, selene, stylua, solver="both"){ok, errors, warnings, tools}, findings tagged old or new solver
rbx_reviewimage_checks(png), compare(a, b), contact_sheet(pngs, out)flags and ok; changed_fraction; path
AgentKitAudit.all(game), Stats.snapshot(), Stats.frames(s), Stats.diff, Spec.new()findings and tally; numbers; {passed, failed, total}

Full signatures, return shapes and tool arguments: references/procedures.md section 1. Domain code goes in each sibling's scripts/rbx_<domain>.py and scripts/agentkit/<domain>/. rbx_env.close_place is orchestrator-only and refuses by default.

Numbers

ValueRelative toSource
16.67 / 33.33 msframe at 60 / 30 fpsAndrew [00:02:12]
67 msone execute_luau round trip, Editobserved, L9
4.2 s / 18.3 splaytest ready / first open_placeobserved, L13, L3
60 fps, p95 17.5 msempty test place, Server and Client in Studioobserved, L16, L17
p95 20 ms, worst 33.3 msframe gate at 60 fps (1.2 x and 2 x the budget)derived from L16, L17
1.3 GBclient memory target on a 2 GB phoneMcNeill [00:27:53]
about 1,000items per chunk before a task.wait()tool description
20,000 / 4,000triangles per MeshPart / per accessoryspecifications pages
4096 pxmax texture side in places (accessories 2048)devforum 4316229
500 per s, 1,000 bytesclient remote requests; UnreliableRemoteEvent payloadRemoteEvent reference

Quality gates

  • Measurable: rbx_check 0 errors; Spec failed == 0 and total > 0, after one red run; Audit tally.error == 0 and deprecated APIs gone; Stats.frames p95 and worst within budget; console free of errors after a playtest; get_studio_state back in Edit.
  • Visual: every capture passes image_checks; before and after from the same cameras; a contact sheet of at most 1,600 px opened and judged.

Common mistakes

MistakeSymptomFix
no studio_id, or the wrong windowedits land in the user's gameStudio(place=...) binds by exact name
trusting tool text or exit codesprints missing; RunScript exits 0 on errorsrbx_run payload
playtest never stoppedEdit data model "not available in Play mode"with Playtest(s); check mode()
"Position" in a Rojo projectpart at the origin, build exit 0CFrame (12 numbers); new_place converts
script_grep with [ or ("No matches found"escape with %
long chunk without yieldsStudio frozen, MCP dropsbatches of 1,000 with task.wait()
gating on Studio memory or FPSnumbers do not match devicesStats.frames p95; device tests
claiming multi-client testsone MCP playtest is one clientStudioTestService (not yet run here)
GUI scripting or SIGTERM to Studiohung windows, server lists nothingask the user; never signal

Routing and handoffs

SkillRoute here when the brief mentions
scenario-roblox-architectureproject layout, client and server split, RunContext, services, ModuleScripts, frameworks, Attributes and tags
scenario-roblox-luautask library, deferred events, types, OOP, buffers, native code, Parallel Luau, memory leaks in code
scenario-roblox-networkingremotes, "exploiters", "remote spam", validation, rate limits, network ownership, Server Authority
scenario-roblox-data"data not saving", DataStores, ProfileStore, migration, MemoryStore, MessagingService, teleports
scenario-roblox-environmentbuilding, terrain, materials, MaterialVariant, lighting, Atmosphere, sky, graybox, per-model streaming
scenario-roblox-vfx-audioparticles, beams, trails, flipbooks, hit effects, Audio API, sounds, music
scenario-roblox-uiHUD, menus, "UI scales wrong on phone", gamepad, Input Action System, localization
scenario-roblox-animationAnimator, tracks, rigs, Blender animation import, IK, faces, character controllers
scenario-roblox-gameplaycombat, hitboxes, raycasts, projectiles, "NPC pathfinding stuck", game loops, vehicles
scenario-roblox-monetizationpasses, Developer Products, ProcessReceipt, subscriptions, ads, analytics, live ops
scenario-roblox-assets"import from Blender", meshes, textures, SurfaceAppearance, "mesh fails validation", UGC
scenario-roblox-toolingRojo, Wally, Rokit, Selene, StyLua, Lune, CI, Open Cloud, plugins, Script Sync
scenario-roblox-performance"my game lags", MicroProfiler, memory, streaming settings, mobile, publishing

Split items have one owner, which names the second skill in its packet:

  • streaming: settings to performance, per-model modes to environment;
  • hit validation: the rule to networking, the casts to gameplay;
  • ProcessReceipt: the contract to monetization, persistence to data;
  • AI meshes: intake to assets, placement to environment, reuse budgets to performance;
  • Server Authority: enabling to networking, BindToSimulation logic to gameplay;
  • memory leaks: diagnosis to performance, cleanup code to luau.

Every handoff packet carries: place path and window, channel, the brief in numbers, toolkit calls, evidence paths (results JSON, Audit tally, Spec totals, Stats, contact sheet), Verified, Assumed, open issues, and a fence. The receiver reproduces one piece of evidence before building on it.

Scenario assets into Roblox

AssetGenerated withLands in
meshes, props, charactersscenario-3dscenario-roblox-assets (import, 20,000 triangles), then environment
PBR maps, tileable materialsscenario-texturesscenario-roblox-assets (SurfaceAppearance), scenario-roblox-environment (MaterialVariant)
skyboxesscenario-skyboxesscenario-roblox-environment (Sky, six faces)
music, SFX, ambience, voicescenario-audioscenario-roblox-vfx-audio (under 20 MB, 7 minutes, 48 kHz)
icons, item art, UI pieces, decalsscenario-game-assetsscenario-roblox-ui, scenario-roblox-environment
flipbook framesscenario-sprite-animationscenario-roblox-vfx-audio (2x2, 4x4 or 8x8 grids)

Check each asset before import (scenario-quality-gate) and after, in a capture judged by the receiver. Getting any file into a shipped game uploads it to Roblox, so it needs the user's go.

Traps

Read references/traps.md before the first job: the 2026 API renames and replacements, the Studio MCP tool facts (is_start, capture_id, datamodel_type "Client", lost replies), process hazards, Rojo and Script Sync traps, and live corrections to the version deltas.

References

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Handle review comments received on GitHub for the current branch's PR or a given PR number or URL, by triaging each unresolved thread, fixing what is warranted, pushing, and replying in each thread, when asked to address, fix or answer PR comments. Works in any Scenario repository.

中文简介正在准备中。当前显示原文说明。

scenario-labs/skills11012026年10月24日 更新

Generate one short Conventional Commits squash message describing only the net diff between the PR's base and head, set its header as the PR title, validate it with the repository's commitlint and both copy its description to the clipboard and display it, when asked for a squash message. Works in any Scenario repository, whatever its default branch.

中文简介正在准备中。当前显示原文说明。

scenario-labs/skills11012026年10月24日 更新

Refresh the current pull request description from its net changes, following the repository's PR template, when asked to update or write the PR summary. Works in any Scenario repository, whatever its default branch.

中文简介正在准备中。当前显示原文说明。

scenario-labs/skills11012026年10月24日 更新

scenario

免费

Use when connecting an AI agent to Scenario (scenario.com) through MCP, or when a task involves generating images, video, 3D, audio, sprites, textures, or game assets. Also when picking a Scenario model, running a LoRA, refining a generation prompt, uploading reference images, waiting on generation jobs, checking credits or quota, hitting Scenario auth, scope, or Forbidden errors, or setting up mcp.scenario.com in Claude Code, Cursor, VSCode, or another agent.

中文简介正在准备中。当前显示原文说明。

scenario-labs/skills11012026年10月24日 更新

Use when generating or handling 3D assets through the Scenario MCP server, including text-to-3D or image-to-3D meshes, GPT-6 Astra 3D or Claude Opus 5.5 3D, GLB, FBX, OBJ, STL, or VOX files, PBR-textured or game-ready models, voxel models, multi-view reconstruction, editing a mesh by prompt, retexture, remesh, UV unwrap, auto-rigging a biped or quadruped, or retargeting an animation, previewing a mesh in the 3D viewer, or downloading a model for import into Unity, Unreal, Godot, or Blender.

中文简介正在准备中。当前显示原文说明。

scenario-labs/skills11012026年10月24日 更新

Use when generating navigable 3D worlds or Gaussian splat scenes on Scenario via MCP: text-to-world, image-to-world, a 360 panorama or skybox turned into a walkable splat, multi-view photos or a video walkthrough reconstructed as a splat, or one object photo to splat. Keywords: World Labs Marble 1.1, 1.1 Plus, 1.0 Draft, Hunyuan World, HY World, image-to-skybox, skybox-to-splat, multiview-to-splat, TripoSplat, gaussian splatting, 3DGS, spz, world generation, explorable scene, VR.

中文简介正在准备中。当前显示原文说明。

scenario-labs/skills11012026年10月24日 更新

查看 scenario-labs 的全部技能

报告此技能的问题