Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Bootstrap a complete ROS 2 colcon workspace from scratch — directory layout, .gitignore, top-level README, this .claude/ config, an interfaces package and a first Clean Architecture package, and a bringup package. Trigger when the user asks to create a new workspace / start a new ROS 2 project from zero.
.claude/skills/harunkurtdev-new-ros2-workspace/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-16 | ✗→✓ | ▲ Improved | -14% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 2% | 0% |
Use this when there is no workspace yet (the new_ros2_package skill assumes one already exists). The goal is a ready-to-build colcon workspace that already carries this template's .claude/ config, so every later /new-* command works immediately.
<workspace>/
├── .claude/ # this template's config (rules, skills, commands, agents)
├── .gitignore # ignores build/ install/ log/
├── README.md # how to build & run
├── src/
│ ├── <project>_interfaces/ # msgs/srvs/actions (ament_cmake), created first
│ ├── <project>_core/ # first Clean Architecture package
│ └── <project>_bringup/ # launch + params aggregator (ament_python)
├── build/ install/ log/ # generated by colcon (git-ignored)src/bashmkdir -p <workspace>/src cd <workspace> git init # optional but recommended
.claude/ configCopy the template config so the workspace is self-documenting and the slash commands are available:
bashcp -r <path-to>/ros2-claude-code-template/.claude <workspace>/.claude
If the user is inside the template repo already, this step is a no-op.
.gitignoregitignorebuild/ install/ log/ __pycache__/ *.pyc
README.mdInclude the canonical bring-up commands:
bashcolcon build --symlink-install source install/setup.bash colcon test && colcon test-result --all
/new-package)Create them in dependency order:
<project>_interfaces — only if custom msgs/srvs/actions areneeded. ament_cmake + rosidl_default_generators (see rules/ros2_communication.md). Create this first.
<project>_core — the first real package, full Clean Architecturelayout (domain/application/infrastructure/presentation). Delegate to the new_ros2_package skill or /new-package <name> <py|cpp>.
<project>_bringup — ament_python, holds top-level launch/and config/ that compose the system (see ros2_launch_config).
bashcd <workspace> colcon build --symlink-install source install/setup.bash
Do not run the build automatically unless the user asks — print the commands instead.
~/my_robot_ws).acme).suite, a behavior-tree app, etc., point them at the matching command afterwards (/new-vda5050-connector, /new-controller, /new-bt-node, /new-nav2-plugin, …).
The workspace now supports the full command set. Typical next steps:
| Goal | Command | |------|---------| | Add a package | /new-package <name> <py\|cpp> | | Add a node | /new-node <pkg> <name> <kind> <lang> | | Add a launch file | /new-launch <pkg> <name> | | Add a Nav 2 plugin | /new-nav2-plugin <kind> <Class> | | Add a ros2_control controller / hardware | /new-controller / /new-hardware | | Add a behavior-tree node | /new-bt-node | | Add a VDA 5050 connector | /new-vda5050-connector | | Extend the .claude/ config itself | /new-skill, /new-command, /new-agent (skill extending_claude_config) |
Keep domain/ ROS-free, lifecycle by default for resource owners, and declare_parameter for every parameter — the rules in .claude/rules/ apply from the first commit.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 27,558 | 19,989 | -27% | 1 | 1 | 0% | 6,185 | 5,575 | -10% | 0 | 0 | — |
case-04 | pass→pass | 8,195 | 15,031 | +83% | 1 | 1 | 0% | 1,552 | 4,173 | +169% | 0 | 0 | — |
case-03 | fail→fail | 21,959 | 5,236 | -76% | 1 | 1 | 0% | 4,825 | 1,376 | -71% | 0 | 0 | — |
case-01 | fail→fail | 27,174 | 15,645 | -42% | 1 | 1 | 0% | 6,165 | 4,606 | -25% | 0 | 0 | — |
case-05 | pass→pass | 10,158 | 6,624 | -35% | 1 | 1 | 0% | 1,821 | 2,427 | +33% | 0 | 0 | — |
case-06 | pass→pass | 17,339 | 16,113 | -7% | 1 | 1 | 0% | 3,598 | 4,294 | +19% | 0 | 0 | — |
case-07 | pass→pass | 11,114 | 4,842 | -56% | 1 | 1 | 0% | 1,804 | 1,937 | +7% | 0 | 0 | — |
case-08 | fail→pass | 7,666 | 6,847 | -11% | 1 | 1 | 0% | 1,258 | 2,392 | +90% | 0 | 0 | — |
case-09 | pass→pass | 7,524 | 2,864 | -62% | 1 | 1 | 0% | 1,312 | 1,490 | +14% | 0 | 0 | — |
case-10 | pass→pass | 7,699 | 2,456 | -68% | 1 | 1 | 0% | 1,443 | 1,476 | +2% | 0 | 0 | — |
case-11 | pass→pass | 8,918 | 5,417 | -39% | 1 | 1 | 0% | 1,793 | 2,078 | +16% | 0 | 0 | — |
case-12 | fail→fail | 17,668 | 3,865 | -78% | 1 | 1 | 0% | 928 | 1,722 | +86% | 0 | 0 | — |
case-13 | fail→pass | 14,506 | 6,393 | -56% | 1 | 1 | 0% | 2,240 | 2,135 | -5% | 0 | 0 | — |
case-14 | fail→pass | 14,791 | 10,455 | -29% | 1 | 1 | 0% | 2,402 | 2,760 | +15% | 0 | 0 | — |
case-15 | pass→pass | 11,408 | 4,779 | -58% | 1 | 1 | 0% | 2,132 | 1,860 | -13% | 0 | 0 | — |
case-16 | fail→pass | 10,974 | 3,685 | -66% | 1 | 1 | 0% | 1,962 | 1,694 | -14% | 0 | 0 | — |
case-17 | fail→pass | 15,857 | 10,128 | -36% | 1 | 1 | 0% | 2,869 | 2,939 | +2% | 0 | 0 | — |
case-18 | pass→pass | 8,071 | 3,749 | -54% | 1 | 1 | 0% | 1,359 | 1,597 | +18% | 0 | 0 | — |
case-19 | pass→pass | 11,535 | 5,254 | -54% | 1 | 1 | 0% | 1,708 | 1,851 | +8% | 0 | 0 | — |
case-20 | pass→pass | 7,599 | 3,204 | -58% | 1 | 1 | 0% | 1,358 | 1,650 | +22% | 0 | 0 | — |
case-21 | fail→pass | 6,916 | 2,610 | -62% | 1 | 1 | 0% | 1,241 | 1,464 | +18% | 0 | 0 | — |
case-22 | fail→pass | 8,181 | 1,420 | -83% | 1 | 1 | 0% | 1,399 | 1,255 | -10% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.