Install
$ agentstack add skill-broomva-skills-blog-post ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Blog Post — Full-Stack Content Production
Turn a topic into a complete, strategy-aware publishing package: long-form post + social adaptations + multimedia assets.
Compounding Skills
This skill orchestrates — it does not re-implement what already exists:
| Skill | Role in Pipeline | |-------|-----------------| | /content-creation | Storytelling frameworks, visual content strategy, social distribution patterns, AI asset generation (Imagen 4.0, Veo 3.1, TTS), Remotion video | | /deep-research | Multi-source research when topic requires verified claims or data | | /agent-browser | Screenshots, reference extraction, web research | | /pencil | Design social cards, carousel slides, diagrams | | /arcan-glass | BroomVA brand styling for visual assets | | /remotion-best-practices | Video composition, spring animations, sequencing | | /google-veo | Veo 3.1 cinematic prompting — camera vocabulary, shot composition, style direction | | /subtitle-generation | Burn-in subtitles for reels (80% watch muted) | | /prompt-library | Reusable prompts for content generation | | /competitor-intel | Market context when writing about products or strategy |
Rule: Before generating content for any phase, check if a compounding skill handles it better. Delegate, don't duplicate.
Modes
Full Pipeline (default)
BRIEF → RESEARCH → ANGLE → OUTLINE → LONG-FORM → ADAPT → MEDIA → STRATEGY → PUBLISH
9 phases, each produces a file or action in the output package.
X-First Mode
BRIEF → ANGLE → X CONTENT → MEDIA → PUBLISH
Lightweight mode for standalone X content — not derived from a blog post. Use when: building in public, reacting to news, sharing a demo, shipping a contrarian take, or posting a terminal screenshot with context. Produces x-post.md and/or x-thread.md with growth-optimized patterns. See [references/x-growth-strategy.md](references/x-growth-strategy.md).
Triggers: "x post about", "tweet about", "x thread about", "post on x", "ship to x", "build in public"
X-First pipeline:
- Brief — Topic + intent (1 line is enough)
- Angle — Apply the angle test (specificity, tension, evidence) even for short content
- Generate — Use growth-optimized templates: visual proof, native media, engagement hooks, strategic tags
- Media — Terminal screenshot, architecture diagram, demo GIF, or native video (60-90s)
- Publish — Via
xurl postorxurl reply(thread). Always attach media natively (never external links)
X-First content types (see [references/x-growth-strategy.md](references/x-growth-strategy.md)):
- Terminal screenshot + insight (3-5x/week)
- "How I built X" thread (1x/week)
- Demo video, 60-90s native (1x/week)
- Contrarian take (1-2x/week)
- Before/after comparison (1-2x/week)
- "Day N of building X" update (daily optional)
- Strategic reply to big accounts (3-5x/day)
Phase 0: Content Brief Intake
Gather or construct a content brief. See [templates/brief.md](templates/brief.md) for the template.
Required fields:
topic— What this post is aboutintent— Why this post exists (educate, persuade, announce, reflect, document)audience— Who reads this (developers, founders, general, specific community)
Optional fields:
platforms— Target channels (default: all). Options:broomva-tech,substack,x-post,x-thread,linkedin,instagram-post,instagram-reeltone— Voice (default: confident-technical). Options:conversational,academic,provocative,reflective,storytellingreferences— URLs, papers, prior posts to build onmedia— Desired outputs:png,mp4,gif,mp3(default: all)cta— What should the reader do after? (follow, subscribe, try, share, discuss)destination— Primary long-form target (default:broomva-tech). Options:substack,medium,dev-to,hashnodeslug— URL-friendly identifier (auto-generated from topic if omitted)
If the user provides only a topic, infer reasonable defaults and confirm before proceeding.
Phase 1: Research & Enrichment
When to research: If the brief includes references, data claims, or the topic requires external validation.
How to research:
- Use
/deep-researchfor topics needing 5+ verified sources - Use
/agent-browserto extract content from reference URLs - Use web search for current data, trends, or competitor context
- Use
/competitor-intelif topic involves market positioning
Output: research.md — key findings, sources, data points, quotes. Keep it factual and citable.
When to skip: Personal reflections, opinion pieces, internal documentation — research is optional, not mandatory.
Phase 2: Angle & Narrative Selection
The angle is what makes content intentional rather than generic. It answers: "Of all the things I could say about this topic, what specific lens am I using and why?"
Angle selection criteria:
- Audience gap — What does this audience need that isn't being said?
- Unique evidence — What data or experience do I have that others don't?
- Contrarian potential — Is there a widely-held belief I can challenge with evidence?
- Timeliness — Is there a current event or trend that makes this relevant now?
- Story potential — Is there a transformation narrative (before → after)?
Framework selection (from /content-creation storytelling references):
| Content Type | Best Framework | When to Use | |-------------|---------------|-------------| | Case study / results | PSI (Problem-Solution-Impact) | Showing quantified outcomes | | Industry take / opinion | ABT (And-But-Therefore) | Challenging conventional wisdom | | Technical deep dive | 1-3-1 (One idea, three evidence, one takeaway) | Teaching a concept | | Product / launch story | Pixar Spine | Transformation narrative | | Data-driven insight | Data Arc (Context-Tension-Resolution) | Leading with surprising numbers | | Decision documentation | So-What (What-Why-Action) | Internal or reflective posts |
Output: Update outline.md with the chosen angle, framework, and rationale.
Phase 3: Outline Generation
Build a structured outline from the angle. This is the architectural blueprint — all downstream content derives from it.
Outline structure:
# Title Options (3 candidates, pick best)
## Hook (1-2 sentences — the "why should I care" opener)
## Sections
1. [Section name] — [1-line purpose]
- Key point A
- Key point B
- Evidence/data to include
- Media placement: [image/video/gif opportunity]
2. [Section name] — [1-line purpose]
...
## Closing
- Memorable takeaway (one line)
- CTA alignment with brief
## Media Inventory
- Hero image concept
- Supporting images (one per ~300 words)
- Video opportunity (if applicable)
- GIF opportunity (if applicable)
- Audio narration (y/n)
Output: outline.md
Phase 4: Long-Form Content Generation
Write the primary long-form post. Target platform determines format.
broomva.tech (default)
Use the [templates/broomva-tech-post.mdx](templates/broomva-tech-post.mdx) template.
Frontmatter schema:
---
title: "Post Title"
summary: "One-sentence summary for cards and SEO"
date: YYYY-MM-DD
published: true
tags:
- tag1
- tag2
audio: /audio/writing/{slug}.mp3 # if audio generated
---
Content conventions:
- Use standard Markdown (GFM) — the engine renders via remark + remark-gfm
- Embed video: ``
- Images: ``
- Figures:
Caption - Tables: Standard GFM tables (styled by Tailwind prose)
- No custom MDX components needed — raw HTML works
Substack / Alternative Platforms
Use [templates/substack-post.md](templates/substack-post.md). Standard Markdown, no frontmatter beyond title/subtitle. Adjust image paths to be relative or hosted URLs.
Output: broomva-tech-post.mdx and/or substack-post.md (based on destination in brief)
Phase 5: Cross-Platform Adaptation
Critical rule: Each platform gets native content, not a copy-paste resize. The core message is shared; the expression is platform-native.
Adaptation Matrix
| Platform | Length | Format | Hook Style | Media | CTA Style | |----------|--------|--------|-----------|-------|----------| | X blog post | Freeform (no limit) | Long-form article | Narrative hook + hero image | Images, video, GIFs inline | Link + engagement | | X post | 280 chars | Single tweet | Punchy stat or claim | 1 image | Implied (engagement) | | X thread | 5-8 tweets | Numbered thread | Scale proof or contrarian | Image every 2-3 tweets | Link in final tweet | | LinkedIn | 1300 chars | Paragraphs + bullets | First 210 chars = hook | 1 image or document carousel | Direct ask | | Instagram post | 2200 chars caption | Caption + carousel (1080x1350) | Visual-first, caption supports | 1-10 carousel images | Save/share/link in bio | | Instagram reel | 15-60s script | Video script + captions | 3-second hook | 9:16 vertical video | Follow/link in bio |
Platform-Specific Content Generation
See [references/platform-adaptation.md](references/platform-adaptation.md) for detailed per-platform strategies.
X Blog Post — Full long-form article published directly on X (formerly "Twitter Articles"). Freeform length — can match or exceed the broomva.tech post. Supports inline images, videos, GIFs, and rich formatting. Unlike the broomva.tech post, the X blog post is written for X's audience and algorithm — more conversational, more opinionated, more multimedia-dense. Every section should be accompanied by a visual (image, diagram, GIF, or video clip). The hero image is critical — it's the thumbnail that determines clicks. Use Imagen 4.0 for hero + supporting images, Veo 3.1 clips for inline video, and ffmpeg GIFs for demos. See [references/x-blog-post.md](references/x-blog-post.md).
X Post — Extract the single most surprising or provocative insight. Always attach an image (terminal screenshot, diagram, before/after, or generated visual) — text-only posts get 60% less reach. No external links in post body (X suppresses them) — put links in a self-reply. Include an engagement hook: question, contrarian frame, or "reply with your experience." Tag 1-2 relevant accounts when genuinely building on their work. See [references/x-growth-strategy.md](references/x-growth-strategy.md).
X Thread — Re-tell the story in tweet-sized beats. Each tweet stands alone while building momentum. Spend 50% of effort on tweet 1 — it determines everything. Image every 2-3 tweets (increases completion by 45%). Self-reply the full chain fast (don't trickle). End with CTA: question for replies, Discord invite, or link in final self-reply. Tag the most relevant account in tweet 1 if crediting their work. See [references/x-growth-strategy.md](references/x-growth-strategy.md).
LinkedIn — Professional framing. Lead with insight or contrarian take in first 210 chars (before "See More" fold). Use bullet lists for key takeaways. 3-5 hashtags max.
Instagram Post — Design a carousel: cover slide with hook, 1 insight per slide (flashcard style, not paragraphs), stat slide, CTA slide. Caption tells the story; slides show the highlights.
Instagram Reel — Write a script with: 3-second visual hook, problem statement (5s), key insight (10-15s), evidence or demo (10-15s), CTA (5s). Vertical 9:16 format. See [references/reel-production.md](references/reel-production.md) for Veo 3.1 prompting and subtitle burn-in.
Output: x-blog-post.md, x-post.md, x-thread.md, linkedin-post.md, instagram-post.md, instagram-reel.md
Phase 6: Multimedia Production
Plan and produce media assets. See [references/multimedia-production.md](references/multimedia-production.md).
Asset Types
| Asset | Tool | When | |-------|------|------| | Hero image / social card | Nano Banana (gemini-3.1-flash-image) | Always — every post needs a hero | | Supporting images | Nano Banana or /agent-browser screenshots | 1 per ~300 words | | Animated GIF | ffmpeg from video or ImageMagick from frames | UI demos, flow previews | | Audio narration | kokoro-tts / Edge TTS / ElevenLabs | If mp3 in media targets | | Video composition | Remotion + AI clips (Veo 3.1) | If mp4 in media targets | | Instagram carousel PNGs | /pencil MCP | If Instagram in platforms |
Media Prompt Generation
For each planned asset, generate a specific AI prompt in media/image-prompts.md:
- Describe the visual concept tied to the content it accompanies
- Include style direction (dark theme, technical, minimal, etc.)
- Specify dimensions and aspect ratio per platform
Audio Script
If audio is targeted, extract the post body text and write a narration-ready script in media/audio-script.md. Strip markdown formatting, add natural pauses, and note pronunciation guides for technical terms.
Video Script
If video is targeted, write a Remotion-compatible composition outline in media/video-script.md:
- Scene breakdown (title, stats, screenshots, workflow, closing)
- Duration per scene
- Transition style
- Asset references (which images/clips to use)
Output: media/ directory with prompt files and any generated assets
Phase 7: Strategy & Distribution Planning
Generate strategy documents for the content package.
Output files in strategy/:
audience.md— Target audience profile, what they care about, where they areplatform-strategy.md— Per-platform approach, posting time, format rationaledistribution-plan.md— Publishing sequence (which platform first, timing gaps, cross-linking)cta.md— Call-to-action strategy aligned across all channels
Distribution Sequencing
Recommended order (adjust per strategy):
- Blog post first (canonical URL)
- X thread within 1 hour (drives initial engagement)
- LinkedIn same day (professional audience, different peak hours)
- Instagram carousel next day (visual audience, different consumption pattern)
- Instagram reel 2-3 days later (extends content lifecycle)
- X post (standalone) as engagement trigger mid-week
Phase 8: Publishing & Distribution
Execute the distribution plan by publishing content to each platform. Uses CLI tools and REST APIs — no third-party services.
Platform Connectors
| Platform | Tool | Auth | Capabilities | |----------|------|------|-------------| | X/Twitter | xurl CLI | OAuth2 (configured via xurl auth oauth2) | Post, thread, reply, media upload, like, repost | | LinkedIn | curl + REST API | OAuth2 bearer token | Text posts, image posts, document carousels | | Instagram | curl + Meta Graph API | Business account + access token | Photo posts, carousel posts, reel uploads | | broomva.tech | cp + git + gh | Git credentials | Copy .mdx + assets, create PR |
X Publishing (via xurl)
Prerequisite check: xurl whoami — if 401, prompt user to run xurl auth oauth2.
Single post:
# Text only
xurl post "$(cat x-post.md | head -1)"
# With image
xurl post "$(cat x-post.md | head -1)" --media media/thumbnails/x-card.png
Thread (parse x-thread.md, post sequentially):
# Extract tweet 1 (the hook), post it, capture the tweet ID
FIRST_ID=$(xurl post "Tweet 1 text" --media media/png/hero.png 2>&1 | jq -r '.data.id')
# Reply chain for remaining tweets
xurl reply $FIRST_ID "Tweet 2 text"
# ... continue for each tweet
Thread parsing logic: Read x-thread.md, split on ### N/N headers, extract text between headers, identify 📸 Image: lines for media attachment. See [references/publishing-automation.md](references/publishing-automation.md).
LinkedIn Publishing (via curl)
Prerequisite: OAuth2 access token stored in ~/.config/blog-post/linkedin-token.
LINKEDIN_TOKEN=$(cat ~/.config/blog-post/linkedin-token)
LINKEDIN_URN=$(cat ~/.config/blog-post/linkedin-urn)
# Uses Posts API v2 (ugcPosts was deprecated
…
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [broomva](https://github.com/broomva)
- **Source:** [broomva/skills](https://github.com/broomva/skills)
- **License:** MIT
- **Homepage:** https://skills.sh/broomva/skills
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.