You say what you want
A natural-language request describes the desired change.
Visual interaction & agents Research demonstrator
World Agent is a demonstrator for natural-language interaction with a visual scene. We are exploring the link between conversation, an object’s state and visible actions in a 3D environment.

World Agent
A natural-language request describes the desired change.
The request is linked to the actions available in the demonstrator.
The visual environment is updated, and the steps can be followed.
Exploring an object and its options through conversation.
The link between user commands and a navigable scene.
Evaluating a visual runtime before commercial integrations.
The demo scene and catalogue are conceptual. We do not present a CRM integration or a generative world model as connected in this version.
World Agent in detail
World Agent answers an interface question: what changes if, instead of pressing buttons, you say what you want and the scene changes before you? You speak, and the car in the scene changes its colour, wheels, environment, weather, time, camera angle, doors and boot.
The interesting part is not that it understands the command, but that each change leaves a trace that says where it came from: from the catalogue, from the user command, from the creative layer or from the system. A layer of fog on an alpine route is labelled "visual simulation"; a colour from the four-item palette is labelled "catalogue". The user does not have to guess what is real and what is decor.
There are three directories with a similar name on disk; two of them — `world-agent-v2` and `world-agent-provenance-atlas` — are not separate projects, but git working copies of the same repository. The real version is `world-agent` on the `main` branch, which today carries the V2 reformulation "World Generator" and is bit-for-bit identical to the `v2/world-generator` branch.
Around 22 matching rules on Romanian text translate a phrase into a typed state change. "Make the car white and fit sport wheels" hits two rules and produces two distinct events. It is not a language model: it is code that runs in the browser, gives the same result every time and can be read line by line.
Voice recognition uses `webkitSpeechRecognition` in the browser, with the language fixed to `ro-RO`. Where the interface is not available — or the user prefers the keyboard — the command bar remains functional, with the same rules. We do not send audio anywhere.
A vehicle built procedurally from Three.js primitives (body, glass capsule cabin, four wheels with rims, headlights, doors, boot), on a platform with a ring, grid and three lights. Rendering with ACES Filmic tone mapping, pixel ratio capped at 1.75 and complete stopping of animation when the system requests reduced motion.
Each state mutation produces an event with one of four labels: Catalog, User command, Creative layer or System. The “Creative layer” label is displayed literally as “Creative / simulated layer”. The offer record appears with the detail “Fictitious data marked — not a commercial offer”.
There is a normalised runtime with eight visual tools (`visual.inspect`, `visual.highlight`, `visual.move`, `visual.create`, `visual.delete`, `world.query`, `ui.navigate`, `ui.open_panel`) and an event log with world revision numbers. A call with an outdated revision is rejected with `STALE_REVISION`; a repeated call with the same `actionId` returns the original receipt marked as a replay. The voice adaptor reports `NOT_CONNECTED` itself — the contract is implemented, the provider is not connected.
Six bands, each with its declared status: documented API to integrate, open runnable components, open research to evaluate, provider to contact, research preview without public API, and a band marked blocked for the EU where the licences reviewed do not authorise launch. Genie 3 is explicitly in the research preview category — not integration.
Data and operation
From exploration to implementation
A configurable physical product, a space, a machine. The starting question is what decision the visitor makes after seeing the scene.
We start from the list of safe actions, not from the list of phrases. Each action gets the language rules that trigger it, in the public’s language, and the correct provenance label.
Valid requests are the easy part. We test ambiguous requests, those outside the scenario and those that combine several actions, so that the answer “I cannot do that, but I can do these” is useful.
The result is a static package served by nginx on our own server, with a Let’s Encrypt certificate and the possibility of rolling back to the previous version by changing a symbolic link. It does not need a server process.
Only one: `world-agent`, on the `main` branch. `world-agent-v2` and `world-agent-provenance-atlas` are git worktrees of the same repository, used so that several design variants can exist at the same time. `main` and `v2/world-generator` are today at the same commit, so the “V2 variant” is not a different project, it is what runs.
No. It is a scene engine: the objects and actions exist beforehand, and the command chooses among them. Genie 3 appears in our engine register exactly with its real status — research preview, no public API to launch, no published weights. What we do instead is less spectacular and easier to guarantee: the same command gives the same result, and every change has a provenance label.
No, and that is a choice. The compiler is a set of about 22 text-matching rules in Romanian, run in the browser, which produce typed state changes. The advantage: it is deterministic, costs nothing per request, sends the text nowhere and can be audited line by line. The disadvantage: the vocabulary is finite, and when a request falls outside it the system says so instead of improvising.
With the browser’s speech recognition — `webkitSpeechRecognition`, with the language fixed to `ro-RO`. In practice, that means Chromium-based browsers. Otherwise, the text bar does exactly the same thing, with the same rules: voice is a convenience, not a dependency.
No, and they are marked as such in the very event that displays them: “Fictitious data marked — not a commercial offer”. There is no integration with a manufacturer catalogue or a pricing system. In an implementation for a client, the price source would be their system, and the provenance label would change from “Demo catalogue” to the real source.
Not in this build. The connectors appear in the interface with the NOT CONNECTED label, and the tool contract exists but the vendor adapter reports `NOT_CONNECTED` itself. However, the hard part is already written: eight typed visual tools, world revision numbers, rejection on stale revision and idempotent receipts — that is, exactly the safeguards you need so that an agent does not apply the same action twice over a state that has changed in the meantime.
Yes, with the configuration work described above: the scene, the list of allowed actions and the language rules are rewritten for that object. What is reused is the architecture — the deterministic compiler, the provenance rail, the tool contract and the discipline of state revision.
Illustrative example
A use case, without client data or attributed commercial results.
The visitor says or writes the phrase in the command bar.
The text is passed through the matching rules in Romanian: “alpi” activates the alpine environment, “noapte” changes the time, “ploa” activates the rain layer. Each rule produces a separate event with its provenance label, and the Three.js scene repositions the camera, the fog and the background colour accordingly.
The scene changes immediately, and in the side rail three entries appear: “Composed environment — Creative / simulated layer — Alpine route”, “Simulated time — Creative / simulated layer — Night lighting” and “Simulated weather — Creative / simulated layer — Rain layer active”. The agent replies that it has applied 3 changes and kept the source of each. No entry claims to be real data.
What is required:A browser with WebGL. For voice command, a browser on the Chromium engine; otherwise the text bar does the same thing.
Collaboration possibilities
Connecting authorised sources, organising information and reviewing actions by the team, with separate access by role.
We define a pilot around a real process: users, data, integrations, costs and acceptance criteria. Expansion follows after evaluating the result.
We establish the requirements for accessibility, hosting, data protection and interoperability. Any connection to AGE or STISC services requires validation of eligibility, access and approvals.
These are adaptation scenarios, not statements about existing contracts or partnerships. The proposed functions are confirmed within the project scope.
Discuss a pilotWe are developing 3D representations of the city that combine terrain, maps and data about the built environment.
Prototype & researchAPI access to AI models through one common interface.
PlatformGrai is our research direction for speech synthesis and for models adapted to the languages spoken here.
Research & developmentTell us about your process. Together we decide what is worth building, what we can connect, and how we check the result.