本期是 Skills 生态拆解第 2 轮,方向是单件深度开箱。材料边界先交代:本期在线搜索与抓取通道未获放行,全部事实来自一个一手来源——本机装机 ~/.claude/skills/twitter-publisher/SKILL.md 正文的逐段读取,引文均照录,推断均标注,沿用本栏 9 月 10 日、13 日两期的口径。选题钩子来自 9-10 期那张内容产线 mindmap:「采集 youtube-transcript → 转制 book-to-short-videos → 发布 twitter-publisher」,前两个工位都已在专篇里开过箱,只有发布位至今只在图里挂过一次名,从未成篇。本期开箱的核心发现:这是本栏拆过的最薄的一件——正文约六十行、零本地脚本、零二层目录,它把全部能力外包给外部命令行工具 bird,自己只留一张命令速查表和一张「路塌了怎么绕行」的故障地图。 壳件的天花板在哪、底线在哪,本期把它量一遍。
权重沿用本栏固定口径:功能 25%、设计 25%、实战 20%、上手 15%(星越多越容易)、社区 15%。社区一项因出网通道未放行无法取 Star 数据,沿用 9-10 期办公数据层那期的代理口径——以「装机在场」为底,无变体后代则不给高分。
| 件 | 层位 | 功能 | 设计 | 实战 | 上手 | 社区 | 加权 | 口径 |
|---|---|---|---|---|---|---|---|---|
| twitter-publisher | 装机·出网壳件 | ★★★ | ★★★½ | ★★★ | ★★★★ | ★★ | 3.13 | 本期正文首拆 |
| internal-comms | 官方·路由件 | ★★★★ | ★★★★ | ★★★ | ★★★★★ | ★★★★ | 3.95 | 9-13 存档照印 |
| slack-gif-creator | 官方·工具箱件 | ★★★★ | ★★★★ | ★★★ | ★★★★ | ★★★★ | 3.80 | 9-13 存档照印 |
| office-mcp | 装机·MCP 路线 | ★★★★ | ★★★ | ★★★ | ★★ | ★★★ | 3.10 | 9-10 存档照印 |
对照说明:官方路由件 3.95 与工具箱件 3.80 来自 9-13 期官方冷件三连拆的存档分;office-mcp 3.10 来自 9-10 期办公数据层横评。本期主角与 office-mcp 同层——都属于「能力不在自己身上」的借力件。
9-10 期《SKILL.md即API》把本机约四百条实装技能画成一张 mindmap,内容产线一栏画了三个节点:采集、转制、发布。「发布 twitter-publisher」这六个字,是本栏开栏以来这件技能唯一一次露面——进了图,没进过正文。一个工位被画进产线图,说明装机的人认为它是产线的一部分;一个工位从来没被开过箱,说明所有人都默认它没什么可拆的。
还有一个方法论上的故意:本栏此前开过盖的都是厚件——superpowers 是一整套工程流水线,huashu-nuwa 是一条五阶段造人产线,gstack 长成了软件仓库。厚件的开箱经验已经攒了不少,壳件的没有。本期故意挑最薄的,把壳件设计的天花板和底线量出来,正好补齐这个系列缺失的一档。
正文第一句照录:「通过 bird CLI 与 Twitter/X 交互,支持发推、回复、读取和搜索。」这句值得停一下。厚件的自我介绍习惯把能力写成自己的——「我生成」「我蒸馏」「我编排」;这件的第一句就把外包商名片递了出来:能力是 bird 的,我只负责把你送到 bird 面前。 bird 是一个开源命令行工具(正文自带仓库链接 github.com/steipete/bird 与 npm 包名 @steipete/bird,照录)。件不自居能力,这是壳件的诚实,也是壳件的全部。
「bird 使用浏览器 cookie 认证(无需 API key)」——「无需 API key」六个字是这件技能存在的经济学基础。官方 API 按档收费、按量限额(具体价格随官方调整,此处不给数),cookie 路线把这笔钱省了,代价后文单说。凭证获取写了一条三级回退链,照录:
- CLI flags:
--auth-token,--ct0- 环境变量:
AUTH_TOKEN,CT0- 浏览器 cookies(自动提取)
显式参数、环境变量、自动从浏览器提取,优先级从人工到自动排列——越靠后越省事,也越黑箱。更难得的是正文紧跟着给了两条自检命令:bird whoami(显示当前登录账户)、bird check(显示凭证来源)。这是在教 Agent 上车前先验票:发不出去之前,先知道自己是谁、票从哪来。大多数件的正文只写 happy path,验票动作写进正文的,本栏此前只在官方件的「侦察再动手」写法里见过。
发推、回复、读取、搜索、用户关系,五族操作构成件的全部能力面。命令形态全是速查表写法——bird tweet、bird reply <tweet-id-or-url>、bird thread <url>、bird mentions -n 10——每个动作一行示例,不带解释。壳件不教学,只备忘。
两处细节值得加分。其一,媒体限制照抄平台口径(最多 4 张图或 1 个视频),并给示例带了 --alt "图片描述"——无障碍描述写进了默认示例,而不是藏进选项表。其二,--plain 选项注明「稳定输出(无 emoji、无颜色)」——这是给下游消费者(也就是 Agent 自己)准备的确定性开关:要做统计、要做管道,先关掉装饰。速查表里给确定性留了个专门的旋钮,这是壳件里少见的自觉。
正文专辟一节列返回字段:id、text、author、createdAt、replyCount、retweetCount、likeCount、conversationId、inReplyToStatusId、quotedTweet。件自己不解析任何东西,只把返回契约摊开给上层会话:要做情绪统计看 likeCount,要追对话树看 conversationId,要识别引用关系看 inReplyToStatusId 和 quotedTweet。这一节是全文最「工程」的一段——它承认壳件的价值不在功能,在于把上游的输出格式钉死成一份稳定契约。
照录全文,一共三行:
- GraphQL 错误 226:自动回退到 legacy API
- Query ID 过期:使用
bird query-ids --fresh刷新- 429 限流:等待后重试
这三行是整份正文里最值钱的部分。它翻译过来是:主路塌了走辅路(226 回退)、地图过期了更新地图(query id 刷新)、路上堵了等一会(429 等待)。cookie 路线本质上是搭官方接口的便车,便车的规则会随时变——这个件的作者没有假装路线永远通,而是把「路塌了怎么绕」直接写进了技能正文。逆向接口的维护性清单成为技能正文的一部分,这在装机库里极其罕见。对照本栏 9-10 期提炼的 P3「确定性外置」模式:这件把不确定性本身也外置成了处置手册——模式族的又一枚极限样本。
天花板:零维护的幻觉与真省维护的实体。逻辑全部住在 bird 里,X 改了接口、query id 换了版本,升级的是 bird 不是件——件永远不用动。速查表形态还意味着零上下文税,全文读完不到一屏,对会话过路费几乎零征收。这是 P2「薄入口」推到极限的样子。
底线:件本身零积累、零增值。它没有封装任何一层自己的判断——没有发布节奏建议、没有内容改写、没有 thread 组装策略,甚至没有把「发之前给用户确认」写成规则。CLI 一旦停更或被封路,这件就是一张废纸。壳件的生死完全押在外包商身上,这是壳件设计的天然赌注。
照正文说话,能力面还缺三样:未见删推命令、未见 thread 连发命令、引用转推只以读取字段(quotedTweet)出现而没有发布入口。自动化发布却没有程序化撤回,意味着发错只能人工进网页删——对自动化场景这是实打实的短板。
安全与合规的暗礁(以下为分析判断,非正文内容,特此标注):cookie 等于账号钥匙,写进 CLI 参数会留在 shell 历史,写进环境变量有泄漏面,「自动提取浏览器 cookie」则默认件可以碰浏览器的凭证存储——方便与安全在这条回退链上完全同向递增。另外,绕开官方 API 的爬接口路线与平台的自动化条款之间存在天然张力,429 和错误 226 本身就是平台在收紧的证据。出网件把「免费」的代价从钱改成了脆弱性与账号风险,这是所有 cookie 路线件的共同账,不是这一件的独有罪。
适用:个人账号的日常发推与回评;监控 mentions 做轻量互动或客户响应(正文工作流示例的原生场景);按关键词抓料——bird search "关键词 lang:zh" -n 20 --json 这个示例对中文出海观察者相当顺手;内容产线的最后一级,把前面工位产出的成品送出去。
不适用:企业矩阵号运营(凭证体系是单账号设计,无多账号管理);高频自动化营销(429 与风控面前撑不住);对凭证管理有审计要求的团队;需要 thread 长文一键发布与程序化撤回的正式发布流程。
与浏览器路线的分野也值得一句:本栏此前的浏览器操控四件横评拆的是「看得见的路」——Agent 开着页面像人一样点;这件走的是「接口的路」——直接对 GraphQL 端点说话。前者稳但慢,后者快但脆,出网有两条路,选哪条取决于你怕账号出事还是怕线路出事。
flowchart TD
A["会话里说:发出去"] --> B["twitter-publisher<br/>命中:出网路由"]
B --> C["组装 bird 命令"]
C --> D{"凭证三级回退"}
D -->|显式传参| E["上路"]
D -->|环境变量| E
D -->|自动提 cookie| F["读浏览器凭证"]
F --> E
E --> G["bird tweet 发推"]
G --> H{"返回异常?"}
H -->|错误 226| I["回退 legacy 接口"]
H -->|query id 过期| J["刷新 query-ids"]
H -->|429 限流| K["等待后重试"]
I --> G
J --> G
K --> G
G --> L["推文上线"]
图的左边是件的本职——路由与组装,一共三个节点;右边全是故障处置——四个异常节点比正常节点还多。一张出网链路图里绕行路比主路长,这就是 cookie 路线件的宿命形状。
# 本机已在册:~/.claude/skills/twitter-publisher
# 该件的公开仓库本期未能在线确证(出网通道未放行),按名检索:
npx skills find twitter-publisher
# 其依赖的外部 CLI(命令照录正文):
npm install -g @steipete/bird
# 或免安装直跑:bunx @steipete/bird <command>
# 上车前先验票:
bird whoami # 显示当前登录账户
bird check # 显示凭证来源
用法即自然语言:「把这篇周报压成一条推发出去」「监控最近的 mentions 并起草回复」。鉴于件本身没写「发布前确认」规则,建议在会话侧补一句——起草类请求让它停在草稿,发布动作人工点头。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
