[{"data":1,"prerenderedAt":388},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started":169,"\u002Fgetting-started-surround":385},[4,28,85,127,157],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":23,"path":24,"stem":25,"icon":26},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers","i-lucide-rocket",{"title":29,"icon":30,"path":31,"stem":32,"children":33,"page":84},"Concepts","i-lucide-lightbulb","\u002Fconcepts","2.concepts",[34,39,44,49,54,59,64,69,74,79],{"title":35,"path":36,"stem":37,"icon":38},"Durable agents","\u002Fconcepts\u002Fdurable-agents","2.concepts\u002F1.durable-agents","i-lucide-infinity",{"title":40,"path":41,"stem":42,"icon":43},"Glossary","\u002Fconcepts\u002Fglossary","2.concepts\u002F10.glossary","i-lucide-book-a",{"title":45,"path":46,"stem":47,"icon":48},"Restate in five minutes","\u002Fconcepts\u002Frestate-primer","2.concepts\u002F2.restate-primer","i-lucide-cpu",{"title":50,"path":51,"stem":52,"icon":53},"Entities & addressing","\u002Fconcepts\u002Fentities-addressing","2.concepts\u002F3.entities-addressing","i-lucide-at-sign",{"title":55,"path":56,"stem":57,"icon":58},"Timelines & events","\u002Fconcepts\u002Ftimelines-events","2.concepts\u002F4.timelines-events","i-lucide-list-ordered",{"title":60,"path":61,"stem":62,"icon":63},"Projections & the catalog","\u002Fconcepts\u002Fprojections-catalog","2.concepts\u002F5.projections-catalog","i-lucide-database",{"title":65,"path":66,"stem":67,"icon":68},"Workspaces & execution","\u002Fconcepts\u002Fworkspaces","2.concepts\u002F6.workspaces","i-lucide-terminal",{"title":70,"path":71,"stem":72,"icon":73},"Harnesses","\u002Fconcepts\u002Fharnesses","2.concepts\u002F7.harnesses","i-lucide-plug",{"title":75,"path":76,"stem":77,"icon":78},"Multi-agent patterns","\u002Fconcepts\u002Fmulti-agent","2.concepts\u002F8.multi-agent","i-lucide-network",{"title":80,"path":81,"stem":82,"icon":83},"Lifecycle & control","\u002Fconcepts\u002Flifecycle","2.concepts\u002F9.lifecycle","i-lucide-sliders-horizontal",false,{"title":86,"icon":87,"path":88,"stem":89,"children":90,"page":84},"Guides","i-lucide-book-open","\u002Fguides","3.guides",[91,106],{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":84},"Agents","i-lucide-bot","\u002Fguides\u002Fagents","3.guides\u002F1.agents",[97,101],{"title":98,"path":99,"stem":100,"icon":93},"Building agents","\u002Fguides\u002Fagents\u002Fbuilding-agents","3.guides\u002F1.agents\u002F1.building-agents",{"title":102,"path":103,"stem":104,"icon":105},"Frontend integration","\u002Fguides\u002Fagents\u002Ffrontend-integration","3.guides\u002F1.agents\u002F2.frontend-integration","i-lucide-monitor",{"title":107,"icon":108,"path":109,"stem":110,"children":111,"page":84},"Operations","i-lucide-server-cog","\u002Fguides\u002Foperations","3.guides\u002F2.operations",[112,117,122],{"title":113,"path":114,"stem":115,"icon":116},"Self-hosting","\u002Fguides\u002Foperations\u002Fself-hosting","3.guides\u002F2.operations\u002F1.self-hosting","i-lucide-server",{"title":118,"path":119,"stem":120,"icon":121},"Auth & API keys","\u002Fguides\u002Foperations\u002Fauth-api-keys","3.guides\u002F2.operations\u002F2.auth-api-keys","i-lucide-key-round",{"title":123,"path":124,"stem":125,"icon":126},"Backup & restore","\u002Fguides\u002Foperations\u002Fbackup-restore","3.guides\u002F2.operations\u002F3.backup-restore","i-lucide-database-backup",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":84},"Reference","i-lucide-book-marked","\u002Freference","4.reference",[133,138,143,148,153],{"title":134,"path":135,"stem":136,"icon":137},"Event schema","\u002Freference\u002Fevents","4.reference\u002F1.events","i-lucide-list-tree",{"title":139,"path":140,"stem":141,"icon":142},"Addressing","\u002Freference\u002Faddressing","4.reference\u002F2.addressing","i-lucide-map-pin",{"title":144,"path":145,"stem":146,"icon":147},"Gateway HTTP API","\u002Freference\u002Fgateway-api","4.reference\u002F3.gateway-api","i-lucide-webhook",{"title":149,"path":150,"stem":151,"icon":152},"CLI","\u002Freference\u002Fcli","4.reference\u002F4.cli","i-lucide-square-terminal",{"title":154,"path":155,"stem":156,"icon":83},"Configuration","\u002Freference\u002Fconfiguration","4.reference\u002F5.configuration",{"title":158,"path":159,"stem":160,"children":161,"icon":163},"Contributing","\u002Fcontributing","5.contributing\u002F1.index",[162,164],{"title":158,"path":159,"stem":160,"icon":163},"i-lucide-git-pull-request",{"title":165,"path":166,"stem":167,"icon":168},"The package map","\u002Fcontributing\u002Fpackage-map","5.contributing\u002F2.package-map","i-lucide-boxes",{"id":170,"title":10,"body":171,"description":378,"extension":379,"links":380,"meta":381,"navigation":382,"path":6,"seo":383,"stem":7,"__hash__":384},"docs\u002F1.getting-started\u002F1.index.md",{"type":172,"value":173,"toc":368},"minimark",[174,183,188,194,200,211,221,225,245,258,268,272,326,330,337,348,351,355],[175,176,177,178,182],"p",{},"teaspill is a self-hosted platform for ",[179,180,181],"strong",{},"durable AI agents"," — agents that keep working, and keep their memory, across process restarts, deploys, and crashes. You define agents in TypeScript, run a small Docker Compose stack, and spawn, message, and watch your agents from your own app.",[184,185,187],"h2",{"id":186},"the-problems-it-removes","The problems it removes",[175,189,190,193],{},[179,191,192],{},"Your agent's process can die mid-run."," An AI agent is a long chain of model calls, tool calls, and sub-agents — minutes or hours of work that an ordinary process loses the moment it crashes or redeploys. Retrying from the top is worse: side effects run twice and the conversation forgets what already happened. teaspill records every step an agent takes, so after a crash the run resumes from the last completed step — same conversation, no repeated side effects.",[175,195,196,199],{},[179,197,198],{},"Multi-agent coordination turns into plumbing."," The moment one agent delegates to another, you're building queues, registries, and callback tracking — and debugging the races between them. In teaspill, spawning a sub-agent and sending a message are built-in operations with guaranteed delivery: a parent spawns children, goes to sleep, and is woken when results come back.",[175,201,202,205,206,210],{},[179,203,204],{},"Streaming agent activity to a UI means building an event pipeline."," Users expect to watch an agent think, call tools, and answer token by token — which usually means hand-rolling websockets, buffers, and replay logic. Every teaspill agent writes a live ",[207,208,209],"a",{"href":56},"timeline"," of everything it does, and your frontend subscribes to it: replay history, follow live output, or join a conversation that started an hour ago.",[175,212,213,216,217,220],{},[179,214,215],{},"\"Where is the state?\" should have one answer."," Systems like this tend to scatter the same state across caches, databases, and streams, then struggle to keep the copies agreeing. teaspill gives each kind of data exactly one owner — working state, history, and the registry each live in one place — so there is no replication to keep consistent and no ambiguity about which copy is true. The ",[207,218,219],{"href":24},"architecture overview"," shows the whole picture.",[184,222,224],{"id":223},"what-using-it-looks-like","What using it looks like",[175,226,227,228,232,233,236,237,240,241,244],{},"You define each agent type in TypeScript with ",[229,230,231],"code",{},"defineAgent",": typed spawn arguments, typed state, a model loop, and any tools you add. A small ",[229,234,235],{},"serve()"," call turns your definitions into a running service and registers it with the platform. From then on, your backend, your UI, and the ",[229,238,239],{},"teaspill"," CLI drive agents through the ",[179,242,243],{},"gateway"," — the single front door; nothing talks to the internal services directly.",[175,246,247,248,254,255,257],{},"Under it all, teaspill is built on ",[207,249,253],{"href":250,"rel":251},"https:\u002F\u002Frestate.dev",[252],"nofollow","Restate",", an open-source durable-execution engine that runs as one of the stack's services. You don't need to know Restate to use teaspill — when you get curious, ",[207,256,45],{"href":46}," covers what it does for you.",[259,260,261],"note",{},[175,262,263,264,267],{},"The mental model that makes everything click — wakes, sleeping agents, and why nothing ever blocks — is a five-minute read in ",[207,265,266],{"href":36},"Durable agents & the wake model",".",[184,269,271],{"id":270},"whats-in-the-box","What's in the box",[273,274,275,284,292,298,311,317],"ul",{},[276,277,278,283],"li",{},[179,279,280],{},[229,281,282],{},"@teaspill\u002Fagents-sdk"," — define, serve, and register agents in TypeScript.",[276,285,286,291],{},[179,287,288],{},[229,289,290],{},"@teaspill\u002Ffrontend-sdk"," — subscribe to timelines and live agent lists from a browser or server, plus React bindings and an actions client for spawn\u002Fsend\u002Fcontrol.",[276,293,294,297],{},[179,295,296],{},"The gateway"," — the single HTTP entrypoint: commands, streams, live queries, and registration, behind API-key auth.",[276,299,300,306,307,310],{},[179,301,302,303,305],{},"The ",[229,304,239],{}," CLI"," — a dev loop (",[229,308,309],{},"teaspill dev",") plus spawn\u002Fsend\u002Fcontrol\u002Flogs from your terminal.",[276,312,313,316],{},[179,314,315],{},"A reference deployment"," — a complete, copyable example of the two services you deploy, with demo agents included.",[276,318,319,322,323,267],{},[179,320,321],{},"The compose stack"," — five infrastructure services in one ",[229,324,325],{},"docker-compose.yml",[184,327,329],{"id":328},"what-teaspill-is-and-isnt","What teaspill is — and isn't",[175,331,332,333,336],{},"teaspill is a ",[179,334,335],{},"framework plus a self-hosted platform",", not a SaaS. There is no hosted tier: you run the stack, your keys stay yours, and your data never leaves your infrastructure.",[175,338,339,340,343,344,347],{},"Two design stances follow from that, and it pays to know them up front. Each deployment serves ",[179,341,342],{},"one tenant"," — you isolate customers by running separate stacks, not by configuring tenancy inside one. And there is ",[179,345,346],{},"no built-in permissions model",": the gateway authenticates callers with API keys, and your backend decides who may do what. Writes never bypass your code.",[175,349,350],{},"teaspill is also not a model provider. The native engine works with any provider; the demo agents use Anthropic models.",[184,352,354],{"id":353},"next-steps","Next steps",[175,356,357,358,360,361,364,365,367],{},"Head to ",[207,359,13],{"href":14}," to boot the stack — the ",[207,362,363],{"href":19},"quick start"," then takes you from an empty file to a live, multi-agent timeline. If you'd rather understand the machine before running it, start with ",[207,366,29],{"href":36}," and read in order.",{"title":369,"searchDepth":370,"depth":371,"links":372},"",1,2,[373,374,375,376,377],{"id":186,"depth":371,"text":187},{"id":223,"depth":371,"text":224},{"id":270,"depth":371,"text":271},{"id":328,"depth":371,"text":329},{"id":353,"depth":371,"text":354},"What teaspill is, the problems it removes, and what building on it looks like.","md",null,{},{"icon":11},{"title":10,"description":378},"lPC3MrqvSNBYiqQHlemqqI1qEzlsLEV4gg0oeVzuqyQ",[380,386],{"title":13,"path":14,"stem":15,"description":387,"icon":16,"children":-1},"Clone the repository, boot the five-service stack with Docker Compose, and confirm the platform is healthy.",1784473421259]