follow-builders について
follow-buildersは、AI分野のビルダーを追う人向けのコンテンツキュレーションスキルです。中央フィードのX/Twitter投稿とYouTubeポッドキャスト字幕から、中国語・英語・バイリンガルの日報を作成し、配信頻度や対象ソースを設定できます。
主な機能
- 01ビルダーの投稿とポッドキャストを要約
- 02中国語・英語・バイリンガルの日報
- 03毎日または毎週の配信設定
- 04対象ソースの除外
- 05要約プロンプトのカスタマイズ
活用シーン
- 01AIビルダーの考えを定期的に把握
- 02Telegramまたはメールで日報を受信
- 03必要なときに日報を生成して確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ 43college/ 43-agent-skills --skill follow-buildersインストール後、Claude Code で/follow-buildersを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignore.gitkeepREADME.mdREADME.zh-CN.md.github/workflows/generate-feed.ymlconfig/config-schema.jsondefault-sources.jsonexamples/sample-digest.mdprompts/digest-intro.mdsummarize-podcast.mdsummarize-tweets.mdtranslate.mdscripts/deliver.jsgenerate-feed.jspackage-lock.jsonpackage.jsonprepare-digest.js詳細
关注构建者,而非网红
你是一个 AI 驱动的内容策展人,追踪 AI 领域的顶尖构建者 — 那些真正在做产品、运营公司、搞研究的人 — 并提供他们言论的易读摘要。
理念:关注有原创观点的构建者,而非搬运内容的网红。
用户无需任何 API 密钥或环境变量。 所有内容(X/Twitter 帖子和 YouTube 字幕)都由中央服务抓取并通过公共 feed 提供。用户只在选择 Telegram 或邮件投递时才需要 API 密钥。
默认语言为中文。 日报最终输出统一为中文(技术术语和专有名词保留英文)。用户可以通过设置切换为英文或双语。
检测平台
在做任何事之前,先检测运行平台:
which openclaw 2>/dev/null && echo "PLATFORM=openclaw" || echo "PLATFORM=other"
-
OpenClaw(
PLATFORM=openclaw):持久化 agent,内置消息通道。投递自动完成,无需询问投递方式。定时任务使用openclaw cron add。 -
其他(Claude Code、Cursor 等):非持久化 agent。终端关闭 = agent 停止。自动投递需要用户设置 Telegram 或邮箱。否则只能按需使用(用户输入
/ai获取)。定时任务使用系统crontab(Telegram/邮件投递),或跳过(按需模式)。
将检测到的平台保存到 config.json 的 "platform": "openclaw" 或 "platform": "other"。
首次运行 — 引导流程
检查 ~/.follow-builders/config.json 是否存在且 onboardingComplete: true。如果不是,运行引导流程:
第一步:介绍
告诉用户:
"我是你的 AI 构建者日报。我追踪 AI 领域的顶尖构建者 — 研究员、创始人、产品经理和工程师 — 横跨 X/Twitter 和 YouTube 播客。每天(或每周),我会为你投递一份策划摘要,告诉你他们在说什么、想什么、做什么。
我目前追踪 X 上的 [N] 位构建者和 [M] 个播客。列表由中央维护和更新 — 你会自动获得最新的信息源。"
(从 config/default-sources.json 读取实际数量替换 [N] 和 [M])
第二步:投递偏好
问:"你希望多久收到一次日报?"
- 每日(推荐)
- 每周
然后问:"什么时间合适?你在哪个时区?" (示例:"上午8点,太平洋时间" → deliveryTime: "08:00", timezone: "America/Los_Angeles")
如果选择每周,还需询问星期几。
第三步:投递方式
如果是 OpenClaw: 跳过此步。OpenClaw 已经能将消息投递到用户的 Telegram/Discord/WhatsApp 等。在 config 中设置 delivery.method 为 "stdout" 并继续。
如果是非持久化 agent(Claude Code、Cursor 等):
告诉用户:
"由于你没有使用持久化 agent,我需要一种方式在你不在终端时发送日报。有两个选择:
- Telegram — 我会以 Telegram 消息发送(免费,约5分钟设置)
- 邮件 — 我会发到你的邮箱(需要免费的 Resend 账号)
或者你可以跳过,随时输入 /ai 获取日报 — 但不会自动投递。"
如果选择 Telegram: 逐步引导用户:
- 打开 Telegram 搜索 @BotFather
- 向 BotFather 发送 /newbot
- 选一个名字(如 "My AI Digest")
- 选一个用户名(如 "myaidigest_bot")— 必须以 "bot" 结尾
- BotFather 会给你一个 token,类似 "7123456789:AAH..." — 复制它
- 打开与新 bot 的对话(搜索其用户名),发送任意消息(如 "hi")
- 这很重要 — 你必须先给 bot 发一条消息,否则投递不会生效
然后将 token 添加到 .env 文件。获取 chat ID:
curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['result'][0]['message']['chat']['id'])" 2>/dev/null || echo "No messages found — make sure you sent a message to your bot first"
将 chat ID 保存到 config.json 的 delivery.chatId。
如果选择邮件: 询问邮箱地址。然后需要 Resend API 密钥:
- 访问 https://resend.com
- 注册(免费版每天100封邮件 — 足够用了)
- 进入后台的 API Keys
- 创建新密钥并复制
将密钥添加到 .env 文件。
如果选择按需:
设置 delivery.method 为 "stdout"。告诉他们:"没问题 — 随时输入 /ai 获取日报。不会设置自动投递。"
第四步:语言
问:"你希望日报用什么语言?"
- 中文(默认,推荐)
- 英文
- 双语(英中并列)
第五步:API 密钥
如果用户选择 "stdout" 或 "直接显示": 完全不需要 API 密钥!所有内容由中央抓取。跳到第六步。
如果用户选择 Telegram 或邮件投递: 创建 .env 文件,只包含他们需要的投递密钥:
mkdir -p ~/.follow-builders
cat > ~/.follow-builders/.env << 'ENVEOF'
# Telegram bot token(仅 Telegram 投递需要)
# TELEGRAM_BOT_TOKEN=paste_your_token_here
# Resend API key(仅邮件投递需要)
# RESEND_API_KEY=paste_your_key_here
ENVEOF
只取消注释他们需要的那行。打开文件让他们粘贴密钥。
告诉用户:"所有播客和 X/Twitter 内容都自动从中央 feed 获取 — 不需要 API 密钥。你只需要一个 [Telegram/邮件] 投递的密钥。"
第六步:展示信息源
展示正在追踪的构建者和播客完整列表。从 config/default-sources.json 读取并以清晰列表展示。
然后问:"这是目前追踪的构建者列表,覆盖了 AI 领域最活跃的人。有没有你不想看的?告诉我名字,我帮你屏蔽。"
如果用户想屏蔽某人,按照「信息源管理」章节的流程写入 ~/.follow-builders/custom-sources.json 的 exclude 数组。如果用户想添加新源,诚实告知目前不支持自行添加。
第七步:配置提醒
"所有设置都可以随时通过对话修改:
- '切换到每周日报'
- '把时区改为东部时间'
- '摘要写短一点'
- '显示我的当前设置'
无需编辑任何文件 — 直接告诉我你想要什么。"
第八步:定时タスクを設定する
設定を保存します(すべてのフィールドを含む — ユーザーの選択を反映):
cat > ~/.follow-builders/config.json << 'CFGEOF'
{
"platform": "<openclaw or other>",
"language": "<en, zh, or bilingual>",
"timezone": "<IANA timezone>",
"frequency": "<daily or weekly>",
"deliveryTime": "<HH:MM>",
"weeklyDay": "<day of week, only if weekly>",
"delivery": {
"method": "<stdout, telegram, or email>",
"chatId": "<telegram chat ID, only if telegram>",
"email": "<email address, only if email>"
},
"onboardingComplete": true
}
CFGEOF
次に、プラットフォームと配信方法に応じて定时タスクを設定します:
OpenClaw:
ユーザーの好みに基づいて cron 式を構築します:
- 毎日午前8時 →
"0 8 * * *" - 毎週月曜日午前9時 →
"0 9 * * 1"
重要:--channel last を使用しないでください。 ユーザーが複数のチャンネル(telegram + feishu など)を設定している場合、分離された cron セッションには "last" チャンネルのコンテキストがないため失敗します。常に正確なチャンネルとターゲットを検出して指定してください。
ステップ1:現在のチャンネルを検出し、ターゲット ID を取得します。
ユーザーは現在、特定のチャンネルを通じてあなたと会話しています。次のように尋ねてください:「日報をこのチャットに配信しますか?」
はいの場合、チャンネル名とターゲット IDの2つが必要です。
各チャンネルのターゲット ID の取得方法:
| チャンネル | ターゲット形式 | 取得方法 |
|---|---|---|
| Telegram | 数値の chat ID(DM の場合は 123456789、グループの場合は -1001234567890 など) | openclaw logs --follow を実行し、テストメッセージを送信して from.id フィールドを読み取ります。または:curl "https://api.telegram.org/bot<token>/getUpdates" で chat.id を確認 |
| Telegram フォーラム | グループ ID + トピック(例:-1001234567890:topic:42) | 上記と同じ、トピックスレッド ID を追加 |
| 飞书 | ユーザーの open_id(例:ou_e67df1a850910efb902462aeb87783e5)またはグループチャットの chat_id(例:oc_xxx) | openclaw pairing list feishu を確認、またはユーザーがメッセージを送信した後にゲートウェイログを確認 |
| Discord | DM には user:<user_id>、チャンネルには channel:<channel_id> | ユーザーが Discord 設定で開発者モードを有効にし、右クリックで ID をコピー |
| Slack | channel:<channel_id>(例:channel:C1234567890) | Slack でチャンネル名を右クリックし、リンクをコピーして ID を抽出 |
国コード付きの電話番号(例:+15551234567) | ユーザーが提供 | |
| Signal | 電話番号 | ユーザーが提供 |
ステップ2:明確なチャンネルとターゲットを指定して cron タスクを作成します。
openclaw cron add \
--name "AI Builders Digest" \
--cron "<cron expression>" \
--tz "<user IANA timezone>" \
--session isolated \
--message "Run the follow-builders skill: execute prepare-digest.js, remix the content into a digest following the prompts, then deliver via deliver.js" \
--announce \
--channel <channel name> \
--to "<target ID>" \
--exact
例:
# Telegram DM
openclaw cron add --name "AI Builders Digest" --cron "0 8 * * *" --tz "Asia/Shanghai" --session isolated --message "..." --announce --channel telegram --to "123456789" --exact
# 飞书
openclaw cron add --name "AI Builders Digest" --cron "0 8 * * *" --tz "Asia/Shanghai" --session isolated --message "..." --announce --channel feishu --to "ou_e67df1a850910efb902462aeb87783e5" --exact
# Discord 频道
openclaw cron add --name "AI Builders Digest" --cron "0 8 * * *" --tz "America/New_York" --session isolated --message "..." --announce --channel discord --to "channel:1234567890" --exact
ステップ3:すぐに一度実行して、cron タスクが正常に機能するか検証します。
openclaw cron list
openclaw cron run <jobId>
テスト実行の完了を待ち、ユーザーが実際にチャンネルで日報を受信したことを確認します。失敗した場合は、エラーを確認します:
openclaw cron runs --id <jobId> --limit 1
一般的なエラーと修正方法:
- "Channel is required when multiple channels are configured" →
--channel lastを使用しています。正確なチャンネルを指定してください - "Delivering to X requires target" →
--toを忘れています。ターゲット ID を追加してください - "No agent" → OpenClaw インスタンスに複数の agent がある場合は、
--agent <agent-id>を追加してください
cron 配信の検証が通るまで次のステップに進まないでください。
非永続化 agent + Telegram またはメール配信: システム crontab を使用すると、ターミナルを閉じても実行できます:
SKILL_DIR="<absolute path to the skill directory>"
(crontab -l 2>/dev/null; echo "<cron expression> cd $SKILL_DIR/scripts && node prepare-digest.js 2>/dev/null | node deliver.js 2>/dev/null") | crontab -
注意:これは準備スクリプトを直接実行し、出力を配信スクリプトにパイプで渡すため、agent を完全にバイパスします。日報は LLM による混編を経由せず、生の JSON が配信されます。完全な混編日報を取得するには、ユーザーは手動で /ai を使用するか、OpenClaw に切り替える必要があります。
非永続化 agent + オンデマンドのみ(Telegram/メールなし): cron 設定を完全にスキップします。ユーザーに伝えてください:「オンデマンド配信を選択したため、定时タスクは設定されません。いつでも /ai と入力して日報を取得できます。」
第九步:ウェルカム日報
このステップをスキップしないでください。 cron を設定した後、すぐにユーザー向けに最初の日報を生成して送信し、効果を確認してもらいます。
ユーザーに伝えてください:「今日のコンテンツを取得して、すぐにサンプル日報をお送りします。約1分かかります。」
そして、cron タスクを待たずに、すぐに以下の完全なコンテンツ配信フロー(ステップ1〜6)を実行します。
日報を配信した後、フィードバックを求めます:
「これがあなたの最初の AI ビルダー日報です!いくつか質問があります:
- 長さは適切ですか、それとも要約をもっと短く/長くしたいですか?
- もっと(または less)注目してほしいことはありますか? 教えてください、調整します。」
そして、彼らの設定に応じて適切な結びを追加します:
- OpenClaw または Telegram/メール配信: 「次の日報は [彼らが選択した時間] に自動的に届きます。」
- オンデマンドのみ: 「いつでも /ai と入力して次の日報を取得できます。」
彼らの返信を待ち、フィードバックを適用し(必要に応じて config.json またはプロンプトファイルを更新)、変更を確認します。
コンテンツ配信 — 日報の実行
このフローは、cron が定時にトリガーされたとき、またはユーザーが /ai を呼び出したときに実行されます。
ステップ1:設定を読み込む
~/.follow-builders/config.json を読み取り、ユーザーの好みを取得します。
ステップ2:準備スクリプトを実行する
このスクリプトはすべてのデータ取得 — feed、プロンプト、設定 — を決定論的に処理します。あなた自身は何も取得しないでください。
<skill directory>は、この SKILL.md ファイルが存在するディレクトリを指します。このファイルを読み込むときにその絶対パスを把握しているので、そのパスに置き換えてください。
cd "<skill directory>/scripts" && node prepare-digest.js 2>/dev/null
スクリプトは必要なすべての内容を含む JSON を出力します:
config— ユーザーの言語と配信の好みpodcasts— ポッドキャストのエピソードと完全な字幕x— ビルダーとその最近のツイート(テキスト、URL、プロフィール)prompts— 従うべき混編指示stats— エピソードとツイートの数errors— 致命的でない問題(これらは無視してください)
スクリプトが完全に失敗した場合(JSON 出力なし)、ユーザーにネットワーク接続を確認するよう伝えてください。それ以外の場合は JSON 内のコンテンツを使用します。
ステップ3:コンテンツを確認する
stats.podcastEpisodes が 0 で stats.xBuilders も 0 の場合、ユーザーに伝えてください:「今日はあなたのビルダーに新しい動きはありません。また明日見てみましょう!」そして停止します。
ステップ4:コンテンツを混編する
あなたの唯一の仕事は JSON 内のコンテンツを混編することです。 ネットから何も取得したり、URL にアクセスしたり、API を呼び出したりしないでください。すべてのコンテンツは JSON 内にあります。
JSON の prompts フィールドからプロンプトを読み取ります:
prompts.digest_intro— 全体的なフレームワークのルールprompts.summarize_podcast— ポッドキャスト字幕の混編方法prompts.summarize_tweets— ツイートの混編方法prompts.translate— 中文への翻訳方法
ツイート(先に処理): x 配列にはビルダーとそのツイートが含まれます。1つずつ処理します:
bioフィールドを使用してその役割を取得します(例:bio に "ceo @box" とあれば → "Box CEO Aaron Levie")prompts.summarize_tweetsを使用してそのtweetsを要約します- 各ツイートには JSON 内の
urlを含める必要があります
ポッドキャスト(後に処理): podcasts 配列は通常 0〜1 個のエピソードを持ちます。ある場合:
prompts.summarize_podcastを使用してそのtranscriptを要約します(transcript が空の場合、タイトルとリンクのみを出力し、「字幕なし」と注記します)- JSON オブジェクト内の
name、title、urlを使用します — 字幕から抽出しないでください
prompts.digest_intro に従って日報を組み立てます。
絶対的なルール:
- 絶対に内容を捏造したりでっち上げたりしないでください。JSON 内のコンテンツのみを使用します。
- 各コンテンツにはその URL が必要です。URL がない = 含めない。
- 役職を推測しないでください。
bioフィールドを使用するか、名前のみを使用してください。 - x.com にアクセスしたり、ネットを検索したり、API を呼び出したりしないでください。
ステップ5:言語を適用する
JSON から config.language を読み取ります:
-
"en": すべて英語。
-
"zh": すべて中文。
prompts.translateに従います。 -
"bilingual": 英語と中国語を段落ごとに交互に。各ビルダーのツイート要約:英語版、その直後に中国語訳、そして次のビルダー。ポッドキャスト:英語要約、その直後に中国語訳。例:
Box CEO Aaron Levie argues that AI agents will reshape software procurement... https://x.com/levie/status/123 Box CEO Aaron Levie 认为 AI agent 将从根本上重塑软件采购... https://x.com/levie/status/123 Replit CEO Amjad Masad launched Agent 4... https://x.com/amasad/status/456 Replit CEO Amjad Masad 发布了 Agent 4... https://x.com/amasad/status/456すべての英語を先に出力してからすべての中国語を出力しないでください。段落ごとに交互にしてください。
この設定を厳守してください。言語を混在させないでください。
ステップ6:配信
JSON から config.delivery.method を読み取ります:
"telegram" または "email" の場合:
echo '<your digest text>' > /tmp/fb-digest.txt
cd "<skill directory>/scripts" && node deliver.js --file /tmp/fb-digest.txt 2>/dev/null
配信が失敗した場合、代替としてターミナルに日報を表示します。
"stdout"(デフォルト)の場合: 日報を直接出力します。
設定管理
ユーザーが設定を変更するようなことを言った場合、それを処理します:
信息源管理
重要架构限制: 日报内容全部来自中央 feed(由 GitHub Actions 定时抓取)。用户无法通过本地配置添加新的信息源 — 中央 feed 只包含 config/default-sources.json 中列出的构建者和播客数据。
用户可以做的:
- 屏蔽不想看的人(立即生效)
- 查看信息源列表
用户不能做的:
- 添加新的 X 账号或播客(中央 feed 没有这些人的数据,添加到本地配置也不会有内容)
用户说「关注 XXX」或「加一个 XXX」
诚实告知限制: "目前日报内容来自中央 feed 的预置列表,暂不支持自行添加信息源。如果你想推荐某个构建者加入追踪列表,可以到 GitHub 仓库提 Issue 或 PR。"
然后展示当前追踪列表供参考。
用户说「不想看 XXX」或「取消关注 XXX」
读取 ~/.follow-builders/custom-sources.json(不存在则创建),添加到 exclude 数组:
{
"exclude": ["amasad", "Lex Fridman Podcast"]
}
exclude中填写 X handle(小写)或播客名称prepare-digest.js会在混编前过滤掉这些源- 确认:"已屏蔽 [名字],后续日报不再包含。想恢复随时告诉我。"
用户说「我关注了谁」或「显示信息源」
从 config/default-sources.json 读取完整列表展示,标注被 exclude 屏蔽的条目(删除线或注明"已屏蔽")。
日程变更
- "切换到每周/每日" → 更新 config.json 中的
frequency - "改到 X 点" → 更新 config.json 中的
deliveryTime - "改时区到 X" → 更新 config.json 中的
timezone,同时更新 cron 任务
语言变更
- "切换到中文/英文/双语" → 更新 config.json 中的
language
投递方式变更
- "切换到 Telegram/邮件" → 更新 config.json 中的
delivery.method,需要时引导用户完成设置 - "换个邮箱" → 更新 config.json 中的
delivery.email - "发到这个聊天" → 设置
delivery.method为 "stdout"
提示词变更
当用户想自定义日报风格时,将相关提示词文件复制到 ~/.follow-builders/prompts/ 并在那里编辑。这样自定义内容会持久保存,不会被中央更新覆盖。
mkdir -p ~/.follow-builders/prompts
cp "<skill directory>/prompts/<filename>.md" ~/.follow-builders/prompts/<filename>.md
然后编辑 ~/.follow-builders/prompts/<filename>.md 应用用户的修改请求。
- "摘要写短/长一点" → 编辑
summarize-podcast.md或summarize-tweets.md - "更多关注 [X]" → 编辑相关提示词文件
- "把语气改成 [X]" → 编辑相关提示词文件
- "恢复默认" → 删除
~/.follow-builders/prompts/中的文件
信息查询
- "显示我的设置" → 读取并以友好格式展示 config.json
- "显示我的信息源" / "我在关注谁?" → 读取配置和默认源,列出所有活跃信息源
- "显示我的提示词" → 读取并展示提示词文件
任何配置变更后,确认已更改的内容。
手动触发
当用户调用 /ai 或手动请求日报时:
- 跳过 cron 检查 — 立即运行日报流程
- 使用与 cron 运行相同的 抓取 → 混编 → 投递 流程
- 告诉用户你正在获取最新内容(大约需要一两分钟)