← back to Last30 Skill
last30: add TikTok + Instagram to the web-search social layer (completes the /last30days source set)
a55430666e478e12f0806e223f7741799bce2ee4 · 2026-07-13 15:55:56 -0700 · Steve
Files touched
M README.mdM skills/last30/SKILL.mdM skills/last30/references/sources.md
Diff
commit a55430666e478e12f0806e223f7741799bce2ee4
Author: Steve <steve@designerwallcoverings.com>
Date: Mon Jul 13 15:55:56 2026 -0700
last30: add TikTok + Instagram to the web-search social layer (completes the /last30days source set)
---
README.md | 5 +++--
skills/last30/SKILL.md | 20 +++++++++++++++-----
skills/last30/references/sources.md | 19 ++++++++++++++++++-
3 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/README.md b/README.md
index dd471da..afa9de1 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,9 @@
30 days — ranked by real engagement, not editors.**
Runs a zero-dependency Python engine over free, no-key public APIs (Hacker News,
-arXiv, GitHub, Polymarket), layers in social platforms (Reddit, X, YouTube) via the
-host agent's own web search, scores everything by **engagement × recency**, and
+arXiv, GitHub, Polymarket), layers in social platforms (Reddit, X, YouTube, TikTok,
+Instagram) via the host agent's own web search, scores everything by
+**engagement × recency**, and
synthesizes one grounded, cited brief.
Inspired by [mvanhorn/last30days-skill](https://github.com/mvanhorn/last30days-skill)
diff --git a/skills/last30/SKILL.md b/skills/last30/SKILL.md
index 14e1e3e..0efafbb 100644
--- a/skills/last30/SKILL.md
+++ b/skills/last30/SKILL.md
@@ -1,6 +1,6 @@
---
name: last30
-description: 'Research what people actually said about any topic in the LAST 30 DAYS, ranked by real engagement (upvotes, points, GitHub stars, prediction-market money) and recency, then synthesize one grounded, cited brief. Runs a zero-dependency Python engine over free no-key APIs (Hacker News, arXiv, GitHub, Polymarket) and supplements social platforms (Reddit, X, YouTube) through the host web search. This skill should be used when the user asks what people are saying about a topic, the latest or recent buzz or current state of something, what is trending in a domain, wants a recency-scoped multi-source scan, or invokes /last30. Not for evergreen facts, code in the current repo, or single-site lookups.'
+description: 'Research what people actually said about any topic in the LAST 30 DAYS, ranked by real engagement (upvotes, points, GitHub stars, prediction-market money) and recency, then synthesize one grounded, cited brief. Runs a zero-dependency Python engine over free no-key APIs (Hacker News, arXiv, GitHub, Polymarket) and supplements social platforms (Reddit, X, YouTube, TikTok, Instagram) through the host web search. This skill should be used when the user asks what people are saying about a topic, the latest or recent buzz or current state of something, what is trending in a domain, wants a recency-scoped multi-source scan, or invokes /last30. Not for evergreen facts, code in the current repo, or single-site lookups.'
argument-hint: 'last30 nvidia earnings reaction | last30 AI video tools --days 7 | last30 doctor'
allowed-tools: Bash, Read, WebSearch, AskUserQuestion
homepage: https://github.com/mvanhorn/last30days-skill
@@ -21,6 +21,8 @@ metadata:
- github
- polymarket
- reddit
+ - tiktok
+ - instagram
- citations
---
@@ -52,8 +54,8 @@ single known URL (use WebFetch for that).
### Step 0 — Resolve host web search
Confirm a web-search tool exists this session. Prefer, in order: the **Exa MCP**
(`mcp__exa__web_search_exa`) if connected, else the built-in **WebSearch** tool.
-This is what covers Reddit/X/YouTube in Step 3. If neither exists, proceed with
-the engine-only sources and say so in the brief.
+This is what covers Reddit/X/YouTube/TikTok/Instagram in Step 3. If neither
+exists, proceed with the engine-only sources and say so in the brief.
### Step 1 — Parse intent
- **Topic run** (default): a subject was named → Steps 2–4.
@@ -91,11 +93,19 @@ with the Step-0 tool, scoped to recency and domain. Run these **in parallel**:
- **Reddit** — Exa/WebSearch `allowed_domains: ["reddit.com"]`, query `<topic>`.
- **X / Twitter** — `allowed_domains: ["x.com","twitter.com","nitter.net"]`.
- **YouTube** — `allowed_domains: ["youtube.com"]` (look for reaction/deep-dive).
+- **TikTok** — `allowed_domains: ["tiktok.com"]` (creator takes, trend clips). The
+ web index for TikTok is **sparse — best-effort**; capture view/like counts only
+ when the search snippet actually shows them, and don't invent them.
+- **Instagram** — `allowed_domains: ["instagram.com"]` (Reels / posts). Also
+ **best-effort** — login-walled, so expect thin coverage; keep what the index
+ surfaces and move on.
- Optionally **news/web** — a broad Exa search for the freshest reporting.
Keep only results plausibly inside the window. Capture the engagement signal when
-visible (upvotes, view counts). See `references/sources.md` for the full source
-matrix and the reasoning behind the engine/web-search split.
+visible (upvotes, view counts). TikTok/Instagram are the thinnest layer — treat a
+few relevant hits as a bonus, never pad the brief to force them in. See
+`references/sources.md` for the full source matrix and the reasoning behind the
+engine/web-search split.
### Step 4 — Synthesize one grounded brief
Merge engine output + web-search supplements into a single brief:
diff --git a/skills/last30/references/sources.md b/skills/last30/references/sources.md
index 54ef7fc..f601ff9 100644
--- a/skills/last30/references/sources.md
+++ b/skills/last30/references/sources.md
@@ -11,7 +11,7 @@ Keep procedural instructions in `SKILL.md`; keep depth here.
| Layer | Sources | Reached by | Why |
|---|---|---|---|
| **Engine** (`scripts/last30.py`) | Hacker News, arXiv, GitHub, Polymarket | Free public JSON/Atom APIs, no key | Clean, deterministic, parallel, structured engagement numbers |
-| **Web-search** (agent) | Reddit, X/Twitter, YouTube, TikTok, general news | Host tool (Exa MCP → WebSearch) | These are IP-blocked (Reddit) or key-gated (X/TikTok); the host already indexes them |
+| **Web-search** (agent) | Reddit, X/Twitter, YouTube, TikTok, Instagram, general news | Host tool (Exa MCP → WebSearch) | These are IP-blocked (Reddit) or key-gated / login-walled (X/TikTok/Instagram); the host already indexes what's public |
The original `mvanhorn/last30days-skill` reaches the second layer with a paid
**ScrapeCreators** key and a vendored X client. This reimplementation deliberately
@@ -42,6 +42,23 @@ a User-Agent issue (a desktop-browser UA does not fix it). So Reddit is:
If you need Reddit's real upvote/comment structure and the engine is blocked, the
web-search supplement (Exa/WebSearch scoped to `reddit.com`) is the fallback.
+### TikTok & Instagram (web-search layer, best-effort)
+These are the completion of the original `/last30days` source set (X, Reddit,
+YouTube, TikTok, Instagram, arXiv, HN, Polymarket). Neither has a free no-key API,
+so — like X and YouTube — they live in the **web-search layer** (`SKILL.md` Step 3),
+never in the engine. Coverage is deliberately **best-effort**:
+
+- **TikTok** — `allowed_domains: ["tiktok.com"]`. Public video pages are indexed
+ but engagement (views/likes) shows up only when the search snippet includes it.
+ Capture it when visible; never fabricate a count.
+- **Instagram** — `allowed_domains: ["instagram.com"]`. Login-walled, so the index
+ is thin; treat any relevant hit as a bonus, not a required section.
+
+A stub engine fetcher for either would only ever return an `error` marker (no free
+endpoint), so it is intentionally **not** wired into `FETCHERS`/`DEFAULT_SOURCES`.
+For real per-post engagement numbers, the optional **ScrapeCreators** key below
+(10k free calls) is the paid upgrade path — off by design.
+
## Optional keyed sources (documented, not required)
Not wired into this engine — enable only if the user explicitly wants them and
← 248dc83 last30: add relevance gate (topic-token coverage) to kill ke
·
back to Last30 Skill
·
last30: correct Reddit fallback — built-in WebSearch is also 4d1691a →