{"id":51564012,"url":"https://github.com/firecrawl/last30flames","last_synced_at":"2026-07-10T13:02:59.754Z","repository":{"id":368621219,"uuid":"1285179460","full_name":"firecrawl/last30flames","owner":"firecrawl","description":"Agent skill that researches what's actually new about any topic in a recent time window - keyless, harness-agnostic.","archived":false,"fork":false,"pushed_at":"2026-07-01T11:54:44.000Z","size":28,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T13:20:07.744Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/firecrawl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-30T14:53:45.000Z","updated_at":"2026-07-01T11:54:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/firecrawl/last30flames","commit_stats":null,"previous_names":["firecrawl/last30flames"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/firecrawl/last30flames","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firecrawl%2Flast30flames","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firecrawl%2Flast30flames/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firecrawl%2Flast30flames/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firecrawl%2Flast30flames/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firecrawl","download_url":"https://codeload.github.com/firecrawl/last30flames/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firecrawl%2Flast30flames/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35331955,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-10T02:00:06.465Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-10T13:02:57.907Z","updated_at":"2026-07-10T13:02:59.742Z","avatar_url":"https://github.com/firecrawl.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🔥\n\n# /last30flames\n\n**An agent skill that researches what is actually new about any topic in a recent time window.**\n\nNo API keys required - works out of the box.\n\n\u003c/div\u003e\n\nWorks in any agent harness that supports skills.\n\n\u003e Inspired by [last30days](https://github.com/mvanhorn/last30days-skill) by Matt\n\u003e Van Horn.\n\nIt gathers five signals **in parallel** and hands them to the agent to write a\nshort, source-grounded brief:\n\n- **Firecrawl Search** - web results scraped into full-page markdown, not snippets.\n- **Hacker News** (public Algolia API) - points + comment counts.\n- **Lobste.rs** (public JSON feeds) - points + comment counts.\n- **Bluesky** (public AT Protocol API) - likes + reposts + replies.\n- **GitHub** (official API) - stars + recent push activity.\n\nEngagement numbers come only from APIs that publish them openly. The skill never\ntouches Reddit, X, TikTok, Instagram, or anything behind a login or cookie.\n\n## Design principles\n\n- **Small enough to read.** The engine is a handful of small TypeScript files\n  with zero runtime dependencies. You can audit everything it runs on your\n  machine in five minutes.\n- **Keyless.** Works out of the box. Keys only raise rate limits, never unlock\n  features.\n- **Only open, permitted sources.** Firecrawl search of the public web, plus the\n  official Hacker News, Lobste.rs, Bluesky, and GitHub APIs. Nothing behind a login, and\n  nothing that violates a platform's terms of service.\n- **No LLM in the engine.** It only gathers and prints sources; your agent does\n  the synthesis. No second model, no extra bill.\n\n## Install\n\nWorks in any agent harness that supports skills.\nIt only needs the `bun` binary - no API key required.\n\n**Recommended** - via [skills.sh](https://www.skills.sh/), which installs into\nwhichever harness you use:\n\n```\nnpx skills add firecrawl/last30flames\n```\n\nIn Claude Code you can alternatively install through the plugin marketplace:\n\n```\n/plugin marketplace add firecrawl/last30flames\n/plugin install last30flames\n```\n\nIn any other harness, point it at this repo's `skills/last30flames/SKILL.md` (or copy\nthat folder into the harness's skills directory). The engine is launched through\n`skills/last30flames/scripts/run.sh`, which self-locates and installs deps on first\nrun - no harness-specific environment variables required.\n\nKeys are optional - it runs keyless. Set either only to raise rate limits:\n\n```bash\nexport FIRECRAWL_API_KEY=fc-...   # higher Firecrawl limits + concurrency\nexport GITHUB_TOKEN=ghp_...       # higher GitHub rate limit\n```\n\n### Starting keyless, adding a key later\n\nNothing to reinstall or reconfigure. The Firecrawl CLI checks for a key on every\nrun, so the moment one is present it uses it:\n\n```bash\nexport FIRECRAWL_API_KEY=fc-...   # or run: firecrawl login\n```\n\nNext run is automatically authenticated (higher limits, more concurrency). Confirm\nwith `firecrawl --status`. Remove the variable (or `firecrawl logout`) to go back\nto the keyless free tier. Same binary, same skill - only the rate limits change.\n\n## Use\n\n```\n/last30flames AI coding agents\n/last30flames local LLM inference --days 7\n```\n\n`--days` sets the recency window (default 30). Any number works - 7, 30, 365.\n\n### Ambiguous topics\n\nFor topics that could mean more than one thing (a person's name, \"Apple\",\n\"Cursor\"), the skill first runs a cheap resolution pass - a snippet-only\nFirecrawl search plus GitHub user/repo candidate lookups - then re-searches\nwith 2-4 refined subqueries and, for people and projects, scopes GitHub to the\nmatching login or repo. The engine only gathers candidates; the agent does the\ndisambiguating. Direct flags: `--query` (repeatable), `--github-user`,\n`--github-repo owner/name`, and `--resolve` for the candidate pass.\n\n### Comparisons\n\nA topic like `cursor vs zed` runs a full gather per side in one pass and groups\nthe research context per side, so the brief can compare traction and shipping\nactivity directly.\nAuto-splitting on \"vs\"/\"versus\" in any capitalization needs no flags (only\nall-caps \"VS\" is exempt, so \"best VS Code extensions\" stays a single topic);\nfor ambiguous names, `--compare\n\"\u003cside\u003e\"` declares each side explicitly, and any `--query`/`--github-user`/\n`--github-repo` flags that follow scope to that side.\nThe web-scrape budget is shared across sides, so raise `--limit` when you want\nfull per-side depth.\n\n### Save and reuse research\n\nAsk the skill to save a run, and it writes the raw research context to a thread\nfolder under `~/.last30flames/` (findable from any later session):\n\n```\n/last30flames AI coding agents, save this to my ai-agents research\n```\n\nRelated calls in the same session land in the same thread. In a later session,\nreload it without re-scraping:\n\n```\n/last30flames load my ai-agents research\n/last30flames using my saved ai-agents research, what did I find on local inference?\n```\n\nIf a saved context is older than its recency window, the skill warns you it's\nstale and offers to re-run fresh.\n\n### Shareable HTML brief\n\nAsk for a shareable version and the skill writes the brief as a self-contained\ndark-mode HTML file (inline CSS, no JavaScript, works offline) that drops\ncleanly into Slack, email, or Notion:\n\n```\n/last30flames AI coding agents, give me a shareable HTML brief\n```\n\nInline `[N]` citations become clickable jumps to the sources list. The file is\nsaved in the same thread folder under `~/.last30flames/` and the skill reports\nthe path.\n\n## Run the engine directly\n\nThe engine is a tiny Bun + TypeScript project under `skills/last30flames`:\n\n```bash\ncd skills/last30flames\nbun install\nbun run scripts/index.ts \"AI coding agents\" --days 30\n```\n\nProgress prints to stderr; the numbered research context prints to stdout, so you\ncan pipe it (`\u003e context.md`) or let the agent read it.\n\n## Layout\n\n```\n.claude-plugin/        plugin.json + marketplace.json (distribution)\nskills/last30flames/\n  SKILL.md             how the agent invokes the engine and writes the brief\n  scripts/             the engine: one small file per job (entry point, one\n                       module per source, formatting, launcher)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirecrawl%2Flast30flames","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirecrawl%2Flast30flames","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirecrawl%2Flast30flames/lists"}