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)
Flow:
search_apps → connect_app → list_capabilities → run_capability.
Built-in primitives lane (Naive’s own platform features)
Flow:
search_primitives → run_primitive. There are 30 of them; naive_search_primitives
returns the authoritative list at runtime, and anything not in that list is not addressable —
naive_run_primitive answers Unknown Naive primitive method: '<primitive>.<method>'. The
primitives surfaced (when their client is available) are cards, payments, wallet, trading
(brokerage stocks/options/crypto via OAuth —
naive_run_primitive(primitive:"trading", method:"create_order", arguments:{ symbol, side, notional })),
email, phone (provision US numbers + send/receive SMS via Surge —
naive_run_primitive(primitive:"phone", method:"send", arguments:{ from, to, body })),
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 })), the media primitives images, video, audio, clips (AI
image, video and speech generation plus short-form video clipping) and search (real-time
web search, URL reading & deep research), brain (the company brain — remember, recall and
retract), profile (read/set the user’s own email — e.g. point
it at a provisioned inbox before signup), the build primitives apps (provision a
managed app with an optional managed backend) plus database / storage / functions / auth (operate on a
fullstack app’s managed backend — e.g. naive_run_primitive(primitive:"database", method:"query", arguments:{ sql })), sandbox (disposable Linux micro-VM code sandboxes —
shell, filesystem, and public port exposure — e.g. naive_run_primitive(primitive:"sandbox", method:"exec", arguments:{ sandbox_id, command })) and mobile (cloud mobile emulators/devices), 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).