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
In this repository13 other files it gives its agents.
- AGENTS.mdAGENTS.md
- cursor-agent-supervisorSkill
- github-pr-workflowSkill
- jj-todo-workflowSkill
- nix-profile-managerSkill
- nushell-plugin-builderSkill
- nushell-usageSkill
- package-npm-nixSkill
- read-bin-docsSkill
- research-assistantSkill
- searxng-searchSkill
- typst-writerSkill
- working-with-jjSkill
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
- Distinctive: line 116
Start with basic app structure (see Quick Start)
- Very specific: line 118
Add widgets (read references/widgets.md)
- Very specific: line 120
Add interactivity (read references/interactivity.md)
- Distinctive: line 127
Add game-specific rules in message handlers
- Distinctive: line 135
Use reactive attributes for state management
- Distinctive: line 136
Update UI in watchers
- Distinctive: line 140
Progressive Development: Start simple, add complexity incrementally
- Very specific: line 141
Reactive State: Use reactive() for state that affects UI
- Very specific: line 142
CSS Separation: Keep styling in .tcss files, not inline
- Distinctive: line 143
Widget Reuse: Create custom widgets for repeated components
- Very specific: line 144
Message Bubbling: Use event.stop() to control message propagation
- Distinctive: line 145
Type Hints: Use proper type hints for better IDE support
- Distinctive: line 146
IDs and Classes: Use semantic IDs/classes for querying and styling
≈ “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.
Files
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.pyThe 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
- Start with basic app structure (see Quick Start)
- Design layout (read
references/layout.md) - Add widgets (read
references/widgets.md) - Style with CSS (read
references/styling.md) - Add interactivity (read
references/interactivity.md)
Prototyping a Card Game
- Copy the card game template
- Customize the Card widget for your game's card properties
- Modify game logic in action methods
- Add game-specific rules in message handlers
- Style cards and layout in
app.tcss
Adding Interactive Features
- Define key bindings in
BINDINGS - Implement action methods (
action_*) - Handle widget messages (
on_button_pressed, etc.) - Use reactive attributes for state management
- 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
.tcssfiles, 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 textualCurrent 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 structurewidgets.md- Widget catalog and usagelayout.md- Layout systems and positioningstyling.md- CSS and theminginteractivity.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:
- https://textual.textualize.io/ (official docs)
- https://github.com/Textualize/textual (GitHub repo)
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
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.

