lock-celebration
Automated social media workflow for lock-celebration announcements.
Install
mkdir -p .claude/skills/lock-celebration && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17188" && unzip -o skill.zip -d .claude/skills/lock-celebration && rm skill.zipInstalls to .claude/skills/lock-celebration
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Fire the CLKN lock-celebration one-post flow (X first with image, then Telegram with the X link) from the pending payload. Use when new locks land, when the owner says "fire the lock post", or when re-arming the hourly watcher.Key capabilities
- →Read pending lock celebration payload
- →Generate a two-vault image with progress bars
- →Composite a 'ROAD TO 40%' progress tracker
- →Post to X (formerly Twitter) with image and text
- →Post to Telegram with image and X link
- →Re-arm an hourly cron job for lock watching
How it works
The skill reads a pending payload, uses a subagent to generate an image with specific visual elements and progress bars, then posts this image and associated text to X and Telegram, and re-arms an hourly cron job.
Inputs & outputs
When to use lock-celebration
- →Automate lock progress posts
- →Generate progress bar images
- →Coordinate social media announcements
About this skill
Lock celebration — one-post flow (owner standing approval)
All endpoints are gated: append &key=$PREMIUM_ACCESS_KEY. NEVER post when pending is null.
1. Read the pending payload
GET https://clucknorris.app/api/lock-celebration?key=… → if pending is null, STOP (nothing to announce).
Payload fields: delta/total/pct/newLocks/lockCount, tgText, xText, announced,
jupLockedShort, strmLockedShort, platform, deltaShort.
2. Generate the TWO-VAULT image (all elements mandatory)
Spawn a sonnet subagent (claude-sonnet-5) to craft the Higgsfield prompt, then
generate_image (nano_banana_pro, ~2 credits). Scene spec:
- TWO vault doors: "JUPITER LOCK" (engraved
jupLockedShortCLKN) + "OTHER LOCKS" (engravedstrmLockedShortCLKN). Never name or tag a non-Jupiter locker in art or copy (owner ask 2026-08-01). - Cluck hauls exactly
newLocksbag(s), main bag reads "+{deltaShort} CLKN", walking TOWARD the vault named inplatform(that door glows). - ⛔ CLUCK MUST NEVER READ AS LEAVING A VAULT WITH THE BAG — that stages a robbery, the exact opposite of the story (owner, repeatedly; escalated 2026-08-02 after the 49.02% post shipped with him walking away). Stage him three-quarter REAR view, chest and beak pointed INTO the glowing open door, bag clearly inbound. Prompt it explicitly AND verify it on the render: before posting, check his facing the same way you check the plaques — if his body faces the camera or away from the glowing vault while carrying the bag, the render is FAILED; re-roll the pose, do not post it.
- Banner across both doors: "{pct} OF SUPPLY LOCKED". Dark + orange palette, crisp legible type.
- Use the branded mascot reference from
docs/MEDIA_LIBRARY.md; VIEW the render and verify every label before posting. - Prompt the AI to keep the BOTTOM 15% of frame quiet (plain floor, no text/objects).
2b. Composite the "ROAD TO 50%" progress tracker (owner ask 2026-07-10 — the lock-post signature)
python3 scripts/lockbar.py <render.png> <final.jpg> <pctLocked e.g. 45.211> [target=50]
(fonts ship in scripts/; needs Pillow — pip install pillow). Draws the exact-fill progress bar
on the bottom strip. If the render has a text typo, patch it deterministically with
Pillow (sample brass + redraw glyph) — do NOT re-roll AI edits on tiny plaque text (it makes
new typos; cost us a CCKN on 2026-07-10).
⛔ HOST THE COMPOSITE ON OUR OWN ORIGIN — do NOT use Higgsfield media_confirm. That tool is
gateway-pinned to always_ask (unfixable from any settings page — see HANDOFF_2026-08-02 §1
addendum), so hosting through it stalls the flow on a permission tap the owner has explicitly
refused (2026-08-02: "I shouldn't have to do this"). Instead: cp the final composite to
public/lock-post-<pct>.jpg, commit, push to main; Railway's build copies public/ into dist/
and the static handler serves it. Poll https://clucknorris.app/lock-post-<pct>.jpg until 200
(~2-4 min), then post THAT url. Generation (generate_image, job_display, media_upload) is
still Higgsfield — those are always_allow and never prompt; it is ONLY the confirm step that is
pinned. Post the composite, never the raw render.
⚠️ The target lives in lockbar.py's DEFAULT — do not just pass it as argv[4]. Three separate
sessions "raised it to 50" by passing 50 on the command line while leaving the default at 40, so the
next session read 40 and drew a full bar on an already-passed goal. Owner, 2026-08-01: "we have
already made it 50 percent twice, so this keeps reverting." Current default is 60% (supply locked passed 50% on 2026-08-03 — 500,014,343 CLKN /
50.00% / 72 escrows, milestone posted; the 45/46/47/49% climb is history). When 60% is passed,
edit the default in scripts/lockbar.py AND this line, and commit — a runtime argument is not a
decision that sticks.
3. Post — X FIRST, then Telegram (if announced:false)
- X:
GET /api/x-announce?key=…&post=1&text={pending.xText}&image={rawUrl}→ capture post id. - Telegram (SILENT — never loud):
GET /api/tg-test?key=…&photo={rawUrl}&text={pending.tgText}%0A%0A🐦 On X — like %26 repost: https://x.com/FireChicken007/status/{id} - Clear:
GET /api/lock-celebration?key=…&clear=1
3b. Fallback already fired (announced:true)
Degrade to two-step: X image reply under xPostId with a SHORT punchline (never restate numbers);
TG photo with self-sufficient caption + replaceMsg= (comma-join tgMessageIds).
4. Re-arm (each long-lived session)
CronCreate jobs expire ≤7 days — re-arm an hourly cron: poll → if pending: generate → post → clear.
Floor is 10K CLKN (LOCK_WATCH_MIN_DELTA); server fallback posts text-only after 6h if no session picks it up.
When not to use it
- →When the pending payload is null
- →When `announced` is true for the initial post flow
- →When the goal is not to post about CLKN lock progress
Prerequisites
Limitations
- →All endpoints are gated by `PREMIUM_ACCESS_KEY`
- →Requires a sonnet subagent for image prompt crafting
- →Requires `nano_banana_pro` for image generation
How it compares
This skill automates a specific multi-platform social media announcement flow with custom image generation and progress tracking, which is more integrated than manual posting.
Compared to similar skills
lock-celebration side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| lock-celebration (this skill) | 0 | 1mo | No flags | Intermediate |
| gifgrep | 9 | 3mo | No flags | Beginner |
| agent-tools | 0 | 5mo | Review | Beginner |
| skills | 0 | 2mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
gifgrep
openclaw
Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
agent-tools
aiskillstore
Run 150+ AI apps via inference.sh CLI - image generation, video creation, LLMs, search, 3D, Twitter automation. Models: FLUX, Veo, Gemini, Grok, Claude, Seedance, OmniHuman, Tavily, Exa, OpenRouter, and many more. Use when running AI apps, generating images/videos, calling LLMs, web search, or autom
skills
Sergio-prog
Fram is a compact media workshop for the terminal, API, and Telegram. The current primary surface is the `fram` CLI, backed by the same typed processing core used by the API and bot.
BotBowl Party Agent Guide
kbarbel640-del
Complete guide for AI agents to participate in BotBowl Party — a virtual Super Bowl party for bots
reddit-post
PHY041
Post to Reddit using AppleScript Chrome control. Use when user wants to post to Reddit, share on subreddits, or promote open source projects on Reddit. Triggers on "post to reddit", "share on reddit", "reddit post", "submit to subreddit", or any Reddit posting request.
tiktok-automation
TJSNDHU
Automate TikTok tasks via Rube MCP (Composio): upload/publish videos, post photos, manage content, and view user profiles/stats. Always search tools first for current schemas.