Install
openclaw skills install twitter-watch-reply使用 6551 Twitter/X 接口监控指定账号的新推文,并基于推文内容生成 AI 回复草稿;在半自动模式下,先给出候选回复,待用户确认后再通过已登录的浏览器自动回复。用于:监控某些账号、发现其新推、生成评论、人工确认后回复、避免重复回复、管理 watchlist 和状态文件。依赖环境变量 TWITTER_T...
openclaw skills install twitter-watch-reply用这个 skill 做 AA 模式(6551 监控版):
只做 半自动:
不要默认全自动发送。
本 skill 的 Twitter/X 监控能力依赖 6551 接口,运行时通过环境变量 TWITTER_TOKEN 读取 token。
按 6551 / opentwitter 约定,从这里获取:
https://6551.io/mcp在运行本 skill 的同一终端 / 同一调度环境里设置:
export TWITTER_TOKEN=你的6551token
然后再运行:
python3 skills/twitter-watch-reply/scripts/doctor.py
TWITTER_TOKENdoctor.py 会提示 TWITTER_TOKEN missingfetch_latest_tweets.py 会直接退出并报错,不会伪装成“没有新推”必须有:
TWITTER_TOKENhttps://ai.6551.ioskills/twitter-watch-reply/references/config-example.json:配置示例skills/twitter-watch-reply/scripts/watch_state.py:管理 watchlist / state / 去重skills/twitter-watch-reply/scripts/fetch_latest_tweets.py:通过 6551 拉最近推文并筛出新推skills/twitter-watch-reply/scripts/pick_pending_tweet.py:读取当前待处理推文skills/twitter-watch-reply/scripts/render_alert.py:为新推生成通用提醒载荷(新推 + 候选回复 + notify 配置)skills/twitter-watch-reply/scripts/render_alert_text.py:把提醒载荷渲染成适合聊天渠道发送的纯文本skills/twitter-watch-reply/scripts/mark_notified.py:标记某条推文已提醒,避免重复通知skills/twitter-watch-reply/references/reply-generation.md:生成回复候选的规范skills/twitter-watch-reply/references/host-adapter.md:宿主如何接通用通知层并真正发消息data/twitter-watch-reply/config.json:用户配置data/twitter-watch-reply/state.json:运行状态若 config.json 不存在,先初始化再改配置。
python3 skills/twitter-watch-reply/scripts/watch_state.py init
python3 skills/twitter-watch-reply/scripts/fetch_latest_tweets.py
脚本会:
config.jsonauthors 逐个优先调用 6551 twitter_user_tweets,失败时自动 fallback 到 twitter_search + fromUser先运行:
python3 skills/twitter-watch-reply/scripts/pick_pending_tweet.py
再按 references/reply-generation.md 的规范,对待处理推文生成 3 条候选。
对每条新推默认生成 3 条候选:
生成时遵守配置:
tonelanguagetopicsAllowblockedWordsmaxReplyPerAuthorPerDaymaxTotalReplyPerDay先运行:
python3 skills/twitter-watch-reply/scripts/render_alert.py
该脚本会输出一份“提醒载荷”:
notify 配置这一步的设计目标是 通用通知,而不是写死某个 Telegram 群。
推荐由宿主环境按 notify.channel / notify.target / notify.threadId 决定发往:
只有用户明确说“发第 N 条”或给出明确修改意见时,才进入发送步骤。
发送前再次确认:
发送成功后更新 state.json:
python3 skills/twitter-watch-reply/scripts/doctor.py
自检会检查:
TWITTER_TOKEN 是否存在(不显示明文)config.json / state.json 是否存在且格式正确若 config.json / state.json 不存在,先运行:
python3 skills/twitter-watch-reply/scripts/watch_state.py init
python3 skills/twitter-watch-reply/scripts/watch_state.py init
python3 skills/twitter-watch-reply/scripts/watch_state.py show-config
python3 skills/twitter-watch-reply/scripts/watch_state.py add-author jakevin7
python3 skills/twitter-watch-reply/scripts/watch_state.py remove-author jakevin7
python3 skills/twitter-watch-reply/scripts/watch_state.py list-authors
python3 skills/twitter-watch-reply/scripts/fetch_latest_tweets.py
python3 skills/twitter-watch-reply/scripts/fetch_latest_tweets.py --author jakevin7
python3 skills/twitter-watch-reply/scripts/pick_pending_tweet.py
python3 skills/twitter-watch-reply/scripts/render_alert.py
python3 skills/twitter-watch-reply/scripts/watch_state.py seen 2030857515660132533
python3 skills/twitter-watch-reply/scripts/watch_state.py was-seen 2030857515660132533
twitter_user_tweets 失败,自动 fallback 到 twitter_search fromUser;两者都失败时再报错,不要伪造“无新推”后续如果用户要升级,再增加:
OPENCLAW_WORKSPACE。TWITTER_WATCH_REPLY_DATA_DIR。run_watch_loop.sh 作为示例,不强绑定某个用户的 launchd/cron。notify 配置执行。推荐由宿主环境按以下顺序执行:
fetch_latest_tweets.pyrender_alert.py 或 render_alert_text.pynotify.enabled=true,按 notify.channel/target/threadId 发消息mark_notified.py <tweet_id>这样通知层就能保持通用,不和特定消息渠道耦合。
如果需要真正做到“抓到新推就自动提醒”,读取 references/host-adapter.md。
该文件说明了宿主(尤其是 OpenClaw)应如何消费本 skill 产生的 alert,并在发送成功后执行去重标记。