Gum gum-tool-output

Reference guide for Gum's Output tab system. Load this when working on the Output tab, IOutputManager, MainOutputViewModel, GuiCommands.PrintOutput, or adding output/error messages to the tool.

install
source · Clone the upstream repo
git clone https://github.com/vchelaru/Gum
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/vchelaru/Gum "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/gum-tool-output" ~/.claude/skills/vchelaru-gum-gum-tool-output && rm -rf "$T"
manifest: .claude/skills/gum-tool-output/SKILL.md
source content

Gum Tool Output System Reference

Architecture

IOutputManager
(
Gum/Managers/MainOutputViewModel.cs
) — interface with two methods:

  • AddOutput(string)
    — appends a timestamped line
  • AddError(string)
    — appends a timestamped line prefixed with
    "ERROR:  "
    (two spaces)

MainOutputViewModel
— implements
IOutputManager
. Stores all output as a single
OutputText
string (not a list). Registered as a singleton in DI, aliased as both
MainOutputViewModel
and
IOutputManager
.

MainOutputPlugin
PriorityPlugin
that creates the Output tab at
TabLocation.RightBottom
.

How to Write Output

Inject

IOutputManager
and call
AddOutput
or
AddError
directly — this is the standard approach. Callers must already be on the UI thread.

IGuiCommands.PrintOutput
is a thin wrapper around
AddOutput
that marshals to the UI dispatcher — use this when calling from a background thread. There is no
PrintError
equivalent
in
IGuiCommands
; callers needing
AddError
from a background thread must dispatch manually.

Non-Obvious Behaviors

  • Buffer cap:
    OutputText
    is capped at 50,000 chars. When exceeded, it is trimmed to the last 25,000 chars — oldest output is silently discarded.
  • No dispatcher in
    IOutputManager
    :
    AddOutput
    /
    AddError
    write directly to the
    OutputText
    property with no thread marshaling. Calling from a background thread will throw.
  • Auto-scroll: The
    TextBox
    in the view uses
    TextBoxAutoScroll.AutoScrollToEnd="True"
    — new output scrolls into view automatically.

Key Files

FilePurpose
Gum/Managers/MainOutputViewModel.cs
IOutputManager
interface +
MainOutputViewModel
implementation
Gum/Commands/GuiCommands.cs
PrintOutput
— dispatcher-safe wrapper
Gum/Commands/IGuiCommands.cs
PrintOutput
declaration
Gum/Plugins/InternalPlugins/Output/MainOutputPlugin.cs
Registers the Output tab
Gum/Plugins/InternalPlugins/Output/MainOutputPluginView.xaml
Output tab view (TextBox + clear button)
Gum/Services/Builder.cs
DI registration of
MainOutputViewModel
as
IOutputManager