Skip to content
Unverified: This page has not yet been anchored to automated code tests.

Vox GUI Capability Audit 2026

Successor. This audit diagnoses the GUI’s state. The executable, TDD-ready build-out sequence derived from it lives in vox-gui-harness-buildout-plan-2026.md (three tracks: stateful core, CLI-derived surface, design/UX). The vox-dashboard → vox-gui migration called out in §“Phase 0” below is now complete; the dangling references it flagged have been reconciled.

Vox already has the right maintainability seed: the CLI has a real compiled command catalog, and the desktop GUI can read that catalog through Tauri. A fresh local probe on 2026-05-28 returned 472 nested CLI catalog entries from:

Terminal window
target\debug\vox.exe commands --format json --include-nested

That is enough to make the GUI discoverable by default, but not enough to make it safe or ergonomic as a code harness. The current catalog tells the GUI what commands exist; it does not yet describe command risk, typed argument forms, output schemas, streaming behavior, long-running task semantics, required capabilities, mobile suitability, or whether a command can be previewed before execution.

The desktop shell in crates/vox-gui is real Tauri 2 infrastructure. Several panels inside the React UI are still product mockups or fixture-backed views. The near-term goal should be a CLI-shaped dashboard: use compiled CLI metadata as the discoverability spine, then layer curated operator workflows on top for runs, models, repositories, memory, safety, and MENS training.

This audit inspected live repository files under the Vox workspace and did not read archive/ or docs/src/archive/, per the repository archival protocol.

Primary surfaces inspected:

Two targeted local checks were run:

CheckResultMeaning
target\debug\vox.exe commands --format json --include-nested472 entriesThe compiled CLI catalog is real and large enough to drive discovery.
target\debug\vox.exe ci gui-catalog-parityFailedGuard caught tauri.conf.json version 0.5.0 while workspace version is 0.6.0.
SurfaceCurrent realityMaintainability implication
Desktop shellcrates/vox-gui/Cargo.toml is a real Rust crate with Tauri 2, vox-cli, vox-cli-core, vox-orchestrator, vox-db, vox-secrets, and related dependencies.The desktop app is not merely a design mockup. It can be treated as an application surface that deserves CI, version parity, and release discipline.
Tauri command registrationcrates/vox-gui/src/main.rs registers real commands for command catalog, command execution, initial view, orchestrator status, registry metadata, and model/routing views.There is a real IPC boundary. The next step is to harden command contracts rather than replace the architecture.
CLI command catalogcrates/vox-cli/src/command_catalog.rs derives command entries from the compiled Clap root command.This is the best current source for discoverability because it reflects compiled CLI reality.
vox commands surfacecrates/vox-cli/src/lib.rs exposes the command catalog and advertises vox gui as a discovery surface when the GUI feature is enabled.CLI-first GUI generation is aligned with existing CLI intent, not an external invention.
Operation registry metadatacontracts/cli/command-registry.yaml adds product lanes, status, groups, feature gates, and handler metadata.Useful as a metadata overlay, but it must be checked against compiled Clap reality to avoid drift.
Sidecar executioncrates/vox-gui/src/commands/execute.rs launches the vox sidecar through Tauri shell APIs.Simple command execution works as a foundation, but argument modeling is too weak for robust command forms.
Orchestrator statuscrates/vox-gui/src/commands/orchestrator.rs returns JSON and MessagePack status snapshots.The dashboard can reflect real orchestration state, but polling rebuilds heavy state and should become daemon/event-stream backed.
React app shellcrates/vox-gui/ui/src/App.tsx loads the command catalog, decodes orchestrator status, and routes among dashboard/catalog/memory/models/runs/settings views.The UI has a real application shell and can become the primary operator cockpit.
Model surfaceThe current GUI includes model/routing Rust and React surfaces under crates/vox-gui, including active model and routing summary APIs.This is one of the strongest candidates for a first-class, non-generic dashboard workflow.
GUI CI hooksvox ci gui-catalog-parity and vox ci gui-smoke exist under the CLI CI commands.The project already has places to enforce GUI drift, but several expensive checks remain opt-in.
Runtime contractclients/runtime-types/src/index.ts defines a portable VoxRuntime interface, with a Tauri-backed implementation in clients/runtime-web.This is the right seam for desktop/mobile parity if the mobile direction is resolved consistently.
SurfaceCurrent realityRisk
Dashboard crate namingcontracts/frontend/surface-ownership.v1.yaml names crates/vox-dashboard as canonical, while the actual live shell is crates/vox-gui.Documentation and ownership drift make future work harder to route.
Older dashboard docsSome dashboard docs still describe an Axum SPA or vox-dashboard path.Contributors can easily build against the wrong surface.
Tauri version paritycrates/vox-gui/tauri.conf.json reports 0.5.0; workspace package version is 0.6.0. The parity gate fails today.Release metadata is already drifting.
Unregistered GUI commandsmemory.rs, ludus.rs, and preferences.rs exist under crates/vox-gui/src/commands/ but are not registered in commands/mod.rs or main.rs.These files read like features but are not live IPC capabilities.
Missing backend dependencies for dead commandsSome unregistered command files reference crates that are not present in the GUI crate dependencies.Registering them naively may fail compilation or reintroduce retired surfaces.
Memory viewThe React memory view includes sample hits and fallbacks; the intended mnemosyne_recall path does not line up cleanly with the registered Tauri command set.Users may mistake a demonstration panel for a real memory system.
Catalog viewThe GUI labels command entries as “Skills” and offers “Deploy” behavior even when a command is just a CLI operation requiring arguments.This blurs command discovery, skills, and execution into one concept.
Loquela composerThe composer UI has slash commands, tier controls, and mic affordances, but most are local UI state or optimistic command dispatch.It looks like an agent harness before the run/task backend is fully present.
Settings viewMesh peers, signing keys, theme, telemetry, and keybinding controls are partly local state or static data.Settings can imply persistent policy that is not actually enforced.
Runs viewThe current runs surface can show recent orchestrator activity and model scoreboards, but it does not yet sit on a canonical run/task store.A code harness needs persistent, inspectable, replayable runs.
Mobile directionOlder Tauri convergence docs and newer React Native/Expo runtime-contract docs do not fully agree.Mobile architecture decisions can split runtime abstractions if not reconciled.

Structuring the GUI around the CLI is the right maintainability direction, but the GUI should not be a raw vox --help renderer. The durable pattern is:

  1. Treat the compiled Clap catalog as the truth for command existence.
  2. Merge operation-registry metadata for product lane, maturity, capability, and handler provenance.
  3. Add a richer action schema for GUI execution and mobile filtering.
  4. Build generated command forms and command-palette entries from that schema.
  5. Keep first-class dashboard panels for workflows that need live state, event streams, timelines, approvals, or visual comparison.

The current command_catalog schema should be extended or paired with a versioned GUI action manifest containing:

  • Typed argument shape: flags, options, positionals, repeated values, enums, defaults, conflicts, dependencies, and examples.
  • Execution semantics: read-only vs mutating, destructive risk, required confirmation, dry-run availability, network/filesystem/process access, and expected duration.
  • Output contract: human text, JSON, MessagePack, streamed events, artifacts, diagnostics, run ids, and machine-readable schemas.
  • Capability metadata: required secrets, local tools, daemon availability, workspace state, feature gates, and mobile suitability.
  • UX hints: recommended grouping, common tasks, form layout, empty-state copy, and whether the command belongs in the global command palette only or deserves a full panel.

This lets the dashboard be generated where that is safe, while preserving custom interfaces where the CLI is only one part of the interaction.

The GUI should converge on five primary surfaces:

SurfacePurposeData source
Command CenterSearch, inspect, and run CLI operations with generated forms.Compiled CLI catalog plus GUI action schema.
RunsPersistent task/run timeline with status, logs, artifacts, model decisions, approvals, and replay.VoxDb run store plus daemon event stream.
ModelsModel registry, active model, routing policy, scoreboards, cost, capability fit, and local/remote availability.Orchestrator model registry, routing contracts, secrets readiness.
RepositoriesWorkspace/worktree health, diffs, tests, CI tiers, docs drift, and code harness entrypoints.vox repo, vox ci, git metadata, diagnostics, artifacts.
Memory and KnowledgeSearch, corpus, symbols, documentation, MENS training data, and retrieval provenance.vox-search, VoxDb, docs contracts, training manifests.

Everything else should be secondary navigation or command-palette driven until it has a real backend contract.

The desktop app should remain Tauri 2. The existing shell is real, and Tauri is a good fit for local repository work, sidecar CLI execution, file access, notifications, and native packaging.

Mobile needs a clearer architectural decision. Current evidence points to a portable runtime contract as the right abstraction:

  • Keep desktop shell APIs behind VoxRuntime.
  • Lower mobile UI against @vox/runtime rather than direct @tauri-apps/api/* imports.
  • Let the mobile implementation use the selected mobile stack while preserving the same workflow, model, inference, notification, speech, and actor/workflow primitives.

The unresolved documentation conflict is important: older packaging/Tauri docs describe Tauri for desktop and mobile, while newer mobile architecture work leans toward React Native/Expo for mobile and Tauri for desktop. Until that is ratified, new GUI code should depend on the runtime contract and avoid direct mobile-only assumptions.

  • Rename or clearly alias vox-dashboard documentation to the real crates/vox-gui surface, or intentionally create a separate dashboard crate.
  • Fix Tauri version parity so vox ci gui-catalog-parity passes.
  • Mark unregistered GUI command files as scaffold, wire them correctly, or remove them from the live GUI crate.
  • Replace Latin or opaque user-facing navigation labels with plain product language.
  • Decide the mobile architecture statement: Tauri mobile, React Native/Expo, or runtime-contract-first with explicit adapters.
  • Extend the command catalog or add a contracts/gui/action-manifest.v1.yaml generated from Clap plus hand-authored metadata.
  • Add parity checks that every GUI-executable command has typed arguments, safety metadata, and an output contract.
  • Generate TypeScript command/action types for the React UI.
  • Teach the GUI to render forms from the action schema, not from ad hoc object key conversion.
  • Introduce a canonical run store in VoxDb: run id, command, repo, worktree, model, cost/tokens, logs, artifacts, diagnostics, approvals, and status.
  • Route long-running CLI/orchestrator work through a daemon or job service rather than blocking sidecar calls.
  • Stream events to the GUI instead of rebuilding orchestrator status on a 500 ms polling loop.
  • Make Loquela create real runs and attach messages, files, model routing, and approvals to those runs.
  • Keep Models as a first-class surface and connect active model changes to persistent config or secrets policy rather than process-local environment mutation.
  • Replace Memory fixtures with registered search/retrieval commands and clear provenance.
  • Make Runs the center of the code harness, with reproducible command invocations and artifact replay.
  • Add Repository health panels backed by vox ci, vox check, vox repair, docs drift checks, and git/worktree state.
  • Make GUI TypeScript build part of the default fast or complete local gate once cost is acceptable.
  • Add an IPC mock layer so Playwright can test the React UI outside Tauri without silently falling back to fixtures.
  • Keep gui-catalog-parity mandatory for version drift and command catalog health.
  • Add mobile runtime-contract tests that prove generated UI code does not import desktop-only Tauri APIs directly.

The best path is not to hand-design every dashboard feature and not to blindly generate the whole app from the CLI. Vox should make the CLI catalog the discoverability backbone, enrich it with GUI-grade action metadata, and reserve custom UI for the workflows that become a real code harness: runs, repositories, models, memory, approvals, and MENS training.

That gives Vox a maintainable center of gravity: develop capabilities in the CLI and daemon, surface them automatically in the GUI, then promote the highest-value operations into rich panels only after their backend contracts are real.