
Gpt Researcher
Extend or operate GPT Researcher-style autonomous research agents using its documented 8-step feature pattern across config, providers, skills, agent, prompts, websocket, frontend, and docs.
Overview
gpt-researcher is an agent skill most often used in Idea (also Build agent-tooling, Validate prototype) that documents how to configure, extend, and ship features in the GPT Researcher autonomous research stack via its 8
Install
npx skills add https://github.com/assafelovic/gpt-researcher --skill gpt-researcherWhat is this skill?
- Documented 8-step pattern: config → provider → skill → agent → prompts → websocket → frontend → docs
- Default config and TypedDict BaseConfig extension in gpt_researcher/config
- Provider template with is_enabled checks and async execute for new capabilities
- End-to-end path from backend agent behavior to websocket and frontend surfacing
- Testing guidance hook for validating new GPT Researcher features
- 8-step feature integration pattern
Adoption & trust: 1.2k installs on skills.sh; 27.6k GitHub stars; 1/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want deep autonomous research or need to add a feature to GPT Researcher but the touchpoints across config, provider, agent, and UI are unclear.
Who is it for?
Developers self-hosting or forking GPT Researcher who need a checklist for new research features or providers.
Skip if: Founders who only want a five-minute competitor summary without running Python services, websockets, or custom providers.
When should I use this skill?
Adding or maintaining features in GPT Researcher following config, provider, skill, agent, prompts, websocket, frontend, and docs steps.
What do I get? / Deliverables
You can follow the 8-step pipeline to add a provider-backed capability and expose it through the full GPT Researcher agent and frontend path.
- Config entries in default.py and BaseConfig
- Provider module with execute
- Wired agent, prompts, websocket, and frontend surfacing
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Autonomous multi-source research is a primary Idea-phase activity before you commit what to build or validate. Research subphase is where deep, cited discovery and competitor or topic sweeps belong in the solo-builder journey.
Where it fits
Run broad topic and competitor research before choosing a niche product direction.
Add a custom provider and skill so your fork returns structured citations your app consumes.
Prototype a research-backed report generator to test willingness-to-pay before full UI polish.
How it compares
Full-stack research agent framework extension guide—not a lightweight single-query browser skill.
Common Questions / FAQ
Who is gpt-researcher for?
Solo builders and engineers implementing or extending the GPT Researcher open-source autonomous research agent in Python with frontend and realtime updates.
When should I use gpt-researcher?
In Idea for multi-source research before product decisions; in Build when adding providers or agent skills; in Validate when prototyping research-backed landing or scope docs.
Is gpt-researcher safe to install?
Extensions often need API keys and network access; review the Security Audits panel on this page, scope env secrets, and audit outbound research fetches before production use.
SKILL.md
READMESKILL.md - Gpt Researcher
# Adding Features Guide ## Table of Contents - [The 8-Step Pattern](#the-8-step-pattern) - [Image Generation Case Study](#image-generation-case-study) - [Testing New Features](#testing-new-features) --- ## The 8-Step Pattern ``` ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │1.CONFIG│ → │2.PROVIDER│ → │3.SKILL │ → │4.AGENT │ └────────┘ └────────┘ └────────┘ └────────┘ ↓ ↓ ↓ ↓ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │5.PROMPTS│ → │6.WEBSOCKET│→ │7.FRONTEND│→ │8.DOCS │ └────────┘ └────────┘ └────────┘ └────────┘ ``` ### Step 1: Add Configuration **File:** `gpt_researcher/config/variables/default.py` ```python DEFAULT_CONFIG: BaseConfig = { "MY_FEATURE_ENABLED": False, "MY_FEATURE_MODEL": "model-name", "MY_FEATURE_MAX_ITEMS": 3, } ``` **File:** `gpt_researcher/config/variables/base.py` ```python class BaseConfig(TypedDict): "MY_FEATURE_ENABLED": bool "MY_FEATURE_MODEL": Union[str, None] "MY_FEATURE_MAX_ITEMS": int ``` ### Step 2: Create Provider **File:** `gpt_researcher/llm_provider/my_feature/my_provider.py` ```python class MyFeatureProvider: def __init__(self, api_key: str = None, model: str = None): self.api_key = api_key or os.getenv("MY_API_KEY") self.model = model def is_enabled(self) -> bool: return bool(self.api_key and self.model) async def execute(self, input_data: str) -> Dict[str, Any]: # API implementation pass ``` Export in `gpt_researcher/llm_provider/__init__.py`. ### Step 3: Create Skill **File:** `gpt_researcher/skills/my_feature.py` ```python class MyFeatureSkill: def __init__(self, researcher): self.researcher = researcher self.config = researcher.cfg self.provider = MyFeatureProvider(...) def is_enabled(self) -> bool: return getattr(self.config, 'my_feature_enabled', False) and self.provider.is_enabled() async def execute(self, context: str, query: str) -> List[Dict]: if not self.is_enabled(): return [] await stream_output("logs", "my_feature_start", "🚀 Starting...", self.researcher.websocket) results = await self.provider.execute(context) await stream_output("logs", "my_feature_complete", "✅ Done", self.researcher.websocket) return results ``` Export in `gpt_researcher/skills/__init__.py`. ### Step 4: Integrate into Agent **File:** `gpt_researcher/agent.py` ```python def __init__(self, ...): if self.cfg.my_feature_enabled: from gpt_researcher.skills import MyFeatureSkill self.my_feature = MyFeatureSkill(self) else: self.my_feature = None self.my_feature_results = [] async def conduct_research(self, ...): # ... existing ... if self.my_feature and self.my_feature.is_enabled(): self.my_feature_results = await self.my_feature.execute(self.context, self.query) ``` ### Step 5: Update Prompts **File:** `gpt_researcher/prompts.py` ```python @staticmethod def generate_my_feature_prompt(context: str, query: str) -> str: return f"""...""" ``` ### Step 6: WebSocket Events Already handled via `stream_output()` in skill. ### Step 7: Frontend (if needed) **File:** `frontend/nextjs/hooks/useWebSocket.ts` ```typescript if (data.content === 'my_feature_start') { setStatus('processing'); } ``` ### Step 8: Documentation Create `docs/docs/gpt-researcher/gptr/my_feature.md`. --- ## Image Generation Case Study This section shows the **actual implementation** of the Image Generation feature as a reference. ### 1. Configuration Added **File:** `gpt_researcher/config/variables/default.py` ```python DEFAULT_CONFIG: BaseConfig = { # ... existing ... "IMAGE_GENERATION_MODEL": "models/gemini-2.5-flash-image", "IMAGE_GENERATION_MAX_IMAGES": 3, "IMAGE_GENERATION_ENABLED": False, "IMAGE_GENERATION_STYLE": "dark", # dark, light, auto } `