feat(#4541): nlwebSearch tool — query an NLWeb endpoint#208
Merged
Conversation
First slice of the agent↔web-content layer (epic #4539). `tools { +nlwebSearchTool(
baseUrl) }` lets an agent on its own model query an NLWeb endpoint — a website's
natural-language interface over its schema.org-structured content — and fold the
ranked, typed results into context.
- Mirrors perplexitySearch: untrustedOutput=true (#642 — fetched web content is
wrapped in {trusted:false} and treated as data, not instructions).
- Posts to <baseUrl>/ask (no API key — NLWeb endpoints are public);
NlWebSearchOptions(site, mode = LIST/SUMMARIZE/GENERATE).
- Pure buildNlWebAskBody / parseNlWebResponse wire helpers + injectable
NlWebSearchBackend seam (default HttpNlWebSearchBackend).
- Results render as a numbered list of schema.org matches (name, @type,
description, url) + any summarize/generate answer.
- Types one-per-file (#3199): NlWebSearchArgs / NlWebMode / NlWebSearchOptions /
NlWebResult / NlWebSearchResult / NlWebSearchBackend / HttpNlWebSearchBackend /
NlWebSearchException.
Also corrected a stale README line ("Seven LLM providers... Gemini on the roadmap"
-> eight, Gemini shipped #1917) that the 0.8.0 truth-surface sweep missed.
8 tests. detekt + one-type-per-file + full build green. Docs: README, PRD §12.9
(client-side SHIPPED), CHANGELOG, internals-agent/model/NlWebSearch.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First slice of the agent↔web-content layer (epic #4539, PRD §12.9).
tools { +nlwebSearchTool(baseUrl) }lets an agent on its own model query an NLWeb endpoint — a website's natural-language interface over its schema.org-structured content — and fold the ranked, typed results into context.perplexitySearch:untrustedOutput = true(fetched web content wrapped in{trusted:false}, treated as data not instructions, #642).<baseUrl>/ask— no API key (NLWeb endpoints are public).NlWebSearchOptions(site, mode = LIST/SUMMARIZE/GENERATE).buildNlWebAskBody/parseNlWebResponsewire helpers + injectableNlWebSearchBackendseam.@type, description, url) + any summarize/generate answer.Also corrected a stale README release-truth line the 0.8.0 truth-surface sweep missed ("Seven LLM providers... Gemini on the roadmap" → eight, Gemini shipped).
8 tests; detekt + one-type-per-file + full build green. Docs: README, PRD §12.9 (client-side → SHIPPED), CHANGELOG, internals adjunct.
(Every NLWeb endpoint is also an MCP server, so an NLWeb
/mcpURL is equally consumable through the existing MCP client — this tool is the zero-wiring/ask-over-HTTP path.)🤖 Generated with Claude Code