[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-firecrawl-last30flames":3,"mdc--r8k35i-key":34,"related-repo-firecrawl-last30flames":1656,"related-org-firecrawl-last30flames":1665},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"last30flames","research recent trends on topics","Research what's genuinely new about a topic in a recent time window. Use when the user asks what's new, recent, or trending on a subject and wants a source-grounded brief rather than a quick lookup.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"firecrawl","Firecrawl","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ffirecrawl.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Research","research","tag",{"name":17,"slug":18,"type":15},"Summarization","summarization",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Search","search",27,"https:\u002F\u002Fgithub.com\u002Ffirecrawl\u002Flast30flames","2026-07-02T07:02:21.451","MIT",5,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Agent skill that researches what's actually new about any topic in a recent time window - keyless, harness-agnostic.","https:\u002F\u002Fgithub.com\u002Ffirecrawl\u002Flast30flames\u002Ftree\u002FHEAD\u002Fskills\u002Flast30flames","---\nname: last30flames\ndescription: \"Research what's genuinely new about a topic in a recent time window. Use when the user asks what's new, recent, or trending on a subject and wants a source-grounded brief rather than a quick lookup.\"\nargument-hint: 'last30flames AI coding agents | last30flames local LLM inference --days 7'\nallowed-tools: Bash, Read\nuser-invocable: true\nhomepage: https:\u002F\u002Fgithub.com\u002Ffirecrawl\u002Flast30flames\nrepository: https:\u002F\u002Fgithub.com\u002Ffirecrawl\u002Flast30flames\nlicense: MIT\nmetadata:\n  openclaw:\n    emoji: \"🔥\"\n    requires:\n      env: []\n      optionalEnv: [FIRECRAWL_API_KEY, GITHUB_TOKEN]\n      bins: [bun]\n    files:\n      - \"scripts\u002F*\"\n  tags:\n    - research\n    - recency\n    - firecrawl\n    - web-search\n    - hackernews\n    - lobsters\n    - bluesky\n    - github\n    - citations\n---\n\n# last30flames\n\nResearch a topic across the **recent** web and write a short, source-grounded brief.\n\nThis skill is a thin engine plus your synthesis. The engine gathers sources and\nprints a clean, numbered **research context**; you (the model running this skill)\nread that context and write the brief.\n\n**No keys are required.** The engine never calls an LLM (you do the synthesis),\nand it reaches Firecrawl through the Firecrawl CLI, which runs on a keyless free\ntier when no key is set. If `FIRECRAWL_API_KEY` *is* in the environment the CLI\nuses it automatically for higher limits and concurrency - so a key is a speed\nupgrade, never a requirement. A user who starts keyless and later sets\n`FIRECRAWL_API_KEY` (or runs `firecrawl login`) is authenticated on the very next\nrun, with nothing to reinstall.\n\n## How it works\n\nFive sources run in parallel:\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## Run the engine\n\nThis works in any agent harness that supports skills. You already know the\nabsolute path of this `SKILL.md` because you just read it; call `scripts\u002Frun.sh`\nnext to it. It self-locates, installs deps on first run,\nand takes the topic plus an optional `--days N` window (any number - 7, 30, 365;\ndefault 30):\n\n```bash\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"\u003CTOPIC>\" --days 30\n```\n\nReplace `\u003CSKILL_DIR>` with the directory this file is in. Do not rely on\n`$CLAUDE_PLUGIN_ROOT` or the current working directory - the launcher handles\nboth. The only requirement is the `bun` binary; no API key is needed (set\n`FIRECRAWL_API_KEY` only if you want higher Firecrawl limits).\n\nProgress prints to stderr; the numbered research context prints to stdout. Read\nthe stdout - that is your evidence.\n\n## Resolve ambiguous topics first (recommended)\n\nIf the topic could point at more than one thing - a person's name, a product\nthat shares a name with something common (\"Apple\", \"Cursor\"), a bare handle -\nrun a cheap resolution pass before the main gather:\n\n```bash\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh --resolve \"\u003CTOPIC>\"\n```\n\nIt prints candidate identities (web titles + descriptions, GitHub repo and user\ncandidates) without scraping any pages. Read them and decide:\n\n- **2-4 refined subqueries** that pin down the intended entity (e.g. for\n  \"Cursor\" the AI editor: `\"Cursor AI editor\"`, `\"Cursor IDE agent\"`).\n  Each subquery multiplies the Firecrawl search\u002Fscrape work, so runtime scales\n  with query count - use the fewest that pin down the entity, usually 2.\n- If the topic is a **person or project**, the matching **GitHub login** and\u002For\n  **owner\u002Fname repo**.\n\nThen run the main gather with those, passing `--query` once per subquery:\n\n```bash\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"\u003CTOPIC>\" --days 30 \\\n  --query \"\u003Csubquery 1>\" --query \"\u003Csubquery 2>\" \\\n  --github-user \u003Clogin> --github-repo \u003Cowner\u002Fname>\n```\n\nThe engine searches the web, Hacker News, Lobste.rs, and Bluesky with each\nsubquery (up to 4, deduplicating overlapping results), and scopes GitHub to the\ngiven login\u002Frepo. All flags are optional - a clear, specific topic can skip\nresolution entirely and run one-shot as before. The resolution pass never\ndecides anything itself; you do.\n\n## Comparison topics (\"X vs Y\")\n\nWhen the topic pits two or three things against each other (\"cursor vs zed\",\n\"bun versus deno\"), the engine runs a full gather per side in one pass and\ngroups the research context per side, with continuous citation numbering.\n\nA topic containing \"vs\"\u002F\"versus\" in any capitalization auto-splits, so the simple form just works.\nThe one carve-out is all-caps \"VS\", so topics like \"best VS Code extensions\" stay a single side; use `--compare` to compare things whose names contain \"VS\":\n\n```bash\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"cursor vs zed\" --days 30\n```\n\nThe web-scrape budget (`--limit`) is shared across sides, so each side of a\ncomparison scrapes fewer pages than a dedicated run would; pass a higher\n`--limit` (e.g. `--limit 10` for two sides) when you want full per-side depth.\n\nFor sharper sides, pass `--compare` once per side; any `--query`,\n`--github-user`, or `--github-repo` flags that follow a `--compare` scope to\nthat side (run `--resolve` per side first if a name is ambiguous):\n\n```bash\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"cursor vs zed\" \\\n  --compare \"Cursor\" --query \"Cursor AI editor\" --github-repo getcursor\u002Fcursor \\\n  --compare \"Zed\" --query \"Zed editor\" --github-repo zed-industries\u002Fzed\n```\n\nSynthesize a side-by-side brief from the grouped context: what moved for each side in the window, then a direct comparison (traction via the engagement numbers, notable shipping activity, best-for).\nCite both sides inline as usual; the numbering never collides because it is continuous across sides.\n\n## Save & reuse the context (optional)\n\nBy default, do not write any files - just synthesize the brief. Only save when\nthe user asks (e.g. \"save the context\", \"I'll want this again later\").\n\nSaved contexts live under `~\u002F.last30flames\u002F`, grouped into **thread folders** so a\nrun of related calls can be reloaded as one set. A thread is just a named\nsubdirectory; each call saves its own file, which keeps every call's `[1]`, `[2]`\ncitation numbering intact (never concatenate two contexts into one file - the\nnumbering would collide):\n\n```\n~\u002F.last30flames\u002F\u003Cthread>\u002F\n  \u003Cslug>-\u003CYYYY-MM-DD>.md      # one file per engine call\n```\n\n**On save:** redirect the engine's stdout so the *raw numbered research context* is\npreserved (that is the reusable evidence - not the brief). Pick the thread folder\nfirst:\n\n- If the user names a thread (\"save this to my ai-agents research\"), slugify it as\n  `\u003Cthread>`.\n- Otherwise reuse the thread from earlier saves in this same conversation, so\n  related calls land together.\n- If neither applies, derive `\u003Cthread>` from the topic and tell the user the name\n  you chose so they can reference it later.\n\nDerive `\u003Cslug>` by slugifying the topic (lowercase, spaces to hyphens, drop\npunctuation) so the filename tells you what the call was about. Then create the\nfolder and write the file, and report the exact path afterward:\n\n```bash\nmkdir -p ~\u002F.last30flames\u002F\u003Cthread>\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"\u003CTOPIC>\" --days 30 > ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>.md\n```\n\nBecause the redirect sends the research context to the file instead of stdout,\nthe Bash output shows only stderr progress. If the user also wants the brief this\nsession, `Read` the saved file first to get the context, then synthesize as usual.\n\nIf the user explicitly names a different path, honor it instead.\n\n**On reuse (a later session):** the user need not recall exact names. If they\nreference saved research even loosely (\"load my ai-agents research\"), list the\nthread folders under `~\u002F.last30flames\u002F` and match on the thread name; then `Read`\n**every** `.md` file in that folder and synthesize across all of them, keeping\ncitations namespaced by source file so numbers from different calls don't clash.\nTo reload a single call rather than the whole thread, match one file by its\n`\u003Cslug>-\u003Cdate>` name. If nothing matches, ask where they saved it.\n\nBecause each filename is `\u003Cslug>-\u003CYYYY-MM-DD>.md`, both topic and save date are\nrecoverable from the name alone - no external memory needed. Before synthesizing,\ncheck each file's date against the `--days` window: if today is more than that many\ndays past the saved date, the recency claim no longer holds - warn the user that\ncontext is stale and offer to re-run fresh.\n\nReuse-shaped prompts to handle this way (do not re-run the engine):\n\n```\nlast30flames load my ai-agents research\nlast30flames using my saved ai-agents research, what did I find on local inference?\n```\n\n## Write the brief\n\nFrom the numbered sources, write a few tight paragraphs that:\n\n- **Lead with what is genuinely new or moving** in the window. Not background.\n- **Ground every claim in the sources and cite inline** like `[1]`, `[3]`.\n- **Use the engagement numbers** (HN points\u002Fcomments, GitHub stars) as a signal\n  of what people actually care about - weight high-engagement items.\n- **Say plainly where evidence is thin** rather than inventing detail. If HN or\n  GitHub returned little, that honesty is part of the answer.\n\nAfter the brief, end with a compact **Sources** list so every inline citation is\nclickable. One line per source you actually cited, keeping the same numbers used\ninline, as markdown links:\n\n```\nSources:\n[1] [Title of the page](https:\u002F\u002Fexample.com\u002Farticle) - example.com\n[3] [Show HN: Something](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=123) - news.ycombinator.com\n```\n\nList only cited sources - this is a reference list for the reader, not a dump of\nthe research context. Never paste the raw research context back.\n\n## Shareable HTML brief (optional)\n\nWhen the user asks for a shareable version of the brief (\"make this shareable\", \"give me an HTML file\", \"something I can drop in Slack\u002Femail\u002FNotion\"), emit the synthesis as a self-contained dark-mode HTML file alongside the normal chat response.\nThe file has inline CSS, no JavaScript, and no external assets, so it works offline and renders the same everywhere.\n\nFirst write the brief you synthesized - including its `Sources:` list with the same numbering - as markdown into the thread folder, picking `\u003Cthread>` and `\u003Cslug>` exactly as in the save flow above:\n\n```bash\nmkdir -p ~\u002F.last30flames\u002F\u003Cthread>\n# Write the brief markdown to ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>-brief.md\nbun \u003CSKILL_DIR>\u002Fscripts\u002Fhtmlify.ts ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>-brief.md\n```\n\nThe converter turns headings, paragraphs, lists, links, and inline `[N]` citations into HTML - each citation becomes a clickable jump to its entry in the Sources list - writes `\u003Cslug>-\u003CYYYY-MM-DD>-brief.html` next to the markdown, and prints the output path.\nReport that path to the user.\nIf the user names a different output location, pass it with `-o \u003Cpath>`.\n\nThis converts your synthesized brief, not the raw research context - never htmlify the engine's stdout.\n",{"data":35,"body":59},{"name":4,"description":6,"argument-hint":36,"allowed-tools":37,"user-invocable":38,"homepage":24,"repository":24,"license":26,"metadata":39},"last30flames AI coding agents | last30flames local LLM inference --days 7","Bash, Read",true,{"openclaw":40,"tags":51},{"emoji":41,"requires":42,"files":49},"🔥",{"env":43,"optionalEnv":44,"bins":47},[],[45,46],"FIRECRAWL_API_KEY","GITHUB_TOKEN",[48],"bun",[50],"scripts\u002F*",[14,52,8,53,54,55,56,57,58],"recency","web-search","hackernews","lobsters","bluesky","github","citations",{"type":60,"children":61},"root",[62,69,83,95,136,143,148,203,208,214,243,319,354,359,365,370,422,427,482,495,650,655,661,666,679,734,762,812,959,964,970,975,1010,1020,1037,1069,1082,1249,1262,1267,1311,1332,1337,1346,1352,1357,1413,1425,1434,1439,1445,1450,1477,1617,1645,1650],{"type":63,"tag":64,"props":65,"children":66},"element","h1",{"id":4},[67],{"type":68,"value":4},"text",{"type":63,"tag":70,"props":71,"children":72},"p",{},[73,75,81],{"type":68,"value":74},"Research a topic across the ",{"type":63,"tag":76,"props":77,"children":78},"strong",{},[79],{"type":68,"value":80},"recent",{"type":68,"value":82}," web and write a short, source-grounded brief.",{"type":63,"tag":70,"props":84,"children":85},{},[86,88,93],{"type":68,"value":87},"This skill is a thin engine plus your synthesis. The engine gathers sources and\nprints a clean, numbered ",{"type":63,"tag":76,"props":89,"children":90},{},[91],{"type":68,"value":92},"research context",{"type":68,"value":94},"; you (the model running this skill)\nread that context and write the brief.",{"type":63,"tag":70,"props":96,"children":97},{},[98,103,105,111,113,119,121,126,128,134],{"type":63,"tag":76,"props":99,"children":100},{},[101],{"type":68,"value":102},"No keys are required.",{"type":68,"value":104}," The engine never calls an LLM (you do the synthesis),\nand it reaches Firecrawl through the Firecrawl CLI, which runs on a keyless free\ntier when no key is set. If ",{"type":63,"tag":106,"props":107,"children":109},"code",{"className":108},[],[110],{"type":68,"value":45},{"type":68,"value":112}," ",{"type":63,"tag":114,"props":115,"children":116},"em",{},[117],{"type":68,"value":118},"is",{"type":68,"value":120}," in the environment the CLI\nuses it automatically for higher limits and concurrency - so a key is a speed\nupgrade, never a requirement. A user who starts keyless and later sets\n",{"type":63,"tag":106,"props":122,"children":124},{"className":123},[],[125],{"type":68,"value":45},{"type":68,"value":127}," (or runs ",{"type":63,"tag":106,"props":129,"children":131},{"className":130},[],[132],{"type":68,"value":133},"firecrawl login",{"type":68,"value":135},") is authenticated on the very next\nrun, with nothing to reinstall.",{"type":63,"tag":137,"props":138,"children":140},"h2",{"id":139},"how-it-works",[141],{"type":68,"value":142},"How it works",{"type":63,"tag":70,"props":144,"children":145},{},[146],{"type":68,"value":147},"Five sources run in parallel:",{"type":63,"tag":149,"props":150,"children":151},"ul",{},[152,163,173,183,193],{"type":63,"tag":153,"props":154,"children":155},"li",{},[156,161],{"type":63,"tag":76,"props":157,"children":158},{},[159],{"type":68,"value":160},"Firecrawl Search",{"type":68,"value":162}," - web results scraped into full-page markdown, not snippets.",{"type":63,"tag":153,"props":164,"children":165},{},[166,171],{"type":63,"tag":76,"props":167,"children":168},{},[169],{"type":68,"value":170},"Hacker News",{"type":68,"value":172}," (public Algolia API) - points + comment counts.",{"type":63,"tag":153,"props":174,"children":175},{},[176,181],{"type":63,"tag":76,"props":177,"children":178},{},[179],{"type":68,"value":180},"Lobste.rs",{"type":68,"value":182}," (public JSON feeds) - points + comment counts.",{"type":63,"tag":153,"props":184,"children":185},{},[186,191],{"type":63,"tag":76,"props":187,"children":188},{},[189],{"type":68,"value":190},"Bluesky",{"type":68,"value":192}," (public AT Protocol API) - likes + reposts + replies.",{"type":63,"tag":153,"props":194,"children":195},{},[196,201],{"type":63,"tag":76,"props":197,"children":198},{},[199],{"type":68,"value":200},"GitHub",{"type":68,"value":202}," (official API) - stars + recent push activity.",{"type":63,"tag":70,"props":204,"children":205},{},[206],{"type":68,"value":207},"Engagement numbers come only from APIs that publish them openly. The skill never\ntouches Reddit, X, TikTok, Instagram, or anything behind a login or cookie.",{"type":63,"tag":137,"props":209,"children":211},{"id":210},"run-the-engine",[212],{"type":68,"value":213},"Run the engine",{"type":63,"tag":70,"props":215,"children":216},{},[217,219,225,227,233,235,241],{"type":68,"value":218},"This works in any agent harness that supports skills. You already know the\nabsolute path of this ",{"type":63,"tag":106,"props":220,"children":222},{"className":221},[],[223],{"type":68,"value":224},"SKILL.md",{"type":68,"value":226}," because you just read it; call ",{"type":63,"tag":106,"props":228,"children":230},{"className":229},[],[231],{"type":68,"value":232},"scripts\u002Frun.sh",{"type":68,"value":234},"\nnext to it. It self-locates, installs deps on first run,\nand takes the topic plus an optional ",{"type":63,"tag":106,"props":236,"children":238},{"className":237},[],[239],{"type":68,"value":240},"--days N",{"type":68,"value":242}," window (any number - 7, 30, 365;\ndefault 30):",{"type":63,"tag":244,"props":245,"children":250},"pre",{"className":246,"code":247,"language":248,"meta":249,"style":249},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"\u003CTOPIC>\" --days 30\n","bash","",[251],{"type":63,"tag":106,"props":252,"children":253},{"__ignoreMap":249},[254],{"type":63,"tag":255,"props":256,"children":259},"span",{"class":257,"line":258},"line",1,[260,265,271,277,283,288,293,298,303,308,313],{"type":63,"tag":255,"props":261,"children":263},{"style":262},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[264],{"type":68,"value":248},{"type":63,"tag":255,"props":266,"children":268},{"style":267},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[269],{"type":68,"value":270}," \u003C",{"type":63,"tag":255,"props":272,"children":274},{"style":273},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[275],{"type":68,"value":276},"SKILL_DI",{"type":63,"tag":255,"props":278,"children":280},{"style":279},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[281],{"type":68,"value":282},"R",{"type":63,"tag":255,"props":284,"children":285},{"style":267},[286],{"type":68,"value":287},">",{"type":63,"tag":255,"props":289,"children":290},{"style":273},[291],{"type":68,"value":292},"\u002Fscripts\u002Frun.sh",{"type":63,"tag":255,"props":294,"children":295},{"style":267},[296],{"type":68,"value":297}," \"",{"type":63,"tag":255,"props":299,"children":300},{"style":273},[301],{"type":68,"value":302},"\u003CTOPIC>",{"type":63,"tag":255,"props":304,"children":305},{"style":267},[306],{"type":68,"value":307},"\"",{"type":63,"tag":255,"props":309,"children":310},{"style":273},[311],{"type":68,"value":312}," --days",{"type":63,"tag":255,"props":314,"children":316},{"style":315},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[317],{"type":68,"value":318}," 30\n",{"type":63,"tag":70,"props":320,"children":321},{},[322,324,330,332,338,340,345,347,352],{"type":68,"value":323},"Replace ",{"type":63,"tag":106,"props":325,"children":327},{"className":326},[],[328],{"type":68,"value":329},"\u003CSKILL_DIR>",{"type":68,"value":331}," with the directory this file is in. Do not rely on\n",{"type":63,"tag":106,"props":333,"children":335},{"className":334},[],[336],{"type":68,"value":337},"$CLAUDE_PLUGIN_ROOT",{"type":68,"value":339}," or the current working directory - the launcher handles\nboth. The only requirement is the ",{"type":63,"tag":106,"props":341,"children":343},{"className":342},[],[344],{"type":68,"value":48},{"type":68,"value":346}," binary; no API key is needed (set\n",{"type":63,"tag":106,"props":348,"children":350},{"className":349},[],[351],{"type":68,"value":45},{"type":68,"value":353}," only if you want higher Firecrawl limits).",{"type":63,"tag":70,"props":355,"children":356},{},[357],{"type":68,"value":358},"Progress prints to stderr; the numbered research context prints to stdout. Read\nthe stdout - that is your evidence.",{"type":63,"tag":137,"props":360,"children":362},{"id":361},"resolve-ambiguous-topics-first-recommended",[363],{"type":68,"value":364},"Resolve ambiguous topics first (recommended)",{"type":63,"tag":70,"props":366,"children":367},{},[368],{"type":68,"value":369},"If the topic could point at more than one thing - a person's name, a product\nthat shares a name with something common (\"Apple\", \"Cursor\"), a bare handle -\nrun a cheap resolution pass before the main gather:",{"type":63,"tag":244,"props":371,"children":373},{"className":246,"code":372,"language":248,"meta":249,"style":249},"bash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh --resolve \"\u003CTOPIC>\"\n",[374],{"type":63,"tag":106,"props":375,"children":376},{"__ignoreMap":249},[377],{"type":63,"tag":255,"props":378,"children":379},{"class":257,"line":258},[380,384,388,392,396,400,404,409,413,417],{"type":63,"tag":255,"props":381,"children":382},{"style":262},[383],{"type":68,"value":248},{"type":63,"tag":255,"props":385,"children":386},{"style":267},[387],{"type":68,"value":270},{"type":63,"tag":255,"props":389,"children":390},{"style":273},[391],{"type":68,"value":276},{"type":63,"tag":255,"props":393,"children":394},{"style":279},[395],{"type":68,"value":282},{"type":63,"tag":255,"props":397,"children":398},{"style":267},[399],{"type":68,"value":287},{"type":63,"tag":255,"props":401,"children":402},{"style":273},[403],{"type":68,"value":292},{"type":63,"tag":255,"props":405,"children":406},{"style":273},[407],{"type":68,"value":408}," --resolve",{"type":63,"tag":255,"props":410,"children":411},{"style":267},[412],{"type":68,"value":297},{"type":63,"tag":255,"props":414,"children":415},{"style":273},[416],{"type":68,"value":302},{"type":63,"tag":255,"props":418,"children":419},{"style":267},[420],{"type":68,"value":421},"\"\n",{"type":63,"tag":70,"props":423,"children":424},{},[425],{"type":68,"value":426},"It prints candidate identities (web titles + descriptions, GitHub repo and user\ncandidates) without scraping any pages. Read them and decide:",{"type":63,"tag":149,"props":428,"children":429},{},[430,456],{"type":63,"tag":153,"props":431,"children":432},{},[433,438,440,446,448,454],{"type":63,"tag":76,"props":434,"children":435},{},[436],{"type":68,"value":437},"2-4 refined subqueries",{"type":68,"value":439}," that pin down the intended entity (e.g. for\n\"Cursor\" the AI editor: ",{"type":63,"tag":106,"props":441,"children":443},{"className":442},[],[444],{"type":68,"value":445},"\"Cursor AI editor\"",{"type":68,"value":447},", ",{"type":63,"tag":106,"props":449,"children":451},{"className":450},[],[452],{"type":68,"value":453},"\"Cursor IDE agent\"",{"type":68,"value":455},").\nEach subquery multiplies the Firecrawl search\u002Fscrape work, so runtime scales\nwith query count - use the fewest that pin down the entity, usually 2.",{"type":63,"tag":153,"props":457,"children":458},{},[459,461,466,468,473,475,480],{"type":68,"value":460},"If the topic is a ",{"type":63,"tag":76,"props":462,"children":463},{},[464],{"type":68,"value":465},"person or project",{"type":68,"value":467},", the matching ",{"type":63,"tag":76,"props":469,"children":470},{},[471],{"type":68,"value":472},"GitHub login",{"type":68,"value":474}," and\u002For\n",{"type":63,"tag":76,"props":476,"children":477},{},[478],{"type":68,"value":479},"owner\u002Fname repo",{"type":68,"value":481},".",{"type":63,"tag":70,"props":483,"children":484},{},[485,487,493],{"type":68,"value":486},"Then run the main gather with those, passing ",{"type":63,"tag":106,"props":488,"children":490},{"className":489},[],[491],{"type":68,"value":492},"--query",{"type":68,"value":494}," once per subquery:",{"type":63,"tag":244,"props":496,"children":498},{"className":246,"code":497,"language":248,"meta":249,"style":249},"bash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"\u003CTOPIC>\" --days 30 \\\n  --query \"\u003Csubquery 1>\" --query \"\u003Csubquery 2>\" \\\n  --github-user \u003Clogin> --github-repo \u003Cowner\u002Fname>\n",[499],{"type":63,"tag":106,"props":500,"children":501},{"__ignoreMap":249},[502,555,599],{"type":63,"tag":255,"props":503,"children":504},{"class":257,"line":258},[505,509,513,517,521,525,529,533,537,541,545,550],{"type":63,"tag":255,"props":506,"children":507},{"style":262},[508],{"type":68,"value":248},{"type":63,"tag":255,"props":510,"children":511},{"style":267},[512],{"type":68,"value":270},{"type":63,"tag":255,"props":514,"children":515},{"style":273},[516],{"type":68,"value":276},{"type":63,"tag":255,"props":518,"children":519},{"style":279},[520],{"type":68,"value":282},{"type":63,"tag":255,"props":522,"children":523},{"style":267},[524],{"type":68,"value":287},{"type":63,"tag":255,"props":526,"children":527},{"style":273},[528],{"type":68,"value":292},{"type":63,"tag":255,"props":530,"children":531},{"style":267},[532],{"type":68,"value":297},{"type":63,"tag":255,"props":534,"children":535},{"style":273},[536],{"type":68,"value":302},{"type":63,"tag":255,"props":538,"children":539},{"style":267},[540],{"type":68,"value":307},{"type":63,"tag":255,"props":542,"children":543},{"style":273},[544],{"type":68,"value":312},{"type":63,"tag":255,"props":546,"children":547},{"style":315},[548],{"type":68,"value":549}," 30",{"type":63,"tag":255,"props":551,"children":552},{"style":279},[553],{"type":68,"value":554}," \\\n",{"type":63,"tag":255,"props":556,"children":558},{"class":257,"line":557},2,[559,564,568,573,577,582,586,591,595],{"type":63,"tag":255,"props":560,"children":561},{"style":273},[562],{"type":68,"value":563},"  --query",{"type":63,"tag":255,"props":565,"children":566},{"style":267},[567],{"type":68,"value":297},{"type":63,"tag":255,"props":569,"children":570},{"style":273},[571],{"type":68,"value":572},"\u003Csubquery 1>",{"type":63,"tag":255,"props":574,"children":575},{"style":267},[576],{"type":68,"value":307},{"type":63,"tag":255,"props":578,"children":579},{"style":273},[580],{"type":68,"value":581}," --query",{"type":63,"tag":255,"props":583,"children":584},{"style":267},[585],{"type":68,"value":297},{"type":63,"tag":255,"props":587,"children":588},{"style":273},[589],{"type":68,"value":590},"\u003Csubquery 2>",{"type":63,"tag":255,"props":592,"children":593},{"style":267},[594],{"type":68,"value":307},{"type":63,"tag":255,"props":596,"children":597},{"style":279},[598],{"type":68,"value":554},{"type":63,"tag":255,"props":600,"children":602},{"class":257,"line":601},3,[603,608,612,617,622,626,631,635,640,645],{"type":63,"tag":255,"props":604,"children":605},{"style":273},[606],{"type":68,"value":607},"  --github-user",{"type":63,"tag":255,"props":609,"children":610},{"style":267},[611],{"type":68,"value":270},{"type":63,"tag":255,"props":613,"children":614},{"style":273},[615],{"type":68,"value":616},"logi",{"type":63,"tag":255,"props":618,"children":619},{"style":279},[620],{"type":68,"value":621},"n",{"type":63,"tag":255,"props":623,"children":624},{"style":267},[625],{"type":68,"value":287},{"type":63,"tag":255,"props":627,"children":628},{"style":273},[629],{"type":68,"value":630}," --github-repo",{"type":63,"tag":255,"props":632,"children":633},{"style":267},[634],{"type":68,"value":270},{"type":63,"tag":255,"props":636,"children":637},{"style":273},[638],{"type":68,"value":639},"owner\u002Fnam",{"type":63,"tag":255,"props":641,"children":642},{"style":279},[643],{"type":68,"value":644},"e",{"type":63,"tag":255,"props":646,"children":647},{"style":267},[648],{"type":68,"value":649},">\n",{"type":63,"tag":70,"props":651,"children":652},{},[653],{"type":68,"value":654},"The engine searches the web, Hacker News, Lobste.rs, and Bluesky with each\nsubquery (up to 4, deduplicating overlapping results), and scopes GitHub to the\ngiven login\u002Frepo. All flags are optional - a clear, specific topic can skip\nresolution entirely and run one-shot as before. The resolution pass never\ndecides anything itself; you do.",{"type":63,"tag":137,"props":656,"children":658},{"id":657},"comparison-topics-x-vs-y",[659],{"type":68,"value":660},"Comparison topics (\"X vs Y\")",{"type":63,"tag":70,"props":662,"children":663},{},[664],{"type":68,"value":665},"When the topic pits two or three things against each other (\"cursor vs zed\",\n\"bun versus deno\"), the engine runs a full gather per side in one pass and\ngroups the research context per side, with continuous citation numbering.",{"type":63,"tag":70,"props":667,"children":668},{},[669,671,677],{"type":68,"value":670},"A topic containing \"vs\"\u002F\"versus\" in any capitalization auto-splits, so the simple form just works.\nThe one carve-out is all-caps \"VS\", so topics like \"best VS Code extensions\" stay a single side; use ",{"type":63,"tag":106,"props":672,"children":674},{"className":673},[],[675],{"type":68,"value":676},"--compare",{"type":68,"value":678}," to compare things whose names contain \"VS\":",{"type":63,"tag":244,"props":680,"children":682},{"className":246,"code":681,"language":248,"meta":249,"style":249},"bash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"cursor vs zed\" --days 30\n",[683],{"type":63,"tag":106,"props":684,"children":685},{"__ignoreMap":249},[686],{"type":63,"tag":255,"props":687,"children":688},{"class":257,"line":258},[689,693,697,701,705,709,713,717,722,726,730],{"type":63,"tag":255,"props":690,"children":691},{"style":262},[692],{"type":68,"value":248},{"type":63,"tag":255,"props":694,"children":695},{"style":267},[696],{"type":68,"value":270},{"type":63,"tag":255,"props":698,"children":699},{"style":273},[700],{"type":68,"value":276},{"type":63,"tag":255,"props":702,"children":703},{"style":279},[704],{"type":68,"value":282},{"type":63,"tag":255,"props":706,"children":707},{"style":267},[708],{"type":68,"value":287},{"type":63,"tag":255,"props":710,"children":711},{"style":273},[712],{"type":68,"value":292},{"type":63,"tag":255,"props":714,"children":715},{"style":267},[716],{"type":68,"value":297},{"type":63,"tag":255,"props":718,"children":719},{"style":273},[720],{"type":68,"value":721},"cursor vs zed",{"type":63,"tag":255,"props":723,"children":724},{"style":267},[725],{"type":68,"value":307},{"type":63,"tag":255,"props":727,"children":728},{"style":273},[729],{"type":68,"value":312},{"type":63,"tag":255,"props":731,"children":732},{"style":315},[733],{"type":68,"value":318},{"type":63,"tag":70,"props":735,"children":736},{},[737,739,745,747,752,754,760],{"type":68,"value":738},"The web-scrape budget (",{"type":63,"tag":106,"props":740,"children":742},{"className":741},[],[743],{"type":68,"value":744},"--limit",{"type":68,"value":746},") is shared across sides, so each side of a\ncomparison scrapes fewer pages than a dedicated run would; pass a higher\n",{"type":63,"tag":106,"props":748,"children":750},{"className":749},[],[751],{"type":68,"value":744},{"type":68,"value":753}," (e.g. ",{"type":63,"tag":106,"props":755,"children":757},{"className":756},[],[758],{"type":68,"value":759},"--limit 10",{"type":68,"value":761}," for two sides) when you want full per-side depth.",{"type":63,"tag":70,"props":763,"children":764},{},[765,767,772,774,779,781,787,789,795,797,802,804,810],{"type":68,"value":766},"For sharper sides, pass ",{"type":63,"tag":106,"props":768,"children":770},{"className":769},[],[771],{"type":68,"value":676},{"type":68,"value":773}," once per side; any ",{"type":63,"tag":106,"props":775,"children":777},{"className":776},[],[778],{"type":68,"value":492},{"type":68,"value":780},",\n",{"type":63,"tag":106,"props":782,"children":784},{"className":783},[],[785],{"type":68,"value":786},"--github-user",{"type":68,"value":788},", or ",{"type":63,"tag":106,"props":790,"children":792},{"className":791},[],[793],{"type":68,"value":794},"--github-repo",{"type":68,"value":796}," flags that follow a ",{"type":63,"tag":106,"props":798,"children":800},{"className":799},[],[801],{"type":68,"value":676},{"type":68,"value":803}," scope to\nthat side (run ",{"type":63,"tag":106,"props":805,"children":807},{"className":806},[],[808],{"type":68,"value":809},"--resolve",{"type":68,"value":811}," per side first if a name is ambiguous):",{"type":63,"tag":244,"props":813,"children":815},{"className":246,"code":814,"language":248,"meta":249,"style":249},"bash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"cursor vs zed\" \\\n  --compare \"Cursor\" --query \"Cursor AI editor\" --github-repo getcursor\u002Fcursor \\\n  --compare \"Zed\" --query \"Zed editor\" --github-repo zed-industries\u002Fzed\n",[816],{"type":63,"tag":106,"props":817,"children":818},{"__ignoreMap":249},[819,862,913],{"type":63,"tag":255,"props":820,"children":821},{"class":257,"line":258},[822,826,830,834,838,842,846,850,854,858],{"type":63,"tag":255,"props":823,"children":824},{"style":262},[825],{"type":68,"value":248},{"type":63,"tag":255,"props":827,"children":828},{"style":267},[829],{"type":68,"value":270},{"type":63,"tag":255,"props":831,"children":832},{"style":273},[833],{"type":68,"value":276},{"type":63,"tag":255,"props":835,"children":836},{"style":279},[837],{"type":68,"value":282},{"type":63,"tag":255,"props":839,"children":840},{"style":267},[841],{"type":68,"value":287},{"type":63,"tag":255,"props":843,"children":844},{"style":273},[845],{"type":68,"value":292},{"type":63,"tag":255,"props":847,"children":848},{"style":267},[849],{"type":68,"value":297},{"type":63,"tag":255,"props":851,"children":852},{"style":273},[853],{"type":68,"value":721},{"type":63,"tag":255,"props":855,"children":856},{"style":267},[857],{"type":68,"value":307},{"type":63,"tag":255,"props":859,"children":860},{"style":279},[861],{"type":68,"value":554},{"type":63,"tag":255,"props":863,"children":864},{"class":257,"line":557},[865,870,874,879,883,887,891,896,900,904,909],{"type":63,"tag":255,"props":866,"children":867},{"style":273},[868],{"type":68,"value":869},"  --compare",{"type":63,"tag":255,"props":871,"children":872},{"style":267},[873],{"type":68,"value":297},{"type":63,"tag":255,"props":875,"children":876},{"style":273},[877],{"type":68,"value":878},"Cursor",{"type":63,"tag":255,"props":880,"children":881},{"style":267},[882],{"type":68,"value":307},{"type":63,"tag":255,"props":884,"children":885},{"style":273},[886],{"type":68,"value":581},{"type":63,"tag":255,"props":888,"children":889},{"style":267},[890],{"type":68,"value":297},{"type":63,"tag":255,"props":892,"children":893},{"style":273},[894],{"type":68,"value":895},"Cursor AI editor",{"type":63,"tag":255,"props":897,"children":898},{"style":267},[899],{"type":68,"value":307},{"type":63,"tag":255,"props":901,"children":902},{"style":273},[903],{"type":68,"value":630},{"type":63,"tag":255,"props":905,"children":906},{"style":273},[907],{"type":68,"value":908}," getcursor\u002Fcursor",{"type":63,"tag":255,"props":910,"children":911},{"style":279},[912],{"type":68,"value":554},{"type":63,"tag":255,"props":914,"children":915},{"class":257,"line":601},[916,920,924,929,933,937,941,946,950,954],{"type":63,"tag":255,"props":917,"children":918},{"style":273},[919],{"type":68,"value":869},{"type":63,"tag":255,"props":921,"children":922},{"style":267},[923],{"type":68,"value":297},{"type":63,"tag":255,"props":925,"children":926},{"style":273},[927],{"type":68,"value":928},"Zed",{"type":63,"tag":255,"props":930,"children":931},{"style":267},[932],{"type":68,"value":307},{"type":63,"tag":255,"props":934,"children":935},{"style":273},[936],{"type":68,"value":581},{"type":63,"tag":255,"props":938,"children":939},{"style":267},[940],{"type":68,"value":297},{"type":63,"tag":255,"props":942,"children":943},{"style":273},[944],{"type":68,"value":945},"Zed editor",{"type":63,"tag":255,"props":947,"children":948},{"style":267},[949],{"type":68,"value":307},{"type":63,"tag":255,"props":951,"children":952},{"style":273},[953],{"type":68,"value":630},{"type":63,"tag":255,"props":955,"children":956},{"style":273},[957],{"type":68,"value":958}," zed-industries\u002Fzed\n",{"type":63,"tag":70,"props":960,"children":961},{},[962],{"type":68,"value":963},"Synthesize a side-by-side brief from the grouped context: what moved for each side in the window, then a direct comparison (traction via the engagement numbers, notable shipping activity, best-for).\nCite both sides inline as usual; the numbering never collides because it is continuous across sides.",{"type":63,"tag":137,"props":965,"children":967},{"id":966},"save-reuse-the-context-optional",[968],{"type":68,"value":969},"Save & reuse the context (optional)",{"type":63,"tag":70,"props":971,"children":972},{},[973],{"type":68,"value":974},"By default, do not write any files - just synthesize the brief. Only save when\nthe user asks (e.g. \"save the context\", \"I'll want this again later\").",{"type":63,"tag":70,"props":976,"children":977},{},[978,980,986,988,993,995,1001,1002,1008],{"type":68,"value":979},"Saved contexts live under ",{"type":63,"tag":106,"props":981,"children":983},{"className":982},[],[984],{"type":68,"value":985},"~\u002F.last30flames\u002F",{"type":68,"value":987},", grouped into ",{"type":63,"tag":76,"props":989,"children":990},{},[991],{"type":68,"value":992},"thread folders",{"type":68,"value":994}," so a\nrun of related calls can be reloaded as one set. A thread is just a named\nsubdirectory; each call saves its own file, which keeps every call's ",{"type":63,"tag":106,"props":996,"children":998},{"className":997},[],[999],{"type":68,"value":1000},"[1]",{"type":68,"value":447},{"type":63,"tag":106,"props":1003,"children":1005},{"className":1004},[],[1006],{"type":68,"value":1007},"[2]",{"type":68,"value":1009},"\ncitation numbering intact (never concatenate two contexts into one file - the\nnumbering would collide):",{"type":63,"tag":244,"props":1011,"children":1015},{"className":1012,"code":1014,"language":68},[1013],"language-text","~\u002F.last30flames\u002F\u003Cthread>\u002F\n  \u003Cslug>-\u003CYYYY-MM-DD>.md      # one file per engine call\n",[1016],{"type":63,"tag":106,"props":1017,"children":1018},{"__ignoreMap":249},[1019],{"type":68,"value":1014},{"type":63,"tag":70,"props":1021,"children":1022},{},[1023,1028,1030,1035],{"type":63,"tag":76,"props":1024,"children":1025},{},[1026],{"type":68,"value":1027},"On save:",{"type":68,"value":1029}," redirect the engine's stdout so the ",{"type":63,"tag":114,"props":1031,"children":1032},{},[1033],{"type":68,"value":1034},"raw numbered research context",{"type":68,"value":1036}," is\npreserved (that is the reusable evidence - not the brief). Pick the thread folder\nfirst:",{"type":63,"tag":149,"props":1038,"children":1039},{},[1040,1052,1057],{"type":63,"tag":153,"props":1041,"children":1042},{},[1043,1045,1051],{"type":68,"value":1044},"If the user names a thread (\"save this to my ai-agents research\"), slugify it as\n",{"type":63,"tag":106,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":68,"value":1050},"\u003Cthread>",{"type":68,"value":481},{"type":63,"tag":153,"props":1053,"children":1054},{},[1055],{"type":68,"value":1056},"Otherwise reuse the thread from earlier saves in this same conversation, so\nrelated calls land together.",{"type":63,"tag":153,"props":1058,"children":1059},{},[1060,1062,1067],{"type":68,"value":1061},"If neither applies, derive ",{"type":63,"tag":106,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":68,"value":1050},{"type":68,"value":1068}," from the topic and tell the user the name\nyou chose so they can reference it later.",{"type":63,"tag":70,"props":1070,"children":1071},{},[1072,1074,1080],{"type":68,"value":1073},"Derive ",{"type":63,"tag":106,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":68,"value":1079},"\u003Cslug>",{"type":68,"value":1081}," by slugifying the topic (lowercase, spaces to hyphens, drop\npunctuation) so the filename tells you what the call was about. Then create the\nfolder and write the file, and report the exact path afterward:",{"type":63,"tag":244,"props":1083,"children":1085},{"className":246,"code":1084,"language":248,"meta":249,"style":249},"mkdir -p ~\u002F.last30flames\u002F\u003Cthread>\nbash \u003CSKILL_DIR>\u002Fscripts\u002Frun.sh \"\u003CTOPIC>\" --days 30 > ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>.md\n",[1086],{"type":63,"tag":106,"props":1087,"children":1088},{"__ignoreMap":249},[1089,1126],{"type":63,"tag":255,"props":1090,"children":1091},{"class":257,"line":258},[1092,1097,1102,1107,1112,1117,1122],{"type":63,"tag":255,"props":1093,"children":1094},{"style":262},[1095],{"type":68,"value":1096},"mkdir",{"type":63,"tag":255,"props":1098,"children":1099},{"style":273},[1100],{"type":68,"value":1101}," -p",{"type":63,"tag":255,"props":1103,"children":1104},{"style":273},[1105],{"type":68,"value":1106}," ~\u002F.last30flames\u002F",{"type":63,"tag":255,"props":1108,"children":1109},{"style":267},[1110],{"type":68,"value":1111},"\u003C",{"type":63,"tag":255,"props":1113,"children":1114},{"style":273},[1115],{"type":68,"value":1116},"threa",{"type":63,"tag":255,"props":1118,"children":1119},{"style":279},[1120],{"type":68,"value":1121},"d",{"type":63,"tag":255,"props":1123,"children":1124},{"style":267},[1125],{"type":68,"value":649},{"type":63,"tag":255,"props":1127,"children":1128},{"class":257,"line":557},[1129,1133,1137,1141,1145,1149,1153,1157,1161,1165,1169,1173,1178,1182,1186,1190,1194,1198,1203,1207,1212,1217,1221,1226,1230,1235,1240,1244],{"type":63,"tag":255,"props":1130,"children":1131},{"style":262},[1132],{"type":68,"value":248},{"type":63,"tag":255,"props":1134,"children":1135},{"style":267},[1136],{"type":68,"value":270},{"type":63,"tag":255,"props":1138,"children":1139},{"style":273},[1140],{"type":68,"value":276},{"type":63,"tag":255,"props":1142,"children":1143},{"style":279},[1144],{"type":68,"value":282},{"type":63,"tag":255,"props":1146,"children":1147},{"style":267},[1148],{"type":68,"value":287},{"type":63,"tag":255,"props":1150,"children":1151},{"style":273},[1152],{"type":68,"value":292},{"type":63,"tag":255,"props":1154,"children":1155},{"style":267},[1156],{"type":68,"value":297},{"type":63,"tag":255,"props":1158,"children":1159},{"style":273},[1160],{"type":68,"value":302},{"type":63,"tag":255,"props":1162,"children":1163},{"style":267},[1164],{"type":68,"value":307},{"type":63,"tag":255,"props":1166,"children":1167},{"style":273},[1168],{"type":68,"value":312},{"type":63,"tag":255,"props":1170,"children":1171},{"style":315},[1172],{"type":68,"value":549},{"type":63,"tag":255,"props":1174,"children":1175},{"style":267},[1176],{"type":68,"value":1177}," >",{"type":63,"tag":255,"props":1179,"children":1180},{"style":273},[1181],{"type":68,"value":1106},{"type":63,"tag":255,"props":1183,"children":1184},{"style":267},[1185],{"type":68,"value":1111},{"type":63,"tag":255,"props":1187,"children":1188},{"style":273},[1189],{"type":68,"value":1116},{"type":63,"tag":255,"props":1191,"children":1192},{"style":279},[1193],{"type":68,"value":1121},{"type":63,"tag":255,"props":1195,"children":1196},{"style":267},[1197],{"type":68,"value":287},{"type":63,"tag":255,"props":1199,"children":1200},{"style":273},[1201],{"type":68,"value":1202},"\u002F",{"type":63,"tag":255,"props":1204,"children":1205},{"style":267},[1206],{"type":68,"value":1111},{"type":63,"tag":255,"props":1208,"children":1209},{"style":273},[1210],{"type":68,"value":1211},"slu",{"type":63,"tag":255,"props":1213,"children":1214},{"style":279},[1215],{"type":68,"value":1216},"g",{"type":63,"tag":255,"props":1218,"children":1219},{"style":267},[1220],{"type":68,"value":287},{"type":63,"tag":255,"props":1222,"children":1223},{"style":273},[1224],{"type":68,"value":1225},"-",{"type":63,"tag":255,"props":1227,"children":1228},{"style":267},[1229],{"type":68,"value":1111},{"type":63,"tag":255,"props":1231,"children":1232},{"style":273},[1233],{"type":68,"value":1234},"YYYY-MM-D",{"type":63,"tag":255,"props":1236,"children":1237},{"style":279},[1238],{"type":68,"value":1239},"D",{"type":63,"tag":255,"props":1241,"children":1242},{"style":267},[1243],{"type":68,"value":287},{"type":63,"tag":255,"props":1245,"children":1246},{"style":273},[1247],{"type":68,"value":1248},".md\n",{"type":63,"tag":70,"props":1250,"children":1251},{},[1252,1254,1260],{"type":68,"value":1253},"Because the redirect sends the research context to the file instead of stdout,\nthe Bash output shows only stderr progress. If the user also wants the brief this\nsession, ",{"type":63,"tag":106,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":68,"value":1259},"Read",{"type":68,"value":1261}," the saved file first to get the context, then synthesize as usual.",{"type":63,"tag":70,"props":1263,"children":1264},{},[1265],{"type":68,"value":1266},"If the user explicitly names a different path, honor it instead.",{"type":63,"tag":70,"props":1268,"children":1269},{},[1270,1275,1277,1282,1284,1289,1294,1295,1301,1303,1309],{"type":63,"tag":76,"props":1271,"children":1272},{},[1273],{"type":68,"value":1274},"On reuse (a later session):",{"type":68,"value":1276}," the user need not recall exact names. If they\nreference saved research even loosely (\"load my ai-agents research\"), list the\nthread folders under ",{"type":63,"tag":106,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":68,"value":985},{"type":68,"value":1283}," and match on the thread name; then ",{"type":63,"tag":106,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":68,"value":1259},{"type":63,"tag":76,"props":1290,"children":1291},{},[1292],{"type":68,"value":1293},"every",{"type":68,"value":112},{"type":63,"tag":106,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":68,"value":1300},".md",{"type":68,"value":1302}," file in that folder and synthesize across all of them, keeping\ncitations namespaced by source file so numbers from different calls don't clash.\nTo reload a single call rather than the whole thread, match one file by its\n",{"type":63,"tag":106,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":68,"value":1308},"\u003Cslug>-\u003Cdate>",{"type":68,"value":1310}," name. If nothing matches, ask where they saved it.",{"type":63,"tag":70,"props":1312,"children":1313},{},[1314,1316,1322,1324,1330],{"type":68,"value":1315},"Because each filename is ",{"type":63,"tag":106,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":68,"value":1321},"\u003Cslug>-\u003CYYYY-MM-DD>.md",{"type":68,"value":1323},", both topic and save date are\nrecoverable from the name alone - no external memory needed. Before synthesizing,\ncheck each file's date against the ",{"type":63,"tag":106,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":68,"value":1329},"--days",{"type":68,"value":1331}," window: if today is more than that many\ndays past the saved date, the recency claim no longer holds - warn the user that\ncontext is stale and offer to re-run fresh.",{"type":63,"tag":70,"props":1333,"children":1334},{},[1335],{"type":68,"value":1336},"Reuse-shaped prompts to handle this way (do not re-run the engine):",{"type":63,"tag":244,"props":1338,"children":1341},{"className":1339,"code":1340,"language":68},[1013],"last30flames load my ai-agents research\nlast30flames using my saved ai-agents research, what did I find on local inference?\n",[1342],{"type":63,"tag":106,"props":1343,"children":1344},{"__ignoreMap":249},[1345],{"type":68,"value":1340},{"type":63,"tag":137,"props":1347,"children":1349},{"id":1348},"write-the-brief",[1350],{"type":68,"value":1351},"Write the brief",{"type":63,"tag":70,"props":1353,"children":1354},{},[1355],{"type":68,"value":1356},"From the numbered sources, write a few tight paragraphs that:",{"type":63,"tag":149,"props":1358,"children":1359},{},[1360,1370,1393,1403],{"type":63,"tag":153,"props":1361,"children":1362},{},[1363,1368],{"type":63,"tag":76,"props":1364,"children":1365},{},[1366],{"type":68,"value":1367},"Lead with what is genuinely new or moving",{"type":68,"value":1369}," in the window. Not background.",{"type":63,"tag":153,"props":1371,"children":1372},{},[1373,1378,1380,1385,1386,1392],{"type":63,"tag":76,"props":1374,"children":1375},{},[1376],{"type":68,"value":1377},"Ground every claim in the sources and cite inline",{"type":68,"value":1379}," like ",{"type":63,"tag":106,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":68,"value":1000},{"type":68,"value":447},{"type":63,"tag":106,"props":1387,"children":1389},{"className":1388},[],[1390],{"type":68,"value":1391},"[3]",{"type":68,"value":481},{"type":63,"tag":153,"props":1394,"children":1395},{},[1396,1401],{"type":63,"tag":76,"props":1397,"children":1398},{},[1399],{"type":68,"value":1400},"Use the engagement numbers",{"type":68,"value":1402}," (HN points\u002Fcomments, GitHub stars) as a signal\nof what people actually care about - weight high-engagement items.",{"type":63,"tag":153,"props":1404,"children":1405},{},[1406,1411],{"type":63,"tag":76,"props":1407,"children":1408},{},[1409],{"type":68,"value":1410},"Say plainly where evidence is thin",{"type":68,"value":1412}," rather than inventing detail. If HN or\nGitHub returned little, that honesty is part of the answer.",{"type":63,"tag":70,"props":1414,"children":1415},{},[1416,1418,1423],{"type":68,"value":1417},"After the brief, end with a compact ",{"type":63,"tag":76,"props":1419,"children":1420},{},[1421],{"type":68,"value":1422},"Sources",{"type":68,"value":1424}," list so every inline citation is\nclickable. One line per source you actually cited, keeping the same numbers used\ninline, as markdown links:",{"type":63,"tag":244,"props":1426,"children":1429},{"className":1427,"code":1428,"language":68},[1013],"Sources:\n[1] [Title of the page](https:\u002F\u002Fexample.com\u002Farticle) - example.com\n[3] [Show HN: Something](https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=123) - news.ycombinator.com\n",[1430],{"type":63,"tag":106,"props":1431,"children":1432},{"__ignoreMap":249},[1433],{"type":68,"value":1428},{"type":63,"tag":70,"props":1435,"children":1436},{},[1437],{"type":68,"value":1438},"List only cited sources - this is a reference list for the reader, not a dump of\nthe research context. Never paste the raw research context back.",{"type":63,"tag":137,"props":1440,"children":1442},{"id":1441},"shareable-html-brief-optional",[1443],{"type":68,"value":1444},"Shareable HTML brief (optional)",{"type":63,"tag":70,"props":1446,"children":1447},{},[1448],{"type":68,"value":1449},"When the user asks for a shareable version of the brief (\"make this shareable\", \"give me an HTML file\", \"something I can drop in Slack\u002Femail\u002FNotion\"), emit the synthesis as a self-contained dark-mode HTML file alongside the normal chat response.\nThe file has inline CSS, no JavaScript, and no external assets, so it works offline and renders the same everywhere.",{"type":63,"tag":70,"props":1451,"children":1452},{},[1453,1455,1461,1463,1468,1470,1475],{"type":68,"value":1454},"First write the brief you synthesized - including its ",{"type":63,"tag":106,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":68,"value":1460},"Sources:",{"type":68,"value":1462}," list with the same numbering - as markdown into the thread folder, picking ",{"type":63,"tag":106,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":68,"value":1050},{"type":68,"value":1469}," and ",{"type":63,"tag":106,"props":1471,"children":1473},{"className":1472},[],[1474],{"type":68,"value":1079},{"type":68,"value":1476}," exactly as in the save flow above:",{"type":63,"tag":244,"props":1478,"children":1480},{"className":246,"code":1479,"language":248,"meta":249,"style":249},"mkdir -p ~\u002F.last30flames\u002F\u003Cthread>\n# Write the brief markdown to ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>-brief.md\nbun \u003CSKILL_DIR>\u002Fscripts\u002Fhtmlify.ts ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>-brief.md\n",[1481],{"type":63,"tag":106,"props":1482,"children":1483},{"__ignoreMap":249},[1484,1515,1524],{"type":63,"tag":255,"props":1485,"children":1486},{"class":257,"line":258},[1487,1491,1495,1499,1503,1507,1511],{"type":63,"tag":255,"props":1488,"children":1489},{"style":262},[1490],{"type":68,"value":1096},{"type":63,"tag":255,"props":1492,"children":1493},{"style":273},[1494],{"type":68,"value":1101},{"type":63,"tag":255,"props":1496,"children":1497},{"style":273},[1498],{"type":68,"value":1106},{"type":63,"tag":255,"props":1500,"children":1501},{"style":267},[1502],{"type":68,"value":1111},{"type":63,"tag":255,"props":1504,"children":1505},{"style":273},[1506],{"type":68,"value":1116},{"type":63,"tag":255,"props":1508,"children":1509},{"style":279},[1510],{"type":68,"value":1121},{"type":63,"tag":255,"props":1512,"children":1513},{"style":267},[1514],{"type":68,"value":649},{"type":63,"tag":255,"props":1516,"children":1517},{"class":257,"line":557},[1518],{"type":63,"tag":255,"props":1519,"children":1521},{"style":1520},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1522],{"type":68,"value":1523},"# Write the brief markdown to ~\u002F.last30flames\u002F\u003Cthread>\u002F\u003Cslug>-\u003CYYYY-MM-DD>-brief.md\n",{"type":63,"tag":255,"props":1525,"children":1526},{"class":257,"line":601},[1527,1531,1535,1539,1543,1547,1552,1556,1560,1564,1568,1572,1576,1580,1584,1588,1592,1596,1600,1604,1608,1612],{"type":63,"tag":255,"props":1528,"children":1529},{"style":262},[1530],{"type":68,"value":48},{"type":63,"tag":255,"props":1532,"children":1533},{"style":267},[1534],{"type":68,"value":270},{"type":63,"tag":255,"props":1536,"children":1537},{"style":273},[1538],{"type":68,"value":276},{"type":63,"tag":255,"props":1540,"children":1541},{"style":279},[1542],{"type":68,"value":282},{"type":63,"tag":255,"props":1544,"children":1545},{"style":267},[1546],{"type":68,"value":287},{"type":63,"tag":255,"props":1548,"children":1549},{"style":273},[1550],{"type":68,"value":1551},"\u002Fscripts\u002Fhtmlify.ts",{"type":63,"tag":255,"props":1553,"children":1554},{"style":273},[1555],{"type":68,"value":1106},{"type":63,"tag":255,"props":1557,"children":1558},{"style":267},[1559],{"type":68,"value":1111},{"type":63,"tag":255,"props":1561,"children":1562},{"style":273},[1563],{"type":68,"value":1116},{"type":63,"tag":255,"props":1565,"children":1566},{"style":279},[1567],{"type":68,"value":1121},{"type":63,"tag":255,"props":1569,"children":1570},{"style":267},[1571],{"type":68,"value":287},{"type":63,"tag":255,"props":1573,"children":1574},{"style":273},[1575],{"type":68,"value":1202},{"type":63,"tag":255,"props":1577,"children":1578},{"style":267},[1579],{"type":68,"value":1111},{"type":63,"tag":255,"props":1581,"children":1582},{"style":273},[1583],{"type":68,"value":1211},{"type":63,"tag":255,"props":1585,"children":1586},{"style":279},[1587],{"type":68,"value":1216},{"type":63,"tag":255,"props":1589,"children":1590},{"style":267},[1591],{"type":68,"value":287},{"type":63,"tag":255,"props":1593,"children":1594},{"style":273},[1595],{"type":68,"value":1225},{"type":63,"tag":255,"props":1597,"children":1598},{"style":267},[1599],{"type":68,"value":1111},{"type":63,"tag":255,"props":1601,"children":1602},{"style":273},[1603],{"type":68,"value":1234},{"type":63,"tag":255,"props":1605,"children":1606},{"style":279},[1607],{"type":68,"value":1239},{"type":63,"tag":255,"props":1609,"children":1610},{"style":267},[1611],{"type":68,"value":287},{"type":63,"tag":255,"props":1613,"children":1614},{"style":273},[1615],{"type":68,"value":1616},"-brief.md\n",{"type":63,"tag":70,"props":1618,"children":1619},{},[1620,1622,1628,1630,1636,1638,1644],{"type":68,"value":1621},"The converter turns headings, paragraphs, lists, links, and inline ",{"type":63,"tag":106,"props":1623,"children":1625},{"className":1624},[],[1626],{"type":68,"value":1627},"[N]",{"type":68,"value":1629}," citations into HTML - each citation becomes a clickable jump to its entry in the Sources list - writes ",{"type":63,"tag":106,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":68,"value":1635},"\u003Cslug>-\u003CYYYY-MM-DD>-brief.html",{"type":68,"value":1637}," next to the markdown, and prints the output path.\nReport that path to the user.\nIf the user names a different output location, pass it with ",{"type":63,"tag":106,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":68,"value":1643},"-o \u003Cpath>",{"type":68,"value":481},{"type":63,"tag":70,"props":1646,"children":1647},{},[1648],{"type":68,"value":1649},"This converts your synthesized brief, not the raw research context - never htmlify the engine's stdout.",{"type":63,"tag":1651,"props":1652,"children":1653},"style",{},[1654],{"type":68,"value":1655},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1657,"total":258},[1658],{"slug":4,"name":4,"fn":5,"description":6,"org":1659,"tags":1660,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1661,1662,1663,1664],{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},{"items":1666,"total":1825},[1667,1681,1693,1706,1721,1734,1746,1761,1773,1790,1803,1815],{"slug":1668,"name":1668,"fn":1669,"description":1670,"org":1671,"tags":1672,"stars":1678,"repoUrl":1679,"updatedAt":1680},"competitor-analysis","analyze competitors across features and pricing","Compare two or more companies, products, or platforms across pricing, features, positioning, and docs. Use this skill whenever the user says \"compare X vs Y\", \"how does X stack up against Y\", \"alternatives to X\", \"competitive landscape of …\", \"X vs Y vs Z\", or asks for a competitor matrix. Uses search to discover competitors when the user only names a category, then scrape for each competitor's homepage, pricing page, and features\u002Fdocs. Returns a normalized comparison matrix as JSON.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1673,1676,1677],{"name":1674,"slug":1675,"type":15},"Competitive Intelligence","competitive-intelligence",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},1130,"https:\u002F\u002Fgithub.com\u002Ffirecrawl\u002Fweb-agent","2026-04-17T05:00:44.623049",{"slug":1682,"name":1682,"fn":1683,"description":1684,"org":1685,"tags":1686,"stars":1678,"repoUrl":1679,"updatedAt":1692},"deep-research","conduct multi-source deep research","Multi-source research with source triangulation and fact-checking. Use for any research task requiring 3+ sources.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1687,1688,1691],{"name":9,"slug":8,"type":15},{"name":1689,"slug":1690,"type":15},"Knowledge Management","knowledge-management",{"name":13,"slug":14,"type":15},"2026-04-17T05:00:45.852512",{"slug":1694,"name":1694,"fn":1695,"description":1696,"org":1697,"tags":1698,"stars":1678,"repoUrl":1679,"updatedAt":1705},"e-commerce","extract product data from e-commerce sites","Navigate e-commerce sites to extract products, pricing, categories, and inventory. Handles pagination, variants, and JS-heavy storefronts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1699,1701,1702],{"name":1700,"slug":1694,"type":15},"E-commerce",{"name":9,"slug":8,"type":15},{"name":1703,"slug":1704,"type":15},"Web Scraping","web-scraping","2026-05-15T06:15:30.880268",{"slug":1707,"name":1707,"fn":1708,"description":1709,"org":1710,"tags":1711,"stars":1678,"repoUrl":1679,"updatedAt":1720},"financial-research","pull financial data for public companies","Pull company financials, SEC filings, and analyst consensus for a public company. Use this skill whenever the user says \"10-K\", \"10-Q\", \"earnings\", \"revenue of\", \"financials for\", \"analyst rating for\", \"price target for\", or provides a stock ticker. Combines SEC EDGAR for official filings with Yahoo Finance \u002F TipRanks for analyst data. Search + scrape only; no interact needed.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1712,1715,1716,1717],{"name":1713,"slug":1714,"type":15},"Finance","finance",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1718,"slug":1719,"type":15},"SEC Filings","sec-filings","2026-05-15T06:15:33.293957",{"slug":1722,"name":1722,"fn":1723,"description":1724,"org":1725,"tags":1726,"stars":1678,"repoUrl":1679,"updatedAt":1733},"pricing-tracker","track and compare vendor pricing tiers","Extract and normalize pricing tiers from any SaaS, API, cloud, or LLM vendor's pricing page. Use this skill whenever the user says \"pricing for X\", \"how much does X cost\", \"pricing tiers\", \"cost comparison\", provides a URL ending in `\u002Fpricing` or `\u002Fplans`, or asks to monitor pricing over time. Pairs well with `exportSkill` to turn a run into a cron-friendly workflow. Scrape-driven; no interact needed for typical pricing pages.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1727,1728,1729,1730],{"name":1674,"slug":1675,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"name":1731,"slug":1732,"type":15},"SaaS","saas","2026-04-17T05:00:43.349332",{"slug":1735,"name":1735,"fn":1736,"description":1737,"org":1738,"tags":1739,"stars":1678,"repoUrl":1679,"updatedAt":1745},"structured-extraction","extract structured data from websites","Extract structured data matching a JSON schema from websites. Handles complex nested schemas, arrays, pagination, and validation. Always outputs via formatOutput.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1740,1743,1744],{"name":1741,"slug":1742,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":1703,"slug":1704,"type":15},"2026-05-15T06:15:32.092034",{"slug":1747,"name":1747,"fn":1748,"description":1749,"org":1750,"tags":1751,"stars":1758,"repoUrl":1759,"updatedAt":1760},"firecrawl-company-directories","extract company directories with Firecrawl","Extract structured company lists from directories with Firecrawl. Use for scraping YC, Crunchbase, Product Hunt, G2, startup directories, category directories, or custom company databases into JSON, CSV, CRM-ready lists, or research tables.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1752,1755,1756,1757],{"name":1753,"slug":1754,"type":15},"Automation","automation",{"name":1741,"slug":1742,"type":15},{"name":9,"slug":8,"type":15},{"name":1703,"slug":1704,"type":15},99,"https:\u002F\u002Fgithub.com\u002Ffirecrawl\u002Ffirecrawl-workflows","2026-06-30T07:02:21.468",{"slug":1762,"name":1762,"fn":1763,"description":1764,"org":1765,"tags":1766,"stars":1758,"repoUrl":1759,"updatedAt":1760},"firecrawl-competitive-intel","monitor competitor product changes with Firecrawl","Monitor competitor pricing, features, changelogs, dashboards, and product changes with Firecrawl. Use for recurring competitive intelligence, pricing tier extraction, feature change tracking, or structured competitor alerts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1767,1768,1769,1772],{"name":1674,"slug":1675,"type":15},{"name":9,"slug":8,"type":15},{"name":1770,"slug":1771,"type":15},"Marketing","marketing",{"name":1703,"slug":1704,"type":15},{"slug":1774,"name":1774,"fn":1775,"description":1776,"org":1777,"tags":1778,"stars":1758,"repoUrl":1759,"updatedAt":1760},"firecrawl-dashboard-reporting","pull metrics from analytics dashboards","Pull metrics from analytics dashboards and internal web tools with Firecrawl browser. Use when the user needs dashboard reporting, cross-platform metric summaries, authenticated analytics extraction, date-range reports, or structured metrics from web dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1779,1782,1785,1786,1789],{"name":1780,"slug":1781,"type":15},"Analytics","analytics",{"name":1783,"slug":1784,"type":15},"Dashboards","dashboards",{"name":9,"slug":8,"type":15},{"name":1787,"slug":1788,"type":15},"Reporting","reporting",{"name":1703,"slug":1704,"type":15},{"slug":1791,"name":1791,"fn":1792,"description":1793,"org":1794,"tags":1795,"stars":1758,"repoUrl":1759,"updatedAt":1760},"firecrawl-deep-research","conduct deep research with Firecrawl","Produce an intensive, cited analytical report: executive summary, multi-angle\nfindings, contrarian views, open questions, and full sources. Use only when the\nuser needs rigorous synthesis of a complex topic (scientific, technical, policy,\nor market-analytical) that cannot be answered with a short search, and wants\na formal written report, not a recommendation list.\n\nDo not use for product picks, top-N lists, quick lookups, or routine \"find out\nabout X\" tasks. If the request does not clearly need this kind of report, do\nnot use this skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1796,1797,1800,1801,1802],{"name":9,"slug":8,"type":15},{"name":1798,"slug":1799,"type":15},"Firecrawl Research","firecrawl-research",{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":1703,"slug":1704,"type":15},{"slug":1804,"name":1804,"fn":1805,"description":1806,"org":1807,"tags":1808,"stars":1758,"repoUrl":1759,"updatedAt":1760},"firecrawl-demo-walkthrough","generate product walkthroughs with Firecrawl","Walk through a product's key flows with Firecrawl browser and produce a structured UX\u002Fproduct walkthrough. Use for signup, onboarding, pricing, docs, dashboard, product demo prep, UX teardown, and first-run experience analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1809,1810,1811,1814],{"name":1753,"slug":1754,"type":15},{"name":9,"slug":8,"type":15},{"name":1812,"slug":1813,"type":15},"UX Design","ux-design",{"name":1703,"slug":1704,"type":15},{"slug":1816,"name":1816,"fn":1817,"description":1818,"org":1819,"tags":1820,"stars":1758,"repoUrl":1759,"updatedAt":1760},"firecrawl-knowledge-base","build knowledge bases from web content","Build a knowledge base from web content with Firecrawl. Use for local reference docs, RAG-ready chunks, fine-tuning datasets, documentation mirrors, topic corpora, or LLM-ready markdown organized from web sources.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1821,1822,1823,1824],{"name":1741,"slug":1742,"type":15},{"name":9,"slug":8,"type":15},{"name":1689,"slug":1690,"type":15},{"name":21,"slug":22,"type":15},36]