naive.forUser(id).agentTools() (or naive.agentTools() for the default user) returns a
ready-to-use meta-toolset: a small set of tools as Anthropic tool-use definitions plus
a handle(name, input) dispatcher. It’s the fastest way to give an agent real-world
abilities — connect third-party apps, run their capabilities, and use Naive’s own built-in
primitives — all bounded by the user’s Account Kit.
Why meta-tools (not 1000s of schemas)
Naive exposes thousands of capabilities across third-party apps and its own primitives. Instead of dumping every schema into the model’s context,agentTools() gives the agent a
small core of discover → run meta-tools across two lanes.
Third-party apps lane (external integrations)
| Tool | Does |
|---|---|
naive_search_apps | Search the catalog of ~1000 connectable apps (Gmail, GitHub, Slack, …) |
naive_list_connections | What the user has already connected |
naive_connect_app | Start an OAuth connection (returns a link) |
naive_list_capabilities | List a connected app’s tools + schemas |
naive_run_capability | Execute a capability (gated by the Account Kit) |
search_apps → connect_app → list_capabilities → run_capability.
Built-in primitives lane (Naive’s own platform features)
| Tool | Does |
|---|---|
naive_search_primitives | Discover Naive’s built-in primitives + their methods & arg schemas |
naive_run_primitive | Execute a built-in method, e.g. primitive:"cards", method:"create" |
search_primitives → run_primitive. The primitives surfaced (when their client is
available) are cards, trading (brokerage stocks/options/crypto via OAuth —
naive_run_primitive(primitive:"trading", method:"create_order", arguments:{ symbol, side, notional })),
email, domains, vault, verification (KYC), formation, social,
approvals, browser (cloud browser sessions + autonomous signup/login), llm (OpenRouter
chat completions across 300+ models — naive_run_primitive(primitive:"llm", method:"chat", arguments:{ model, messages })), profile (read/set the user’s own email — e.g. point
it at a provisioned inbox before signup), the build primitives apps (provision a
Vercel + optional Supabase app) plus database / storage / functions / auth (operate on a
fullstack app’s Supabase backend — e.g. naive_run_primitive(primitive:"database", method:"query", arguments:{ sql })), and the growth primitives seo (keyword volume,
rank tracking, backlinks, competitors — naive_run_primitive(primitive:"seo", method:"search_volume", arguments:{ keywords })) and aeo (AI-search / GEO visibility
across ChatGPT, Claude, Gemini, Perplexity). For example, the agent drives the browser with
naive_run_primitive(primitive:"browser", method:"signup", arguments:{ service, url }).
Execution stays AccountKit-gated server-side, so the kit you configure bounds what the agent
can do; sensitive methods (issue a card, buy a domain, KYC, formation, browser signup) may
resolve to a pending_approval payload the model should relay to the user.
Usage with the Anthropic SDK
naive-example repo (/api/chat).