agentleFS
YParesYPares/agent-skills/textual-builder/SKILL.md

textual-builder

Skill30 starsChanged 10 months agoMITView on GitHub

Build Text User Interface (TUI) applications using the Textual Python framework (v0.86.0+). Use when creating terminal-based applications, prototyping card games or interactive CLIs, or when the user mentions Textual, TUI, or terminal UI. Includes comprehensive reference documentation, card game starter template, and styling guides.

  • Installs packages

The file

Show its rules and text

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 8 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Start with basic app structure (see Quick Start)

    line 116
  2. Very specific:

    Add widgets (read references/widgets.md)

    line 118
  3. Very specific:

    Add interactivity (read references/interactivity.md)

    line 120
  4. Distinctive:

    Add game-specific rules in message handlers

    line 127
  5. Distinctive:

    Use reactive attributes for state management

    line 135
  6. Distinctive:

    Update UI in watchers

    line 136
  7. Distinctive:

    Progressive Development: Start simple, add complexity incrementally

    line 140
  8. Very specific:

    Reactive State: Use reactive() for state that affects UI

    line 141
  9. Very specific:

    CSS Separation: Keep styling in .tcss files, not inline

    line 142
  10. Distinctive:

    Widget Reuse: Create custom widgets for repeated components

    line 143
  11. Very specific:

    Message Bubbling: Use event.stop() to control message propagation

    line 144
  12. Distinctive:

    Type Hints: Use proper type hints for better IDE support

    line 145
  13. Distinctive:

    IDs and Classes: Use semantic IDs/classes for querying and styling

    line 146

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Textual Builder

Overview

This skill helps you build sophisticated Text User Interfaces (TUIs) using Textual, a Python framework for creating terminal and browser-based applications with a modern web-inspired API. It includes reference documentation, a card game template, and best practices for Textual development.

Quick Start

Basic Textual App

from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Label

class MyApp(App):
    def compose(self) -> ComposeResult:
        yield Header()
        yield Label("Hello, Textual!")
        yield Footer()

if __name__ == "__main__":
    app = MyApp()
    app.run()

Card Game Template

For card game prototyping, copy the template:

cp -r assets/card-game-template/* ./my-game/
cd my-game
python app.py

The template includes:

  • Interactive Card widget with face-up/down states
  • Hand containers for player cards
  • Play area with turn management
  • Key bindings for card selection and playing
  • Customizable styling

See assets/card-game-template/README.md for customization guide.

When to Read Reference Documentation

This skill includes comprehensive reference files. Load them based on your task:

references/basics.md

Read when: Setting up app structure, using reactive attributes, handling mounting, querying widgets, or working with messages/events.

Covers:

  • App structure and compose method
  • Reactive attributes and watchers
  • Mounting and dynamic widget creation
  • Widget querying
  • Messages, events, and custom messages

references/widgets.md

Read when: Adding UI elements like buttons, inputs, labels, data tables, or creating custom widgets.

Covers:

  • Display widgets (Label, Static, Placeholder)
  • Input widgets (Button, Input, TextArea, Switch)
  • DataTable for tabular data
  • Layout containers (Container, Grid, Horizontal, Vertical)
  • Custom widget creation
  • Header/Footer

references/layout.md

Read when: Designing layouts, positioning widgets, using grid systems, or handling responsive sizing.

Covers:

  • Layout types (vertical, horizontal, grid)
  • Grid configuration (cell spanning, row/column sizing)
  • Alignment and content positioning
  • Docking widgets to screen edges
  • Sizing (fixed, relative, fractional, auto)
  • Spacing (margin, padding)
  • Scrolling

references/styling.md

Read when: Applying CSS styles, theming, adding borders, or customizing widget appearance.

Covers:

  • CSS files and selectors
  • Colors (named, hex, RGB, theme variables)
  • Borders and border styling
  • Text styling and alignment
  • Opacity and tinting
  • Rich markup for styled text
  • Pseudo-classes (:hover, :focus, etc.)

references/interactivity.md

Read when: Implementing keyboard shortcuts, handling mouse events, responding to user actions, or creating interactive behaviors.

Covers:

  • Key bindings and actions
  • Dynamic binding updates
  • Mouse events (click, hover, enter, leave)
  • Keyboard events
  • Focus management
  • Widget-specific messages
  • Custom messages
  • Notifications and timers

Common Workflows

Creating a New TUI App

  1. Start with basic app structure (see Quick Start)
  2. Design layout (read references/layout.md)
  3. Add widgets (read references/widgets.md)
  4. Style with CSS (read references/styling.md)
  5. Add interactivity (read references/interactivity.md)

Prototyping a Card Game

  1. Copy the card game template
  2. Customize the Card widget for your game's card properties
  3. Modify game logic in action methods
  4. Add game-specific rules in message handlers
  5. Style cards and layout in app.tcss

Adding Interactive Features

  1. Define key bindings in BINDINGS
  2. Implement action methods (action_*)
  3. Handle widget messages (on_button_pressed, etc.)
  4. Use reactive attributes for state management
  5. Update UI in watchers

Best Practices

  • Progressive Development: Start simple, add complexity incrementally
  • Reactive State: Use reactive() for state that affects UI
  • CSS Separation: Keep styling in .tcss files, not inline
  • Widget Reuse: Create custom widgets for repeated components
  • Message Bubbling: Use event.stop() to control message propagation
  • Type Hints: Use proper type hints for better IDE support
  • IDs and Classes: Use semantic IDs/classes for querying and styling

Installation

pip install textual
# or
uv pip install textual

Current version: v0.86.0+ (as of November 2025, latest is v6.6.0)

Resources

references/

Comprehensive documentation loaded on-demand:

  • basics.md - Core concepts and app structure
  • widgets.md - Widget catalog and usage
  • layout.md - Layout systems and positioning
  • styling.md - CSS and theming
  • interactivity.md - Events, bindings, and actions

assets/

  • card-game-template/ - Complete starter template for card games with interactive cards, hands, and turn management

Official Documentation

For topics not covered in this skill, consult:

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.