← Changelog
Daily2026-05-16

The agent bus comes into the UI + dashboard filters

The event bus the backend poured the day before surfaced this day: the bus agents use to talk to each other got a visible entry point for the first time, and the dashboard gained filtering and search. Meanwhile the engine learned to load standard 3D models and converged its component-system data vocabulary into one unified, type-safe family.

Making the invisible machinery visible

The plugin runtime and event bus the backend quietly poured the day before are themselves "invisible" — they run in the background, imperceptible to users. This day's theme was wiring that invisible machinery to the interface, making it observable and operable. Once a system starts having internal activity like "several agents communicating over a bus," hiding it all in the background leaves users and developers in the black-box anxiety of "what is it actually doing." So this day's work was clear: open a window onto the bus, add filtering to the task list, let people truly see what's happening inside the system. Observability isn't a nice-to-have; it's the precondition for a complex system to be trusted and debugged.

A visible agent bus

This day wired the event bus agents use to communicate into the interface. A "bus health lamp" appeared in the sidebar, carrying the current plugin count, so you can tell at a glance how many capabilities are loaded and whether the state is healthy; and a dedicated bus admin panel was promoted to a top-level entry, where you can browse event kinds, navigate up/down by keyboard, expand any record in place for its detail, even deep-link from a record straight to the matching event category in the sidebar. The point of all this: multi-agent collaboration became "visible" for the first time — who's talking to whom, what's being passed, how many of each event kind — laid out plainly, no longer a blob of background activity you could only guess at. For a platform that works long-term through "a team of agents collaborating," this window is a key step in turning abstract collaboration into a concrete picture that can be understood and intervened in.

Dashboard: status distribution, filtering and search

As more tasks ran at once, a flat list alone was no longer enough. This day added a few practical tools to the dashboard: the runs list gained a "status-distribution strip" at the top, so you can see at a glance the overall picture of how many are running, done, or errored; and the task list supports filtering by status and searching by title, letting you quickly locate the one you care about out of a big pile of history. These are plain features, but when you're genuinely managing dozens of tasks at once, they decide whether you "grasp the whole at a glance" or "fish for a needle in a long list." Smoothing the two high-frequency operations of triaging problems and reviewing history is, at heart, respecting the user's time — as a system grows, good filtering and search are productivity itself.

The engine can load standard 3D models (glTF)

The engine took a key step in its content ecosystem this day: support for loading the standard 3D model format glTF, and loading it through the asset system stood up the day before. glTF is the common interchange format for 3D content, supported by most modeling tools and model marketplaces; being able to ingest glTF directly means vast amounts of ready-made 3D models can be brought in and used, without remaking each by hand. Wiring it to the asset system rather than spinning up separate loading logic matters too — imported models then naturally have a unified identity and way to be referenced, manageable and reusable in a structured way. For users, this is an important answer to the real question of "where do the assets to make a game come from": not only can AI generate them, but standard models already out in the world can be brought straight in.

The engine's ECS vocabulary converges into one family

The engine made an important "convergence" at the low level this day. Previously, different data shapes in components — strings, fixed/variable-length arrays, buffers — each had their own handling and wrapper layers, scattered in concept and tiring to read. This day converged them all under one "managed-resource" family and deleted a pile of redundant wrapper code. Alongside, "creating an entity" became stricter at the type level: more precise type constraints describe which components and what data an entity is made of, both blocking mistakes at compile time and clearing away the old patches done via "forced type casts" one by one, with a permanent check to stop them creeping back. This work is entirely invisible on the user's side, but it embodies a core engineering stance: the measure of code quality isn't line count but "how many concepts you must hold to understand any single spot" — converging scattered vocabulary into one family is exactly lightening the load for everyone (including AI) who later reads this code.

A working stance: edit directly + the local test is the gate

This day also articulated a working stance in engineering culture: for changes clear enough, edit directly rather than applying a heavy process to everything; but at the same time, "local tests pass" was set as an ungated-around threshold — you can move fast, but you can't skip verification. The two seem contradictory but are two sides of one thing: precisely because automated tests are the safety net, editing directly doesn't become recklessness. Spelling out "when to take the heavy process and when direct editing is fine" is itself respect for efficiency — not letting simple things be slowed by process, nor letting speed become an excuse for losing control of quality. This sense of pacing is the invisible secret to a fast-iterating team staying both fast and stable long-term.

What this day means

Seen together, this was a day of "making the system transparent to people." The backend's complex internal machinery was wired to the interface, becoming observable and operable; the engine opened the door to vast standard models, so content sources are no longer limited; and the low level made the code itself more readable and trustworthy through vocabulary convergence. On the surface, visualization, model loading and type convergence are three unrelated things, but they point at one goal: keeping this ever-more-complex system "understandable and trustworthy" for users, for developers, and for the AI that will later read the code. How far a system goes often hinges less on how many features it piles up than on whether it can stay transparent as it grows complex — and this day was an investment in exactly that transparency.

← All daily updates