web search extension · .NET 10

dmon-websearch

An out-of-tree extension that gives dmon a web_search tool — implemented as an "agent-in-a-tool" that runs its own provider-grounded search and returns a digested, cited answer.

GitHub stars License

Agent-in-a-tool

To the primary agent it's an ordinary AIFunction; internally it runs its own scoped, single-turn IChatClient against a configured model.

🌐

Provider-grounded

Uses HostedWebSearchTool against a configured model (default gemini-2.5-flash) and returns a digested, cited answer.

🧹

Keeps context clean

Raw pages never reach the primary context — the sub-agent digests results so the primary stays focused and cheap.

🔀

Provider-agnostic primary

The primary agent stays provider-agnostic — web search works even when the primary is a local Ollama model.

🔐

Gated by the permission model

web_search is gated via IDmonExtension.Evaluate, following dmon's conservative permission model.

📦

Reference extension

dmon's first real out-of-tree extension — it exercises the published contract surface (Dmon.Extensions, Dmon.Abstractions).

What it is

dmon-websearch is an out-of-tree extension package for dmon — a .NET-native coding agent. It provides a web_search tool to dmon’s primary agent.

The extension implements the agent-in-a-tool pattern: to the primary agent it is an ordinary AIFunction, but internally it runs its own scoped, single-turn IChatClient against a configured model (default gemini/gemini-2.5-flash) with provider-grounded web search enabled (HostedWebSearchTool), and returns a digested, cited answer. This keeps the primary agent provider-agnostic — it works even when the primary is a local Ollama model — and keeps raw pages out of the primary context.

Relationship to dmon-core

It consumes the contract packages Dmon.Extensions (the IDmonExtension contract) and Dmon.Abstractions (IProviderFactory, ProviderConfig) as NuGet package references. The binding architecture decisions (ADRs) live in dmon-core and govern how this extension loads, authenticates, and gates egress.

See the repository for configuration and the full ADR mapping.