跳到正文
cccskills
免费在 GitHub 公开中文介绍

Broadcast

将现成的文字、图片或视频一次发布到 X、LinkedIn、Bluesky 和 Instagram,检查各平台限制并提供预览及状态报告;还支持 X Articles、Omny 播客和新闻通讯分享。

原文查看原文说明

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)

实测评分 未实测

查看安装方法

适用场景

  • 向多个平台同步发布公告
  • 发送前预览社交媒体内容
  • 在 X 发布长文
  • 在各平台分享新闻通讯

中文介绍

功能

此技能可将准备好的文字、图片和视频发布到 X、LinkedIn、Bluesky 和 Instagram。发送前会检查各平台的字符数和媒体限制,也可用 --dry-run 查看预览。发布后会分别报告各平台的结果。此外,它还支持发布 X Articles、将播客节目发布到 Omny Studio,以及分享新闻通讯。此技能负责分发已准备好的内容,不负责撰写文案。

适用场景

想把同一条公告发到多个社交平台、发送前检查内容,或分享新闻通讯和播客节目时,可以使用此技能。Instagram 发布必须附带媒体,因此发到该平台时需提供图片或视频。

使用示例

  • “把这段文字和图片发布到 X、LinkedIn 和 Bluesky。”
  • “也把我最近发布在 X 的内容分享到 LinkedIn 和 Instagram。”
  • “把这期新闻通讯分享到各个社交平台。”

注意事项

使用的平台都需要完成相应的身份验证设置。图片和视频必须通过本地文件提供。Instagram 不支持纯文字帖子。发布前请查看预览;发布 X Articles 或播客节目等无法撤销的操作时,技能会等待确认。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

文档检查

AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。

安全性发送数据、删除文件、执行命令等是否有说明
B部分不足会公开发布内容,并说明不可撤销的发布需等待确认。
安装难易度所需工具和 API 密钥是否少且有说明
B部分不足需要各平台的 OAuth、密码或 API 密钥,并提供 Setup.md。

不计入评分。 由 AI(OpenAI Codex)于 2026年10月28日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 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(原文)

安装前可以查看交给 AI 代理的指令内容。

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

免费有简介

按类别或厂商查找并获取网络安全报告,比较威胁、勒索软件、数据泄露、云安全和AI趋势。分析会注明每项数据的厂商、年份及报告,并分别呈现来源间的分歧。

  • 按类别查找威胁报告
  • 获取指定厂商的报告
  • 比较多家厂商的勒索软件趋势
danielmiessler/LifeOS2万2026年10月28日 更新

ApertureOscillation

免费有简介

通过三轮分析,对比单个功能或组件的设计需求与整个系统的目标,梳理两者的冲突、合适的实现范围,以及方案是否符合整体方向。

  • 判断服务或库是否应拆分
  • 比较功能需求与产品方向
  • 检查新组件是否符合现有系统
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 论文,并整理标题、作者、摘要和链接;查看新投稿,也可在有内容时获取 AlphaXiv 的人工智能生成概述。

  • 查看人工智能和机器学习新论文
  • 查找特定主题的论文
  • 按论文编号或 arXiv 网址查询
danielmiessler/LifeOS2万2026年10月28日 更新

查看 danielmiessler 的全部技能

报告此技能的问题