PR Review
kimdre/doco-cd
Review pull request diffs for correctness and regressions, and provide actionable feedback when asked to review a PR.
Comprehensive ROS 2 engineering guide covering workspace setup, node architecture, communication patterns (topics/services/actions with QoS), lifecycle and component nodes, launch composition…
$ npx skills add LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ros2-engineering-skills --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/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ros2-engineering-skills .claude/skills/ros2-engineering-skills && 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 "ros2-engineering-skills" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skills into .claude/skills/ros2-engineering-skills/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ros2-engineering-skills", 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/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skillsType 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 LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ros2-engineering-skills --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ros2-engineering-skills .agents/skills/ros2-engineering-skills && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ros2-engineering-skills" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skills into .agents/skills/ros2-engineering-skills/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ros2-engineering-skills", 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 LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ros2-engineering-skills --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ros2-engineering-skills .cursor/skills/ros2-engineering-skills && 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 "ros2-engineering-skills" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skills into .cursor/skills/ros2-engineering-skills/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ros2-engineering-skills", 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/LeoYeAI/openclaw-master-skills.git --path skills/ros2-engineering-skills--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 LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ros2-engineering-skills --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ros2-engineering-skills .gemini/skills/ros2-engineering-skills && 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 "ros2-engineering-skills" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skills into .gemini/skills/ros2-engineering-skills/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ros2-engineering-skills", 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 LeoYeAI/openclaw-master-skills ros2-engineering-skillsInstalls 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 LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ros2-engineering-skills .github/skills/ros2-engineering-skills && 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 "ros2-engineering-skills" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skills into .github/skills/ros2-engineering-skills/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ros2-engineering-skills", 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 LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LeoYeAI/openclaw-master-skills ros2-engineering-skills --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LeoYeAI/openclaw-master-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ros2-engineering-skills .opencode/skills/ros2-engineering-skills && 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 "ros2-engineering-skills" agent skill from https://github.com/LeoYeAI/openclaw-master-skills/tree/main/skills/ros2-engineering-skills into .opencode/skills/ros2-engineering-skills/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ros2-engineering-skills", 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.
ros2-engineering-skillsComprehensive ROS 2 engineering guide covering workspace setup, node architecture, communication patterns (topics/services/actions with QoS), lifecycle and component nodes, launch composition…
Ros2 Engineering Skills is an agent skill from LeoYeAI/openclaw-master-skills. Comprehensive ROS 2 engineering guide covering workspace setup, node architecture, communication patterns (topics/services/actions with QoS), lifecycle and component nodes, launch composition, tf2/URDF, ros2control hardware interfaces, real-time constraints, Nav2, MoveIt 2, perception pipelines, simulation (Gazebo/Isaac Sim), security (SROS2/DDS), micro-ROS (MCU/RTOS), multi-robot systems (fleet management/Open-RMF), testing, debugging, deployment, and ROS 1 migration. Trigger whenever the user works on ROS 2…
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 39 other files, including scripts and reference files (for example `README.md`, `_meta.json` and `references/communication.md`).
It sits in DevOps & Cloud, covering Embedded systems, CI/CD and Containers. It works with Docker. The repository describes itself as: 🧠 Curated collection of 1209+ best OpenClaw skills — weekly updated by MyClaw.ai. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5199b5. 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.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
aptFrom 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.
Ros2 Engineering Skills loads about 5k tokens when it runs, and up to ~118k if it reads all its reference files. Until then it costs about 227 tokens; SKILL.md has 1,687 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 noted patterns worth knowing about, such as sudo or a known installer.
Install: `sudo apt install ros-kilted-rmw-zenoh-cpp`, setAutomated 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); the scripts in this folder are not scanned.
The full file from LeoYeAI/openclaw-master-skills at commit e5199b5, republished under its MIT licence (© LeoYeAI). 1,687 words, ~4,965 tokens.
.claude/skills/ros2-engineering-skills/SKILL.md (or your agent's skills folder). This skill also uses 38 other files; get the full folder from GitHub.A progressive-disclosure skill for ROS 2 development — from first workspace to
production fleet deployment. Each section below gives you the essential decision
framework; detailed patterns, code templates, and anti-patterns live in the
references/ directory. Read the relevant reference file before writing code.
references/*.md file for detailed guidance.| User is doing... | Read |
|---|---|
| Creating a workspace, package, or build config | references/workspace-build.md |
| Writing nodes, executors, callback groups | references/nodes-executors.md |
| Topics, services, actions, custom interfaces, QoS | references/communication.md |
| Lifecycle nodes, component loading, composition | references/lifecycle-components.md |
| Launch files, conditional logic, event handlers | references/launch-system.md |
| tf2, URDF, xacro, robot_state_publisher | references/tf2-urdf.md |
| ros2_control, hardware interfaces, controllers | references/hardware-interface.md |
| Real-time constraints, PREEMPT_RT, memory, jitter | references/realtime.md |
| Nav2, SLAM, costmaps, behavior trees | references/navigation.md |
| MoveIt 2, planning scene, grasp pipelines | references/manipulation.md |
| Camera, LiDAR, PCL, cv_bridge, depth processing | references/perception.md |
| Unit tests, integration tests, launch_testing, CI | references/testing.md |
| ros2 doctor, tracing, profiling, rosbag2 | references/debugging.md |
| Docker, cross-compile, fleet deployment, OTA | references/deployment.md |
| Gazebo, Isaac Sim, sim-to-real, use_sim_time | references/simulation.md |
| SROS2, DDS security, certificates, supply chain | references/security.md |
| micro-ROS, MCU/RTOS, XRCE-DDS, rclc | references/micro-ros.md |
| Multi-robot fleet, Open-RMF, DDS discovery scale | references/multi-robot.md |
| Message types, units, covariance, frame conventions | references/message-types.md |
| ROS 1 migration, ros1_bridge, hybrid operation | references/migration-ros1.md |
When a task spans multiple domains, read all relevant files and reconcile conflicting recommendations by favoring safety, then determinism, then simplicity.
Cross-cutting concern — Security: Security is not isolated to references/security.md.
Every domain should consider its security implications: hardware interfaces need safe
shutdown on auth failure, DDS topics may need encryption, deployment images need supply
chain verification, and fleet communication must use TLS. When reviewing code in any
domain, check whether the data path crosses a trust boundary.
These apply to every ROS 2 artifact you produce, regardless of domain.
Always ask which ROS 2 distribution the user targets. Key differences:
| Feature | Foxy (EOL) | Humble (LTS) | Jazzy (LTS) | Kilted (non-LTS) | Rolling |
|---|---|---|---|---|---|
| EOL | Jun 2023 (ended) | May 2027 | May 2029 | Nov 2025 | Rolling |
| Ubuntu | 20.04 | 22.04 | 24.04 | 24.04 | Latest |
| Default DDS | Fast DDS | Fast DDS | Fast DDS | Fast DDS | Fast DDS |
| Zenoh support | — | — | — | Tier 1 | Tier 1 |
| Type description support | No | No | Yes | Yes | Yes |
| Service introspection | No | No | Yes | Yes | Yes |
| EventsExecutor | No | No | Experimental | Stable (+ rclpy) | Stable (+ rclpy) |
| Default bag format | sqlite3 | sqlite3 | MCAP | MCAP | MCAP |
| ros2_control interface | N/A (separate) | 2.x | 4.x | 4.x | Latest |
| CMake recommendation | ament_target_deps | ament_target_deps | either | target_link_libs | target_link_libs |
When the user does not specify, default to the latest LTS (Jazzy). Pin the exact distro in Dockerfile, CI, and documentation so builds are reproducible.
Choose the language based on the node's role, not personal preference.
Use rclcpp (C++) when:
Use rclpy (Python) when:
Mixed stacks are normal. A typical robot has C++ drivers/controllers and Python
orchestration/monitoring. Note: component_container (composition) only loads
C++ components via pluginlib. Python nodes run as separate processes, but can
share a launch file and communicate via zero-overhead intra-host DDS.
Intra-process communication works for any nodes sharing a process — not only
composable components. Any nodes instantiated in the same process with
use_intra_process_comms(true) can use zero-copy transfer.
Every package should follow this layout. Consistency across a workspace reduces onboarding time and makes CI scripts portable.
my_package/
├── CMakeLists.txt # or setup.py for pure Python
├── package.xml # format 3, with <depend> tags
├── config/
│ └── params.yaml # default parameters
├── launch/
│ └── bringup.launch.py # Python launch file
├── include/my_package/ # C++ public headers (if library)
├── src/ # C++ source files
├── my_package/ # Python modules (if ament_python or mixed)
├── test/ # gtest, pytest, launch_testing
├── urdf/ # URDF/xacro (if applicable)
├── msg/ srv/ action/ # custom interfaces (dedicated _interfaces package preferred)
└── README.mdSeparate interface definitions into a *_interfaces package so downstream
packages can depend on interfaces without pulling in implementation.
ParameterDescriptor with FloatingPointRange or IntegerRange
for numeric bounds. The parameter server rejects out-of-range values at set time.controller.kp, controller.ki, controller.kd.config/params.yaml; allow launch-time overrides.set_parameters_callback and
validate new values atomically before accepting.FINALIZED and alert the operator).Start from these profiles and adjust per use case:
| Use case | Reliability | Durability | History | Depth | Deadline | Lifespan |
|---|---|---|---|---|---|---|
| Sensor stream | BEST_EFFORT | VOLATILE | KEEP_LAST | 5 | — | — |
| Command velocity | RELIABLE | VOLATILE | KEEP_LAST | 1 | 100 ms | 200 ms |
| Map (latched) | RELIABLE | TRANSIENT_LOCAL | KEEP_LAST | 1 | — | — |
| Diagnostics | RELIABLE | VOLATILE | KEEP_LAST | 10 | — | — |
| Parameter events | RELIABLE | VOLATILE | KEEP_LAST | 1000 | — | — |
| Action feedback | RELIABLE | VOLATILE | KEEP_LAST | 1 | — | — |
| Safety heartbeat | RELIABLE | VOLATILE | KEEP_LAST | 1 | 500 ms | 1 s |
QoS mismatches are the #1 cause of "I published but nobody receives."
Always check compatibility with ros2 topic info -v when debugging.
DEADLINE and LIFESPAN are critical for safety-critical systems. DEADLINE fires an
event when no message arrives within the specified period (detect stale data). LIFESPAN
discards messages older than the specified duration before delivery (prevent acting on
stale data). See references/communication.md section 9 for full API and examples.
| Entity | Convention | Example |
|---|---|---|
| Package | snake_case | arm_controller |
| Node | snake_case | joint_state_broadcaster |
| Topic | /snake_case with ns | /arm/joint_states |
| Service | /snake_case | /arm/set_mode |
| Action | /snake_case | /arm/follow_joint_trajectory |
| Parameter | snake_case with dot ns | controller.publish_rate |
| Frame | snake_case | base_link, camera_optical |
| Interface | PascalCase.msg/srv/action | JointState.msg |
MutuallyExclusiveCallbackGroup serializes its callbacks — safe for
shared state without locks, but limits throughput.ReentrantCallbackGroup allows parallel execution — you must protect
shared state with std::mutex (C++) or threading.Lock (Python).MutuallyExclusiveCallbackGroup from the calling callback. Otherwise
the executor deadlocks — the callback waits for the response while the executor
cannot deliver it. Always use async_send_request with a response callback;
never use spin_until_future_complete inside an executor callback.sleep) inside a
timer or subscription callback on the default executor. Offload to a
dedicated thread or use a MultiThreadedExecutor with a reentrant group.std::shared_ptr<const MessageT> in subscription
callbacks to avoid unnecessary copies and enable zero-copy intra-process.Default to lifecycle (managed) nodes for anything that owns resources: hardware drivers, sensor pipelines, planners, controllers.
┌──────────────┐
create() ──► │ Unconfigured │
└──────┬───────┘
on_configure │
┌──────▼───────┐
│ Inactive │
└──────┬───────┘
on_activate │
┌──────▼───────┐
│ Active │
└──────┬───────┘
on_deactivate │
┌──────▼───────┐
│ Inactive │
└──────┬───────┘
on_cleanup │
┌──────▼───────┐
│ Unconfigured │
└──────┬───────┘
on_shutdown │
┌──────▼───────┐
│ Finalized │
└───────────────┘This gives the system manager (launch file, orchestrator, or operator) explicit control over when resources are allocated, when the node starts processing, and how it shuts down. It also makes error recovery predictable.
colcon build --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo for
development; Release for deployment.-Wall -Wextra -Wpedantic and treat warnings as errors in CI.colcon test with --event-handlers console_cohesion+ so test
output groups by package.rosdep.yaml for reproducible dependency resolution./opt/ros/, .ccache/, and build//install/ in CI to cut build
times by 60–80%.| Anti-pattern | Why it hurts | Fix |
|---|---|---|
| Global variables for node state | Breaks composition, untestable | Store state as class members |
spin() in main() for multi-node processes | Starves other nodes | Use MultiThreadedExecutor or component composition |
| Hardcoded topic names | Breaks reuse across robots | Use relative names + namespace remapping |
KEEP_ALL history with no bound | Memory grows unbounded on slow subscribers | Use KEEP_LAST with explicit depth |
Using time.sleep() / std::this_thread::sleep_for | Blocks the executor thread | Use create_wall_timer or a dedicated thread |
| Monolithic launch file for everything | Unmanageable past 10 nodes | Compose launch files with IncludeLaunchDescription |
Skipping package.xml dependencies | Builds locally, breaks CI and Docker | Declare every dependency explicitly |
| Publishing in constructor | Subscribers may not be ready, messages lost | Publish in on_activate or after a short timer |
| Ignoring QoS compatibility | Silent communication failure | Match publisher/subscriber QoS or check with ros2 topic info -v |
| Creating timers/subs in callbacks | Resource leak, unpredictable behavior | Create all entities in constructor or on_configure |
| Synchronous service call in callback | Deadlocks the executor thread | Use async_send_request with a callback or dedicated thread |
| Service client in same callback group as caller | Deadlocks even with async in MultiThreadedExecutor | Put service client in a separate MutuallyExclusiveCallbackGroup |
| No safe command on shutdown | Motors hold last velocity after node exits | Send zero-velocity in on_deactivate AND destructor (see references/hardware-interface.md) |
Dynamic subscriptions with StaticSingleThreadedExecutor | New subs are never picked up after spin() | Use SingleThreadedExecutor or MultiThreadedExecutor for dynamic entities |
CPU frequency governor left on powersave/ondemand | 10-100 ms latency spikes in RT path | Set performance governor, disable turbo boost (see references/realtime.md) |
When upgrading between distributions, check these breaking changes first:
Foxy → Humble:
ros2_control was not bundled in Foxy — must be built separately.Humble → Jazzy:
ros2_control API changed from 2.x to 4.x — export_state_interfaces() and
export_command_interfaces() are now auto-generated by the framework. Manual
overrides use on_export_state_interfaces(). See references/hardware-interface.md.get_value() deprecated → use get_optional<T>() on LoanedStateInterface /
LoanedCommandInterface (controller side). Hardware interfaces use set_state() /
get_state() / set_command() / get_command() helpers with fully qualified names.<ros2_control> tag must exist in the URDF.--param-file with spawner.storage_id='mcap'.nav2_params.yaml schema changes — recoveries_server renamed to behavior_server.ROS_AUTOMATIC_DISCOVERY_RANGE replaces ROS_LOCALHOST_ONLY (values: LOCALHOST,
SUBNET, OFF, SYSTEM_DEFAULT).launch_ros actions have new parameter handling — test launch files explicitly.Jazzy → Kilted (non-LTS):
rmw_zenoh is production-ready.
Install: sudo apt install ros-kilted-rmw-zenoh-cpp, set
RMW_IMPLEMENTATION=rmw_zenoh_cpp. Supports router/peer/client modes.rclcpp::executors
(no experimental namespace). Also ported to rclpy.ament_target_dependencies() deprecated — use target_link_libraries() with
modern CMake targets (e.g. rclcpp::rclcpp, std_msgs::std_msgs__rosidl_typesupport_cpp).ros2 bag play.ROS 1 → ROS 2:
references/migration-ros1.md for a step-by-step strategy.# Workspace
colcon build --symlink-install --packages-select my_pkg
colcon test --packages-select my_pkg
colcon graph --dot # dependency graph (DOT format)
source install/setup.bash
# Introspection
ros2 node list
ros2 topic list -t
ros2 topic info /topic_name -v # shows QoS details
ros2 topic hz /topic_name
ros2 topic bw /topic_name
ros2 service list -t
ros2 action list -t
ros2 param list /node_name
ros2 param describe /node_name param
ros2 interface show std_msgs/msg/String
# ros2_control
ros2 control list_controllers
ros2 control list_hardware_interfaces
ros2 control list_hardware_components
# Debugging
ros2 doctor --report # alias: ros2 wtf
ros2 run tf2_tools view_frames
ros2 bag record -a -o my_bag
ros2 bag info my_bag
ros2 bag play my_bag --clock
# Lifecycle
ros2 lifecycle list /node_name
ros2 lifecycle set /node_name configure
ros2 lifecycle set /node_name activate© LeoYeAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 38 other files (scripts, references) in skills/ros2-engineering-skills of LeoYeAI/openclaw-master-skills.
Open the folder on GitHubat commit e5199b5
Ros2 Engineering Skills 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 |
|---|---|---|---|---|---|---|
| Ros2 Engineering Skills this skillLeoYeAI/openclaw-master-skills | 2.2k | — | ~5k | Automated safety check: Notes | MIT | |
| PR Reviewkimdre/doco-cd | 1.7k | — | ~311 | Automated safety check: Pass | Apache-2.0 | |
| CI Adhoc Testnubjs/nub | 4.4k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Releasing MarchatCod-e-Codes/marchat | 137 | — | ~801 | Automated safety check: Pass | MIT | |
| Senior DevOps Toolkitmaslennikov-ig/claude-code-orchestrator-kit | 260 | 6 repos | ~1.1k | Automated safety check: Notes | Custom licence | |
| GitHub Actions CreatorFNOSP/FlyNarwhal | 509 | 1 repos | ~2.4k | Automated safety check: Pass | AGPL-3.0 |
kimdre/doco-cd
Review pull request diffs for correctness and regressions, and provide actionable feedback when asked to review a PR.
nubjs/nub
Run ad-hoc / exploratory tests on a real OS or platform via CI when the behavior CANNOT be reproduced on the local host or in Docker — macOS Seatbelt / sandbox-exec / codesigning, Windows cmd.exe /…
Cod-e-Codes/marchat
Prepares marchat releases: version bumps, CHANGELOG, packaging checksums, GitHub Actions release workflow, and Docker tags.
maslennikov-ig/claude-code-orchestrator-kit
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…
FNOSP/FlyNarwhal
A skill your agent uses when the user wants to create, generate, or set up a GitHub Actions workflow.
swig/swig
Reproduce a GitHub Actions Linux CI failure locally when it does not happen on your machine: a podman/docker image that mirrors the ubuntu-22.04 runner by reusing the real Tools/CI-linux-.sh install…
LeoYeAI/openclaw-master-skills
Manages pipelines on a DevOps quality and efficiency platform through its OpenAPI: list workspaces and templates, create, update, run and cancel pipelines, and read run records.
LeoYeAI/openclaw-master-skills
Patches OpenClaw's Feishu extension so an edited document triggers an isolated agent session that reads the doc and replies inline, turning it into a live chat space.
LeoYeAI/openclaw-master-skills
Multi-context memory management system for OpenClaw agents with group-isolated storage, global shared memory, workspace organization, and group-specific skills isolation.
LeoYeAI/openclaw-master-skills
Runs a brand's AI-search visibility work end to end: diagnosing how AI platforms represent it, repositioning it, producing AI-optimized content and monitoring ongoing mentions.
LeoYeAI/openclaw-master-skills
Installs and authenticates the gws CLI, then automates Gmail, Drive, Sheets, Calendar, Docs, Chat and Tasks with ready-made recipes, persona bundles and security audits.
LeoYeAI/openclaw-master-skills
Runs four advisor roles, a fitness coach, nutritionist, data analyst and TCM practitioner, to build a health profile and track workouts, diet and wellness over time.
Works with
Categories
Comprehensive ROS 2 engineering guide covering workspace setup, node architecture, communication patterns (topics/services/actions with QoS), lifecycle and component nodes, launch composition…. Ros2 Engineering Skills is an agent skill from LeoYeAI/openclaw-master-skills. Comprehensive ROS 2 engineering guide covering workspace setup, node architecture, communication patterns (topics/services/actions with QoS), lifecycle and component nodes, launch composition, tf2/URDF, ros2control hardware interfaces, real-time constraints, Nav2, MoveIt 2, perception pipelines, simulation (Gazebo/Isaac Sim), security (SROS2/DDS), micro-ROS (MCU/RTOS), multi-robot systems (fleet management/Open-RMF), testing, debugging, deployment, and ROS 1 migration.
Ros2 Engineering Skills fits situations like: ever the user works on ROS 2 code; DDS configuration; any robotics middleware task involving rclcpp; gazebo/Isaac Sim.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a claude-code`. Or copy the skill folder (skills/ros2-engineering-skills in LeoYeAI/openclaw-master-skills) into .claude/skills/ros2-engineering-skills in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a codex`. Or copy the skill folder (skills/ros2-engineering-skills in LeoYeAI/openclaw-master-skills) into .agents/skills/ros2-engineering-skills 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 LeoYeAI/openclaw-master-skills --skill ros2-engineering-skills -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ros2-engineering-skills, .gemini/skills/ros2-engineering-skills, .github/skills/ros2-engineering-skills and .opencode/skills/ros2-engineering-skills in your project.
Going by SKILL.md and its folder, Ros2 Engineering Skills needs the command-line tools its instructions call (apt). Our summary lists: Python 3; Docker.
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 notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Ros2 Engineering Skills is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 113k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Ros2 Engineering Skills: PR Review (kimdre/doco-cd, 1.7k stars), CI Adhoc Test (nubjs/nub, 4.4k stars), Releasing Marchat (Cod-e-Codes/marchat, 137 stars) and Senior DevOps Toolkit (maslennikov-ig/claude-code-orchestrator-kit, 260 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LeoYeAI (a GitHub user) maintains it in LeoYeAI/openclaw-master-skills, which has 2,161 GitHub stars. The repository holds 1,235 skills in this directory. The repository was last updated on July 20, 2026.
Source: LeoYeAI/openclaw-master-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.