Generate X/Twitter release promotion posts with ASCII tables and CodeSnap rendering. Use when writing release posts, promotion tweets, plugin announcements, or preparing social media content for new versions.
npx skills add https://github.com/oliver-kriska/claude-elixir-phoenix --skill promote
Generate data-driven X/Twitter posts for plugin releases with ASCII cards ready for CodeSnap screenshots.
Run /promote vX.Y.Z after tagging a release. Optionally add a title: /promote v2.8.0 "LiveView Streams Overhaul".
All files go to scratchpad/x-posts/{version}-release.md (create directory if needed).
The output file contains three sections:
Collect these metrics (all are verifiable commands — run them, don't estimate):
| Metric | How to get it |
|--------|---------------|
| File count + insertions/deletions | git diff --stat {prev-tag}..{tag} |
| Skill count | ls plugins/elixir-phoenix/skills/ \| wc -l |
| Agent count | ls plugins/elixir-phoenix/agents/*.md \| wc -l |
| Iron Law count | Grep for numbered Iron Laws in CLAUDE.md |
| Eval scores | make eval-all (run it, report actual numbers) |
| Changelog entries | Read CHANGELOG.md for this version's section |
| Before/after metrics | Depends on release — look for quantifiable changes |
The strongest posts have before/after comparisons. Look for changes in CHANGELOG.md that have measurable deltas (line counts, counts of affected files, error rates, coverage numbers).
The card is the visual centerpiece — it gets screenshotted via CodeSnap and attached to tweet 1.
Rules:
┌─┐│└┘╞═╡╤╪╧ for borders and separators—) and arrows (→) are single-width but easy to miscount. Every line between the top ┌ and bottom └ borders must be exactly 72 visual charactersAlso save the ASCII card as a separate .txt file at scratchpad/x-posts/{version}-table.txt for CodeSnap input.
See ${CLAUDE_SKILL_DIR}/references/templates.md for the proven card format and past examples.
Follow the hook → findings → details → CTA structure. Read ${CLAUDE_SKILL_DIR}/references/templates.md for proven tweet patterns.
Thread rules (from analytics on 7 posts, 6.9K-9.9K views):
#ElixirLang #ClaudeCode hashtags.Voice and tone:
Output the exact command to render the ASCII card as an image. The card .txt file from Step 2 is the input.
Use the config file at scratchpad/x-posts/codesnap-claude-dark.json (dark gradient, tight margins, no watermark):
codesnap -f scratchpad/x-posts/{version}-table.txt \
-o scratchpad/x-posts/{version}-card.png \
--config scratchpad/x-posts/codesnap-claude-dark.json \
--title "claude-elixir-phoenix {version}" \
-l text
Then render and verify the image looks correct by reading the output PNG.
Every claim in the tweets must have a corresponding entry in the fact-check section:
## Fact-Check
- File stats: `git diff --stat {prev}..{tag}` (output: N files, +X/-Y)
- Eval scores: `make eval-all` output — N skills avg X.XXX, N agents X.XXX
- [claim]: [exact command or file:line that proves it]
If a claim can't be verified with a command or file reference, flag it as UNVERIFIED and suggest rewording.
When deciding whether a release warrants its own post:
The v2.6.1 post (37 likes, 1.4K views) vs v2.6.0 (150 likes, 5.5K views) demonstrates this — back-to-back releases dilute signal. When in doubt, wait and bundle.
You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message.
Write rigorous, conversion-focused marketing copy for landing pages and emails. Enforces brief confirmation and strict no-fabrication rules.
Write and add new blog posts for this Next.js site by matching the existing BlogPost structure in `src/lib/blog-data.ts`. Use when asked to draft a new blog article, update blog content, or produce SEO metadata/slug/image details for a new post.
Adds multi-language support to Next.js websites with proper SEO configuration including hreflang tags, localized sitemaps, and language-specific content. Use when adding new languages, setting up i18n, optimizing for international SEO, or when user mentions localization, translation, multi-language, or specific languages like Japanese, Korean, Chinese.
LinkedIn post writing with hook formulas, formatting rules, and engagement patterns. Covers post types, algorithm signals, character limits, and content pillars. Use for: LinkedIn posts, professional content, thought leadership, B2B content, personal branding. Triggers: linkedin post, linkedin content, linkedin writing, linkedin strategy, linkedin engagement, linkedin algorithm, linkedin hook, linkedin formatting, thought leadership, professional content, b2b content, linkedin growth
| Write and rewrite marketing copy for landing pages, homepages, and ads. Useful as a copy chief partner during launches.
Automates the complete Xiaohongshu (XHS / Little Red Book) content operation workflow: pain-point topic collection → style case collection → topic selection → content writing → publishing → performance tracking. Use when user mentions xiaohongshu auto posting, xhs auto post, little red book posting, xiaohongshu post, xiaohongshu auto posting, xiaohongshu content operations, xhs content marketing, post to xiaohongshu, publish on xhs, post on xiaohongshu, xiaohongshu promotion, xiaohongshu operations, xiaohongshu automation, xhs automation, track xhs performance, track xiaohongshu performance, xiaohongshu data tracking, xiaohongshu analytics, switch xhs account, update xhs keywords.
电商图片文案创作技能,支持多品类产品的吸引性文案生成,适用于电商平台的商品营销推广
Take oliver-kriska/promote from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.