运行时依赖
安装命令
点击复制技能文档
Twitter 线程调度器 为什么存在 Buffer 的 GraphQL API 没有线程字段,只支持单个帖子。要发布一个适当的 X 线程(推文 1 → 回复 → 回复 → ...),您需要直接访问 Twitter API v2。该脚本使用来自 ~/.xurl 的 redditech OAuth2 凭证来: 发布推文 [1/N] - 获取回复的推文 ID 发布推文 [2/N] 作为回复:{ in_reply_to_tweet_id: } - 获取推文 2 的 ID 继续执行队列,直到发布所有 N 条推文 将所有推文 ID + URL 记录到内存/thread-log.jsonl 这是发布真实 X 线程的唯一方法。对于多推文内容,请始终使用此脚本而不是 Buffer。
脚本 scripts/tweet_thread_scheduler.py
授权:~/.xurl → apps.redditech.users.redditech.access_token(自动刷新 401)
命令:
预览(解析 + 字符检查,无发布)
python3 scripts/tweet_thread_scheduler.py preview --file projects/social-growth/thread-.md
首先运行此命令。确认推文数量并标记任何超过 280 个字符的推文。
立即发布
python3 scripts/tweet_thread_scheduler.py post --file projects/social-growth/thread-.md --slug
# 在发布前提示确认
模拟运行
python3 scripts/tweet_thread_scheduler.py post --file projects/social-growth/thread-.md --slug --dry-run
稍后安排(ISO8601 日期时间)
python3 scripts/tweet_thread_scheduler.py schedule --file projects/social-growth/thread-.md --slug --at "2026-04-05T08:00:00+11:00"
# 编写队列文件 + 创建 at 作业
触发排队线程(由 at 自动调用)
python3 scripts/tweet_thread_scheduler.py fire --queue memory/thread-queue/.json
线程文件格式 脚本自动解析博客到社交输出格式:
线程(9 条推文)
[1/9] 第一条推文文本。 [2/9] 第二条推文文本。 ... [9/9] 最终推文,包含博客 URL。 #Hashtag1 #Hashtag2 也支持 ## 推文 N 标题和 --- 分隔符。 在安排之前始终运行预览以确认解析正确。速率限制 线程中推文之间的 3 秒延迟 在 HTTP 429 上自动重试,具有指数退避 Twitter 免费层:每 15 分钟 300 次写入操作 9 条推文的线程使用 9 次写入操作 - 在限制范围内
队列和日志 路径 目的 memory/thread-queue/.json 排队线程数据(推文 + 安排时间) memory/thread-log.jsonl 已发布线程 - 所有推文 ID + URL
与内容管道集成 在博客到社交和博客发布 playbook 中: Sara 生成 projects/social-growth/thread-.md 运行预览以验证解析 在安排之前替换 [BLOG_URL] 占位符 使用 schedule --at 与博客禁播时间对齐 LinkedIn 单个帖子 - 仍然使用 scripts/buffer-post.mjs 规则:Buffer 用于 LinkedIn。此脚本用于 X 线程。
经验教训 2026-04-03 - 首次使用(portkey-patterns + ollama-embeddings): Buffer createPost 带有线程字段返回 GRAPHQL_VALIDATION_FAILED - 字段不存在 变通方法:使用 Twitter API v2 回复字段构建此脚本 安排工作干净 - 作业在会话之间存活 3 秒的推文间隔对于免费层速率限制足够 两个线程(9 条推文 + 8 条推文)从 [1/N] 格式中解析干净 Buffer 删除 API(2026-04-03 修正): 输入字段:id(不是 postId) 响应联合:DeletePostSuccess { id } | VoidMutationError { message }(不是 PostActionSuccess) 这与 createPost 使用 PostActionSuccess 不同