Real web access for local models, and a lot more reliable tool-calling in general.
New: web_search (DuckDuckGo, falling back to Bing) and web_fetch (reads a page's real content and every link on it, so the agent can follow a link to a second, third, etc. page — genuine multi-hop crawling, not just one search). Both work fully offline-first: nothing reaches the internet unless the agent actually calls them, and they're gated by the same approval policy as running a command or pushing to git.
Fixed, all confirmed live against a real local model, not just unit tests:
- web_search/web_fetch were completely unreachable from any real run — a capability-wiring gap, now fixed.
- A routing bug sent "search the web for X" to the local-files-only search tool instead, because the phrase matched a local-search pattern first. Fixed with an explicit web/internet-signal check that wins the ambiguity.
- Small/quantized models could describe an answer in prose instead of ever calling a tool, even when tools were clearly needed and available. The response schema itself now removes that option until a real tool call has actually succeeded — not just attempted.
- A tool call that returns nothing (e.g. searching the wrong place) now gets an actionable hint attached, instead of silently looking like "there's nothing here."
- Tool name resolution now handles camelCase/PascalCase ("writeFile", "WriteFile") and many more wrapper-word variations, on top of the existing typo/alias resolver.
- A local file-search crash on a single unreadable file (e.g. a path exceeding Windows' 260-char limit) no longer aborts the whole search.
Study chat and the Notes "Ask AI" panel can now actually use tools (including the web) via a new "Web Research" toggle — previously both were pure text-completion with zero tool access at all.
Also: Model Library's size-tier filter (Light/CPU-friendly) now scans the real catalog instead of just whatever happened to be on the current page; softened the overly bright light theme in Study and Notes; fixed a rendering bug where AI-inserted content could show a literal <br> instead of a line break.