本文へ移動
cccskills
無料GitHub で公開日本語紹介

Broadcast

X、LinkedIn、Bluesky、Instagramなど複数のSNSへ、テキストや画像・動画をまとめて投稿します。媒体ごとの制限確認やドライラン、投稿状況の確認にも対応します。

原文原文の説明を見る

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.

danielmiessler/LifeOSスター 19,635(GitHub 19,635 + cccskills 0)

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • 同じ内容を複数のSNSに投稿したいとき
  • 公開前に投稿内容をプレビューしたいとき
  • Xで長文記事を公開したいとき
  • ニュースレターを各媒体で共有したいとき

日本語での紹介

できること

用意済みの文章や画像・動画を、X、LinkedIn、Bluesky、Instagramへまとめて投稿します。各サービスの文字数やメディア制限を確認し、--dry-runで送信前のプレビューを表示できます。投稿後は媒体ごとの結果を報告します。通常の投稿に加えて、X Articles、Omny Studioへのポッドキャストエピソード公開、ニュースレターの共有投稿にも対応します。文章そのものの執筆ではなく、受け取った内容の配信を担います。

こんなときに便利

同じ告知を複数のSNSに出したいとき、投稿内容を送信前に確認したいとき、ニュースレターやポッドキャストを各媒体で共有したいときに向いています。Instagramはメディア必須のため、画像や動画を添えて投稿する場面で使えます。

使い方の例

  • 「この文章と画像をX、LinkedIn、Blueskyに投稿して」
  • 「最新のX投稿をLinkedInとInstagramにも共有して」
  • 「このニュースレターを各SNSで共有して」

注意点

利用する各プラットフォームの認証設定が必要です。画像・動画はローカルファイルで指定します。Instagramはテキストのみの投稿に対応しません。公開前にプレビューを確認し、X Articlesやポッドキャストの公開など取り消せない操作では確認を待ちます。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

資料チェック

SKILL.md の記述から、注意が要る操作と導入の前提を AI が確認しました。点数は実際に動かした結果(実行検証)だけで付けています。

安全面送信・削除・コマンド実行などの扱いが明示されているか
B一部不足公開投稿を行い、不可逆操作は確認を待つと記載されています。
導入のしやすさ必要なツールや API キーが少ないか、書かれているか
B一部不足各媒体のOAuth・パスワード・APIキーが必要で、Setup.mdがあります。

点数には入れていません。 2026年10月28日 時点で AI(OpenAI Codex)が判定しました。目安なので、入れる前に原文も確認してください。

評価が違うと思ったら、見直しを依頼する

どの項目が、なぜ違うと思うかを書いてください。ログインは不要です。内容を SKILL.md と照らし合わせて評価を作り直し、この欄に反映します。

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

含まれるファイル(36)

  • SKILL.md12.0 KB
  • Intents/Article.md5.4 KB
  • Intents/Auth.md6.7 KB
  • Intents/Bluesky.md1.6 KB
  • Intents/Instagram.md3.5 KB
  • Intents/LinkedIn.md4.4 KB
  • Intents/Podcast.md3.4 KB
  • Intents/Post.md5.6 KB
  • Intents/SecurityValidation.md3.4 KB
  • Intents/ShareNewsletter.md11.2 KB
  • Intents/Status.md1.9 KB
  • Intents/X.md3.4 KB
  • package.json615 B
  • Setup.md13.4 KB
  • src/adapters/base.ts1.4 KB
  • src/adapters/bluesky.ts4.4 KB
  • src/adapters/index.ts261 B
  • src/adapters/instagram.ts9.8 KB
  • src/adapters/linkedin.ts21.1 KB
  • src/adapters/twitter.ts4.3 KB
  • src/commands/article.ts5.8 KB
  • src/commands/post.ts14.3 KB
  • src/config.ts4.8 KB
  • src/format/linkedin-formatter.ts13.4 KB
  • src/index.ts16.2 KB
  • src/skill-config.ts2.5 KB
  • src/types.ts3.6 KB
  • src/utils/media.ts8.7 KB
  • src/utils/r2-stage.ts4.8 KB
  • Tools/Broadcast.ts376 B
  • Tools/InstagramAuth.ts9.0 KB
  • Tools/LinkedInAuth.help.md1.9 KB
  • Tools/LinkedInAuth.ts10.5 KB
  • Tools/LinkedInComment.ts3.5 KB
  • Tools/OmnyPublish.ts13.8 KB
  • tsconfig.json607 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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

IntentTriggerFile
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
FileRead when
Setup.mdfirst-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

PlatformAuthImagesVideosMedia limitsText limit
Twitter/XOAuth 2.0 user context (the X skill's token store); OAuth 1.0a keys for text onlyUp to 41 per postImages: 5MB, Videos: 512MB280 weighted characters (URLs = 23)
LinkedInOAuth 2.0 access tokenUp to 20 (multiImage)1 per postImages: 8MB, Videos: 500MB3,000
BlueskyApp passwordUp to 41 per postImages: 1MB, Videos: 50MB300
InstagramInstagram Login (60-day token)Up to 10 (carousel)1 (Reel)Images: 8MB JPEG, Videos: 300MB2,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.

Data & Config

The skill body carries no handles, program IDs or newsletter identity. Account-bound values live outside the skill tree (release-excluded) in LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Broadcast/Config.md: the Omny program, playlist ids and episode settings, which Tools/OmnyPublish.ts reads at runtime through src/skill-config.ts; the newsletter name, URL, edition label, the optional share features (sponsor thank-yous, the edition share card and its brand file, the card file prefix, the writing audit) and an optional house-rules overlay, which the ShareNewsletter intent reads; the optional posting preferences house_style and video_followup (both off by default), which post, edit and the platform intents read; and the account handles for reference. Every key, with a made-up example, is in Setup.md. X's token store is configured in the X skill's own Config.md (skills/X/Setup.md). Per-platform API keys are env-var names whose values live in ~/.claude/.env; LinkedIn, Bluesky and Instagram sessions live in ~/.broadcast/credentials.json.

Gotchas

  • "All channels" includes Instagram, which needs media. A post with no media still goes to the three text platforms and reports Instagram as skipped, so ship an image whenever one exists.
  • LinkedIn styling is converted from markdown, and required only under the house style. **bold**, # Header and the rest become LinkedIn's styled text (the table in Intents/LinkedIn.md). With house_style = true in Config.md, every LinkedIn post (cross-posts, newsletter shares, edits) carries a **bold** hook line or # Header lines, the author's words stay verbatim with only the markup added, and post and edit refuse LinkedIn content with no bold span or header line (exit 1, dry-run included); --linkedin-plain is the named exception. With the key absent or false (the default), plain text posts as written. Either way, because ** would show raw on X and Bluesky, LinkedIn gets its own run with its own styled file whenever styled text is shared with another platform.
  • X text is weighted, never raw-truncated. Every HTTP(S) URL counts as 23 characters, while Unicode uses X's code-point/emoji weighting. X/Tools/TwitterText.ts is the shared validator used by Broadcast and X/Tools/post.ts. Preserve the caller's exact text and full canonical URLs; if weighted length exceeds 280, fail closed instead of slicing or adding an ellipsis. After publishing, read the returned tweet with X/Tools/read.ts and confirm each expanded_url equals the intended canonical URL before reporting success.
  • Every video passes the PII gate before upload (LIFEOS/TOOLS/VideoPiiGate.ts, run by post and article): findings stop the post until you add --pii-reviewed; --skip-pii bypasses the scan loudly and is for when the scanner is down only.
  • The send gate proofs the exact bytes each platform receives. post runs SendGate's code-tier proof (LIFEOS/TOOLS/lib/SendGate.ts) on each platform's wire text and media immediately before the network call; a fail closes that platform and nothing is transmitted. Two LinkedIn exceptions: a LinkedIn video is held to LinkedIn's own spec and the video PII gate, not to the proof's file checks, and it uploads from its original path; and a link card's title, description and image are fetched from the linked page at send time, so the gate never sees them (on a URL-only post the commentary is that fetched title, and the gate proofs the URL).
  • LinkedIn's commentary field is "little text format" — unescaped ( ) [ ] { } < > @ # * _ ~ | silently swallow content. The API returns 201 and the post publishes truncated at the first reserved char, so a hook like "(No. 42) is out" is cut mid-line. escapeLittleText() in src/format/linkedin-formatter.ts escapes these outside URLs, well-formed mentions, and letter-led #Word hashtags (#42 still escapes), and assertLittleText() runs on the exact wire string before POST and throws on any unescaped reserved char, so this class now fails loud instead of shipping truncated. Truncation never cuts inside a mention. Dry-run shows the styled text without the escaping backslashes, cut where the escaped wire form is cut, with the link-card URL on its own line.
  • Auth tokens expire. If posting fails, re-check OAuth tokens for each platform before debugging the content.
  • ALL X posting — text and media — runs on the X skill's OAuth 2.0 token store. The twitter adapter hands every post to X/Tools/post.ts, which uses OAuth 2.0 user context (tweet.write + media.write + offline.access). Where the grant lives and who refreshes it is the X skill's Config.md, never this skill's. With no store configured, post.ts falls back to the OAuth 1.0a env keys for text only; X can revoke those keys without notice and they have no media path, so a split path would post text while video silently fails. A twitter 401 on text means the grant lost tweet.write; a 403 on media means the grant is missing media.write — either way, re-auth once via X/Tools/bookmarks.ts authorize.
  • status's twitter row verifies the path posting will use. It checks the X skill's token store first (hasOAuth2Store()) and calls /users/me through it; only with no store does it verify the OAuth 1.0a keys. Keys that merely sit in .env never count as connected, because revoked keys look exactly like live ones until a call fails.

Examples

User: "put my latest tweet on linkedin and insta"
→ Post intent
→ The X post's exact text, links expanded, is live on LinkedIn (bold hook added) and on Instagram with its image, both links reported
User: "Post to LinkedIn only: 'Finally moved the whole build to the new toolchain.' with link https://example.com/blog/toolchain"
→ LinkedIn intent
→ The post is live with the words verbatim and the article's link-preview card, and the post link is reported
User: "post my video ./my-export.mp4 to Instagram"  (the user's own local file; given only a link, the run asks for the local file and never downloads it)
→ Instagram intent
→ The file passes the PII gate and is live as a Reel; the Reel link is reported

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

AnnualReports

無料概要あり

複数ベンダーの年次サイバーセキュリティ報告書を探して取得し、脅威やランサムウェア、侵害統計の傾向を出典付きで比較・分析します。

  • 脅威レポートをカテゴリ別に探したいとき
  • 特定ベンダーの報告書を取得したいとき
  • ランサムウェア動向を複数社で比較したいとき
danielmiessler/LifeOS2万2026年10月28日 更新

ApertureOscillation

無料概要あり

個別の機能や部品の設計と、システム全体の目的を同じ問いで比較し、両者の食い違い、適切な実装範囲、全体との整合性を3段階で整理するスキルです。

  • サービスやライブラリの分割判断
  • 機能要求と製品方針を比較したいとき
  • 新しい部品と既存システムの整合性確認
danielmiessler/LifeOS2万2026年10月28日 更新

Aphorisms

無料概要あり

文章のテーマに合う格言や引用を探し、著者・出典と選定理由を添えて提案します。引用の追加、思想家の調査、利用履歴の管理を通じて、同じ引用の繰り返しも防ぎます。

  • ニュースレター向けの引用探し
  • 出典付きの引用を重複なく保存
  • 思想家の言葉をテーマ別に調査
danielmiessler/LifeOS2万2026年10月28日 更新

Art

無料概要あり

ブログの挿絵や技術図解、比較図、マンガ、アイコンなどを用途別の手順で制作します。形式に合う構図や配色を組み立て、確認用の画像を出力します。

  • ブログの見出し画像を作りたいとき
  • システムの仕組みを図解したいとき
  • 比較や時系列を可視化したいとき
danielmiessler/LifeOS2万2026年10月28日 更新

ArtDirection

無料概要あり

画像や映像、スライド、サイト画面の品質を複数の判定役で評価し、修正点の整理から基準を満たした成果物の引き渡しまで進めます。

  • 画像の修正点を優先順に整理したいとき
  • 映像やスライドを基準に沿って評価したいとき
  • 公開前に見た目が基準を満たすか確認したいとき
danielmiessler/LifeOS2万2026年10月28日 更新

ArXiv

無料概要あり

arXivの論文をテーマ・分野・論文IDで探し、著者や要旨、リンクをまとめます。新着論文の確認や、用意されている場合はAlphaXivのAI生成概要の取得にも対応します。

  • AI・機械学習の新着論文の確認
  • 特定テーマの論文を探したいとき
  • 論文IDやarXivのURLで照会
danielmiessler/LifeOS2万2026年10月28日 更新

danielmiessler のスキルをすべて見る

このスキルの問題を報告する