coding-guidance-go-tui — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited coding-guidance-go-tui (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Portable implementation, refactoring, testing, and review guidance for interactive Go terminal user interfaces built with Charmbracelet Bubble Tea, Bubbles, Lip Gloss, embedded Huh forms, and related Charm libraries.
Use this as the default principle skill for Charmbracelet Go TUI work. Compose with:
thinking for planning, recursive-thinking forstress-testing, tester-mindset for validation strategy, and security for sensitive input, shell execution, token display, or filesystem access
project-core-dev for repo validation,project-config-and-tests for config and deterministic tests, and project-platform-diagnose for terminal capability, piped stdio, SSH, alt-screen, shell, platform, install, or runtime smoke issues
coding-guidance-go only when the non-TUI Go package design,concurrency, service boundary, profiling, or module behavior is the main risk
Use coding-guidance-go instead when the task is a non-interactive Go CLI, library, worker, service, or test change with no terminal UI state machine.
Load references only when the task needs that depth:
for version-specific Bubble Tea APIs, Bubbles component integration, Huh form integration, Lip Gloss APIs, key binding patterns, and upstream example routing
for layout arithmetic, responsive panels, mouse hit testing, screen/focus state machines, production polish, performance, noninteractive fallbacks, and Bubble Tea code-review false positives
curses-style wrappers unless only the generic TUI UX ideas apply
flows that do not maintain an interactive screen
is explicitly converting the flow into a Go Bubble Tea TUI
guidance instead
Bubbles, and Lip Gloss are incidental
go.mod, imports, nearby models, Bubbles and Huh components, LipGloss styles, examples, tests, and docs before editing. Preserve the repo's current Charmbracelet major version and import path unless the task is explicitly an upgrade. Check upstream Charm examples when the component pattern is unfamiliar.
output, keyboard and mouse expectations, input/output streams, width and height constraints, external commands, background work, noninteractive or --no-tui fallback, and error states.
previous screen or return path, dimensions, data loading state, request or stale-result marker, domain state, selected item, cursor or scroll position, pending command, error/status message, and child component state.
Update deterministic and fast. Represent side effects as tea.Cmdvalues that return typed tea.Msg values; do not block on filesystem, network, subprocess, timers, or heavy rendering work inside Update or View. Use tea.Batch for independent commands and tea.Sequence only when ordering is observable behavior.
the parent model, route key and resize messages by focus or mode, assign updated component values back to the parent, collect returned commands, and keep child widths, heights, styles, and focus state synchronized.
View should not mutate state, start work, readfiles, call services, log, or depend on wall-clock time. Build terminal layouts with Lip Gloss styles, cell-aware helpers, strings.Builder, and caches for expensive derived text instead of ad hoc ANSI string arithmetic.
and cancel paths, loading and empty states, recoverable errors, accessible keyboard shortcuts, resize behavior, narrow-terminal fallbacks, plain-output escape hatches, and no mouse-only interactions.
transition tests with synthetic messages, command tests around command constructors, and stable render assertions for important layout or text contracts.
smoke command the repo supports. A visible TUI behavior change usually needs at least one interactive smoke run or recorded terminal-output check.
Use this instead of the default implementation workflow when the task is primarily cleanup or restructuring:
ownership, render paths, dimensions, and external side effects.
are unclear.
only when the split makes state ownership and message flow easier to follow.
side effects, and terminal mode choices unless the task explicitly changes them.
a compile-passing render or focus regression.
When reviewing, skip implementation steps and use this checklist:
Critical > Important >Suggestion.
polish. Layout, color, and help-text issues become higher severity only when they block navigation, hide required information, or break supported terminal contexts.
Update or View work, lost or unordered commands,unhandled errors, command goroutine leaks, state mutation during rendering, stale window dimensions, unassigned Bubbles component updates, key binding conflicts, focus traps, missing quit/cancel behavior, alt-screen cleanup hazards, and fragile string-width math.
tea.Cmd, value receiverson Update, nested child Update calls, and tea.Batch are normal Bubble Tea patterns when no side effect runs before the command is returned.
profiles, no-color environments, redirected input/output, and noninteractive CI execution where the repo claims support.
state transition, and the likely user-visible consequence.
can live outside the model, but UI state should not be hidden in package globals or background goroutines.
and external events. Avoid stringly message channels.
and sequencing when ordering is part of behavior.
inputs, do the side effect, and return a typed success or failure message.
and heights to child components.
q, esc, ctrl+c, and form-cancel keysshould match the app's conventions and should not discard work silently.
or renderer disabling only when they match the repo's runtime or test seam.
files or test-only writers when needed.
tea.View; forolder v1 code, preserve the repo's existing command-based terminal mode conventions unless the task is an upgrade.
paginator, viewport, list, file picker, timer, stopwatch, help, spinner, and key binding behavior before hand-rolling those widgets. Prefer Huh for multi-field forms when the repo already uses it or the form semantics are clearer than custom widgets.
Update; losing that valueloses cursor position, scroll state, validation errors, and internal timers.
win. Otherwise let focused inputs consume editing keys.
bubbles/key bindings and the help component for discoverable shortcutswhen the screen has more than trivial navigation.
Run() from inside a Bubble TeaUpdate; embed forms through their Init, Update, and View loop.
reconciling focus rules, width/height updates, styles, validation, and domain state ownership.
scattering raw ANSI escape codes or one-off magic strings across View.
len for terminal layout width.
truncate low-value metadata, and provide compact fallbacks for small terminals.
frame-size helpers and explicit truncation or wrapping so bordered panels do not grow unexpectedly.
current layout orientation: X coordinates for side-by-side panes, Y coordinates for stacked panes.
or limited-color environments where the repo supports them, and do not encode state only through color.
mutation or package-level mutable styles to smuggle runtime state into views.
non-terminal stdin, CI, TERM=dumb, NO_COLOR, and app-specific --no-tui or NO_TUI flags. Fall back to plain output rather than forcing a full TUI.
markdown or syntax-highlighted text by content and width, virtualize large lists, and discard stale async results with request IDs, content hashes, or version counters.
breadcrumbs or titles, focus restoration after modals, reset cursor and scroll state intentionally on transitions, and show the current sort/filter or mode in status text.
A Charmbracelet TUI change is done when:
quit, and cancel messages
viewport, pagination, or timers changed
snapshots or focused string assertions when practical
input, alt screen, subprocess execution, mouse handling, clipboard, or cursor behavior changed
scripts, and narrow-terminal behavior is checked around an 80x24 baseline
NO_COLOR orlimited-color terminals when the repo supports them
go test -race or equivalent concurrency validation runs when commands,goroutines, timers, subprocesses, or shared state changed
Build a Bubble Tea TUI with a list, details pane, and help barReview this Bubble Tea model for command ordering and focus bugsRefactor these Bubbles text inputs into a multi-step formFix this Lip Gloss layout so it survives narrow terminals and Unicode text~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.