Threads AI

Integrations

Every provider threads ships an adapter for, what to import it from, and where it is documented.

Each integration is a factory function that returns an adapter: a model, a sandbox, a channel, a memory provider, a search backend, a store or an exporter. You pass it to an agent or a host; the framework never talks to a provider any other way.

Adapters live in their own package (TypeScript) or behind their own extra (Python), so the core depends on nothing but zod and pydantic. Installation lists the packages and extras. Which of these each language has today is in Python and TypeScript.

Models

TypeScriptPythonGuide
Anthropicanthropic() from @threads/anthropicanthropic() from threads.anthropicModels
OpenAIopenai() from @threads/openaiopenai() from threads.openaiModels
Everything elseaiSdk() from @threads/ai-sdk, for any AI SDK providerlitellm() from threads.litellm, over LiteLLM's OpenAI-compatible routeModels
Scripted model, for testsscriptedModel() from @threads/corescripted_model() from threadsTesting

Sandboxes

TypeScriptPythonGuide
E2Be2b() from @threads/e2be2b() from threads.e2bE2B
Daytonadaytona() from @threads/daytonadaytona() from threads.daytonaDaytona
Modal—modal() from threads.modalModal
Fake sandbox, for testsfakeSandbox() from @threads/corefake_sandbox() from threadsTesting

Modal is Python only for now: modal() from @threads/modal throws ConfigError transport_fence_unsupported, because Modal's JavaScript SDK sends commands over a connection threads can't safely wrap.

Credentials stay on the host. A sandbox never receives a key, and has no internet unless you give it one. See Sandboxes.

Channels

TypeScriptPythonGuide
Slackslack() from @threads/slackslack() from threads.slackSlack
WhatsAppwhatsapp() from @threads/whatsappwhatsapp() from threads.whatsappWhatsApp
GitHubgithub() from @threads/githubgithub() from threads.githubGitHub

Channels run under the host, which also serves the HTTP API and cron schedules.

Tools from other servers

TypeScriptPythonGuide
Any MCP servermcp() from @threads/mcpmcp() from threads.mcpMCP servers

The web_search tool needs a backend. All three come from the core package.

TypeScriptPythonGuide
Exaexa() from @threads/coreexa() from threads.searchBuilt-in tools
Tavilytavily() from @threads/coretavily() from threads.searchBuilt-in tools
Bravebrave() from @threads/corebrave() from threads.searchBuilt-in tools

Memory and knowledge

TypeScriptPythonGuide
Local memorylocalMemory() from @threads/corelocal_memory() from threadsMemory
Supermemorysupermemory() from @threads/supermemorysupermemory() from threads.supermemoryMemory
Zepzep() from @threads/zepzep() from threads.zepMemory
Local knowledge baselocalKnowledge() from @threads/corelocal_knowledge() from threadsKnowledge

There is a mem0() factory, but it refuses: the mem0ai SDK sends requests outside any transport threads can fence, so a call could not be recorded or replayed. Use supermemory() or zep(). See mem0.

Stores

The store is where the event log lives. Everything else is built on it.

TypeScriptPythonGuide
SQLitesqlite() from @threads/coresqlite() from threadsDurability
Postgrespostgres() from @threads/postgrespostgres() from threads.postgresDeploying

Telemetry

TypeScriptPythonGuide
OpenTelemetry (OTLP)otel() from @threads/otelotel() from threads.otelObservability

Writing your own

Every one of these is an ordinary implementation of a public protocol — Model, Sandbox, ChannelAdapter, MemoryProvider, KnowledgeProvider, SearchBackend, Store, Exporter — documented in the API reference. Nothing above uses a private hook, so a provider we don't ship is an adapter you can write yourself.

Edit on GitHub

On this page