new-system

Scaffolds gz-sim system plugins with headers, CMake registration, and integration tests.

Updated Aug 16, 2026
One-click install
npx skills add https://github.com/three1324/yeonjinautomotive --skill new-system-three1324
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: new-system
Source: https://github.com/three1324/yeonjinautomotive/tree/main/.claude/skills/new-system
Command: npx skills add https://github.com/three1324/yeonjinautomotive --skill new-system-three1324

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Creating a new gz-sim system plugin requires boilerplate across many files — a header, source file, local CMakeLists, parent CMake registration, plugin alias, integration test, example world, and changelog entries. Missing any step produces a plugin that fails to load or is invisible to users. ## Core Features & Use Cases - Complete plugin scaffolding: Generates the header and source templates implementing ISystemConfigure, ISystemPreUpdate, and ISystemPostUpdate with PIMPL via GZ_UTILS_UNIQUE_IMPL_PTR. - Build system integration: Provides the gz_add_system CMake snippet and the add_subdirectory registration in src/systems/CMakeLists.txt. - Testing and documentation: Includes a minimal TestFixture-based integration test, an example SDF world, and reminders for Migration.md and Changelog.md updates. - Use Case: When adding a new controller like a wheel-slip system to the simulator, follow the steps to produce src/systems/wheel_slip/WheelSlip.{hh,cc}, register it in CMake, and verify it loads with a TestFixture test. ## Quick Start Ask the assistant to create a new gz-sim system plugin named fancy_drive and it will generate the header, source, CMake glue, and test stub following this guide.

Frequently Asked Questions about new-system

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a new gz-sim system plugin?

Create a directory under src/systems/<snake_case>/ containing a CamelCase header and source implementing the ISystem interfaces you need, register it with GZ_ADD_PLUGIN, add a gz_add_system CMakeLists entry, and add add_subdirectory to the parent CMake file.

Which ISystem interfaces should a gz-sim plugin implement?

Implement ISystemConfigure for one-time SDF parsing and entity setup, ISystemPreUpdate for mutating the EntityComponentManager each iteration, and ISystemPostUpdate for read-only telemetry. Use ISystemUpdate or ISystemReset only when those specific hooks are needed.

How do I test a gz-sim system plugin?

Write a gtest using gz::sim::TestFixture loaded with an SDF world that references your plugin, then call fixture.Server()->Run(true, 100, false) and assert on telemetry or final entity poses. Register the test target in test/integration/CMakeLists.txt.

Why does my gz-sim plugin fail to load from SDF?

Loading usually fails when the GZ_ADD_PLUGIN_ALIAS name does not match the name attribute in the SDF <plugin> tag, or when the shared library is not on the plugin search path. Keep the alias stable, typically gz::sim::systems::<CamelCase>.

What naming convention do gz-sim systems follow?

Directories use snake_case matching the plugin purpose, classes use CamelCase matching the directory, and the SDF plugin name is gz::sim::systems::<CamelCase>. The CMake target uses a hyphenated form like fancy-drive inside gz_add_system.