Skip to main content
Version: Next

Managed terminal UX audit

Validated for the OpenCode-first AUTO experience on 2026-09-04. The guiding rule is one authoritative state model: session, executor, quota and knowledge data originate in IVOAI and are rendered by the managed frontend. JSON and non-TTY output never receive branding or ANSI decoration.

Information hierarchy​

The normal path is ivoai auto: preflight, knowledge selection, private backend, then the IVOAI-themed OpenCode TUI. The home footer shows only actionable summary state; the sidebar shows knowledge sources; /ivoai opens the complete bounded panel. Symbols are always paired with words, so status never depends on color alone.

UI fieldAuthoritative sourceMissing evidence
versionbinary build metadataN/A
frontendsession metadataN/A
primary executorquota scheduler/sessionUnknown
workertask ledger/runtimeNot available
authenticationofficial executor auth probeauthentication required
quotaquota managerN/A
Memory / Contextsession knowledge bootstrapdegraded
serversServerPool + session router observationsnot-probed; never infer live health from enrollment
OpenCode permissionssession startup configurationinteractive default
knowledge scopeKnowledge Router selectionautomatic or restricted
compressionCompressionProvider policyUnknown
skillsSkill RegistryNot available

Multi-server Connections (v0.9.7)​

The old single-default Connect/Disconnect pair is replaced by IVOAI Servers. Add is create-only; each profile has Test, Enable/Disable, Edit metadata, Re-enroll and confirmed Remove. Both CLI and TUI use ServerConnector/ServerPool and the existing stable-ID secret store. No separate TUI configuration exists. Enrollment status is never rendered as a live health probe. Recent explicit tests are cached for one minute; restart returns to not_probed.

The existing terminal tokens, monospaced terminal font, left-aligned lists, keyboard selection, adaptive width and NO_COLOR fallback are retained. No new palette or decorative chrome was introduced. Destructive confirmation names the target alias. Normal labels distinguish enabled, connection, health and credential metadata without relying on color. Fixture smoke covers the actual launcher, keyboard navigation, no-echo input, persistence, failures and selective removal.

SurfaceDecisionRationale in managed mode
IVOAI launcher: AutomaticKEEP / PRIMARYOpens the OpenCode frontend under IVOAI control.
IVOAI launcher: CodexKEEPExplicit official Codex TUI escape hatch.
IVOAI launcher: ClaudeKEEPExplicit official Claude Code TUI escape hatch.
IVOAI launcher: OpenCodeRENAMEOpens the managed IVOAI OpenCode frontend.
ivoai opencodeKEEPSame managed control plane as AUTO.
standalone OpenCode providerMOVEExplicit session start --executor opencode --mode direct.
status / doctorKEEPOperational and machine-readable diagnostics.
monitorKEEPExisting read-only runtime view; not duplicated in the TUI panel.
OpenCode /ivoaiADDFull session, executor, quota and source status.
OpenCode home footer/sidebarADDPersistent, compact scope and health.
OpenCode /connectHIDE BY CONFIGOnly the IVOAI provider is enabled; executor auth stays official.
OpenCode model/provider pickerKEEP / GROUP BY CONFIGAUTO plus capability-discovered explicit models and native reasoning variants; no duplicate login.
OpenCode approval policyADDPersistent IVOAI opencode.permission_mode; /ivoai displays the session mode. Changes take effect next session.
OpenCode shareDISABLE IN MANAGED MODEPrevents accidental conversation publication.
OpenCode auto-updateDISABLE IN MANAGED MODESupply-chain pin and rollback stay authoritative.
OpenCode updateHIDE IN MANAGED MODEIVOAI updates the pinned component.
session pickerKEEPOpenCode sessions map to bounded IVOAI executor session IDs.
theme pickerKEEPIVOAI theme is installed and selected; accessibility remains available.
direct opencode menusKEEP UPSTREAMIVOAI does not modify use outside managed mode.

Responsive terminal policy​

IVOAI uses OpenCode's supported renderer and plugin slots rather than parsing ANSI or automating keystrokes. Long aliases and purposes are sanitized and capped; the panel shows at most eight source rows plus a remainder count. OpenCode owns Unicode width, resize, focus, cursor and terminal cleanup. TERM=dumb, NO_COLOR, pipes and JSON continue through the existing non-TUI IVOAI surfaces.

Stable public action inventory​

Every action below is covered by the menu-tree regression test. The decisions are KEEP unless the table above explicitly says RENAME, MOVE, HIDE, DISABLE, or ADD; nested section entries are grouped in the launcher instead of duplicated at the top level.

auto
status doctor doctor.inventory version
setup update.dry-run update rollback uninstall
connect.list connect.chatgpt disconnect.chatgpt connect.claude disconnect.claude connect.server
servers.list servers.add servers.manage servers.test servers.toggle servers.edit servers.re-enroll servers.remove
mcp.list mcp.add mcp.remove mcp.auth mcp.auth.remove mcp.header mcp.test
mcp.tools mcp.enable mcp.policy mcp.direct-policy
launch.codex launch.claude launch.opencode
memory.status memory.configure
session.direct.codex session.direct.claude session.direct.opencode session.orchestrated.codex session.orchestrated.claude
session.list session.monitor session.stop
session.continuity session.scope.adopt session.scope.restore
project.status project.init
config.show config.headroom config.memory config.ruflo config.auto config.auto-planner config.auto-failover config.auto-checkpoint
config.auto-strategy config.auto-parallel config.auto-bootstrap config.auto-escalation config.session-mode config.primary config.reviewer config.workers
config.auto-gate config.auto-plan
config.auto-policy policy.sources policy.concurrency policy.worker-cap policy.writes policy.provider policy.low-quota policy.primary policy.mcp policy.confirmation
capabilities.update capabilities.ponytail capability.inspect capability.enable capability.disable capability.pin capability.unpin capability.update capability.rollback
server.setup server.status server.doctor server.start server.stop server.restart server.logs
server.enrollment.create server.enrollment.list server.enrollment.revoke
server.web-access.create server.web-access.list server.web-access.revoke
server.connector.list server.connector.add server.connector.remove server.context.status server.memory.status
server.gateway.configure server.backup server.restore
remote.status remote.doctor remote.connector.list

Visual system​

The TUI theme uses neutral ink/slate surfaces, a restrained blue primary and amber accent. Semantic success, warning and error colors have textual markers. Light and dark palettes are authored independently with high-contrast text, borders and diff colors. IVOAI lettering uses the official home_logo slot; the upstream OpenCode binary, license, notices and provenance are not patched or hidden.

Backlog P1/P2 capability acceptance (2026-10-12)​

Every changed public capability must reuse its runtime contract, expose a useful managed interface, and record its validation. TestUXAuditCoversEveryPublicMenuAction checks the menu inventory in CI; canonical help is checked against CLI structure. The pull request template requires evidence and a justification for exceptions.

Action / capabilityManaged interfaceShared authority / boundaries
config.auto-profiles, profile.show, profile.restoreConfiguration → Automation Profiles; preview, exact APPLY/RESTOREConfig Store allowlisted atomic change and rollback receipt; effective inherited/custom settings shown; affects future sessions
doctor.repair-hooksDashboard diagnostics, explicit repairMemory receipt ownership; diagnostic preview through doctor; foreign hooks never adopted by name
Operational telemetryOpenCode /ivoai, activity panel, live statusVersioned session observations and authenticated SSE; bounded replay, reconnect gap and stale feedback; no provider probes per event
Session scope adoption/restorationSession Control → conversation actionsAccount-verified explicit metadata transition with private backup; retained native history remains visible to the resumed provider
Raw telemetry transport and scope backup pathsCLI/bridge administrative interfaceNot a second event editor or arbitrary state import; TUI uses the same session service

Codex experience parity​

CapabilityExisting behaviorP1/P2 delivery / validation boundary
Model and reasoningNative model picker and capability-discovered variantsPreserved; display requested/effective values from session ledger
History and resumeNative picker and IVOAI mappingsScope-aware lookup; explicit adoption of legacy scope with backup; synthetic and opt-in live continuity tests
Diffs, clipboard, keyboard navigationManaged OpenCode native controlsPreserved; existing semantic/keyboard and native integration tests remain required
Approvals and cancellationIVOAI approval contract and native cancelObserved task/approval lifecycle events; policy remains in IVOAI
Tools and workersExisting task ledger and tool streamingCorrelated events, DAG dependencies and real duration, bounded activity display
Context and quotaProvider observations; partial availabilityCached observations only in UI reads; unavailable/stale data never interpreted as zero
ProfilesManual advanced settingsSeven allowlisted presets; preview, explicit TUI confirmation, restore and customization detection
Claude inferenceExisting supported adapterContract fixtures only in this round; real validation requires an available subscription