Agent skill

Debug Plugin Lifecycle Transport

by lge-ros2 in lge-ros2/cloisim

Debug CLOiSim plugin startup, Started-event hangs, transport registration failures, BridgeManager port issues, request-handler failures, and teardown leaks.

MITAuto-check passed

Install Debug Plugin Lifecycle Transport

skills CLI
$ npx skills add lge-ros2/cloisim --skill debug-plugin-lifecycle-transport -a claude-code

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

GitHub CLI
$ gh skill install lge-ros2/cloisim debug-plugin-lifecycle-transport --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/debug-plugin-lifecycle-transport .claude/skills/debug-plugin-lifecycle-transport && 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
debug-plugin-lifecycle-transport
GitHub stars
176
Token cost
~2.1k tokens
SKILL.md length
1,048 words
Files
1
Skills in repo
18
Repo updated
First seen
Licence
MIT

At a glance

Debug CLOiSim plugin startup, Started-event hangs, transport registration failures, BridgeManager port issues, request-handler failures, and teardown leaks.

  • Works in 4 steps: Start from the concrete symptom → Identify the failing lifecycle stage → Form one local hypothesis → …
  • : a plugin never starts
  • SKILL.md covers When to Use, Current Runtime Contract, Diagnostic Workflow and Symptom-Driven Checks, plus 3 more sections
  • Calls git

What it does

Debug Plugin Lifecycle Transport is an agent skill from lge-ros2/cloisim. Debug CLOiSim plugin startup, Started-event hangs, transport registration failures, BridgeManager port issues, request-handler failures, and teardown leaks. Use when: a plugin never starts, world/model load times out, ports are missing or duplicated, device transport stops flowing, request/reply handlers fail, or plugin destroy/reset behavior looks wrong.

Its SKILL.md is about 2.1k 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

  • : a plugin never starts
  • World/model load times out
  • Ports are missing
  • Device transport stops flowing

Example prompts

  • “/debug-plugin-lifecycle-transport”

Workflow steps

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

  1. Start from the concrete symptom
  2. Identify the failing lifecycle stage
  3. Form one local hypothesis
  4. Choose the cheapest discriminating check

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

    Shell commands in SKILL.md call:

    • 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

Debug Plugin Lifecycle Transport loads about 2.1k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 1,048 words of instructions outside code blocks.

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

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). 1,048 words, ~2,105 tokens.

Download SKILL.mdSave it as .claude/skills/debug-plugin-lifecycle-transport/SKILL.md (or your agent's skills folder).
name
debug-plugin-lifecycle-transport
description
Debug CLOiSim plugin startup, Started-event hangs, transport registration failures, BridgeManager port issues, request-handler failures, and teardown leaks. Use when: a plugin never starts, world/model load times out, ports are missing or duplicated, device transport stops flowing, request/reply handlers fail, or plugin destroy/reset behavior looks wrong.
argument-hint
Describe the plugin, symptom, timeout, missing port, request failure, or teardown issue.

Debug Plugin Lifecycle and Transport

Use this skill when the failure is in the bridge layer between devices and the external ROS 2 side, not in scene-only behavior. The goal is to identify the exact lifecycle stage or transport registration step that failed, then validate that slice with the cheapest discriminating check.

When to Use

  • World or model loading stalls on plugin startup
  • A plugin never reaches Started
  • port_list or device_list is missing expected entries
  • A plugin binds ports but no data flows
  • Service requests fail, time out, or return the wrong payload
  • Destroy or reload paths leave ports allocated or threads alive

Current Runtime Contract

Plugin startup path

Awake() -> SetCustomHandleRequestMessage() -> OnAwake() -> Start() -> OnPluginLoad() -> name resolution -> DelayedOnStart() -> stagger by _globalSequence frames -> OnStart() -> _thread.Start() -> IsStarted = true -> Started event

Load-side coordination
  • PluginStartTracker.Bind(...) subscribes to all CLOiSimPlugin instances under the loaded root.
  • Main.LoadWorld() and Main.LoadModel() wait up to 30 seconds for all plugins to report Started.
  • If a plugin never completes OnStart(), the load path times out and the world/model does not finish loading.
Transport registration path
  • RegisterTxDevice, RegisterRxDevice, RegisterServiceDevice, and RegisterClientDevice all flow through PrepareDevice().
  • PrepareDevice() allocates the hash key and port via BridgeManager.AllocateDevice(...), stores them in the plugin's local tracking lists, then initializes the corresponding NetMQ socket in Transporter.
  • On destroy, the base class disposes threads, disposes transport, then deregisters the cached ports and hash keys.

Diagnostic Workflow

1. Start from the concrete symptom

Pick one entry point:

  • timeout while loading a world or model
  • missing port in port_list
  • missing device in device_list
  • request handler failure
  • duplicate allocation or stale port after reload

Do not start by reading unrelated plugin families. Step directly to the plugin instance named by the world, test, stack trace, or log.

2. Identify the failing lifecycle stage

Ask which stage the plugin reached:

  1. Awake() never ran or failed early
  2. OnAwake() ran, but Start() setup did not complete
  3. DelayedOnStart() began, but OnStart() never completed
  4. OnStart() completed, but transport registration or thread startup is wrong
  5. plugin started, but service or data flow is broken later
  6. destroy or reload leaked ports or handlers

Use the cheapest local evidence you already have:

  • timeout message from Main
  • PluginStartTracker progress count
  • BridgeManager.PrintAllocatedHistory()
  • WebSocket port_list / device_list
  • one failing request path or message flow
3. Form one local hypothesis

Write one claim that can fail. Examples:

  • OnStart() exits early because RegisterTxDevice() fails and no fallback path reports the failure.
  • The plugin never fires Started because OnStart() throws before _thread.Start().
  • The request handler is wired, but the plugin-specific overload is not the one actually invoked.
  • Teardown is re-entering with stale cached ports because deregistration did not clear the local lists.

Do not keep multiple speculative theories unless one nearby read is required to separate them.

4. Choose the cheapest discriminating check

Prefer checks in this order:

  1. the exact failing load, request, or teardown behavior
  2. the narrow EditMode test for the touched plugin
  3. port_list / device_list or BridgeManager allocation history
  4. a local compile of the touched plugin or test slice

git diff is not a transport or lifecycle check.

Symptom-Driven Checks

A. Load times out waiting for plugins

Focus on the plugin's OnStart() body.

Check:

  • Does OnAwake() set _type correctly before registration?
  • Does OnStart() always reach yield return null?
  • Are Register*Device(...) return values checked, or does the plugin silently proceed after failure?
  • Does the plugin depend on a device/component that can be null on this GameObject?
  • Is Started being blocked because OnStart() throws or yields forever?

Why it matters:

  • Started is fired only after OnStart() returns and _thread.Start() runs.
  • The load path now has a 30-second timeout, so a hung plugin blocks the world/model load instead of hanging forever.
Show full SKILL.md (436 more words)Show less
B. Port missing, duplicated, or wrong

Focus on PrepareDevice() and BridgeManager.AllocateDevice(...).

Check:

  • _modelName, _partsName, _subPartsName, and control key compose the expected hash key.
  • SubPartsName is set when multiple plugins under one model need disambiguation.
  • The plugin registers the expected transport types for the feature under test.
  • The lookup is checked through port_list or BridgeManager history, not guesswork.

Why it matters:

  • The transport layer routes by hash key and port. Wrong naming or missing subparts can point the bridge at the wrong endpoint even when sockets bind successfully.
C. Data path or request path is broken after startup

Focus on the specific thread or handler:

  • SenderThread for TX paths
  • ReceiverThread for RX paths
  • ServiceThread plus request handler wiring for service calls

Check:

  • The plugin added the correct thread type for each registered port.
  • The device passed to AddThread(...) is the object the thread logic expects.
  • The plugin-specific HandleCustomRequestMessage(...) signature matches the active overload.
  • The plugin response helpers serialize the exact message expected by the bridge.

Why it matters:

  • A plugin can reach Started and still be functionally broken if the wrong thread or handler path is wired.
D. Reload or destroy leaks transport state

Focus on the base OnDestroy() path and plugin-specific teardown side effects.

Check:

  • The plugin did not retain extra port state outside _allocatedDevicePorts and _allocatedDeviceHashKeys.
  • Deregistration runs once and clears the local caches.
  • Repeated destroy/reset paths are idempotent for the touched plugin.

Why it matters:

  • Stale ports or hash keys create false duplicate-allocation failures on later loads.

Cheap External Checks

Use these when the runtime is available:

bash
echo '{"command":"port_list"}' | websocat ws://localhost:8080/control
echo '{"command":"device_list"}' | websocat ws://localhost:8080/control
ss -tlnp | grep -E '4915[2-9]|49[2-9][0-9]{2}|[5-6][0-9]{4}'

Use them to confirm actual registration state, not as a substitute for finding the deciding code path.

Known Repo-Specific Risks

  • Startup success is only valid after OnStart() completes. Do not treat a partially-run OnStart() as success.
  • PluginStartTracker is a coordination layer, not the root cause. Step through it to the plugin that failed to report Started.
  • BridgeManager query methods are expected to return copies for service serialization safety.
  • Repeated teardown must clear the plugin's cached allocated ports and hash keys to stay idempotent.
  • EditMode request-handler tests must bind the exact HandleCustomRequestMessage(in string, in cloisim.msgs.Any, ref DeviceMessage) signature.

Completion Checklist

  • I identified the exact plugin and failing stage.
  • I reduced the problem to one lifecycle or transport hypothesis.
  • I used one concrete check that could disprove it.
  • I stepped past PluginStartTracker or websocket wiring to the code that actually decides the behavior.
  • I verified naming inputs used for hash-key allocation.
  • I checked thread or handler wiring when startup succeeded but behavior still failed.
  • I treated destroy and reload as part of the same contract, not as an afterthought.

© 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/debug-plugin-lifecycle-transport of lge-ros2/cloisim.

Open the folder on GitHubat commit f4c1f0b

Compare with similar skills

Debug Plugin Lifecycle Transport 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.

Debug Plugin Lifecycle Transport compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Debug Plugin Lifecycle Transport this skilllge-ros2/cloisim176—~2.1kAutomated safety check: PassMIT
Diagnosing Superpowers Sessionsobra/superpowers296k3 repos~1.7kAutomated safety check: PassMIT
Trellis Session Insightmindfold-ai/Trellis15k4 repos~1.7kAutomated safety check: PassAGPL-3.0
Update V8 Versionopeninterpreter/openinterpreter69k2 repos~845Automated safety check: PassApache-2.0
Supabase Development and Debuggingsupabase/agent-skills2.7k3 repos~3.6kAutomated safety check: PassMIT
Pester Failure AnalysisPowerShell/PowerShell56k—~5.1kAutomated safety check: PassMIT

Similar skills

  • Investigates a session where Superpowers went wrong, reads the transcripts on disk and produces an evidence-cited report, optionally prepared as a bug report for the maintainers.

    296k GitHub starsUsed in 3 repos~1.7k tokens
    Agent WorkflowsAuto-check passed
  • Trellis Session Insight

    mindfold-ai/Trellis

    Reach into past AI conversation history through the trellis mem CLI.

    15k GitHub starsUsed in 4 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Update V8 Version

    openinterpreter/openinterpreter

    Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.

    69k GitHub starsUsed in 2 repos~845 tokens
    DevOps & CloudAuto-check passed
  • Official

    General Supabase skill for database, auth, Edge Functions, Realtime and storage work, plus client libraries, migrations, security audits, debugging and reading logs.

    2.7k GitHub starsUsed in 3 repos~3.6k tokens
    Backend & APIsAuto-check passed
  • Pester Failure Analysis

    PowerShell/PowerShell

    Investigates failing Pester tests in PowerShell CI jobs by following a six-step workflow from pull request status to documented fix recommendations.

    56k GitHub stars~5.1k tokensUpdated today
    Testing & QAAuto-check passed
  • Checks whether Android hidden-API implementations and system callbacks survive R8 minification, and diagnoses Release-only failures such as AbstractMethodError.

    43k GitHub stars~1.5k tokensUpdated yesterday
    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 2 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 2 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 2 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 2 days ago
    Auto-check passed
  • Add New Plugin

    lge-ros2/cloisim

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

    176 GitHub stars~1.5k tokensUpdated 2 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 2 days ago
    Auto-check passed

Questions about Debug Plugin Lifecycle Transport

What does Debug Plugin Lifecycle Transport do?

Debug CLOiSim plugin startup, Started-event hangs, transport registration failures, BridgeManager port issues, request-handler failures, and teardown leaks. Debug Plugin Lifecycle Transport is an agent skill from lge-ros2/cloisim. Debug CLOiSim plugin startup, Started-event hangs, transport registration failures, BridgeManager port issues, request-handler failures, and teardown leaks.

When should I use Debug Plugin Lifecycle Transport?

Debug Plugin Lifecycle Transport fits situations like: : a plugin never starts; world/model load times out; ports are missing; device transport stops flowing.

How do I install Debug Plugin Lifecycle Transport in Claude Code?

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

How do I install Debug Plugin Lifecycle Transport in Codex?

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

Can I use Debug Plugin Lifecycle Transport 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 debug-plugin-lifecycle-transport -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-plugin-lifecycle-transport, .gemini/skills/debug-plugin-lifecycle-transport, .github/skills/debug-plugin-lifecycle-transport and .opencode/skills/debug-plugin-lifecycle-transport in your project.

What does Debug Plugin Lifecycle Transport need to run?

Going by SKILL.md and its folder, Debug Plugin Lifecycle Transport needs the command-line tools its instructions call (git).

Does Debug Plugin Lifecycle Transport 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 Debug Plugin Lifecycle Transport 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 Debug Plugin Lifecycle Transport use?

Debug Plugin Lifecycle Transport 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 Debug Plugin Lifecycle Transport use?

About 2.1k tokens (SKILL.md is roughly 8.4k 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 Debug Plugin Lifecycle Transport?

Skills that share tags, products or a category with Debug Plugin Lifecycle Transport: Diagnosing Superpowers Sessions (obra/superpowers, 296k stars), Trellis Session Insight (mindfold-ai/Trellis, 15k stars), Update V8 Version (openinterpreter/openinterpreter, 69k stars) and Supabase Development and Debugging (supabase/agent-skills, 2.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Debug Plugin Lifecycle Transport?

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.