Overview
Centraid
Centraid
Your apps. Your data. Your devices.
Centraid turns your OpenClaw into a personal app store. Tiny, single-purpose apps that live on your own server and show up on your devices.
OpenClaw is messaging-first — you talk to it from WhatsApp, Telegram, Slack, wherever you already chat. That's perfect for one-line jobs: "log my weight", "what's on my calendar?", "remind me at 7pm".
Some things don't fit in a sentence. You want to see them — a month of expenses, your habit grid, last week's runs on a map, the photos from the trip. For those, a glance beats a paragraph and tapping beats typing.
Centraid is the rich-UI layer for those. Same OpenClaw underneath — your connections, your agents, your data — with a screen wrapped around the apps that need one.
Two AI helpers come built in:
- One uses your apps for you. Ask in plain language — "log today's weight", "what did I spend this week?" — and it works the buttons.
- One makes apps just for you. Describe a new app or a change to an existing one — "track my reading", "add a notes field", "show me a weekly chart" — and it ships the change. No code to write yourself.
Start with what's in the box, clone a template, or ask for something new — then keep shaping it as you go.
Clone a template, open the app, change a value — in five minutes.
How the gateway, apps, handlers, and chat fit together.
File layout, queries, actions, migrations, change streams.
The three-tool dispatcher and the full /centraid/* HTTP surface.
What you get
Think of it like Notion — but for whole apps, not pages. A workspace of your own, stocked with small purpose-built apps you can use, change, or have an AI build for you.
- Apps that work on their own. Automations let an app keep running in the background — fire on a schedule, react to an email, run when something happens online. Some apps are nothing but an automation: a job, no screen.
- AI built in, not bolted on. A chat AI uses your apps for you. A builder AI creates and customizes them — add a field, change a chart, sketch a whole new app from a sentence.
- Nothing to connect inside Centraid. Your Slack, Gmail, calendar, GitHub — already wired into OpenClaw. Every Centraid app inherits those connections. No accounts to set up, no passwords for Centraid to store.
- Apps that remember you. Each app keeps its own chat history and a log of what its automations did — locally, on your device, not on a server.
- Your data, your devices. Each app keeps its own data on your machine. Nothing leaks between apps, nothing leaves your devices unless you say so.
- One app, everywhere. Desktop, mobile, or a server you own — same app, same data, same way to use it.
Under the hood
For builders and tinkerers — the technical structure that makes the rest possible.
- Apps as folders. Source tree:
index.html+app.css+app.js+queries/*.js+actions/*.js+migrations/*.sql+automations/<id>/+app.json. Code is versioned in a per-gateway git store; the app's per-appdata.sqliteandruntime.sqlitelive in a stable data dir alongside, outside any worktree. - Apps expose tools. Each query and action is a handler — declared in
app.jsonwith a name, description, input/output JSON Schemas, and (for actions) awrites:table list. Your UI, an AI agent, and the dispatcher all see the same catalog. - Two SQLite files per app.
data.sqliteholds app-owned data (migrations apply here);runtime.sqliteholds the app's per-app conversation ledger (conversations ⊃ turns ⊃ items) plus automation state. Both persist across code versions. Handlers get a scoped DB proxy ontodata.sqlite; nothing leaks across apps. - Versioned code, clean publish. A draft is a session branch in the git store; Publish fast-forward-merges it onto
main, and the runtime serves handlers + static files from the livemainworktree. The SQLite files are untouched by a version swap. - Read/write split enforced. Query tools can only read; action tools are the only place writes happen. A governance directive blocks the foot-gun at commit time.
- Live data, no plumbing. Every action invalidates the tables it touched and pushes an event on
/centraid/<id>/_changes. Subscribed iframes re-fetch automatically. - One calling convention. Three generic dispatcher tools (
centraid_describe,centraid_read,centraid_write) fan out to every app's tool catalog — exposed both as OpenClaw agent tools and as HTTP endpoints. AI agents and your UI use the same surface. - Automations are first-class apps. Apps can carry
automations/<id>/directories — each one a manifest plus a generated handler — that fire on a cron schedule or an inbound webhook. Standalone automations are headless apps: same structure, same lifecycle, noindex.html. The bundledauto.*templates ship that way. - Run anywhere. Local: embedded in the Electron desktop. Remote: as the
@centraid/openclaw-pluginon an OpenClaw gateway. Identical contract.
How a request flows
flowchart LR
UI["App iframe / Chat / Agent"]
Dispatcher["Three-tool dispatcher"]
Handler["queries/* or actions/*"]
DB[("data.sqlite (per app)")]
Bus["changeBus → /centraid/<id>/_changes (SSE)"]
UI -- "centraid_read · centraid_write" --> Dispatcher
Dispatcher -- "Ajv-validate input · pick handler" --> Handler
Handler -- "scoped db proxy" --> DB
Handler -- "writes" --> Bus
Bus -- "subscribed iframes re-fetch" --> UIWhere to start
Install Centraid, run the desktop shell, pair the mobile app.
Gateway, apps, automations, chat, agent runtimes — what each is and why.
Clone-and-deploy starting points: Hydrate, Todos, Journal, plus the automation pack.
Local-only desktop, or remote via the OpenClaw plugin.