| name | mechdog |
| description | Control a Hiwonder MechDog robot or the local MechDog simulator through tool calls. |
| tags | ["robotics","simulator","mechdog"] |
| metadata | {"openclaw":{"emoji":"robot","requires":["MECHDOG_IP for hardware, optional for simulator","OPENAI_API_KEY for OpenAI vision"]}} |
MechDog Control Skill
Use this skill to control a Hiwonder MechDog quadruped or the local simulator.
Operating Rules
- For movement or action requests, call a MechDog tool directly.
- For natural-language movement requests, first derive the exact low-level command list that will execute the request, then run that list.
- If direct MechDog tools are not exposed in the current runtime, use the
exec tool to call the simulator or robot HTTP API directly.
- In
exec fallback mode, only use the real transport endpoints: /move, /action, /status, /position, /reset, and camera endpoints. Do not invent HTTP endpoints from tool names such as /circle, /square, or /movement_pattern.
- Do not use
sessions_spawn for MechDog movement, action, status, camera, or vision requests. The MechDog agent should execute the skill itself instead of asking a subagent to control the same dog.
- Do not emit multiple MechDog tool calls in the same assistant response when order matters. Use one routine tool when available, or execute steps strictly one at a time.
- Do not manually improvise circle, square, triangle, figure-eight, zigzag, patrol, or loop requests. Convert them into an explicit command list first, then execute the list.
- For rich natural-language requests that combine patterns, timing, and follow-up actions, prefer
execute_request so the LLM can plan once and the skill can execute deterministically.
- Do not ask the user for simulator credentials or access details for normal local simulator use.
- If
MECHDOG_IP is unset, assume the simulator at localhost:3000.
- Keep tool usage concrete and brief. Prefer one tool call per requested step.
Tool Routing
move
Use move for locomotion and turning commands.
Parameters:
direction: one of forward, backward, left, right, stop
duration_ms: optional, default 1000
Interpretation:
- "move left", "go left", "turn left", "rotate left" ->
direction: "left"
- "move right", "go right", "turn right", "rotate right" ->
direction: "right"
- "move forward", "walk forward", "go ahead" ->
direction: "forward"
- "move backward", "go back", "reverse" ->
direction: "backward"
- "stop", "halt" ->
direction: "stop"
Defaults:
- If the user gives no duration, use
1000 ms.
- If the user says "for 3 seconds", use
3000 ms.
Examples:
- "Ask the dog to move to the left." -> call
move with direction: "left", duration_ms: 1000
- "Walk forward for 2 seconds." -> call
move with direction: "forward", duration_ms: 2000
HTTP fallback:
curl -sS -X POST "http://${MECHDOG_IP:-localhost:3000}/move" \
-H "Content-Type: application/json" \
-d '{"direction":"forward","duration":1000}'
action
Use action for preset actions.
Parameters:
action: one of sit, stand, shake, wave, dance, balance
Examples:
- "Sit down." ->
action: "sit"
- "Stand up and wave." -> first
action: "stand", then action: "wave"
HTTP fallback:
curl -sS -X POST "http://${MECHDOG_IP:-localhost:3000}/action" \
-H "Content-Type: application/json" \
-d '{"name":"sit"}'
look
Use look to capture a camera frame without analysis.
square_pattern
Use square_pattern for square, box, perimeter, loop, patrol, or multi-side walking requests.
Parameters:
segment_duration_ms: walk time for each side
turn_direction: left or right
final_actions: optional follow-up actions such as sit and wave
Examples:
- "Move in a square pattern for 5 seconds each direction and then sit and wave." -> call
square_pattern with segment_duration_ms: 5000, turn_direction: "right", final_actions: ["sit", "wave"]
- "Walk a box pattern, 2 seconds per side, turning left." -> call
square_pattern with segment_duration_ms: 2000, turn_direction: "left"
square
Use square for direct requests that literally ask to move in a square or box.
Examples:
- "Move in a square for 5 seconds each side." -> call
square with duration_ms: 5000
- "Do a left square and then sit." -> call
square with turn_direction: "left", final_actions: ["sit"]
circle_pattern
Use circle_pattern for circle, lap, orbit, round loop, or curved patrol requests.
Parameters:
segment_duration_ms: total time for one full circle
turn_direction: left or right
repeat_count: optional number of full circles
final_actions: optional follow-up actions such as sit and wave
Examples:
- "Move in a circle for 10 seconds." -> call
circle_pattern with segment_duration_ms: 10000, turn_direction: "right"
- "Do two left circles and then wave." -> call
circle_pattern with segment_duration_ms: 4000, turn_direction: "left", repeat_count: 2, final_actions: ["wave"]
circle
Use circle for direct requests that literally ask to move in a circle, lap, orbit, or loop.
Examples:
- "Move in a circle for 10 seconds." -> call
circle with duration_ms: 10000
- "Do two circles and then wave." -> call
circle with repeat_count: 2, final_actions: ["wave"]
command_plan
Use command_plan when you need the exact low-level move/action sequence for a request before execution.
Examples:
- "Move in a circle for 10 seconds." -> build a list like alternating
right 250ms, forward 417ms, repeated
- "Move in a square for 5 seconds each side and then sit." -> build a list like
forward 5000ms, six right-turn steps, repeated per side, then action sit
movement_pattern
Use movement_pattern for broader named patterns, especially triangle, figure-eight, and zigzag requests. Prefer circle_pattern for direct circle requests.
Parameters:
pattern: one of square, triangle, circle, figure_eight, zigzag
segment_duration_ms: duration for each side/leg for polygonal patterns, and total loop duration for circle
turn_direction: left or right
repeat_count: optional number of full repetitions
final_actions: optional follow-up actions
Examples:
- "Do a figure eight and then dance." -> call
movement_pattern with pattern: "figure_eight", final_actions: ["dance"]
- "Make a zigzag pattern twice." -> call
movement_pattern with pattern: "zigzag", repeat_count: 2
execute_request
Use execute_request for natural-language requests that need interpretation before execution.
Examples:
- "Move in a circle for 20 seconds and then sit and wave." -> call
execute_request
- "Do a square patrol and finish with a dance." -> call
execute_request
- "Make a triangle, then stand." -> call
execute_request
status
Use status to read the current MechDog or simulator state.
HTTP fallback:
curl -sS "http://${MECHDOG_IP:-localhost:3000}/status"
see
Use see to analyze the camera image with a vision model.
Parameters:
question: optional analysis prompt
provider: one of openai, nebius, anthropic; default openai
Environment
- Simulator default:
MECHDOG_IP=localhost:3000
- Hardware example:
MECHDOG_IP=192.168.1.100
- Vision example:
OPENAI_API_KEY=...
OPENAI_MODEL=gpt-5.4-mini