Skip to content

[Feat]: CLI visual redesign — pastel theme, short descriptions, and interactive #93

@rosspeili

Description

@rosspeili

Feature Description

The current skillware list output is functional but has two UX problems visible in the screenshot below, and is missing an interactive entry point entirely:

  1. Descriptions are too long — each skill's full description wraps across many rows, making the table hard to scan at a glance. Each description should be capped to a single short sentence (~80 chars max), truncated with if needed.
  2. No visual identity — the table uses rich's default white-on-dark styling with no color. The repo's existing visual language (soft pastel badges: lavender #C7CEEA, peach #FFDAC1, mint, rose) should be reflected in the CLI output — column headers, category tags, and borders styled with matching pastels.
  3. No interactive entry point — running skillware with no arguments currently prints plain argparse help. It should instead launch an ASCII splash screen with an interactive menu.

Rationale

The CLI is the first thing a new contributor sees after install. A visually coherent, welcoming terminal experience reduces friction and signals project quality. The pastel palette already exists in the repo's GitHub labels and README badges — carrying it into the terminal creates a unified identity across surfaces.

The interactive menu makes skillware feel like a first-class tool rather than a flag-driven utility, and is more discoverable for users who don't read docs first.

Implementation Idea

1. Short descriptions in manifest.yaml

Each skill's manifest.yaml should add a short_description field (max ~80 chars, one sentence). skillware list should display short_description if present, falling back to the first sentence of description truncated at 80 chars. This avoids any breaking change to existing manifests.

short_description: "Screens Ethereum wallets against OFAC sanctions and mixer lists."

2. Pastel color theme in cli.py

Use rich styles to apply the repo's palette to the table:

from rich.table import Table
from rich import box

TABLE_STYLE    = "bold #C7CEEA"   # lavender  — headers
CATEGORY_STYLE = "bold #FFDAC1"  # peach     — category column
ID_STYLE       = "#B5EAD7"       # mint      — skill ID column
BORDER_STYLE   = "#C7CEEA"       # lavender  — table border

table = Table(box=box.SIMPLE_HEAVY, border_style=BORDER_STYLE, header_style=TABLE_STYLE)
table.add_column("ID",           style=ID_STYLE,       no_wrap=True)
table.add_column("VERSION",      style="dim")
table.add_column("CATEGORY",     style=CATEGORY_STYLE)
table.add_column("ISSUER",       style="dim")
table.add_column("DESCRIPTION")
table.add_column("REQUIREMENTS", style="dim")

3. ASCII splash + interactive menu

When skillware is run with no arguments (instead of argparse help), display:

  ███████╗██╗  ██╗██╗██╗     ██╗    ██╗ █████╗ ██████╗ ███████╗
  ██╔════╝██║ ██╔╝██║██║     ██║    ██║██╔══██╗██╔══██╗██╔════╝
  ███████╗█████╔╝ ██║██║     ██║ █╗ ██║███████║██████╔╝█████╗
  ╚════██║██╔═██╗ ██║██║     ██║███╗██║██╔══██║██╔══██╗██╔══╝
  ███████║██║  ██╗██║███████╗╚███╔███╔╝██║  ██║██║  ██║███████╗
  ╚══════╝╚═╝  ╚═╝╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝
  Skill Management Framework — v{version}

Followed by a minimal numbered menu listing all available commands:

  [1]  list      — discover and display all locally installed skills
  [2]  paths     — show and repair skill directory resolution paths
  [3]  test      — run test_skill.py for one or all skills
  [4]  help      — usage guide for any command

  >

The menu should accept both number input (1) and command name (list). Entering a number or name runs the corresponding command interactively. Ctrl+C / q exits cleanly. The aesthetic should be minimal and purposeful — no animations, no gimmicks — just clean monospace typography, consistent pastel accents, and a military-terse tone (short labels, no decoration beyond what's functional).

The splash and menu live in a new cmd_interactive() function in skillware/cli.py, called from main() when args.command is None.


Affected Files

File Change
skillware/cli.py Add pastel styles to table, add cmd_interactive() splash+menu, update main()
skillware/core/ (manifests) Add short_description field to existing skill manifests
tests/test_cli.py Tests for cmd_interactive() exit, menu dispatch, and truncation logic
docs/usage/cli.md Document short_description, the interactive menu, and color theme

Checklist for the implementer

  • short_description field added to all existing manifest.yaml files under skills/
  • skillware list displays short_description (truncated fallback if absent), max 80 chars per cell
  • Table uses pastel rich styles matching the repo's label palette
  • skillware (no args) launches ASCII splash (try to copy the logo from readme) + interactive numbered menu
  • Menu handles both number and name input; exits cleanly on q / Ctrl+C
  • tests/test_cli.py covers truncation logic and interactive dispatch
  • docs/usage/cli.md updated

Metadata

Metadata

Assignees

Labels

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions