Seeker is a local research assistant designed to automate iterative, deep-dive investigations. It utilizes search engines, web scraping technology (Firecrawl), and large language models (LLMs) to conduct research based on user prompts. Seeker operates locally via both a command-line interface (CLI) and a REST API, providing flexibility in usage. The system features configurable research breadth and depth, supports multiple LLM providers (OpenAI, Fireworks.ai, custom endpoints), and generates outputs as either detailed markdown reports or concise answers.
The Seeker project aims to streamline and automate the complex process of online research. Traditional research often involves manually generating search queries, sifting through numerous web pages, extracting relevant information, and synthesizing findings. Seeker automates these steps by leveraging AI. It takes an initial user query, optionally clarifies the research intent through follow-up questions (in CLI mode), generates relevant search engine queries, scrapes web content, extracts structured learnings using an LLM, and recursively deepens the research based on findings. The final output consolidates the gathered knowledge into a structured report or a direct answer. The system is implemented in TypeScript and designed for local execution.
The research process in Seeker follows a structured workflow orchestrated primarily by the src/deep-research.ts module:
src/run.ts), the system can optionally generate follow-up questions using an LLM (src/feedback.ts) to refine the research scope and intent based on the initial query. The user's answers are incorporated to form a more detailed research prompt. For API usage (src/api.ts), the user provides the query, breadth, and depth directly.breadth parameter specified by the user. This step aims to break down the main research topic into smaller, targeted search tasks.@mendable/firecrawl-js). Seeker fetches the content from the search results, typically requesting markdown format for easier processing. Web scraping requests are parallelized using the p-limit library to improve efficiency, with the concurrency level configurable via the RESEARCH_CONCURRENCY environment variable.RecursiveCharacterTextSplitter (src/ai/text-splitter.ts) to fit within the LLM's context window (MAX_TOKENS).depth parameter is greater than 1, the process iterates. New SERP queries are generated based on the accumulated learnings from the previous cycle. This allows Seeker to delve deeper into specific sub-topics identified during the initial breadth-first exploration. The cycle of query generation, scraping, and learning extraction repeats until the maximum depth is reached.report.md in CLI mode) including all extracted learnings, structured findings, and a list of visited URLs as sources. The LLM is prompted to write a detailed report based on the initial query and all accumulated learnings.answer.md in CLI mode, or the answer field in the API response) to the original query, synthesized from the learnings. The LLM is specifically prompted for brevity and adherence to the original question's format if applicable.src/ai/providers.ts) to interact with different LLM providers (OpenAI, Fireworks.ai) selected via environment variables (OPENAI_KEY, FIREWORKS_KEY, OPENAI_BASE_URL, OPENAI_MODEL). This allows flexibility in choosing the backend model.


The primary outputs of the Seeker system are:
Example CLI Session Flow:
npm start).breadth (e.g., 4) and depth (e.g., 2).report.md) containing synthesized findings and source URLs.API Interaction:
/api/research.query, breadth, depth.deepResearch function.answer using writeFinalAnswer.{ success: true, answer, learnings, visitedUrls }.Seeker provides a functional framework for automating deep-dive online research. By combining iterative query generation, web scraping, and LLM-based learning extraction, it can explore topics with configurable breadth and depth. The system offers both CLI and API interfaces, supports multiple LLM backends, and produces structured outputs in the form of reports or concise answers. While reliant on the quality of LLM outputs and scraped web content, Seeker demonstrates a practical approach to automating complex research tasks locally. The codebase reflects the described features and workflow.