{"adoption": {"forks": 1993, "observed_at": "2026-08-28T04:11:28.955032+00:00", "stars": 19603}, "canonical_url": "https://ross.abutalabs.com/products/deep-research", "card": {"archived": false, "artifact_type": "application", "description": "An AI-powered research assistant that performs iterative, deep research on any topic by combining search engines, web scraping, and large language models.  The goal of this repo is to provide the simplest implementation of a deep research agent - e.g. an agent that can refine its research direction overtime and deep dive into a topic.", "domain": ["artificial-intelligence", "large-language-models", "developer-tools"], "enriched": true, "function": ["agent-framework", "web-scraping", "search-engine", "llm-inference", "rag", "prompt-engineering"], "health_score": 66, "homepage": null, "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["dzhng/deep-research"], "name": "dzhng/deep-research", "platform": ["cli"], "pushed_at": "2026-04-11T23:58:25+00:00", "repo": "dzhng/deep-research", "stars": 19603, "tags": ["deep-research", "research-agent", "firecrawl", "openai", "iterative-research", "minimal-codebase", "ai-agents", "search", "nodejs", "typescript"], "topics": ["agent", "ai", "gpt", "o3-mini", "research"], "urls": [], "use_cases": ["research any topic in depth with an AI agent", "generate a cited markdown research report from web sources", "automate iterative search query generation and refinement", "learn how to build a deep research agent", "deep dive into a topic with configurable breadth and depth"], "what_it_is": "An AI-powered deep research agent that iteratively generates search queries, scrapes web content, and refines its research direction using LLMs to produce comprehensive markdown reports. It is intentionally kept under 500 lines of code to serve as a simple, hackable reference implementation.", "when_to_avoid": ["you need a production-grade research platform with UI, persistence, and team features", "you cannot use paid APIs like Firecrawl or OpenAI", "you need guaranteed factual accuracy without source verification"], "when_to_choose": ["you want a minimal, readable implementation of a deep research agent to build on", "you have Firecrawl and OpenAI API keys and want automated iterative web research", "you need a starting point for custom research automation in TypeScript"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/deep-research", "repo": "dzhng/deep-research", "role": "main", "score": 55}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:28.955032+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:59:54.365606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4daa965cfabb4f8f3c35c126ccaa2f29f0b4a8050d6e95396ffc3570615135c0", "fetched_at": "2026-08-28T04:11:28.955032+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dzhng/deep-research"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 76, "longevity": 41, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 576, "days_push": 144, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 55, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}