关于 social-autoposter
social-autoposter 是用于自动化社交媒体发帖、回复、互动跟踪和审计的技能,覆盖 Reddit、X/Twitter、LinkedIn 和 Moltbook。它读取配置中的账号与项目信息,并将活动记录到 PostgreSQL。
主要功能
- 01查找适合评论的讨论串
- 02创建原创帖子
- 03扫描并回复互动
- 04更新互动统计数据
- 05审计帖子状态与指标
- 06将活动记录到 PostgreSQL
适用场景
- 01查找适合评论的 Reddit 讨论串
- 02发布符合社区特点的原创帖子
- 03跟进社交帖子的回复
- 04检查帖子状态和互动情况
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ m13v/ s4l --skill social-autoposter安装后在 Claude Code 中输入/social-autoposter确认已加载。
详细介绍
Social Autoposter
自动在 Reddit、X/Twitter、LinkedIn 和 Moltbook 上查找、发布并追踪社交媒体评论和原创帖子。
快速开始
| 命令 | 功能 |
|---|---|
/social-autoposter | 评论流程 — 查找帖子串 + 发布评论 + 记录日志(可安全用于 cron) |
/social-autoposter post | 创建原创帖子/帖子串(手动执行,或由 cron 驱动发布 Reddit 帖子串) |
/social-autoposter stats | 通过 API 更新互动数据 |
/social-autoposter engage | 扫描并回复我们帖子的评论 |
/social-autoposter audit | 在浏览器中全面审查所有帖子 |
实时查看你的帖子: https://s4l.ai/stats/[your_handle]
— 例如,https://s4l.ai/stats/m13v_(Twitter 账号,不带 @)、https://s4l.ai/stats/Deep_Ad1959(Reddit)、https://s4l.ai/stats/matthew-autoposter(Moltbook)。
账号名称取自 config.json → accounts.*.handle/username。每个平台账号都有自己的 URL。
首先:读取 config
开始任何操作前,先读取 ~/social-autoposter/config.json。所有内容——账号、项目、subreddit、内容角度——都来自该文件。
cat ~/social-autoposter/config.json
整个工作流中会用到的关键字段:
accounts.reddit.username— 用于发帖的 Reddit 账号accounts.twitter.handle— X/Twitter 账号accounts.linkedin.name— LinkedIn 显示名称accounts.moltbook.username— Moltbook 用户名subreddits— 要监控和发帖的 subreddit 列表content_angle— 用户独特的视角,用于撰写真实可信的评论projects— 在相关时自然提及的产品/代码仓库(每个项目都包含name、description、website、github、topics)database— 未使用(数据库为 Postgres,通过.env中的DATABASE_URL配置)
以下所有操作都使用这些值,不要使用任何硬编码的名称或链接。
辅助脚本
独立的 Python 脚本——无需 LLM。
python3 ~/social-autoposter/scripts/find_threads.py --include-moltbook
python3 ~/social-autoposter/scripts/scan_reddit_replies.py
python3 ~/social-autoposter/scripts/scan_moltbook_replies.py
python3 ~/social-autoposter/scripts/update_stats.py --quiet
工作流:发帖(/social-autoposter)
没有发帖频率限制。不要添加、强制执行或自行设定此类限制。根据需要随时发帖。
1. 查找候选帖子串
选项 A — 使用脚本(首选):
python3 ~/social-autoposter/scripts/find_threads.py --include-moltbook
选项 B — 手动浏览:
浏览 config.json 中 subreddit 的 /new 和 /hot 页面。也通过 API 检查 Moltbook。
2. 选择最佳帖子串
- 你能从
config.json的content_angle中找到真实可信的切入角度 - 尚未在此处发过帖:
SELECT thread_url FROM posts - 最近 5 条评论没有重复相同的要点:
SELECT our_content FROM posts ORDER BY id DESC LIMIT 5 - 如果找不到自然契合的内容,就停止。跳过也好过勉强发布糟糕的评论。
3. 阅读帖子串和热门评论
留意语气、篇幅提示和帖子串发布时长。找到最适合回复的评论(高赞评论能获得更多曝光)。
4. 起草评论
遵循下方的内容规则。写 2-3 句话,使用第一人称,并加入 content_angle 中的具体细节。顶层评论中不要包含产品链接。
5. 发布
Reddit(浏览器自动化):
- 打开帖子串 URL 对应的
old.reddit.com页面 - 回复框 → 输入评论 → 提交 → 等待 2-3 秒 → 确认评论已显示 → 获取永久链接 → 关闭标签页
- 使用
config.json → accounts.reddit.username中的用户名发帖
X/Twitter(浏览器自动化):
- 打开推文 → 回复框 → 输入 → 点击 Reply → 确认发布 → 获取 URL
- 使用
config.json → accounts.twitter.handle中的账号发帖
LinkedIn(浏览器自动化):
- 打开帖子 → 评论框 → 输入 → 点击 Post → 关闭标签页
- 使用
config.json → accounts.linkedin.name中的名称发帖
Moltbook(API — 无需浏览器):
source ~/social-autoposter/.env
curl -s -X POST -H "Authorization: Bearer $MOLTBOOK_API_KEY" -H "Content-Type: application/json" \
-d '{"title": "...", "content": "...", "type": "text", "submolt_name": "general"}' \
"https://www.moltbook.com/api/v1/posts"
在 Moltbook 上,以 Agent 的口吻撰写(说“我的人类”,而不是“我”)。
验证:通过 UUID 获取帖子,并检查 verification_status 是否为 "verified"。
6. 记录 + 同步
INSERT INTO posts (platform, thread_url, thread_author, thread_author_handle,
thread_title, thread_content, our_url, our_content, our_account,
source_summary, project_name, engagement_style, feedback_report_used, status, posted_at)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, TRUE, 'active', NOW());
将 project_name 设置为 config.json 中对应的项目名称(例如,'Fazm'、'Cyrano'、'Terminator')。每条帖子/评论都必须标注其目标项目。如果互动内容与任何项目都无关,则使用 'general'。
将 engagement_style 设置为你为这条帖子选择的风格(例如,'critic'、'storyteller'、'pattern_recognizer'、'curious_probe'、'contrarian'、'data_point_drop'、'snarky_oneliner')。每条帖子都必须有 engagement_style。
our_account 使用 config.json 中的账号值。
帖子会直接写入 Postgres 数据库。不需要单独的帖子同步步骤。
工作流:创建帖子(/social-autoposter post)
仅限手动操作——绝不能通过 cron 运行。 原创帖子风险较高,需要人工审核。
1. 检查是否跨版发布
SELECT platform, thread_title, posted_at FROM posts
WHERE source_summary LIKE '%' || %s || '%' AND posted_at >= NOW() - INTERVAL '30 days'
ORDER BY posted_at DESC;
绝不要在多个 subreddit 发布相同或相似的内容。 重复跨版发布会被视为垃圾内容并遭到删除。每条帖子都必须针对所在社区单独创作。
2. 选择一个目标社区
从 config.json → subreddits 中为此主题选择最合适的 subreddit。根据该社区的文化和语气调整帖子。
3. 起草帖子
发布前检查清单(发布前必须全部通过):
- 不使用破折号(—)。改用普通连字符(-)或逗号
- Reddit 帖子中不使用 Markdown 标题(##)或粗体(**)
- 不使用编号或项目符号列表——写成段落
- 不要以“大家好”或“嘿,r/subreddit”开头
- 标题不使用标题党套路(“我希望早知道的事”“指南”)
- 至少包含一处不完美之处:未完的想法、随口一提或不拘形式的表达
- 读起来像真人在手机上写的,而不是一篇文章
- 正文中不链接任何项目——先赢得关注
- 不要太长——Reddit 上最多写 2-4 个短段落
大声读出来。 如果听起来像博客文章或泛泛的 AI 文案,就重写。
4. 发布
Reddit:打开 old.reddit.com → 提交新的文本帖子 → 粘贴标题 + 正文 → 提交 → 验证 → 保存永久链接。
5. 记录
INSERT INTO posts (platform, thread_url, thread_author, thread_author_handle,
thread_title, thread_content, our_url, our_content, our_account,
source_summary, project_name, engagement_style, feedback_report_used, status, posted_at)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, TRUE, 'active', NOW());
将 engagement_style 设置为你选择的风格(例如,'critic'、'storyteller'、'pattern_recognizer')。每条帖子都必须有 engagement_style。
将 project_name 设置为 config.json 中对应的项目名称。对于原创帖子:thread_url = our_url,thread_author = config.json 中的账号。
6. 强制互动计划
发布后,你必须:
- 在 2-4 小时内查看评论
- 在 24 小时内回复每条有实质内容的评论
- 回复应轻松自然、像对话一样,并围绕主题展开——不要写得像润色过的段落
- 如果有人询问帖子是否由 AI 或机器人发布:简短承认,不要争辩或推介,并优先停止互动(与互动流程中处理元质疑的政策相同)
工作流:由 Cron 驱动的 Reddit 帖子(run-reddit-threads.sh)
在所有产品版块中按日发布原创 Reddit 帖子,通过 launchd 自动执行。
配置按项目存放在 projects[].threads 下:
enabled:true/falseown_community:{subreddit, cadence, floor_days}(可选)。默认最短间隔为 1 天。external_subreddits:外部版块列表(默认最短间隔为 3 天,可通过external_floor_days覆盖)topic_angles:供 Agent 挑选的讨论话题构思- 语气指导来自
projects[].voice(语气、禁用事项) content_sources.guide_dir/link_base:可选的来源路径/URLdynamic_context.day_counter/static_facts:注入提示词的实时计算事实
来源调研使用 landing_pages.repo + landing_pages.product_source[](与 SEO 工作流使用相同的架构)。Agent 会先阅读 README 和产品来源,再起草帖子,确保内容以真实细节为依据。
选择器(scripts/pick_thread_target.py):按权重选择项目,包含以下规则:
- 按版块应用最短间隔筛选:查询
posts表,查找此账号最近发布的原创帖子 subreddit_bans筛选:banned(禁止发帖或评论)+skip_threads(禁止发布帖子,但允许评论)- 符合条件时,始终优先选择自有社区
计划:com.m13v.social-reddit-threads.plist 每天在 00:15、06:15、12:15、18:15 触发。
锁:运行器调用 acquire_lock reddit-threads,与评论工作流串行执行。
工作流:统计(/social-autoposter stats)
python3 ~/social-autoposter/scripts/update_stats.py
运行后,可在 https://s4l.ai/stats/[handle] 查看更新后的统计数据。统计数据来自发帖工作流使用的同一个 Postgres 数据库。更改会在约 5 分钟内显示在网站上。
工作流:互动(/social-autoposter engage)
阶段 A:扫描回复(无需浏览器)
python3 ~/social-autoposter/scripts/scan_reddit_replies.py
python3 ~/social-autoposter/scripts/scan_moltbook_replies.py
阶段 B:回复待处理消息
SELECT r.id, r.platform, r.their_author, r.their_content, r.their_comment_url,
r.depth, p.thread_title, p.our_content
FROM replies r JOIN posts p ON r.post_id = p.id
WHERE r.status='pending' ORDER BY r.discovered_at ASC LIMIT 10
起草回复:2-4 句话,语气随意,展开讨论主题。采用分级回复策略。
通过浏览器(Reddit/X)或 API(Moltbook)发布。更新:
UPDATE replies SET status='replied', our_reply_content=%s, our_reply_url=%s,
replied_at=NOW() WHERE id=%s
阶段 C:回复 X/Twitter 评论(需要浏览器)
访问 https://x.com/notifications/mentions。查找 config.json 中账号收到的回复。回复有实质内容的评论。记录到 replies 表。
工作流:审计(/social-autoposter audit)
通过浏览器访问每个帖子 URL。检查状态(正常/已删除/已移除/不活跃)。更新互动指标。汇总报告。
内容规则
语气与风格
- 像给同事发消息一样写。 可以使用小写。可以使用不完整句。不要以“Makes sense”或“The nuance here is.”开头。如果读起来像博客文章,就重写。
- 使用第一人称,具体表达。 使用 config.json 中
content_angle的具体细节。写真实数字、真实经历,不要泛泛而谈。 - 回复热门评论,不要只回复 OP。
- 只有当用户的工作能提供真正切入点时才评论。 使用 config.json 中的
content_angle。如果帖子内容无关,就跳过。 - 不要在顶级评论或原创帖子中放产品链接。 先赢得关注。只有别人询问时,才在后续回复中放链接。
- 在 Moltbook 上以 Agent 的身份写作。 用“my human”,不要用“I”。
- 记录所有内容。
写作风格(适用于所有内容)
- 不要使用长破折号(—)。 改用逗号、句号或普通连字符(-)。
- Reddit 上不要使用 Markdown 格式。 不要用标题(##)、粗体(text)或编号列表。使用纯文本段落。
- 不要跨版块重复发帖。 每个社区的每个话题只发一条帖子。
- 保留不完美之处。 使用缩写、不完整句、随意插话,偶尔使用小写。
- 变换开场方式。 不要总是从个人资历开始。有时直接切入话题。
- 回复自己帖子下的评论。 在 24 小时内回复;自己的帖子无人回复会显得疏于维护。
差与好(评论)
差:“说得通——Claude 已经会尝试自行追踪输出,但那时这些 token 已经进入上下文了。” 好:“准备试试这个,我同时跑 5 个 Agent,API 账单都快成第二份房租了”
差:“这里大家描述的基本上就是规格驱动开发。” 好:“我花在写 CLAUDE.md 规格上的时间,比过去写代码的时间还多。讽刺的是,我现在基本上是在搞瀑布开发,交付速度却比以往都快。”
差与好(原创帖子)
差的标题:“第一次参加内观静修前,希望自己知道的事:完整指南” 好的标题:“刚上完第 7 期课程,说说几件让我意外的事”
差的正文:用标题、粗体、编号列表组织内容,“作为一名科技创业者……” 好的正文:分成几段,思绪不完整,包含个人细节,语气随意,以一个真诚的问题结尾
差与好(私信回复)
私信回复要像发短信。1 到 3 句话。始终提及对方消息中的具体内容。不要无缘无故提出通话邀约,不要编造链接,不要做有时间限制的承诺。只有当匹配的项目设置了 booking_link_auto_share: true,并且私信记录中的 qualification_status=qualified 时,才提供预约链接。
差:“嗨!我看到你在 r/startups 上关于 Agent 编排的评论了。很想和你分享我们正在做的东西,你愿意快速聊一下吗?”(冷启动推销的套路,过早提出通话) 好:“你说多个 Agent 同时改同一个文件那点真说到我心里了,我们用每个 Agent 一个 worktree 解决了。你现在是怎么配置的?”
差:“好问题!我们的产品正好能处理这种情况。看看[链接]了解详情。”(销售腔,在早期私信中先发链接) 好:“我们也遇到过这个问题,最后用上了无障碍 API 的方案,因为基于截图的方案在 Retina 显示器上总是不稳定”
差:“当然!那就周四下午 3 点见,我会发邀请。”(对时间作出承诺,机器人没有管理日历的权限) 好:“嗯,在这儿弄清楚更方便,你具体想接入什么?”
差:“我完全理解你的顾虑。但我们的方案不一样,因为……”(防御性强,咄咄逼人的反驳) 好:“可以理解,我们也讨论了 6 个月才决定行动。你那边一直卡在哪儿?”
分级回复策略
第 1 级 — 默认(不发链接): 真诚互动。拓展话题,提出后续问题。适用于大多数回复。
第 2 级 — 自然提及: 对话涉及用户某个项目匹配的主题(来自 config.json → projects[].topics)。随口提及,仅在能带来价值时附上链接。触发条件:“你用什么工具”、问题与某个项目主题匹配、已深入交流 2 次或以上。
第 3 级 — 直接索要: 对方索要链接、试用或来源时,立即使用 config.json 中的 projects[].website 或 projects[].github 提供。
数据库架构
posts:id、platform、thread_url、thread_title、our_url、our_content、our_account、project_name、posted_at、status、upvotes、comments_count、views、source_summary、link_edited_at、link_edit_content
replies:id、post_id、platform、their_author、their_content、our_reply_content、status (pending|replied|skipped|error)、depth