add-repository
Add a new Git repository to the message registry for automatic message type loading. Use when the user wants to support message types from a new ROS2 repository, or when adding support for a new message package.
Best use case
add-repository is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Add a new Git repository to the message registry for automatic message type loading. Use when the user wants to support message types from a new ROS2 repository, or when adding support for a new message package.
Teams using add-repository should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/add-repository/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How add-repository Compares
| Feature / Agent | add-repository | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Add a new Git repository to the message registry for automatic message type loading. Use when the user wants to support message types from a new ROS2 repository, or when adding support for a new message package.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Add Repository
This skill guides you through adding a new Git repository to the `zenoh_ros2_sdk/_repositories.py` file to enable automatic message type loading.
## When to Use
- User wants to add support for message types from a new ROS2 repository
- User asks to support a specific repository (e.g., "support geometry2", "add tf2_msgs")
- Message types are not found because the repository isn't registered
- Adding support for new message packages
## 1. Discover Repository Structure
First, identify the repository URL and explore its structure to find message packages.
### A. Get Repository URL
The user may provide:
- Full GitHub URL (e.g., `https://github.com/ros2/geometry2.git`)
- Repository name (e.g., `geometry2`)
- Package name (e.g., `tf2_msgs`)
### B. Explore Repository Contents
Use curl to check the repository structure:
```bash
# List all directories in the repository
curl -s https://api.github.com/repos/ros2/geometry2/contents | \
python3 -c "import sys, json; data = json.load(sys.stdin); \
dirs = [item['name'] for item in data if item['type'] == 'dir']; \
print('\n'.join(sorted(dirs)))"
```
### C. Find Message Packages
Check which directories contain message definitions:
```bash
# Check if a package has a msg directory
curl -s https://api.github.com/repos/ros2/geometry2/contents/tf2_msgs | \
python3 -c "import sys, json; data = json.load(sys.stdin); \
print('\n'.join([item['name'] for item in data if item['type'] == 'dir']))"
```
### D. List Available Messages
Check what messages are in a package:
```bash
# List .msg files in a package
curl -s https://api.github.com/repos/ros2/geometry2/contents/tf2_msgs/msg | \
python3 -c "import sys, json; data = json.load(sys.stdin); \
msgs = [item['name'] for item in data if item['name'].endswith('.msg')]; \
print('\n'.join(sorted(msgs)))"
```
## 2. Determine Repository Structure
Identify the repository layout pattern:
### Pattern A: Meta-Repository (Multiple Packages)
Structure: `<repo_root>/<package>/msg/<message>.msg`
- Example: `common_interfaces`, `rcl_interfaces`, `geometry2`
- Contains multiple packages in subdirectories
- Each package has its own `msg/` directory
### Pattern B: Single Package Repository
Structure: `<repo_root>/msg/<message>.msg` or `<repo_root>/<package>/msg/<message>.msg`
- Example: `example_interfaces`
- Single package, messages at repo root or in package subdirectory
## 3. Determine Commit/Tag
Choose an appropriate commit or tag:
- **Recommended**: Use stable ROS2 distribution tags (e.g., `jazzy`, `iron`, `humble`) for consistency with other repositories
- **Default**: Use `jazzy` to match existing repositories (`rcl_interfaces`, `common_interfaces`, `example_interfaces`, `geometry2`)
- **Rolling**: Use `rolling` branch only if you need latest development features
- **Specific version**: Use commit SHA or version tag for reproducibility
Check available tags:
```bash
curl -s https://api.github.com/repos/ros2/geometry2/tags | \
python3 -c "import sys, json; data = json.load(sys.stdin); \
print('\n'.join([tag['name'] for tag in data[:10]]))"
```
## 4. Add Repository Entry
Edit `zenoh_ros2_sdk/_repositories.py` and add a new entry to `MESSAGE_REPOSITORIES`:
### Template for Meta-Repository
```python
# Repository name (descriptive, matches repo name)
"repository_name": MessageRepository(
url="https://github.com/ros2/repository_name.git",
commit="jazzy", # Use jazzy for consistency with other repositories
cache_path="repository_name", # Local cache directory name
msg_path="", # Empty for standard structure: <package>/msg/<message>.msg
packages=[
"package1", # List all message packages in this repository
"package2",
# ... more packages
],
),
```
### Template for Single Package Repository
```python
"package_name": MessageRepository(
url="https://github.com/ros2/package_name.git",
commit="jazzy", # Use jazzy for consistency, or specific tag/commit
cache_path="package_name",
msg_path="", # Adjust if messages are at repo root vs package subdirectory
packages=[
"package_name", # Single package
],
),
```
### Example: Adding geometry2
```python
# Geometry2 (contains tf2_msgs and other TF2-related packages)
# This repository contains TF2 transform message definitions
# Reference: https://github.com/ros2/geometry2
"geometry2": MessageRepository(
url="https://github.com/ros2/geometry2.git",
commit="jazzy", # Use specific commit/tag for reproducibility
cache_path="geometry2",
msg_path="", # Messages are at <package>/msg/<message>.msg
packages=[
"tf2_msgs", # Contains TFMessage, TF2Error messages
],
),
```
## 5. Verify Package Mapping
The `PACKAGE_TO_REPOSITORY` mapping is automatically generated at the bottom of the file. Verify it includes your new packages:
```python
# Mapping from message package namespace to repository name
PACKAGE_TO_REPOSITORY: Dict[str, str] = {}
for repo_name, repo in MESSAGE_REPOSITORIES.items():
for package in repo.packages:
PACKAGE_TO_REPOSITORY[package] = repo_name
```
This ensures packages like `tf2_msgs` map to `geometry2` repository.
## 6. Check for Linting Errors
Run linting to ensure code quality:
```bash
# Check for linting errors
# (The linter will automatically check when you edit the file)
```
## 7. Test Message Loading (Optional)
Verify the repository works by testing message loading:
```python
from zenoh_ros2_sdk import load_message_type, get_message_class
# Load a message type from the new repository
load_message_type("tf2_msgs/msg/TFMessage")
TFMessage = get_message_class("tf2_msgs/msg/TFMessage")
if TFMessage:
print("Successfully loaded message from new repository!")
```
## Common Repositories
### Already Supported
- `rcl_interfaces` - Core ROS2 interfaces (builtin_interfaces, action_msgs, etc.)
- `common_interfaces` - Standard messages (std_msgs, geometry_msgs, sensor_msgs, etc.)
- `example_interfaces` - Example messages and services
- `geometry2` - TF2 messages (tf2_msgs)
### Potential Additions
- `ros2_interfaces` - Additional ROS2 interfaces
- `rosidl_defaults` - Default message definitions
- Custom repositories with message definitions
## Notes
- **Cache Location**: Repositories are cached in `~/.cache/zenoh_ros2_sdk/` (or `$ZENOH_ROS2_SDK_CACHE`)
- **Automatic Download**: Messages are downloaded automatically when first requested
- **Dependencies**: Message dependencies are resolved automatically
- **Consistency**: Use `jazzy` as the default commit tag to match existing repositories for consistency and reproducibilityRelated Skills
acc-create-repository
Generates DDD Repository interfaces and implementation stubs for PHP 8.5. Creates domain interfaces in Domain layer, implementation in Infrastructure.
acc-create-mock-repository
Generates InMemory repository implementations for PHP 8.5 testing. Creates fake repositories with array storage, supporting CRUD operations and queries without database.
tech-blog
Generates comprehensive technical blog posts, offering detailed explanations of system internals, architecture, and implementation, either through source code analysis or document-driven research.
ontopo
An AI agent skill to search for Israeli restaurants, check table availability, view menus, and retrieve booking links via the Ontopo platform, acting as an unofficial interface to its data.
ux
This AI agent skill provides comprehensive guidance for creating professional and insightful User Experience (UX) designs, covering user research, information architecture, interaction design, visual guidance, and usability evaluation. It aims to produce actionable, user-centered solutions that avoid generic AI aesthetics.
astro
This skill provides essential Astro framework patterns, focusing on server-side rendering (SSR), static site generation (SSG), middleware, and TypeScript best practices. It helps AI agents implement secure authentication, manage API routes, and debug rendering behaviors within Astro projects.
modal-deployment
Run Python code in the cloud with serverless containers, GPUs, and autoscaling using Modal. This skill enables agents to generate code for deploying ML models, running batch jobs, serving APIs, and scaling compute-intensive workloads.
vly-money
Generate crypto payment links for supported tokens and networks, manage access to X402 payment-protected content, and provide direct access to the vly.money wallet interface.
whisper-transcribe
Transcribes audio and video files to text using OpenAI's Whisper CLI, enhanced with contextual grounding from local markdown files for improved accuracy.
chrome-debug
This skill empowers AI agents to debug web applications and inspect browser behavior using the Chrome DevTools Protocol (CDP), offering both collaborative (headful) and automated (headless) modes.
thor-skills
An entry point and router for AI agents to manage various THOR-related cybersecurity tasks, including running scans, analyzing logs, troubleshooting, and maintenance.
grail-miner
This skill assists in setting up, managing, and optimizing Grail miners on Bittensor Subnet 81, handling tasks like environment configuration, R2 storage, model checkpoint management, and performance tuning.