From dora-skills
Configures robot control nodes in dora dataflows for arms (Agilex Piper, Reachy 2), chassis (UGV, kit car), and VLA policy inference (RDT-1B).
How this skill is triggered — by the user, by Claude, or both
Slash command
/dora-skills:hub-robotThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Robot arms, chassis, and vision-language-action models
Robot arms, chassis, and vision-language-action models
| Node | Install | Description | Type |
|---|---|---|---|
| dora-piper | pip install dora-piper | Agilex Piper arm | Arm |
| dora-reachy2 | pip install dora-reachy2 | Pollen Reachy 2 humanoid | Humanoid |
| dora-ugv | pip install dora-ugv | Agilex UGV chassis | Chassis |
| dora-kit-car | pip install dora-kit-car | Open-source chassis | Chassis |
| dora-rdt-1b | pip install dora-rdt-1b | Robotic Diffusion Transformer | VLA |
Agilex Piper robot arm control.
Install Agilex Piper SDK:
git clone https://github.com/agilexrobotics/piper_sdk
cd piper_sdk
# Follow setup and installation instructions
Ensure CAN bus is activated and leader arms are not connected.
- id: piper
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: policy/positions # Float32Array joint targets
outputs:
- joint_state # Current joint positions
Pollen Robotics Reachy 2 humanoid robot.
- id: reachy
build: pip install dora-reachy2
path: dora-reachy2
inputs:
command: control/command
outputs:
- image_left # Left camera image
- image_right # Right camera image
- joint_state # Joint positions
Agilex UGV (Unmanned Ground Vehicle) control.
- id: ugv
build: pip install dora-ugv
path: dora-ugv
inputs:
velocity: control/velocity # [linear_x, angular_z]
outputs:
- odometry # Position and velocity feedback
Open-source educational chassis.
- id: car
build: pip install dora-kit-car
path: dora-kit-car
inputs:
command: control/command
Robotic Diffusion Transformer for policy inference from images and language.
- id: policy
build: pip install dora-rdt-1b
path: dora-rdt-1b
inputs:
image: camera/image
instruction: input/text # Natural language instruction
outputs:
- action # Joint positions/velocities
nodes:
# Camera
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/100
outputs:
- image
# Microphone for voice commands
- id: microphone
build: pip install dora-microphone
path: dora-microphone
inputs:
tick: dora/timer/millis/100
outputs:
- audio
# Speech to text
- id: whisper
build: pip install dora-distil-whisper
path: dora-distil-whisper
inputs:
input: microphone/audio
outputs:
- text
# VLA policy
- id: policy
build: pip install dora-rdt-1b
path: dora-rdt-1b
inputs:
image: camera/image
instruction: whisper/text
outputs:
- action
# Robot arm
- id: arm
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: policy/action
outputs:
- joint_state
# Visualization
- id: rerun
build: pip install dora-rerun
path: dora-rerun
inputs:
image: camera/image
joint_state:
source: arm/joint_state
metadata:
primitive: "jointstate"
nodes:
# Leader arm (human operated)
- id: leader
build: pip install dora-piper
path: dora-piper
inputs:
tick: dora/timer/millis/20
outputs:
- joint_state
env:
MODE: leader
CAN_INTERFACE: can0
# Follower arm (robot)
- id: follower
build: pip install dora-piper
path: dora-piper
inputs:
joint_positions: leader/joint_state
outputs:
- joint_state
env:
MODE: follower
CAN_INTERFACE: can1
# Camera for recording
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/33
outputs:
- image
# Recording for imitation learning
- id: recorder
build: pip install llama-factory-recorder
path: llama-factory-recorder
inputs:
image_right: camera/image
ground_truth: leader/joint_state
outputs:
- text
import pyarrow as pa
import numpy as np
# 7-DOF arm joint positions (radians)
joint_positions = np.array([0.0, -0.5, 0.0, 1.0, 0.0, 0.5, 0.0], dtype=np.float32)
# Send joint command
node.send_output("joint_positions", pa.array(joint_positions), {
"num_joints": 7,
"primitive": "jointstate"
})
if event["type"] == "INPUT":
joint_state = event["value"].to_numpy()
print(f"Joint positions: {joint_state}")
# 7 values: [x, y, z, qx, qy, qz, qw]
pose = np.array([0.5, 0.0, 0.3, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)
node.send_output("pose", pa.array(pose), {"primitive": "pose"})
nodes:
# Camera
- id: camera
build: pip install opencv-video-capture
path: opencv-video-capture
inputs:
tick: dora/timer/millis/33
outputs:
- image
# Object detection
- id: yolo
build: pip install dora-yolo
path: dora-yolo
inputs:
image: camera/image
outputs:
- bbox
# Navigation control (custom node)
- id: navigator
path: navigator.py
inputs:
detections: yolo/bbox
outputs:
- velocity
# Chassis
- id: ugv
build: pip install dora-ugv
path: dora-ugv
inputs:
velocity: navigator/velocity
outputs:
- odometry
# Visualization
- id: rerun
build: pip install dora-rerun
path: dora-rerun
inputs:
image: camera/image
detections: yolo/bbox
- id: rerun
build: pip install dora-rerun
path: dora-rerun
inputs:
jointstate_piper: arm/joint_state
env:
piper_urdf: /path/to/piper.urdf
piper_transform: "0 0.3 0" # x y z offset
Note: URDF file paths in the URDF are relative to the dataflow working directory.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub zhanghandong/dora-skills --plugin dora-skills