Install
openclaw skills install word-jumbleGenerate a Word Jumble puzzle — scrambled words with circled letters that spell out a final idiom, plus a cartoon illustration hint and a printable puzzle im...
openclaw skills install word-jumbleGenerates a complete Word Jumble puzzle: 4 scrambled words → circled letters → final idiom answer, with a cartoon hint image and a printable rendered screenshot.
This skill does not post anywhere. Posting is the caller's responsibility.
All output goes into an output/ directory (create if needed, default: ~/.openclaw/workspace/word-jumbles/):
output/YYYY-MM-DD-puzzle.json — raw puzzle dataoutput/images/YYYY-MM-DD-cartoon.jpg — tall cartoon hint image (9:16)output/images/YYYY-MM-DD-printable.png — rendered 1200×900 printable screenshottype Puzzle = {
scrambles: {
scrambled: string[]; // shuffled letters
unscrambled: string[]; // correct word, letter by letter
circled: number[]; // 1-indexed positions in unscrambled
clue_letters: string[]; // letters at those positions (must match)
clue: string; // wordplay clue, no answer giveaway
}[];
final_puzzle: {
scrambled: string[]; // circled letters shuffled (spaces for word breaks)
clue: string; // clue for the idiom, no answer giveaway
solution: string[]; // answer letters + spaces
imageUrl: string; // relative path to cartoon image
};
}
sorted(scrambled) === sorted(unscrambled) for every wordclue_letters[i] === unscrambled[circled[i] - 1] for all i (1-indexed)sorted(all clue_letters) === sorted(solution letters excluding spaces)Always validate in code before proceeding. Use scripts/validate_puzzle.py:
python3 scripts/validate_puzzle.py output/YYYY-MM-DD-puzzle.json
Prompt the LLM (yourself) with this structure:
Make a Word Jumble puzzle whose final answer is a common idiom. Use 4 words (8–10 letters each). Each word has 2–3 circled letters. Verify every circled position extracts the right letter. Verify circled letters anagram to the final answer. Format as JSON matching the Puzzle type.
Then validate the output in code using validate_puzzle.py. Regenerate if invalid — do not proceed with a broken puzzle.
Use image_generate with a 9:16 aspect ratio. The image must:
Save to output/images/YYYY-MM-DD-cartoon.jpg.
Bake the puzzle JSON and cartoon path into assets/puzzle-template.html:
__PUZZLE_JSON__ with the JSON string__CARTOON_IMAGE__ with the cartoon filename (relative, same directory when served)Serve the HTML locally (localhost only):
cd <tmpdir containing html + cartoon> && python3 -m http.server 7891 --bind 127.0.0.1
Open http://localhost:7891/puzzle.html in the browser tool, resize viewport to 900×900, screenshot (fullPage: false), save to output/images/YYYY-MM-DD-printable.png. (Layout is fluid — the body fills 100% width, so the viewport width controls the final puzzle width.)
Kill the server after screenshotting.
Hand back:
Do not post anywhere — the caller decides what to do with the output.
image_generate is unavailable, skip the cartoon and note it in output127.0.0.1 only — not accessible from the network