Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

mtui is an improved, idiomatic Rust successor to openSUSE/mtui — the Maintenance Test Update Installer, SUSE QE’s tool for validating maintenance updates: load a request by RRID, install and test it on reference hosts over SSH in parallel, then approve or reject. It drives the OBS/IBS and Gitea review workflows and openQA/QEM; reports load from and upload to TeReGen’s v2 API.

mtui is memory-safe, async-native, and distributed as two static binaries, while preserving the data-format and workflow contracts that keep it interoperable with the SUSE maintenance ecosystem: the RRID grammar, the refhosts.yml schema, the report document schema, and the remote-lock wire format.

Two surfaces

  • mtui — the interactive REPL (line editing, tab completion, history). See Invocation for how to launch it and seed a session.
  • mtui-mcp — a Model Context Protocol server whose tools are synthesised from the same command registry as the REPL, so the CLI and the MCP surface never drift. See MCP server.

This book

  • Installation — build from source, install the binaries, completions, and man pages.
  • Invocation — the mtui and mtui-mcp binary flags and how to start a session.
  • Configuration — the TOML config file, its resolution order, and every option with its default.
  • Command reference — every REPL command and its arguments, generated directly from the command registry.
  • Workflow concepts — fan-out across templates, reference-host pool selection, host state, and locking.
  • MCP server — running mtui-mcp, the tool surface, the testreport and job tools, profiles, and the security boundary.
  • Architecture — the crate layout and the data-format contracts.
  • Developer guide — the toolchain, quality gates, the command trait, how to add a command, and testing conventions.
  • FAQ.

For contributor conventions and the definition of done, see AGENTS.md, which lives in the repository root.