kit/plugins/social-media-tools/skills/blog-share/SKILL.md
Creates social media copy and a dark-mode card for a blog post. Formats content for LinkedIn, Twitter, and Bluesky with appropriate tone and length. Use when asked to share or post a blog post on LinkedIn, Twitter, or Bluesky.
npx skillsauth add shawn-sandy/agentics blog-shareInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Draft platform-aware social media copy and generate a styled dark-mode card image for a blog post URL or local markdown file.
| Phase | Action |
|-------|--------|
| 0 — Locate | Locate templates/ and derive PLUGIN_DIR |
| 1 — Collect Input | Detect URL vs local file; resolve relative paths; ask platform + tone |
| 1c — Reuse check | Scan docs/media/social/ for existing blog posts; offer reuse |
| 2 — Fetch Metadata | WebFetch OG tags (URL) or Read front matter (local); HTML-escape all values |
| 3 — Draft Copy | Write platform-aware copy |
| 4 — Populate Template | Fill blog-card.html; inject conditional elements + {{COPY_PANELS}} |
| 4b — Save | Persistent save to docs/media/social/ |
| 5 — Screenshot | Serve HTML locally; Playwright screenshot |
| 6 — Deliver | Present copy + attach PNG + show saved path |
Run silently:
ls ~/devbox/agentics/kit/plugins/social-media-tools/templates 2>/dev/null && \
echo "$HOME/devbox/agentics/kit/plugins/social-media-tools/templates"
find ~/.claude/plugins -path "*/social-media-tools/templates" -type d 2>/dev/null | head -1
find ~/.claude -path "*/social-media-tools/templates" -type d 2>/dev/null | head -1
Use the first non-empty result as TEMPLATES_DIR. Derive:
PLUGIN_DIR=$(dirname "$TEMPLATES_DIR")
If not found: output "Templates not found. Install the plugin or load it with --plugin-dir." and STOP.
Detect the source type:
http:// or https://.md, .mdx, or .markdownIf the user provides a relative path, resolve it:
realpath "$USER_PATH" 2>/dev/null || echo "$PWD/$USER_PATH"
Use AskUserQuestion to collect whatever is missing. Batch all questions in one call:
| Input | Options | Notes |
|-------|---------|-------|
| SOURCE | URL or file path | Required |
| PLATFORM | LinkedIn, Twitter/X, Bluesky, All sites | Required |
| TONE | Professional, Casual, Punchy | Default: Professional (LinkedIn), Punchy (Twitter/Bluesky) |
| HOOK_ANGLE | Free text | Optional |
FILE_PREFIX=blog
Read $PLUGIN_DIR/references/reuse-check.md and follow its procedure.
Use ToolSearch with select:WebFetch first (silent, no user output), then call WebFetch.
Both steps happen silently.
Call WebFetch on SOURCE. Extract:
| Variable | Source |
|----------|--------|
| TITLE | <meta property="og:title"> → <title> fallback |
| EXCERPT | <meta property="og:description"> → first <p>, truncated to 280 chars |
| AUTHOR | <meta property="article:author"> → "" if not found |
| DATE | <meta property="article:published_time"> → MMM D, YYYY → "" if not found |
| SOURCE_DOMAIN | Hostname, strip www. |
| TAGS | <meta property="article:tag">, up to 5 |
| READ_TIME | "" — do not compute for URL sources |
Call Read on the resolved absolute path. Extract:
| Variable | Source |
|----------|--------|
| TITLE | YAML front matter title: → first # H1 |
| EXCERPT | YAML description: → first non-heading paragraph, truncated to 280 chars |
| AUTHOR | YAML author: → "" |
| DATE | YAML date: → MMM D, YYYY → "" |
| SOURCE_DOMAIN | YAML site: or url: hostname → "local file" |
| TAGS | YAML tags: array, up to 5 |
| READ_TIME | Word count of body (excl. front matter + headings) / 200 wpm, rounded |
Before any template substitution, apply to every text value:
& → & (must be first)< → <> → >For character limits and universal copy rules, read $PLUGIN_DIR/references/platforms.md.
For copy format and filled examples per platform, read references/platforms.md.
Present drafted copy in a fenced code block labelled with the platform name. Wait for approval.
\n---\n as POST_COPY_TEXT_RAWLINKEDIN_COPY, TWITTER_COPY, BLUESKY_COPY){{READ_TIME_BADGE}}
READ_TIME is non-empty: <span class="read-time">N min read</span>""{{TAGS_FOOTER}}
TAGS has at least one value:
<div class="card-footer"><span class="tag">tag1</span><span class="tag">tag2</span></div>
(each tag value HTML-escaped)""Read $PLUGIN_DIR/references/copy-panels.md for markup and escaping rules.
Replace all {{VARIABLE}} placeholders. Write to ~/.claude/tmp/blog-share-card.html:
mkdir -p ~/.claude/tmp
TEMP_HTML=blog-share-card.html
FILE_PREFIX=blog
SLUG_INPUT=$TITLE
Read $PLUGIN_DIR/references/saving-and-delivery.md — Persistent Save section.
Read $PLUGIN_DIR/references/rendering-pipeline.md and follow the full pipeline.
Read $PLUGIN_DIR/references/saving-and-delivery.md — Deliver section.
data-ai
Craft-prompt: interviews users and assembles a structured AI prompt using Anthropic best-practice techniques. Use when the user runs /plan-agent:craft-prompt or asks to craft a prompt.
development
Generates a SOCIAL.md project sharing config by analyzing the codebase. Use when asked to set up social sharing preferences or create a SOCIAL.md file.
development
Explains how any project file, component, or concept works. Reads source files and synthesizes developer-friendly principles, social copy, and a dark-mode card. Use when asked 'how does X work' or 'explain X'.
development
Generate an HTML implementation-plan document. Produces a self-contained .html plan file with steps, acceptance criteria, and metadata. Use when the user asks to create a plan document, generate an HTML plan, or write a plan file — not for general planning questions.