Interfaces
DGI has one engine and several doors. Pick the door that matches where your people already work; the cards, the decisions and the safety rules are the same behind each one.
At a glance
| Interface | The person… | You build | Needs a chat space | Model use |
|---|---|---|---|---|
| Hosted chat | Chats on the Orkestia chat page of your app | Nothing: configure an actor | Yes | Jev; LLM by opt-in |
| Embedded chat | Chats inside your React app | A page that mounts the component | Yes | Jev; LLM by opt-in |
| Your own chat client | Chats in your UI, native app or other stack | The client, reading the wire contract | Yes | Jev; LLM by opt-in |
dgi.chat API | Types into any screen you own | Two calls and a card renderer | No | Jev; LLM by opt-in |
| Living Surface | Watches a page of cards that keeps itself current | A page that draws cards and listens to a stream | No | Jev; LLM by opt-in, budgeted |
| One card | Sees a single read as a card in your screen | One call and a card renderer | No | None |
| AI assistant over MCP | Asks Claude, ChatGPT or an agent | Nothing: connect the assistant | No | The assistant's own |
Chat
Attach an actor to your chat space and set its responder to dgi (or hybrid, which lets DGI take the structured turns and your Staff configuration take the rest). Its replies become cards, and the composer gets a / command palette.
Three ways to deliver it:
- Hosted chat: the Orkestia chat page on your app's address, with every card built in. Option A
- Embedded component:
<BuzzChat>inside your React app, with every card built in and your own renderers where you want them. Package access is on request during early access. Option B - Your own client: any UI that reads and writes the documented wire contract. Option C
Configuration for all three: the responder reference.
Any app: dgi.chat
No chat space, no relay: a request and a response. An organization admin saves a profile once (the allowed workflows, the decision settings, chips, default inputs, locale, instructions). Your app then sends each message with dgi.chat.turn and each card answer with dgi.chat.respond, and draws the card it gets back.
Use it for a support widget, a mobile screen, an internal tool or a backend that needs a structured answer. Walkthrough: Quickstart. Full reference: Option D.
Living Surfaces: dgi.surface
A page of live cards that DGI grows from an intent ("keep the platform healthy", "incident room for the checkout outage"), keeps current, reshapes as the data changes, and retires when the job is done.
- You create it with an intent and a policy: the workflows its cards may read, how many structural changes DGI may make per step, which card types it may draw.
- A heartbeat keeps it current every 5 minutes, and pauses when nobody is looking.
- Changes are pushed to open pages over
wss://stream.orkestia.dev/streaming/surface/{surface_uuid}. - Each viewer's cards are read as that viewer.
- A useful surface can be crystallized into a reusable composition.
Members only. Full reference: Living Surfaces.
One card: dgi.view.render
When you already know which read you want, and only need it drawn, call dgi.view.render with the workflow, its input and a view kind. It runs the read as the caller and returns the card, with no conversation and no model:
start_workflow("dgi.view.render", {
"workflow_type": "ticket.search",
"input": {"status": "open"},
"kind": "chart",
"group_by": "priority",
"chart": "bar"
})
→ {"renderer": "dgi.chart", "render": {"kind": "chart", "chart": "bar", "title": "…", "x": [...], "series": [...]}, "text": "…"}
| Input | Values |
|---|---|
workflow_type | A read-only workflow the caller may run |
input | Its inputs. Identity inputs are re-injected from the caller |
kind | table, chart, kpi, logs, datagrid, detail, schema, dag, timeline, diff, query |
group_by, chart, shape, top_n | Chart and KPI options: count by a column, bar/line/pie, a time series, keep the largest N |
include_total | KPI: ask the read for its own total. A total equal to the read's limit is labelled as capped |
grid | Datagrid: sort, filters, page and columns |
title, lang | Card title, and en, pt or es |
It is safe for end users of your app when the read itself is exposed to them. Draw the result with the card catalog shapes.
AI assistants over MCP
Connect Claude, ChatGPT, Cursor or your own agent to the Orkestia MCP server. The assistant discovers the same catalog DGI uses, reads schemas, starts workflows and watches runs, and it can also call the dgi.* workflows above. Your organization and permissions come from the assistant's token. Connect an AI assistant
How to choose
- Your team already chats in Orkestia. Hosted chat, then embed it when it should sit inside your product.
- You have your own product UI.
dgi.chatfor conversations,dgi.view.renderfor fixed cards. - People need to watch something, not ask about it. A Living Surface.
- An engineer or an agent works from an AI assistant. MCP.
- A flow repeats every day. Promote it to a composition so it runs with no reasoning at all. See How DGI works.
How DGI works
The life of one DGI request. Who it runs as, which workflows it may reach, how Jev and the optional LLM decide, how reads become cards and writes become confirms, and how the person's answer comes back
Quickstart
Your first DGI answer from your own app in four calls. Save a chat profile, send a message, draw the card, answer it. With curl, and with prompts for an AI assistant over MCP
