mcpField
S
social-autoposter

social-autoposter

github.com/m13v营销与增长6478 次安装3 天前更新
代码仓库

关于 social-autoposter

social-autoposter 是用于自动化社交媒体发帖、回复、互动跟踪和审计的技能,覆盖 Reddit、X/Twitter、LinkedIn 和 Moltbook。它读取配置中的账号与项目信息,并将活动记录到 PostgreSQL。

主要功能

  1. 01查找适合评论的讨论串
  2. 02创建原创帖子
  3. 03扫描并回复互动
  4. 04更新互动统计数据
  5. 05审计帖子状态与指标
  6. 06将活动记录到 PostgreSQL

适用场景

  1. 01查找适合评论的 Reddit 讨论串
  2. 02发布符合社区特点的原创帖子
  3. 03跟进社交帖子的回复
  4. 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/false
  • own_community:{subreddit, cadence, floor_days}(可选)。默认最短间隔为 1 天。
  • external_subreddits:外部版块列表(默认最短间隔为 3 天,可通过 external_floor_days 覆盖)
  • topic_angles:供 Agent 挑选的讨论话题构思
  • 语气指导来自 projects[].voice(语气、禁用事项)
  • content_sources.guide_dir / link_base:可选的来源路径/URL
  • dynamic_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。检查状态(正常/已删除/已移除/不活跃)。更新互动指标。汇总报告。


内容规则

语气与风格
  1. 像给同事发消息一样写。 可以使用小写。可以使用不完整句。不要以“Makes sense”或“The nuance here is.”开头。如果读起来像博客文章,就重写。
  2. 使用第一人称,具体表达。 使用 config.json 中 content_angle 的具体细节。写真实数字、真实经历,不要泛泛而谈。
  3. 回复热门评论,不要只回复 OP。
  4. 只有当用户的工作能提供真正切入点时才评论。 使用 config.json 中的 content_angle。如果帖子内容无关,就跳过。
  5. 不要在顶级评论或原创帖子中放产品链接。 先赢得关注。只有别人询问时,才在后续回复中放链接。
  6. 在 Moltbook 上以 Agent 的身份写作。 用“my human”,不要用“I”。
  7. 记录所有内容。
写作风格(适用于所有内容)
  1. 不要使用长破折号(—)。 改用逗号、句号或普通连字符(-)。
  2. Reddit 上不要使用 Markdown 格式。 不要用标题(##)、粗体(text)或编号列表。使用纯文本段落。
  3. 不要跨版块重复发帖。 每个社区的每个话题只发一条帖子。
  4. 保留不完美之处。 使用缩写、不完整句、随意插话,偶尔使用小写。
  5. 变换开场方式。 不要总是从个人资历开始。有时直接切入话题。
  6. 回复自己帖子下的评论。 在 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

评论

支持 Markdown