Skip to content
Development
Skill

/promote

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.

From plugin
claude-elixir-phoenix
574106 skills37 agents2 commands

Claude Code

$ npx -y skills add oliver-kriska/claude-elixir-phoenix --skill promote --agent claude-code

SKILL.md

promote.SKILL.md
name: promote
description: 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.
effort: medium

/promote — Release Promotion Post Generator

Generate data-driven X/Twitter posts for plugin releases with ASCII cards ready for CodeSnap screenshots.

When to use

Run `/promote vX.Y.Z` after tagging a release. Optionally add a title: `/promote v2.8.0 "LiveView Streams Overhaul"`.

Output

All files go to `scratchpad/x-posts/{version}-release.md` (create directory if needed).

The output file contains three sections: 1. **ASCII Card** — box-drawing table for CodeSnap screenshot 2. **Tweet Thread** — 3-5 tweets in proven format 3. **CodeSnap Command** — exact CLI command to render the card 4. **Fact-Check** — every claim with verifiable data source

Execution Flow

Step 1: Gather Data

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

Step 2: Write the ASCII Card

The card is the visual centerpiece — it gets screenshotted via CodeSnap and attached to tweet 1.

Rules:

  • **Exactly 72 characters wide** (including borders) — consistent with past posts
  • Use Unicode box-drawing: `┌─┐│└┘╞═╡╤╪╧` for borders and separators
  • Include: version + title, headline stats, before/after table, repo URL
  • The table content comes from Step 1 data — pick the 3-5 most impressive changes
  • **VERIFY ALIGNMENT**: After writing the table, run a Python script to check every line has the same visual width. Off-by-one errors are the most common problem — em dashes (`—`) and arrows (`→`) are single-width but easy to miscount. Every line between the top `┌` and bottom `└` borders must be exactly 72 visual characters

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

Step 3: Write the Tweet Thread

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):**

  • **Tweet 1 (Hook)**: Version + one compelling sentence about what changed. Include headline stats (files changed, skills, agents). Repo link here — not in a reply. Add `#ElixirLang #ClaudeCode` hashtags.
  • **Tweet 2-3 (Findings)**: The specific changes with numbers. Use numbered lists. Before/after metrics are the highest-performing content type.
  • **Tweet 4-5 (Details/CTA)**: Additional changes + soft CTA ("Try it and let me know how it feels"). Link to release page.
  • **Max 5 tweets** — casual readers drop off after 4-6. If you have more content, cut the least impactful items.

**Voice and tone:**

  • Data-heavy, transparent, no-hype — this is the proven #1 strength
  • Write like a builder sharing real numbers, not a marketer
  • Concrete numbers over adjectives ("32/40 descriptions rewritten" not "improved many descriptions")
  • Never mention API costs or token prices — subscription user, cost per call is irrelevant

Step 4: CodeSnap Command

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.

Step 5: Fact-Check

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.

Bundling Strategy

When deciding whether a release warrants its own post:

  • **Standalone post**: Major features, impressive before/after metrics, new capabilities
  • **Bundle with next release**: Bug fixes, description tweaks, minor config changes
  • **Skip entirely**: Patch releases with <5 files changed and no user-facing changes

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.

Read more
@oliver-kriska
Ships withclaude-elixir-phoenix

Docs: phxagents.dev -- install guides per runtime, the runtime compatibility matrix, all 26 Iron Laws, and a browsable skill and agent catalog. Claude Code is great.

574106 skills37 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
574
Star history of oliver-kriska/claude-elixir-phoenix on GitHub, a chart by star-history.com

Other skills on claude-elixir-phoenix.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about promote.

Which coding agents can use promote?
promote installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.