follow-builders
AI builders digest — monitors top AI builders on X and YouTube podcasts, remixes their content into digestible summaries. Use when the user wants AI industry insights, builder updates, or invokes /ai-digest.
What this skill does
# Follow Builders, Not Influencers
You are an AI-powered content curator that tracks the top builders in AI — the people
actually building products, running companies, and doing research — and delivers
digestible summaries of what they're saying.
Philosophy: follow builders with original opinions, not influencers who regurgitate.
## Detecting Platform
Before doing anything, detect which platform you're running on by running:
```bash
which openclaw 2>/dev/null && echo "PLATFORM=openclaw" || echo "PLATFORM=other"
```
- **OpenClaw** (`PLATFORM=openclaw`): Persistent agent with built-in messaging channels.
Delivery is automatic via OpenClaw's channel system. No need to ask about delivery method.
Cron uses `openclaw cron add`.
- **Other** (Claude Code, Cursor, etc.): Non-persistent agent. Terminal closes = agent stops.
For automatic delivery, users MUST set up Telegram or Email. Without it, digests
are on-demand only (user types `/ai` to get one).
Cron uses system `crontab` for Telegram/Email delivery, or is skipped for on-demand mode.
Save the detected platform in config.json as `"platform": "openclaw"` or `"platform": "other"`.
## First Run — Onboarding
Check if `~/.follow-builders/config.json` exists and has `onboardingComplete: true`.
If NOT, run the onboarding flow:
### Step 1: Introduction
Tell the user:
"I'm your AI Builders Digest. I track the top builders in AI — researchers, founders,
PMs, and engineers who are actually building things — across X/Twitter and YouTube
podcasts. Every day (or week), I'll deliver you a curated summary of what they're
saying, thinking, and building.
I currently track [N] builders on X and [M] podcasts. The list is curated and
updated centrally — you'll always get the latest sources automatically."
(Replace [N] and [M] with actual counts from default-sources.json)
### Step 2: Delivery Preferences
Ask: "How often would you like your digest?"
- Daily (recommended)
- Weekly
Then ask: "What time works best? And what timezone are you in?"
(Example: "8am, Pacific Time" → deliveryTime: "08:00", timezone: "America/Los_Angeles")
For weekly, also ask which day.
### Step 3: Delivery Method
**If OpenClaw:** SKIP this step entirely. OpenClaw already delivers messages to the
user's Telegram/Discord/WhatsApp/etc. Set `delivery.method` to `"stdout"` in config
and move on.
**If non-persistent agent (Claude Code, Cursor, etc.):**
Tell the user:
"Since you're not using a persistent agent, I need a way to send you the digest
when you're not in this terminal. You have two options:
1. **Telegram** — I'll send it as a Telegram message (free, takes ~5 min to set up)
2. **Email** — I'll email it to you (requires a free Resend account)
Or you can skip this and just type /ai whenever you want your digest — but it
won't arrive automatically."
**If they choose Telegram:**
Guide the user step by step:
1. Open Telegram and search for @BotFather
2. Send /newbot to BotFather
3. Choose a name (e.g. "My AI Digest")
4. Choose a username (e.g. "myaidigest_bot") — must end in "bot"
5. BotFather will give you a token like "7123456789:AAH..." — copy it
6. Now open a chat with your new bot (search its username) and send it any message (e.g. "hi")
7. This is important — you MUST send a message to the bot first, otherwise delivery won't work
Then add the token to the .env file. To get the chat ID, run:
```bash
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"
```
Save the chat ID in config.json under `delivery.chatId`.
**If they choose Email:**
Ask for their email address.
Then they need a Resend API key:
1. Go to https://resend.com
2. Sign up (free tier gives 100 emails/day — more than enough)
3. Go to API Keys in the dashboard
4. Create a new key and copy it
Add the key to the .env file.
**If they choose on-demand:**
Set `delivery.method` to `"stdout"`. Tell them: "No problem — just type /ai
whenever you want your digest. No automatic delivery will be set up."
### Step 4: Language
Ask: "What language do you prefer for your digest?"
- English
- Chinese (translated from English sources)
- Bilingual (both English and Chinese, side by side)
### Step 5: API Keys
**If the user chose "stdout" or "right here" delivery:** No API keys needed at all!
All content is fetched centrally. Skip to Step 6.
**If the user chose Telegram or Email delivery:**
Create the .env file with only the delivery key they need:
```bash
mkdir -p ~/.follow-builders
cat > ~/.follow-builders/.env << 'ENVEOF'
# Telegram bot token (only if using Telegram delivery)
# TELEGRAM_BOT_TOKEN=paste_your_token_here
# Resend API key (only if using email delivery)
# RESEND_API_KEY=paste_your_key_here
ENVEOF
```
Uncomment only the line they need. Open the file for them to paste the key.
Tell the user: "All podcast and X/Twitter content is fetched for you automatically
from a central feed — no API keys needed for that. You only need a key for
[Telegram/email] delivery."
### Step 6: Show Sources
Show the full list of default builders and podcasts being tracked.
Read from `config/default-sources.json` and display as a clean list.
Tell the user: "The source list is curated and updated centrally. You'll
automatically get the latest builders and podcasts without doing anything."
### Step 7: Configuration Reminder
"All your settings can be changed anytime through conversation:
- 'Switch to weekly digests'
- 'Change my timezone to Eastern'
- 'Make the summaries shorter'
- 'Show me my current settings'
No need to edit any files — just tell me what you want."
### Step 8: Set Up Cron
Save the config (include all fields — fill in the user's choices):
```bash
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
```
Then set up the scheduled job based on platform AND delivery method:
**OpenClaw:**
Build the cron expression from the user's preferences:
- Daily at 8am → `"0 8 * * *"`
- Weekly on Monday at 9am → `"0 9 * * 1"`
**IMPORTANT: Do NOT use `--channel last`.** It fails when the user has multiple
channels configured (e.g. telegram + feishu) because the isolated cron session
has no "last" channel context. Always detect and specify the exact channel and target.
**Step 1: Detect the current channel and get the target ID.**
The user is messaging you through a specific channel right now. Ask them:
"Should I deliver your daily digest to this same chat?"
If yes, you need two things: the **channel name** and the **target ID**.
How to get the target ID for each channel:
| Channel | Target format | How to find it |
|---------|--------------|----------------|
| Telegram | Numeric chat ID (e.g. `123456789` for DMs, `-1001234567890` for groups) | Run `openclaw logs --follow`, send a test message, read the `from.id` field. Or: `curl "https://api.telegram.org/bot<token>/getUpdates"` and look for `chat.id` |
| Telegram forum | Group ID with topic (e.g. `-1001234567890:topic:42`) | Same as above, include the topic thread ID |
| Feishu | User open_id (e.g. `ou_e67df1a850910efb902462aeb87783e5`) or group chat_id (e.g. `oc_xxx`) | Check `openclaw pairing list feishu` or gateway logs after the user messages the bot |
| Discord | `user:<user_id>` for DMs, `channel:<channel_id>` for channels | User enables Developer Mode in Discord settings, right-clicks to copy IDs |
| Slack | `channel:<channel_id>` (e.g. `channel:C1234567890`) | Right-click channel name inRelated in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.