7aed9291cd
## Summary - When `WEB_SEARCH_DRIVER` is set to a non-native driver (e.g. `EXA`), the `web_search` action tool was only listed in the tool catalog and had to be discovered via `learn_tools` before use. Worse, `system-prompt-builder` explicitly instructed the model **not** to call `web_search` whenever it wasn't in the preloaded set, so even setting `EXA_API_KEY` correctly resulted in the model never calling Exa. - Fix: preload `web_search` from the registry alongside the other action tools when `shouldUseNativeSearch()` is false, mirroring how native provider search is already injected into `directTools`. The system prompt builder picks this up automatically and advertises `web_search` as a ready-to-use tool. - Unrelated: pass `isSystemBuild: true` to the messageThread upgrade command's migration build. ## Test plan - [ ] With `WEB_SEARCH_DRIVER=EXA` and `EXA_API_KEY` set, ask the chat agent for current/news information and verify it calls `web_search` directly (not via `learn_tools` / `execute_tool`) and that Exa is hit. - [ ] With `WEB_SEARCH_PREFER_NATIVE=true`, verify native provider search is still used and the action tool is not preloaded. - [ ] With `WEB_SEARCH_DRIVER=DISABLED`, verify behavior is unchanged (`shouldUseNativeSearch()` returns true → no Exa preload). - [ ] Run the 1-21 fix-message-thread-view-and-label-identifier upgrade command on a workspace and confirm the migration builds/runs as a system build. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>