Keeping up with AI (and Beyond)...
Keeping up with AI has stopped being realistic.
Something lands every day. You see it on X, you bookmark it. There's a forty minute video you tell yourself you'll watch later. You don't. Two weeks go by and everyone's talking about a thing you've never heard of.
I've been using an open source skill called last30days to deal with this, and it's changed where I go first when I want to know something. Here's the full walkthrough, and further down, the prompt I used to build a proper interface on top of it.
What it actually does
You give it a topic. It goes out and reads Reddit, YouTube, TikTok, Hacker News, GitHub and prediction markets, all at the same time, and hands back one page of what people actually said in the last thirty days.
Not what got published. What got said, and how many people agreed with it.
That difference matters more than it sounds. A search engine will happily summarise a topic for you now, and the summary will be confident and readable. What it won't tell you is that the top comment in the thread had fourteen hundred upvotes and said the opposite, or that three people in the replies said the thing broke for them. Summaries are built to settle a question. This is built to show you the argument, with the vote counts attached.
Here's what a real run looked like for me. Twelve Reddit threads, seven hundred and twenty-one upvotes. Seventeen TikToks with three hundred thousand views between them. Hacker News, GitHub, Instagram. Every claim carrying the engagement behind it.
Why you need a skill for this at all
Your coding agent already has web search. So why not just ask it?
Because web search gets you pages. It doesn't get you a Reddit thread with the score next to every comment, and it isn't sitting through a forty minute YouTube video and transcribing it to find the five sentences that matter. Those platforms are separate walled gardens, each with its own API, its own auth, its own rate limits. No single model has access to all of them.
What closes that gap is a skill. And a skill is genuinely just a folder with a text file inside it, telling the agent how to do something. You drop it in, and your agent can suddenly do a thing it couldn't do five minutes ago.
That's the part I don't think enough people have internalised. Antigravity, or Claude Code, or Cursor out of the box is one thing. Every skill you put into it makes it something more. This one happens to turn it into a research machine.
Installing it
I'm doing this in Antigravity because the preview is free, so you can follow along without paying for anything. The same folder works in Claude Code, Cursor, Codex and about fifty other hosts.
npx skills add mvanhorn/last30days-skill -g
Or copy skills/last30days from the repo into .agents/skills/ in your project. Either works.
Then just ask it something:
/last30days Gemini Robotics ER 2
First run kicks off a setup wizard. Let it finish. It installs a couple of small helpers and switches on the free sources, and skipping it is the most common reason people think the tool is weak when it isn't.
Reddit, Hacker News, GitHub, Polymarket and YouTube all work with no keys and no credit card. X is the one that wants a paid key. I've left mine off, so everything you see in the video is what you get for free.
One Windows quirk worth knowing: the helper CLIs can install into a folder that isn't on your PATH, and when that happens those sources silently drop out of every run. One line fixes it, then restart your agent:
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","User") + ";$env:LOCALAPPDATA\Programs\PrintingPress\bin", "User")
What I actually use it for
Getting good at a tool fast. Documentation tells you which buttons exist. It doesn't tell you what works. That lives in threads and long videos from last week. Ask it about prompting or technique for a specific tool and it comes back with what people found actually works, then writes you the prompts based on it.
Catching up. Something drops, you're in meetings all day, and by the time you look there are a hundred takes. This collapses them into one page.
Comparing before committing. Give it two or three tools and it researches each separately, then merges, with live GitHub numbers instead of star counts from a blog post written in March.
Reading a company before a meeting. What shipped, what people are complaining about, what they're hiring for.
The part I want you to actually take away
This is an AI summarising other people. Which means it can sound completely confident whether there are four hundred upvotes behind a claim or one video with six views.
I have caught it doing exactly that.
So here's the habit. Every run saves a file with every source and every link in it. When something sounds unusually specific, go open the link and check the number matches. It takes ten seconds and it's the difference between knowing something and repeating something.
That applies to every AI research tool, not just this one. It's just that most of them don't make it this easy to check.
Building an interface for it
The chat output works. It's not much to look at, and more importantly you can't click through to sources easily, which is the thing I care about most.
So I described what I wanted and had Antigravity build it. I didn't write any of the code. Below is the whole prompt.
Two things before you run it. Build the search and the report view first and nothing else. Get one topic working end to end, look at it, then decide what you want on top. And be specific about design up front, because "dark theme, full width" gets you the same dashboard everyone else has.
Build a local web app that runs the last30days research engine and displays the results.
The engine is installed at: <PATH TO YOUR last30days-skill FOLDER>
Do not re-implement any research logic. Shell out to the engine and render what it returns.
HOW TO CALL IT
Run this as a subprocess from the repo root:
python skills/last30days/scripts/last30days.py "<topic>" --emit=json --auto-resolve --store --output "<jobs_folder>/<job_id>.json"
Four things that will break it if you skip them:
1. --emit=json prints to stdout, it does NOT write a file. Use --output to write the report to a path you control, and read it from there when the process exits. Parse stdout only for progress.
2. Always include --auto-resolve. Inside the chat, the model works out the right subreddits and repos before searching. A plain subprocess skips that step, and results come back noticeably worse without it.
3. Set the working directory to the repo root, or the relative script path won't resolve. If your setup installed helper CLIs to a folder that isn't on PATH, append that folder to the subprocess PATH too or those sources silently drop out.
4. If you have LAST30DAYS_NATIVE_SEARCH set in your config, clear it for these runs. It tells the engine the host already has web search, which is true in chat and false in a subprocess, so web comes back empty.
Use encoding="utf-8" on the subprocess. The engine outputs emoji and Windows will throw a decode error without it.
WHAT COMES BACK
Top level: query, generated_at, window_days, source_status, clusters, results.
Each cluster: title, summary, sources, engagement_total. Array order is ranking order.
Each result: title, source, url, published_at, summary, engagement (an object of native counters, upvotes, likes, comments), relevance_score, and cluster (an index pointing back to its cluster).
Fields with unknown values are left out entirely rather than set to null, so handle missing keys.
IMPORTANT
A run takes 3 to 8 minutes. Never block the UI. Every run is a background job with an id and a live status. Show elapsed time and which sources have reported so far. The user should be able to start a run, close the tab, and come back to it.
WHAT TO BUILD
A search box that starts a job and shows progress immediately.
When it finishes, render:
- A row of source badges across the top, one per source, each showing item count and total engagement. Sources that returned nothing stay visible and greyed with a label. Never hide them, being honest about coverage is the whole point.
- Findings as cards in ranking order, with engagement shown as visible weight so the well-supported ones are obviously bigger than the thin ones.
- Expanding a card shows its individual results with their engagement numbers and a clickable link to the original.
Every claim on screen must be one click from its source. That is the most important feature.
Design it
Where I've landed on it
I don't bookmark things I'm never going to read anymore. I ask once a week, I get one page, and it's saved, so it's still there a month later when I need it.
It isn't perfect. Reddit will throttle you on the free path. X needs a paid key. And the confidence problem I mentioned above is real and you should stay alert to it.
But it's free, it took about a minute to set up, and a folder with a text file in it gave my agent something it couldn't do that morning. That's the bit worth paying attention to, more than any single skill.
The repo is at github.com/mvanhorn/last30days-skill. If you build something on top of it, I'd like to see it.