Kairo

A modular runtime for AI-native applications

Kairo is a production-grade, open-source runtime for AI-native applications in TypeScript. It orchestrates pluggable runtime capabilities through a standardized extension model — enabling modular, provider-agnostic systems with clear separation of concerns.

Why Kairo?

Future-Proof Protocol Illustration

Future-Proof Protocol

Built on a standardized JSON-RPC protocol. Your components and extensions remain compatible as the ecosystem evolves.

No Vendor Lock-in Illustration

No Vendor Lock-in

Seamlessly switch between OpenAI, Anthropic, or local models. Your application logic remains untouched no matter which model you choose.

Rock-Solid Stability Illustration

Rock-Solid Stability

Extensions run in isolated processes. A failing plugin won't bring down your application, making scaling and debugging a breeze.

Real-Time Experiences Illustration

Real-Time Experiences

Deliver blazing-fast, streaming responses to your users out of the box. Intercept and transform text streams effortlessly.

Ultimate Flexibility Illustration

Ultimate Flexibility

Snap together memory retrieval, tool execution, and data validation like Lego blocks. Enable only what you need, when you need it.

Built for Scale

Kairo Architecture Diagram

Unified Model Access

Interact with any LLM through a single, consistent interface. Forget about maintaining different SDKs and API quirks.

Intelligent Orchestration

The lightweight core engine handles the complex lifecycle of AI agents—from message routing to tool execution—automatically.

Limitless Extensibility

Easily add custom capabilities like database access or third-party APIs through secure, plug-and-play extensions.

Minimal Core. Infinite Extensions

Kairo keeps the core intentionally small, built around a simple pipeline that coordinates each interaction with a language model. Capabilities such as Skills, MCP, and memory are added through extensions that plug into this pipeline

As your application runs, these extensions can participate in the process whenever they’re needed—keeping the runtime clean while allowing agents to grow more capable over time.

Start building today
app.ts
const extension = new LMPipelineExtensionClient({ name: "mcp-extension" });
const transport = new ExtensionTransportStdio({
  command: "pnpm",
  args: ["tsx", "mcp-extension.ts"],
})
await extension.connect(transport);

const provider = new OpenaiProvider({
  apiKey: process.env.OPENAI_API_KEY!,
});

const stream = new LMPipeline({
  model: provider.defaultModel(),
  messages: [
    { role: "user", content: "Check BTC and ETH prices and summarize market sentiment." }
  ],
  extensions: [extension],
}).run();