rich-terminal-output

Rich Terminal Output Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "rich-terminal-output" with this command: npx skills add autumnsgrove/groveengine/autumnsgrove-groveengine-rich-terminal-output

Rich Terminal Output Skill

When to Activate

Activate this skill when:

  • Building CLI applications

  • Displaying structured data (tables)

  • Showing progress for long operations

  • Creating error/status panels

  • Pretty-printing objects for debugging

  • Enhancing logging output

Installation

uv add rich

Quick test

python -c "from rich import print; print('[bold green]Rich working![/]')"

Core Concepts

Console Object

from rich.console import Console

console = Console()

Basic output

console.print("Hello, World!")

Styled output

console.print("[bold red]Error:[/] Something went wrong") console.print("[green]Success![/] Operation completed")

Markup Syntax

"[bold]Bold[/]" "[italic]Italic[/]" "[red]Red text[/]" "[blue on white]Blue on white background[/]" "[bold red]Combined styles[/]" "[link=https://example.com]Click here[/]"

Drop-in Print Replacement

from rich import print

print("[bold cyan]Styled text[/]") print({"key": "value"}) # Auto-pretty-prints

Tables

from rich.console import Console from rich.table import Table

console = Console()

table = Table(title="User List")

table.add_column("ID", style="cyan", justify="right") table.add_column("Name", style="magenta") table.add_column("Email", style="green") table.add_column("Status", justify="center")

table.add_row("1", "Alice", "alice@example.com", "✓ Active") table.add_row("2", "Bob", "bob@example.com", "✓ Active") table.add_row("3", "Charlie", "charlie@example.com", "✗ Inactive")

console.print(table)

Panels

from rich.console import Console from rich.panel import Panel

console = Console()

Simple panel

console.print(Panel("Operation completed!"))

Styled panel

console.print(Panel( "[green]All tests passed![/]\n\n" "Total: 42 tests\n" "Time: 3.2s", title="Test Results", border_style="green" ))

Error panel

console.print(Panel( "[red]Connection refused[/]\n\n" "Host: localhost:5432", title="[bold red]Error[/]", border_style="red" ))

Progress Bars

Simple Progress

from rich.progress import track import time

for item in track(range(100), description="Processing..."): time.sleep(0.01)

Multiple Tasks

from rich.progress import Progress

with Progress() as progress: task1 = progress.add_task("[red]Downloading...", total=100) task2 = progress.add_task("[green]Processing...", total=100)

while not progress.finished:
    progress.update(task1, advance=0.9)
    progress.update(task2, advance=0.6)
    time.sleep(0.02)

Syntax Highlighting

from rich.console import Console from rich.syntax import Syntax

console = Console()

code = ''' def hello(): print("Hello, World!") '''

syntax = Syntax(code, "python", theme="monokai", line_numbers=True) console.print(syntax)

Tree Displays

from rich.console import Console from rich.tree import Tree

console = Console()

tree = Tree("[bold blue]MyProject/[/]") src = tree.add("[bold]src/[/]") src.add("main.py") src.add("config.py")

tests = tree.add("[bold]tests/[/]") tests.add("test_main.py")

console.print(tree)

Logging Integration

import logging from rich.logging import RichHandler

logging.basicConfig( level=logging.INFO, format="%(message)s", handlers=[RichHandler(rich_tracebacks=True)] )

logger = logging.getLogger("myapp") logger.info("Application started") logger.error("Connection failed")

Pretty Tracebacks

from rich.traceback import install

Call once at startup

install(show_locals=True)

All exceptions now have beautiful tracebacks

Common Pitfalls

Reuse Console Instance

❌ Bad

def show(msg): Console().print(msg) # Creates new instance each time

✅ Good

console = Console() def show(msg): console.print(msg)

Escape User Input

from rich.markup import escape

username = "user[admin]"

❌ Bad - brackets break markup

console.print(f"[blue]{username}[/]")

✅ Good

console.print(f"[blue]{escape(username)}[/]")

Handle Non-TTY

import sys

console = Console(force_terminal=sys.stdout.isatty())

CLI Application Pattern

import click from rich.console import Console from rich.panel import Panel

console = Console()

@click.command() @click.argument('filename') def process(filename): console.print(f"[bold]Processing:[/] {filename}")

with console.status("[bold green]Working..."):
    result = do_work(filename)

if result.success:
    console.print(Panel(
        f"[green]Processed {result.count} items[/]",
        title="Success"
    ))
else:
    console.print(f"[red]Error:[/] {result.error}")

When NOT to Use Rich

  • Non-interactive scripts (output piped)

  • Server-side logging

  • Performance-critical loops

  • Minimal dependency requirements

Related Resources

See AgentUsage/rich_formatting.md for complete documentation including:

  • Advanced table customization

  • Spinner and status displays

  • Console recording

  • Integration patterns

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

cloudflare-deployment

No summary provided by upstream source.

Repository SourceNeeds Review
General

api-integration

No summary provided by upstream source.

Repository SourceNeeds Review
General

rust-testing

No summary provided by upstream source.

Repository SourceNeeds Review
General

git-hooks

No summary provided by upstream source.

Repository SourceNeeds Review