Vercel Composition Patterns
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
Understand and extend the CLOiSim world load → plugin start → reset → save lifecycle.
$ npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lge-ros2/cloisim manage-world-lifecycle --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/lge-ros2/cloisim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/manage-world-lifecycle .claude/skills/manage-world-lifecycle && rm -rf skills-srcUse ~/.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/
Install the "manage-world-lifecycle" agent skill from https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycle into .claude/skills/manage-world-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-world-lifecycle", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lge-ros2/cloisim manage-world-lifecycle --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lge-ros2/cloisim.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/manage-world-lifecycle .agents/skills/manage-world-lifecycle && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "manage-world-lifecycle" agent skill from https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycle into .agents/skills/manage-world-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-world-lifecycle", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lge-ros2/cloisim manage-world-lifecycle --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lge-ros2/cloisim.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/manage-world-lifecycle .cursor/skills/manage-world-lifecycle && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "manage-world-lifecycle" agent skill from https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycle into .cursor/skills/manage-world-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-world-lifecycle", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/lge-ros2/cloisim.git --path .github/skills/manage-world-lifecycle--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lge-ros2/cloisim manage-world-lifecycle --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lge-ros2/cloisim.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/manage-world-lifecycle .gemini/skills/manage-world-lifecycle && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "manage-world-lifecycle" agent skill from https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycle into .gemini/skills/manage-world-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-world-lifecycle", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install lge-ros2/cloisim manage-world-lifecycleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lge-ros2/cloisim.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/manage-world-lifecycle .github/skills/manage-world-lifecycle && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "manage-world-lifecycle" agent skill from https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycle into .github/skills/manage-world-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-world-lifecycle", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lge-ros2/cloisim manage-world-lifecycle --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lge-ros2/cloisim.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/manage-world-lifecycle .opencode/skills/manage-world-lifecycle && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "manage-world-lifecycle" agent skill from https://github.com/lge-ros2/cloisim/tree/main/.github/skills/manage-world-lifecycle into .opencode/skills/manage-world-lifecycle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-world-lifecycle", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
manage-world-lifecycleUnderstand and extend the CLOiSim world load → plugin start → reset → save lifecycle.
Manage World Lifecycle is an agent skill from lge-ros2/cloisim. Understand and extend the CLOiSim world load → plugin start → reset → save lifecycle. Use when: debugging world loading failures, troubleshooting plugin startup coordination, fixing reset behavior, extending the world save pipeline, diagnosing physics mode switching issues, understanding PluginStartTracker events.
Its SKILL.md is about 2.7k 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. The repository describes itself as: Unity 6 based multi-robot simulator for ROS 2, SDFormat/SDF, LiDAR, camera, depth, IMU, GPS, and large-scale robotics simulation. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit f4c1f0b. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Manage World Lifecycle loads about 2.7k tokens when it runs. Until then it costs about 85 tokens; SKILL.md has 419 words of instructions outside code blocks.
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.
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.
The full file from lge-ros2/cloisim at commit f4c1f0b, republished under its MIT licence (© lge-ros2). 419 words, ~2,702 tokens.
.claude/skills/manage-world-lifecycle/SKILL.md (or your agent's skills folder).Reference guide for the complete CLOiSim simulation lifecycle: world loading, plugin startup coordination, runtime reset, and world state persistence.
PluginStartTracker event systemWorldSaver to persist new element types┌─────────────────────────────────────────────────────────┐
│ LOAD │
│ Main.LoadWorld() │
│ ├─ SDF.Root.DoParse() → parse SDF XML │
│ ├─ Physics.simulationMode = Script │
│ ├─ Import.Loader.Start() → create GameObjects │
│ ├─ Wait: worldRoot.childCount > 0 │
│ ├─ PluginStartTracker.Bind(worldRoot) │
│ ├─ Physics.SyncTransforms() │
│ ├─ Physics.simulationMode = FixedUpdate │
│ ├─ ResetWorld() [initial reset] │
│ └─ Wait: AllStarted == true │
├─────────────────────────────────────────────────────────┤
│ RUN │
│ Normal simulation loop │
│ ├─ FixedUpdate: physics │
│ ├─ Update: sensors, UI │
│ └─ Plugins: TX/RX threads running │
├─────────────────────────────────────────────────────────┤
│ RESET (Ctrl+R) │
│ Main.ResetSimulation() │
│ ├─ SensorRenderManager.Pause() │
│ ├─ SimulationWorld.SignalReset() │
│ ├─ ResetWorld() │
│ │ ├─ Helper.Base.Reset() for each helper │
│ │ ├─ Device.Reset() for each device │
│ │ └─ CLOiSimPlugin.Reset() for each plugin │
│ ├─ Wait 0.1s │
│ └─ SensorRenderManager.Resume() │
├─────────────────────────────────────────────────────────┤
│ FULL RELOAD (Ctrl+Shift+R) │
│ Destroys world root, reloads from SDF │
├─────────────────────────────────────────────────────────┤
│ SAVE (Ctrl+Shift+S) │
│ WorldSaver.Update() │
│ ├─ ClearAllComments() │
│ ├─ UpdateGUI() → camera pose │
│ ├─ UpdateModels() → model poses, static flags │
│ └─ UpdateRoads() → road spline points │
└─────────────────────────────────────────────────────────┘Monitors all CLOiSimPlugin instances under a loaded root and fires events as they start:
// Bind to a loaded world/model root
var tracker = new PluginStartTracker();
tracker.ProgressChanged += OnPluginProgressChanged; // (started, total)
tracker.AllStartedEvent += OnAllPluginsStarted; // fires once
tracker.Bind(worldRoot);
// ProgressChanged fires for each plugin that completes OnStart()
// AllStartedEvent fires when StartedCount == TotalCountEach CLOiSimPlugin follows this internal sequence:
Awake()
└─ OnAwake() [abstract] — set _type, cache components
Start() [coroutine]
└─ OnStart() [abstract] — register ports, add threads
├─ RegisterTxDevice() / RegisterRxDevice()
├─ RegisterServiceDevice() / RegisterClientDevice()
├─ AddThread(port, threadFunction, device)
└─ yield return null
└─ Raises Started event → PluginStartTracker.OnPluginStarted()// In Main.cs — world is not considered loaded until all plugins start
private void OnAllPluginsStarted()
{
_pluginAllStarted = true;
BridgeManager.PrintAllocatedHistory();
}
// LoadWorld() waits in a while loop:
while (!_pluginAllStarted)
yield return null;ResetWorld() resets components in three phases:
void ResetModel(GameObject targetObject)
{
// Phase 1: Reset poses (Helper.Base components)
foreach (var helper in targetObject.GetComponentsInChildren<Helper.Base>())
helper.Reset();
// → Restores initial pose via PoseControl
// → Rewinds animation state
// Phase 2: Reset devices
foreach (var device in targetObject.GetComponentsInChildren<Device>())
device.Reset();
// → Clears message queues
// → Resets synthetic timestamps
// Phase 3: Reset plugins
foreach (var plugin in targetObject.GetComponentsInChildren<CLOiSimPlugin>())
plugin.Reset();
// → Calls OnReset() [virtual]
// → Plugin-specific state restoration
}SimulationWorld sends a reset signal to the external ROS bridge:
// Triggered by Main.ResetSimulation()
SimulationWorld.SignalReset();
// → Sets _signalReset = true
// → ClientThread sends messages.Param { "reset_simulation": true }
// → External bridge receives and resets its stateWorldSaver serializes current scene state back to the loaded SDF XML:
// UpdateModels() for each model in scene:
// 1. Remove stale <include> elements
// 2. Remove <model> elements not present in scene
// 3. For each child in WorldRoot:
// - Get Helper.Model → original model path
// - Create/update <include> or <model> element
// - Set <static> from GameObject.isStatic
// - Set <pose> via Unity2SDF.Pose(position, rotation)
// UpdateRoads() for each road:
// 1. Remove all <road> elements
// 2. Recreate from Main.RoadsRoot children
// 3. Save spline knots as <point> elements
// UpdateGUI() for camera:
// 1. Get Camera.main transform
// 2. Convert to SDF pose via Unity2SDF.Pose()
// 3. Write to <gui><camera><pose>During world loading, physics must be paused to prevent objects from falling while being constructed:
// Before construction:
Physics.simulationMode = SimulationMode.Script;
// → Physics does NOT run automatically
// → Objects can be positioned without falling
// After construction:
Physics.SyncTransforms();
// → Syncs all manually-set transforms to physics engine
Physics.simulationMode = SimulationMode.FixedUpdate;
// → Normal physics simulation resumesTo make a new component participate in the reset cycle:
If it's a Helper — inherit from Helper.Base and override Reset():
public class MyHelper : Base
{
private float _initialValue;
new protected void Start()
{
base.Start();
_initialValue = currentValue;
}
public new void Reset()
{
base.Reset(); // Resets pose
currentValue = _initialValue;
}
}If it's a Device — override OnReset() in your Device subclass:
protected override void OnReset()
{
// Clear accumulated state
_accumulatedData = 0;
}If it's a Plugin — override OnReset() in your CLOiSimPlugin subclass:
protected override void OnReset()
{
// Reset plugin-specific state
_commandBuffer.Clear();
}To save a new element type in WorldSaver:
Add an Update*() method:
private void UpdateMyElements()
{
// Remove stale elements
var staleNodes = _worldNode.SelectNodes("my_element");
foreach (XmlNode node in staleNodes)
_worldNode.RemoveChild(node);
// Add current elements from scene
foreach (var element in FindMyElements())
{
var xmlNode = _doc.CreateElement("my_element");
xmlNode.SetAttribute("name", element.Name);
// Convert pose to SDF
var sdfPose = Unity2SDF.Pose(
element.transform.position, element.transform.rotation);
// Write pose to XML...
_worldNode.AppendChild(xmlNode);
}
}Call it from Update():
public void Update()
{
ClearAllComments();
UpdateGUI();
UpdateModels();
UpdateRoads();
UpdateMyElements(); // Add here
}| Pitfall | Details | Mitigation |
|---|---|---|
| Plugin start order is undefined | Plugins start in parallel via background threads. Do NOT assume plugin A starts before plugin B. | Use AllStartedEvent to synchronize cross-plugin dependencies. |
| Reset called during initial load | ResetWorld() runs once during LoadWorld() before plugins finish starting. | Ensure OnReset() handles being called before OnStart() completes. |
| Stale plugin references | PluginStartTracker.Bind() walks the scene once at load time. Dynamically added plugins are NOT tracked. | Rebind if plugins are added post-load. |
| Transform sync timing | Manual transform changes during runtime are not synced to physics automatically (autoSyncTransforms is off). | Call Physics.SyncTransforms() after manual teleport operations. |
| Physics mode must bracket construction | Objects fall during construction if physics is FixedUpdate. | Set SimulationMode.Script before creating objects, restore after. |
| SensorRenderManager must pause during reset | Sensors continue rendering during reset, producing stale/corrupt data. | Always Pause() before reset, Resume() after. |
| WorldSaver removes XML comments | ClearAllComments() strips all <!-- --> from the saved file. | Don't rely on XML comments surviving save cycles. |
| Event | Source | Fired When | Listeners |
|---|---|---|---|
CLOiSimPlugin.Started | Each plugin | OnStart() coroutine completes | PluginStartTracker |
PluginStartTracker.ProgressChanged(int, int) | Tracker | Each plugin starts | Main → UI progress |
PluginStartTracker.AllStartedEvent | Tracker | All plugins started | Main → finalize load |
© lge-ros2, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/manage-world-lifecycle of lge-ros2/cloisim.
Open the folder on GitHubat commit f4c1f0b
Manage World Lifecycle 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Manage World Lifecycle this skilllge-ros2/cloisim | 176 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Vercel Composition Patternssupabase/supabase | 111k | 58 repos | ~726 | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Typescript Advanced Typesrolling-scopes/rsschool-app | 10k | 25 repos | ~4.2k | Automated safety check: Pass | MPL-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 4 repos | ~1.1k | Automated safety check: Pass | MIT |
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
rolling-scopes/rsschool-app
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
onyx-dot-app/onyx
Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.
lge-ros2/cloisim
Add or modify SDF actors with skeletal animation and waypoint-based navigation.
lge-ros2/cloisim
Add a new compute or surface shader for sensor data processing or visualization.
lge-ros2/cloisim
Import 3D mesh files into CLOiSim via the Assimp pipeline, including collision generation and procedural meshes.
lge-ros2/cloisim
Add a new motor or drive controller for robot locomotion. An agent skill from lge-ros2/cloisim.
lge-ros2/cloisim
Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer.
lge-ros2/cloisim
Add a new sensor device to CLOiSim, including the Device subclass, SDF pipeline wiring, and transport plugin.
Categories
Understand and extend the CLOiSim world load → plugin start → reset → save lifecycle. Manage World Lifecycle is an agent skill from lge-ros2/cloisim. Understand and extend the CLOiSim world load → plugin start → reset → save lifecycle.
Manage World Lifecycle fits situations like: : debugging world loading failures; troubleshooting plugin startup coordination; fixing reset behavior; extending the world save pipeline.
Run `npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a claude-code`. Or copy the skill folder (.github/skills/manage-world-lifecycle in lge-ros2/cloisim) into .claude/skills/manage-world-lifecycle in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a codex`. Or copy the skill folder (.github/skills/manage-world-lifecycle in lge-ros2/cloisim) into .agents/skills/manage-world-lifecycle in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lge-ros2/cloisim --skill manage-world-lifecycle -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/manage-world-lifecycle, .gemini/skills/manage-world-lifecycle, .github/skills/manage-world-lifecycle and .opencode/skills/manage-world-lifecycle in your project.
SKILL.md names no scripts, command-line tools or credentials: Manage World Lifecycle is instructions for the agent only.
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.
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.
Manage World Lifecycle is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Manage World Lifecycle: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 297k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
lge-ros2 (a GitHub organization) maintains it in lge-ros2/cloisim, which has 176 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 6, 2026.
Source: lge-ros2/cloisim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.