Build a provider
Adapt an external system into typed actions, searchable entities, and reactive events. Persist local state with a built-in database helper, and file blobs with buckets.
Think about the apps on your phone. Each one exists to serve a purpose — it holds some data, does some things, reacts to some events. That’s fine right up until you want something their designers didn’t build for you. Automate a task? It all runs through the interface. Pull data out of one app, reshape it, push it into another? Only if two vendors agreed to make their data interchange. The capability is real, but it’s trapped behind the app.
Grundlag inverts that. The primitives — the things you can do (actions), the things you know (data), and the things that happen (events) — live in a shared layer instead of inside any one app. You can still build an app-like experience on top and get back everything you have today, but the walls are gone: data can be read, transformed, and moved freely — into another Grundlag-based system, or out of it entirely. Data, action, and reactivity freedom.
Thinking “but everything already has an API”? Why Grundlag? answers that head-on — it’s the difference between integrating each service once and re-integrating it into every platform you touch.
Grundlag doesn’t hand you a server to host or an assistant to run — it hands you the pieces to build your own, to your exact specification. A provider models a capability once — a calendar, a messaging service, a device network — as typed actions, searchable entities, and reactive events, with nothing about a specific app leaking in. It’s the foundation the rest stands on, which is where the name comes from. And because the primitives are shared, a provider you write once slots into everything you build on top afterward — no re-integration.
Everything above the providers is a block you compose and customize, all driving those same primitives over whatever a server has loaded:
Model each capability once; build the interactions later. AI is one thing you can build here, not the point of it.
Want to see it in practice? A day with Grundlag follows one server of shared providers as it powers a voice assistant, a to-do app, and a nightly script — all at once.
Build a provider
Adapt an external system into typed actions, searchable entities, and reactive events. Persist local state with a built-in database helper, and file blobs with buckets.
Build an agent
Turn provider actions into tools an LLM can call. Stream output, persist the conversation, and pause for human approval mid-run.
Run scripts safely
Execute TypeScript in a hermetic, deterministic sandbox with a replayable call log — resume long-running scripts exactly where they left off.
Host it yourself
Compose your own HTTP host from the server package, register your providers, and expose them over a typed API and a script eval endpoint.
Build across the network
Generate a client typed against a running host, call its actions and entities, and run a sandbox or agent over HTTP-backed tools — the same runner on either side of the gap.