Agent skill

Glue Unit Test Bootstrap

by vchelaru in vchelaru/FlatRedBall

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

MITAuto-check passedTesting & QA

Install Glue Unit Test Bootstrap

skills CLI
$ npx skills add vchelaru/FlatRedBall --skill glue-unit-test-bootstrap -a claude-code

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

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

At a glance

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

  • Tasks that involve Unit testing
  • SKILL.md covers Sibling seams, Loading a whole real project…, Landmine — a WinForms sync… and Landmine — do NOT give…, plus 12 more sections
  • Calls dotnet and git

What it does

Glue Unit Test Bootstrap is an agent skill from vchelaru/FlatRedBall. Bootstrapping GlueUnitTests that touch GlueState.Self/GlueCommands.Self/ProjectManager. Triggers: NullReferenceException in tests from ProjectManager.CodeProjectHelper, FileWatchManager, EditorObjects.IoC.Container, or MainGlueWindow.Self.Invoke.

Its SKILL.md is about 4.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 Testing & QA, covering Unit testing. 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 Unit testing

Example prompts

  • “/glue-unit-test-bootstrap”

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

    Shell commands in SKILL.md call:

    • dotnet
    • git

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

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    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 Unit Test Bootstrap loads about 4.3k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 2,192 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~4.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,192 words, ~4,322 tokens.

Download SKILL.mdSave it as .claude/skills/glue-unit-test-bootstrap/SKILL.md (or your agent's skills folder).
name
glue-unit-test-bootstrap
description
Bootstrapping GlueUnitTests that touch GlueState.Self/GlueCommands.Self/ProjectManager. Triggers: NullReferenceException in tests from ProjectManager.CodeProjectHelper, FileWatchManager, EditorObjects.IoC.Container, or MainGlueWindow.Self.Invoke.
version
1.5.0

Glue Unit Test Bootstrap

GlueCommands.Self/GlueState.Self aren't usable out of the box in a plain xunit host — Glue.exe's real startup (Program.cs/MainGlueWindow.cs) does several one-time registrations first. Any test that drives production code through those statics (not just calling a pure static method directly) needs:

csharp
GlueUnitTests.TestSupport.GlueTestBootstrap.EnsureInitialized();

Call it in the test's constructor. It's idempotent (safe to call every test, cheap after the first call). Skipping it is what produces the NRE chain: DI container not built, legacy EditorObjects.IoC.Container locator not registered, ProjectManager.CodeProjectHelper null, FileWatchManager not initialized.

None of this is faked — GlueTestBootstrap runs the same production init calls Glue.exe makes, just outside a live WinForms app. See its doc comment at FRBDK/Glue/Tests/GlueUnitTests/TestSupport/GlueTestBootstrap.cs for exactly what it registers.

RegisterPluginForTesting adds a plugin to both mPluginContainers and ImportedPlugins. Those back different dispatch paths: CallPluginMethod walks the containers, but every ReactTo* event enumerates ImportedPlugins. A plugin in only the first answers direct calls and is never notified of anything — which reads as "the plugin ran and chose to do nothing," not as a wiring bug.

Sibling seams

Also process-wide static state a test may need to control alongside the bootstrap:

  • TaskManager.SynchronousMode — set true to run TaskManager.Self.Add/AddAsync inline instead of on the background thread. See GlueUnitTests/Tasks/TaskManagerSynchronousModeTests.cs.

  • TaskManager.UiThreadMarshaller — swap in an inline IUiThreadMarshaller to avoid needing a real WinForms message loop for DoOnUiThread/OnUiThread calls.

  • TestVisualStudioProjectFactory (GlueUnitTests/TestSupport/TestVisualStudioProjectFactory.cs) — builds a real (not fake) VisualStudioProject from a minimal non-SDK .csproj, for tests that need GlueState.CurrentMainProject to be non-null.

  • ObjectFinder.Self.GlueProject — assign a GlueProjectSave for anything reaching ObjectFinder lookups (GetEntitySaveUnqualified, GetAllReferencedFiles).

  • GlueState.Self.Current* setters work headless. Selection is by model object, so CurrentNamedObjectSave = nos takes effect as long as nos is in ObjectFinder.Self.GlueProject (an object in no element reads as nothing selected). It really dispatches ReactToItemsSelected to registered plugins: set PluginManager.HandleExceptions = false in such a test, or a throwing handler is swallowed and the plugin silently disabled for the rest of the run. A plugin that builds its WPF view on selection must gate the view on GlueGui.ShowGui (off in the bootstrap); see MainCollisionPlugin.TryHandleSelectedCollidable.

Every one of these is process-wide, which is why the whole assembly runs non-parallel — see GlueUnitTests/AssemblyInfo.cs. So cross-class interleaving isn't a hazard, but leakage still is: a test which assigns one of these must restore it (IDisposable/try-finally), or it silently changes the setup of whatever runs next. The failure mode is a test that passes under --filter and fails in the full run.

Loading a whole real project (gold projects)

GoldProject/GoldProjectCompileTests (GlueUnitTests/TestSupport, GlueUnitTests/Projects) drive a checked-in sample through the real ProjectLoader.LoadProject, regenerate, and build. That is the only way to cover generators that ask another plugin something at generation time. Needs GlueTestBootstrap.EnsureGameProjectPluginsRegistered() and [StaFact]. Two non-obvious requirements:

  • Delete *.Generated.cs first. Glue doesn't rewrite a file whose content is unchanged, so otherwise "codegen produced this" and "codegen never ran" are indistinguishable.
  • *.Generated.cs is gitignored repo-wide, and the samples are checked in without it. A clean git diff after regenerating proves nothing, and no sample builds until Glue regenerates it. Assert nothing about these files existing beforehand — your working copy has them from earlier runs and a fresh CI clone does not. Before pushing, find Samples -name "*.Generated.cs" -delete and re-run, or CI is the first thing to see the real starting state.

Landmine — a WinForms sync context plus SynchronousMode deadlocks the run with no timeout

WinForms installs a WindowsFormsSynchronizationContext on a thread the moment the first control is created there — FakeMainGlueWindow's PropertyGrid, a MenuStrip, a plugin toolbar. Continuations then post back to it and only run while a message loop pumps, which no test host does. Combined with TaskManager.SynchronousMode (whose RunSynchronously blocks the caller on the awaited task), the first plugin that awaits during a load hangs forever: one blocked thread, no child process, nothing executing, and no timeout anywhere. GlueTestBootstrap sets WindowsFormsSynchronizationContext.AutoInstall = false; don't undo it, and don't diagnose this shape as a slow build. A stack dump (dotnet-stack report -p <pid>, real Windows PID) showing exactly one blocked thread and nothing else running is the signature.

Landmine — do NOT give PluginManager a MenuStrip

GlueGui.Initialize(menuStrip) is needed (PluginBase.AddMenuItemTo reads GlueGui.MenuStrip.Items). PluginManager.ShareMenuStripReference is the opposite: PluginCommand marshals every plugin call through mMenuStrip.Invoke whenever mMenuStrip is non-null, so with no message loop the calls silently never run and CallPluginMethod returns null. Leaving PluginManager's null keeps its "no live menu strip means run inline" guard doing the right thing.

Landmine — code generation swallows its own exceptions

GenerateAllCodeSync calls the async Task CodeWriter.GenerateCode without awaiting it, so an exception during one element's generation is captured into a discarded Task and lost. The symptom is an empty .Generated.cs (the placeholder from CreateGeneratedFileIfNecessary) for that one element, no error anywhere, and every later step for it — its factory, its project entry — silently skipped. To see the real exception, await CodeWriter.GenerateCode(element) directly. ErrorRecordingPlugin subscribes to Glue's error and output channels so a partial regeneration fails a test rather than passing quietly.

Landmine — MSBUILD_EXE_PATH must be set before the first MSBuild evaluation in the process

Microsoft.Build caches its toolset on first use, so setting the variable later has no effect. A test that evaluates a bare non-SDK project first (TestVisualStudioProjectFactory) fixes the toolset for the whole run, and a later real-project load then fails with The SDK 'Microsoft.NET.SDK.WorkloadAutoImportPropsLocator' specified could not be found — while passing when run alone. Call GlueTestBootstrap.EnsureMsBuildEnvironmentVariable() before anything touches MSBuild.

Landmine — calling a real plugin method for the first time can pop a real dialog on the developer's desktop

IMainGlueWindow/IUiThreadMarshaller only cover calls that were already routed through MainGlueWindow.Self/TaskManager. A plugin method you're calling directly for the first time (bypassing PluginManager.CallPluginMethod's silent no-op to get real coverage — see REFACTORING.md's Collision/Gum entries) may still contain its own unseamed MessageBox.Show(...) on some branch (e.g. an "already exists, overwrite?" check). That call blocks the test thread on a real, visible modal dialog on the developer's actual desktop — not something GlueTestBootstrap catches, and not obvious from reading the test in isolation.

Before exercising a plugin method's real logic for the first time: skim it (and what it calls) for MessageBox.Show/similar dialog calls, and design the test to never take that branch (fresh unique temp directory per test, askToOverwrite/equivalent flags set to avoid the prompt, call the method at most once per test run rather than twice to probe an idempotency branch). If you ever see an unexpected pause or the user reports a popup, stop immediately, confirm no process is still blocked waiting on it, and fix the test to avoid the branch rather than building a dialog seam just to unblock one test.

Landmine — a warm obj/bin can report a stale test as green, or a real compile error as passing

dotnet test after an edit does an incremental build: MSBuild decides per-file whether to recompile, and in practice a git stash/git rebase/repeated edit-and-rerun cycle can leave it not recompiling a file you just changed — the run reports the previous binary's result, not the current source's. This produced a green "317/317" locally on issue #2016's PR while the actual pushed source had two CS0103 compile errors (missing usings) that only CI's from-scratch build caught, plus masked a real regression (a broadened FakeFindManager behavior that broke two unrelated tests) for the same reason.

Before reporting "full suite green" as a claim someone will act on (a PR description, a "tests pass" verdict, this file), rebuild from scratch at least once: rm -rf FRBDK/Glue/Tests/GlueUnitTests/obj FRBDK/Glue/Tests/GlueUnitTests/bin then dotnet test without --no-build. --no-build/--no-restore reruns are fine for fast iteration between clean checkpoints, not as the last thing before trusting the result.

Landmine — dotnet test on the bare csproj fails with MSB3073/*Undefined* paths

Running dotnet test FRBDK/Glue/Tests/GlueUnitTests/GlueUnitTests.csproj directly fails building OfficialPlugins.csproj's PostBuild target: it copies its output using $(SolutionDir)Glue\bin\Debug\Plugins\..., and SolutionDir is a solution-scoped MSBuild property that's simply undefined when you build/test a project file directly (no .sln in the invocation) — same failure would hit any of the plugin projects with a similar post-build copy step, not just OfficialPlugins.

Fix: pass SolutionDir explicitly, pointed at FRBDK/Glue/ (the directory containing Glue with All.sln, since the copy path is $(SolutionDir)Glue\...), with a trailing backslash:

dotnet test FRBDK/Glue/Tests/GlueUnitTests/GlueUnitTests.csproj -p:SolutionDir="<repo>\FRBDK\Glue\\"
Show full SKILL.md (862 more words)Show less

What a healthy run costs — anything far past this is a hang, not slowness

Rough orders of magnitude on a warm dev machine, so "is it stuck or just slow?" is answerable without guessing. All with --no-build after a successful build:

RunTestsOn a CI runner
Warm incremental build of GlueUnitTests.csproj~40s (a real build is most of a full run's wall clock)
--filter "Category!=BuildSmoke&Category!=LiveGame"827~100s
--filter "Category=LiveGame"17~210s
--filter "Category=BuildSmoke"69~570s

BuildSmoke is slow by nature - every test copies a sample project to a temp directory and loads it through a real headless editor, and AssemblyInfo.cs disables parallelization assembly-wide because Glue's singletons are shared. A dev machine beats these numbers, so treat them as the ceiling rather than a target.

Wall clock alone will not tell you a run is wedged. The signature is the child dotnet build having already exited while testhost is still alive - that is the pipe hang below, not work in progress.

Landmine — every nested dotnet call must go through NestedDotnetCli

BuildSmoke tests shell out to real dotnet build/dotnet run. The obvious way to write that — redirect both streams, StandardOutput.ReadToEnd(), WaitForExit() — hangs for 10–15 minutes instead of failing, because dotnet build starts MSBuild worker nodes with /nodeReuse:true that outlive it while holding the inherited stdout pipe open, so ReadToEnd() never sees EOF. It is intermittent by nature: only the run that starts the nodes inherits the handles, so the same test hangs once and passes on an immediate retry.

GlueUnitTests/TestSupport/NestedDotnetCli.cs is the only sanctioned way to spawn one — it disables the persistent build servers, pumps both streams concurrently, and kills the entire child tree on timeout. NestedDotnetCliTests fails the build if a redirected Process.Start reappears anywhere in the assembly. See GitHub issue #1969.

A timeout passed to Run covers cold start too — the CLI, MSBuild evaluation and any process the build itself spawns can eat tens of seconds on a CI runner before the command does the thing being measured. A budget sized against a warm dev machine is therefore mostly startup on a cold one, and expires before the test's premise is even true. When the budget is meant to bound something after that warm-up, pass a StartupGate (see NestedDotnetCli.Run): it waits untimed until the gate opens and only then starts the clock. See GitHub issue #1992.

Landmine — Shouldly's string ShouldContain ignores case

someString.ShouldContain("Expected") passes against "expected"; Shouldly defaults string containment to Case.Insensitive. A test asserting that a path or generated line keeps its capitalization must pass Case.Sensitive, or it stays green while the code lower-cases.

Standing rule — clear stragglers after an interrupted run

A dotnet test/dotnet build that is cancelled or killed mid-flight leaves its tree (dotnet, MSBuild nodes, VBCSCompiler, testhost) behind; a run that completes normally now cleans up after itself. So this is a response to an interruption, not a ritual before every command:

powershell
Get-Process testhost,vstest.console,MSBuild,VBCSCompiler -ErrorAction SilentlyContinue | Stop-Process -Force

Never end a turn (report status, stop) while a dotnet test/dotnet build is still running detached in the background — wait for it synchronously, or explicitly confirm it finished/kill it first. A background run left alive across a stop/resume cycle is how the count climbs into the dozens over a long session.

Landmine — an orphaned testhost locks the output DLLs, and the next run looks like a hang

A cancelled or timed-out dotnet test can leave testhost.exe alive holding GlueUnitTests/bin/.../*.dll open. The next run then can't copy dependencies into bin, and fails with MSB3021/MSB3027 naming the holder (The file is locked by: "testhost (PID)"). The trap is that the build stalls through its 10 retries × 1s per file while producing no test output — piped through a grep, that buffers to nothing and reads as a hung test suite rather than a locked file.

Before diagnosing a slow or silent run as a test problem, clear the holders:

powershell
Get-Process testhost,vstest.console,MSBuild -ErrorAction SilentlyContinue | Stop-Process -Force

Then re-run with --no-build when nothing was recompiled since the last successful build — it skips the copy step the lock blocks, and the full non-BuildSmoke suite finishes in seconds.

Landmine — a broad FullyQualifiedName~ filter silently sweeps in Category=BuildSmoke tests and thrashes the machine

GumRuntimeMemberContractTests, GumGeneratedCodeCompilesTests, and the *CreationSmokeTests classes are tagged [Trait("Category", "BuildSmoke")] because they shell out to real dotnet build/dotnet test child processes (building the whole engine or a scaffolded project) instead of just exercising codegen in-memory. pr-tests.yml deliberately runs them as their own step, Category=LiveGame as another, and everything else with --filter "Category!=BuildSmoke&Category!=LiveGame".

Category=LiveGame behaves the same way and costs more: each of those tests builds and launches a real game process (see glue-live-game-testing).

A filter like --filter "FullyQualifiedName~GumPlugin" does not know about that split — it matches BuildSmoke tests in the same namespace right along with the fast ones. Run several of those together and each spawns its own nested dotnet/testhost/VBCSCompiler tree; a handful of them running serially is enough to make the machine crawl and a run that should take seconds look hung for many minutes.

Always AND in Category!=BuildSmoke&Category!=LiveGame unless you specifically intend to run one of the slow suites:

dotnet test FRBDK/Glue/Tests/GlueUnitTests/GlueUnitTests.csproj -p:SolutionDir="<repo>\FRBDK\Glue\\" --filter "FullyQualifiedName~GumPlugin&Category!=BuildSmoke&Category!=LiveGame"

Deep dive

For the full story of why each seam was needed and what's still NRE-prone (e.g. AvailableAssetTypes.CommonAtis requiring real PluginManager plugin loading), see REFACTORING.md's "Unblock WizardProjectLogic AddGameScreen testing" and "Wizard apply-engine test seams" entries.

© 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-unit-test-bootstrap of vchelaru/FlatRedBall.

Open the folder on GitHubat commit fa654ab

Compare with similar skills

Glue Unit Test Bootstrap 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 Unit Test Bootstrap compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Glue Unit Test Bootstrap this skillvchelaru/FlatRedBall578—~4.3kAutomated safety check: PassMIT
TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph11211 repos~2.4kAutomated safety check: PassNone
Testing OpenLogi UIAprilNEA/OpenLogi23k—~1.1kAutomated safety check: PassApache-2.0
Go Testingcxuu/golang-skills1721 repos~1.3kAutomated safety check: PassApache-2.0
Contractssamchon/nestia2.2k—~1.3kAutomated safety check: PassMIT
Cohesion Over TestabilityEpicenterHQ/epicenter4.8k—~2kAutomated safety check: PassCustom licence

Similar skills

  • TDD Workflow

    hellangleZ/burn-in-cceverywhere-ralph

    A skill your agent uses when writing new features, fixing bugs, or refactoring code.

    112 GitHub starsUsed in 11 repos~2.4k tokens
    Testing & QAAuto-check passed
  • Testing OpenLogi UI

    AprilNEA/OpenLogi

    Verifies OpenLogi's native GPUI interface with focused tests, the component gallery and a mock agent, choosing the evidence that fits each change.

    23k GitHub stars~1.1k tokensUpdated today
    Testing & QAAuto-check passed
  • Go Testing

    cxuu/golang-skills

    A skill your agent uses when writing, reviewing, or improving Go test code — including table-driven tests, subtests, parallel tests, test helpers, test doubles, and assertions with cmp.Diff.

    172 GitHub starsUsed in 1 repo~1.3k tokens
    Testing & QAAuto-check passed
  • Contracts

    samchon/nestia

    Defines self-acknowledgments for production declarations and tests.

    2.2k GitHub stars~1.3k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Cohesion Over Testability

    EpicenterHQ/epicenter

    Collapse test-shaped production boundaries while preserving behavior and coverage.

    4.8k GitHub stars~2k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • JS-in-HTML Testing

    liaohch3/claude-tap

    Tests JavaScript embedded in an HTML file in two layers: pytest checks of the logic ported to Python, and Playwright runs in a real browser for the DOM.

    3.3k GitHub stars~924 tokensUpdated 17 days ago
    Testing & QAAuto-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 yesterday
    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 yesterday
    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 yesterday
    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 yesterday
    Auto-check passed
  • Release Notes

    vchelaru/FlatRedBall

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

    578 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Skills Writer

    vchelaru/FlatRedBall

    Creates and updates skill files (.claude/skills//SKILL.md). An agent skill from vchelaru/FlatRedBall.

    578 GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Glue Unit Test Bootstrap

What does Glue Unit Test Bootstrap do?

Bootstrapping GlueUnitTests that touch GlueState.Self/GlueCommands.Self/ProjectManager. Glue Unit Test Bootstrap is an agent skill from vchelaru/FlatRedBall.Self/ProjectManager.

When should I use Glue Unit Test Bootstrap?

Glue Unit Test Bootstrap fits situations like: tasks that involve Unit testing.

How do I install Glue Unit Test Bootstrap in Claude Code?

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

How do I install Glue Unit Test Bootstrap in Codex?

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

Can I use Glue Unit Test Bootstrap 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-unit-test-bootstrap -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-unit-test-bootstrap, .gemini/skills/glue-unit-test-bootstrap, .github/skills/glue-unit-test-bootstrap and .opencode/skills/glue-unit-test-bootstrap in your project.

What does Glue Unit Test Bootstrap need to run?

Going by SKILL.md and its folder, Glue Unit Test Bootstrap needs the command-line tools its instructions call (dotnet and git).

Does Glue Unit Test Bootstrap access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Glue Unit Test Bootstrap 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 Unit Test Bootstrap use?

Glue Unit Test Bootstrap 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 Unit Test Bootstrap use?

About 4.3k tokens (SKILL.md is roughly 17k 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 Unit Test Bootstrap?

Skills that share tags, products or a category with Glue Unit Test Bootstrap: TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars), Testing OpenLogi UI (AprilNEA/OpenLogi, 23k stars), Go Testing (cxuu/golang-skills, 172 stars) and Contracts (samchon/nestia, 2.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Glue Unit Test Bootstrap?

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.