Source repo
https://github.com/szczyglis-dev/py-gpt
Why selected
PyGPT is a desktop AI assistant (Python/PyQt, ~1.9k stars, MIT, pushed 2026-09-05, active release cadence with releases within the last weeks) with a first-class web search provider registry: src/pygpt_net/provider/web/ (BaseProvider → GoogleCustomSearch / MicrosoftBingSearch / DuckDuckGoSearch), registered in src/pygpt_net/app.py via launcher.add_web(...), surfaced in the Web Search plugin's provider combo + per-provider settings tab, and consumed by the plugin's web_search / web_urls commands. Adding You.com is one provider file + one import/registration pair + docs rows — the repo's own documented extension point ("can be extended with other search engine providers", docs/source/plugins.rst §Web Search).
Current providers: Google CSE (key), Bing (key), DuckDuckGo (package dep). A You.com provider adds a keyless-capable HTTP option using the repo's existing requests dependency (no new deps), with an optional YDC_API_KEY for the authenticated endpoint / higher rate limits.
Candidate evaluation summary
| Candidate |
Stars |
Distribution surface |
Activity |
Verdict |
| szczyglis-dev/py-gpt |
1901 |
web search provider registry (provider/web/ + app.py registration + plugin combo) |
pushed 2026-09-05 |
SELECTED — exact existing pattern, opt-in, tests available |
| openkursar/hello-halo |
1695 |
desktop agent w/ built-in browser |
pushed 2026-09-03 |
rejected — license NOASSERTION, no clean provider surface found |
| fivetaku/gptaku_plugins |
1109 |
Claude Code plugin marketplace |
pushed 2026-09-05 |
rejected — no LICENSE file, plugin-listing semantics unclear |
| trailofbits/skills-curated |
495 |
curated Claude Code plugin marketplace |
pushed 2026-07-14 |
rejected — curation-vetted list, external additions likely out of process |
Integration type
Provider adapter — new You.com web search engine provider in the repo's existing search-engine provider registry, following the microsoft_bing.py / duckduck_search.py pattern exactly.
Distribution surface leveraged
pygpt_net.provider.web.BaseProvider abstraction → app.py launcher.add_web() registration → Web Search plugin provider combo (provider option) + per-provider settings tab → web_search/web_urls commands. Docs: README "Internet access" line + docs/source/plugins.rst Web Search section.
Changes delivered
src/pygpt_net/provider/web/youcom_search.py — YouComSearch provider: POST to You.com MCP endpoint, tools/call you-search, maps results.web[].url → URL list; keyless by default, optional bearer auth
src/pygpt_net/app.py — import + launcher.add_web(YouComSearch())
tests/provider/web/test_youcom_search.py — 15 unit tests
- Docs: README (3 mentions), docs/source/intro.rst (2), docs/source/plugins.rst (provider list + You.com option reference section)
Setup / env vars
- None required for the default keyless endpoint (
https://api.you.com/mcp?profile=free)
- Optional:
youcom_api_key plugin option (secret) with YDC_API_KEY env-var fallback; when set, switches to authenticated https://api.you.com/mcp + Authorization: Bearer
youcom_endpoint option overridable like bing_endpoint; DEFAULT_ENDPOINT class constant as defensive fallback
Usage example
Plugins → Web Search → Settings → Provider: You.com → chat "search the web for X" → web_search returns URLs from you-search, then the existing web_url_open flow reads/summarizes pages as before.
Fallback / error behavior
- Opt-in only: default provider (
google_custom_search) and all existing providers unchanged (verified: provider combo + tabs unchanged apart from the new entry)
- HTTP errors / JSON-RPC error envelopes / exceptions → empty URL list (never raises, matching the DuckDuckGo provider pattern)
is_configured: keyless endpoint → always True; authenticated endpoint → requires key, otherwise the plugin's standard "set API key" dialog flow
Validation performed
pytest tests/provider/web/ tests/plugin/cmd_web/ — 20/20 pass
- flake8 clean on both new files (
--max-line-length=120)
- Live keyless end-to-end check through the provider's real HTTP path (real URLs returned; offset pagination verified)
- Registration verified through real
Web.register(): youcom_search in provider combo + settings tabs; defaults unchanged
- Full-suite collection errors pre-existing/environmental (missing optional deps
llama_index, speech_recognition; missing ~/.config/pygpt-net/path.cfg) — verified identical on unmodified master; after creating the config file, cmd_web plugin tests pass 5/5
- Pre-push: cmd_web errors confirmed identical on unmodified master via
git stash comparison
Branch / PR
Status
PR opened 2026-09-05. Awaiting maintainer review.
Source repo
https://github.com/szczyglis-dev/py-gpt
Why selected
PyGPT is a desktop AI assistant (Python/PyQt, ~1.9k stars, MIT, pushed 2026-09-05, active release cadence with releases within the last weeks) with a first-class web search provider registry:
src/pygpt_net/provider/web/(BaseProvider → GoogleCustomSearch / MicrosoftBingSearch / DuckDuckGoSearch), registered insrc/pygpt_net/app.pyvialauncher.add_web(...), surfaced in the Web Search plugin's provider combo + per-provider settings tab, and consumed by the plugin'sweb_search/web_urlscommands. Adding You.com is one provider file + one import/registration pair + docs rows — the repo's own documented extension point ("can be extended with other search engine providers", docs/source/plugins.rst §Web Search).Current providers: Google CSE (key), Bing (key), DuckDuckGo (package dep). A You.com provider adds a keyless-capable HTTP option using the repo's existing
requestsdependency (no new deps), with an optionalYDC_API_KEYfor the authenticated endpoint / higher rate limits.Candidate evaluation summary
provider/web/+app.pyregistration + plugin combo)Integration type
Provider adapter — new You.com web search engine provider in the repo's existing search-engine provider registry, following the
microsoft_bing.py/duckduck_search.pypattern exactly.Distribution surface leveraged
pygpt_net.provider.web.BaseProviderabstraction →app.pylauncher.add_web()registration → Web Search plugin provider combo (provideroption) + per-provider settings tab →web_search/web_urlscommands. Docs: README "Internet access" line + docs/source/plugins.rst Web Search section.Changes delivered
src/pygpt_net/provider/web/youcom_search.py—YouComSearchprovider: POST to You.com MCP endpoint,tools/call you-search, mapsresults.web[].url→ URL list; keyless by default, optional bearer authsrc/pygpt_net/app.py— import +launcher.add_web(YouComSearch())tests/provider/web/test_youcom_search.py— 15 unit testsSetup / env vars
https://api.you.com/mcp?profile=free)youcom_api_keyplugin option (secret) withYDC_API_KEYenv-var fallback; when set, switches to authenticatedhttps://api.you.com/mcp+Authorization: Beareryoucom_endpointoption overridable likebing_endpoint;DEFAULT_ENDPOINTclass constant as defensive fallbackUsage example
Plugins → Web Search → Settings → Provider: You.com → chat "search the web for X" →
web_searchreturns URLs fromyou-search, then the existingweb_url_openflow reads/summarizes pages as before.Fallback / error behavior
google_custom_search) and all existing providers unchanged (verified: provider combo + tabs unchanged apart from the new entry)is_configured: keyless endpoint → always True; authenticated endpoint → requires key, otherwise the plugin's standard "set API key" dialog flowValidation performed
pytest tests/provider/web/ tests/plugin/cmd_web/— 20/20 pass--max-line-length=120)Web.register():youcom_searchin provider combo + settings tabs; defaults unchangedllama_index,speech_recognition; missing~/.config/pygpt-net/path.cfg) — verified identical on unmodifiedmaster; after creating the config file, cmd_web plugin tests pass 5/5git stashcomparisonBranch / PR
Status
PR opened 2026-09-05. Awaiting maintainer review.