mcpField
S
scenario-roblox-expert

scenario-roblox-expert

github.com/scenario-labs開発1.2k63 回インストール1 日前に更新
リポジトリ

scenario-roblox-expert について

Roblox Studio のエージェントやテクニカルディレクター向けに、証拠に基づく制作・テスト・レビュー手順を定めるスキルです。性能予算、オフライン検査、プレイテスト、画像確認と、Roblox 向け共通 Python ツールキットを組み合わせます。

主な機能

  1. 01証拠に基づく制作・レビュー手順
  2. 02Studio MCP とプレイテストの手順
  3. 03Luau のオフライン検査とテスト
  4. 04フレーム時間と視覚品質の基準
  5. 05Roblox スキル共通の Python ツールキット

活用シーン

  1. 01デバイス予算に沿った Roblox 機能の計画
  2. 02Studio 起動前のスクリプト検査
  3. 03サーバーとクライアントのフレーム時間測定
  4. 04キャプチャによる視覚変更の確認
  5. 05監査済み Roblox Studio 変更の納品

MCP 対応

共通ツールキットを介して Studio 内蔵 MCP サーバーを呼び出し、Roblox のプレースを検査・編集・テストします。ツールのテキストではなく、解析された結果を確認する方針です。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-roblox-expert

インストール後、Claude Code で/scenario-roblox-expertを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
traps.md
scripts/
rbx_check.py
rbx_env.py
rbx_mcp.py
rbx_play.py
rbx_review.py
rbx_run.py
scripts/agentkit/
Audit.luau
lune_audit.luau
Spec.luau
Stats.luau

詳細

Roblox エキスパート(テクニカルディレクターおよびエージェントプロトコル)

対象:scenario-roblox-expert ツールキットを通じて操作する、macOS 上の Roblox Studio(2026 年 10 月ビルド)。

Roblox のエキスパートとしての作業は、証拠に基づいて繰り返すループです。予算を設定し、1 つのステージを作り、測定し、確認し、修正して、次に進みます。マウスを使えないエージェントは、Studio 組み込みの MCP サーバー、オフラインチェック、テキストファイルを使ってこれを進めます。合格とするのは、解析済みの結果に基づく場合だけであり、1 つのシグナルだけで判断することはありません。このスキルは、そのプロトコル、すべての scenario-roblox-* スキルが呼び出す共有ツールキット(scripts/)、そしてチームの構成図です。ここに記載されている兄弟スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください (npx skills add scenario-labs/skills --skill <name>)。無人で作業する場合は、ツールのスキーマに基づいて進め、不足していることを明示してください。

ステータス(2026-10-18): ツールキットは Studio 0.743 で実際に動作し、36 件のライブテストと 16 件のオフラインテストはすべて合格しました(references/procedures.md)。run_headless の実行は保留中です。インタラクティブな Studio がないマシンが必要です。

姿勢(エキスパートならではの違い)

  1. ツールのテキストではなく、解析済みの結果で合格とします。 execute_luau が返すのは最初の戻り値だけであり、print の出力先は Output ログです(確認済み)。rbx_run.run は、チャンクの行番号とともに ok、result、error、output を返します。エージェントが MCP を介して作成したものは何でも「結果を監査」してください(Roblox IAS Q&A、KnFJl6z5UN0 [00:21:23])。
  2. エージェントごとに場所を 1 つにし、一度開いたら、エージェントは閉じません。 自分で開いていないウィンドウでは、決してコードを実行しないでください。サーバーは、ゲームを変更する前にユーザーへの確認を求めます。場所を SIGTERM で終了すると、ウィンドウがハングし、サーバーからすべての Studio が見えなくなりました(確認済み)。場所を閉じるのはオーケストレーターの役割であり、ユーザーの同意が必要です。
  3. 対象環境で、フレーム時間を予算と照らし合わせます。 平均 FPS より、安定したフレーム時間が重要です(Andrew、XLCZfGEm9tU [00:02:12])。トリアージの順序は、動作、実機、フレームレート、Stats、MicroProfiler です(McNeill、rwLEnBtXr30 [00:29:19])。Studio のメモリ表示は「正しくありません」(McNeill、cWDNVvOh4o0 [00:28:25])。ここでは小規模なプレイテストで 3,800 MB と表示されました。
  4. 目で見て、確認もします。 見た目を変更するたびに、固定カメラからキャプチャを取り、image_checks を実行し、変更前と変更後の compare を行って、コンタクトシートを開いてください。感覚は自動化できません(RDC 2026、vumAuOqSmNA [00:29:36])。AI には「自動的にセンスが備わっているわけではありません」(SmartyRBX、da-wHJpNhBo [00:07:35])。
  5. 小さく進め、赤を先に、緑を後にします。 プロンプト 1 つにつき機能は 1 つです(SmartyRBX、0ENeVVC9QT0 [00:10:26])。動作する回答を得たら、セキュリティレビューを行い、死亡とリスポーンをテストしてください(SimTek、-0H6JRtrA2Y [00:03:53, 00:06:42])。まず Spec テストを書き、失敗することを確認します。
  6. Studio を使う前に、テキストファイル、Git、ゲートを用意します。 型エラーと lint エラーを検出する CI ゲートが、「ゲームで起きる問題の 90 パーセント」を捕捉します(CJ_Oyer、gapG2tH-etI [00:12:50])。Git はセーフティネットです(Roblox Learn、v8r1d80DxOY [00:00:45])。単体の luau-analyze ではなく、rbx_check(Roblox 定義を使う luau-lsp)でゲートを設けます。
  7. 何が保持されるかを把握します。 Edit での変更は、誰かが保存するまで開いているセッション内にとどまり、MCP ツールには保存機能がありません。プレイを停止すると、Server の書き込みは消えます(L24、L25)。$ignoreUnknownInstances がない場合、Rojo の再接続によって Studio のみのインスタンスが削除されます(Distracted Games、Zhl_NAPMztY [00:44:28])。
  8. GUI 専用ツールについて、正直に伝えます。 Animation Editor、terrain ブラシ、Avatar Setup、Accessory Fitting Tool、Creator Hub のダッシュボード、公開は GUI で行う手順です。代替手段(Terrain:WriteVoxels、KeyframeSequenceProvider:RegisterKeyframeSequence、AvatarCreationService:ValidateUGCAccessoryAsync)または GUI の手順を案内してください(references/gui-paths.md)。ユーザーの許可なしに、公開、アップロード、Robux の消費をしてはいけません。

チャネル

チャネル用途コスト(実測値)ルール
Studio MCP, Edit (rbx_run.run)スクリプトのビルド、監査、調査、編集1 回あたり 67 ms;初回起動は 18.3 s自分のプレースで使用;1,000 項目ごとにチャンクを返す
Playtest (rbx_play.Playtest)サーバーおよびクライアントのコード、キー、歩行、マウス、プレイキャプチャ準備完了まで 4.2 sサーバー 1 台、クライアント 1 台;例外発生後も停止する
Offline (rbx_check, Lune, lune_audit)Studio の前段階のゲート、CI、純粋ロジックのテスト数秒Lune には物理演算もネットワークもない
Files (Rojo, Script Sync)Git で管理する永続的なコードrojo build は 0.04 sStudio で開いている .rbxl は決して再ビルドしない
Headless RunScript (rbx_run.run_headless)インタラクティブな Studio を使わない CI実行 1 回あたり約 6 sStudio が実行中の場合は拒否する
Open Cloud Luau Execution公開済みのプレースに対する CI アサーション1 分あたり 5 タスクAPI キーとユーザーの許可が必要;物理演算なし、永続化されない

並行実行:rbx_env.place_slot() を通じてプレースを使用できるエージェントは最大 RBX_MAX(デフォルト 3)です。各プレースは約 2.9 GB を使用する独立した Studio プロセスで、すべてのウィンドウが常時レンダリングされます。open_place は、マシン全体で開いているプレースウィンドウが RBX_MAX_PLACES(デフォルト 4)を超えている場合、GPU 使用率または GPU メモリ使用率が 85% を超えている場合、あるいは RAM 使用率が 75% を超えている場合、待機します。実行が終わったら、すぐにプレースを閉じてください。複数の StudioMCP プロキシが 1 つのポートを共有するため、ホストプロキシが切り替わる間、Studio.call は 45 s にわたって再試行します。

まず確認すること

一度だけ確認してから、次を実行します。

  • 対象デバイスと最も性能の低いデバイス(デフォルト:スマートフォン、60 fps、16.67 ms);
  • サーバーあたりのプレイヤー数とジャンル;
  • Rojo、Script Sync、Studio のみのいずれを使用するか;
  • Server Authority またはストリーミングが必要か(新しいプレースでは StreamingEnabled が有効です);
  • エージェント自身のプレースと、成果物。

次に、rbx_env.doctor() と、開始時のプレースに対する Audit.all(game) を実行します。予算、同期ツール、データモデルの計画、担当者を計画に記載します。

エキスパートループ

  1. 数値で要件をまとめる。 デバイスごとの予算、プレイヤー数、メモリ、アートスタイル。GATE:以降のチェックすべてに数値を含めます。
  2. 配置する。 place_slot 内で new_place の後に open_place を一度実行します。GATE:open_places() に表示され、Audit の集計にエラーがないこと。
    • new_place は <dir>/default.project.json を上書きします。dir には自分で用意した新しいフォルダーを指定し、ユーザーのプロジェクトは絶対に指定しないでください。
    • 既存のゲームの場合:開いているウィンドウでの編集内容はディスクに保存されていないため、まずユーザーに保存を依頼します。保存済みの place のコピーをコードビルドとマージし(scenario-roblox-tooling P15、merge_place、任意のリポジトリ)、マージしたものを開いてください。ユーザーのファイルは絶対に開かないでください。
    • 作業ツリーまたはソースのコピーを編集する場合:ユーザーの rojo serve が src/ をウィンドウに同期します。
  3. ベースラインを取る。 Audit、最初は失敗する Spec テスト、固定カメラからのキャプチャ、プレイテストでの Stats.frames。GATE:数値を記録し、シートを開いていること。
  4. 冪等なチャンクまたはファイルを使ってステージを1つ構築し、ドメインごとの作業は担当者に割り当てます(下記)。 開いている place にインスタンスを追加する場合:procedures.md P2。
  5. 測定する。 rbx_check のエラーが0件、Spec がすべて成功、Audit に問題がなく、Server と Client の Stats.frames がフレームゲート内に収まること:p95 はフレーム予算の1.2倍以下(60 fps で20 ms)、最悪値は2倍以下(33.3 ms)。Heartbeat のステップは vsync 間隔の周辺で揺れるため、健全な 60 fps の place では p95 が17.2~17.4 msとなり、16.67 msぎりぎりのゲートでは失敗します。フレーム落ちは約33 msと表示されます。
  6. 見た目とチェックの両方を確認する。 同じカメラを使い、image_checks が ok であること、compare で意図した箇所が変更されていることを確認します。コンタクトシートを開き、オーナーの批評に基づいて評価します。
  7. 先へ進む前に修正する。 変更は一度に1つだけ行います。
  8. 証拠を添えて納品する: Verified(実行した内容、結果ファイル、数値、フレーム)と Assumed(実行していない内容)を記載します。操作感を確かめるため、人がまだプレイする必要のある項目も一覧にします。

ツールキット(scripts/、すべての scenario-roblox-* スキルの契約)

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1].parent / "scenario-roblox-expert" / "scripts"))
モジュール主な呼び出し戻り値
rbx_envdoctor(), new_place(dir, name, template, src), open_place(path), open_places(), place_slot(), machine_load(), wait_for_gpu()dict;Path;バインド済みの Studio;[{id, name}];スロットインデックス;パーセント
rbx_mcpStudio(place=...): .call(tool, args), .luau(code, dm), .capture(png, extra), .studios(), .tools()MCP 結果 dict;テキスト;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 の dict;ツールのテキスト
rbx_checkcheck(paths, code, sourcemap, selene, stylua, solver="both"){ok, errors, warnings, tools};旧ソルバーまたは新ソルバーのタグが付いた指摘
rbx_reviewimage_checks(png), compare(a, b), contact_sheet(pngs, out)フラグと ok;changed_fraction;パス
AgentKitAudit.all(game), Stats.snapshot(), Stats.frames(s), Stats.diff, Spec.new()指摘と集計;数値;{passed, failed, total}

完全なシグネチャ、戻り値の形式、ツール引数については、 references/procedures.md のセクション 1 を参照してください。ドメインコードは各兄弟の scripts/rbx_<domain>.py および scripts/agentkit/<domain>/ に配置します。rbx_env.close_place は オーケストレーター専用で、デフォルトでは拒否されます。

数値

値対象出典
16.67 / 33.33 ms60 / 30 fps のフレームAndrew [00:02:12]
67 msexecute_luau の Edit での 1 回の往復実測、L9
4.2 s / 18.3 sPlaytest の準備完了 / 最初の open_place実測、L13、L3
60 fps、p95 17.5 msStudio の空のテストプレイス、サーバーとクライアント実測、L16、L17
p95 20 ms、最大 33.3 ms60 fps のフレームゲート(予算の 1.2 倍、2 倍)L16、L17 から算出
1.3 GB2 GB のスマートフォンでのクライアントメモリ目標McNeill [00:27:53]
約 1,000task.wait() 前のチャンクあたりのアイテム数ツールの説明
20,000 / 4,000MeshPart あたり / アクセサリーあたりの三角形数仕様ページ
4096 pxプレイスでのテクスチャの最大辺(アクセサリーは 2048)devforum 4316229
1 秒あたり 500、1,000 バイトクライアントのリモートリクエスト数、UnreliableRemoteEvent のペイロードRemoteEvent のリファレンス

品質ゲート

  • 測定可能: rbx_check のエラー数が 0 であること。赤い実行を 1 回行った後、Spec の failed == 0 かつ total > 0 であること。Audit の tally.error == 0 で、非推奨 API がなくなっていること。Stats.frames の p95 と最大値が予算内であること。Playtest 後にコンソールにエラーがないこと。get_studio_state が Edit に戻っていること。
  • 視覚: すべてのキャプチャが image_checks に合格すること。同じカメラで変更前と変更後を撮影すること。最大 1,600 px のコンタクトシートを開いて判定すること。

よくある間違い

間違い症状対処
studio_id がない、またはウィンドウが違う編集内容がユーザーのゲームに反映されるStudio(place=...) で正確な名前を指定する
ツールのテキストや終了コードを信頼する出力が欠落する。エラーがあっても RunScript が 0 で終了するrbx_run のペイロードを使う
Playtest を停止し忘れるEdit のデータモデルが「Play モードでは利用できません」になるwith Playtest(s) を使い、mode() を確認する
Rojo プロジェクトで "Position" を使うパーツが原点に配置され、ビルドの終了コードが 0 になるCFrame(12 個の数値)を使う。new_place が変換する
[ または ( を含む script_grep「一致する項目が見つかりません」% でエスケープする
yield なしで長いチャンクを実行するStudio がフリーズし、MCP が切断されるtask.wait() を使い、1,000 件ずつ処理する
Studio のメモリや FPS をゲート条件にする数値がデバイスと一致しないStats.frames の p95 とデバイステストを使う
マルチクライアントテストを実施したと主張する1 回の MCP Playtest は 1 クライアントのみStudioTestService を使う(ここでは未実行)
GUI スクリプトや Studio への SIGTERMウィンドウが応答しなくなり、サーバー一覧が空になるユーザーに依頼する。シグナルは送らない

ルーティングと引き継ぎ

スキル依頼に次の内容が含まれる場合はこちらにルーティングします
scenario-roblox-architectureプロジェクト構成、クライアントとサーバーの分割、RunContext、サービス、ModuleScripts、フレームワーク、Attributes、タグ
scenario-roblox-luauタスクライブラリ、遅延イベント、型、OOP、バッファー、ネイティブコード、Parallel Luau、コード内のメモリリーク
scenario-roblox-networkingリモート、「エクスプロイター」、「リモートスパム」、検証、レート制限、ネットワーク所有権、Server Authority
scenario-roblox-data「データが保存されない」、DataStores、ProfileStore、移行、MemoryStore、MessagingService、テレポート
scenario-roblox-environment建築、地形、マテリアル、MaterialVariant、ライティング、Atmosphere、空、グレーボックス、モデル単位のストリーミング
scenario-roblox-vfx-audioパーティクル、ビーム、トレイル、フリップブック、ヒットエフェクト、Audio API、サウンド、音楽
scenario-roblox-uiHUD、メニュー、「スマートフォンでUIの表示倍率がおかしい」、ゲームパッド、Input Action System、ローカライズ
scenario-roblox-animationAnimator、トラック、リグ、Blenderアニメーションのインポート、IK、顔、キャラクターコントローラー
scenario-roblox-gameplay戦闘、ヒットボックス、レイキャスト、投射物、「NPCのパスファインディングが動かない」、ゲームループ、乗り物
scenario-roblox-monetizationパス、Developer Products、ProcessReceipt、サブスクリプション、広告、分析、ライブ運用
scenario-roblox-assets「Blenderからインポート」、メッシュ、テクスチャ、SurfaceAppearance、「メッシュの検証に失敗する」、UGC
scenario-roblox-toolingRojo、Wally、Rokit、Selene、StyLua、Lune、CI、Open Cloud、プラグイン、Script Sync
scenario-roblox-performance「ゲームが重い」、MicroProfiler、メモリ、ストリーミング設定、モバイル、公開

分割項目にはそれぞれ担当が1つあり、その担当がパケット内で2つ目のスキルを指定します。

  • ストリーミング:設定はパフォーマンス、モデル単位のモードは環境が担当します。
  • ヒット検証:ルールはネットワーキング、キャストはゲームプレイが担当します。
  • ProcessReceipt:契約はマネタイズ、永続化はデータが担当します。
  • AIメッシュ:取り込みはアセット、配置は環境、再利用の予算はパフォーマンスが担当します。
  • Server Authority:有効化はネットワーキング、BindToSimulation のロジックはゲームプレイが担当します。
  • メモリリーク:診断はパフォーマンス、クリーンアップコードはluauが担当します。

すべての引き継ぎパケットには、配置パスとウィンドウ、チャンネル、数値化した依頼内容、ツールキットの呼び出し、証拠のパス(results JSON、Audit tally、Spec totals、Stats、contact sheet)、検証済みの内容、仮定、未解決の問題、境界を含めます。受け取り側は、それを基に作業を進める前に、証拠の1つを再現します。

Roblox にシナリオアセットを導入する

アセット生成方法配置先
メッシュ、プロップ、キャラクターscenario-3dscenario-roblox-assets(インポート、20,000 トライアングル)、その後 environment
PBR マップ、タイリング可能なマテリアルscenario-texturesscenario-roblox-assets(SurfaceAppearance)、scenario-roblox-environment(MaterialVariant)
スカイボックスscenario-skyboxesscenario-roblox-environment(Sky、6 面)
音楽、SFX、環境音、音声scenario-audioscenario-roblox-vfx-audio(20 MB 未満、7 分、48 kHz)
アイコン、アイテムアート、UI パーツ、デカールscenario-game-assetsscenario-roblox-ui、scenario-roblox-environment
フリップブックのフレームscenario-sprite-animationscenario-roblox-vfx-audio(2x2、4x4、または 8x8 のグリッド)

各アセットはインポート前に確認し(scenario-quality-gate)、インポート後も、受け取り側が評価したキャプチャで確認してください。ファイルをゲームに組み込んでリリースするには、Roblox にアップロードする必要があるため、ユーザーの許可が必要です。

注意点

最初の作業を始める前に references/traps.md を読んでください。2026 年の API の名称変更と置き換え、Studio MCP ツールの情報(is_start、capture_id、datamodel_type "Client"、返信の消失)、プロセス上の危険、Rojo と Script Sync の注意点、バージョン差分に関する最新の修正が記載されています。

参考資料

  • references/procedures.md:ツールキット API の全情報、チャンクのルール、および各手順とそのテスト結果。
  • references/traps.md:現行 Roblox に関する注意点、MCP とファイルパイプラインの注意点、最新の修正。
  • references/expert-notes.md:出典とタイムスタンプ付きの専門家の見解。
  • references/critique.md:エージェントの Roblox 作業と引き継ぎを評価するための基準。
  • references/gui-paths.md:同じ作業を行うための Studio メニューと、GUI のみで行う手順。
  • references/sources.md:認証情報、URL、最適なタイムスタンプを含むすべての情報源。

コメント