Agent skill

Glue Project Codegen

by vchelaru in vchelaru/FlatRedBall

Glue's .gluj/.glsj/.glej project JSON format and how it drives Screen/Entity .Generated.cs code generation.

MITAuto-check passedDevelopment

Install Glue Project Codegen

skills CLI
$ npx skills add vchelaru/FlatRedBall --skill glue-project-codegen -a claude-code

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

GitHub CLI
$ gh skill install vchelaru/FlatRedBall glue-project-codegen --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-project-codegen .claude/skills/glue-project-codegen && 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-project-codegen
GitHub stars
578
Token cost
~2.4k tokens
SKILL.md length
952 words
Files
1
Skills in repo
32
Repo updated
First seen
Licence
MIT

At a glance

Glue's .gluj/.glsj/.glej project JSON format and how it drives Screen/Entity .Generated.cs code generation.

  • Tasks that involve Project scaffolding
  • SKILL.md covers File formats, Serialization gotchas…, JSON → generated code pipeline and Runtime-testing generated code, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Glue Project Codegen is an agent skill from vchelaru/FlatRedBall. Glue's .gluj/.glsj/.glej project JSON format and how it drives Screen/Entity .Generated.cs code generation. Triggers: GlueProjectSave, ScreenSave, EntitySave, NamedObjectSave, CustomVariable, CodeWriter, ElementComponentCodeGenerator, .gluj, .glsj, .glej, .glux.

Its SKILL.md is about 2.4k 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 Development, covering Project scaffolding. 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

  • Tasks that involve Project scaffolding

Example prompts

  • “/glue-project-codegen”

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 Project Codegen loads about 2.4k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 952 words of instructions outside code blocks.

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

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). 952 words, ~2,435 tokens.

Download SKILL.mdSave it as .claude/skills/glue-project-codegen/SKILL.md (or your agent's skills folder).
name
glue-project-codegen
description
Glue's .gluj/.glsj/.glej project JSON format and how it drives Screen/Entity .Generated.cs code generation. Triggers: GlueProjectSave, ScreenSave, EntitySave, NamedObjectSave, CustomVariable, CodeWriter, ElementComponentCodeGenerator, .gluj, .glsj, .glej, .glux.
version
1.0.0

Glue Project JSON → Generated Code

File formats

ExtensionContentsFormat
.gluxLegacy single-file project (whole project inline)XML (System.Xml.Serialization)
.glujCurrent root project file (Screens/Entities referenced by name once split)JSON (Newtonsoft.Json)
.glsjOne file per ScreenJSON
.glejOne file per EntityJSON
*.generated.glux/*.generated.glujPlugin-owned partial fragments merged into the main file at loadXML/JSON

.glux→.gluj and the later per-element split into .glsj/.glej are both GluxVersions-gated migrations — see the gluj-versions skill for the version enum and gating workflow; don't duplicate that history here.

Load entry point: GlueProjectSaveExtensions.Load in FRBDK/Glue/Glue/SaveClasses/GlueProjectSaveExtensions.cs — prefers .gluj over .glux if both exist, falls back to .glux if no .gluj (mid-migration tolerance), then loads per-element .glsj/.glej files individually if FileVersion >= SeparateJsonFilesForElements. Save entry point: SaveMainAndElementsToFile (same file) → RemoveAndSaveElements for per-element files. Both driven from FRBDK/Glue/Glue/IO/ProjectLoader.cs and GluxCommands.SaveProjectAndElements*.

Schema is a plain POCO graph, not a .schema.json — the canonical source is FRBDK/Glue/GlueCommon/SaveClasses/ (GlueProjectSave.cs, ScreenSave.cs, EntitySave.cs, GlueElement.cs, NamedObjectSave.cs, CustomVariable.cs, StateSave.cs, ReferencedFileSave.cs, PropertySave.cs, VariableDefinition.cs). A second, trimmed copy of GlueProjectSave/GluxVersions lives at FRBDK/Glue/GameCommunicationPlugin/GlueControl/Embedded/Models/GlueProjectSave.cs, compiled as source into the user's game for live in-editor editing — it's frozen at an old version and drifts from the editor's own enum; don't assume version parity between the two when touching live-edit/hot-reload code.

Serialization gotchas (landmines)

  • PropertySave.Value boxes as long/double, not int/float. Newtonsoft deserializes bare JSON numbers that way. Always read through PropertySaveListExtensions.GetValue<T> (PropertySave.cs), which special-cases the conversions — reading .Value directly and casting will throw or silently misbehave.
  • Enums serialize as raw ints — no StringEnumConverter anywhere in the save classes. Hand-editing a .gluj requires knowing the enum's underlying int value.
  • NullValueHandling/DefaultValueHandling differ between the main file and per-element files. Main .gluj: NullValueHandling.Ignore + DefaultValueHandling.IgnoreAndPopulate. Per-element .glsj/.glej: DefaultValueHandling.Ignore only. Both live in GlueProjectSaveExtensions.cs.
  • New properties on save classes must default to the type's own default value, never a custom default — a comment at GlueProjectSave.cs states this explicitly, since IgnoreAndPopulate means the JSON omits anything at default and repopulates it on load. Giving a property a non-standard default silently breaks backward compatibility for every existing project file.
  • Per-element load tolerates a corrupt file: a null/failed ScreenSave/EntitySave deserialize is skipped rather than aborting the whole project load, so a single bad .glsj/.glej merge doesn't brick the project.
  • GlueSettingsSave (user app settings, not project data) intentionally never finished migrating to JSON — still XML, with a commented-out JsonConvert call and a note that build tool associations broke under JSON (suspected TypeConverter interaction). Don't "fix" this without digging into that history first.
  • Saves call FileWatchManager.IgnoreNextChangeOnFile(...) before writing to suppress self-triggered reload — general mechanism covered by the glue-file-watch skill.

JSON → generated code pipeline

Entry points: CodeWriter.GenerateCode(GlueElement element) (FRBDK/Glue/Glue/CodeGeneration/CodeWriter.cs) builds one Screen/Entity's <ElementName>.Generated.cs; CodeGeneratorIElement.cs wraps it (GenerateElementAndDerivedCode also regenerates inheriting elements); GenerateCodeCommands (Glue/Plugins/ExportedImplementations/CommandInterfaces/GenerateCodeCommands.cs) is the public command surface, including GenerateAllCode for full-project regen.

Generation is a plugin pipeline, not one big method: each contributor subclasses ElementComponentCodeGenerator (CodeGeneration/ElementComponentCodeGenerator.cs), overriding phase methods (GenerateFields, GenerateConstructor, GenerateInitialize, GenerateAddToManagers, GenerateActivity, GenerateDestroy, GenerateEvent, HandlesVariable, …). CodeWriter's static ctor lists the built-ins in order (fields → static ctor → ctor → Initialize → AddToManagers → Activity → Destroy → additional methods): ErrorCheckingCodeGenerator, ScrollableListCodeGenerator, StateCodeGenerator, FactoryElementGeneratorEarly, FactoryElementCodeGenerator, ReferencedFileSaveCodeGenerator, NamedObjectSaveCodeGenerator, CustomVariableCodeGenerator, EventCodeGenerator, PooledCodeGenerator, IVisibleCodeGenerator, IWindowCodeGenerator, ITiledTileMetadataCodeGenerator, PauseCodeGenerator, LoadingScreenCodeGenerator. External plugins (Gum, TopDown, Platformer, RedGrin, …) contribute their own generators via ICodeGeneratorPlugin (Glue/Plugins/Interfaces/ICodeGeneratorPlugin.cs) — currently only its GenerateActivity/GenerateAdditionalMethods hooks are wired up (there's a //TODO: Add more generation types here marking the gap).

The two save-class types that map most directly to generated members:

  • NamedObjectSave (instance placed in a Screen/Entity) → NamedObjectSaveCodeGenerator.cs: field + constructor/Initialize instantiation + AddToManagers wiring. CodeGenerationType (Full vs OnlyContainedObjects vs Nothing) controls whether a field is generated fresh or the object is assumed already declared by an inherited base — get this wrong in a custom generator and you get duplicate-field build errors.
  • CustomVariable (exposed/tunneled variable) → CustomVariableCodeGenerator.cs: either a new C# property or a tunneled property forwarding to a NamedObjectSave member. Base-class variables are not regenerated in derived elements unless tunneling, shared, or creating an event — overriding that precedence incorrectly silently drops the override.
Show full SKILL.md (311 more words)Show less

Regeneration is synchronous-on-edit, not file-watch or debounce driven: nearly every mutating Glue command (add/remove/rename object, variable, screen, entity, event) calls GlueCommands.Self.GenerateCodeCommands.GenerateElementCode(element) directly, queued onto TaskManager.Self to run off the UI thread in order. GenerateAllCode additionally fires on project load and via an explicit "Regenerate All Code" command.

Other gotchas:

  • EntireClassCodeGenerator is [Obsolete] — use FullFileCodeGenerator (Glue/Plugins/CodeGenerators/FullFileCodeGenerator.cs) for new standalone-file generators.
  • Generators never emit using statements — deliberate, since multiple plugins' generators could pick conflicting types for the same short name. Use fully-qualified names in generated code.
  • The hand-written half of a Screen/Entity (CustomInitialize, CustomActivity, CustomDestroy, CustomLoadStaticContent) lives in a sibling non-.Generated.cs partial seeded from CodeWriter.ScreenTemplateCode/EntityTemplateCode — the .Generated.cs partial calls into these at fixed points.

Runtime-testing generated code

Compiling generated code proves it resolves against the engine, not that its logic is correct. To pin runtime behavior, build a gold project, Assembly.LoadFrom its output DLL, and reflect into the generated type — see GoldProjectCompileTests.FormsSampleProject_WithAddedPlatformerEntity_LoadInGlue_ThenBuild_ShouldSucceed.

Landmines: constructing an entity needs FlatRedBall.FlatRedBallServices.InitializeCommandLine() first (reflectively) or LoadStaticContent NREs; the parameterless ctor reads ScreenManager.CurrentScreen (null headless) — use the (contentManagerName, addToManagers: false) overload; a CSV-generated custom class emits public fields, not properties.

A tile map's data needs no GraphicsDevice: TiledMapSave.FromFile plus ReducedTileMapInfo.FromTiledMapSave yield layer names, map dimensions, per-layer tileset image paths and every tile position headlessly. Only LayeredTileMap's per-layer texture load (TextureContentLoader.LoadTexture2D, which throws when Renderer.Graphics is null) needs one — assert on the reduced info when a test cares which map loaded rather than how it rasterizes.

  • gluj-versions — the GluxVersions enum, FileVersion gating, and the version-bump checklist. This skill assumes that context; don't restate it here.
  • gum-codegen — Gum standard-runtime (NineSlice/Text/Container/…) property and state codegen specifically. Separate pipeline from the general ElementComponentCodeGenerator list above.
  • glue-file-watch — the general external-change-detection and self-save-suppression mechanism referenced above.
  • glue-project-types — everything above is FRB1's mandatory pipeline. FRB2 projects generate nothing by default and, when opted in, use a separate generator that never goes through CodeWriter.

© 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-project-codegen of vchelaru/FlatRedBall.

Open the folder on GitHubat commit fa654ab

Compare with similar skills

Glue Project Codegen 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 Project Codegen compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Glue Project Codegen this skillvchelaru/FlatRedBall578—~2.4kAutomated safety check: PassMIT
Nx Generatenomcopter/react-mosaic4.8k7 repos~1.9kAutomated safety check: PassCustom licence
PonytailDavidObando/gsharp5648 repos~1.7kAutomated safety check: PassMIT
Run Nx Generatornrwl/nx29k2 repos~592Automated safety check: NotesMIT
Conductor Setupgemini-cli-extensions/conductor3.8k—~4.2kAutomated safety check: PassApache-2.0
Mirage VFS Adapter Authoringstrukto-ai/mirage3.7k—~2.5kAutomated safety check: PassApache-2.0

Similar skills

  • Nx Generate

    nomcopter/react-mosaic

    Generate code using nx generators. An agent skill from nomcopter/react-mosaic.

    4.8k GitHub starsUsed in 7 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Ponytail

    DavidObando/gsharp

    Forces the laziest solution that actually works, simplest, shortest, most minimal.

    564 GitHub starsUsed in 8 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Run Nx generators with prioritization for workspace-plugin generators.

    29k GitHub starsUsed in 2 repos~592 tokens
    DevelopmentAuto-check: notes
  • Conductor Setup

    gemini-cli-extensions/conductor

    Scaffolds the project and sets up the Conductor environment.

    3.8k GitHub stars~4.2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Builds or extends a custom Mirage virtual filesystem adapter for an API, database, object store or app data, with a working mount configuration and filesystem tests.

    3.7k GitHub stars~2.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Enforces this repository's TypeScript backend module architecture under server/: feature folders, barrel exports, and where shared types and utilities belong.

    14k GitHub stars~1.2k tokensUpdated yesterday
    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 Project Codegen

What does Glue Project Codegen do?

Glue's .gluj/.glsj/.glej project JSON format and how it drives Screen/Entity .Generated.cs code generation. Glue Project Codegen is an agent skill from vchelaru/FlatRedBall.cs code generation.

When should I use Glue Project Codegen?

Glue Project Codegen fits situations like: tasks that involve Project scaffolding.

How do I install Glue Project Codegen in Claude Code?

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

How do I install Glue Project Codegen in Codex?

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

Can I use Glue Project Codegen 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-project-codegen -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-project-codegen, .gemini/skills/glue-project-codegen, .github/skills/glue-project-codegen and .opencode/skills/glue-project-codegen in your project.

What does Glue Project Codegen need to run?

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

Does Glue Project Codegen 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 Project Codegen 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 Project Codegen use?

Glue Project Codegen 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 Project Codegen use?

About 2.4k tokens (SKILL.md is roughly 9.7k 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 Project Codegen?

Skills that share tags, products or a category with Glue Project Codegen: Nx Generate (nomcopter/react-mosaic, 4.8k stars), Ponytail (DavidObando/gsharp, 564 stars), Run Nx Generator (nrwl/nx, 29k stars) and Conductor Setup (gemini-cli-extensions/conductor, 3.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Glue Project Codegen?

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 8, 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.