π skillshare v0.18.0 Release Notes
Release date: 2026-03-26
Discussion: #99
TL;DR
skillshare analyzeβ new command to measure context window token usage per target and lint skill quality- Skill quality lint β 7 built-in rules catch missing fields, short descriptions, and missing trigger phrases
- Analyze TUI β interactive exploration with target switching, color dots, sort cycling, and lint icons
- Web UI Analyze page β dashboard with chart, table, and token breakdown
- Update page polish β sticky search filter and SplitButton actions
Analyze Command
skillshare analyze calculates how much context window budget your skills consume for each configured target. It reports two layers:
- Always loaded β the
name+descriptionfrom SKILL.md frontmatter, which AI tools load on every request to decide which skills to trigger - On-demand β the skill body after frontmatter, loaded only when the skill is actually invoked
Token estimates use chars / 4 as an approximation.
skillshare analyze # interactive TUI (default)
skillshare analyze claude # details for one target (auto-verbose)
skillshare analyze --verbose # top 10 largest descriptions per target
skillshare analyze --json # JSON output for scripting
skillshare analyze -p # project modePassing a target name automatically enables verbose output. Use --no-tui to disable the interactive TUI and print plain text.
Skill Quality Lint
analyze also runs a built-in lint engine against every discovered skill. The engine checks SKILL.md structure and description quality using 7 rules defined in lint_rules.yaml:
| Rule | Severity | What it checks |
|---|---|---|
missing-name
| error | name field is empty or missing
|
missing-description
| error | description field is empty or missing
|
empty-body
| error | Skill body (after frontmatter) is empty |
description-too-short
| warning | Description under 50 characters |
description-too-long
| warning | Description exceeds 1024-character limit |
description-near-limit
| warning | Description between 900β1024 characters |
no-trigger-phrase
| warning | Description lacks trigger phrases like "Use whenβ¦" |
Lint issues appear in the TUI next to skill names (β for errors, β for warnings) and in --json output as lint_issues per skill. This makes it easy to find and fix skills that AI tools might not trigger correctly.
Interactive TUI
The default analyze mode launches a full-screen bubbletea TUI with:
- Left panel β skill list sorted by token cost, with color-coded dots (red = P75+, yellow = P25βP75, green = below P25)
- Right panel β detail view showing token breakdown, lint quality issues, file path, tracked status, and description preview
- Bottom bar β target selector and token totals
Targets with identical skill sets are merged into groups (e.g., "claude, cursor" shown as one tab). Press Tab/Shift+Tab to switch, / to filter, s to cycle sort order (tokensβ β tokensβ β name AβZ β ZβA), and Ctrl+d/Ctrl+u to scroll the detail panel.
Web UI Analyze Page
The web dashboard adds a new Analyze page accessible from the sidebar navigation. It shows:
- Per-target token usage summary with a chart
- Skill table with description/body character and token counts
- Lint issue indicators per skill
- Token breakdown on individual Skill Detail pages
A new GET /api/analyze endpoint powers the page, returning per-target context analysis including lint issues, skill paths, tracked status, and descriptions.
Update Page Improvements
The Update page gets two usability improvements:
- Sticky search filter β the search input sticks to the top when scrolling long skill lists
- SplitButton actions β action buttons are now a compact SplitButton component instead of separate buttons
Unified Dialog Styling
All modal dialogs across the Web UI now share consistent styling via a DialogShell component, replacing per-dialog styling that had minor visual inconsistencies.
Changelog
- a636fc6 feat(analyze): add --no-tui flag and TUI dispatch
- 10415a7 feat(analyze): add Quality section and lint icons to TUI
- 439abbd feat(analyze): add TUI list delegate with color dots and bar chart
- 956a719 feat(analyze): add TUI-only fields to analyzeSkillEntry
- 620141a feat(analyze): add context analysis command
- 2e43e37 feat(analyze): add lint rules YAML and LintSkill engine
- 64ed9b0 feat(analyze): add malformed-frontmatter lint rule and polish UI/TUI
- e88c32b feat(analyze): implement interactive TUI with target switching and detail panel
- 2811a19 feat(analyze): return description from calcContextFromContent for TUI
- 57ce3f5 feat(analyze): wire lint into discovery and analyze data flow
- fe3e72f feat(ui): add GET /api/analyze endpoint
- 920feab feat(ui): add analyze API types, route, and nav item
- 977d761 feat(ui): add sticky search filter to Update page
- ae39892 feat(ui): add token breakdown to skill detail and polish AnalyzePage
- 9f38326 feat(ui): implement full AnalyzePage with dashboard, chart, and table
- 9ecd78e feat(ui): redesign AnalyzePage and unify dialog styling across all modals
- 89df6d2 fix(ui): center pin decoration on playful theme detail cards
- bb30924 refactor(analyze): merge identical targets into groups in TUI
- 78ba5c7 refactor(analyze): polish TUI rendering and add docs
- deb834c refactor(analyze): remove Context category bar from TUI
- d377e6b refactor(analyze): simplify lint engine and fix review findings
- d58b272 refactor(ui): replace Update page action buttons with SplitButton
- 68111d2 refactor: rename project skills with skillshare- prefix
- d404eda test(analyze): add integration test for JSON lint output
- 42dd4e4 test(analyze): add sort cycling and target switch unit tests
- f5e5588 test(analyze): add unit tests for all 7 lint rules