Two weeks after the "Brave killed the free tier" research landed as RFC AR, the shipped answer: WebSearch becomes a multi-provider fallback circuit. A new internal/search connector package with a Provider interface and five pure-HTTP drivers (Brave, Serper, Exa, Tavily, SearXNG). A search_providers config, a search_priority cascade, per-AgentDef.search_providers overlay in content_sha256. The fallback circuit walks the cascade, resolves each provider's key via ResolveKeyOrOperator (RFC AR/AX honored), and falls over silently on error / empty / un-keyable. The model sees the same numbered result text regardless of which provider answered. Routing view gains a search block with keyable / available / selected / reachable / last_error per entry; Web UI Routing page renders it beside the LLM cascade. v1.15.1 adds an opt-in provenance footer (LOOMCYCLE_WEBSEARCH_PROVENANCE=1) that names the winning provider inline — off by default for byte-identical output. Also: search_providers documented in loomcycle.example.yaml; Library detail-panel independent scroll fixed. Bumps @loomcycle/client to 1.15.0 to publish LibraryAgentDefinition.search_providers; Python stays 1.13.0.
Search SDK – Integrate web search into agents