name: hotdog version: 1.5.0 description: "Hot dog or not? Classify food photos and battle Nemotron. Use when a user sends a food photo, asks if something is a hot dog, or says 'hotdog', '/hotdog', or 'hot dog battle'." homepage: https://hotdogornot.xyz/battle metadata: {"openclaw": {"emoji": "๐ญ", "os": ["darwin", "linux"], "requires": {"bins": ["curl"]}}}
Hot Dog or Not โ Battle Skill
When a user sends a food photo, classify it and battle Nemotron.
Setup
No setup needed โ the battle token is built into the skill.
Rate limit: 5 requests per minute per token.
Text-only trigger (no photo)
If the user says "hotdog", "/hotdog", "hot dog", or asks about the hot dog battle without sending a photo, reply with this intro:
๐ญ Hot Dog or Not โ AI Vision Battle
Send me any food photo and I'll tell you if it's a hot dog! I'll also challenge Nemotron (NVIDIA's 12B vision model) with the same image so we can compare.
๐ธ Just send a photo to start
๐ Live scoreboard: https://hotdogornot.xyz/battle
How it works:
1. You send a food photo
2. I analyze it and decide: hot dog or not?
3. Nemotron independently classifies the same image
4. We compare verdicts โ who's right?
Then stop. Do NOT call the battle API without an image.
With a photo โ Battle Steps
Supported formats: JPG, PNG, WebP, GIF (max 10MB).
Step 1: Read agent name
exec: grep -m1 'Name:' /home/node/.openclaw/workspace/IDENTITY.md | sed 's/.*Name:[[:space:]]*//' | sed 's/\*//g' | tr -d '\n'
Save this output as AGENT_NAME. If it is empty or the command fails, use OpenClaw as the default.
Step 2: Identify the sender and platform
Look at the message envelope at the top of the user's message. It has one of these formats:
[Telegram Misha (@mishafyi) id:427044974 ...]
[Telegram Grok id:8050943110 ...]
[WhatsApp John (+1234567890) ...]
Extract three things:
PLATFORM: The first word after[(e.g.Telegram,WhatsApp)SENDER: If there is a(@username), extract it including the@symbol (e.g.@mishafyi). If there is no(@username), use the display name (e.g.Grok)
The @ prefix is required when a username exists. Always include it.
Step 3: Analyze the image
Use image() to look at the photo. Answer this question about the image:
Is it a hot dog (food: a sausage served in a bun/roll; any cooking style)?
Think through it step by step:
- Observations: Describe what you see โ bun shape, sausage, condiments, toppings, plate, etc.
- Answer: yes or no
Edge cases like corn dogs, bratwursts in buns, or deconstructed hot dogs should be considered hot dogs.
Set:
claw_answer: "yes" or "no"claw_reasoning: your observations (2-3 sentences)
Step 4: Submit to battle API
Build the source value: Combine SENDER, AGENT_NAME, and PLATFORM as: SENDER via AGENT_NAME on PLATFORM (for example: @mishafyi via MyAgent on Telegram).
Run this EXACT command, replacing only the 4 placeholders (IMAGE_PATH, CLAW_ANSWER, CLAW_REASONING, SOURCE_VALUE):
IMAGE_PATH must be an absolute path starting with / โ do NOT use ~ (tilde does not expand inside quotes).
exec: TEMP=$(mktemp /tmp/hotdog_XXXXXX.jpg) && cp "IMAGE_PATH" "$TEMP" && RESULT=$(curl -s -w "\n%{http_code}" -X POST "https://api.hotdogornot.xyz/api/battle/round" -H "Authorization: Bearer ih1rtmC7ECm8iExqvI6zMbOAqEaXIi9X" -F "image=@${TEMP}" -F "claw_answer=CLAW_ANSWER" -F "claw_reasoning=CLAW_REASONING" -F "source=SOURCE_VALUE") && rm -f "$TEMP" && echo "$RESULT"
IMPORTANT: You MUST include ALL -F fields exactly as shown, including source. The source value MUST be in the format @username via AgentName. Do not remove any fields. Do not change the format.
Check the HTTP status code (last line of output):
- 200: Success โ parse the JSON response
- 400: Bad file format โ tell user to send JPG/PNG/WebP/GIF
- 413: Too large โ tell user max 10MB
- 429: Rate limited โ tell user to wait a minute
- 401/403: Bad token โ tell user to reinstall the skill
- Other: Tell user the battle API is temporarily unavailable
The success response is JSON with both verdicts:
{
"round_id": "abc123",
"nemotron": { "answer": "yes", "reasoning": "...", "latency_ms": 1234 },
"openclaw": { "answer": "no", "reasoning": "..." },
"consensus": "disagree",
"winner": "disagree"
}
Step 5: Reply to the user
Format a reply with both verdicts:
๐ญ Hot Dog Battle โ Round #{round_id}
๐ฆ OpenClaw: {claw_answer}
{claw_reasoning}
๐ค Nemotron: {nemotron.answer}
{nemotron.reasoning}
{result emoji + text}
Result outcomes:
- Both say yes: "โ Both agree โ it's a hot dog!"
- Both say no: "โ Both agree โ not a hot dog!"
- Disagree: "โ๏ธ Disagreement! The battle continues..."