Skip to content
AI & Agents
Skill

/Broadcast

Multi-platform social syndication CLI: post text and media to X, LinkedIn, Bluesky, and Instagram from one command, with per-platform limits, --dry-run, status checks; also X Articles, podcast episodes to Omny, newsletter shares. USE WHEN broadcast, post to social media,

From plugin
danielmiessler-lifeos
20k97 skills13 agents34 commands

Claude Code

$ npx -y skills add danielmiessler/lifeos --skill Broadcast --agent claude-code

SKILL.md

Broadcast.SKILL.md
name: Broadcast
metadata:
  short-description: "Publish to X, LinkedIn, Bluesky, Instagram, X Articles, and Omny podcasts from one CLI; copy is written elsewhere first."
version: 1.7.3
evals:
  deterministic:
    - command: 'bun "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/Broadcast/src/index.ts" post --content "**Testing** my Broadcast setup" --platforms twitter --dry-run'
      falsifier: "the dry run does not print the TWITTER preview box and 'Dry run complete' with exit 0, so the CLI, its X text validation or its preview path is broken (sends nothing, needs no credentials)"
description: "Multi-platform social syndication CLI: post text and media to X, LinkedIn, Bluesky, and Instagram from one command, with per-platform limits, --dry-run, status checks; also X Articles, podcast episodes to Omny, newsletter shares. USE WHEN broadcast, post to social media, cross-post, post to all, syndicate, publish to all platforms, post to Instagram, check platform status, post this everywhere, share the newsletter, edition share card, newsletter share card, sponsor thank-you in the share. NOT FOR writing the copy itself, X-only ops (X), Substack."

Broadcast Skill

**Contents:** Ideal State · Intent Routing · Platforms · Data & Config · Gotchas · Examples

Posts to X/Twitter, LinkedIn, Bluesky and Instagram from one command, and also publishes X Articles, podcast episodes to Omny Studio and newsletter share posts. It checks each platform's character and media limits before sending, previews with `--dry-run`, and reports per-platform status. Auth is per platform (table under Platforms; first-time setup in `Setup.md`, day-two auth in `Intents/Auth.md`). X posting runs through the public `X` skill's tools and its OAuth 2.0 token store. This skill posts; it does not write the copy, which comes from a copywriting skill or the principal first.

Ideal State

  • A broadcast reaches every platform the principal named, and "all channels", "everywhere", "all three" or "all four" means all four; a platform that fails or is skipped is reported with its reason while the rest still post.
  • Each platform gets text that fits its own limit and format before anything is sent: X text is weighed and never sliced, and styled LinkedIn text goes in a run of its own.
  • When the principal hands over written prose, their words go out verbatim with only platform markup added; drafting new copy belongs to a copywriting skill.
  • A cross-post of the principal's latest X post ("put my latest tweet on LinkedIn and Insta") carries that post's exact text and media, read back from X with `X/Tools/read.ts`, with t.co links expanded to their real URLs and nothing added beyond LinkedIn styling.
  • Nothing public goes out unpreviewed: a `--dry-run` comes first, irreversible publishes (an X Article, a live podcast episode) wait for confirmation, and success is reported from what the platform returned (post links, X `expanded_url` matching the canonical URL, a verified Omny publish).

Intent Routing

| Intent | Trigger | File | |--------|---------|------| | **X** | "post to X", "tweet", "post to Twitter" | `Intents/X.md` | | **Article** | "post an article to X", "publish as an X article", "long-form on X", "intro post plus article link" | `Intents/Article.md` | | **LinkedIn** | "post to LinkedIn", "LinkedIn post" | `Intents/LinkedIn.md` | | **Bluesky** | "post to Bluesky", "Bluesky post" | `Intents/Bluesky.md` | | **Instagram** | "post to Instagram", "Instagram post", "reel", "carousel" | `Intents/Instagram.md` | | **Podcast** | "post as podcast", "publish podcast episode", "put this on the podcast", "Omny" | `Intents/Podcast.md` | | **ShareNewsletter** | "share the newsletter", "newsletter share post", "post the newsletter to LinkedIn", "share this week's edition", "edition share card", "sponsor thank-you in the share" | `Intents/ShareNewsletter.md` | | **Post** | "broadcast", "post to all", "cross-post" | `Intents/Post.md` | | **Status** | "check status", "platform status" | `Intents/Status.md` | | **Auth** | "configure", "auth", "setup platform" | `Intents/Auth.md` | | **SecurityValidation** | "validate content", "check post" | `Intents/SecurityValidation.md` |

| File | Read when | |------|-----------| | `Setup.md` | first-time setup: the Config.md fields, each platform's account and secrets, the scheduled token renewal, and the proof it works | | `Tools/` | running a platform tool directly; `Tools/LinkedInAuth.help.md` is the full `LinkedInAuth.ts` contract (the tool itself prints a one-line usage) |

Platforms

| Platform | Auth | Images | Videos | Media limits | Text limit | |----------|------|--------|--------|--------------|------------| | Twitter/X | OAuth 2.0 user context (the X skill's token store); OAuth 1.0a keys for text only | Up to 4 | 1 per post | Images: 5MB, Videos: 512MB | 280 weighted characters (URLs = 23) | | LinkedIn | OAuth 2.0 access token | Up to 20 (multiImage) | 1 per post | Images: 8MB, Videos: 500MB | 3,000 | | Bluesky | App password | Up to 4 | 1 per post | Images: 1MB, Videos: 50MB | 300 | | Instagram | Instagram Login (60-day token) | Up to 10 (carousel) | 1 (Reel) | Images: 8MB JPEG, Videos: 300MB | 2,200 | | Podcast (Omny Studio) | OMNYSTUDIO_API_KEY | | | | | | X Articles (long-form) | Same X OAuth 2.0 store | | | | |

**Supported formats:**

  • Images: JPG, JPEG, PNG, GIF, WebP (Instagram auto-converts to JPEG)
  • Videos: MP4, MOV, AVI, WebM

`--media` takes local file paths only; a remote URL fails with "Media file not found". **Instagram is media-required** (no text-only posts) and JPEG-only for images; its R2 staging contract is in `Intents/Instagram.md`.

Post logs append to `LIFEOS/MEMORY/STATE/Broadcast-YYYY-MM-DD.jsonl` under your LifeOS directory (`~/.claude/LIFEOS` by default; `LIFEOS_BROADCAST_LOG_DIR` overrides it), outside the skill dir. The CLI entry points are `bun ${LIFEOS_SKILL_DIR}/src/index.ts` and its alias `Tools/Broadcast.ts`; each intent carries its own commands.

##

Read more
@danielmiessler
Ships withdanielmiessler-lifeos

⛰️ LifeOS — The universal AI Harness designed to move you from Current to Ideal state in both life and work.

20k97 skills13 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
19.7k
Star history of danielmiessler/lifeos on GitHub, a chart by star-history.com

Other skills on danielmiessler-lifeos.

More skills from other plugins.

Questions about Broadcast.

Which coding agents can use Broadcast?
Broadcast 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.