TheshadcnforAI.
Open-source, SDK-agnostic AI tools and agents. Install with one command. Own the source code. Ship faster.
Built for Vercel AI SDK & TanStack AI
1import { createExaWebSearchTool } from "@/tools/exa";23const { text } = await generateText({4 model: openai("gpt-4o-mini"),5 tools: {6 webSearch: createExaWebSearchTool(),7 },8 prompt: "Latest AI research papers",9});
Three commands to superpowers.
From zero to AI-powered in under a minute.
Install the CLI
Initialize your project configuration. Detects your AI SDK and sets up imports.
Add a tool
Browse the registry and add any tool. Source code is copied directly into your project - you own it.
Build with it
Import and use. Works with your existing AI SDK setup. Customize anything - it's your code now.
Built different.
Everything you need to ship AI features, nothing you don't.
SDK-Agnostic Architecture
Pure logic core with adapter layers. Write tools once, use them with Vercel AI SDK, TanStack AI, or any future framework. No lock-in, ever.
You Own the Code
Like shadcn, tools are copied into your project. Read it, modify it, extend it. No black boxes, no hidden API calls.
One Command Install
npx better-registry add [tool]. That's it. No config files, no build steps, no dependency hell.
Fully Type-Safe
Zod schemas, TypeScript-first. Every tool input and output is validated and typed. Your IDE knows everything.
Composable & Extensible
Tools are modular building blocks. Compose them into agents, chain them together, or use them standalone.
Battle-Tested
Error handling, timeouts, retries, input validation. Production-grade from day one. Built with Effect for robust error handling.
One tool. Every SDK.
The same Exa web search tool works everywhere. Pick your SDK, get the right adapter.
Start with the core. Zero dependencies, zero framework opinions. Just a typed async function that calls Exa's API. Use it in any JavaScript runtime - Node, Deno, Bun, edge functions.
import { webSearch } from "@ai-registry/exa/core";
const results = await webSearch(
{ query: "latest AI research" },
{ numResults: 5, type: "neural" }
);
console.log(results.results[0].title);Tools that extend your AI.
Pre-built, tested, SDK-agnostic functions. Install, customize, ship.
exa-search
@ai-registry/exa
Neural and keyword web search powered by Exa. Includes content scraping, highlights, and summaries.
firecrawl-scrape
Web scraping and crawling powered by Firecrawl. Extract clean content from any URL.
tavily-search
AI-optimized web search via Tavily. Built for RAG and agent workflows.
e2b-sandbox
Secure code execution sandbox powered by E2B. Run untrusted code safely.
browserbase-browse
AI-powered web browsing via Browserbase. Navigate, click, extract.
resend-email
Send transactional emails through Resend. Perfect for AI notification workflows.
Agents that think for you.
Pre-configured LLM + tool loop combinations for complex workflows. Install a complete agent with one command.
Research Agent
Deep research agent that searches, reads, synthesizes, and produces structured reports.
Coding Agent
Code generation agent with web search, documentation lookup, and iterative refinement.
Data Agent
Extract, transform, and analyze data from multiple sources with natural language.
Want to be notified when agents launch? Star us on GitHub
Same tool. Your framework.
Every tool ships with adapters for the SDKs you already use. The core logic is identical — only the wrapper changes.
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
import { createExaWebSearchTool } from "@ai-registry/exa";
const { text } = await generateText({
model: openai("gpt-4o-mini"),
tools: {
webSearch: createExaWebSearchTool(),
},
prompt: "Find recent AI papers",
});import { chat } from "@tanstack/ai";
import { openaiText } from "@tanstack/ai-openai";
import {
createTanstackExaWebSearchTool
} from "@ai-registry/exa/tanstack-ai";
const result = chat({
adapter: openaiText("gpt-4o-mini"),
tools: [createTanstackExaWebSearchTool()],
messages: [
{ role: "user", content: "Find recent AI papers" }
],
});// Both adapters call the same core function under the hood:
import { webSearch } from "@ai-registry/exa/core";
Stop building AI tools
from scratch.
Install. Customize. Ship. The registry is open source and growing.
$ npx better-registry add exa-search