EKA Agent ExperienceInterface captures · owner-only application
Twindexer · Metrolane · EKA

Enterprise AI needs more than a chat box.

EKA's Agent Experience turns governed enterprise reasoning into a conversational product: questions, visible agent activity, structured records, calculations, evidence, result states, persistent conversations, and contextual assistance from the enterprise pages themselves.

It was built on top of the existing runtime rather than in place of it. The runtime still owns interpretation, planning, enterprise authority, governed reads, access, evidence, calculations and result semantics. The interface is responsible for making those semantics understandable and usable.

EKA v0.4.1 · UI-0 … UI-5 complete8 golden casesgenui-ds 0.20.0
EKA GuideCompanion pageRead how EKA reasons: grounding, authority, evidence, access, planning, tools, calculations and result semantics, walked through real runs.
On this page

The story is one claim in three parts: EKA was built headlessly first so its enterprise reasoning could be tested on its own, and the Agent Experience was then built on that governed runtime without moving enterprise truth into the browser or into a UI framework.

More than a chat box

A chat interface mostly has to display messages. An enterprise assistant has to display what an answer rests on.

A useful EKA answer may need to show all of this at once:

  • the enterprise object it resolved, and which key that is
  • which source system a fact came from, and whether the value is canonical or source-native
  • which document passage supports a statement
  • which calculation was executed, over which rows
  • that a downstream business record is absent
  • that a capability is not available on this subject
  • that part of the answer is restricted from the person reading it
  • whether the result is complete, partial or unavailable

None of that survives being flattened into a paragraph of generated text. So the Agent Experience is conversational at the top and structured underneath: prose a person can read, over records, evidence, calculations and a stated result.

EKA Workspace, replaying the captured run for “This opportunity is Closed Won. Why hasn't it reached ERP?”: A completed turn. The answer stays conversational while the enterprise context, the structured records and the limitation stay explicit — and the context chip above it says the question was sent about a particular CRM opportunity.
A completed turn. The answer stays conversational while the enterprise context, the structured records and the limitation stay explicit — and the context chip above it says the question was sent about a particular CRM opportunity.

This capture replays a previously executed real EKA run — the evidence pack's own guide-v4-01-closed-won-no-erp — so the page does not depend on a model answering the same way twice. The runtime produced this answer on the committed estate; the replay calls no model, which is what the frame's Model · scripted (captured run) line means.

Two surfaces, one experience

EKA is reached two ways, and they are one product: one thread store, one set of renderers, one runtime behind both.

The Workspace

The full conversational environment, inside the Twindexers shell rather than a separate chat application. Saved conversations, the composer, active context, activity, structured answers, evidence, result states, follow-ups, model policy, and the navigation back into Metrolane.

The Sidecar

The same thread beside the enterprise page a reader is already on. It opens with that page as its context, does not cover the record, and hands the conversation to the Workspace when the reader wants more room.
Organization · Opportunity · Sales order · Source record · Document
        ↓
    Ask EKA
        ↓
 Sidecar, opened with the page it was opened on as its context

Opening a Sidecar conversation in the Workspace continues it. It is not copied.

Workspace anatomy

Before the turn

  • conversation history
  • new conversation
  • active context
  • question composer
  • model policy
EKA Workspace, replaying the captured run for “What do we owe Bharat Polymers, across how many invoices?”: Before the turn: the conversation rail and navigation on the left, the question in the composer, and the suggestions a reader can start from.
Before the turn: the conversation rail and navigation on the left, the question in the composer, and the suggestions a reader can start from.

After it

  • agent activity
  • natural-language answer
  • structured enterprise output
  • evidence
  • result status
  • suggested follow-ups
EKA Workspace, replaying the captured run for “What do we owe Bharat Polymers, across how many invoices?”: After it: the answer in prose, the canonical record it resolved, the calculation the runtime performed, and the evidence and result beneath them.
After it: the answer in prose, the canonical record it resolved, the calculation the runtime performed, and the evidence and result beneath them.

The contextual Sidecar

The Sidecar exists so a reader does not have to leave the record to ask about it. A page that knows which record it is showing offers to be asked; a landing, a collection or a search page declares nothing and offers nothing.

The Day-0 record page for CRM Opportunity · OPP-2026-900006, with Ask EKA in its top strip
CRM Opportunity · OPP-2026-900006, in the Day-0 Explorer. Ask EKA is in the page's own top strip — offered because this page declares the record it is about, and absent entirely on a deployment that does not serve EKA.
The EKA Sidecar open beside the record page, with the page named as its active context
The panel opens beside the record rather than over it: no scrim, no focus trap, no scroll lock, and the page stays readable. It names what it will ask about — SOURCE / CRM / opportunity / OPP-2026-900006 — under Active context, before a single word is typed.
A finished EKA turn inside the Sidecar, beside the record page
The finished turn, in a 400px column: the same activity, prose, structured record and evidence the Workspace renders, at a compact density. Sent with context above the answer is the turn recording what it was asked with.

All three replay guide-v4-01-closed-won-no-erp — the approved run EKA-GUIDE-01, whose recorded page context is exactly the one this Day-0 page declares. The record was chosen for that reason rather than for how it looks.

Below 1024px it becomes an overlay

There is no room for a 400px panel beside a phone-width page, so the Sidecar takes the screen instead of squeezing the record into a column that cannot hold it. The thread, the context and the controls are unchanged.

The EKA Sidecar as a full-height overlay at 390 by 844
390 × 844. The same panel, full height, with the same active context.

The conversation moves to the Workspace

Open in Workspace carries the saved conversation's own id. The Workspace does not receive a copy of the messages from the browser — it reopens the conversation from the database, re-authorized for whoever is reading now, which is the same path any saved conversation takes.

A finished live turn in the Sidecar, with Open in Workspace in its header
A live turn in the Sidecar. The Live estate badge and the notice beside it are there because the host page is the frozen Day-0 reference and the answer is not.
The same conversation open in the EKA Workspace, current in the saved conversation rail
The same conversation, opened from that link and current in the reader's own saved list. The id the two share is in the URL, which a viewport capture cannot show; that half of the claim is held by tests/e2e-eka/acceptance.spec.ts, which asserts the Workspace lands on ?c= the Sidecar's conversation id and replays the same turn.

This pair is a live capture, not a replay: a saved conversation id exists only in live mode, so replay could not show it. The run was planned and worded by google:gemini-3.5-flash-lite against the local estate on 2026-09-23, and the result was COMPLETE.

Visible agent activity

EKA shows what it is doing without showing what it is thinking. The activity stream is derived from the run's own execution trace — it is not the model narrating.

  • checking a business object
  • resolving an enterprise identity
  • reading a downstream system
  • retrieving a document
  • running a calculation
EKA Workspace, replaying the captured run for “What do we owe Bharat Polymers, across how many invoices?”: Mid-run. Each step is a governed tool the plan named, with the status the runtime gave it — not a narration of thinking.
Mid-run. Each step is a governed tool the plan named, with the status the runtime gave it — not a narration of thinking.

Agent activity reflects execution state. It is not chain-of-thought.

The answer itself arrives whole once the governed run finishes. V1 does not manufacture token-by-token streaming: there is nothing to stream until the runtime has finished deciding what may be said.

36 seconds, without sound, in replay. The transcript below describes it.
Transcript
  1. The question is typed and sent: This opportunity is Closed Won. Why hasn't it reached ERP? The run was sent with the page context CRM opportunity OPP-2026-900006.
  2. The activity rail runs, then the answer arrives with its result: COMPLETE.
  3. The answer reads: Opportunity OPP-2026-900006 is marked as CLOSED_WON in the CRM system, but the evidence does not establish why it has not reached the ERP system.
  4. The steps are opened: Reading the source record · Checking cross-system links · Nothing matched · Following the cross-system journey · Writing the answer.
  5. The evidence is opened: 9 items.
  6. The view returns to the answer.

Structured answers

The model chooses meaning. Twindexers chooses presentation.

EKA never asks a model for a layout, for markup, for component names or for visual hierarchy. The runtime returns a typed answer, and a deterministic adapter turns that into view models the design system renders.

EkaAnswer · typed evidence · feature resolutions · calculations · result status
        ↓
deterministic UI adapter
        ↓
Twindexers view models
        ↓
genui-ds components

What the adapter may produce

  • prose
  • RecordCard
  • fact groups
  • DataTable
  • calculation details
  • StepTrace
  • feature notices
  • evidence groups
  • result status
  • follow-ups

What it may only produce from structured evidence

A journey, a resolution or a timeline is composed from typed evidence or not at all.

  • cross-system journey
  • entity resolution
  • timeline

The second group is a rule rather than a preference: inferring a journey by reading the answer's prose would make a structural claim out of a sentence, which is exactly the confusion the structure exists to prevent.

Five answers, five lessons

Five real runs, each one a thing the interface has to be able to say. None was staged: each is a capture of a run the runtime executed against the estate.

Absence, without a cause invented to explain it

COMPLETE

This opportunity is Closed Won. Why hasn't it reached ERP? The evidence establishes that no operational link exists. It does not establish why, and the answer says so under Cause not established rather than filling the gap with a plausible reason.

36 seconds, without sound, in replay. The transcript below describes it.
Transcript
  1. The question is typed and sent: This opportunity is Closed Won. Why hasn't it reached ERP? The run was sent with the page context CRM opportunity OPP-2026-900006.
  2. The activity rail runs, then the answer arrives with its result: COMPLETE.
  3. The answer reads: Opportunity OPP-2026-900006 is marked as CLOSED_WON in the CRM system, but the evidence does not establish why it has not reached the ERP system.
  4. The steps are opened: Reading the source record · Checking cross-system links · Nothing matched · Following the cross-system journey · Writing the answer.
  5. The evidence is opened: 9 items.
  6. The view returns to the answer.

A calculation the runtime performed

COMPLETE

What do we owe Bharat Polymers, across how many invoices? The sum and the count are runtime-derived objects with a predicate, a row count and a currency — not arithmetic improvised in a sentence.

EKA Workspace, replaying the captured run for “What do we owe Bharat Polymers, across how many invoices?”: SUM(open_amount) and COUNT(*), each with the predicate it ran over, the number of rows it covered and the currency it is in. The figure is the runtime's; the model did not add anything up.
SUM(open_amount) and COUNT(*), each with the predicate it ran over, the number of rows it covered and the currency it is in. The figure is the runtime's; the model did not add anything up.

Two authorities in one answer, kept apart

COMPLETE

Why was WCL-2026-000002 rejected, and what does the warranty policy say? A customer's reported reason, a Support decision and a policy passage are three different kinds of fact. The answer shows them as three things.

EKA Workspace, replaying the captured run for “Why was WCL-2026-000002 rejected, and what does the warranty policy say?”: Two source records and a document passage in one answer. The customer's reported reason, the Support decision and the policy text stay three separate things rather than one summarised paragraph.
Two source records and a document passage in one answer. The customer's reported reason, the Support decision and the policy text stay three separate things rather than one summarised paragraph.

PARTIAL is a valid product result

PARTIAL

Show canonical sales order SO-2026-000001 and tell me its total value. The record exists; the canonical amount does not. EKA returns the record, names the missing feature and grades the request PARTIAL. It does not quietly substitute the ERP figure.

EKA Workspace, replaying the captured run for “Show canonical sales order SO-2026-000001 and tell me its total value.”: The record is there and the amount is not. The notice names where the value does live, and the result is PARTIAL rather than a number borrowed from ERP.
The record is there and the amount is not. The notice names where the value does live, and the result is PARTIAL rather than a number borrowed from ERP.

A cross-system journey as structured output

COMPLETE

Did CRM opportunity OPP-2026-900001 continue into ERP? Show the recorded handoff. This is the strongest case of EKA producing something richer than prose — and of the interface keeping entity resolution and operational continuation apart, because they are different claims about different things.

EKA Workspace, replaying the captured run for “Did CRM opportunity OPP-2026-900001 continue into ERP? Show the recorded handoff.”: The cross-system journey: the CRM opportunity, the operational handoff that was recorded, and the ERP sales order it reached. Composed from structured evidence — nothing here was parsed out of the answer's prose.
The cross-system journey: the CRM opportunity, the operational handoff that was recorded, and the ERP sales order it reached. Composed from structured evidence — nothing here was parsed out of the answer's prose.
34 seconds, without sound, in replay. The transcript below describes it.
Transcript
  1. The question is typed and sent: Did CRM opportunity OPP-2026-900001 continue into ERP? Show the recorded handoff. The run was sent with the page context CRM opportunity OPP-2026-900001.
  2. The activity rail runs, then the answer arrives with its result: COMPLETE.
  3. The answer reads: CRM opportunity OPP-2026-900001 is operationally linked to ERP sales order SO-2026-000001 with an active relationship type of OPPORTUNITY_TO_SALES_ORDER.
  4. The steps are opened: Checking cross-system links · COMPLETED · Writing the answer · COMPLETED.
  5. The evidence is opened: 1 item.
  6. The view returns to the answer.

Result semantics

The experience does not collapse every outcome into success or failure, because the runtime does not either.

COMPLETE

The request was answered.

PARTIAL

Part of it was answered, and the rest is named.

UNAVAILABLE

It could not be answered, and why is stated.

A step can be empty inside a complete answer

Show Kestrel's open invoices and total their open amount. The query was valid, permitted and executed, and it matched nothing. Nothing matched names the predicate that found none — and the request as a whole is COMPLETE, because the question was answered. The answer is that there are none.

EKA Workspace, replaying the captured run for “Show Kestrel's open invoices and total their open amount.”: A permitted query that matched nothing. “Nothing matched” names the predicate it ran, and the request as a whole is COMPLETE: the question was answered, and the answer is that there are none.
A permitted query that matched nothing. “Nothing matched” names the predicate it ran, and the request as a whole is COMPLETE: the question was answered, and the answer is that there are none.

Resolving a name is not finding the record

Show me the account for the customer named Kestrel. One organization resolved. Which CRM account was meant did not.

EKA Workspace, replaying the captured run for “Show me the account for the customer named Kestrel.”: One organization was resolved, and which CRM account was asked for was not. The limitation is named and the result is UNAVAILABLE, rather than one of the candidates being picked.
One organization was resolved, and which CRM account was asked for was not. The limitation is named and the result is UNAVAILABLE, rather than one of the candidates being picked.

Resolving the customer does not erase ambiguity in the requested source record.

Conversations that are re-gated

EKA conversations are not browser history. They are rows the server owns, and reopening one is an authorization question rather than a display question.

  • conversations
  • messages
  • runs
  • run evidence
  • result sets
  • task threads

Every value-bearing row carries the classification of the evidence it was produced from, and the read that fetches it applies the reader's current access in the same statement. So a saved answer that rested on a restricted document is not fetched and then hidden — it is not returned.

A saved EKA conversation reopened at INTERNAL, with its first turn withheld
The owner's own conversation, reopened after their access was lowered to INTERNAL. The turn that rested on a restricted contract is withheld — question and answer both — and the turns that did not are still shown. A live capture: it is a database read, and no model is called on reopen.

The whole sequence — asked at RESTRICTED + HR + PAYROLL, reopened at INTERNAL, then opened by a different principal who is simply told it is not available — is the 1 min 09 s recording in chapter 10 of the EKA Guide.

One experience, two widths

Every captured frame exists at 1440 × 900 and 390 × 844, in both themes, because both are the product.

EKA Workspace, replaying the captured run for “This opportunity is Closed Won. Why hasn't it reached ERP?”: A completed turn. The answer stays conversational while the enterprise context, the structured records and the limitation stay explicit — and the context chip above it says the question was sent about a particular CRM opportunity.
A completed turn. The answer stays conversational while the enterprise context, the structured records and the limitation stay explicit — and the context chip above it says the question was sent about a particular CRM opportunity.
EKA Workspace, replaying the captured run for “This opportunity is Closed Won. Why hasn't it reached ERP?”: The same turn at 390 × 844. The navigation rail collapses into the menu and the thread takes the full width; the answer's structure is unchanged.
The same turn at 390 × 844. The navigation rail collapses into the menu and the thread takes the full width; the answer's structure is unchanged.

A phone frame is a layout exhibit and not an evidence exhibit: at 390 the composer cuts the lower evidence rows, so an evidence frame at that width shows the layout honestly and the evidence badly. The Sidecar overlay above is the same distinction from the other side.

1440 × 900390 × 844lightdark

From question to governed answer

A turn is not one call to a model. It is a governed pipeline in which the model participates three times — interpreting, planning and writing — and decides none of what may be read.

User question
        ↓
optional page context
        ↓
─────────── trusted server boundary ───────────
        ↓
reference resolution
        ↓
feature / authority resolution
        ↓
validated plan
        ↓
governed tools
        ↓
access-aware enterprise reads
        ↓
typed evidence
        ↓
deterministic calculations
        ↓
grounded synthesis
        ↓
EkaAnswer
        ↓
deterministic UI adapter
        ↓
Workspace / Sidecar

Everything between the two ends is the runtime's: which subjects exist, which features are available on them, which tools may be called, which rows the reader may see, which arithmetic is performed, and what the result state is. The model proposes a plan; the validator is authoritative and may refuse it.

EKA GuideCompanion pageRead the grounding, authority, evidence and runtime design in depth — thirteen chapters and five real runs, stage by stage.

Context is not evidence

The Sidecar sends the page a reader is on. That is a hint about what they mean — never a grant, and never a shortcut past a read.

page context  →  reference hint  →  server resolution  →  access check
              →  governed read  →  evidence

The server does not trust a record because a browser said it was on screen. It resolves the reference itself, checks the reader's access to it, and reads it through the same governed path any other question would take. A field that happens to be rendered on the page did not thereby become evidence.

The interface must not imply that everything visible on the page became evidence for the answer.

Presentation enrichment

Once an object is already grounded in a turn, the interface may read it again — under the same viewer — purely to render it better.

EKA grounds ORG-000012
        ↓
UI presentation read, same viewer
        ↓
a fuller Organization card

Presentation enrichment can make a grounded object easier to read. It does not retroactively become evidence used to reach the answer.

So nothing a presentation read returns is shown as something the agent used, and a structured part — a journey, a resolution — renders only from structured evidence for that turn.

Activity versus evidence

Activity

What EKA is doing now. Derived from the run's execution trace, useful while waiting, and gone once the turn is done.

Evidence

What supports the finished answer. Typed, classified, saved with the turn, and re-authorized every time the turn is read again.

an activity logproof of a claim

a step that rana fact that was established

Why the difference is load-bearing

A step can run, succeed and find nothing — and one that does is exactly how EKA establishes an absence. Reading the activity list as support would turn we looked and there was nothing into we found something.

The technology stack

Nothing here was chosen to make a demo work. Each layer owns one thing, and the boundaries between them are the point.

Application

  • Next.js 15
  • React 19
  • TypeScript
  • Vercel

Agent Experience

Presentation and interaction. Neither decides enterprise truth.

  • genui-ds ui-web 0.20.0
  • genui-ds tokens 0.10.0
  • Tailwind CSS 3.4
  • assistant-ui

Enterprise data

  • PostgreSQL
  • Supabase
  • pgvector

EKA runtime

Server-side TypeScript. The whole of what may be asked and answered.

  • runEka
  • Queryable Subject Registry
  • governed Tool Catalogue
  • Explorer read services
  • document retrieval
  • evidence normalization
  • deterministic derivation

Persistence

Postgres-backed, in a schema of its own.

  • agent.conversation
  • agent.message
  • agent.run
  • agent.run_evidence
  • agent.result_set
  • agent.task_thread

Runtime activity

  • read-only trace observer
  • server-sent events

Models

Behind a provider adapter, chosen by server-side policy.

  • provider adapter boundary
  • model policy
  • fallback ladder
  • qualification gate
  • actual-model recording

What each layer owns

The EKA runtime owns

  • enterprise meaning
  • interpretation
  • planning
  • authority
  • tools
  • access
  • evidence
  • calculations
  • result semantics

genui-ds owns

  • the Twindexers visual language
  • RecordCard
  • StepTrace
  • MessageTurn
  • Prose
  • DataTable
  • notices
  • badges
  • responsive composition

assistant-ui supports

  • conversation interaction mechanics
  • thread / runtime integration
  • composer and thread behaviour

assistant-uithe EKA reasoning engine

assistant-uithe Twindexers visual authority

genui-dsan authority on enterprise truth

The three components this experience needed — RecordCard, StepTrace and MessageTurn — were specified back to genui-ds and released there rather than copied into this app, so the design system stays the one place the visual language lives.

The client/server boundary

The browser renders. It does not reach the enterprise.

┌─────────────────────────────────────────────┐
│ Browser                                     │
│   Workspace / Sidecar                       │
│   assistant-ui interaction                  │
│   genui-ds presentation                     │
└───────────────────┬─────────────────────────┘
                    ▼
┌─────────────────────────────────────────────┐
│ Next.js trusted server boundary             │
│   viewer resolution                         │
│   conversation persistence                  │
│   model policy                              │
│   request / response adaptation             │
└───────────────────┬─────────────────────────┘
                    ▼
┌─────────────────────────────────────────────┐
│ EKA runtime                                 │
│   interpretation · planning                 │
│   Queryable Subject Registry                │
│   governed tools                            │
│   evidence normalization                    │
│   deterministic calculations                │
│   grounded synthesis                        │
└──────┬───────────┬────────────┬─────────────┘
       ▼           ▼            ▼
  Canonical     Source      Documents
   records      systems    / retrieval
       └───────────┴────────────┘
                   ▼
               Evidence
                   ▼
               EkaAnswer
                   ▼
        deterministic adapter
                   ▼
       structured Agent Experience

The trusted viewer

The security boundary is not an instruction in a prompt. It is where the reads happen.

the browser cannot assert a principal
        ↓
the server resolves a trusted viewer
        ↓
access-aware reads
        ↓
permitted evidence only
        ↓
model synthesis

Material the viewer may not use is filtered by the governed read layer before it can become evidence, so the model is never asked to keep a secret it was told. A request that carries a principal identifier is refused rather than ignored, because an ignored field looks exactly like an honoured one.

The browser cannot switch to another enterprise principal by sending a principal identifier.

A development-only View as control exists, and it accepts only the governed allowlist of real principals. Being the owner does not bypass authorization.

Static Day-0, live EKA

Adding EKA did not turn Day-0 browsing into a live-database application.

The Day-0 Explorer

A frozen reference estate, compiled to files and served statically. It reads no database, and exactly one module in its app may — the one the EKA routes load.

EKA

The live Metrolane estate, through trusted server-side governed reads. A different estate, on purpose, and the interface says so where the two meet.
The notice the Sidecar carries

EKA answers from the live Metrolane estate. This page shows the frozen Day-0 reference.

One compact notice at the panel level rather than a label on every answer, and it goes away on the day the two estates are explicitly aligned.

Activity streaming

runEka
   │
   ├── read-only trace observer
   │        ↓
   │       server-sent events
   │        ↓
   │   live activity in the UI
   │
   └── completed EkaAnswer
            ↓
       final structured response

The observer is read-only. With no subscriber attached, EKA's semantics are identical.

That is what makes the activity rail safe to show: it cannot change the run it is describing, so nothing about an answer depends on whether anyone was watching it being produced.

Model architecture

The Agent Experience is not wired to one model, and the browser cannot choose an arbitrary one.

Agent Experience  →  model policy  →  provider adapter  →  qualified model
  • the browser may select only an allowed policy, and a policy is chosen per conversation
  • provider credentials stay server-side
  • every run records the model that actually answered, which under a fallback is not always the one asked for

A model is not supported because its API responds. It is eligible once it passes the smoke and golden qualification the release policy requires.

That gate is switched on for release, and today no model has passed it — so the selector offers Auto and nothing else, and an unqualified model produces an explicit retryable failure rather than a degraded answer.

The structured UI adapter

runtime output  →  EkaAnswer  →  UI adapter  →  view model  →  genui-ds components

The adapter is deterministic and shared: the same function turns a captured run into a view model for a test fixture, a replay and a live turn, which is what makes a golden run usable as a UI regression test at all.

What it may not do

Do not infer a journey, a resolution or a timeline by parsing an answer's prose.

A structured part renders from structured evidence for that turn, or it does not render.

Deliberately deferred

Three capabilities are deliberately absent, and each is absent for a reason.

File attachments

An enterprise-safe attachment needs upload, storage, a type and size policy, extraction, indexing, access, evidence treatment and persistence.

A paperclip button is not the capability.

Bring-your-own provider keys

Credentials stay server-side in the current owner-only phase. Public activation is a separate decision and is not scheduled.

A run inspector

Deferred until there is a safe and useful one. It would show interpretation, feature resolutions, tools, evidence, calculations, timings, the actual model and the build.

Never private chain-of-thought.

  • no business mutations
  • no external web evidence
  • no implicit currency conversion
  • no model-authored SQL
  • no effective-policy-at-time
  • no personalization

Evaluation is part of the experience

The enterprise cases that test how EKA reasons are the same cases that test how the interface represents it.

a live EKA run
        ↓
an approved captured result
        ↓
an EkaAnswer fixture
        ↓
the deterministic UI adapter
        ↓
a UI view-model fixture
        ↓
Workspace and Sidecar tests

Because the adapter is deterministic, a run that was promoted for its reasoning becomes a regression test for its presentation at no extra cost — and a change that quietly altered how a limitation or a result state renders fails against a real answer rather than against a hand-written one.

What the curated suite covers

  • absence without an invented cause
  • deterministic aggregation
  • source and document authority together
  • PARTIAL
  • UNAVAILABLE
  • a successful empty result
  • cross-system operational links
  • unsupported effective-time reasoning
  • ambiguity preserved
  • saved-conversation access re-gating

What a case asserts, and what it does not

Asserted

  • required facts
  • forbidden claims
  • evidence
  • calculations
  • result state
  • access behaviour

Never asserted

The answer's prose. A synthesis is the one stage whose quality is a model judgement, so a case that matched sentences would fail on wording and pass on meaning being wrong.

A plan the validator refused

The strongest engineering example in the set is not an answer. It is a run whose first plan was rejected.

A model proposes a structured plan, and the validator is authoritative. When it refuses one, the refusal goes back once, verbatim; a second refusal ends the turn as invalid, and every attempt is recorded. The validator is never weakened to make something answer.

EKA Workspace, replaying the captured run for “What do we owe Bharat Polymers, across how many invoices?”: The same question as the calculation above, on a run where the first plan was refused. “Completed 6 steps, 2 with a limitation” is the repaired run saying so rather than presenting a clean first attempt.
The same question as the calculation above, on a run where the first plan was refused. “Completed 6 steps, 2 with a limitation” is the repaired run saying so rather than presenting a clean first attempt.

The interface can show a completed run with its limitations rather than pretending every step succeeded on the first attempt.

What the media is

Every moving picture on this page is an interface capture of a real EKA run. It is worth being exact about what that does and does not mean.

  • A replay capture re-runs a previously executed real run through the same adapter and renderers. No model is called during the replay — which is what the on-screen line “Model · scripted (captured run)” records.
  • A live capture ran against the local estate at capture time, with the model the frame itself names.
  • Nothing here was staged. No answer was written by hand, no transcript was composed after the fact, and no question was arranged to produce a flattering one. Where a run found nothing, refused, or could answer only part of what was asked, that is the run.

Not one build

The media spans more than one prompt bundle, and saying otherwise would be the easiest false claim on the page to make. The guide's own runs were captured under PROMPT-EKA-0.4.6; the eight GOLDEN captures were promoted under 0.4.4, and CUR-012 under 0.4.5. Each remains valid evidence for the case it was approved against.

Technical details

The Sidecar frames on this page were captured on 2026-09-23 from build e4cedfe3.

  • The contextual Ask, the overlay and the finished Sidecar turn replay guide-v4-01-closed-won-no-erp scripted (captured run), result COMPLETE.
  • The continuation pair is a live run on the local estate, planned and worded by google:gemini-3.5-flash-lite, result COMPLETE. A saved conversation id exists only in live mode.
  • Recordings are silent WebM at 1440 × 900, click-to-play, each with a poster and a transcript written from what the recording showed.

The live EKA surface itself is not public. This page shows captures of it; the application is owner-only and a deployment that does not enable it serves no EKA route at all.

One substrate, many agents

EKA is the first Twindexers Agent Experience built on Metrolane. The interaction model is deliberately not specific to it.

What another agent would change

  • subjects
  • features
  • tools
  • domain rules
  • the questions worth asking

What it would reuse

  • conversation shell
  • context model
  • activity presentation
  • record vocabulary
  • evidence treatment
  • result semantics
  • access boundary
  • golden-case testing

Finance, operations, HR, compliance and cross-system monitoring are all the same shape of problem: a governed runtime that knows what may be read, and an interface that does not hide the structure underneath the answer.

The goal is not to make enterprise software look like chat. It is to make enterprise reasoning conversational without hiding the enterprise underneath the answer.

EKA GuideCompanion pageThe runtime side of everything above — thirteen chapters, five canonical runs and an appendix on the prompt bundle itself.