Agent skill

Add New Plugin

by lge-ros2 in lge-ros2/cloisim

Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer.

MITAuto-check passed

Install Add New Plugin

skills CLI
$ npx skills add lge-ros2/cloisim --skill add-new-plugin -a claude-code

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

GitHub CLI
$ gh skill install lge-ros2/cloisim add-new-plugin --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/lge-ros2/cloisim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/add-new-plugin .claude/skills/add-new-plugin && 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
add-new-plugin
GitHub stars
176
Token cost
~1.5k tokens
SKILL.md length
284 words
Files
1
Skills in repo
18
Repo updated
First seen
Licence
MIT

At a glance

Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer.

  • Works in 6 steps: Determine Plugin Architecture → Create the Plugin Class → Read Plugin Parameters from SDF (Optional) → …
  • : creating a transport bridge for an existing device
  • SKILL.md covers When to Use, Procedure, Multi-Device Plugin and Checklist
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Add New Plugin is an agent skill from lge-ros2/cloisim. Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer. Use when: creating a transport bridge for an existing device, adding bidirectional control, implementing a new actuator plugin.

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

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.

When your agent uses it

  • : creating a transport bridge for an existing device
  • Adding bidirectional control
  • Implementing a new actuator plugin

Example prompts

  • “/add-new-plugin”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Determine Plugin Architecture
  2. Create the Plugin Class
  3. Read Plugin Parameters from SDF (Optional)
  4. Wire to SDF
  5. Add Common Response Helpers
  6. Handle Cleanup

What it can do on your machine

Read from SKILL.md and the folder at commit f4c1f0b. 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 (its code samples are csharp and xml).

    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

Add New Plugin loads about 1.5k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 284 words of instructions outside code blocks.

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

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 lge-ros2/cloisim at commit f4c1f0b, republished under its MIT licence (© lge-ros2). 284 words, ~1,533 tokens.

Download SKILL.mdSave it as .claude/skills/add-new-plugin/SKILL.md (or your agent's skills folder).
name
add-new-plugin
description
Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer. Use when: creating a transport bridge for an existing device, adding bidirectional control, implementing a new actuator plugin.

Add a New Plugin

Step-by-step procedure for creating a new CLOiSimPlugin subclass that bridges a device (sensor or actuator) to the external ROS 2 bridge via NetMQ transport.

When to Use

  • Bridging an existing Device subclass to the ROS 2 ecosystem
  • Adding a new actuator/controller plugin (e.g., elevator, gripper, arm)
  • Creating a bidirectional plugin that both publishes sensor data and receives commands

Procedure

1. Determine Plugin Architecture

Decide the transport topology:

PatternPortsUse Case
TX-onlyService + TXRead-only sensors (GPS, IMU, Lidar)
TX+RXService + TX + RXBidirectional (MicomPlugin: publishes encoder data, receives twist commands)
Service-onlyServiceConfig/query endpoints
TX+RX+ClientService + TX + RX + ClientFull control (SimulationWorld: clock TX, control client)
2. Create the Plugin Class

Create Assets/Scripts/CLOiSimPlugins/MyPlugin.cs:

csharp
/*
 * Copyright (c) 2026 LG Electronics Inc.
 *
 * SPDX-License-Identifier: MIT
 */

using System.Collections;
using UnityEngine;
using Any = cloisim.msgs.Any;

public class MyPlugin : CLOiSimPlugin
{
	private SensorDevices.MySensor _sensor;
	// For bidirectional: private SensorDevices.MyCommand _command;

	protected override void OnAwake()
	{
		_type = ICLOiSimPlugin.Type.SENSOR;
		_sensor = gameObject.GetComponent<SensorDevices.MySensor>();
		// _command = gameObject.GetComponent<SensorDevices.MyCommand>();
	}

	protected override IEnumerator OnStart()
	{
		// 1. Service port (always first — handles info/config queries)
		if (RegisterServiceDevice(out var portService, "Info"))
		{
			AddThread(portService, ServiceThread);
		}

		// 2. TX port (sensor data publishing)
		if (RegisterTxDevice(out var portTx, "Data"))
		{
			AddThread(portTx, SenderThread, _sensor);
		}

		// 3. RX port (command reception — bidirectional only)
		// if (RegisterRxDevice(out var portRx, "Rx"))
		// {
		//     AddThread(portRx, ReceiverThread, _command);
		// }

		yield return null;
	}

	protected override void HandleCustomRequestMessage(
		in string requestType, in Any requestValue, ref DeviceMessage response)
	{
		switch (requestType)
		{
			case "request_transform":
				var devicePose = _sensor.GetPose();
				var deviceName = _sensor.DeviceName;
				SetTransformInfoResponse(ref response, deviceName, devicePose, _parentLinkName);
				break;

			// Add plugin-specific request handlers:
			// case "request_output_type":
			//     SetMyCustomResponse(ref response);
			//     break;

			default:
				break;
		}
	}

	// Overload for children-based requests (messages.Param with sub-params)
	protected override void HandleCustomRequestMessage(
		in string requestType, in List<messages.Param> requestChildren, ref DeviceMessage response)
	{
		switch (requestType)
		{
			default:
				break;
		}
	}
}
3. Read Plugin Parameters from SDF (Optional)

If the plugin needs SDF <plugin> parameters:

csharp
protected override IEnumerator OnStart()
{
	var pluginParameters = GetPluginParameters();
	if (pluginParameters != null)
	{
		// Read specific elements
		var myParam = pluginParameters.GetValue<float>("my_parameter");
		// Read nested elements
		var noiseElem = pluginParameters.GetElement("noise");
	}

	// ... register devices and threads ...
	yield return null;
}
4. Wire to SDF

The SDF world/model file references the plugin:

xml
<plugin name="MyPlugin" filename="MyPlugin">
  <my_parameter>42.0</my_parameter>
  <ros2>
    <topic_name>/my_topic</topic_name>
    <frame_id>my_frame</frame_id>
  </ros2>
</plugin>

The filename attribute must exactly match the C# class name — the importer uses Type.GetType().

5. Add Common Response Helpers

Use base class static helpers for standard responses:

csharp
// Transform info (pose + frame_id)
SetTransformInfoResponse(ref response, deviceName, pose, parentLinkName);

// Camera info (intrinsics, distortion)
SetCameraInfoResponse(ref response, cameraSensor);

// ROS 2 common info (topic, frame_id)
SetROS2CommonInfoResponse(ref response, topicName, frameId);

// Empty ack (boolean true)
SetEmptyResponse(ref response);
6. Handle Cleanup

Cleanup is automatic via the base class OnDestroy():

  • Threads joined with 50ms timeout per step
  • Transport sockets closed
  • Ports deallocated from BridgeManager

Override OnReset() only if the plugin has state that needs resetting:

csharp
protected override void OnReset()
{
	// Reset plugin-specific state
}

Multi-Device Plugin

For plugins managing multiple devices (e.g., MicomPlugin with motors + encoders), use CLOiSimMultiPlugin base class or manage multiple device references:

csharp
protected override void OnAwake()
{
	_type = ICLOiSimPlugin.Type.MICOM;
	_sensorDevice = gameObject.GetComponent<SensorDevices.MicomSensor>();
	_commandDevice = gameObject.GetComponent<SensorDevices.MicomCommand>();
}

protected override IEnumerator OnStart()
{
	if (RegisterServiceDevice(out var portService, "Info"))
		AddThread(portService, ServiceThread);

	if (RegisterTxDevice(out var portTx, "Tx"))
		AddThread(portTx, SenderThread, _sensorDevice);

	if (RegisterRxDevice(out var portRx, "Rx"))
		AddThread(portRx, ReceiverThread, _commandDevice);

	yield return null;
}

Checklist

  • _type set in OnAwake() to appropriate ICLOiSimPlugin.Type
  • Device component cached via GetComponent<>() in OnAwake()
  • Service port registered and ServiceThread added
  • TX/RX ports registered with correct keys
  • HandleCustomRequestMessage() handles at least "request_transform"
  • SDF <plugin filename=""> matches class name exactly
  • OnStart() ends with yield return null
  • License header on file
  • No cleanup code needed — base class handles it

© 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

Files

Just SKILL.md in .github/skills/add-new-plugin of lge-ros2/cloisim.

Open the folder on GitHubat commit f4c1f0b

Compare with similar skills

Add New Plugin 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.

Add New Plugin compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add New Plugin this skilllge-ros2/cloisim176—~1.5kAutomated safety check: PassMIT
Foundation Models On Deviceaffaan-m/ECC276k4 repos~2.1kAutomated safety check: PassMIT
Memory Bridgeruvnet/ruflo74k—~601Automated safety check: NotesMIT
Mdm Device Managementsickn33/agentic-awesome-skills47k1 repos~3kAutomated safety check: NotesMIT
Cowork To Code Bridgesickn33/agentic-awesome-skills47k1 repos~2.6kAutomated safety check: PassMIT
Foundation Models On Deviceaffaan-m/ECC276k3 repos~1.5kAutomated safety check: PassMIT

Similar skills

  • Apple FoundationModels framework for on-device LLM — text generation, guided generation with @Generable, tool calling, and snapshot streaming in iOS 26+.

    276k GitHub starsUsed in 4 repos~2.1k tokens
    AI & LLM EngineeringAuto-check passed
  • Memory Bridge

    ruvnet/ruflo

    Bridge Claude Code auto-memory into AgentDB with ONNX embeddings, deduplicate, and enable unified cross-project search

    74k GitHub stars~601 tokensUpdated today
    AI & LLM EngineeringAuto-check: notes
  • Mdm Device Management

    sickn33/agentic-awesome-skills

    Manage and secure company devices with MDM solutions. An agent skill from sickn33/agentic-awesome-skills.

    47k GitHub starsUsed in 1 repo~3k tokens
    DevOps & CloudAuto-check: notes
  • Cowork To Code Bridge

    sickn33/agentic-awesome-skills

    Use an already-installed, independently verified cowork-to-code bridge to run narrowly approved actions on the user's own macOS, Linux, or WSL2 machine through a local file queue.

    47k GitHub starsUsed in 1 repo~2.6k tokens
    Auto-check passed
  • 苹果FoundationModels框架用于设备上的LLM——文本生成、使用@Generable进行引导生成、工具调用,以及在iOS 26+中的快照流。

    276k GitHub starsUsed in 3 repos~1.5k tokens
    MobileAuto-check passed
  • Official

    Provides guidance and instructions on managing remote devices on Developer Device Platform (DDP).

    21k GitHub stars~2.5k tokensUpdated today
    MobileAuto-check passed

More from lge-ros2/cloisim

All 18 skills in this repo
  • Add Actor Animation

    lge-ros2/cloisim

    Add or modify SDF actors with skeletal animation and waypoint-based navigation.

    176 GitHub stars~2.4k tokensUpdated 3 days ago
    Auto-check passed
  • Add Compute Shader

    lge-ros2/cloisim

    Add a new compute or surface shader for sensor data processing or visualization.

    176 GitHub stars~2.1k tokensUpdated 3 days ago
    Auto-check passed
  • Add Mesh Import

    lge-ros2/cloisim

    Import 3D mesh files into CLOiSim via the Assimp pipeline, including collision generation and procedural meshes.

    176 GitHub stars~2k tokensUpdated 3 days ago
    Auto-check passed
  • Add Motor Controller

    lge-ros2/cloisim

    Add a new motor or drive controller for robot locomotion. An agent skill from lge-ros2/cloisim.

    176 GitHub stars~1.4k tokensUpdated 3 days ago
    Auto-check passed
  • Add New Sensor

    lge-ros2/cloisim

    Add a new sensor device to CLOiSim, including the Device subclass, SDF pipeline wiring, and transport plugin.

    176 GitHub stars~1.6k tokensUpdated 3 days ago
    Auto-check passed
  • Add Noise Model

    lge-ros2/cloisim

    Add a custom noise model for sensor data simulation. An agent skill from lge-ros2/cloisim.

    176 GitHub stars~1.5k tokensUpdated 3 days ago
    Auto-check passed

Questions about Add New Plugin

What does Add New Plugin do?

Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer. Add New Plugin is an agent skill from lge-ros2/cloisim. Add a new CLOiSimPlugin for bridging a device to the ROS 2 transport layer.

When should I use Add New Plugin?

Add New Plugin fits situations like: : creating a transport bridge for an existing device; adding bidirectional control; implementing a new actuator plugin.

How do I install Add New Plugin in Claude Code?

Run `npx skills add lge-ros2/cloisim --skill add-new-plugin -a claude-code`. Or copy the skill folder (.github/skills/add-new-plugin in lge-ros2/cloisim) into .claude/skills/add-new-plugin in your project. Claude Code loads it when a task matches its description.

How do I install Add New Plugin in Codex?

Run `npx skills add lge-ros2/cloisim --skill add-new-plugin -a codex`. Or copy the skill folder (.github/skills/add-new-plugin in lge-ros2/cloisim) into .agents/skills/add-new-plugin in your project. Codex loads it when a task matches its description.

Can I use Add New Plugin 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 lge-ros2/cloisim --skill add-new-plugin -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-new-plugin, .gemini/skills/add-new-plugin, .github/skills/add-new-plugin and .opencode/skills/add-new-plugin in your project.

What does Add New Plugin need to run?

SKILL.md names no scripts, command-line tools or credentials: Add New Plugin is instructions for the agent only.

Does Add New Plugin 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 Add New Plugin 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 Add New Plugin use?

Add New Plugin 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 Add New Plugin use?

About 1.5k tokens (SKILL.md is roughly 6.1k 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 Add New Plugin?

Skills that share tags, products or a category with Add New Plugin: Foundation Models On Device (affaan-m/ECC, 276k stars), Memory Bridge (ruvnet/ruflo, 74k stars), Mdm Device Management (sickn33/agentic-awesome-skills, 47k stars) and Cowork To Code Bridge (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add New Plugin?

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.