Skip to content

Files tools

Project settings, packaging the game as an app, running it in the real player, and the legal notices.

4 tools in the files category. Badges: read-only tools never change the project; mutating tools are undoable and attributed; open-world tools reach outside the engine and MCP clients ask before running them.

Tool Summary
game_settings Read or change the project's shipping settings in game.json: startScene, window {width,height,fullscreen,resizable,vsync}, quality (low|medium|high|ultra), renderScale, quitOnEscape, pauseOnFocusLoss, icon (a PNG, 1024x1024 recommended), bundleId (reverse-DNS), version, copyright, plus include/exclude globs for packaging, and the description fields (id, title, genre, mood, pitch), and mounts: shared folders outside the project addressed by a top-level name, e.g.
game_build Package the project as a standalone macOS app (Name.app): the player runtime, the scenes, the assets they reference (computed from scenes, prefabs, materials and Wander scripts; all_assets ships everything), scripts, the project's native module (compiled now), Info.plist, an icon made from the game.json icon, and an ad-hoc code signature.
game_run Start the standalone player on the current project as a separate process to try the game like a player would (real window, real input, audio).
legal_info Skywalker's Terms of Use, Privacy Notice and license: their versions and effective dates, MCP resource URIs (skywalker://docs/legal/TERMS, skywalker://docs/legal/PRIVACY, skywalker://docs/LICENSING), whether a person has accepted the current versions on this computer (status current, outdated, not_recorded), and a verified summary of data practices (no telemetry; data leaves the computer only to the AI provider or download URL the human chose).

game_settings

Game settings (game.json) mutating

Read or change the project's shipping settings in game.json: startScene, window {width,height,fullscreen,resizable,vsync}, quality (low|medium|high|ultra), renderScale, quitOnEscape, pauseOnFocusLoss, icon (a PNG, 1024x1024 recommended), bundleId (reverse-DNS), version, copyright, plus include/exclude globs for packaging, and the description fields (id, title, genre, mood, pitch), and mounts: shared folders outside the project addressed by a top-level name, e.g. {"mounts": {"kit": "../_kit"}} makes kit/characters/guard.prefab.json resolve into ../_kit (assets, prefabs, materials and animations load from it; game_build copies what the game uses), and saves {version, maxSlots, compress, migrate} for save games (docs/SAVE_GAMES.md). get returns the effective settings, the resolved start scene and validation problems. set merges the given fields (null removes one) and validates them. Example: {"operation":"set","settings":{"title":"Sky Dash","startScene":"scenes/main.sky.json","window":{"width":1280,"height":720}}}

Argument Type Required Description Values
operation string get (default) or set get set
settings object Fields to merge into game.json (set only)
game_settings {"operation": "set", "settings": {"title": "Sky Dash", "startScene": "scenes/main.sky.json", "window": {"width": 1280, "height": 720}}}
skywalker call game_settings '{"operation": "set", "settings": {"title": "Sky Dash", "startScene": "scenes/main.sky.json", "window": {"width": 1280, "height": 720}}}' --project my_game
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "game_settings",
    "arguments": {
      "operation": "set",
      "settings": {
        "title": "Sky Dash",
        "startScene": "scenes/main.sky.json",
        "window": {
          "width": 1280,
          "height": 720
        }
      }
    }
  }
}

game_build

Build the game as a macOS app mutating open-world

Package the project as a standalone macOS app (Name.app): the player runtime, the scenes, the assets they reference (computed from scenes, prefabs, materials and Wander scripts; all_assets ships everything), scripts, the project's native module (compiled now), Info.plist, an icon made from the game.json icon, and an ad-hoc code signature. Settings come from game.json (see game_settings). Returns the app path, size, file count by type, and warnings (missing assets, no icon). dry_run reports what would ship without writing anything. The app runs on this Mac; distributing it needs a Developer ID signature and notarization (docs/SHIPPING.md). Example: {"out":"/Users/me/Builds","release":true}

Argument Type Required Description Values
out string Folder to write <Name>.app into (outside the project is best; ~/Desktop, ~/Builds)
name string App name (default: game.json title)
icon string PNG path (absolute or project-relative); overrides game.json icon
version string Game version like 1.2.0; overrides game.json
bundle_id string Reverse-DNS bundle identifier; overrides game.json
scene string Start scene override (project-relative)
release boolean Strip the player's symbols for a smaller app (default false)
all_assets boolean Ship every asset in the project, not only referenced ones (use when scripts build paths at run time)
sign boolean Ad-hoc code sign (default true)
build_native boolean Compile and ship native/*.cpp (default true)
dry_run boolean Only list what would ship
game_build {"out": "/Users/me/Builds", "release": true}
skywalker call game_build '{"out": "/Users/me/Builds", "release": true}' --project my_game
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "game_build",
    "arguments": {
      "out": "/Users/me/Builds",
      "release": true
    }
  }
}

game_run

Run the game in the standalone player mutating open-world

Start the standalone player on the current project as a separate process to try the game like a player would (real window, real input, audio). It runs the saved scene file (save first); without scene it uses the open scene or game.json's start scene. Returns the pid and a log file. status shows whether it is still running and its recent output; stop ends it. With capture the player renders one frame to a PNG after frames frames and exits (a screenshot of the real player output). seconds closes the game by itself. app runs a built .app instead. Example: {"action":"start","scene":"scenes/level2.sky.json","width":1280} or {"capture":"/tmp/shot.png","frames":120}

Argument Type Required Description Values
action string start (default), stop, or status start stop status
scene string Scene to start in (project-relative); default: the open scene
app string Run this built .app instead of the project
pid integer stop/status: which player (default: the latest)
fullscreen boolean Start fullscreen
width integer Window width in points
height integer Window height in points
quality string Quality preset override low medium high ultra
seconds number Quit after this many seconds
capture string Write one frame to this PNG and quit
frames integer With capture: frames to run before the capture (default 90)
wait boolean Wait for the player to exit and return its output (default true with capture/seconds)
game_run {"action": "start", "scene": "scenes/level2.sky.json", "width": 1280}
skywalker call game_run '{"action": "start", "scene": "scenes/level2.sky.json", "width": 1280}' --project my_game
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "game_run",
    "arguments": {
      "action": "start",
      "scene": "scenes/level2.sky.json",
      "width": 1280
    }
  }
}

Legal documents and acceptance read-only

Skywalker's Terms of Use, Privacy Notice and license: their versions and effective dates, MCP resource URIs (skywalker://docs/legal/TERMS, skywalker://docs/legal/PRIVACY, skywalker://docs/LICENSING), whether a person has accepted the current versions on this computer (status current, outdated, not_recorded), and a verified summary of data practices (no telemetry; data leaves the computer only to the AI provider or download URL the human chose). Use it to answer licensing or privacy questions, or before advising on shipping. document (terms, privacy, license, licensing) adds that document's full text. Nothing waits for acceptance; a person accepts in the editor or with skywalker legal --accept, never an agent. Example: {"document": "privacy"}.

Argument Type Required Description Values
document string Include this document's full text: terms, privacy, license (the LICENSE file) or licensing (plain-language summary and third-party notices) terms privacy license licensing
legal_info {"document": "privacy"}
skywalker call legal_info '{"document": "privacy"}' --project my_game
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "legal_info",
    "arguments": {
      "document": "privacy"
    }
  }
}