Turn hardware devices into A2A-compliant agents. Your AI can now control robots, sensors, and IoT devices.
Compact ESP32 device with display, IMU, battery.
import { createM5StickAgent } from '@qusd/hardware-skills/m5stick';
const agent = createM5StickAgent({
m5stickUrl: 'http://192.168.0.146',
port: 8000,
});
await agent.start();
// Agent discoverable at /.well-known/agent.jsonCapabilities:
get_sensorsβ IMU, battery, button statedisplay_textβ Show text on LCDplay_toneβ Play audio tonesscan_wifiβ Scan nearby networksset_ledβ Control LED
WAVE ROVER, UGV Rover, UGV Beast, RaspRover, UGV01/02.
import { createUGVAgent } from '@qusd/hardware-skills/waveshare';
const agent = createUGVAgent({
ugvUrl: 'http://192.168.1.100:5000',
port: 3010,
});
await agent.start();Capabilities:
move_robotβ Motor control (-100 to 100)stop_robotβ Emergency stopset_cameraβ Pan-tilt camera controlget_sensorsβ Battery, ultrasonic, IMUcapture_imageβ Camera snapshot
git clone https://github.com/QUSD-ai/hardware-skills
cd hardware-skills
bun install- Flash your M5StickC Plus 2 with the NANDA firmware
- Connect to same WiFi network
- Run the adapter:
M5STICK_URL=http://192.168.0.146 bun run m5stick- Set up your UGV with ugv_jetson
- Start the Flask server on the robot
- Run the adapter:
UGV_URL=http://192.168.1.100:5000 bun run waveshareOnce running, other agents can discover your hardware:
import { discoverAgent } from '@qusd/nanda-skill';
const robot = await discoverAgent('http://192.168.1.100:3010');
console.log(robot.capabilities); // ['move_robot', 'get_sensors', ...]
// Send command
await sendMessage('http://192.168.1.100:3010', 'move forward slowly');Most AI agents are stuck in the cloud. These skills give them a body:
- Vision β Camera on M5Stick or UGV
- Motion β Motor control on UGV
- Sensing β IMU, ultrasonic, battery
- Communication β A2A protocol for multi-agent systems
Build robots that can hire other robots for tasks. π€βπ€
MIT
- nanda-skill β A2A protocol SDK
- M5Stack β M5StickC Plus 2 hardware
- Waveshare UGV β Robot kits