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.zip

Installs 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.
227 chars✓ has a “when” trigger
Intermediate

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

You give it
pending lock celebration payload
You get back
social media posts on X and Telegram, and a re-armed cron job

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 jupLockedShort CLKN) + "OTHER LOCKS" (engraved strmLockedShort CLKN). Never name or tag a non-Jupiter locker in art or copy (owner ask 2026-08-01).
  • Cluck hauls exactly newLocks bag(s), main bag reads "+{deltaShort} CLKN", walking TOWARD the vault named in platform (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)

  1. X: GET /api/x-announce?key=…&post=1&text={pending.xText}&image={rawUrl} → capture post id.
  2. 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}
  3. 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

PREMIUM_ACCESS_KEYsonnet subagentnano_banana_pro image generation toolPillow Python library

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.

SkillInstallsUpdatedSafetyDifficulty
lock-celebration (this skill)01moNo flagsIntermediate
gifgrep93moNo flagsBeginner
agent-tools05moReviewBeginner
skills02moReviewBeginner

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry