Build AI agents
that just work.

A TypeScript framework for reliable AI agents with full transparency and control. Inspired by the Finnish concept of sisu — calm determination under pressure.

scroll
🎯

No surprises

Explicit middleware, typed tools, deterministic control flow. Exactly what you expect, every time.

🔧

Full control

Compose planning, routing, and safety like Express apps. Your pipeline, your rules.

🔍

Total visibility

Built-in tracing, logging, and debugging out of the box. See every token, cost, and decision.

Provider-agnostic

OpenAI, Anthropic, Ollama, or bring your own. Swap providers in a single line of code.

Stop fighting your
AI framework.

Sisu was built because debugging AI agents shouldn't require a PhD. Every decision is visible, every tool is typed, every failure is traceable.

You're dealing with… Sisu gives you…
"Where did my tokens go?" A trace viewer showing every token, cost, and decision
"The tool loop broke and I can't debug it" Explicit control flow you can read, test, and step through
"Can't swap providers without rewriting" Provider-agnostic adapters — change one line
"Secrets keep leaking into my logs" Automatic redaction of API keys and sensitive data
"Production bugs are impossible to trace" Structured logging and HTML traces for every run

Up and running in minutes.

Install, wire up your first agent, and have full tracing before your first coffee is finished.

1 — Install

terminal
pnpm add @sisu-ai/core @sisu-ai/adapter-openai \
         @sisu-ai/mw-register-tools @sisu-ai/mw-tool-calling \
         @sisu-ai/mw-conversation-buffer @sisu-ai/mw-trace-viewer \
         @sisu-ai/mw-error-boundary zod dotenv

3 — Run

terminal
npx tsx agent.ts
open traces/viewer.html

2 — Your first agent

agent.ts
import "dotenv/config";
import { Agent, createCtx } from "@sisu-ai/core";
import { registerTools } from "@sisu-ai/mw-register-tools";
import { conversationBuffer } from "@sisu-ai/mw-conversation-buffer";
import { errorBoundary } from "@sisu-ai/mw-error-boundary";
import { toolCalling } from "@sisu-ai/mw-tool-calling";
import { openAIAdapter } from "@sisu-ai/adapter-openai";
import { traceViewer } from "@sisu-ai/mw-trace-viewer";
import { z } from "zod";

const ctx = createCtx({
  model: openAIAdapter({ model: "gpt-4o-mini" }),
  input: "What is the weather in Stockholm?",
  systemPrompt: "You are a helpful assistant.",
});

const app = new Agent()
  .use(errorBoundary())
  .use(traceViewer())
  .use(registerTools([weather]))
  .use(conversationBuffer({ window: 8 }))
  .use(toolCalling);

await app.handler()(ctx);

Two powerful tools.
One coherent system.

SISU Framework

@sisu-ai/core

A TypeScript framework that brings Express-style middleware composition to AI agent development. Typed tools, deterministic control flow, built-in tracing, and provider-agnostic adapters for OpenAI, Anthropic, and Ollama.

  • Middleware pipeline (errorBoundary, toolCalling, guardrails…)
  • HTML & CLI trace viewer
  • Control flow: sequence, branch, parallel, graph
  • RAG, RAG tools, vector adapters
  • 25+ runnable examples
Explore Framework →

SISU CLI

@sisu-ai/cli

A configurable agent CLI for real terminal work. Run interactive chat, tune providers and tool policy, install skills, and quickly discover Sisu framework packages when you need building blocks.

  • Interactive sisu chat for everyday terminal workflows
  • Scaffold: chat-agent, cli-agent, rag-agent
  • Package discovery: list, info, install
  • Tool safety model with policy gating
  • Session persistence and branching
Explore CLI →

Ready to build agents that just work?

Start with the framework for full control, or jump into the CLI to run a configurable agent in your terminal.

Get started with Framework View on GitHub