Open Source · MIT

The stack behind Smoo AI, open sourced

Not a pile of side projects — the actual layers we run. The smooth-operator agent core, the embeddable chat widget, the th CLI, and the config, logging, observability, and schema libraries our platform is built on. Rust at the core, native clients in TypeScript, Python, Go, and .NET.

The agent stack

One engine, from the core to the widget

Smoo AI is agents. This is the open-source spine that makes them run — a polyglot core, the service that wraps it, the widget that embeds it, and the CLI that ships it.

@smooai/smooth-operator-core
5 LanguagesRustTypeScriptPythonGo.NET
The engine. A polyglot AI-agent orchestration core — agents, workflows, tools, checkpointing, memory, human-in-the-loop, and cost accounting — with a Rust reference implementation and native bindings for TypeScript, Python, Go, and .NET. Think of it as a security-first LangGraph: the same graph runs identically in every language. It's the heart of Smoo AI — the core behind smooth-operator, our chat, and lom.smoo.ai.

Key Features:

  • Agents, workflows, and a tool system with pre/post hooks
  • Durable checkpointing + resumable turns
  • Confirm-before-write human-in-the-loop, modeled in the core
  • Per-turn cost + token accounting
  • One graph, five languages — Rust reference, native bindings

Quick Example:

use smooai_smooth_operator_core::{Agent, Model};

// Define an agent: a model, a system prompt, and typed tools.
let agent = Agent::builder()
    .model(Model::new("claude-sonnet-5"))
    .system("You are a helpful assistant.")
    .tool(weather_tool)
    .build();

// Run a turn and stream it, token by token.
let mut turn = agent.run("What's the weather in Denver?").await?;
while let Some(event) = turn.next().await {
    if let Event::Token(t) = event {
        print!("{t}");
    }
}
@smooai/smooth-operator
5 LanguagesTypeScriptPythonGo.NETRust
The agent service. Knowledge chat, tools, durable checkpoints, HITL, and multi-participant conversations over one schema-driven WebSocket protocol — built on smooth-operator-core with 5-language client parity. The generated types are committed, so every client speaks the same wire. Deploy it to Kubernetes, AWS serverless, or run it locally; we host it at lom.smoo.ai.

Key Features:

  • Schema-driven WebSocket protocol — one language-neutral contract
  • Real streaming clients in 5 languages, not thin REST wrappers
  • Knowledge grounding with citations (pgvector or S3 Vectors)
  • Checkpointing, memory, and resumable turns
  • Deploy to Kubernetes, AWS serverless, or run locally

Quick Example:

import { SmoothAgentClient } from '@smooai/smooth-operator';

const client = new SmoothAgentClient({ url: 'wss://your-host/ws' });
await client.connect();

const { sessionId } = await client.createConversationSession({ agentId });

// Stream the agent's reply, token by token.
for await (const event of client.sendMessage({ sessionId, message: 'Hi!', stream: true })) {
    if (event.type === 'stream_token') process.stdout.write(event.token ?? '');
}

Installation:

pnpm add @smooai/smooth-operator

@smooai/chat-widget

TypeScriptWeb Component ~19 kB

The embeddable end of the stack: a framework-light <smooth-agent-chat> web component that speaks the smooth-operator protocol. One script tag, streaming replies, grounded sources, popover or full-page — and it inherits your brand color from a single accent. We dogfood it across Smoo AI.

Same component · three brands · live

The real component, streaming right on this page — each one the same code themed from a single color.

Default · dark
Coral · light
Violet · dark
Declarative — a script tag + the element
<!-- one script tag, then the element -->
<script src="https://unpkg.com/@smooai/chat-widget/dist/chat-widget.global.js"></script>

<smooth-agent-chat
    endpoint="wss://your-host/ws"
    agent-id="…"
    agent-name="Support">
</smooth-agent-chat>
Programmatic — bundler / ESM
import { mountChatWidget } from '@smooai/chat-widget';

mountChatWidget({
    endpoint: 'wss://your-host/ws',
    agentId: '…',
    agentName: 'Support',
    theme: { primary: '#8b5cf6' }, // one color themes everything
});
@smooai/smooth (th)
Rust
One CLI for the whole platform in a single ~10 MB Rust binary — no Docker, no Node. th config manages config, secrets, and feature flags; th also drives LLM gateway keys, M2M clients, agents, knowledge, and observability. And it hosts Big Smooth, an always-on personal AI assistant that runs on your machine, on the models you choose, powered by smooth-operator-core.

Key Features:

  • One binary for the whole platform — config, secrets, keys, agents, knowledge
  • th config replaces the deprecated smooai-config CLI
  • Jira sync, pearls work tracking, and git worktree management built in
  • Big Smooth — an always-on personal AI assistant, booted with th up
  • One ~10 MB binary — no Docker, no Node.js, no runtime deps

Quick Example:

# Install with Homebrew (macOS / Linux)
brew install SmooAI/tools/th

# …or the one-line installer (single binary, no deps)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Manage config, secrets, and feature flags (replaces smooai-config)
th config set DATABASE_URL "postgres://..." --environment production
th config list

# Start Big Smooth — your always-on personal AI assistant
th auth login
th up
th code

Product building blocks

The libraries our platform runs on

Config, logs, error tracking, tests, schemas, deploys. Every service we ship leans on these — so we open sourced them, with the same multi-language reach.

@smooai/config
4 LanguagesTypeScriptPythonRustGo
Every secret, URL, and feature flag across Smoo AI resolves through this — it's the single source of truth for our runtime config. Type-safe, schema-validated, three tiers (public, secret, feature flags), with runtime clients in TypeScript, Python, Rust, and Go and JSON-Schema serialization so all four agree on the same shape.

Key Features:

  • Three-tier configuration: public, secret, feature flags
  • Schema-agnostic validation (Zod, Valibot, ArkType, Effect)
  • Type-safe keys with automatic casing conversion
  • JSON Schema serialization for cross-language use
  • Runtime client with local caching for config servers

Quick Example:

import { defineConfig } from '@smooai/config';
import { z } from 'zod';

export default defineConfig({
    public: {
        API_URL: z.string().url(),
        APP_NAME: z.string().default('My App'),
    },
    secret: {
        DATABASE_URL: z.string(),
        JWT_SECRET: z.string().min(32),
    },
    featureFlags: {
        NEW_DASHBOARD: z.boolean().default(false),
    },
});

Installation:

pnpm add @smooai/config
@smooai/logger
4 LanguagesTypeScriptPythonRustGo
Structured logging for AWS Lambda and the browser, with automatic context gathering — the log line every Smoo AI service writes. It stitches a correlation ID across microservices, pulls in AWS and browser/device context for free, and ships native implementations in TypeScript, Python, Rust, and Go (plus a Rust/egui desktop log viewer).

Key Features:

  • Automatic context gathering for AWS services
  • Correlation ID tracking across microservices
  • Browser and device intelligence
  • Detailed error logging with stack traces
  • Log rotation, pretty printing, and a desktop log viewer

Quick Example:

import { AwsServerLogger } from '@smooai/logger';

const logger = new AwsServerLogger({ name: 'UserAPI' });

export const handler = async (event, context) => {
    logger.addLambdaContext(event, context);
    logger.info('Processing request', { userId: event.pathParameters.id });
    // Outputs CloudWatch-formatted JSON with full context
};

Installation:

pnpm add @smooai/logger
@smooai/observability
4 LanguagesTypeScriptReactNext.jsRust
A Sentry-like error-tracking SDK for browser, Node, React, and Next.js — the open-core companion to our hosted error and metrics dashboards. When something throws anywhere in Smoo AI, this is what catches it, attaches context, and ships it to the platform. Rust core, first-class JavaScript surfaces.

Key Features:

  • Error capture for browser, Node, React, and Next.js
  • Automatic context + breadcrumbs on every event
  • Open-core companion to the hosted o11y dashboards
  • Rust core with typed JavaScript SDKs

Quick Example:

import { init, captureException } from '@smooai/observability';

init({ dsn: process.env.SMOOAI_O11Y_DSN, environment: 'production' });

try {
    await checkout(cart);
} catch (err) {
    captureException(err, { tags: { area: 'checkout' } });
    throw err;
}

Installation:

pnpm add @smooai/observability
@smooai/testing
TypeScript
The CLI and SDK behind our Testing API. Point it at a CTRF report and it streams results — runs, cases, environments, deployments — straight from CI into the Smoo AI dashboards. It is how every green check in this monorepo gets recorded.

Key Features:

  • CLI-first — report CTRF results straight from CI
  • Programmatic SDK for custom test orchestration
  • Manage runs, cases, environments, and deployments
  • First-class GitHub Actions integration

Quick Example:

# Authenticate
npx @smooai/testing login \
  --client-id <M2M_CLIENT_ID> \
  --client-secret <M2M_CLIENT_SECRET> \
  --org-id <ORG_ID>

# Report CTRF test results from CI
npx @smooai/testing runs report ctrf-report.json \
  --environment production \
  --name "PR #42 Tests"

Installation:

pnpm add @smooai/testing
@smooai/postgres-kit
Rust
A Rust-native declarative Postgres schema toolkit. A single PgTableSpec is the source of truth: it generates DDL, diffs it into forward migrations, detects drift in CI, and codegens serde/sqlx row types plus a tenant-scoped sqlx layer. It is how our Rust services stay byte-exact with the database.

Key Features:

  • PgTableSpec as the single source of truth for DDL
  • Diff-based migrations + CI drift detection
  • serde / sqlx row codegen from the spec
  • Tenant-scoped sqlx layer built in

Quick Example:

use smooai_postgres_kit::{PgTableSpec, Column, ColumnType};

// One spec is the source of truth — DDL, migrations, and row types derive from it.
let contacts = PgTableSpec::new("contacts")
    .column(Column::new("id", ColumnType::Uuid).primary_key())
    .column(Column::new("org_id", ColumnType::Uuid).not_null())
    .column(Column::new("email", ColumnType::Text))
    .tenant_scoped("org_id");

// Diff against the live database and emit a forward migration.
let migration = contacts.diff(&introspected)?;
println!("{}", migration.to_sql());
@smooai/clickhouse-kit
Rust
A safe-by-construction ClickHouse schema toolkit for user-defined, multi-tenant schemas — allowlisted types, generated DDL, forward-only migrations, and drift detection. Serde-native Rust. It backs Ask Your Data and the rest of our analytics platform, where untrusted tenant schemas have to stay locked down.

Key Features:

  • Allowlisted types — safe for user-defined schemas
  • DDL generation + forward-only migrations
  • Drift detection for multi-tenant tables
  • Serde-native, Rust throughout

Quick Example:

use smooai_clickhouse_kit::{TableSpec, Column, ChType};

// Allowlisted types only — safe to build from untrusted, per-tenant schemas.
let events = TableSpec::new("events")
    .column(Column::new("ts", ChType::DateTime64(3)))
    .column(Column::new("org_id", ChType::String))
    .column(Column::new("name", ChType::LowCardinality(Box::new(ChType::String))))
    .order_by(["org_id", "ts"]);

// Forward-only migration + drift check against the live table.
let ddl = events.create_ddl();
@smooai/deploy
TypeScript
Our shared deploy primitives — reusable SST v4 constructs (API Gateway WebSocket + Rust Lambda + DynamoDB + S3 Vectors) and a Helm/ArgoCD chart. smooth-operator consumes it, and we dogfood it across the platform, so a new service gets a production-grade deploy without re-deriving the wiring.

Key Features:

  • Reusable SST v4 constructs (WebSocket + Rust Lambda + DynamoDB + S3 Vectors)
  • Helm / ArgoCD chart for Kubernetes deploys
  • Consumed by smooth-operator, dogfooded by Smoo AI

Installation:

pnpm add @smooai/deploy
@smooai/ui
6 LanguagesCSSRustTypeScript.NETPythonGo
Our cross-language design system — shared tokens, CSS, and the Smoo monogram, packaged for Rust, TypeScript, .NET, Python, and Go. One brand, five ecosystems: the same accent, spacing, and mark whether a surface renders from a Rust binary or a Next.js app.

Key Features:

  • Shared design tokens + CSS
  • The Smoo monogram as a component
  • One brand across five language ecosystems
@smooai/client-shared
Rust
The cross-runtime client library our tools share — OAuth, M2M, and password auth plus storage, written once in Rust. It is the auth layer inside the th CLI, so every command that talks to the platform borrows the same battle-tested login flow.

Key Features:

  • OAuth, M2M, and password auth flows
  • Cross-runtime storage
  • Powers authentication in the th CLI

Handy on their own

Utility libraries

Standalone tools that don't need the rest of the stack — grab one and go. Battle-tested in production, MIT licensed.

@smooai/fetch
4 LanguagesTypeScriptPythonRustGo
A robust HTTP client with automatic retries, intelligent timeouts, rate limiting, and circuit breaking — built on native fetch for Node and the browser, with matching implementations in Python, Rust, and Go. Standard Schema validation gives you type-safe responses out of the box.

Key Features:

  • Automatic retries with exponential backoff and jitter
  • Intelligent timeout management
  • Circuit breaking for unstable services
  • Schema validation and type-safe responses
  • Built-in telemetry and @smooai/logger integration

Quick Example:

import { FetchBuilder } from '@smooai/fetch';
import { z } from 'zod';

const api = new FetchBuilder('https://api.example.com')
    .withRetry({ maxRetries: 3, backoff: 'exponential' })
    .withCircuitBreaker({ threshold: 5, resetTimeout: 30000 })
    .withTimeout(5000)
    .build();

const users = await api.get('/users', {
    schema: z.array(z.object({ id: z.string(), name: z.string() })),
});

Installation:

pnpm add @smooai/fetch
@smooai/file
4 LanguagesTypeScriptPythonRustGo
A stream-first file library with one interface over local files, URLs, S3 objects, and FormData. Stream a URL straight to S3 without buffering it in memory, lazily load content, and get intelligent type detection across 100+ formats — in TypeScript, Python, Rust, and Go.

Key Features:

  • Stream-first design for memory efficiency
  • Multiple file sources (local, URLs, S3, FormData)
  • Lazy file content loading
  • Intelligent file type detection (100+ types)
  • Rich metadata extraction and checksum support

Quick Example:

import { SmooFile } from '@smooai/file';

// Stream from URL to S3 without loading into memory
const file = await SmooFile.fromUrl('https://example.com/large-file.zip');
console.log(file.mimeType); // 'application/zip'
await file.uploadToS3('my-bucket', 'uploads/file.zip');

// Generate a signed URL for temporary access
const signedUrl = await file.getSignedUrl(3600);

Installation:

pnpm add @smooai/file
@smooai/utils
TypeScript
The glue in our TypeScript services — Lambda error handling, production-ready Hono apps, smart retries, environment detection, and schema validation with human-readable errors. Small pieces we reached for so often they became a package.

Key Features:

  • Lambda error handling helpers
  • Production-ready Hono app factory
  • Smart retries + environment detection
  • Schema validation with human-readable errors

Installation:

pnpm add @smooai/utils
@smooai/config-typescript
TypeScript
Our shared TypeScript configs — base, Node.js, React, Next.js, and library presets with strict type checking and monorepo optimization. Extend one and a package inherits the same tsconfig posture every other Smoo AI package uses.

Key Features:

  • Base, Node, React, Next.js, and library presets
  • Strict type checking out of the box
  • Tuned for monorepos

Need custom development?

Our open source packages solve common problems — and when you need more, we build custom solutions that plug straight into this ecosystem. Let's talk about your project.

Let's Build Something Amazing

Tell us about your development needs and we'll create custom solutions that integrate seamlessly with our open source ecosystem.

By submitting this form, you agree to our Privacy Policy and Terms of Service.