#8717: feat(web-search): add Seltz as search provider
docs
agents
stale
Cluster:
Web Search Provider Integrations

## Summary
- Add Seltz (seltz.ai) as a web search provider alongside Brave and Perplexity
- Seltz provides context-engineered web content optimized for AI reasoning
- Configurable via `tools.web.search.provider: "seltz"` and `SELTZ_API_KEY` env var
## Test plan
- [x] Unit tests for Seltz API key resolution (config + env fallback)
- [x] Unit tests for `runSeltzSearch` response parsing
- [x] Manual integration test against live Seltz API
- [x] `pnpm check` passes (types, lint, format)
Joined the discord and jumped into a voice channel to ask wether they thought adding a new search provider was a good idea, and they said yes (here are some of the support from discord):
<img width="1020" height="153" alt="discord_request" src="https://github.com/user-attachments/assets/557abd64-a89e-4042-a8aa-db1f56cbc983" />
<img width="314" height="112" alt="discord_support_new_search_integration" src="https://github.com/user-attachments/assets/0073889e-943a-483b-9f3b-f0f6f2c194ba" />
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR adds **Seltz** as an additional `web_search` provider alongside Brave (default) and Perplexity. The implementation extends provider selection/config validation, adds Seltz-specific API key resolution (`tools.web.search.seltz.apiKey` with `SELTZ_API_KEY` fallback), and implements `runSeltzSearch` to call Seltz’s API and map returned documents into the existing `web_search` result shape (title/url/description + caching).
Overall it fits the existing pattern used for Perplexity: provider-specific config parsing + key resolution + provider branch inside `runWebSearch`, plus docs/tests updates to cover configuration and response mapping.
<h3>Confidence Score: 3/5</h3>
- This PR is reasonably safe to merge, but has a couple of integration correctness risks around Seltz auth and caching.
- Core wiring (schema/config/tests) is consistent with existing providers, but the Seltz API call currently only passes the key in the JSON body and not via headers, which may not match the service’s expected auth mechanism and can cause runtime failures. Cache key omissions for non-Brave providers could also yield incorrect cached responses if model/baseUrl changes.
- src/agents/tools/web-search.ts
<!-- greptile_other_comments_section -->
<!-- /greptile_comment -->
Most Similar PRs
#13665: feat(web-search): add SearXNG as a search provider
by sfo2001 · 2026-02-10
78.3%
#16895: feat(web-search): add SearXNG as a search provider
by rustyorb · 2026-02-15
78.2%
#22626: feat(search): add support for SearXNG as a search provider
by sarveshgandhi · 2026-02-21
77.8%
#12304: feat: add DeSearch as web_search provider
by tatjr13 · 2026-02-09
76.1%
#13814: feat(web-search): add ZAI Search (zsearch) provider
by strelov1 · 2026-02-11
75.8%
#7738: feat(web-search): add provider fallback and Serper support
by garnetlyx · 2026-02-03
75.5%
#19876: feat(web-search): add SerpAPI search provider support
by nksolar-tianjin · 2026-02-18
74.7%
#8715: fix(web-search): safer provider resolution & Perplexity auto-detection
by abhijeet117 · 2026-02-04
74.6%
#11444: Add extensible search providers for web_search
by dhc02 · 2026-02-07
74.5%
#6743: feat(web-search): add Tavily search provider support
by 3927o · 2026-02-02
74.2%