Agent skill

Tui Validate

by mikeyobrien in mikeyobrien/ralph-orchestrator

Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation.

MITAuto-check passedAI & LLM Engineering

Install Tui Validate

skills CLI
$ npx skills add mikeyobrien/ralph-orchestrator --skill tui-validate -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mikeyobrien/ralph-orchestrator tui-validate --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mikeyobrien/ralph-orchestrator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/tui-validate .claude/skills/tui-validate && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tui-validate
GitHub stars
3.2k
Token cost
~3k tokens
SKILL.md length
903 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
MIT

At a glance

Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation.

  • Works in 4 steps: Capture Phase → Extraction Phase → Validation Phase → …
  • Tasks that involve LLM evaluation
  • SKILL.md covers Overview, When to Use, Prerequisites and Parameters, plus 6 more sections
  • Calls brew and go

What it does

Tui Validate is an agent skill from mikeyobrien/ralph-orchestrator. Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation. Supports both visual (PNG/SVG) and text-based validation modes.

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering LLM evaluation. It works with tmux. The repository describes itself as: An improved implementation of the Ralph Wiggum technique for autonomous AI agent orchestration. The licence is MIT.

When your agent uses it

  • Tasks that involve LLM evaluation

Example prompts

  • “Use the tui-validate skill to validate Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic…”
  • “/tui-validate”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Capture Phase
  2. Extraction Phase
  3. Validation Phase
  4. Reporting Phase

What it can do on your machine

Read from SKILL.md and the folder at commit edc2b32. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • brew
    • go

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tui Validate loads about 3k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 903 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~50
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from mikeyobrien/ralph-orchestrator at commit edc2b32, republished under its MIT licence (© mikeyobrien). 903 words, ~3,024 tokens.

Download SKILL.mdSave it as .claude/skills/tui-validate/SKILL.md (or your agent's skills folder).
name
tui-validate
description
Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation. Supports both visual (PNG/SVG) and text-based validation modes.
type
anthropic-skill
version
1.0
metadata.internal
true

TUI Validate

Overview

This skill validates Terminal User Interface (TUI) applications by capturing their output and using LLM-as-judge for semantic validation. It leverages freeze from Charmbracelet for high-fidelity terminal screenshots and provides structured validation criteria.

Philosophy: Rather than brittle string matching, this skill uses semantic understanding to validate that TUI output "looks right" - checking layout, content presence, and visual hierarchy without breaking on minor formatting changes.

When to Use

  • Validating TUI rendering after changes
  • Checking that UI components display correctly
  • Visual regression testing for terminal applications
  • Verifying TUI state after specific interactions
  • Creating documentation screenshots with validation

Prerequisites

Required:

  • freeze CLI tool installed (brew install charmbracelet/tap/freeze)
  • tmux for interactive TUI capture (optional, for live applications)

Verification:

bash
# Check freeze is installed
freeze --version

# Check tmux is installed (for interactive capture)
tmux -V

Parameters

  • target (required): What to validate. One of:

    • file:<path> - ANSI output file to validate
    • command:<cmd> - Command to execute and capture
    • tmux:<session> - Live tmux session to capture
    • buffer:<text> - Raw text/ANSI to validate
  • criteria (required): Validation criteria. Can be:

    • A predefined criteria name (see Built-in Criteria)
    • A custom criteria string describing what to check
  • output_format (optional, default: "svg"): Screenshot format

    • svg - Vector format, best for documentation
    • png - Raster format, best for visual diff
    • text - Text-only extraction, fastest
  • save_screenshot (optional, default: false): Whether to save the screenshot

    • If true, saves to {target_name}.{format} in current directory
  • judge_mode (optional, default: "semantic"): Validation approach

    • semantic - LLM judges based on meaning and layout
    • strict - Also checks exact content presence
    • visual - Requires PNG, checks visual appearance

Built-in Criteria

ralph-header

Validates Ralph TUI header component:

  • Iteration counter in [iter N] or [iter N/M] format
  • Elapsed time in MM:SS format
  • Hat indicator with emoji and name
  • Mode indicator (▶ auto or ⏸ paused)
  • Optional scroll mode indicator [SCROLL]
  • Optional idle countdown idle: Ns

Validates Ralph TUI footer component:

  • Activity indicator (◉ active, ◯ idle, or ■ done)
  • Last event topic display
  • Search mode display when active
ralph-full

Validates complete Ralph TUI layout:

  • Header section at top (3 lines)
  • Terminal content area (variable height)
  • Footer section at bottom (3 lines)
  • Proper visual hierarchy and borders
tui-basic

Generic TUI validation:

  • Has visible content (not blank)
  • No rendering artifacts or broken characters
  • Proper terminal dimensions

Execution Flow

1. Capture Phase

Capture TUI output based on target type:

For file targets:

bash
freeze {file_path} -o /tmp/tui-capture.{format}

For command targets:

bash
freeze --execute "{command}" -o /tmp/tui-capture.{format}

For tmux targets:

bash
tmux capture-pane -pet {session} | freeze -o /tmp/tui-capture.{format}

For buffer targets:

bash
echo "{buffer}" | freeze -o /tmp/tui-capture.{format}

Constraints:

  • You MUST verify freeze is installed before attempting capture
  • You MUST handle capture failures gracefully and report the error
  • You MUST use appropriate freeze flags for the output format
  • You SHOULD use --theme base16 for consistent rendering
  • You SHOULD set reasonable dimensions with --width and --height
2. Extraction Phase

Extract content for LLM analysis:

For text/semantic validation:

  • If format is text, use the captured text directly
  • If format is svg or png, also capture text version for content analysis

For visual validation:

  • Requires PNG format
  • Will analyze the image directly using vision capabilities

Constraints:

  • You MUST extract both visual and text representations when judge_mode is visual
  • You MUST preserve ANSI escape sequences for color validation when relevant
3. Validation Phase

Apply LLM-as-judge with the appropriate criteria:

Semantic Validation Prompt Template:

Analyze this terminal UI output and determine if it meets the following criteria:

CRITERIA:
{criteria_description}

TERMINAL OUTPUT:
{captured_text}

Evaluate each criterion and provide:
1. PASS or FAIL for each requirement
2. Brief explanation for any failures
3. Overall verdict: PASS or FAIL

Be lenient on exact formatting but strict on:
- Required content presence
- Logical layout and hierarchy
- No rendering errors or artifacts

Visual Validation Prompt Template (with image):

Examine this terminal screenshot and validate:

CRITERIA:
{criteria_description}

Check for:
1. Visual hierarchy and layout
2. Color coding correctness
3. No rendering artifacts or broken characters
4. Proper alignment and spacing

Verdict: PASS or FAIL with explanation

Constraints:

  • You MUST return a clear PASS or FAIL verdict
  • You MUST provide specific feedback on failures
  • You MUST be lenient on whitespace/formatting differences
  • You MUST be strict on content presence and semantic correctness
  • You SHOULD note any warnings even on PASS results
Show full SKILL.md (355 more words)Show less
4. Reporting Phase

Report validation results:

On PASS:

✅ TUI Validation PASSED

Criteria: {criteria_name}
Target: {target}
Mode: {judge_mode}

All requirements satisfied.
{optional_notes}

On FAIL:

❌ TUI Validation FAILED

Criteria: {criteria_name}
Target: {target}
Mode: {judge_mode}

Issues found:
- {issue_1}
- {issue_2}

Screenshot saved: {path_if_saved}

Constraints:

  • You MUST always provide a clear verdict
  • You MUST list specific issues on failure
  • You MUST offer the screenshot path if saved
  • You SHOULD suggest fixes for common issues

Examples

Example 1: Validate Ralph Header from File

Input:

/tui-validate file:test_output.txt criteria:ralph-header

Process:

  1. Read test_output.txt containing ANSI output
  2. Capture with freeze: freeze test_output.txt -o /tmp/capture.svg
  3. Extract text content
  4. Apply ralph-header criteria via LLM judge
  5. Report PASS/FAIL with details
Example 2: Validate Live TUI in tmux

Input:

/tui-validate tmux:ralph-session criteria:ralph-full save_screenshot:true

Process:

  1. Capture tmux pane: tmux capture-pane -pet ralph-session | freeze -o ralph-session.svg
  2. Also capture text: tmux capture-pane -pet ralph-session > /tmp/text.txt
  3. Apply ralph-full criteria checking header, content, and footer
  4. Save screenshot to ralph-session.svg
  5. Report validation result
Example 3: Custom Criteria Validation

Input:

/tui-validate command:"cargo run --example tui_demo" criteria:"Shows a bordered box with 'Hello World' text centered inside" output_format:png judge_mode:visual

Process:

  1. Execute command and capture: freeze --execute "cargo run --example tui_demo" -o /tmp/capture.png
  2. Use vision model to analyze PNG
  3. Check for bordered box and centered text
  4. Report visual validation result
Example 4: Quick Text Validation

Input:

/tui-validate buffer:"[iter 3/10] 04:32 | 🔨 Builder | ▶ auto" criteria:ralph-header output_format:text

Process:

  1. Analyze text directly (no freeze needed for text mode with buffer)
  2. Check for iteration format, elapsed time, hat, and mode indicator
  3. Report validation result

Criteria Definitions

ralph-header (Full Definition)
yaml
name: ralph-header
description: Ralph TUI header component validation
requirements:
  - name: iteration_counter
    description: Shows iteration in [iter N] or [iter N/M] format
    required: true
    pattern: '\[iter \d+(/\d+)?\]'

  - name: elapsed_time
    description: Shows elapsed time in MM:SS format
    required: true
    pattern: '\d{2}:\d{2}'

  - name: hat_indicator
    description: Shows current hat with emoji prefix
    required: true
    examples: ["🔨 Builder", "📋 Planner", "🎯 Executor"]

  - name: mode_indicator
    description: Shows loop mode status
    required: true
    values: ["▶ auto", "⏸ paused"]

  - name: scroll_indicator
    description: Shows [SCROLL] when in scroll mode
    required: false
    pattern: '\[SCROLL\]'

  - name: idle_countdown
    description: Shows idle timeout when present
    required: false
    pattern: 'idle: \d+s'
yaml
name: ralph-footer
description: Ralph TUI footer component validation
requirements:
  - name: activity_indicator
    description: Shows current activity state
    required: true
    values: ["◉ active", "◯ idle", "■ done"]

  - name: event_topic
    description: Shows last event topic
    required: false
    examples: ["task.start", "build.done", "loop.terminate"]

  - name: search_display
    description: Shows search query and match count when searching
    required: false
    pattern: 'Search: .+ \d+/\d+'
ralph-full (Full Definition)
yaml
name: ralph-full
description: Complete Ralph TUI layout validation
requirements:
  - name: header_section
    description: Header at top with iteration, time, hat, and mode
    required: true
    references: ralph-header

  - name: content_section
    description: Main terminal content area
    required: true
    checks:
      - Has visible content or is ready for content
      - Properly bounded between header and footer

  - name: footer_section
    description: Footer at bottom with activity status
    required: true
    references: ralph-footer

  - name: visual_hierarchy
    description: Clear visual separation between sections
    required: true
    checks:
      - Borders or spacing between sections
      - Consistent width across sections

Troubleshooting

freeze not found
bash
# macOS
brew install charmbracelet/tap/freeze

# Linux (via Go)
go install github.com/charmbracelet/freeze@latest

# Verify installation
freeze --version
tmux capture fails
  • Ensure the tmux session exists: tmux list-sessions
  • Verify pane number: tmux list-panes -t {session}
  • Try capturing specific pane: tmux capture-pane -pet {session}:{pane}
Rendering artifacts in capture
  • Try different terminal emulator settings in freeze
  • Use --theme flag for consistent colors
  • Ensure terminal dimensions match TUI expectations
LLM judge too strict/lenient
  • Adjust criteria to be more specific
  • Use strict mode for exact matching requirements
  • Use semantic mode for layout/presence checking

Integration with Tests

This skill can be integrated into test suites:

rust
// In tests/tui_validation.rs
#[test]
#[ignore] // Run with: cargo test -- --ignored
fn validate_header_rendering() {
    // 1. Render header to buffer
    let output = render_header_to_string(&test_state);

    // 2. Save to temp file
    std::fs::write("/tmp/header_test.txt", &output).unwrap();

    // 3. Run tui-validate skill (via CLI or programmatic)
    // /tui-validate file:/tmp/header_test.txt criteria:ralph-header

    // 4. Assert validation passed
}

Best Practices

  1. Use semantic validation for layout checks - Don't break on minor formatting
  2. Use strict validation for content requirements - Ensure critical info is present
  3. Save screenshots on failure - Aids debugging
  4. Test with various terminal sizes - TUIs should be responsive
  5. Combine with unit tests - Use this for integration/visual validation, unit tests for logic

© mikeyobrien, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/tui-validate of mikeyobrien/ralph-orchestrator.

Open the folder on GitHubat commit edc2b32

Compare with similar skills

Tui Validate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tui Validate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tui Validate this skillmikeyobrien/ralph-orchestrator3.2k—~3kAutomated safety check: PassMIT
Eval Agentic Launchopen-thoughts/OpenThoughts-Agent301—~3.7kAutomated safety check: PassApache-2.0
LLM Trace Review Interfaceai-evals-course/evals-skills1.5k—~1.4kAutomated safety check: PassApache-2.0
1passwordtrpc-group/trpc-agent-go1.8k15 repos~656Automated safety check: PassApache-2.0
LLM Benchmarking with lm-evaluation-harnessOrchestra-Research/AI-Research-SKILLs13k8 repos~3kAutomated safety check: PassMIT
Azure AI Projects Python SDKmicrosoft/skills3.1k6 repos~2.8kAutomated safety check: PassMIT

Similar skills

  • Eval Agentic Launch

    open-thoughts/OpenThoughts-Agent

    Launch agentic Harbor evals through the OT-Agent unified eval listener (eval/unifiedevallistener.py) on any cluster: select models (queryunevaledmodels.py / priority lists), wire the pinggy…

    301 GitHub stars~3.7k tokensUpdated 10 days ago
    AI & LLM EngineeringAuto-check passed
  • LLM Trace Review Interface

    ai-evals-course/evals-skills

    Builds a browser-based annotation page for reviewing LLM traces one at a time with pass/fail labels, notes and saved results, tailored to your data.

    1.5k GitHub stars~1.4k tokensUpdated 14 days ago
    AI & LLM EngineeringAuto-check passed
  • 1password

    trpc-group/trpc-agent-go

    Set up and use 1Password CLI (op). An agent skill from trpc-group/trpc-agent-go.

    1.8k GitHub starsUsed in 15 repos~656 tokens
    AI & LLM EngineeringAuto-check passed
  • LLM Benchmarking with lm-evaluation-harness

    Orchestra-Research/AI-Research-SKILLs

    Runs lm-evaluation-harness to benchmark language models on academic suites such as MMLU, GSM8K and HumanEval, compare models and track training checkpoints.

    13k GitHub starsUsed in 8 repos~3k tokens
    AI & LLM EngineeringAuto-check passed
  • Official

    Reference for building on Microsoft Foundry with the azure-ai-projects Python SDK: project clients, versioned agents, evaluations, connections, datasets and indexes.

    3.1k GitHub starsUsed in 6 repos~2.8k tokens
    AI & LLM EngineeringAuto-check passed
  • Fine-Tuning Expert

    Jeffallan/claude-skills

    Guides LLM fine-tuning with LoRA and QLoRA through Hugging Face PEFT, from dataset validation and training checks to adapter merging, quantization and deployment.

    12k GitHub starsUsed in 1 repo~1.7k tokens
    AI & LLM EngineeringAuto-check passed

More from mikeyobrien/ralph-orchestrator

All 16 skills in this repo
  • Ralph Docs

    mikeyobrien/ralph-orchestrator

    Introspect, explain, and improve Ralph Orchestrator using its published llms.txt doc map.

    3.2k GitHub stars~1.5k tokensUpdated 3 days ago
    Auto-check passed
  • Evaluate Presets

    mikeyobrien/ralph-orchestrator

    A skill your agent uses when testing Ralph's hat collection presets, validating preset configurations, or auditing the preset library for bugs and UX issues.

    3.2k GitHub stars~1.8k tokensUpdated 3 days ago
    Auto-check passed
  • PR Demo

    mikeyobrien/ralph-orchestrator

    A skill your agent uses when creating animated demos (GIFs) for pull requests or documentation.

    3.2k GitHub stars~1.3k tokensUpdated 3 days ago
    Auto-check passed
  • Release Bump

    mikeyobrien/ralph-orchestrator

    A skill your agent uses when bumping ralph-orchestrator version for a new release, after fixes are committed and ready to publish

    3.2k GitHub stars~583 tokensUpdated 3 days ago
    Auto-check passed
  • Review PR

    mikeyobrien/ralph-orchestrator

    A skill your agent uses when asked to review a PR, run a code review loop, or invoke the ralph reviewer against a pull request number or GitHub URL

    3.2k GitHub stars~589 tokensUpdated 3 days ago
    Auto-check passed
  • Tui Debug In Pane

    mikeyobrien/ralph-orchestrator

    A skill your agent uses when you need to reproduce or debug TUI rendering issues (garbled output, broken streaming, layout corruption) by running ralph in a tmux split pane and capturing live output.

    3.2k GitHub stars~825 tokensUpdated 3 days ago
    Auto-check passed

Works with

Questions about Tui Validate

What does Tui Validate do?

Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation. Tui Validate is an agent skill from mikeyobrien/ralph-orchestrator. Validates Terminal User Interface (TUI) output using freeze for screenshot capture and LLM-as-judge for semantic validation.

When should I use Tui Validate?

Tui Validate fits situations like: tasks that involve LLM evaluation.

How do I install Tui Validate in Claude Code?

Run `npx skills add mikeyobrien/ralph-orchestrator --skill tui-validate -a claude-code`. Or copy the skill folder (.claude/skills/tui-validate in mikeyobrien/ralph-orchestrator) into .claude/skills/tui-validate in your project. Claude Code loads it when a task matches its description.

How do I install Tui Validate in Codex?

Run `npx skills add mikeyobrien/ralph-orchestrator --skill tui-validate -a codex`. Or copy the skill folder (.claude/skills/tui-validate in mikeyobrien/ralph-orchestrator) into .agents/skills/tui-validate in your project. Codex loads it when a task matches its description.

Can I use Tui Validate in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mikeyobrien/ralph-orchestrator --skill tui-validate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tui-validate, .gemini/skills/tui-validate, .github/skills/tui-validate and .opencode/skills/tui-validate in your project.

What does Tui Validate need to run?

Going by SKILL.md and its folder, Tui Validate needs the command-line tools its instructions call (brew and go).

Does Tui Validate access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Tui Validate safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Tui Validate use?

Tui Validate is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tui Validate use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Tui Validate?

Skills that share tags, products or a category with Tui Validate: Eval Agentic Launch (open-thoughts/OpenThoughts-Agent, 301 stars), LLM Trace Review Interface (ai-evals-course/evals-skills, 1.5k stars), 1password (trpc-group/trpc-agent-go, 1.8k stars) and LLM Benchmarking with lm-evaluation-harness (Orchestra-Research/AI-Research-SKILLs, 13k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tui Validate?

mikeyobrien (a GitHub user) maintains it in mikeyobrien/ralph-orchestrator, which has 3,167 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 5, 2026.

Source: mikeyobrien/ralph-orchestrator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.