How DGI works
TL;DR
- One turn = one workflow run tree. Sending a message starts a run. Everything DGI does for that turn (classify, reason, call tools, answer) is nested runs under it, visible in Lumen.
- Two paths. An intent gate sends small talk down a fast path (one model call, no tools) and anything that touches your resources down a deep path (a bounded tool loop).
- DGI acts only through the catalog. The deep path has a fixed set of tools: discover types, read schemas and prerequisites, start workflows, ask you for inputs, render results, and build a composition. It cannot call anything that is not a registered workflow.
- Two per-turn modes you can toggle: Deep reasoning and Proactive.
- DGI has no "coding mode". Coding sessions are Staff coding agents, which DGI can help you plan and watch but does not run. They have two modes: laptop and hosted. See Coding sessions.
This page extends DGI — Dialog Generative Interface, which covers what DGI is and how plans become compositions.
Anatomy of a turn
- Your message
- Save message
- Intent gate
- Fast path: single answer
- Deep path: tool loop
- Catalog tools / workflows
- Finalize + persist reply
- Live stream to the UI
- Your message→Save message
- Save message→Intent gate
- Intent gate→ chit-chat, concepts →Fast path: single answer
- Intent gate→ needs your data or an action →Deep path: tool loop
- Deep path: tool loop→ calls →Catalog tools / workflows
- Catalog tools / workflows→ results →Deep path: tool loop
- Fast path: single answer→Finalize + persist reply
- Deep path: tool loop→Finalize + persist reply
- Finalize + persist reply→Live stream to the UI
- Save the message. The message is stored on the conversation before any reasoning starts, so a refresh or a dropped connection never loses it.
- Intent gate. One short model call classifies the message: does it need live platform data or an action, or can it be answered from general knowledge?
- Fast or deep path (below).
- Finalize. The reply, its reasoning trace, suggestions, and the current composition (if any) are persisted together.
- Stream. The UI receives the turn as it happens (see Streaming).
The turn is dispatched asynchronously: the request returns a run id immediately and the work continues in the engine. That is why a long turn survives a closed tab, and why you can reattach to it later.
The intent gate
| Verdict | Meaning | Examples |
|---|---|---|
| Needs a workflow or skill | Anything that lists, queries, describes, creates, changes, or deletes a platform resource, including questions about your own resources ("how many connections do I have?") | "List my Kubernetes connections", "deploy this image" |
| Does not | Greetings and general or conceptual questions | "hi", "what is a workflow?" |
The gate fails open. If the classifier errors or returns something unparseable, DGI treats the message as needing tools, so a real task is never starved of its tools.
Fast path
A single completion with no tools and a small output budget. Cheaper and quicker, and it cannot touch your resources.
Deep path: the tool loop
The model runs in a loop. Each round it either calls tools or produces the final answer. The loop is bounded three ways: a turn budget, a per-round output budget, and a wall-clock deadline for the whole turn. If any limit is hit, DGI stops calling tools and closes with an honest "budget exhausted" answer that says what it did and did not finish, instead of hanging.
The tool surface is fixed:
| Group | Tools | Purpose |
|---|---|---|
| Discover | list_workflow_types, search_workflows, get_workflow_schema, get_workflow_prerequisites | Find capabilities and read their typed inputs and prerequisites |
| Observe | get_workflow_status, get_workflow_history, list_stuck_workflows | Follow and diagnose runs |
| Act | start_workflow | Start a registered workflow with schema-valid inputs |
| Ask and show | request_inputs, present_view, open_connection_setup, select_entity, suggest_next_actions | Collect missing inputs, render tables and choices, send you to connect a provider |
| Context | set_focus, get_session_timeline, get_session_runs, fetch_history_span | Keep and recall what the conversation is about |
| Compose | generate_composition, compose_add_step, compose_remove_step, compose_reorder, compose_set_input, show_composition, save_composition, load_composition | Build a reusable composition step by step |
Three rules shape how these tools behave:
- Schema first. Before
start_workflow, DGI reads the schema and the prerequisites. A missing connection or input becomes a question to you (request_inputs) or a setup link, never a guess. - Same gates as everyone else. Every
start_workflowruns under your identity and org. Staff approvals and budgets apply. An action that needs approval pauses as a pending action for you to approve. - Tool results are clipped. Large results are truncated before they go back to the model, with an explicit truncation note, so one big list cannot crowd out the rest of the context.
Conversation context
Chat text alone is a weak place to keep "which connection did we pick?". DGI keeps a working set for the session: the focus of the conversation (for example, deploying an image to a cluster), the entities you selected, and candidate lists from earlier tool results.
- Identifiers never go through the model as free text. The model sees short references and masked labels for resources; the real ids are substituted server-side when a workflow starts. This prevents a model from reconstructing or mangling an id it only saw in prose.
- The working set persists per session, so a follow-up like "now the same for staging" resolves against what you already selected.
- History is queryable. Older turns and the runs they started can be recalled on demand (the Context tools above) rather than replayed in full on every turn.
Per-turn modes
The composer shows two toggles. They apply to the next message you send and can be changed at any time without restarting the session.
| Mode | What changes | Use it when | Cost |
|---|---|---|---|
| Deep reasoning | Raises the turn budget of the tool loop so DGI can explore more of the catalog and take more steps before answering | Building something multi-step, comparing options across several resources | More model calls and latency |
| Proactive | After answering, DGI proposes relevant next actions, shown as clickable suggestion chips under the reply | You are exploring and want guided next steps | A small extra completion |
Neither mode bypasses a gate: they change how much DGI reasons and suggests, not what it is allowed to do.
Streaming
The whole turn tree streams to the browser over a single live connection. You see:
- the phase ("Understanding…", "Reasoning…", "Applying skills…", "Composing the answer…");
- the activity tree of nested runs and their states;
- reasoning entries: the model's thoughts and each tool call as it happens;
- the composition being built, updated as steps are added.
The browser does not poll. If you close the tab mid-turn, the turn keeps running, and reopening the session restores the view and resubscribes to the live run.
Token-by-token output is not available yet: replies arrive whole when the model finishes a round.
Surfaces
The same loop backs several interaction surfaces in the DGI app:
| Surface | What it is for |
|---|---|
| Chat | Ask, act, and get tables and forms inline |
| Connect | Guided setup when a prerequisite connection is missing |
| Flow | Live view of the run tree for a turn |
| Composition builder | Review, reorder, parameterize, validate, and save the plan DGI is assembling |
Coding sessions
DGI plans and observes; it does not edit code. Code changes are done by Staff coding agents, which have two operating modes. Both are provider-blind: the agent never holds git credentials, and only a trusted broker talks to your git remote.
| Mode | Broker | Plan acknowledgement | Best for |
|---|---|---|---|
| Laptop (attended) | ltinteg-devkit runner serve on your machine | Local, at your keyboard | Working next to the agent |
| Hosted (unattended) | An agent runner group using the DevKit image | Recorded on the ticket in Staff | Ticket-to-pull-request delivery without you present |
Both follow the same lifecycle: claim a ticket, investigate in a leased worktree, write a plan, wait for human acknowledgement, implement against the acknowledged head, and publish exact git objects through the broker. See Coding agents, Wire a repository, and Run a ticket end to end.
How DGI helps around a coding session:
| You want to | Ask DGI |
|---|---|
| Understand what is registered | "List my repositories and runner groups" |
| Check whether a repo is ready for hosted delivery | "What is missing for repository X to run hosted ticket delivery?" (it reads prerequisites and reports gaps) |
| Follow a delivery | "Show the status and history of the run for ticket N" |
| Find a stuck run | "Which of my workflows are stuck?" |
Limits and guarantees
| Topic | Behavior |
|---|---|
| Scope | Your org and identity. DGI cannot see other tenants or run types you cannot run |
| Secrets | Never placed in a prompt or a plan. Plans bind to connections |
| Determinism | Reasoning is non-deterministic. Execution of started workflows is deterministic |
| Reuse | A plan you save as a composition runs later with no model call |
| Failure | A failed run is reported with the step and reason. The turn does not silently retry actions with side effects |
Ask your AI assistant
Explain the difference between DGI's fast path and deep path using one example of each from my own questions.
List the dgi.* workflow types in my org and tell me which ones are used by the chat path.
Which repositories in my org are registered for coding agents, and which runner groups can serve them?
DGI — Dialog Generative Interface
How Orkestia turns a natural-language goal into a typed, executable workflow plan, how that plan compiles into a reusable deterministic composition, and how DGI relates to assistants over MCP
Staff & AI Workforce Governance
How Orkestia Staff turns a fleet of autonomous AI agents into a scoped, auditable organization with roles, approval gates, and human-in-the-loop oversight, enforced inside the workflow engine
