IDagntn@agntn/*
One interface. Every provider.
Every library takes one domain and puts one TypeScript interface in front of all the providers in it. You get it as a library, a CLI, an AI SDK tool, an MCP server and Pi and OMP extensions. Change the provider string, the rest of your code stays.
- Libraries
- 22
- in 5 domains
- On npm
- 14
- 10 with a docs site
- Providers
- 135+
- named in the catalogue
$ pnpm add @agntn/web@agntn/web
Web search, reverse image search and page reading over Brave, Exa, Tavily, Firecrawl, Jina, SearXNG and six more.
Providers
- Brave
- Exa
- Tavily
- Firecrawl
- Jina
- SearXNG
- Mojeek
- SerpAPI
- SerpBase
- TinyFish
- Context
- OpenAI Codex
- Status
- docs
- Providers
- 12
- Repository
- public
- Docs
- web.agntn.dev
Same calls, every library
Pick the domain, pick the provider by name, call the method. Web search, package registries, git forges, block explorers, the call site looks the same. This file walks through the 14 published libraries, one real export each.
- create('name') resolves a registered class. Adapters register themselves, nothing to extend by hand
- Every answer is the shared type. Provider quirks stay in the adapter and never leak out
- Typed errors: RateLimitError with retryAfter, NotFoundError, HTTPError with the key already redacted
Call
import { create } from "@agntn/web";const provider = await create("brave");const answer = await provider.search("typescript 7 native", { maxResults: 5 });// [{ url, title, snippet }], the same shape from every engine- Install
pnpm add @agntn/web - Docs
web.agntn.dev
Write once, run from any host
A human types the command in a shell. An agent calls the same executor through MCP, the Vercel AI SDK, Pi or OMP. Same answer, same provider diagnostics, so what the model reads is what you'd have read yourself.
- CLI, MCP server and the Pi and OMP extensions share one set of tool executors
- AI SDK tools come from the /ai subpath with Zod schemas, the host abort signal passed straight through
- Nothing bundled twice. The extension sources ship inside the npm package
- Library
- ESM, strict TypeScript, typed errors.
- CLI
- Same calls from a shell, --json for scripts.
- AI SDK
- Vercel AI SDK tools from the /ai subpath.
- MCP
- One server over stdio for every host.
- Pi
- Extension shipped inside the package.
- OMP
- Same executors, OMP packaging.
5 domains, 22 libraries
Published ones link to their page here, with the docs site or the npm package from there. The rest are still in private repos and sit here so you know what's coming.
Code
Agents
- harnesses
- sessions
- memory
- wiki
Boring on purpose
Every repo starts from the same template and keeps the same scripts, so jumping from one library to the next costs nothing. All of it is before 1.0, pin exact versions.
- Node.js 22 or 24 and up per package, ESM only, strict TypeScript
- obuild, vitest, oxlint and oxfmt through the shared @agntn/ox policy
- Releases from GitHub Actions with npm trusted publishing, no tokens lying around
# same scripts in every @agntn packagepnpm build # obuild, ESM, .d.mtspnpm test # vitestpnpm lint # oxlint + oxfmt via @agntn/oxpnpm typecheck # tsc, TypeScript 7pnpm release # changelogen, OIDC publishPick a domain, add one package
One install gives you the library, plus the CLI and the MCP server where the package ships them. Name a provider, ask it something, read the same shape whoever answered.
- PinEverything is before 1.0, so pin exact versions.
- KeysEach provider reads its key from its own env var unless you hand one to create().
- SwapChange the string in create() and the rest of the file stays.
First call
$ pnpm add @agntn/webimport { create } from "@agntn/web";const brave = await create("brave");const results = await brave.search("typescript 7 native");// [{ url, title, snippet }], the same shape from every engine