Agent skill

Glue Live Edit

by vchelaru in vchelaru/FlatRedBall

Glue↔running-game live edit (drag/resize/tweak a live game, changes flow back to Glue).

MITAuto-check passedGame Development

Install Glue Live Edit

skills CLI
$ npx skills add vchelaru/FlatRedBall --skill glue-live-edit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install vchelaru/FlatRedBall glue-live-edit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/vchelaru/FlatRedBall.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/glue-live-edit .claude/skills/glue-live-edit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
glue-live-edit
GitHub stars
578
Token cost
~5.3k tokens
SKILL.md length
2,465 words
Files
1
Skills in repo
32
Repo updated
First seen
Licence
MIT

At a glance

Glue↔running-game live edit (drag/resize/tweak a live game, changes flow back to Glue).

  • Works in 2 steps: Camera.Main.OrthogonalHeight — the FRB… → RenderingLibrary.SystemManagers.Default.R…
  • Game Development work in your project
  • SKILL.md covers Architecture, Connection lifecycle &…, Embedded → Generated: how "the… and Gotchas, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Glue Live Edit is an agent skill from vchelaru/FlatRedBall. Glue↔running-game live edit (drag/resize/tweak a live game, changes flow back to Glue). Triggers: GlueControl, GameConnectionManager, CommandReceiver, VariableAssignmentLogic, EmbeddedCodeManager, ActivityEditMode, edit mode.

Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Game Development. The repository describes itself as: Cross-platform 2D game engine focused on ultimate productivity built in .NET. The licence is MIT.

When your agent uses it

  • Game Development work in your project

Example prompts

  • “/glue-live-edit”

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Camera.Main.OrthogonalHeight — the FRB world camera.
  2. RenderingLibrary.SystemManagers.Default.Renderer.Camera.Zoom + per-layer LayerCameraSettings.Zoom — Gum's own scale factor.

What it can do on your machine

Read from SKILL.md and the folder at commit fa654ab. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Glue Live Edit loads about 5.3k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 2,465 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~5.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from vchelaru/FlatRedBall at commit fa654ab, republished under its MIT licence (© vchelaru). 2,465 words, ~5,279 tokens.

Download SKILL.mdSave it as .claude/skills/glue-live-edit/SKILL.md (or your agent's skills folder).
name
glue-live-edit
description
Glue↔running-game live edit (drag/resize/tweak a live game, changes flow back to Glue). Triggers: GlueControl, GameConnectionManager, CommandReceiver, VariableAssignmentLogic, EmbeddedCodeManager, ActivityEditMode, edit mode.

Glue Live Edit

Lets a user run a game launched by Glue, switch it into edit mode, and move/resize/tweak objects live. Edits push back to Glue for persistence + codegen. This is FRB1-only — not being redesigned for FRB2, so treat its foundation as fixed rather than something to refactor.

Architecture

Two processes talk over two raw TCP sockets on loopback (GameConnectionManager, one per direction), port from CompilerSettings.json (random 8000-8999 per project). Messages are plain text: "{DtoTypeName}:{json payload}".

  • Glue → game: CommandSender.Self.Send(dto) (FRBDK\Glue\GameCommunicationPlugin\GlueControl\CommandSending\CommandSender.cs) serializes a DTO and sends it. Game's CommandReceiver.Receive splits on the first :, reflects over its own HandleDto overloads to find one whose single parameter type name matches, deserializes, and dispatches.
  • Game → Glue (e.g. drag/resize results): the game enqueues onto GlueControlManager.GameToGlueCommands (a ConcurrentQueue); GlueControlManager's socket loop drains it and writes to the gameToGlueSocket.
  • RefreshManager (Glue side) is the hub that decides, for every kind of Glue-side change (new object, renamed element, variable edit, state created, file changed...), whether to push an incremental command or fall back to CreateStopAndRestartTask (kill + rebuild + relaunch the game) when a live update isn't supported.
  • VariableSendingManager turns a Glue property-grid change into GlueVariableSetData DTOs (handles X/Y/Z → RelativeX/Y/Z when attached, collision relationships, tile shape collections, states, etc.) before CommandSender ships them.

The "{DtoTypeName}:{json}" string above is the inner payload. It's wrapped in a JSON Packet {PacketType, Payload} (PacketType "OldDTO") and carried by the actual transport, GameJsonCommunicationPlugin.Common.GameConnectionManager (Common\GameConnectionManager.cs, Glue side) ↔ its embedded twin (Embedded\GameConnectionManager.cs, game side). CommandSender.SendPacketInternal builds the Packet; each direction is a length-prefixed (8-byte size, then ASCII body) blocking send. Connection handshake: game connects two sockets and sends one identifying byte each — 1 = glueToGame, 2 = gameToGlue; Glue's listener Accepts exactly two and routes by that byte.

Connection lifecycle & self-heal (landmine)

Each side runs a 100ms StatusCheck that reconnects (game side) / re-listens (Glue side) whenever the connection is marked dead — but the dead-marking is the bug surface. Both sides track health with a single _isConnected/IsConnected flag that historically was cleared in only one place: the finally of the game→Glue receive loop. A failure on the send direction (glueToGameSocket.Send throwing SocketException 10054 "forcibly closed") did not clear the flag, so StatusCheck never re-listened and every subsequent send hit the same dead socket forever — the classic "live edit connected once, now every Play/Edit switch fails and never recovers." The trigger is usually the other process's reconnect: when the game's receive loop throws, its StartConnecting disposes both sockets before reconnecting, and that dispose is the 10054 the still-"connected" Glue side sees.

Fix pattern (already applied in both GameConnectionManager.cs files): any send-path socket failure calls a ResetConnection(reason) that disposes both sockets and clears the flag, letting the existing StatusCheck re-handshake. Must be symmetric — reset both directions together, because the handshake is order-dependent (byte 1 then byte 2, two accepts); a half-reset desyncs. Diagnostics: the Glue side logs connect/disconnect/reset transitions via PluginManager.CallPluginMethod("Compiler Plugin", "HandleOutput", ...) (game side only reaches Debug.WriteLine, since its output can't cross the broken socket).

Never log or raise a plugin event while holding _lock (Glue side). That log reaches BuildTabView.PrintOutput, and the plugin event reaches arbitrary plugin code — both can end up waiting on the editor's UI thread, while StatusCheck takes the same _lock every 100ms. Background thread holds the lock and waits on the UI thread; UI thread waits on the lock. Glue then freezes with no CPU use, no memory growth, nothing in the output, and a dead close button — indistinguishable from a plain hang, which is why it is expensive to find. Mutate state under the lock, collect the notifications, invoke them after releasing. StatusCheckTask's Task.Delay also needs ConfigureAwait(false): without it the loop resumes on the captured WinForms context and takes the lock on the UI thread in the first place.

The two receive directions need opposite timeout semantics, and one shared Receive helper cannot serve both. The request/response read (SendItemImmediately waiting for the game's reply) must time out, or a game that died mid-request leaves the caller awaiting forever. The inbound game→Glue loop must not — that socket is idle whenever the user is not interacting with the game, so a timeout there tears down a healthy connection and re-handshakes on a fixed period forever, which then drives repeated embedded-game window repositioning (Runner_MoveWindow, GameHostView.ForceRefreshGameArea's deliberate ±1 panel jiggle). If you touch the receive path, check which caller you are changing.

Suspecting a hard-to-repro live-edit bug rather than a socket problem? EmbeddedDiagnosticsLogger (game-side, Embedded\Editing\EditingManager.cs) always runs - no toggle, so a bug that already happened doesn't need logging predicted in advance. It keeps a capped in-memory buffer (Capacity, currently 2000 entries) of every DTO the game receives and its response, click attempts, and selection changes. The Build tab's View Diagnostics Log button fetches the current buffer via GetEmbeddedDiagnosticsLogDto/CommandReceiver.HandleDto, writes it to a fresh timestamped file under %LOCALAPPDATA%\FlatRedBall\Glue\Diagnostics\, and opens it - a snapshot per click, not a continuously-appended file, so it only works while the game is still connected.

Embedded → Generated: how "the editor injects code" works

FRBDK\Glue\GameCommunicationPlugin\GlueControl\Embedded\**\*.cs are the master source templates for the entire runtime live-edit system (command receiver, DTOs, editing manager, variable assignment, models, etc.) — hand-edit these, never the copies.

EmbeddedCodeManager.EmbedAll() (CodeGeneration\EmbeddedCodeManager.cs) copies each listed file into the game project under GlueControl/, converting Editing.Managers.GlueCommands.cs → Editing/Managers/GlueCommands.Generated.cs (dots become path separators, .Generated suffix added). This is what runs on Glux load / whenever live-edit settings change (HandleGluxLoaded, HandlePortOrGenerateCheckedChanged in MainCompilerPlugin.cs). The game project therefore contains a full mirrored copy of the DTOs and runtime logic — there is no shared assembly between Glue and the game.

Landmine: every file in EmbeddedCodeManager.filesToSave is <Compile Remove>d from GameCommunicationPlugin.csproj. They only compile inside a game project, so a clean build of Glue with All.sln proves nothing about them and a typo ships to every live-edit user. Only a game-project build — the BuildSmoke tests that run EmbedAll and compile the output, or launching a sample into edit mode — verifies them.

Gotchas

  • A reply's Succeeded is the only readiness signal; its payload is not. Most HandleDto overloads return void, so a healthy game answers them with an empty body — "did it send anything back?" is not a test for whether the command landed. The game marks a command it cannot dispatch yet (GlueControlManager.Self still null during Game1.Initialize) with GameConnectionManager.NotReadyPayload, which SendItemWithResponse turns into an unsuccessful GeneralResponse. CommandSender.Send<T> additionally fails an empty reply, since a typed caller asked for data.
  • The debug/edit-mode hook is CustomActivityEditMode(), not "CustomDebugActivity." ScreenManager calls Screen.ActivityEditMode() (virtual, Engines\FlatRedBallXNA\FlatRedBall\Screens\Screen.cs) instead of normal Activity while ScreenManager.IsInEditMode is true. Per-element codegen (CodeWriter.GenerateActivityEditMode, FRBDK\Glue\Glue\CodeGeneration\CodeWriter.cs:1422) calls each named object's own ActivityEditMode() and then CustomActivityEditMode() — an empty partial void users can implement in their hand-written partial class, following the normal generated/custom partial-class split.
  • Variable edits during live play are an overlay, not real codegen. Since the game can't reload generated code while running, edited values are applied through GlueControl.Editing.VariableAssignmentLogic.SetVariable (Embedded\Editing\VariableAssignmentLogic.cs) — a large, manually-maintained switch over variable name/type/target-instance-kind (collision relationships, tile shape collections, states, lists, AttachToContainer, etc.) that reflects/screen.ApplyVariables the value onto the live instance. Any variable kind not special-cased here either falls through to generic reflection (works for simple properties) or silently fails to apply — this is the brittleness the user should expect: a new variable type showing up correctly in Glue but not visually updating live almost always means this file needs a new case, not that the DTO plumbing is broken. Actual codegen only happens on the next full rebuild.
  • Adding an object type to live edit takes two halves; creation alone is useless. A case in InstanceLogic.HandleCreateInstanceCommandFromGlueInner's switch makes the instance, but VariableAssignmentLogic.GetRuntimeInstance still has to find it by name — and it searches the FRB managers (SpriteManager.ManagedPositionedObjects, ShapeManager.Visible*, InstanceLogic.Self.*AddedAtRuntime), not the screen's fields, which don't exist until the next rebuild. A type living outside those managers (Camera, in SpriteManager.Cameras) needs its own tracking list and lookup probe or every variable set on it fails.
  • Edits made while no game is connected (mid-build, or during a reconnect) are caught up on connect by Managers\CompiledElementSweep.cs. It compares each element's GlueSourceHash, compiled into the generated code as an AssemblyMetadata attribute, with Glue's current hash. Only element CustomVariables are resent, and only when hot reload is available; it never restarts the game, since a spurious hash mismatch would restart it in a loop.
  • RefreshManager.ShouldRestartOnChange / CreateStopAndRestartTask is the "give up and restart" escape valve. Many Glue-side changes (new variable on an existing type, excluding a variable from a state category, failed object-add/remove round trips) aren't attempted live at all — they just queue a stop+rebuild+relaunch. If a live-edit feature "doesn't work," check whether the relevant RefreshManager/VariableSendingManager handler actually attempts a live push or just restarts.
  • An exception on the Glue side of a variable push kills Glue, not just the push. RefreshManager's ReactTo* handlers are async void, so anything VariableSendingManager.ConvertValue throws (a TypeManager.GetDefaultForType on a non-primitive type, for one) skips the output tab and ends the process; the only trace is the crash-*.log Program.HandleExceptionsUnified writes under %LOCALAPPDATA%\FlatRedBall\Glue\Diagnostics. A "Glue crashes during live edit" report almost always means one of these.
  • A restart is only lossless if the glux already holds the user's full intent. Every CreateStopAndRestartTask call site abandons whatever the in-flight operation had not yet persisted, so anything a live command implies must be written to the glux before the command is sent, never in a success-only branch after it.
  • File-change filtering: RefreshManager.GetIfShouldReactToFileChange explicitly ignores *.Generated.cs/*.Generated.xml changes so that codegen's own file writes don't trigger a feedback loop of restarts.
  • ReactToPlayOrEditSet() (MainCompilerPlugin.cs) fires twice per launch-into-edit-mode — once too early. GameHostController.StartRunInEditMode sets IsEditChecked = true before Compile()/DoRun run (so the toolbar shows edit mode while building), which fires PlayOrEdit's change handler and calls ReactToPlayOrEditSet() while the game process doesn't exist yet — guarded with an IsRunning early-out now, since the real send happens later via Runner_GameStarted. The command-line IsInEditMode= launch arg (Game1GlueControlGenerator.cs) looks like an alternate path but its handling is commented out/dead — the socket DTO is the only mechanism.
Show full SKILL.md (839 more words)Show less

Camera: edit mode vs. game mode

Embedded\Editing\CameraLogic.cs (static class GlueControl.Editing.CameraLogic) is the edit-mode camera controller. It manipulates the same Camera.Main singleton directly (no separate edit-camera object) and saves/restores position+zoom per screen type in a dictionary, so each screen remembers its last edit-mode camera state. Zoom is a discrete lookup table (zoomLevels[], 10000%→5%) driven by mouse wheel / Ctrl+/-; panning is middle-mouse drag or edge-of-window drag-scroll.

Game mode's camera is set up by generated Setup/CameraSetup.Generated.cs (from FRBDK\Glue\Glue\Plugins\EmbeddedPlugins\CameraPlugin\CameraSetupCodeGenerator.cs), not by CameraLogic.cs at all — that class only compiles into live-edit builds.

BehaviorGame modeEdit mode
ZoomFixed at startup (ResetCamera/SetupCamera); only changes via window resize with IncreaseVisibleArea, or an opt-in CameraControllingEntity.ApplyZoom()Freely adjustable — mouse wheel / hotkeys via CameraLogic.UpdateCameraToZoomLevel()
BoundsUnclamped by default; clamping is opt-in per-screen via CameraControllingEntity (needs a Map assigned) — Engines\FlatRedBallXNA\FlatRedBall\Entities\CameraControllingEntity.cs:309-393Always unclamped — no bounds code exists anywhere under GlueControl\Embedded
Aspect ratioFixed per DisplaySettings.AspectRatioWidth/Height; pillarbox/letterbox via CameraSetup.SetAspectRatioTo computing a DestinationRectangle smaller than the backbufferUnconstrained — Glue sends SetCameraAspectRatioDto with AspectRatio = null on entering edit mode (MainCompilerPlugin.cs:851-876), which makes SetAspectRatioTo fill the whole window with no bars

The edit/game aspect-ratio toggle is a one-shot DTO on Play/Edit switch, not a persistent if IsInEditMode check in the render loop — CommandReceiver.HandleDto(SetCameraAspectRatioDto) (Embedded\CommandReceiver.cs:850-863) calls CameraSetup.ResetCamera() once and, if already in edit mode, also CameraLogic.UpdateCameraToZoomLevel().

Gum zoom — high-landmine area, read before touching zoom code

Gum renders UI in its own pixel-space canvas (GraphicalUiElement.CanvasWidth/Height), completely separate from FRB's world-space Camera.Main. This means two independent zoom values must be kept in sync by hand on every camera zoom change:

  1. Camera.Main.OrthogonalHeight — the FRB world camera.
  2. RenderingLibrary.SystemManagers.Default.Renderer.Camera.Zoom + per-layer LayerCameraSettings.Zoom — Gum's own scale factor.

CameraLogic.UpdateCameraToZoomLevel() (Embedded\Editing\CameraLogic.cs:293-359) sets both, then must call CameraSetup.ResetGumResolutionValues() (generated by CameraSetupCodeGenerator.cs:217-310) before setting the zoom, not after — it recomputes CanvasWidth/Height from window size and also resets Renderer.Camera.Zoom with no knowledge of the edit-mode zoom level, so calling it last silently clobbers the zoom just set.

Known landmines, in order of how likely they are to bite:

  • World-space (entity-attached) and HUD/screen-space Gum content now have genuinely independent zoom, edit-mode only, by design. PositionedObjectGueWrapper (see [[gum-integration]]) re-homes any AttachToContainer Gum object onto a dedicated layer pair — FRB FrbEntityAttachmentZoomLayer / Gum FrbEntityAttachmentGumZoomLayer, lazily created by GetOrCreateEntityAttachmentZoomLayer() — the moment ScreenManager.IsInEditMode is true. CameraLogic.UpdateCameraToZoomLevel() only ever sets that one layer's LayerCameraSettings.Zoom; every other Gum layer (MainLayer, HUD layers) is deliberately left untouched, so HUD content never zooms with the editor control. Outside edit mode this layer is never created. The call is gated at GluxVersions.GumWrapperHasEntityAttachmentZoomLayer (73, or REFERENCES_FRB_SOURCE) because the member lives in GumCore.*.dll; EmbeddedVersionGateTests (Roslyn-evaluated, fast) and the ChickenClicker gold test (released NuGet engine) both pin it, and are the pattern for any future engine member an embedded file calls.
  • Anything that later moves an entity-attached GUE onto another layer silently undoes edit-mode zoom tracking, with no way for the wrapper to intercept it. Game code commonly does this itself — e.g. re-parenting a spawned enemy's health bar onto a HUD layer via gue.MoveToFrbLayer(hudLayer, GumIdb.Self) right after spawn. PositionedObjectGueWrapper.UpdateGumObject() defends against this by re-asserting the zoom layer every frame while in edit mode, rather than trusting nothing else to touch the object after construction.
  • The lazily-created entity-attachment FRB layer can land before a screen's own layers in draw order. First construction can happen before the screen finishes creating its own layers (e.g. a darkness/fog overlay), landing it at index 0 and getting covered. EnsureEntityAttachmentFrbLayerDrawsLast() fixes this from the constructor and ScreenManager.ScreenLoaded only — never from the per-frame update path, since mutating SpriteManager's layer list mid-DrawLayers iteration draws the reordered layer twice in one frame.
  • Window resize races the zoom sync. Generated HandleResolutionChange (CameraSetupCodeGenerator.cs:688-706) also calls ResetGumResolutionValues(), but recomputes canvas/zoom from base Data.ResolutionWidth/Height and never reapplies the edit-mode zoom multiplier to the entity-attachment layer — resizing while zoomed can leave world-space content's zoom stale.
  • The shipped/generated CameraLogic.Generated.cs in real projects has historically matched the Embedded template byte-for-byte (verified against a real project) — if you find a project where it doesn't, that diff itself is signal of a manual workaround worth investigating.

Key files

Tests for everything below, including launching a real game over the live-edit socket, are listed in [[test-harnesses]].

SideFilePurpose
GlueGameCommunicationPlugin\GlueControl\MainCompilerPlugin.csPlugin entry point; owns build/run/edit-mode toggle, wires up embedding + codegen on Glux load
GlueManagers\GameHostController.csLaunches the game process, embeds its window in the Game tab, builds run args (IsInEditMode=true, startup screen)
GlueManagers\RefreshManager.csCentral dispatcher: Glue-side change → live command vs. stop/rebuild/restart
GlueManagers\VariableSendingManager.csGlue property-grid change → GlueVariableSetData DTO(s)
GlueCommandSending\CommandSender.csSerializes + sends DTOs, wraps GameConnectionManager socket calls
GlueDtos\Dtos.csGlue-side DTO definitions (mirrored, not shared, with the game copy)
GlueCodeGeneration\EmbeddedCodeManager.csCopies Embedded\*.cs → game's GlueControl\*.Generated.cs
GlueEmbedded\**Master source for everything the game gets — edit these, not the .Generated.cs copies in a game project
Game (generated)GlueControl\GlueControlManager.Generated.csRuntime entry point; owns the socket, the GameToGlueCommands queue, edit-mode state
Game (generated)GlueControl\CommandReceiver.Generated.csDeserializes incoming DTOs by type name, dispatches to HandleDto overloads
Game (generated)GlueControl\Editing\EditingManager.Generated.csSelection, drag/resize input handling, pushes changes into GameToGlueCommands
Game (generated)GlueControl\Editing\VariableAssignmentLogic.Generated.csThe brittle live variable-overlay logic (see Gotchas)
Game (generated)GlueControl\Screens\EntityViewingScreen.Generated.csSandbox screen used when live-editing a single Entity outside any Screen

© vchelaru, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/glue-live-edit of vchelaru/FlatRedBall.

Open the folder on GitHubat commit fa654ab

Compare with similar skills

Glue Live Edit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Glue Live Edit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Glue Live Edit this skillvchelaru/FlatRedBall578—~5.3kAutomated safety check: PassMIT
Image to Three.js Modelimg2threejs/img2threejs18k1 repos~8.2kAutomated safety check: PassApache-2.0
Web CloneJane-xiaoer/claude-skill-web-clone1k1 repos~2.7kAutomated safety check: PassMIT
Threejs Game Directormajidmanzarpour/threejs-game-skills2.5k—~2.2kAutomated safety check: PassMIT
Game Asset Generatorhtdt/godogen7.1k—~2.8kAutomated safety check: PassMIT
Threejs Gameplay Systemsvalkor-ai/loom1.2k1 repos~1.4kAutomated safety check: PassApache-2.0

Similar skills

  • Image to Three.js Model

    img2threejs/img2threejs

    Rebuilds the object in a reference image as a procedural, animation-ready Three.js model written entirely in code, using staged sculpting with quality checks.

    18k GitHub starsUsed in 1 repo~8.2k tokens
    Game DevelopmentAuto-check passed
  • Web Clone

    Jane-xiaoer/claude-skill-web-clone

    网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…

    1k GitHub starsUsed in 1 repo~2.7k tokens
    Game DevelopmentAuto-check passed
  • Threejs Game Director

    majidmanzarpour/threejs-game-skills

    Entrypoint for building, upgrading, and finishing Three.js browser games.

    2.5k GitHub stars~2.2k tokensUpdated 13 days ago
    Game DevelopmentAuto-check passed
  • Generates game art from text prompts: PNG images, GLB 3D models, rigged characters, animations and sprites, with background removal.

    7.1k GitHub stars~2.8k tokensUpdated 9 days ago
    Game DevelopmentAuto-check passed
  • Build and iterate playable Three.js game systems: starter scaffold, architecture, design briefs, core loops, level and encounter design, entities, input, camera, collision and physics, scoring…

    1.2k GitHub starsUsed in 1 repo~1.4k tokens
    Game DevelopmentAuto-check passed
  • Uloop Execute Dynamic Code

    CyberAgentGameEntertainment/NovaShader

    Execute C with Unity APIs when existing uloop tools cannot inspect or edit enough.

    1.6k GitHub starsUsed in 1 repo~1.9k tokens
    Game DevelopmentAuto-check passed

More from vchelaru/FlatRedBall

All 32 skills in this repo
  • Glue Live Game Testing

    vchelaru/FlatRedBall

    Testing GlueControl's embedded runtime (CommandReceiver, GlueControlManager) against a real running game process.

    578 GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Glue Unit Test Bootstrap

    vchelaru/FlatRedBall

    Bootstrapping GlueUnitTests that touch GlueState.Self/GlueCommands.Self/ProjectManager.

    578 GitHub stars~4.3k tokensUpdated today
    Auto-check passed
  • Gluj Versions

    vchelaru/FlatRedBall

    A skill your agent uses when adding, modifying, or reasoning about Gluj/Glux file format versions, the GluxVersions enum, FileVersion checks, or anything that gates behavior on the version of a…

    578 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Gum Codegen

    vchelaru/FlatRedBall

    A skill your agent uses when working on Glue's Gum code generation — adding/removing/version-gating generated properties on Gum standard runtime types (NineSlice, Text, Container, Sprite, etc.), or…

    578 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Release

    vchelaru/FlatRedBall

    FRB1 (engine + Glue) release runbook — gh CLI sequence for Engine.yml/glue.yml, version scheme, release notes.

    578 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Release Notes

    vchelaru/FlatRedBall

    Drafts FRB1 release notes from commits/PRs since the last release.

    578 GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Questions about Glue Live Edit

What does Glue Live Edit do?

Glue↔running-game live edit (drag/resize/tweak a live game, changes flow back to Glue). Glue Live Edit is an agent skill from vchelaru/FlatRedBall. Glue↔running-game live edit (drag/resize/tweak a live game, changes flow back to Glue).

When should I use Glue Live Edit?

Glue Live Edit fits situations like: game Development work in your project.

How do I install Glue Live Edit in Claude Code?

Run `npx skills add vchelaru/FlatRedBall --skill glue-live-edit -a claude-code`. Or copy the skill folder (.claude/skills/glue-live-edit in vchelaru/FlatRedBall) into .claude/skills/glue-live-edit in your project. Claude Code loads it when a task matches its description.

How do I install Glue Live Edit in Codex?

Run `npx skills add vchelaru/FlatRedBall --skill glue-live-edit -a codex`. Or copy the skill folder (.claude/skills/glue-live-edit in vchelaru/FlatRedBall) into .agents/skills/glue-live-edit in your project. Codex loads it when a task matches its description.

Can I use Glue Live Edit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vchelaru/FlatRedBall --skill glue-live-edit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/glue-live-edit, .gemini/skills/glue-live-edit, .github/skills/glue-live-edit and .opencode/skills/glue-live-edit in your project.

What does Glue Live Edit need to run?

SKILL.md names no scripts, command-line tools or credentials: Glue Live Edit is instructions for the agent only.

Does Glue Live Edit access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Glue Live Edit safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Glue Live Edit use?

Glue Live Edit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Glue Live Edit use?

About 5.3k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Glue Live Edit?

Skills that share tags, products or a category with Glue Live Edit: Image to Three.js Model (img2threejs/img2threejs, 18k stars), Web Clone (Jane-xiaoer/claude-skill-web-clone, 1k stars), Threejs Game Director (majidmanzarpour/threejs-game-skills, 2.5k stars) and Game Asset Generator (htdt/godogen, 7.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Glue Live Edit?

vchelaru (a GitHub user) maintains it in vchelaru/FlatRedBall, which has 578 GitHub stars. The repository holds 32 skills in this directory. The repository was last updated on October 10, 2026.

Source: vchelaru/FlatRedBall on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.