Changelog

AI agents that outlive the process.

teaspill is a self-hosted platform for durable AI agents: they survive crashes, restarts, and deploys, spawn sub-agents, and stream everything they do to your UI — live. You write TypeScript; teaspill keeps it running.

agents/researcher.ts
import { defineAgent, native } from "@teaspill/agents-sdk";
import { z } from "zod";

export const researcher = defineAgent({
  type: "researcher",
  spawnSchema: z.object({ topic: z.string() }),
  state: z.object({ summary: z.string().optional() }),
  harness: native({
    model: "claude-sonnet-4-5",
    systemPrompt:
      "Research the topic. Spawn a summarizer with " +
      "your notes, wait, then finish with its summary.",
    ingressUrl: "http://localhost:8080",
  }),
});

What teaspill gives you

    Durable by default

    An agent's process can die mid-run; the agent doesn't. Every step is recorded, so work resumes exactly where it stopped — no lost conversations, no repeated side effects.

    Multi-agent from day one

    Agents spawn sub-agents, message each other, and gather results. Delivery and ordering are guaranteed by the platform, not by plumbing you write.

    Stream everything to your UI

    Every message, tool call, and result lands on a live timeline your frontend can replay, follow token by token, or join late without missing anything.

    Pick your engine

    Run the model loop with teaspill's native engine — any provider — or with the Claude Agent SDK. Swapping is one line in the agent definition; nothing else changes.

    Self-hosted, five services

    One Docker Compose file runs the whole platform: coordination, catalog, history, live sync, and the gateway. Your infrastructure, your keys, your data.

    One front door

    Your app, your UI, and the CLI talk to teaspill through a single gateway, authenticated with API keys — plus short-lived read tokens for browsers.

Run your first durable agent

Boot the stack with Docker Compose, define an agent in TypeScript, and watch its timeline stream into your browser.