last30days ยท git:20260722.0693ae0 ยท 2026-07-22 ยท sha256 81caac63d9d308fd
last30days git:20260722.0693ae0A
Immutable. This exact content never changes and is served at /api/v1/blob/81caac63d9d308fd.
---
name: last30days
description: Research the last 30 days across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and grounded web search. Returns a ranked, clustered brief with citations. Use when the task needs recent social evidence, competitor comparisons, launch reactions, trend scans, or person/company profiles.
license: MIT
compatibility: Works with any agentskills.io-compatible harness โ Claude Code, Claude, OpenCode, Cursor, Codex, Gemini CLI, OpenClaw, Hermes, Goose, and others. Requires Python 3, a POSIX shell, and AISA_API_KEY.
metadata:
aisa:
emoji: ๐ฐ
homepage: https://aisa.one
requires:
bins:
- python3
- bash
env:
- AISA_API_KEY
primaryEnv: AISA_API_KEY
harnesses:
- claude-code
- claude
- opencode
- cursor
- codex
- gemini-cli
- openclaw
- hermes
- goose
---
# last30days ๐ฐ
**30-day multi-source research brief for autonomous agents. Powered by AIsa.**
One API key. Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and grounded web โ merged into a single ranked brief.
## Compatibility
Works with any [agentskills.io](https://agentskills.io)-compatible
harness, including:
- **Claude Code** and **Claude** (Anthropic)
- **OpenAI Codex**
- **Cursor**
- **Gemini CLI** (Google)
- **OpenCode**, **Goose**, **OpenClaw**, **Hermes**
- and any other harness that implements the [Agent Skills
specification](https://agentskills.io/specification)
Requires Python 3, a POSIX shell, and `AISA_API_KEY` (get one at
[aisa.one](https://aisa.one)).
## What Can You Do?
### Trend scan
```text
"last30days OpenAI Agents SDK"
```
### Competitor comparison
```text
"last30days Claude Code vs Codex"
```
### Person / company profile
```text
"last30days Peter Steinberger"
```
### Launch reaction
```text
"last30days GPT-5 launch --deep"
```
### Prediction-market angle
```text
"last30days bitcoin price"
```
## Quick Start
```bash
# 1. Export your AIsa key
export AISA_API_KEY=sk-...
# 2. First-run setup (interactive โ picks planner / rerank / fun-scorer models)
bash {baseDir}/scripts/run-last30days.sh setup
# 3. Research a topic
bash {baseDir}/scripts/run-last30days.sh "OpenAI Agents SDK"
```
## Common Flags
```bash
# Low-latency profile (fewer candidates per source)
bash {baseDir}/scripts/run-last30days.sh "$ARGUMENTS" --quick
# Higher-recall profile
bash {baseDir}/scripts/run-last30days.sh "$ARGUMENTS" --deep
# Machine-readable output (full plan + candidates + clusters)
bash {baseDir}/scripts/run-last30days.sh "$ARGUMENTS" --emit=json
# Restrict to specific sources
bash {baseDir}/scripts/run-last30days.sh "$ARGUMENTS" --search=reddit,x,grounding
# Check provider / source availability
bash {baseDir}/scripts/run-last30days.sh --diagnose
```
## Inputs and Outputs
**Input.** A topic, person, company, product, or comparison โ e.g.
`OpenAI Agents SDK`, `OpenClaw vs Codex`, `Peter Steinberger`.
**Output.** A markdown brief (default) or JSON with:
- `query_plan` โ planner-generated subqueries and source weights
- `ranked_candidates` โ reranked candidate pool with scores
- `clusters` โ semantically grouped findings
- `items_by_source` โ per-source item lists with dates, engagement, URLs
- `provider_runtime` โ which models + retrieval backends ran
- `errors_by_source` โ any source-level failures (fail-soft)
## When to use
- You need last-30-days evidence on a person, company, product, market, tool, or trend.
- You want a ranked competitor comparison, launch-reaction summary, creator/community sentiment scan, or shipping update.
- You want a structured JSON brief to feed into another agent.
## When NOT to use
- Timeless reference questions with no recent-evidence requirement.
- When you only want one official source and don't want social/community signals.
## Capabilities
- **AISA-powered**: planner (structured JSON query plan), reranker
(relevance ordering), fun-scorer (meme/quirk signal), and hosted
retrieval for X, YouTube, TikTok, Instagram, Polymarket, and grounded
Tavily web search.
- **Public paths (no extra credentials)**: Reddit, Hacker News.
- **GitHub** via the official API when `GH_TOKEN` or `GITHUB_TOKEN` is
set โ optional.
- **Fail-soft**: if one source errors or times out, the brief still
renders with the others and notes the gap.
## Model Configuration
The skill makes three LLM calls per run. Each role is independently
pinnable via `~/.config/last30days/.env`:
```bash
LAST30DAYS_PLANNER_MODEL=qwen-flash # fast + reliable JSON
LAST30DAYS_RERANK_MODEL=qwen-plus-2025-12-01 # quality ranking
LAST30DAYS_FUN_MODEL=qwen-flash # cheap vibes
```
Or set `AISA_MODEL=...` for a single model across all three roles. Run
`last30days setup` to pick interactively โ the picker fetches the live
catalog from [aisa.one/docs/guides/models](https://aisa.one/docs/guides/models).
## API Reference
last30days calls the following AIsa endpoints directly. See the
[full API Reference](https://aisa.one/docs/api-reference) for the
complete catalog.
- [OpenAI Chat / `createChatCompletion`](https://aisa.one/docs/api-reference/chat/createchatcompletion) โ planner, reranker, fun-scorer
- [Twitter Advanced Search](https://aisa.one/docs/api-reference/twitter/get_twitter-tweet-advanced-search) โ X retrieval
- [YouTube Search](https://aisa.one/docs/api-reference/search/get_youtube-search) โ YouTube retrieval
- [Tavily Search](https://aisa.one/docs/api-reference/search/post_tavily-search) โ grounded web
- [Polymarket Markets](https://aisa.one/docs/api-reference/prediction-market/get_polymarket-markets) โ prediction-market retrieval
Reddit and Hacker News use their respective public APIs directly (no
AISA proxy required).
## Requirements
- **Python 3.12+**
- **`AISA_API_KEY`** โ required. Get one at [aisa.one](https://aisa.one).
- **`GH_TOKEN` / `GITHUB_TOKEN`** โ optional, enables the GitHub source.
```bash
# Pin an interpreter โฅ 3.12
for py in /usr/local/python3.12/bin/python3.12 python3.14 python3.13 python3.12 python3; do
command -v "$py" >/dev/null 2>&1 || continue
"$py" -c 'import sys; raise SystemExit(0 if sys.version_info >= (3, 12) else 1)' || continue
LAST30DAYS_PYTHON="$py"
break
done
```