···11-<!-- base -->
11+<!-- BASE START -->
22## Interaction Guidelines
3344Direct, succinct, and objective. Favor headings over lists; use nested lists only for specific details.
···3333- **Dual Getter-Setter Functions**: Use overloaded functions for state: `fn()` to get, `fn(val)` to set.
3434- **Interface Quality**: Prioritize high-fidelity UI/UX and seamless DX.
35353636+### Error Handling
3737+- **Graceful Degradation**: Ensure system continues to operate in reduced capacity when errors occur.
3838+- **Informative Feedback**: Provide clear, actionable error messages to users and developers.
3939+- **Robust Logging**: Implement comprehensive logging for debugging and monitoring.
4040+3641### Performance and Scale
37423843- **Efficiency**: Favor built-in language features and efficient algorithms.
3944- **Consistency**: Maintain unified style for predictability.
4545+4646+### Safety
4747+- Do not run the dev server or compile/build, assume the user is already doing that.
4848+- Do not perform any irreversible actions without explicit user confirmation.
4949+- Do not commit and push unless told to. When told to, separate large commits into logical chunks with clear messages.
5050+- Before finishing a task, run the check commands to lint, type check and format.
4051<!-- end base -->
41524253<!-- caveman mode -->
4354Respond terse like smart caveman. All technical substance stay. Only fluff die.
44554556Rules:
4646-- Drop: articles (a/an/the), filler (just/really/basically), pleasantries, hedging
5757+- Drop: articles (//), filler (//), pleasantries, hedging
4758- Fragments OK. Short synonyms. Technical terms exact. Code unchanged.
4859- Pattern: [thing] [action] [reason]. [next step].
4960- Not: "Sure! I'd be happy to help you with that."
+24-8
README.md
···2233A curated collection of agent skills for design, frontend work, and cave tooling.
4455+## Install
66+77+<details>
88+<summary>Bun</summary>
99+```bash
1010+bunx --bun skills add davidbasilefilho/skills
1111+```
1212+</details>
1313+<details>
1414+<summary>npm</summary>
1515+```bash
1616+npx -y skills add davidbasilefilho/skills
1717+```
1818+</details>
1919+2020+521## What is in this repo
62277-Each directory under `skills/` contains a standalone skill definition. Skills are designed to help agents perform focused tasks such as improving layout, tightening copy, adding motion, auditing interfaces, or coordinating cave workflows.
2323+Each directory under `skills/` contains standalone skill definition. Skills are designed to help agents perform focused tasks such as improving layout, tightening copy, adding motion, auditing interfaces, or coordinating cave workflows.
824925## Included skills
1026···1329- `arrange` - Improve layout, spacing, and visual rhythm
1430- `audit` - Run technical quality checks across accessibility and performance
1531- `bolder` - Make safe designs more visually assertive
1616-- `cavecrew` - Coordinate a crew-oriented workflow for cave tools
1717-- `caveman` - Main entry point for the caveman toolset
3232+- `cavecrew` - Coordinate crew-oriented workflow for cave tools
3333+- `caveman` - Main entry point for caveman toolset
1834- `caveman-commit` - Create commits with caveman workflows
1935- `caveman-compress` - Compress work and context for cave tools
2020-- `caveman-help` - Show help for the caveman toolset
3636+- `caveman-help` - Show help for caveman toolset
2137- `caveman-review` - Review work with caveman workflows
2238- `caveman-stats` - Report caveman usage and stats
2339- `clarify` - Improve UX copy, labels, and instructions
2440- `colorize` - Add strategic color and visual warmth
2541- `compress` - Reduce output and context for cave workflows
2626-- `critique` - Review a design from a UX perspective
4242+- `critique` - Review design from UX perspective
2743- `delight` - Add moments of joy and personality
2844- `distill` - Simplify designs by removing unnecessary complexity
2945- `extract` - Consolidate reusable components and design tokens
···3753- `overdrive` - Push designs further when they need stronger impact
3854- `polish` - Refine interfaces with finishing touches
3955- `quieter` - Reduce noise and visual clutter
4040-- `teach-impeccable` - Establish the design context required by frontend skills
5656+- `teach-impeccable` - Establish design context required by frontend skills
4157- `typeset` - Improve typography and text presentation
4258- `ulw` - Create ultra-lightweight experiences
43594460## Usage
45614646-How a skill is invoked depends on the agent harness or editor integration you are using. In general, select the relevant skill for the task and load its `SKILL.md` instructions before working.
6262+How skill is invoked depends on agent harness or editor integration you are using. In general, select relevant skill for task and load its `SKILL.md` instructions before working.
47634864## Repository structure
4965···55715672## Contributing
57735858-- Keep each skill focused on a single job
7474+- Keep each skill focused on single job
5975- Prefer clear, direct instructions over duplicated guidance
6076- Update this README when adding or renaming skills
6177
-35
plan.md
···11-# Implementation Plan
22-33-## Goal
44-Apply the compress skill to every eligible text file under `./skills`, excluding `ulw`, `shadcn`, `cave*`, and `compress`.
55-66-## Tasks
77-1. **Define the target file set**: Enumerate all text files under `./skills` and filter out excluded skill trees.
88- - File: `./skills/**`
99- - Changes: Treat eligible files as markdown and other text files such as `SKILL.md`, `README.md`, `WARP.md`, `cli.md`, `customization.md`, `mcp.md`, and `rules/*.md`, while excluding anything under `./skills/ulw/`, `./skills/shadcn/`, `./skills/cave*/`, and `./skills/compress/`.
1010- - Acceptance: A final file list exists before any edits, and it contains no excluded paths.
1111-1212-2. **Run compression on eligible files only**: Invoke the compress skill once per target file, preserving code blocks, backticks, URLs, and technical terms.
1313- - File: each file in the target set
1414- - Changes: Overwrite each file with its caveman-compressed version and create `.original.md` backups as the skill requires.
1515- - Acceptance: Every eligible file is processed successfully, and no excluded file is modified.
1616-1717-3. **Verify results and exclusions**: Check that backups were created and that excluded directories remained unchanged.
1818- - File: processed targets plus exclusion paths
1919- - Changes: Compare a sample or full diff of compressed files, confirm `.original.md` backups exist for edited files, and confirm excluded paths have no diffs.
2020- - Acceptance: Modified files show compressed prose, backups are present, and excluded trees are untouched.
2121-2222-## Files to Modify
2323-- `./skills/**` - eligible text files only, excluding `ulw`, `shadcn`, `cave*`, and `compress` trees.
2424-2525-## New Files
2626-- `./skills/**/*.original.md` - human-readable backups created by the compress workflow.
2727-2828-## Dependencies
2929-- Task 1 must complete before Task 2.
3030-- Task 2 must complete before Task 3.
3131-3232-## Risks
3333-- The exclusion rule `cave*` is broad and may exclude both `cavecrew` and `caveman*` trees, so the exact match scope should be confirmed before execution.
3434-- Mixed-content markdown files may contain code blocks that must remain verbatim.
3535-- If any non-markdown text files exist under `./skills`, they need manual review to confirm they are safe to compress.
+4-4
skills/adapt/SKILL.md
···11---
22name: adapt
33-description: "Adapt designs to work across different screen sizes, devices, contexts, or platforms. Implements breakpoints, fluid layouts, and touch targets. Use when the user mentions responsive design, mobile layouts, breakpoints, viewport adaptation, or cross-device compatibility."
33+description: "Adapt designs to work across different screen sizes, devices, contexts, or platforms. Implements breakpoints, fluid layouts, and touch targets. Use when user mentions responsive design, mobile layouts, breakpoints, viewport adaptation, or cross-device compatibility."
44argument-hint: "[target] [context (mobile, tablet, print...)]"
55user-invocable: true
66---
···991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: target platforms or devices and usage contexts.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: target platforms or devices and usage contexts.
13131414---
1515···3535- What will not work? (Hover states on touch, tiny touch targets)
3636- What is inappropriate? (Desktop patterns on mobile, mobile patterns on desktop)
37373838-**CRITICAL**: Adaptation is not scaling. It is rethinking the experience for the new context.
3838+**CRITICAL**: Adaptation is not scaling. it's rethinking experience for new context.
39394040## Plan Adaptation Strategy
4141···195195- **Edge cases**: Very small screens (320px), very large screens (4K)
196196- **Slow connections**: Test on throttled network
197197198198-Remember: You are a cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly.
198198+Remember: You are cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly.
-198
skills/adapt/SKILL.md.original.md
···11----
22-name: adapt
33-description: "Adapt designs to work across different screen sizes, devices, contexts, or platforms. Implements breakpoints, fluid layouts, and touch targets. Use when the user mentions responsive design, mobile layouts, breakpoints, viewport adaptation, or cross-device compatibility."
44-argument-hint: "[target] [context (mobile, tablet, print...)]"
55-user-invocable: true
66----
77-88-Adapt existing designs to work effectively across different contexts: different screen sizes, devices, platforms, or use cases.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: target platforms or devices and usage contexts.
1313-1414----
1515-1616-## Assess Adaptation Challenge
1717-1818-Understand what needs adaptation and why.
1919-2020-### 1. Identify the source context
2121-- What was it designed for originally? (Desktop web? Mobile app?)
2222-- What assumptions were made? (Large screen? Mouse input? Fast connection?)
2323-- What works well in current context?
2424-2525-### 2. Understand target context
2626-- **Device**: Mobile, tablet, desktop, TV, watch, print?
2727-- **Input method**: Touch, mouse, keyboard, voice, gamepad?
2828-- **Screen constraints**: Size, resolution, orientation?
2929-- **Connection**: Fast wifi, slow 3G, offline?
3030-- **Usage context**: On-the-go vs desk, quick glance vs focused reading?
3131-- **User expectations**: What do users expect on this platform?
3232-3333-### 3. Identify adaptation challenges
3434-- What will not fit? (Content, navigation, features)
3535-- What will not work? (Hover states on touch, tiny touch targets)
3636-- What is inappropriate? (Desktop patterns on mobile, mobile patterns on desktop)
3737-3838-**CRITICAL**: Adaptation is not just scaling. It is rethinking the experience for the new context.
3939-4040-## Plan Adaptation Strategy
4141-4242-Create context-appropriate strategy.
4343-4444-### Mobile Adaptation (Desktop to Mobile)
4545-4646-**Layout Strategy**:
4747-- Single column instead of multi-column
4848-- Vertical stacking instead of side-by-side
4949-- Full-width components instead of fixed widths
5050-- Bottom navigation instead of top or side navigation
5151-5252-**Interaction Strategy**:
5353-- Touch targets 44x44px minimum (not hover-dependent)
5454-- Swipe gestures where appropriate (lists, carousels)
5555-- Bottom sheets instead of dropdowns
5656-- Thumbs-first design (controls within thumb reach)
5757-- Larger tap areas with more spacing
5858-5959-**Content Strategy**:
6060-- Progressive disclosure (do not show everything at once)
6161-- Prioritize primary content (secondary content in tabs or accordions)
6262-- Shorter text (more concise)
6363-- Larger text (16px minimum)
6464-6565-**Navigation Strategy**:
6666-- Hamburger menu or bottom navigation
6767-- Reduce navigation complexity
6868-- Sticky headers for context
6969-- Back button in navigation flow
7070-7171-### Tablet Adaptation (Hybrid Approach)
7272-7373-**Layout Strategy**:
7474-- Two-column layouts (not single or three-column)
7575-- Side panels for secondary content
7676-- Master-detail views (list plus detail)
7777-- Adaptive based on orientation (portrait vs landscape)
7878-7979-**Interaction Strategy**:
8080-- Support both touch and pointer
8181-- Touch targets 44x44px but allow denser layouts than phone
8282-- Side navigation drawers
8383-- Multi-column forms where appropriate
8484-8585-### Desktop Adaptation (Mobile to Desktop)
8686-8787-**Layout Strategy**:
8888-- Multi-column layouts (use horizontal space)
8989-- Side navigation always visible
9090-- Multiple information panels simultaneously
9191-- Fixed widths with max-width constraints (do not stretch to 4K)
9292-9393-**Interaction Strategy**:
9494-- Hover states for additional information
9595-- Keyboard shortcuts
9696-- Right-click context menus
9797-- Drag and drop where helpful
9898-- Multi-select with Shift or Cmd
9999-100100-**Content Strategy**:
101101-- Show more information upfront (less progressive disclosure)
102102-- Data tables with many columns
103103-- Richer visualizations
104104-- More detailed descriptions
105105-106106-### Print Adaptation (Screen to Print)
107107-108108-**Layout Strategy**:
109109-- Page breaks at logical points
110110-- Remove navigation, footer, interactive elements
111111-- Black and white (or limited color)
112112-- Proper margins for binding
113113-114114-**Content Strategy**:
115115-- Expand shortened content (show full URLs, hidden sections)
116116-- Add page numbers, headers, footers
117117-- Include metadata (print date, page title)
118118-- Convert charts to print-friendly versions
119119-120120-### Email Adaptation (Web to Email)
121121-122122-**Layout Strategy**:
123123-- Narrow width (600px max)
124124-- Single column only
125125-- Inline CSS (no external stylesheets)
126126-- Table-based layouts (for email client compatibility)
127127-128128-**Interaction Strategy**:
129129-- Large, obvious CTAs (buttons not text links)
130130-- No hover states (not reliable)
131131-- Deep links to web app for complex interactions
132132-133133-## Implement Adaptations
134134-135135-Apply changes systematically.
136136-137137-### Responsive Breakpoints
138138-139139-Choose appropriate breakpoints:
140140-- Mobile: 320px-767px
141141-- Tablet: 768px-1023px
142142-- Desktop: 1024px+
143143-- Or content-driven breakpoints (where design breaks)
144144-145145-### Layout Adaptation Techniques
146146-147147-- **CSS Grid or Flexbox**: Reflow layouts automatically
148148-- **Container Queries**: Adapt based on container, not viewport
149149-- **clamp()**: Fluid sizing between min and max
150150-- **Media queries**: Different styles for different contexts
151151-- **Display properties**: Show or hide elements per context
152152-153153-### Touch Adaptation
154154-155155-- Increase touch target sizes (44x44px minimum)
156156-- Add more spacing between interactive elements
157157-- Remove hover-dependent interactions
158158-- Add touch feedback (ripples, highlights)
159159-- Consider thumb zones (easier to reach bottom than top)
160160-161161-### Content Adaptation
162162-163163-- Use display: none sparingly (still downloads)
164164-- Progressive enhancement (core content first, enhancements on larger screens)
165165-- Lazy loading for off-screen content
166166-- Responsive images (srcset, picture element)
167167-168168-### Navigation Adaptation
169169-170170-- Transform complex nav to hamburger or drawer on mobile
171171-- Bottom nav bar for mobile apps
172172-- Persistent side navigation on desktop
173173-- Breadcrumbs on smaller screens for context
174174-175175-**IMPORTANT**: Test on real devices, not just browser DevTools. Device emulation is helpful but not perfect.
176176-177177-**NEVER**:
178178-- Hide core functionality on mobile (if it matters, make it work)
179179-- Assume desktop equals powerful device (consider accessibility, older machines)
180180-- Use different information architecture across contexts (confusing)
181181-- Break user expectations for platform (mobile users expect mobile patterns)
182182-- Forget landscape orientation on mobile or tablet
183183-- Use generic breakpoints blindly (use content-driven breakpoints)
184184-- Ignore touch on desktop (many desktop devices have touch)
185185-186186-## Verify Adaptations
187187-188188-Test thoroughly across contexts.
189189-190190-- **Real devices**: Test on actual phones, tablets, desktops
191191-- **Different orientations**: Portrait and landscape
192192-- **Different browsers**: Safari, Chrome, Firefox, Edge
193193-- **Different OS**: iOS, Android, Windows, macOS
194194-- **Different input methods**: Touch, mouse, keyboard
195195-- **Edge cases**: Very small screens (320px), very large screens (4K)
196196-- **Slow connections**: Test on throttled network
197197-198198-Remember: You are a cross-platform design expert. Make experiences that feel native to each context while maintaining brand and functionality consistency. Adapt intentionally, test thoroughly.
+6-6
skills/animate/SKILL.md
···11---
22name: animate
33-description: "Review a feature and enhance it with purposeful animations, micro-interactions, and motion effects that improve usability and delight. Use when the user mentions adding animation, transitions, micro-interactions, motion design, hover effects, or making the UI feel more alive."
33+description: "Review feature and enhance it with purposeful animations, micro-interactions, and motion effects that improve usability and delight. Use when user mentions adding animation, transitions, micro-interactions, motion design, hover effects, or making UI feel more alive."
44argument-hint: "[target]"
55user-invocable: true
66---
7788-Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
88+Analyze feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: performance constraints.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: performance constraints.
13131414---
15151616## Assess Animation Opportunities
17171818-Analyze where motion would improve the experience.
1818+Analyze where motion would improve experience.
19192020### 1. Identify static areas
2121- **Missing feedback**: Actions without visual acknowledgment (button clicks, form submission, etc.)
···3030- Who is audience? (Motion-sensitive users? Power users who want speed?)
3131- What matters most? (One hero animation vs many micro-interactions?)
32323333-If any of these are unclear from the codebase, {{ask_instruction}}
3333+If any of these are unclear from codebase, {{ask_instruction}}
34343535**CRITICAL**: Respect prefers-reduced-motion. Always provide non-animated alternatives for users who need them.
36363737## Plan Animation Strategy
38383939-Create a purposeful animation plan.
3939+Create purposeful animation plan.
40404141- **Hero moment**: What is ONE signature animation? (Page load? Hero section? Key interaction?)
4242- **Feedback layer**: Which interactions need acknowledgment?
-174
skills/animate/SKILL.md.original.md
···11----
22-name: animate
33-description: "Review a feature and enhance it with purposeful animations, micro-interactions, and motion effects that improve usability and delight. Use when the user mentions adding animation, transitions, micro-interactions, motion design, hover effects, or making the UI feel more alive."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: performance constraints.
1313-1414----
1515-1616-## Assess Animation Opportunities
1717-1818-Analyze where motion would improve the experience.
1919-2020-### 1. Identify static areas
2121-- **Missing feedback**: Actions without visual acknowledgment (button clicks, form submission, etc.)
2222-- **Jarring transitions**: Instant state changes that feel abrupt (show or hide, page loads, route changes)
2323-- **Unclear relationships**: Spatial or hierarchical relationships that are not obvious
2424-- **Lack of delight**: Functional but joyless interactions
2525-- **Missed guidance**: Opportunities to direct attention or explain behavior
2626-2727-### 2. Understand the context
2828-- What is the personality? (Playful vs serious, energetic vs calm)
2929-- What is the performance budget? (Mobile-first? Complex page?)
3030-- Who is the audience? (Motion-sensitive users? Power users who want speed?)
3131-- What matters most? (One hero animation vs many micro-interactions?)
3232-3333-If any of these are unclear from the codebase, {{ask_instruction}}
3434-3535-**CRITICAL**: Respect prefers-reduced-motion. Always provide non-animated alternatives for users who need them.
3636-3737-## Plan Animation Strategy
3838-3939-Create a purposeful animation plan.
4040-4141-- **Hero moment**: What is the ONE signature animation? (Page load? Hero section? Key interaction?)
4242-- **Feedback layer**: Which interactions need acknowledgment?
4343-- **Transition layer**: Which state changes need smoothing?
4444-- **Delight layer**: Where can we surprise and delight?
4545-4646-**IMPORTANT**: One well-orchestrated experience beats scattered animations everywhere. Focus on high-impact moments.
4747-4848-## Implement Animations
4949-5050-Add motion systematically across these categories.
5151-5252-### Entrance Animations
5353-- **Page load choreography**: Stagger element reveals (100-150ms delays), fade and slide combinations
5454-- **Hero section**: Dramatic entrance for primary content (scale, parallax, or creative effects)
5555-- **Content reveals**: Scroll-triggered animations using intersection observer
5656-- **Modal or drawer entry**: Smooth slide and fade, backdrop fade, focus management
5757-5858-### Micro-interactions
5959-- **Button feedback**:
6060- - Hover: Subtle scale (1.02-1.05), color shift, shadow increase
6161- - Click: Quick scale down then up (0.95 to 1), ripple effect
6262- - Loading: Spinner or pulse state
6363-- **Form interactions**:
6464- - Input focus: Border color transition, slight scale or glow
6565- - Validation: Shake on error, check mark on success, smooth color transitions
6666-- **Toggle switches**: Smooth slide and color transition (200-300ms)
6767-- **Checkboxes or radio**: Check mark animation, ripple effect
6868-- **Like or favorite**: Scale and rotation, particle effects, color transition
6969-7070-### State Transitions
7171-- **Show or hide**: Fade and slide (not instant), appropriate timing (200-300ms)
7272-- **Expand or collapse**: Height transition with overflow handling, icon rotation
7373-- **Loading states**: Skeleton screen fades, spinner animations, progress bars
7474-- **Success or error**: Color transitions, icon animations, gentle scale pulse
7575-- **Enable or disable**: Opacity transitions, cursor changes
7676-7777-### Navigation and Flow
7878-- **Page transitions**: Crossfade between routes, shared element transitions
7979-- **Tab switching**: Slide indicator, content fade or slide
8080-- **Carousel or slider**: Smooth transforms, snap points, momentum
8181-- **Scroll effects**: Parallax layers, sticky headers with state changes, scroll progress indicators
8282-8383-### Feedback and Guidance
8484-- **Hover hints**: Tooltip fade-ins, cursor changes, element highlights
8585-- **Drag and drop**: Lift effect (shadow and scale), drop zone highlights, smooth repositioning
8686-- **Copy or paste**: Brief highlight flash on paste, "copied" confirmation
8787-- **Focus flow**: Highlight path through form or workflow
8888-8989-### Delight Moments
9090-- **Empty states**: Subtle floating animations on illustrations
9191-- **Completed actions**: Confetti, check mark flourish, success celebrations
9292-- **Easter eggs**: Hidden interactions for discovery
9393-- **Contextual animation**: Weather effects, time-of-day themes, seasonal touches
9494-9595-## Technical Implementation
9696-9797-Use appropriate techniques for each animation.
9898-9999-### Timing and Easing
100100-101101-**Durations by purpose:**
102102-- **100-150ms**: Instant feedback (button press, toggle)
103103-- **200-300ms**: State changes (hover, menu open)
104104-- **300-500ms**: Layout changes (accordion, modal)
105105-- **500-800ms**: Entrance animations (page load)
106106-107107-**Easing curves (use these, not CSS defaults):**
108108-```css
109109-/* Recommended - natural deceleration */
110110---ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1); /* Smooth, refined */
111111---ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1); /* Slightly snappier */
112112---ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Confident, decisive */
113113-114114-/* AVOID - feel dated and tacky */
115115-/* bounce: cubic-bezier(0.34, 1.56, 0.64, 1); */
116116-/* elastic: cubic-bezier(0.68, -0.6, 0.32, 1.6); */
117117-```
118118-119119-**Exit animations are faster than entrances.** Use approximately 75% of enter duration.
120120-121121-### CSS Animations
122122-```css
123123-/* Prefer for simple, declarative animations */
124124-- transitions for state changes
125125-- @keyframes for complex sequences
126126-- transform and opacity only (GPU-accelerated)
127127-```
128128-129129-### JavaScript Animation
130130-```javascript
131131-/* Use for complex, interactive animations */
132132-- Web Animations API for programmatic control
133133-- Framer Motion for React
134134-- GSAP for complex sequences
135135-```
136136-137137-### Performance
138138-- **GPU acceleration**: Use transform and opacity, avoid layout properties
139139-- **will-change**: Add sparingly for known expensive animations
140140-- **Reduce paint**: Minimize repaints, use contain where appropriate
141141-- **Monitor FPS**: Ensure 60fps on target devices
142142-143143-### Accessibility
144144-```css
145145-@media (prefers-reduced-motion: reduce) {
146146- * {
147147- animation-duration: 0.01ms !important;
148148- animation-iteration-count: 1 !important;
149149- transition-duration: 0.01ms !important;
150150- }
151151-}
152152-```
153153-154154-**NEVER**:
155155-- Use bounce or elastic easing curves. They feel dated and draw attention to the animation itself.
156156-- Animate layout properties (width, height, top, left). Use transform instead.
157157-- Use durations over 500ms for feedback. It feels laggy.
158158-- Animate without purpose. Every animation needs a reason.
159159-- Ignore prefers-reduced-motion. This is an accessibility violation.
160160-- Animate everything. Animation fatigue makes interfaces feel exhausting.
161161-- Block interaction during animations unless intentional.
162162-163163-## Verify Quality
164164-165165-Test animations thoroughly.
166166-167167-- **Smooth at 60fps**: No jank on target devices
168168-- **Feels natural**: Easing curves feel organic, not robotic
169169-- **Appropriate timing**: Not too fast (jarring) or too slow (laggy)
170170-- **Reduced motion works**: Animations disabled or simplified appropriately
171171-- **Does not block**: Users can interact during or after animations
172172-- **Adds value**: Makes interface clearer or more delightful
173173-174174-Remember: Motion should enhance understanding and provide feedback, not just add decoration. Animate with purpose, respect performance constraints, and always consider accessibility. Great animation is invisible. It just makes everything feel right.
+7-7
skills/arrange/SKILL.md
···11---
22name: arrange
33-description: "Improve layout, spacing, and visual rhythm. Fixes monotonous grids, inconsistent spacing, and weak visual hierarchy. Use when the user mentions layout feeling off, spacing issues, visual hierarchy, crowded UI, alignment problems, or wanting better composition."
33+description: "Improve layout, spacing, and visual rhythm. Fixes monotonous grids, inconsistent spacing, and weak visual hierarchy. Use when user mentions layout feeling off, spacing issues, visual hierarchy, crowded UI, alignment problems, or wanting better composition."
44argument-hint: "[target]"
55user-invocable: true
66---
···991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
13131414---
15151616## Assess Current Layout
17171818-Analyze what is weak about the current spatial design.
1818+Analyze what is weak about current spatial design.
19192020### 1. Spacing
2121- Is spacing consistent or arbitrary? (Random padding or margin values)
···4242- Is layout too sparse? (Excessive whitespace without purpose)
4343- Does density match content type? (Data-dense UIs need tighter spacing; marketing pages need more air)
44444545-**CRITICAL**: Layout problems are often the root cause of interfaces feeling "off" even when colors and fonts are fine. Space is a design material. Use it with intention.
4545+**CRITICAL**: Layout problems are often root cause of interfaces feeling "off" even when colors and fonts are fine. Space is design material. Use it with intention.
46464747## Plan Layout Improvements
48484949-Consult the [spatial design reference](reference/spatial-design.md) from the frontend-design skill for detailed guidance on grids, rhythm, and container queries.
4949+Consult [spatial design reference](reference/spatial-design.md) from frontend-design skill for detailed guidance on grids, rhythm, and container queries.
50505151-Create a systematic plan.
5151+Create systematic plan.
52525353- **Spacing system**: Use consistent scale. Whether that is framework built-in scale (e.g., Tailwind), rem-based tokens, or custom system. specific values matter less than consistency.
5454- **Hierarchy strategy**: How will space communicate importance?
···121121- **Consistency**: Is spacing system applied uniformly?
122122- **Responsiveness**: Does layout adapt gracefully across screen sizes?
123123124124-Remember: Space is the most underused design tool. A layout with the right rhythm and hierarchy can make even simple content feel polished and intentional.
124124+Remember: Space is most underused design tool. layout with right rhythm and hierarchy can make even simple content feel polished and intentional.
-124
skills/arrange/SKILL.md.original.md
···11----
22-name: arrange
33-description: "Improve layout, spacing, and visual rhythm. Fixes monotonous grids, inconsistent spacing, and weak visual hierarchy. Use when the user mentions layout feeling off, spacing issues, visual hierarchy, crowded UI, alignment problems, or wanting better composition."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Assess and improve layout and spacing that feels monotonous, crowded, or structurally weak. Turn generic arrangements into intentional, rhythmic compositions.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1313-1414----
1515-1616-## Assess Current Layout
1717-1818-Analyze what is weak about the current spatial design.
1919-2020-### 1. Spacing
2121-- Is spacing consistent or arbitrary? (Random padding or margin values)
2222-- Is all spacing the same? (Equal padding everywhere equals no rhythm)
2323-- Are related elements grouped tightly, with generous space between groups?
2424-2525-### 2. Visual hierarchy
2626-- Apply the squint test: blur your (metaphorical) eyes. Can you still identify the most important element, second most important, and clear groupings?
2727-- Is hierarchy achieved effectively? (Space and weight alone can be enough. But is the current approach working?)
2828-- Does whitespace guide the eye to what matters?
2929-3030-### 3. Grid and structure
3131-- Is there a clear underlying structure, or does the layout feel random?
3232-- Are identical card grids used everywhere? (Icon plus heading plus text, repeated endlessly)
3333-- Is everything centered? (Left-aligned with asymmetric layouts feels more designed, but not a hard and fast rule)
3434-3535-### 4. Rhythm and variety
3636-- Does the layout have visual rhythm? (Alternating tight or generous spacing)
3737-- Is every section structured the same way? (Monotonous repetition)
3838-- Are there intentional moments of surprise or emphasis?
3939-4040-### 5. Density
4141-- Is the layout too cramped? (Not enough breathing room)
4242-- Is the layout too sparse? (Excessive whitespace without purpose)
4343-- Does density match the content type? (Data-dense UIs need tighter spacing; marketing pages need more air)
4444-4545-**CRITICAL**: Layout problems are often the root cause of interfaces feeling "off" even when colors and fonts are fine. Space is a design material. Use it with intention.
4646-4747-## Plan Layout Improvements
4848-4949-Consult the [spatial design reference](reference/spatial-design.md) from the frontend-design skill for detailed guidance on grids, rhythm, and container queries.
5050-5151-Create a systematic plan.
5252-5353-- **Spacing system**: Use a consistent scale. Whether that is a framework built-in scale (e.g., Tailwind), rem-based tokens, or a custom system. The specific values matter less than consistency.
5454-- **Hierarchy strategy**: How will space communicate importance?
5555-- **Layout approach**: What structure fits the content? Flex for 1D, Grid for 2D, named areas for complex page layouts.
5656-- **Rhythm**: Where should spacing be tight vs generous?
5757-5858-## Improve Layout Systematically
5959-6060-### Establish a Spacing System
6161-6262-- Use a consistent spacing scale. Framework scales (Tailwind, etc.), rem-based tokens, or a custom scale all work. What matters is that values come from a defined set, not arbitrary numbers.
6363-- Name tokens semantically if using custom properties: --space-xs through --space-xl, not --spacing-8
6464-- Use gap for sibling spacing instead of margins. Eliminates margin collapse hacks.
6565-- Apply clamp() for fluid spacing that breathes on larger screens.
6666-6767-### Create Visual Rhythm
6868-6969-- **Tight grouping** for related elements (8-12px between siblings)
7070-- **Generous separation** between distinct sections (48-96px)
7171-- **Varied spacing** within sections. Not every row needs the same gap.
7272-- **Asymmetric compositions**. Break the predictable centered-content pattern when it makes sense.
7373-7474-### Choose the Right Layout Tool
7575-7676-- **Use Flexbox for 1D layouts**: Rows of items, nav bars, button groups, card contents, most component internals. Flex is simpler and more appropriate for the majority of layout tasks.
7777-- **Use Grid for 2D layouts**: Page-level structure, dashboards, data-dense interfaces, anything where rows AND columns need coordinated control.
7878-- **Do not default to Grid** when Flexbox with flex-wrap would be simpler and more flexible.
7979-- Use repeat(auto-fit, minmax(280px, 1fr)) for responsive grids without breakpoints.
8080-- Use named grid areas (grid-template-areas) for complex page layouts. Redefine at breakpoints.
8181-8282-### Break Card Grid Monotony
8383-8484-- Do not default to card grids for everything. Spacing and alignment create visual grouping naturally.
8585-- Use cards only when content is truly distinct and actionable. Never nest cards inside cards.
8686-- Vary card sizes, span columns, or mix cards with non-card content to break repetition.
8787-8888-### Strengthen Visual Hierarchy
8989-9090-- Use the fewest dimensions needed for clear hierarchy. Space alone can be enough. Generous whitespace around an element draws the eye. Some of the most sophisticated designs achieve rhythm with just space and weight. Add color or size contrast only when simpler means are not sufficient.
9191-- Be aware of reading flow. In LTR languages, the eye naturally scans top-left to bottom-right, but primary action placement depends on context (e.g., bottom-right in dialogs, top in navigation).
9292-- Create clear content groupings through proximity and separation.
9393-9494-### Manage Depth and Elevation
9595-9696-- Create a semantic z-index scale (dropdown, sticky, modal-backdrop, modal, toast, tooltip)
9797-- Build a consistent shadow scale (sm, md, lg, xl). Shadows should be subtle.
9898-- Use elevation to reinforce hierarchy, not as decoration.
9999-100100-### Optical Adjustments
101101-102102-- If an icon looks visually off-center despite being geometrically centered, nudge it. But only if you are confident it actually looks wrong. Do not adjust speculatively.
103103-104104-**NEVER**:
105105-- Use arbitrary spacing values outside your scale
106106-- Make all spacing equal. Variety creates hierarchy.
107107-- Wrap everything in cards. Not everything needs a container.
108108-- Nest cards inside cards. Use spacing and dividers for hierarchy within.
109109-- Use identical card grids everywhere (icon plus heading plus text, repeated)
110110-- Center everything. Left-aligned with asymmetry feels more designed.
111111-- Default to the hero metric layout (big number, small label, stats, gradient) as a template. If showing real user data, a prominent metric can work. But it should display actual data, not decorative numbers.
112112-- Default to CSS Grid when Flexbox would be simpler. Use the simplest tool for the job.
113113-- Use arbitrary z-index values (999, 9999). Build a semantic scale.
114114-115115-## Verify Layout Improvements
116116-117117-- **Squint test**: Can you identify primary, secondary, and groupings with blurred vision?
118118-- **Rhythm**: Does the page have a satisfying beat of tight and generous spacing?
119119-- **Hierarchy**: Is the most important content obvious within 2 seconds?
120120-- **Breathing room**: Does the layout feel comfortable, not cramped or wasteful?
121121-- **Consistency**: Is the spacing system applied uniformly?
122122-- **Responsiveness**: Does the layout adapt gracefully across screen sizes?
123123-124124-Remember: Space is the most underused design tool. A layout with the right rhythm and hierarchy can make even simple content feel polished and intentional.
+12-12
skills/audit/SKILL.md
···11---
22name: audit
33-description: "Run technical quality checks across accessibility, performance, theming, responsive design, and anti-patterns. Generates a scored report with P0-P3 severity ratings and actionable plan. Use when the user wants an accessibility check, performance audit, or technical quality review."
33+description: "Run technical quality checks across accessibility, performance, theming, responsive design, and anti-patterns. Generates scored report with P0-P3 severity ratings and actionable plan. Use when user wants accessibility check, performance audit, or technical quality review."
44argument-hint: "[area (feature, page, component...)]"
55user-invocable: true
66---
7788## MANDATORY PREPARATION
991010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1010+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
11111212---
13131414-Run systematic technical quality checks and generate a comprehensive report. Do not fix issues. Document them for other commands to address.
1414+Run systematic technical quality checks and generate comprehensive report. Do not fix issues. Document them for other commands to address.
15151616-This is a code-level audit, not a design critique. Check what is measurable and verifiable in the implementation.
1616+This is code-level audit, not design critique. Check what is measurable and verifiable in implementation.
17171818## Diagnostic Scan
19192020-Run comprehensive checks across 5 dimensions. Score each dimension 0-4 using the criteria below.
2020+Run comprehensive checks across 5 dimensions. Score each dimension 0-4 using criteria below.
21212222### 1. Accessibility (A11y)
2323···2929- **Alt text**: Missing or poor image descriptions
3030- **Form issues**: Inputs without labels, poor error messaging, missing required indicators
31313232-**Score 0-4**: 0=Inaccessible (fails WCAG A), 1=Major gaps (few ARIA labels, no keyboard nav), 2=Partial (some a11y effort, significant gaps), 3=Good (WCAG AA mostly met, minor gaps), 4=Excellent (WCAG AA fully met, approaches AAA)
3232+**Score 0-4**: 0=Inaccessible (fails WCAG ), 1=Major gaps (few ARIA labels, no keyboard nav), 2=Partial (some a11y effort, significant gaps), 3=Good (WCAG AA mostly met, minor gaps), 4=Excellent (WCAG AA fully met, approaches AAA)
33333434### 2. Performance
3535···65656666### 5. Anti-Patterns (CRITICAL)
67676868-Check against ALL the DO NOT guidelines in the frontend-design skill. Look for AI slop tells (AI color palette, gradient text, glassmorphism, hero metrics, card grids, generic fonts) and general design anti-patterns (gray on color, nested cards, bounce easing, redundant copy).
6868+Check against ALL DO NOT guidelines in frontend-design skill. Look for AI slop tells (AI color palette, gradient text, glassmorphism, hero metrics, card grids, generic fonts) and general design anti-patterns (gray on color, nested cards, bounce easing, redundant copy).
69697070**Score 0-4**: 0=AI slop gallery (5+ tells), 1=Heavy AI aesthetic (3-4 tells), 2=Some tells (1-2 noticeable), 3=Mostly clean (subtle issues only), 4=No AI tells (distinctive, intentional design)
7171···8888**Start here.** Pass or fail: Does this look AI-generated? List specific tells. Be brutally honest.
89899090### Executive Summary
9191-- Audit Health Score: ??/20 (rating band)
9191+- Audit Health Score:??/20 (rating band)
9292- Total issues found (count by severity: P0/P1/P2/P3)
9393- Top 3-5 critical issues
9494- Recommended next steps
···1271271. **[P?] `{{command_prefix}}command-name`**: Brief description (specific context from audit findings)
1281282. **[P?] `{{command_prefix}}command-name`**: Brief description (specific context)
129129130130-**Rules**: Only recommend commands from: {{available_commands}}. Map findings to the most appropriate command. End with {{command_prefix}}polish as the final step if any fixes were recommended.
130130+**Rules**: Only recommend commands from: {{available_commands}}. Map findings to most appropriate command. End with {{command_prefix}}polish as final step if any fixes were recommended.
131131132132-After presenting the summary, tell the user:
132132+After presenting summary, tell user:
133133134134-> You can ask me to run these one at a time, all at once, or in any order you prefer.
134134+> ask me to run these one at time, all at once, or in any order you prefer.
135135>
136136> Re-run {{command_prefix}}audit after fixes to see your score improve.
137137···144144- Forget to prioritize (everything cannot be P0)
145145- Report false positives without verification
146146147147-Remember: You are a technical quality auditor. Document systematically, prioritize ruthlessly, cite specific code locations, and provide clear paths to improvement.
147147+Remember: You are technical quality auditor. Document systematically, prioritize ruthlessly, cite specific code locations, and provide clear paths to improvement.
-147
skills/audit/SKILL.md.original.md
···11----
22-name: audit
33-description: "Run technical quality checks across accessibility, performance, theming, responsive design, and anti-patterns. Generates a scored report with P0-P3 severity ratings and actionable plan. Use when the user wants an accessibility check, performance audit, or technical quality review."
44-argument-hint: "[area (feature, page, component...)]"
55-user-invocable: true
66----
77-88-## MANDATORY PREPARATION
99-1010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1111-1212----
1313-1414-Run systematic technical quality checks and generate a comprehensive report. Do not fix issues. Document them for other commands to address.
1515-1616-This is a code-level audit, not a design critique. Check what is measurable and verifiable in the implementation.
1717-1818-## Diagnostic Scan
1919-2020-Run comprehensive checks across 5 dimensions. Score each dimension 0-4 using the criteria below.
2121-2222-### 1. Accessibility (A11y)
2323-2424-**Check for**:
2525-- **Contrast issues**: Text contrast ratios less than 4.5:1 (or 7:1 for AAA)
2626-- **Missing ARIA**: Interactive elements without proper roles, labels, or states
2727-- **Keyboard navigation**: Missing focus indicators, illogical tab order, keyboard traps
2828-- **Semantic HTML**: Improper heading hierarchy, missing landmarks, divs instead of buttons
2929-- **Alt text**: Missing or poor image descriptions
3030-- **Form issues**: Inputs without labels, poor error messaging, missing required indicators
3131-3232-**Score 0-4**: 0=Inaccessible (fails WCAG A), 1=Major gaps (few ARIA labels, no keyboard nav), 2=Partial (some a11y effort, significant gaps), 3=Good (WCAG AA mostly met, minor gaps), 4=Excellent (WCAG AA fully met, approaches AAA)
3333-3434-### 2. Performance
3535-3636-**Check for**:
3737-- **Layout thrashing**: Reading or writing layout properties in loops
3838-- **Expensive animations**: Animating layout properties (width, height, top, left) instead of transform or opacity
3939-- **Missing optimization**: Images without lazy loading, unoptimized assets, missing will-change
4040-- **Bundle size**: Unnecessary imports, unused dependencies
4141-- **Render performance**: Unnecessary re-renders, missing memoization
4242-4343-**Score 0-4**: 0=Severe issues (layout thrash, unoptimized everything), 1=Major problems (no lazy loading, expensive animations), 2=Partial (some optimization, gaps remain), 3=Good (mostly optimized, minor improvements possible), 4=Excellent (fast, lean, well-optimized)
4444-4545-### 3. Theming
4646-4747-**Check for**:
4848-- **Hard-coded colors**: Colors not using design tokens
4949-- **Broken dark mode**: Missing dark mode variants, poor contrast in dark theme
5050-- **Inconsistent tokens**: Using wrong tokens, mixing token types
5151-- **Theme switching issues**: Values that do not update on theme change
5252-5353-**Score 0-4**: 0=No theming (hard-coded everything), 1=Minimal tokens (mostly hard-coded), 2=Partial (tokens exist but inconsistently used), 3=Good (tokens used, minor hard-coded values), 4=Excellent (full token system, dark mode works perfectly)
5454-5555-### 4. Responsive Design
5656-5757-**Check for**:
5858-- **Fixed widths**: Hard-coded widths that break on mobile
5959-- **Touch targets**: Interactive elements less than 44x44px
6060-- **Horizontal scroll**: Content overflow on narrow viewports
6161-- **Text scaling**: Layouts that break when text size increases
6262-- **Missing breakpoints**: No mobile or tablet variants
6363-6464-**Score 0-4**: 0=Desktop-only (breaks on mobile), 1=Major issues (some breakpoints, many failures), 2=Partial (works on mobile, rough edges), 3=Good (responsive, minor touch target or overflow issues), 4=Excellent (fluid, all viewports, proper touch targets)
6565-6666-### 5. Anti-Patterns (CRITICAL)
6767-6868-Check against ALL the DO NOT guidelines in the frontend-design skill. Look for AI slop tells (AI color palette, gradient text, glassmorphism, hero metrics, card grids, generic fonts) and general design anti-patterns (gray on color, nested cards, bounce easing, redundant copy).
6969-7070-**Score 0-4**: 0=AI slop gallery (5+ tells), 1=Heavy AI aesthetic (3-4 tells), 2=Some tells (1-2 noticeable), 3=Mostly clean (subtle issues only), 4=No AI tells (distinctive, intentional design)
7171-7272-## Generate Report
7373-7474-### Audit Health Score
7575-7676-| # | Dimension | Score | Key Finding |
7777-|---|-----------|-------|-------------|
7878-| 1 | Accessibility | ? | [most critical a11y issue or "--"] |
7979-| 2 | Performance | ? | |
8080-| 3 | Responsive Design | ? | |
8181-| 4 | Theming | ? | |
8282-| 5 | Anti-Patterns | ? | |
8383-| **Total** | | **??/20** | **[Rating band]** |
8484-8585-**Rating bands**: 18-20 Excellent (minor polish), 14-17 Good (address weak dimensions), 10-13 Acceptable (significant work needed), 6-9 Poor (major overhaul), 0-5 Critical (fundamental issues)
8686-8787-### Anti-Patterns Verdict
8888-**Start here.** Pass or fail: Does this look AI-generated? List specific tells. Be brutally honest.
8989-9090-### Executive Summary
9191-- Audit Health Score: ??/20 (rating band)
9292-- Total issues found (count by severity: P0/P1/P2/P3)
9393-- Top 3-5 critical issues
9494-- Recommended next steps
9595-9696-### Detailed Findings by Severity
9797-9898-Tag every issue with P0-P3 severity:
9999-- **P0 Blocking**: Prevents task completion. Fix immediately.
100100-- **P1 Major**: Significant difficulty or WCAG AA violation. Fix before release.
101101-- **P2 Minor**: Annoyance, workaround exists. Fix in next pass.
102102-- **P3 Polish**: Nice-to-fix, no real user impact. Fix if time permits.
103103-104104-For each issue, document:
105105-- **[P?] Issue name**
106106-- **Location**: Component, file, line
107107-- **Category**: Accessibility, Performance, Theming, Responsive, or Anti-Pattern
108108-- **Impact**: How it affects users
109109-- **WCAG or Standard**: Which standard it violates (if applicable)
110110-- **Recommendation**: How to fix it
111111-- **Suggested command**: Which command to use (prefer: {{available_commands}})
112112-113113-### Patterns and Systemic Issues
114114-115115-Identify recurring problems that indicate systemic gaps rather than one-off mistakes:
116116-- "Hard-coded colors appear in 15+ components, should use design tokens"
117117-- "Touch targets consistently too small (less than 44px) throughout mobile experience"
118118-119119-### Positive Findings
120120-121121-Note what is working well. Good practices to maintain and replicate.
122122-123123-## Recommended Actions
124124-125125-List recommended commands in priority order (P0 first, then P1, then P2):
126126-127127-1. **[P?] `{{command_prefix}}command-name`**: Brief description (specific context from audit findings)
128128-2. **[P?] `{{command_prefix}}command-name`**: Brief description (specific context)
129129-130130-**Rules**: Only recommend commands from: {{available_commands}}. Map findings to the most appropriate command. End with {{command_prefix}}polish as the final step if any fixes were recommended.
131131-132132-After presenting the summary, tell the user:
133133-134134-> You can ask me to run these one at a time, all at once, or in any order you prefer.
135135->
136136-> Re-run {{command_prefix}}audit after fixes to see your score improve.
137137-138138-**IMPORTANT**: Be thorough but actionable. Too many P3 issues creates noise. Focus on what actually matters.
139139-140140-**NEVER**:
141141-- Report issues without explaining impact (why does this matter?)
142142-- Provide generic recommendations (be specific and actionable)
143143-- Skip positive findings (celebrate what works)
144144-- Forget to prioritize (everything cannot be P0)
145145-- Report false positives without verification
146146-147147-Remember: You are a technical quality auditor. Document systematically, prioritize ruthlessly, cite specific code locations, and provide clear paths to improvement.
+8-8
skills/bolder/SKILL.md
···11---
22name: bolder
33-description: "Amplify safe or boring designs to make them more visually interesting and stimulating. Increases impact while maintaining usability. Use when the user says the design looks bland, generic, too safe, lacks personality, or wants more visual impact and character."
33+description: "Amplify safe or boring designs to make them more visually interesting and stimulating. Increases impact while maintaining usability. Use when user says design looks bland, generic, too safe, lacks personality, or wants more visual impact and character."
44argument-hint: "[target]"
55user-invocable: true
66---
···991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
13131414---
15151616## Assess Current State
17171818-Analyze what makes the design feel too safe or boring.
1818+Analyze what makes design feel too safe or boring.
19192020### 1. Identify weakness sources
2121- **Generic choices**: System fonts, basic colors, standard layouts
···3131- Who is audience? (What will resonate?)
3232- What are constraints? (Brand guidelines, accessibility, performance)
33333434-If any of these are unclear from the codebase, {{ask_instruction}}
3434+If any of these are unclear from codebase, {{ask_instruction}}
35353636**CRITICAL**: "Bolder" does not mean chaotic or garish. It means distinctive, memorable, and confident. Think intentional drama, not random chaos.
37373838-**WARNING - AI SLOP TRAP**: When making things "bolder," AI defaults to the same tired tricks: cyan or purple gradients, glassmorphism, neon accents on dark backgrounds, gradient text on metrics. These are the OPPOSITE of bold. They are generic. Review ALL the DO NOT guidelines in the frontend-design skill before proceeding. Bold means distinctive, not "more effects."
3838+**WARNING - AI SLOP TRAP**: When making things "bolder," AI defaults to same tired tricks: cyan or purple gradients, glassmorphism, neon accents on dark backgrounds, gradient text on metrics. These are OPPOSITE of bold. They are generic. Review ALL DO NOT guidelines in frontend-design skill before proceeding. Bold means distinctive, not "more effects."
39394040## Plan Amplification
41414242-Create a strategy to increase impact while maintaining coherence.
4242+Create strategy to increase impact while maintaining coherence.
43434444- **Focal point**: What should be hero moment? (Pick ONE, make it amazing)
4545- **Personality direction**: Maximalist chaos? Elegant drama? Playful energy? Dark moody? Choose lane.
···7676### Visual Effects
7777- **Dramatic shadows**: Large, soft shadows for elevation (but not generic drop shadows on rounded rectangles)
7878- **Background treatments**: Mesh patterns, noise textures, geometric patterns, intentional gradients (not purple-to-blue)
7979-- **Texture and depth**: Grain, halftone, duotone, layered elements. NOT glassmorphism (it is overused AI slop).
7979+- **Texture and depth**: Grain, halftone, duotone, layered elements. NOT glassmorphism (it's overused AI slop).
8080- **Borders and frames**: Thick borders, decorative frames, custom shapes (not rounded rectangles with colored border on one side)
8181- **Custom elements**: Illustrative elements, custom icons, decorative details that reinforce brand
8282···111111- **Performant**: Do all these effects run smoothly?
112112- **Accessible**: Does it still meet accessibility standards?
113113114114-**The test**: If you showed this to someone and said "AI made this bolder," would they believe you immediately? If yes, you have failed. Bold means distinctive, not "more AI effects."
114114+** test**: If you showed this to someone and said "AI made this bolder," would they believe you immediately? If yes, you have failed. Bold means distinctive, not "more AI effects."
115115116116Remember: Bold design is confident design. It takes risks, makes statements, and creates memorable experiences. But bold without strategy is loud. Be intentional, be dramatic, be unforgettable.
-116
skills/bolder/SKILL.md.original.md
···11----
22-name: bolder
33-description: "Amplify safe or boring designs to make them more visually interesting and stimulating. Increases impact while maintaining usability. Use when the user says the design looks bland, generic, too safe, lacks personality, or wants more visual impact and character."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1313-1414----
1515-1616-## Assess Current State
1717-1818-Analyze what makes the design feel too safe or boring.
1919-2020-### 1. Identify weakness sources
2121-- **Generic choices**: System fonts, basic colors, standard layouts
2222-- **Timid scale**: Everything is medium-sized with no drama
2323-- **Low contrast**: Everything has similar visual weight
2424-- **Static**: No motion, no energy, no life
2525-- **Predictable**: Standard patterns with no surprises
2626-- **Flat hierarchy**: Nothing stands out or commands attention
2727-2828-### 2. Understand the context
2929-- What is the brand personality? (How far can we push?)
3030-- What is the purpose? (Marketing can be bolder than financial dashboards)
3131-- Who is the audience? (What will resonate?)
3232-- What are the constraints? (Brand guidelines, accessibility, performance)
3333-3434-If any of these are unclear from the codebase, {{ask_instruction}}
3535-3636-**CRITICAL**: "Bolder" does not mean chaotic or garish. It means distinctive, memorable, and confident. Think intentional drama, not random chaos.
3737-3838-**WARNING - AI SLOP TRAP**: When making things "bolder," AI defaults to the same tired tricks: cyan or purple gradients, glassmorphism, neon accents on dark backgrounds, gradient text on metrics. These are the OPPOSITE of bold. They are generic. Review ALL the DO NOT guidelines in the frontend-design skill before proceeding. Bold means distinctive, not "more effects."
3939-4040-## Plan Amplification
4141-4242-Create a strategy to increase impact while maintaining coherence.
4343-4444-- **Focal point**: What should be the hero moment? (Pick ONE, make it amazing)
4545-- **Personality direction**: Maximalist chaos? Elegant drama? Playful energy? Dark moody? Choose a lane.
4646-- **Risk budget**: How experimental can we be? Push boundaries within constraints.
4747-- **Hierarchy amplification**: Make big things BIGGER, small things smaller (increase contrast)
4848-4949-**IMPORTANT**: Bold design must still be usable. Impact without function is just decoration.
5050-5151-## Amplify the Design
5252-5353-Systematically increase impact across these dimensions.
5454-5555-### Typography Amplification
5656-- **Replace generic fonts**: Swap system fonts for distinctive choices (see frontend-design skill for inspiration)
5757-- **Extreme scale**: Create dramatic size jumps (3x-5x differences, not 1.5x)
5858-- **Weight contrast**: Pair 900 weights with 200 weights, not 600 with 400
5959-- **Unexpected choices**: Variable fonts, display fonts for headlines, condensed or extended widths, monospace as intentional accent (not as lazy "dev tool" default)
6060-6161-### Color Intensification
6262-- **Increase saturation**: Shift to more vibrant, energetic colors (but not neon)
6363-- **Bold palette**: Introduce unexpected color combinations. Avoid the purple-blue gradient AI slop.
6464-- **Dominant color strategy**: Let one bold color own 60% of the design
6565-- **Sharp accents**: High-contrast accent colors that pop
6666-- **Tinted neutrals**: Replace pure grays with tinted grays that harmonize with your palette
6767-- **Rich gradients**: Intentional multi-stop gradients (not generic purple-to-blue)
6868-6969-### Spatial Drama
7070-- **Extreme scale jumps**: Make important elements 3-5x larger than surroundings
7171-- **Break the grid**: Let hero elements escape containers and cross boundaries
7272-- **Asymmetric layouts**: Replace centered, balanced layouts with tension-filled asymmetry
7373-- **Generous space**: Use white space dramatically (100-200px gaps, not 20-40px)
7474-- **Overlap**: Layer elements intentionally for depth
7575-7676-### Visual Effects
7777-- **Dramatic shadows**: Large, soft shadows for elevation (but not generic drop shadows on rounded rectangles)
7878-- **Background treatments**: Mesh patterns, noise textures, geometric patterns, intentional gradients (not purple-to-blue)
7979-- **Texture and depth**: Grain, halftone, duotone, layered elements. NOT glassmorphism (it is overused AI slop).
8080-- **Borders and frames**: Thick borders, decorative frames, custom shapes (not rounded rectangles with colored border on one side)
8181-- **Custom elements**: Illustrative elements, custom icons, decorative details that reinforce brand
8282-8383-### Motion and Animation
8484-- **Entrance choreography**: Staggered, dramatic page load animations with 50-100ms delays
8585-- **Scroll effects**: Parallax, reveal animations, scroll-triggered sequences
8686-- **Micro-interactions**: Satisfying hover effects, click feedback, state changes
8787-- **Transitions**: Smooth, noticeable transitions using ease-out-quart, quint, or expo (not bounce or elastic. They cheapen the effect.)
8888-8989-### Composition Boldness
9090-- **Hero moments**: Create clear focal points with dramatic treatment
9191-- **Diagonal flows**: Escape horizontal or vertical rigidity with diagonal arrangements
9292-- **Full-bleed elements**: Use full viewport width or height for impact
9393-- **Unexpected proportions**: Golden ratio? Throw it out. Try 70-30, 80-20 splits.
9494-9595-**NEVER**:
9696-- Add effects randomly without purpose (chaos does not equal bold)
9797-- Sacrifice readability for aesthetics (body text must be readable)
9898-- Make everything bold (then nothing is bold. Need contrast.)
9999-- Ignore accessibility (bold design must still meet WCAG standards)
100100-- Overwhelm with motion (animation fatigue is real)
101101-- Copy trendy aesthetics blindly (bold means distinctive, not derivative)
102102-103103-## Verify Quality
104104-105105-Ensure amplification maintains usability and coherence.
106106-107107-- **NOT AI slop**: Does this look like every other AI-generated "bold" design? If yes, start over.
108108-- **Still functional**: Can users accomplish tasks without distraction?
109109-- **Coherent**: Does everything feel intentional and unified?
110110-- **Memorable**: Will users remember this experience?
111111-- **Performant**: Do all these effects run smoothly?
112112-- **Accessible**: Does it still meet accessibility standards?
113113-114114-**The test**: If you showed this to someone and said "AI made this bolder," would they believe you immediately? If yes, you have failed. Bold means distinctive, not "more AI effects."
115115-116116-Remember: Bold design is confident design. It takes risks, makes statements, and creates memorable experiences. But bold without strategy is just loud. Be intentional, be dramatic, be unforgettable.
+14-15
skills/cavecrew/SKILL.md
···11---
22name: cavecrew
33description: >
44- Decision guide for delegating to caveman-style subagents. Tells the main
55- thread WHEN to spawn `cavecrew-investigator` (locate code), `cavecrew-builder`
66- (1-2 file edit), or `cavecrew-reviewer` (diff review) instead of doing the
77- work inline or using vanilla `Explore`. Subagent output is caveman-compressed
88- so the tool-result injected back into main context is ~60% smaller — main
99- context lasts longer across long sessions.
1010- Trigger: "delegate to subagent", "use cavecrew", "spawn investigator/builder/reviewer",
1111- "save context", "compressed agent output".
44+ Decision guide for delegating to caveman-style subagents. Tells main
55+ thread WHEN to spawn `cavecrew-investigator` (locate code), `cavecrew-builder`
66+ (1-2 file edit), or `cavecrew-reviewer` (diff review) instead of doing work inline or using vanilla `Explore`. Subagent output is caveman-compressed
77+ so tool-result injected back into main context is ~60% smaller — main
88+ context lasts longer across long sessions.
99+ Trigger: "delegate to subagent", "use cavecrew", "spawn investigator/builder/reviewer",
1010+ "save context", "compressed agent output".
1211---
13121414-Cavecrew = three subagent presets that emit caveman output. Same job as Anthropic defaults (`Explore`, edit-style agents, reviewer); difference is the tool-result they return is compressed, so main context shrinks per delegation.
1313+Cavecrew = three subagent presets that emit caveman output. Same job as Anthropic defaults (`Explore`, edit-style agents, reviewer); difference is tool-result they return is compressed, so main context shrinks per delegation.
15141615## When to use cavecrew vs alternatives
1716···2524| Deep code review with rationale + alternatives | `Code Reviewer` (vanilla) |
2625| One-line answer you already know | Main thread, no subagent |
27262828-Rule of thumb: **if you'd want the subagent's output in 1/3 the tokens, pick cavecrew. If you'd want prose, pick vanilla.**
2727+Rule of thumb: **if you'd want subagent's output in 1/3 tokens, pick cavecrew. If you'd want prose, pick vanilla.**
29283029## Why this exists (the real win)
31303232-Subagent tool results get injected into main context verbatim. A vanilla `Explore` that returns 2k tokens of prose costs 2k tokens of main-context budget every time. The same finding from `cavecrew-investigator` returns ~700 tokens. Across 20 delegations in one session that's the difference between context exhaustion and finishing the task.
3131+Subagent tool results get injected into main context verbatim. vanilla `Explore` that returns 2k tokens of prose costs 2k tokens of main-context budget every time. same finding from `cavecrew-investigator` returns ~700 tokens. Across 20 delegations in one session that's difference between context exhaustion and finishing task.
33323433## Output contracts
3534···6261**Locate → fix → verify** (most common):
63621. `cavecrew-investigator` returns site list.
64632. Main thread picks 1-2 sites, hands paths to `cavecrew-builder`.
6565-3. `cavecrew-reviewer` audits the diff.
6464+3. `cavecrew-reviewer` audits diff.
66656766**Parallel scout** (when investigation is broad):
6867Spawn 2-3 `cavecrew-investigator` calls in one message (different angles: defs vs callers vs tests). Aggregate in main thread.
···72717372## What NOT to do
74737575-- Don't use `cavecrew-builder` when you don't already know the file. Spawn investigator first or main thread will eat tokens passing context.
7676-- Don't chain `cavecrew-investigator → cavecrew-builder` for a 5-file refactor. Builder will return `too-big.` and you'll have wasted a turn.
7474+- Don't use `cavecrew-builder` when you don't already know file. Spawn investigator first or main thread will eat tokens passing context.
7575+- Don't chain `cavecrew-investigator → cavecrew-builder` for 5-file refactor. Builder will return `too-big.` and you'll have wasted turn.
7776- Don't ask `cavecrew-reviewer` for "general feedback" — it returns findings only, no architecture opinions. Use `Code Reviewer` for that.
7878-- Don't expect prose. Cavecrew output is structured, sometimes terse to the point of cryptic. If a human will read it directly, paraphrase.
7777+- Don't expect prose. Cavecrew output is structured, sometimes terse to point of cryptic. If human will read it directly, paraphrase.
79788079## Auto-clarity (inherited)
8180
+11-11
skills/caveman-commit/SKILL.md
···11---
22name: caveman-commit
33description: >
44- Ultra-compressed commit message generator. Cuts noise from commit messages while preserving
55- intent and reasoning. Conventional Commits format. Subject ≤50 chars, body only when "why"
66- isn't obvious. Use when user says "write a commit", "commit message", "generate commit",
77- "/commit", or invokes /caveman-commit. Auto-triggers when staging changes.
44+ Ultra-compressed commit message generator. Cuts noise from commit messages while preserving
55+ intent and reasoning. Conventional Commits format. Subject ≤50 chars, body only when "why"
66+ isn't obvious. Use when user says "write commit", "commit message", "generate commit",
77+ "/commit", or invokes /caveman-commit. Auto-triggers when staging changes.
88---
991010Write commit messages terse and exact. Conventional Commits format. No fluff. Why over what.
···1717- Imperative mood: "add", "fix", "remove" — not "added", "adds", "adding"
1818- ≤50 chars when possible, hard cap 72
1919- No trailing period
2020-- Match project convention for capitalization after the colon
2020+- Match project convention for capitalization after colon
21212222**Body (only if needed):**
2323- Skip entirely when subject is self-explanatory
···2727- Reference issues/PRs at end: `Closes #42`, `Refs #17`
28282929**What NEVER goes in:**
3030-- "This commit does X", "I", "we", "now", "currently" — the diff says what
3030+- "This commit does X", "I", "we", "now", "currently" — diff says what
3131- "As requested by..." — use Co-authored-by trailer
3232- "Generated with Claude Code" or any AI attribution
3333- Emoji (unless project convention requires)
3434-- Restating the file name when scope already says it
3434+- Restating file name when scope already says it
35353636## Examples
37373838-Diff: new endpoint for user profile with body explaining the why
3939-- ❌ "feat: add a new endpoint to get user profile information from the database"
3838+Diff: new endpoint for user profile with body explaining why
3939+- ❌ "feat: add new endpoint to get user profile information from database"
4040- ✅
4141 ```
4242 feat(api): add GET /users/:id/profile
···58585959## Auto-Clarity
60606161-Always include body for: breaking changes, security fixes, data migrations, anything reverting a prior commit. Never compress these into subject-only — future debuggers need the context.
6161+Always include body for: breaking changes, security fixes, data migrations, anything reverting prior commit. Never compress these into subject-only — future debuggers need context.
62626363## Boundaries
64646565-Only generates the commit message. Does not run `git commit`, does not stage files, does not amend. Output the message as a code block ready to paste. "stop caveman-commit" or "normal mode": revert to verbose commit style.6565+Only generates commit message. Does not run `git commit`, does not stage files, does not amend. Output message as code block ready to paste. "stop caveman-commit" or "normal mode": revert to verbose commit style.
+10-10
skills/caveman-compress/README.md
···11<p align="center">
22- <img src="https://em-content.zobj.net/source/apple/391/rock_1faa8.png" width="80" />
22+ <img src="https://em-content.zobj.net/source/apple/391/rock_1faa8.png" width="80" />
33</p>
4455<h1 align="center">caveman-compress</h1>
6677<p align="center">
88- <strong>shrink memory file. save token every session.</strong>
88+ <strong>shrink memory file. save token every session.</strong>
99</p>
10101111---
12121313-A Claude Code skill that compresses your project memory files (`CLAUDE.md`, todos, preferences) into caveman format — so every session loads fewer tokens automatically.
1313+ Claude Code skill that compresses your project memory files (`CLAUDE.md`, todos, preferences) into caveman format — so every session loads fewer tokens automatically.
14141515Claude read `CLAUDE.md` on every session start. If file big, cost big. Caveman make file small. Cost go down forever.
1616···2525CLAUDE.original.md ← human-readable backup (you edit this)
2626```
27272828-Original never lost. You can read and edit `.original.md`. Run skill again to re-compress after edits.
2828+Original never lost. read and edit `.original.md`. Run skill again to re-compress after edits.
29293030## Benchmarks
3131···50505151### 📄 Original (706 tokens)
52525353-> "I strongly prefer TypeScript with strict mode enabled for all new code. Please don't use `any` type unless there's genuinely no way around it, and if you do, leave a comment explaining the reasoning. I find that taking the time to properly type things catches a lot of bugs before they ever make it to runtime."
5353+> "I strongly prefer TypeScript with strict mode enabled for all new code. Please don't use `any` type unless there's genuinely no way around it, and if you do, leave comment explaining reasoning. I find that taking time to properly type things catches lot of bugs before they ever make it to runtime."
54545555</td>
5656<td width="50%">
···67676868## Security
69697070-`caveman-compress` is flagged as Snyk High Risk due to subprocess and file I/O patterns detected by static analysis. This is a false positive — see [SECURITY.md](./SECURITY.md) for a full explanation of what the skill does and does not do.
7070+`caveman-compress` is flagged as Snyk High Risk due to subprocess and file I/O patterns detected by static analysis. This is false positive — see [SECURITY.md](./SECURITY.md) for full explanation of what skill does and does not do.
71717272## Install
73737474-Compress is built in with the `caveman` plugin. Install `caveman` once, then use `/caveman:compress`.
7474+Compress is built in with `caveman` plugin. Install `caveman` once, then use `/caveman:compress`.
75757676-If you need local files, the compress skill lives at:
7676+If you need local files, compress skill lives at:
77777878```bash
7979caveman-compress/
···142142143143## Why This Matter
144144145145-`CLAUDE.md` loads on **every session start**. A 1000-token project memory file costs tokens every single time you open a project. Over 100 sessions that's 100,000 tokens of overhead — just for context you already wrote.
145145+`CLAUDE.md` loads on **every session start**. 1000-token project memory file costs tokens every single time you open project. Over 100 sessions that's 100,000 tokens of overhead — for context you already wrote.
146146147147Caveman cut that by ~46% on average. Same instructions. Same accuracy. Less waste.
148148···157157158158## Part of Caveman
159159160160-This skill is part of the [caveman](https://github.com/JuliusBrussee/caveman) toolkit — making Claude use fewer tokens without losing accuracy.
160160+This skill is part of [caveman](https://github.com/JuliusBrussee/caveman) toolkit — making Claude use fewer tokens without losing accuracy.
161161162162- **caveman** — make Claude *speak* like caveman (cuts response tokens ~65%)
163163- **caveman-compress** — make Claude *read* less (cuts context tokens ~46%)
+7-7
skills/caveman-compress/SECURITY.md
···2233## Snyk High Risk Rating
4455-`caveman-compress` receives a Snyk High Risk rating due to static analysis heuristics. This document explains what the skill does and does not do.
55+`caveman-compress` receives Snyk High Risk rating due to static analysis heuristics. This document explains what skill does and does not do.
6677### What triggers the rating
8899-1. **subprocess usage**: The skill calls the `claude` CLI via `subprocess.run()` as a fallback when `ANTHROPIC_API_KEY` is not set. The subprocess call uses a fixed argument list — no shell interpolation occurs. User file content is passed via stdin, not as a shell argument.
99+1. **subprocess usage**: skill calls `claude` CLI via `subprocess.run()` as fallback when `ANTHROPIC_API_KEY` is not set. subprocess call uses fixed argument list — no shell interpolation occurs. User file content is passed via stdin, not as shell argument.
10101111-2. **File read/write**: The skill reads the file the user explicitly points it at, compresses it, and writes the result back to the same path. A `.original.md` backup is saved alongside it. No files outside the user-specified path are read or written.
1111+2. **File read/write**: skill reads file user explicitly points it at, compresses it, and writes result back to same path. `.original.md` backup is saved alongside it. No files outside user-specified path are read or written.
12121313### What the skill does NOT do
14141515- Does not execute user file content as code
1616- Does not make network requests except to Anthropic's API (via SDK or CLI)
1717-- Does not access files outside the path the user provides
1717+- Does not access files outside path user provides
1818- Does not use shell=True or string interpolation in subprocess calls
1919-- Does not collect or transmit any data beyond the file being compressed
1919+- Does not collect or transmit any data beyond file being compressed
20202121### Auth behavior
22222323-If `ANTHROPIC_API_KEY` is set, the skill uses the Anthropic Python SDK directly (no subprocess). If not set, it falls back to the `claude` CLI, which uses the user's existing Claude desktop authentication.
2323+If `ANTHROPIC_API_KEY` is set, skill uses Anthropic Python SDK directly (no subprocess). If not set, it falls back to `claude` CLI, which uses user's existing Claude desktop authentication.
24242525### File size limit
2626···28282929### Reporting a vulnerability
30303131-If you believe you've found a genuine security issue, please open a GitHub issue with the label `security`.
3131+If you believe you've found genuine security issue, please open GitHub issue with label `security`.
+16-16
skills/caveman-compress/SKILL.md
···11---
22name: caveman-compress
33description: >
44- Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format
55- to save input tokens. Preserves all technical substance, code, URLs, and structure.
66- Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md.
77- Trigger: /caveman:compress FILEPATH or "compress memory file"
44+ Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format
55+ to save input tokens. Preserves all technical substance, code, URLs, and structure.
66+ Compressed version overwrites original file. Human-readable backup saved as FILE.original.md.
77+ Trigger: /caveman:compress FILEPATH or "compress memory file"
88---
991010# Caveman Compress
···15151616## Trigger
17171818-`/caveman:compress <filepath>` or when user asks to compress a memory file.
1818+`/caveman:compress <filepath>` or when user asks to compress memory file.
19192020## Process
21212222-1. The compression scripts live in `caveman-compress/scripts/` (adjacent to this SKILL.md). If the path is not immediately available, search for `caveman-compress/scripts/__main__.py`.
2222+1. compression scripts live in `caveman-compress/scripts/` (adjacent to this SKILL.md). If path is not immediately available, search for `caveman-compress/scripts/__main__.py`.
232324242. Run:
25252626cd caveman-compress && python3 -m scripts <absolute_filepath>
27272828-3. The CLI will:
2828+3. CLI will:
2929- detect file type (no tokens)
3030- call Claude to compress
3131- validate output (no tokens)
···4343- Pleasantries: "sure", "certainly", "of course", "happy to", "I'd recommend"
4444- Hedging: "it might be worth", "you could consider", "it would be good to"
4545- Redundant phrasing: "in order to" → "to", "make sure to" → "ensure", "the reason is because" → "because"
4646-- Connective fluff: "however", "furthermore", "additionally", "in addition"
4646+- Connective fluff: however, furthermore, additionally, in addition
47474848### Preserve EXACTLY (never modify)
4949- Code blocks (fenced ``` and indented)
···6666### Compress
6767- Use short synonyms: "big" not "extensive", "fix" not "implement a solution for", "use" not "utilize"
6868- Fragments OK: "Run tests before commit" not "You should always run tests before committing"
6969-- Drop "you should", "make sure to", "remember to" — just state the action
7070-- Merge redundant bullets that say the same thing differently
7171-- Keep one example where multiple examples show the same pattern
6969+- Drop "you should", "make sure to", "remember to"; state action
7070+- Merge redundant bullets that say same thing differently
7171+- Keep one example where multiple examples show same pattern
72727373CRITICAL RULE:
7474Anything inside ``` ... ``` must be copied EXACTLY.
···9090## Pattern
91919292Original:
9393-> You should always make sure to run the test suite before pushing any changes to the main branch. This is important because it helps catch bugs early and prevents broken builds from being deployed to production.
9393+> always ensure run test suite before pushing any changes to main branch. This is important because it helps catch bugs early and prevents broken builds from being deployed to production.
94949595Compressed:
9696> Run tests before push to main. Catch bugs early, prevent broken prod deploys.
97979898Original:
9999-> The application uses a microservices architecture with the following components. The API gateway handles all incoming requests and routes them to the appropriate service. The authentication service is responsible for managing user sessions and JWT tokens.
9999+> application uses microservices architecture with following components. API gateway handles all incoming requests and routes them to appropriate service. authentication service is responsible for managing user sessions and JWT tokens.
100100101101Compressed:
102102> Microservices architecture. API gateway route all requests to services. Auth service manage user sessions + JWT tokens.
103103104104## Boundaries
105105106106-- ONLY compress natural language files (.md, .txt, .typ, .typst, .tex, extensionless)
107107-- NEVER modify: .py, .js, .ts, .json, .yaml, .yml, .toml, .env, .lock, .css, .html, .xml, .sql, .sh
108108-- If file has mixed content (prose + code), compress ONLY the prose sections
106106+- ONLY compress natural language files (.md,.txt,.typ,.typst,.tex, extensionless)
107107+- NEVER modify:.py,.js,.ts,.json,.yaml,.yml,.toml,.env,.lock,.css,.html,.xml,.sql,.sh
108108+- If file has mixed content (prose + code), compress ONLY prose sections
109109- If unsure whether something is code or prose, leave it unchanged
110110- Original file is backed up as FILE.original.md before overwriting
111111- Never compress FILE.original.md (skip it)
+3-3
skills/caveman-help/SKILL.md
···11---
22name: caveman-help
33description: >
44- Quick-reference card for all caveman modes, skills, and commands.
55- One-shot display, not a persistent mode. Trigger: /caveman-help,
66- "caveman help", "what caveman commands", "how do I use caveman".
44+ Quick-reference card for all caveman modes, skills, and commands.
55+ One-shot display, not persistent mode. Trigger: /caveman-help,
66+ "caveman help", "what caveman commands", "how do I use caveman".
77---
8899# Caveman Help
+15-15
skills/caveman-review/SKILL.md
···11---
22name: caveman-review
33description: >
44- Ultra-compressed code review comments. Cuts noise from PR feedback while preserving
55- the actionable signal. Each comment is one line: location, problem, fix. Use when user
66- says "review this PR", "code review", "review the diff", "/review", or invokes
77- /caveman-review. Auto-triggers when reviewing pull requests.
44+ Ultra-compressed code review comments. Cuts noise from PR feedback while preserving
55+ actionable signal. Each comment is one line: location, problem, fix. Use when user
66+ says "review this PR", "code review", "review diff", "/review", or invokes
77+ /caveman-review. Auto-triggers when reviewing pull requests.
88---
991010Write code review comments terse and actionable. One line per finding. Location, problem, fix. No throat-clearing.
···1717- `🔴 bug:` — broken behavior, will cause incident
1818- `🟡 risk:` — works but fragile (race, missing null check, swallowed error)
1919- `🔵 nit:` — style, naming, micro-optim. Author can ignore
2020-- `❓ q:` — genuine question, not a suggestion
2020+- `❓ q:` — genuine question, not suggestion
21212222**Drop:**
2323-- "I noticed that...", "It seems like...", "You might want to consider..."
2424-- "This is just a suggestion but..." — use `nit:` instead
2525-- "Great work!", "Looks good overall but..." — say it once at the top, not per comment
2626-- Restating what the line does — the reviewer can read the diff
2323+- "I noticed that...", "It seems like...", " want to consider..."
2424+- "This is suggestion but..." — use `nit:` instead
2525+- "Great work!", "Looks good overall but..." — say it once at top, not per comment
2626+- Restating what line does — reviewer can read diff
2727- Hedging ("perhaps", "maybe", "I think") — if unsure use `q:`
28282929**Keep:**
3030- Exact line numbers
3131- Exact symbol/function/variable names in backticks
3232- Concrete fix, not "consider refactoring this"
3333-- The *why* if the fix isn't obvious from the problem statement
3333+- *why* if fix isn't obvious from problem statement
34343535## Examples
36363737-❌ "I noticed that on line 42 you're not checking if the user object is null before accessing the email property. This could potentially cause a crash if the user is not found in the database. You might want to add a null check here."
3737+❌ "I noticed that on line 42 you're not checking if user object is null before accessing email property. This could potentially cause crash if user is not found in database. want to add null check here."
38383939✅ `L42: 🔴 bug: user can be null after .find(). Add guard before .email.`
40404141-❌ "It looks like this function is doing a lot of things and might benefit from being broken up into smaller functions for readability."
4141+❌ "It looks like this function is doing lot of things and might benefit from being broken up into smaller functions for readability."
42424343✅ `L88-140: 🔵 nit: 50-line fn does 4 things. Extract validate/normalize/persist.`
44444545-❌ "Have you considered what happens if the API returns a 429? I think we should probably handle that case."
4545+❌ "Have you considered what happens if API returns 429? I think we should probably handle that case."
46464747✅ `L23: 🟡 risk: no retry on 429. Wrap in withBackoff(3).`
48484949## Auto-Clarity
50505151-Drop terse mode for: security findings (CVE-class bugs need full explanation + reference), architectural disagreements (need rationale, not just a one-liner), and onboarding contexts where the author is new and needs the "why". In those cases write a normal paragraph, then resume terse for the rest.
5151+Drop terse mode for: security findings (CVE-class bugs need full explanation + reference), architectural disagreements (need rationale, not one-liner), and onboarding contexts where author is new and needs "why". In those cases write normal paragraph, then resume terse for rest.
52525353## Boundaries
54545555-Reviews only — does not write the code fix, does not approve/request-changes, does not run linters. Output the comment(s) ready to paste into the PR. "stop caveman-review" or "normal mode": revert to verbose review style.5555+Reviews only — does not write code fix, does not approve/request-changes, does not run linters. Output comment(s) ready to paste into PR. "stop caveman-review" or "normal mode": revert to verbose review style.
+5-5
skills/caveman-stats/SKILL.md
···11---
22name: caveman-stats
33description: >
44- Show real token usage and estimated savings for the current session.
55- Reads directly from the Claude Code session log — no AI estimation.
66- Triggers on /caveman-stats. Output is injected by the mode-tracker hook;
77- the model itself does not compute the numbers.
44+ Show real token usage and estimated savings for current session.
55+ Reads directly from Claude Code session log — no AI estimation.
66+ Triggers on /caveman-stats. Output is injected by mode-tracker hook;
77+ model itself does not compute numbers.
88---
991010-This skill is delivered by `hooks/caveman-stats.js` (read by `hooks/caveman-mode-tracker.js` on `/caveman-stats`). The model does not need to do anything when this skill fires — the hook returns `decision: "block"` with the formatted stats as the reason. The user sees the numbers immediately.
1010+This skill is delivered by `hooks/caveman-stats.js` (read by `hooks/caveman-mode-tracker.js` on `/caveman-stats`). model does not need to do anything when this skill fires — hook returns `decision: "block"` with formatted stats as reason. user sees numbers immediately.
+10-10
skills/caveman/SKILL.md
···11---
22name: caveman
33description: >
44- Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman
55- while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra,
66- wenyan-lite, wenyan-full, wenyan-ultra.
77- Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens",
88- "be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.
44+ Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman
55+ while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra,
66+ wenyan-lite, wenyan-full, wenyan-ultra.
77+ Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens",
88+ "be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.
99---
10101111Respond terse like smart caveman. All technical substance stay. Only fluff die.
···18181919## Rules
20202121-Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Technical terms exact. Code blocks unchanged. Errors quoted exact.
2121+Drop: articles (//), filler (////), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement solution for"). Technical terms exact. Code blocks unchanged. Errors quoted exact.
22222323Pattern: `[thing] [action] [reason]. [next step].`
24242525-Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
2525+Not: "Sure! I'd be happy to help you with that. issue you're experiencing is likely caused by..."
2626Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
27272828## Intensity
···3737| **wenyan-ultra** | Extreme abbreviation while keeping classical Chinese feel. Maximum compression, ultra terse |
38383939Example — "Why React component re-render?"
4040-- lite: "Your component re-renders because you create a new object reference each render. Wrap it in `useMemo`."
4040+- lite: "Your component re-renders because you create new object reference each render. Wrap it in `useMemo`."
4141- full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
4242- ultra: "Inline obj prop → new ref → re-render. `useMemo`."
4343- wenyan-lite: "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。"
4444-- wenyan-full: "物出新參照,致重繪。useMemo .Wrap之。"
4444+- wenyan-full: "物出新參照,致重繪。useMemo.Wrap之。"
4545- wenyan-ultra: "新參照→重繪。useMemo Wrap。"
46464747Example — "Explain database connection pooling."
···6363Resume caveman after clear part done.
64646565Example — destructive op:
6666-> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
6666+> **Warning:** This will permanently delete all rows in `users` table and cannot be undone.
6767> ```sql
6868> DROP TABLE users;
6969> ```
+12-12
skills/clarify/SKILL.md
···11---
22name: clarify
33-description: "Improve unclear UX copy, error messages, microcopy, labels, and instructions to make interfaces easier to understand. Use when the user mentions confusing text, unclear labels, bad error messages, hard-to-follow instructions, or wanting better UX writing."
33+description: "Improve unclear UX copy, error messages, microcopy, labels, and instructions to make interfaces easier to understand. Use when user mentions confusing text, unclear labels, bad error messages, hard-to-follow instructions, or wanting better UX writing."
44argument-hint: "[target]"
55user-invocable: true
66---
7788-Identify and improve unclear, confusing, or poorly written interface text to make the product easier to understand and use.
88+Identify and improve unclear, confusing, or poorly written interface text to make product easier to understand and use.
991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: audience technical level and users mental state in context.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: audience technical level and users mental state in context.
13131414---
15151616## Assess Current Copy
17171818-Identify what makes the text unclear or ineffective.
1818+Identify what makes text unclear or ineffective.
19192020### 1. Find clarity problems
2121- **Jargon**: Technical terms users will not understand
···36363737## Plan Copy Improvements
38383939-Create a strategy for clearer communication.
3939+Create strategy for clearer communication.
40404141- **Primary message**: What is ONE thing users need to know?
4242- **Action needed**: What should users do next (if anything)?
4343- **Tone**: How should this feel? (Helpful? Apologetic? Encouraging?)
4444- **Constraints**: Length limits, brand voice, localization considerations
45454646-**IMPORTANT**: Good UX writing is invisible. Users should understand immediately without noticing the words.
4646+**IMPORTANT**: Good UX writing is invisible. Users should understand immediately without noticing words.
47474848## Improve Copy Systematically
4949···5454**Good**: "You do not have permission to view this page. Contact your admin for access."
55555656**Bad**: "Invalid input"
5757-**Good**: "Email addresses need an @ symbol. Try: name@example.com"
5757+**Good**: "Email addresses need @ symbol. Try: name@example.com"
58585959**Principles**:
6060- Explain what went wrong in plain language
···8888- Be specific ("Save" is better than "OK")
89899090### Help Text and Tooltips
9191-**Bad**: "This is the username field"
9292-**Good**: "Choose a username. You can change this later in Settings."
9191+**Bad**: "This is username field"
9292+**Good**: "Choose username. change this later in Settings."
93939494**Principles**:
9595- Add value (do not repeat label)
···102102**Good**: "No projects yet. Create your first project to get started."
103103104104**Principles**:
105105-- Explain why it is empty (if not obvious)
105105+- Explain why it's empty (if not obvious)
106106- Show next action clearly
107107- Make it welcoming, not dead-end
108108···122122123123**Principles**:
124124- Set expectations (how long?)
125125-- Explain what is happening (when it is not obvious)
125125+- Explain what is happening (when it's not obvious)
126126- Show progress when possible
127127- Offer escape hatch if appropriate ("Cancel")
128128···179179- **Consistency**: Does it match terminology elsewhere?
180180- **Tone**: Is it appropriate for situation?
181181182182-Remember: You are a clarity expert with excellent communication skills. Write like you are explaining to a smart friend who is unfamiliar with the product. Be clear, be helpful, be human.
182182+Remember: You are clarity expert with excellent communication skills. Write like you are explaining to smart friend who is unfamiliar with product. Be clear, be helpful, be human.
-182
skills/clarify/SKILL.md.original.md
···11----
22-name: clarify
33-description: "Improve unclear UX copy, error messages, microcopy, labels, and instructions to make interfaces easier to understand. Use when the user mentions confusing text, unclear labels, bad error messages, hard-to-follow instructions, or wanting better UX writing."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Identify and improve unclear, confusing, or poorly written interface text to make the product easier to understand and use.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: audience technical level and users mental state in context.
1313-1414----
1515-1616-## Assess Current Copy
1717-1818-Identify what makes the text unclear or ineffective.
1919-2020-### 1. Find clarity problems
2121-- **Jargon**: Technical terms users will not understand
2222-- **Ambiguity**: Multiple interpretations possible
2323-- **Passive voice**: "Your file has been uploaded" vs "We uploaded your file"
2424-- **Length**: Too wordy or too terse
2525-- **Assumptions**: Assuming user knowledge they do not have
2626-- **Missing context**: Users do not know what to do or why
2727-- **Tone mismatch**: Too formal, too casual, or inappropriate for situation
2828-2929-### 2. Understand the context
3030-- Who is the audience? (Technical? General? First-time users?)
3131-- What is the user mental state? (Stressed during error? Confident during success?)
3232-- What is the action? (What do we want users to do?)
3333-- What is the constraint? (Character limits? Space limitations?)
3434-3535-**CRITICAL**: Clear copy helps users succeed. Unclear copy creates frustration, errors, and support tickets.
3636-3737-## Plan Copy Improvements
3838-3939-Create a strategy for clearer communication.
4040-4141-- **Primary message**: What is the ONE thing users need to know?
4242-- **Action needed**: What should users do next (if anything)?
4343-- **Tone**: How should this feel? (Helpful? Apologetic? Encouraging?)
4444-- **Constraints**: Length limits, brand voice, localization considerations
4545-4646-**IMPORTANT**: Good UX writing is invisible. Users should understand immediately without noticing the words.
4747-4848-## Improve Copy Systematically
4949-5050-Refine text across these common areas.
5151-5252-### Error Messages
5353-**Bad**: "Error 403: Forbidden"
5454-**Good**: "You do not have permission to view this page. Contact your admin for access."
5555-5656-**Bad**: "Invalid input"
5757-**Good**: "Email addresses need an @ symbol. Try: name@example.com"
5858-5959-**Principles**:
6060-- Explain what went wrong in plain language
6161-- Suggest how to fix it
6262-- Do not blame the user
6363-- Include examples when helpful
6464-- Link to help or support if applicable
6565-6666-### Form Labels and Instructions
6767-**Bad**: "DOB (MM/DD/YYYY)"
6868-**Good**: "Date of birth" (with placeholder showing format)
6969-7070-**Bad**: "Enter value here"
7171-**Good**: "Your email address" or "Company name"
7272-7373-**Principles**:
7474-- Use clear, specific labels (not generic placeholders)
7575-- Show format expectations with examples
7676-- Explain why you are asking (when not obvious)
7777-- Put instructions before the field, not after
7878-- Keep required field indicators clear
7979-8080-### Button and CTA Text
8181-**Bad**: "Click here" | "Submit" | "OK"
8282-**Good**: "Create account" | "Save changes" | "Got it, thanks"
8383-8484-**Principles**:
8585-- Describe the action specifically
8686-- Use active voice (verb plus noun)
8787-- Match user mental model
8888-- Be specific ("Save" is better than "OK")
8989-9090-### Help Text and Tooltips
9191-**Bad**: "This is the username field"
9292-**Good**: "Choose a username. You can change this later in Settings."
9393-9494-**Principles**:
9595-- Add value (do not just repeat the label)
9696-- Answer the implicit question ("What is this?" or "Why do you need this?")
9797-- Keep it brief but complete
9898-- Link to detailed docs if needed
9999-100100-### Empty States
101101-**Bad**: "No items"
102102-**Good**: "No projects yet. Create your first project to get started."
103103-104104-**Principles**:
105105-- Explain why it is empty (if not obvious)
106106-- Show next action clearly
107107-- Make it welcoming, not dead-end
108108-109109-### Success Messages
110110-**Bad**: "Success"
111111-**Good**: "Settings saved! Your changes will take effect immediately."
112112-113113-**Principles**:
114114-- Confirm what happened
115115-- Explain what happens next (if relevant)
116116-- Be brief but complete
117117-- Match user emotional moment (celebrate big wins)
118118-119119-### Loading States
120120-**Bad**: "Loading..." (for 30+ seconds)
121121-**Good**: "Analyzing your data... this usually takes 30-60 seconds"
122122-123123-**Principles**:
124124-- Set expectations (how long?)
125125-- Explain what is happening (when it is not obvious)
126126-- Show progress when possible
127127-- Offer escape hatch if appropriate ("Cancel")
128128-129129-### Confirmation Dialogs
130130-**Bad**: "Are you sure?"
131131-**Good**: "Delete 'Project Alpha'? This cannot be undone."
132132-133133-**Principles**:
134134-- State the specific action
135135-- Explain consequences (especially for destructive actions)
136136-- Use clear button labels ("Delete project" not "Yes")
137137-- Do not overuse confirmations (only for risky actions)
138138-139139-### Navigation and Wayfinding
140140-**Bad**: Generic labels like "Items" | "Things" | "Stuff"
141141-**Good**: Specific labels like "Your projects" | "Team members" | "Settings"
142142-143143-**Principles**:
144144-- Be specific and descriptive
145145-- Use language users understand (not internal jargon)
146146-- Make hierarchy clear
147147-- Consider information scent (breadcrumbs, current location)
148148-149149-## Apply Clarity Principles
150150-151151-Every piece of copy should follow these rules:
152152-153153-1. **Be specific**: "Enter email" not "Enter value"
154154-2. **Be concise**: Cut unnecessary words (but do not sacrifice clarity)
155155-3. **Be active**: "Save changes" not "Changes will be saved"
156156-4. **Be human**: "Oops, something went wrong" not "System error encountered"
157157-5. **Be helpful**: Tell users what to do, not just what happened
158158-6. **Be consistent**: Use same terms throughout (do not vary for variety)
159159-160160-**NEVER**:
161161-- Use jargon without explanation
162162-- Blame users ("You made an error" becomes "This field is required")
163163-- Be vague ("Something went wrong" without explanation)
164164-- Use passive voice unnecessarily
165165-- Write overly long explanations (be concise)
166166-- Use humor for errors (be empathetic instead)
167167-- Assume technical knowledge
168168-- Vary terminology (pick one term and stick with it)
169169-- Repeat information (headers restating intros, redundant explanations)
170170-- Use placeholders as the only labels (they disappear when users type)
171171-172172-## Verify Improvements
173173-174174-Test that copy improvements work.
175175-176176-- **Comprehension**: Can users understand without context?
177177-- **Actionability**: Do users know what to do next?
178178-- **Brevity**: Is it as short as possible while remaining clear?
179179-- **Consistency**: Does it match terminology elsewhere?
180180-- **Tone**: Is it appropriate for the situation?
181181-182182-Remember: You are a clarity expert with excellent communication skills. Write like you are explaining to a smart friend who is unfamiliar with the product. Be clear, be helpful, be human.
+8-8
skills/colorize/SKILL.md
···11---
22name: colorize
33-description: "Add strategic color to features that are too monochromatic or lack visual interest, making interfaces more engaging and expressive. Use when the user mentions the design looking gray, dull, lacking warmth, needing more color, or wanting a more vibrant or expressive palette."
33+description: "Add strategic color to features that are too monochromatic or lack visual interest, making interfaces more engaging and expressive. Use when user mentions design looking gray, dull, lacking warmth, needing more color, or wanting more vibrant or expressive palette."
44argument-hint: "[target]"
55user-invocable: true
66---
···991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: existing brand colors.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: existing brand colors.
13131414---
15151616## Assess Color Opportunity
17171818-Analyze the current state and identify opportunities.
1818+Analyze current state and identify opportunities.
19192020### 1. Understand current state
2121- **Color absence**: Pure grayscale? Limited neutrals? One timid accent?
···3131- **Wayfinding**: Helping users navigate and understand structure
3232- **Delight**: Moments of visual interest and personality
33333434-If any of these are unclear from the codebase, {{ask_instruction}}
3434+If any of these are unclear from codebase, {{ask_instruction}}
35353636-**CRITICAL**: More color does not equal better. Strategic color beats rainbow vomit every time. Every color should have a purpose.
3636+**CRITICAL**: More color does not equal better. Strategic color beats rainbow vomit every time. Every color should have purpose.
37373838## Plan Color Strategy
39394040-Create a purposeful color introduction plan.
4040+Create purposeful color introduction plan.
41414242- **Color palette**: What colors match brand or context? (Choose 2-4 colors max beyond neutrals)
4343- **Dominant color**: Which color owns 60% of colored elements?
···7474- **Gradient backgrounds**: Add depth with subtle, intentional gradients (not generic purple-blue)
7575- **Cards and surfaces**: Tint cards or surfaces slightly for warmth
76767777-**Use OKLCH for color**: It is perceptually uniform, meaning equal steps in lightness look equal. Great for generating harmonious scales.
7777+**Use OKLCH for color**: it's perceptually uniform, meaning equal steps in lightness look equal. Great for generating harmonious scales.
78787979### Data Visualization
8080- **Charts and graphs**: Use color to encode categories or values
···131131132132## Verify Color Addition
133133134134-Test that colorization improves the experience.
134134+Test that colorization improves experience.
135135136136- **Better hierarchy**: Does color guide attention appropriately?
137137- **Clearer meaning**: Does color help users understand states or categories?
-142
skills/colorize/SKILL.md.original.md
···11----
22-name: colorize
33-description: "Add strategic color to features that are too monochromatic or lack visual interest, making interfaces more engaging and expressive. Use when the user mentions the design looking gray, dull, lacking warmth, needing more color, or wanting a more vibrant or expressive palette."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: existing brand colors.
1313-1414----
1515-1616-## Assess Color Opportunity
1717-1818-Analyze the current state and identify opportunities.
1919-2020-### 1. Understand current state
2121-- **Color absence**: Pure grayscale? Limited neutrals? One timid accent?
2222-- **Missed opportunities**: Where could color add meaning, hierarchy, or delight?
2323-- **Context**: What is appropriate for this domain and audience?
2424-- **Brand**: Are there existing brand colors we should use?
2525-2626-### 2. Identify where color adds value
2727-- **Semantic meaning**: Success (green), error (red), warning (yellow or orange), info (blue)
2828-- **Hierarchy**: Drawing attention to important elements
2929-- **Categorization**: Different sections, types, or states
3030-- **Emotional tone**: Warmth, energy, trust, creativity
3131-- **Wayfinding**: Helping users navigate and understand structure
3232-- **Delight**: Moments of visual interest and personality
3333-3434-If any of these are unclear from the codebase, {{ask_instruction}}
3535-3636-**CRITICAL**: More color does not equal better. Strategic color beats rainbow vomit every time. Every color should have a purpose.
3737-3838-## Plan Color Strategy
3939-4040-Create a purposeful color introduction plan.
4141-4242-- **Color palette**: What colors match the brand or context? (Choose 2-4 colors max beyond neutrals)
4343-- **Dominant color**: Which color owns 60% of colored elements?
4444-- **Accent colors**: Which colors provide contrast and highlights? (30% and 10%)
4545-- **Application strategy**: Where does each color appear and why?
4646-4747-**IMPORTANT**: Color should enhance hierarchy and meaning, not create chaos. Less is more when it matters more.
4848-4949-## Introduce Color Strategically
5050-5151-Add color systematically across these dimensions.
5252-5353-### Semantic Color
5454-- **State indicators**:
5555- - Success: Green tones (emerald, forest, mint)
5656- - Error: Red or pink tones (rose, crimson, coral)
5757- - Warning: Orange or amber tones
5858- - Info: Blue tones (sky, ocean, indigo)
5959- - Neutral: Gray or slate for inactive states
6060-6161-- **Status badges**: Colored backgrounds or borders for states (active, pending, completed, etc.)
6262-- **Progress indicators**: Colored bars, rings, or charts showing completion or health
6363-6464-### Accent Color Application
6565-- **Primary actions**: Color the most important buttons or CTAs
6666-- **Links**: Add color to clickable text (maintain accessibility)
6767-- **Icons**: Colorize key icons for recognition and personality
6868-- **Headers or titles**: Add color to section headers or key labels
6969-- **Hover states**: Introduce color on interaction
7070-7171-### Background and Surfaces
7272-- **Tinted backgrounds**: Replace pure gray (#f5f5f5) with warm neutrals (oklch(97% 0.01 60)) or cool tints (oklch(97% 0.01 250))
7373-- **Colored sections**: Use subtle background colors to separate areas
7474-- **Gradient backgrounds**: Add depth with subtle, intentional gradients (not generic purple-blue)
7575-- **Cards and surfaces**: Tint cards or surfaces slightly for warmth
7676-7777-**Use OKLCH for color**: It is perceptually uniform, meaning equal steps in lightness look equal. Great for generating harmonious scales.
7878-7979-### Data Visualization
8080-- **Charts and graphs**: Use color to encode categories or values
8181-- **Heatmaps**: Color intensity shows density or importance
8282-- **Comparison**: Color coding for different datasets or timeframes
8383-8484-### Borders and Accents
8585-- **Accent borders**: Add colored left or top borders to cards or sections
8686-- **Underlines**: Color underlines for emphasis or active states
8787-- **Dividers**: Subtle colored dividers instead of gray lines
8888-- **Focus rings**: Colored focus indicators matching brand
8989-9090-### Typography Color
9191-- **Colored headings**: Use brand colors for section headings (maintain contrast)
9292-- **Highlight text**: Color for emphasis or categories
9393-- **Labels and tags**: Small colored labels for metadata or categories
9494-9595-### Decorative Elements
9696-- **Illustrations**: Add colored illustrations or icons
9797-- **Shapes**: Geometric shapes in brand colors as background elements
9898-- **Gradients**: Colorful gradient overlays or mesh backgrounds
9999-- **Blobs or organic shapes**: Soft colored shapes for visual interest
100100-101101-## Balance and Refinement
102102-103103-Ensure color addition improves rather than overwhelms.
104104-105105-### Maintain Hierarchy
106106-- **Dominant color** (60%): Primary brand color or most used accent
107107-- **Secondary color** (30%): Supporting color for variety
108108-- **Accent color** (10%): High contrast for key moments
109109-- **Neutrals** (remaining): Gray, black, white for structure
110110-111111-### Accessibility
112112-- **Contrast ratios**: Ensure WCAG compliance (4.5:1 for text, 3:1 for UI components)
113113-- **Do not rely on color alone**: Use icons, labels, or patterns alongside color
114114-- **Test for color blindness**: Verify red and green combinations work for all users
115115-116116-### Cohesion
117117-- **Consistent palette**: Use colors from defined palette, not arbitrary choices
118118-- **Systematic application**: Same color meanings throughout (green always equals success)
119119-- **Temperature consistency**: Warm palette stays warm, cool stays cool
120120-121121-**NEVER**:
122122-- Use every color in the rainbow (choose 2-4 colors beyond neutrals)
123123-- Apply color randomly without semantic meaning
124124-- Put gray text on colored backgrounds. It looks washed out. Use a darker shade of the background color or transparency instead.
125125-- Use pure gray for neutrals. Add subtle color tint (warm or cool) for sophistication.
126126-- Use pure black (#000) or pure white (#fff) for large areas.
127127-- Violate WCAG contrast requirements
128128-- Use color as the only indicator (accessibility issue)
129129-- Make everything colorful (defeats the purpose)
130130-- Default to purple-blue gradients (AI slop aesthetic)
131131-132132-## Verify Color Addition
133133-134134-Test that colorization improves the experience.
135135-136136-- **Better hierarchy**: Does color guide attention appropriately?
137137-- **Clearer meaning**: Does color help users understand states or categories?
138138-- **More engaging**: Does the interface feel warmer and more inviting?
139139-- **Still accessible**: Do all color combinations meet WCAG standards?
140140-- **Not overwhelming**: Is color balanced and purposeful?
141141-142142-Remember: Color is emotional and powerful. Use it to create warmth, guide attention, communicate meaning, and express personality. But restraint and strategy matter more than saturation and variety. Be colorful, but be intentional.
+16-16
skills/compress/SKILL.md
···11---
22name: compress
33description: >
44- Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format
55- to save input tokens. Preserves all technical substance, code, URLs, and structure.
66- Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md.
77- Trigger: /caveman:compress FILEPATH or "compress memory file"
44+ Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format
55+ to save input tokens. Preserves all technical substance, code, URLs, and structure.
66+ Compressed version overwrites original file. Human-readable backup saved as FILE.original.md.
77+ Trigger: /caveman:compress FILEPATH or "compress memory file"
88---
991010# Caveman Compress
···15151616## Trigger
17171818-`/caveman:compress <filepath>` or when user asks to compress a memory file.
1818+`/caveman:compress <filepath>` or when user asks to compress memory file.
19192020## Process
21212222-1. This SKILL.md lives alongside `scripts/` in the same directory. Find that directory.
2222+1. This SKILL.md lives alongside `scripts/` in same directory. Find that directory.
232324242. Run:
25252626cd <directory_containing_this_SKILL.md> && python3 -m scripts <absolute_filepath>
27272828-3. The CLI will:
2828+3. CLI will:
2929- detect file type (no tokens)
3030- call Claude to compress
3131- validate output (no tokens)
···4343- Pleasantries: "sure", "certainly", "of course", "happy to", "I'd recommend"
4444- Hedging: "it might be worth", "you could consider", "it would be good to"
4545- Redundant phrasing: "in order to" → "to", "make sure to" → "ensure", "the reason is because" → "because"
4646-- Connective fluff: "however", "furthermore", "additionally", "in addition"
4646+- Connective fluff: however, furthermore, additionally, in addition
47474848### Preserve EXACTLY (never modify)
4949- Code blocks (fenced ``` and indented)
···6666### Compress
6767- Use short synonyms: "big" not "extensive", "fix" not "implement a solution for", "use" not "utilize"
6868- Fragments OK: "Run tests before commit" not "You should always run tests before committing"
6969-- Drop "you should", "make sure to", "remember to" — just state the action
7070-- Merge redundant bullets that say the same thing differently
7171-- Keep one example where multiple examples show the same pattern
6969+- Drop "you should", "make sure to", "remember to"; state action
7070+- Merge redundant bullets that say same thing differently
7171+- Keep one example where multiple examples show same pattern
72727373CRITICAL RULE:
7474Anything inside ``` ... ``` must be copied EXACTLY.
···9090## Pattern
91919292Original:
9393-> You should always make sure to run the test suite before pushing any changes to the main branch. This is important because it helps catch bugs early and prevents broken builds from being deployed to production.
9393+> always ensure run test suite before pushing any changes to main branch. This is important because it helps catch bugs early and prevents broken builds from being deployed to production.
94949595Compressed:
9696> Run tests before push to main. Catch bugs early, prevent broken prod deploys.
97979898Original:
9999-> The application uses a microservices architecture with the following components. The API gateway handles all incoming requests and routes them to the appropriate service. The authentication service is responsible for managing user sessions and JWT tokens.
9999+> application uses microservices architecture with following components. API gateway handles all incoming requests and routes them to appropriate service. authentication service is responsible for managing user sessions and JWT tokens.
100100101101Compressed:
102102> Microservices architecture. API gateway route all requests to services. Auth service manage user sessions + JWT tokens.
103103104104## Boundaries
105105106106-- ONLY compress natural language files (.md, .txt, .typ, .typst, .tex, extensionless)
107107-- NEVER modify: .py, .js, .ts, .json, .yaml, .yml, .toml, .env, .lock, .css, .html, .xml, .sql, .sh
108108-- If file has mixed content (prose + code), compress ONLY the prose sections
106106+- ONLY compress natural language files (.md,.txt,.typ,.typst,.tex, extensionless)
107107+- NEVER modify:.py,.js,.ts,.json,.yaml,.yml,.toml,.env,.lock,.css,.html,.xml,.sql,.sh
108108+- If file has mixed content (prose + code), compress ONLY prose sections
109109- If unsure whether something is code or prose, leave it unchanged
110110- Original file is backed up as FILE.original.md before overwriting
111111- Never compress FILE.original.md (skip it)
+27-27
skills/critique/SKILL.md
···11---
22name: critique
33-description: "Evaluate design from a UX perspective, assessing visual hierarchy, information architecture, emotional resonance, cognitive load, and overall quality with quantitative scoring, persona-based testing, and actionable feedback. Use when the user asks to review, critique, evaluate, or give feedback on a design or component."
33+description: "Evaluate design from UX perspective, assessing visual hierarchy, information architecture, emotional resonance, cognitive load, and overall quality with quantitative scoring, persona-based testing, and actionable feedback. Use when user asks to review, critique, evaluate, or give feedback on design or component."
44argument-hint: "[area (feature, page, component...)]"
55user-invocable: true
66---
7788## MANDATORY PREPARATION
991010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: what the interface is trying to accomplish.
1010+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: what interface is trying to accomplish.
11111212---
13131414-Conduct a holistic design critique, evaluating whether the interface works: not technically, but as a designed experience. Think like a design director giving feedback.
1414+Conduct holistic design critique, evaluating whether interface works: not technically, but as designed experience. Think like design director giving feedback.
15151616## Phase 1: Design Critique
17171818-Evaluate the interface across these dimensions.
1818+Evaluate interface across these dimensions.
19192020### 1. AI Slop Detection (CRITICAL)
21212222-**This is the most important check.** Does this look like every other AI-generated interface from 2024-2025?
2222+**This is most important check.** Does this look like every other AI-generated interface from 2024-2025?
23232424-Review the design against ALL the DO NOT guidelines in the frontend-design skill. They are the fingerprints of AI-generated work. Check for the AI color palette, gradient text, dark mode with glowing accents, glassmorphism, hero metric layouts, identical card grids, generic fonts, and all other tells.
2424+Review design against ALL DO NOT guidelines in frontend-design skill. They are fingerprints of AI-generated work. Check for AI color palette, gradient text, dark mode with glowing accents, glassmorphism, hero metric layouts, identical card grids, generic fonts, and all other tells.
25252626-**The test**: If you showed this to someone and said "AI made this," would they believe you immediately? If yes, that is the problem.
2626+** test**: If you showed this to someone and said "AI made this," would they believe you immediately? If yes, that is problem.
27272828### 2. Visual Hierarchy
2929- Does eye flow to most important element first?
···3232- Is there visual competition between elements that should have different weights?
33333434### 3. Information Architecture and Cognitive Load
3535-> *Consult [cognitive-load](reference/cognitive-load.md) for the working memory rule and 8-item checklist*
3535+> *Consult [cognitive-load](reference/cognitive-load.md) for working memory rule and 8-item checklist*
3636- Is structure intuitive? Would new user understand organization?
3737- Is related content grouped logically?
3838- Are there too many choices at once? Count visible options at each decision point. If more than 4, flag it.
···87878888## Phase 2: Present Findings
89899090-Structure your feedback as a design director would.
9090+Structure your feedback as design director would.
91919292### Design Health Score
9393> *Consult [heuristics-scoring](reference/heuristics-scoring.md)*
94949595-Score each of Nielsen 10 heuristics 0-4. Present as a table:
9595+Score each of Nielsen 10 heuristics 0-4. Present as table:
96969797| # | Heuristic | Score | Key Issue |
9898|---|-----------|-------|-----------|
···108108| 10 | Help and Documentation | ? | |
109109| **Total** | | **??/40** | **[Rating band]** |
110110111111-Be honest with scores. A 4 means genuinely excellent. Most real interfaces score 20-32.
111111+Be honest with scores. 4 means genuinely excellent. Most real interfaces score 20-32.
112112113113### Anti-Patterns Verdict
114114-**Start here.** Pass or fail: Does this look AI-generated? List specific tells from the skill Anti-Patterns section. Be brutally honest.
114114+**Start here.** Pass or fail: Does this look AI-generated? List specific tells from skill Anti-Patterns section. Be brutally honest.
115115116116### Overall Impression
117117-A brief gut reaction: what works, what does not, and the single biggest opportunity.
117117+ brief gut reaction: what works, what does not, and single biggest opportunity.
118118119119### What is Working
120120Highlight 2-3 things done well. Be specific about why they work.
121121122122### Priority Issues
123123-The 3-5 most impactful design problems, ordered by importance.
123123+ 3-5 most impactful design problems, ordered by importance.
124124125125For each issue, tag with P0-P3 severity (consult [heuristics-scoring](reference/heuristics-scoring.md) for severity definitions):
126126- **[P?] What**: Name problem clearly
···131131### Persona Red Flags
132132> *Consult [personas](reference/personas.md)*
133133134134-Auto-select 2-3 personas most relevant to this interface type (use the selection table in the reference). If {{config_file}} contains a Design Context section from teach-impeccable, also generate 1-2 project-specific personas from the audience or brand info.
134134+Auto-select 2-3 personas most relevant to this interface type (use selection table in reference). If {{config_file}} contains Design Context section from teach-impeccable, also generate 1-2 project-specific personas from audience or brand info.
135135136136-For each selected persona, walk through the primary user action and list specific red flags found:
136136+For each selected persona, walk through primary user action and list specific red flags found:
137137138138**Alex (Power User)**: No keyboard shortcuts detected. Form requires 8 clicks for primary action. Forced modal onboarding. High abandonment risk.
139139140140**Jordan (First-Timer)**: Icon-only nav in sidebar. Technical jargon in error messages ("404 Not Found"). No visible help. Will abandon at step 2.
141141142142-Be specific. Name the exact elements and interactions that fail each persona. Do not write generic persona descriptions. Write what broke for them.
142142+Be specific. Name exact elements and interactions that fail each persona. Do not write generic persona descriptions. Write what broke for them.
143143144144### Minor Observations
145145Quick notes on smaller issues worth addressing.
···154154155155## Phase 3: Ask the User
156156157157-**After presenting findings**, use targeted questions based on what was found. {{ask_instruction}} These answers will shape the action plan.
157157+**After presenting findings**, use targeted questions based on what was found. {{ask_instruction}} These answers will shape action plan.
158158159159-Ask questions along these lines (adapt to the specific findings: do NOT ask generic questions):
159159+Ask questions along these lines (adapt to specific findings: do NOT ask generic questions):
160160161161-1. **Priority direction**: Based on the issues found, ask which category matters most to the user right now. For example: "I found problems with visual hierarchy, color usage, and information overload. Which area should we tackle first?" Offer the top 2-3 issue categories as options.
161161+1. **Priority direction**: Based on issues found, ask which category matters most to user right now. For example: "I found problems with visual hierarchy, color usage, and information overload. Which area should we tackle first?" Offer top 2-3 issue categories as options.
162162163163-2. **Design intent**: If the critique found a tonal mismatch, ask whether it was intentional. For example: "The interface feels clinical and corporate. Is that the intended tone, or should it feel warmer, bolder, more playful?" Offer 2-3 tonal directions as options based on what would fix the issues found.
163163+2. **Design intent**: If critique found tonal mismatch, ask whether it was intentional. For example: " interface feels clinical and corporate. Is that intended tone, or should it feel warmer, bolder, more playful?" Offer 2-3 tonal directions as options based on what would fix issues found.
164164165165-3. **Scope**: Ask how much the user wants to take on. For example: "I found N issues. Want to address everything, or focus on the top 3?" Offer scope options like "Top 3 only", "All issues", "Critical issues only".
165165+3. **Scope**: Ask how much user wants to take on. For example: "I found N issues. Want to address everything, or focus on top 3?" Offer scope options like "Top 3 only", "All issues", "Critical issues only".
166166167167-4. **Constraints** (optional: only ask if relevant): If the findings touch many areas, ask if anything is off-limits. For example: "Should any sections stay as-is?" This prevents the plan from touching things the user considers done.
167167+4. **Constraints** (optional: only ask if relevant): If findings touch many areas, ask if anything is off-limits. For example: "Should any sections stay as-is?" This prevents plan from touching things user considers done.
168168169169**Rules for questions**:
170170- Every question must reference specific findings from Phase 2. Never ask generic "who is your audience?" questions
···174174175175## Phase 4: Recommended Actions
176176177177-**After receiving the user answers**, present a prioritized action summary reflecting the user priorities and scope from Phase 3.
177177+**After receiving user answers**, present prioritized action summary reflecting user priorities and scope from Phase 3.
178178179179### Action Summary
180180181181-List recommended commands in priority order, based on the user answers:
181181+List recommended commands in priority order, based on user answers:
1821821831831. **`{{command_prefix}}command-name`**: Brief description of what to fix (specific context from critique findings)
1841842. **`{{command_prefix}}command-name`**: Brief description (specific context)
···194194- If user marked areas as off-limits, exclude commands that would touch those areas
195195- End with {{command_prefix}}polish as final step if any fixes were recommended
196196197197-After presenting the summary, tell the user:
197197+After presenting summary, tell user:
198198199199-> You can ask me to run these one at a time, all at once, or in any order you prefer.
199199+> ask me to run these one at time, all at once, or in any order you prefer.
200200>
201201> Re-run {{command_prefix}}critique after fixes to see your score improve.
-201
skills/critique/SKILL.md.original.md
···11----
22-name: critique
33-description: "Evaluate design from a UX perspective, assessing visual hierarchy, information architecture, emotional resonance, cognitive load, and overall quality with quantitative scoring, persona-based testing, and actionable feedback. Use when the user asks to review, critique, evaluate, or give feedback on a design or component."
44-argument-hint: "[area (feature, page, component...)]"
55-user-invocable: true
66----
77-88-## MANDATORY PREPARATION
99-1010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: what the interface is trying to accomplish.
1111-1212----
1313-1414-Conduct a holistic design critique, evaluating whether the interface actually works: not just technically, but as a designed experience. Think like a design director giving feedback.
1515-1616-## Phase 1: Design Critique
1717-1818-Evaluate the interface across these dimensions.
1919-2020-### 1. AI Slop Detection (CRITICAL)
2121-2222-**This is the most important check.** Does this look like every other AI-generated interface from 2024-2025?
2323-2424-Review the design against ALL the DO NOT guidelines in the frontend-design skill. They are the fingerprints of AI-generated work. Check for the AI color palette, gradient text, dark mode with glowing accents, glassmorphism, hero metric layouts, identical card grids, generic fonts, and all other tells.
2525-2626-**The test**: If you showed this to someone and said "AI made this," would they believe you immediately? If yes, that is the problem.
2727-2828-### 2. Visual Hierarchy
2929-- Does the eye flow to the most important element first?
3030-- Is there a clear primary action? Can you spot it in 2 seconds?
3131-- Do size, color, and position communicate importance correctly?
3232-- Is there visual competition between elements that should have different weights?
3333-3434-### 3. Information Architecture and Cognitive Load
3535-> *Consult [cognitive-load](reference/cognitive-load.md) for the working memory rule and 8-item checklist*
3636-- Is the structure intuitive? Would a new user understand the organization?
3737-- Is related content grouped logically?
3838-- Are there too many choices at once? Count visible options at each decision point. If more than 4, flag it.
3939-- Is the navigation clear and predictable?
4040-- **Progressive disclosure**: Is complexity revealed only when needed, or dumped on the user upfront?
4141-- **Run the 8-item cognitive load checklist** from the reference. Report failure count: 0-1 equals low (good), 2-3 equals moderate, 4+ equals critical.
4242-4343-### 4. Emotional Journey
4444-- What emotion does this interface evoke? Is that intentional?
4545-- Does it match the brand personality?
4646-- Does it feel trustworthy, approachable, premium, playful: whatever it should feel?
4747-- Would the target user feel "this is for me"?
4848-- **Peak-end rule**: Is the most intense moment positive? Does the experience end well (confirmation, celebration, clear next step)?
4949-- **Emotional valleys**: Check for onboarding frustration, error cliffs, feature discovery gaps, or anxiety spikes at high-stakes moments (payment, delete, commit)
5050-- **Interventions at negative moments**: Are there design interventions where users are likely to feel frustrated or anxious? (progress indicators, reassurance copy, undo options, social proof)
5151-5252-### 5. Discoverability and Affordance
5353-- Are interactive elements obviously interactive?
5454-- Would a user know what to do without instructions?
5555-- Are hover and focus states providing useful feedback?
5656-- Are there hidden features that should be more visible?
5757-5858-### 6. Composition and Balance
5959-- Does the layout feel balanced or uncomfortably weighted?
6060-- Is whitespace used intentionally or just leftover?
6161-- Is there visual rhythm in spacing and repetition?
6262-- Does asymmetry feel designed or accidental?
6363-6464-### 7. Typography as Communication
6565-- Does the type hierarchy clearly signal what to read first, second, third?
6666-- Is body text comfortable to read? (line length, spacing, size)
6767-- Do font choices reinforce the brand or tone?
6868-- Is there enough contrast between heading levels?
6969-7070-### 8. Color with Purpose
7171-- Is color used to communicate, not just decorate?
7272-- Does the palette feel cohesive?
7373-- Are accent colors drawing attention to the right things?
7474-- Does it work for colorblind users? (not just technically: does meaning still come through?)
7575-7676-### 9. States and Edge Cases
7777-- Empty states: Do they guide users toward action, or just say "nothing here"?
7878-- Loading states: Do they reduce perceived wait time?
7979-- Error states: Are they helpful and non-blaming?
8080-- Success states: Do they confirm and guide next steps?
8181-8282-### 10. Microcopy and Voice
8383-- Is the writing clear and concise?
8484-- Does it sound like a human (the right human for this brand)?
8585-- Are labels and buttons unambiguous?
8686-- Does error copy help users fix the problem?
8787-8888-## Phase 2: Present Findings
8989-9090-Structure your feedback as a design director would.
9191-9292-### Design Health Score
9393-> *Consult [heuristics-scoring](reference/heuristics-scoring.md)*
9494-9595-Score each of Nielsen 10 heuristics 0-4. Present as a table:
9696-9797-| # | Heuristic | Score | Key Issue |
9898-|---|-----------|-------|-----------|
9999-| 1 | Visibility of System Status | ? | [specific finding or "—" if solid] |
100100-| 2 | Match System and Real World | ? | |
101101-| 3 | User Control and Freedom | ? | |
102102-| 4 | Consistency and Standards | ? | |
103103-| 5 | Error Prevention | ? | |
104104-| 6 | Recognition Rather Than Recall | ? | |
105105-| 7 | Flexibility and Efficiency | ? | |
106106-| 8 | Aesthetic and Minimalist Design | ? | |
107107-| 9 | Error Recovery | ? | |
108108-| 10 | Help and Documentation | ? | |
109109-| **Total** | | **??/40** | **[Rating band]** |
110110-111111-Be honest with scores. A 4 means genuinely excellent. Most real interfaces score 20-32.
112112-113113-### Anti-Patterns Verdict
114114-**Start here.** Pass or fail: Does this look AI-generated? List specific tells from the skill Anti-Patterns section. Be brutally honest.
115115-116116-### Overall Impression
117117-A brief gut reaction: what works, what does not, and the single biggest opportunity.
118118-119119-### What is Working
120120-Highlight 2-3 things done well. Be specific about why they work.
121121-122122-### Priority Issues
123123-The 3-5 most impactful design problems, ordered by importance.
124124-125125-For each issue, tag with P0-P3 severity (consult [heuristics-scoring](reference/heuristics-scoring.md) for severity definitions):
126126-- **[P?] What**: Name the problem clearly
127127-- **Why it matters**: How this hurts users or undermines goals
128128-- **Fix**: What to do about it (be concrete)
129129-- **Suggested command**: Which command could address this (from: {{available_commands}})
130130-131131-### Persona Red Flags
132132-> *Consult [personas](reference/personas.md)*
133133-134134-Auto-select 2-3 personas most relevant to this interface type (use the selection table in the reference). If {{config_file}} contains a Design Context section from teach-impeccable, also generate 1-2 project-specific personas from the audience or brand info.
135135-136136-For each selected persona, walk through the primary user action and list specific red flags found:
137137-138138-**Alex (Power User)**: No keyboard shortcuts detected. Form requires 8 clicks for primary action. Forced modal onboarding. High abandonment risk.
139139-140140-**Jordan (First-Timer)**: Icon-only nav in sidebar. Technical jargon in error messages ("404 Not Found"). No visible help. Will abandon at step 2.
141141-142142-Be specific. Name the exact elements and interactions that fail each persona. Do not write generic persona descriptions. Write what broke for them.
143143-144144-### Minor Observations
145145-Quick notes on smaller issues worth addressing.
146146-147147-**Remember**:
148148-- Be direct. Vague feedback wastes everyone time.
149149-- Be specific. "the submit button" not "some elements"
150150-- Say what is wrong AND why it matters to users
151151-- Give concrete suggestions, not just "consider exploring..."
152152-- Prioritize ruthlessly. If everything is important, nothing is.
153153-- Do not soften criticism. Developers need honest feedback to ship great design.
154154-155155-## Phase 3: Ask the User
156156-157157-**After presenting findings**, use targeted questions based on what was actually found. {{ask_instruction}} These answers will shape the action plan.
158158-159159-Ask questions along these lines (adapt to the specific findings: do NOT ask generic questions):
160160-161161-1. **Priority direction**: Based on the issues found, ask which category matters most to the user right now. For example: "I found problems with visual hierarchy, color usage, and information overload. Which area should we tackle first?" Offer the top 2-3 issue categories as options.
162162-163163-2. **Design intent**: If the critique found a tonal mismatch, ask whether it was intentional. For example: "The interface feels clinical and corporate. Is that the intended tone, or should it feel warmer, bolder, more playful?" Offer 2-3 tonal directions as options based on what would fix the issues found.
164164-165165-3. **Scope**: Ask how much the user wants to take on. For example: "I found N issues. Want to address everything, or focus on the top 3?" Offer scope options like "Top 3 only", "All issues", "Critical issues only".
166166-167167-4. **Constraints** (optional: only ask if relevant): If the findings touch many areas, ask if anything is off-limits. For example: "Should any sections stay as-is?" This prevents the plan from touching things the user considers done.
168168-169169-**Rules for questions**:
170170-- Every question must reference specific findings from Phase 2. Never ask generic "who is your audience?" questions
171171-- Keep it to 2-4 questions maximum. Respect the user time.
172172-- Offer concrete options, not open-ended prompts.
173173-- If findings are straightforward (e.g., only 1-2 clear issues), skip questions and go directly to Phase 4
174174-175175-## Phase 4: Recommended Actions
176176-177177-**After receiving the user answers**, present a prioritized action summary reflecting the user priorities and scope from Phase 3.
178178-179179-### Action Summary
180180-181181-List recommended commands in priority order, based on the user answers:
182182-183183-1. **`{{command_prefix}}command-name`**: Brief description of what to fix (specific context from critique findings)
184184-2. **`{{command_prefix}}command-name`**: Brief description (specific context)
185185-...
186186-187187-**Rules for recommendations**:
188188-- Only recommend commands from: {{available_commands}}
189189-- Order by the user stated priorities first, then by impact
190190-- Each item description should carry enough context that the command knows what to focus on
191191-- Map each Priority Issue to the appropriate command
192192-- Skip commands that would address zero issues
193193-- If the user chose a limited scope, only include items within that scope
194194-- If the user marked areas as off-limits, exclude commands that would touch those areas
195195-- End with {{command_prefix}}polish as the final step if any fixes were recommended
196196-197197-After presenting the summary, tell the user:
198198-199199-> You can ask me to run these one at a time, all at once, or in any order you prefer.
200200->
201201-> Re-run {{command_prefix}}critique after fixes to see your score improve.
+7-7
skills/delight/SKILL.md
···11---
22name: delight
33-description: "Add moments of joy, personality, and unexpected touches that make interfaces memorable and enjoyable to use. Elevates functional to delightful. Use when the user asks to add polish, personality, animations, micro-interactions, delight, or make an interface feel fun or memorable."
33+description: "Add moments of joy, personality, and unexpected touches that make interfaces memorable and enjoyable to use. Elevates functional to delightful. Use when user asks to add polish, personality, animations, micro-interactions, delight, or make interface feel fun or memorable."
44argument-hint: "[target]"
55user-invocable: true
66---
···991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: what is appropriate for the domain (playful vs professional vs quirky vs elegant).
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: what is appropriate for domain (playful vs professional vs quirky vs elegant).
13131414---
15151616## Assess Delight Opportunities
17171818-Identify where delight would enhance (not distract from) the experience.
1818+Identify where delight would enhance (not distract from) experience.
19192020### 1. Find natural delight moments
2121- **Success states**: Completed actions (save, send, publish)
···3838- **Helpful surprises**: Anticipating needs before users ask (productivity tools)
3939- **Sensory richness**: Satisfying sounds, smooth animations (creative tools)
40404141-If any of these are unclear from the codebase, {{ask_instruction}}
4141+If any of these are unclear from codebase, {{ask_instruction}}
42424343-**CRITICAL**: Delight should enhance usability, never obscure it. If users notice the delight more than accomplishing their goal, you have gone too far.
4343+**CRITICAL**: Delight should enhance usability, never obscure it. If users notice delight more than accomplishing their goal, you have gone too far.
44444545## Delight Principles
4646···244244- "Checking for updates since yesterday..."
245245```
246246247247-**WARNING**: Avoid cliched loading messages like "Herding pixels", "Teaching robots to dance", "Consulting the magic 8-ball", "Counting backwards from infinity". These are AI-slop copy: instantly recognizable as machine-generated. Write messages that are specific to what your product does.
247247+**WARNING**: Avoid cliched loading messages like "Herding pixels", "Teaching robots to dance", "Consulting magic 8-ball", "Counting backwards from infinity". These are AI-slop copy: instantly recognizable as machine-generated. Write messages that are specific to what your product does.
248248249249### Celebration Moments
250250···300300- **Appropriate**: Matches brand and context
301301- **Accessible**: Works with reduced motion, screen readers
302302303303-Remember: Delight is the difference between a tool and an experience. Add personality, surprise users positively, and create moments worth sharing. But always respect usability: delight should enhance, never obstruct.
303303+Remember: Delight is difference between tool and experience. Add personality, surprise users positively, and create moments worth sharing. But always respect usability: delight should enhance, never obstruct.
-303
skills/delight/SKILL.md.original.md
···11----
22-name: delight
33-description: "Add moments of joy, personality, and unexpected touches that make interfaces memorable and enjoyable to use. Elevates functional to delightful. Use when the user asks to add polish, personality, animations, micro-interactions, delight, or make an interface feel fun or memorable."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: what is appropriate for the domain (playful vs professional vs quirky vs elegant).
1313-1414----
1515-1616-## Assess Delight Opportunities
1717-1818-Identify where delight would enhance (not distract from) the experience.
1919-2020-### 1. Find natural delight moments
2121-- **Success states**: Completed actions (save, send, publish)
2222-- **Empty states**: First-time experiences, onboarding
2323-- **Loading states**: Waiting periods that could be entertaining
2424-- **Achievements**: Milestones, streaks, completions
2525-- **Interactions**: Hover states, clicks, drags
2626-- **Errors**: Softening frustrating moments
2727-- **Easter eggs**: Hidden discoveries for curious users
2828-2929-### 2. Understand the context
3030-- What is the brand personality? (Playful? Professional? Quirky? Elegant?)
3131-- Who is the audience? (Tech-savvy? Creative? Corporate?)
3232-- What is the emotional context? (Accomplishment? Exploration? Frustration?)
3333-- What is appropriate? (Banking app does not equal gaming app)
3434-3535-### 3. Define delight strategy
3636-- **Subtle sophistication**: Refined micro-interactions (luxury brands)
3737-- **Playful personality**: Whimsical illustrations and copy (consumer apps)
3838-- **Helpful surprises**: Anticipating needs before users ask (productivity tools)
3939-- **Sensory richness**: Satisfying sounds, smooth animations (creative tools)
4040-4141-If any of these are unclear from the codebase, {{ask_instruction}}
4242-4343-**CRITICAL**: Delight should enhance usability, never obscure it. If users notice the delight more than accomplishing their goal, you have gone too far.
4444-4545-## Delight Principles
4646-4747-Follow these guidelines.
4848-4949-### Delight Amplifies, Never Blocks
5050-- Delight moments should be quick (less than 1 second)
5151-- Never delay core functionality for delight
5252-- Make delight skippable or subtle
5353-- Respect user time and task focus
5454-5555-### Surprise and Discovery
5656-- Hide delightful details for users to discover
5757-- Reward exploration and curiosity
5858-- Do not announce every delight moment
5959-- Let users share discoveries with others
6060-6161-### Appropriate to Context
6262-- Match delight to emotional moment (celebrate success, empathize with errors)
6363-- Respect the user state (do not be playful during critical errors)
6464-- Match brand personality and audience expectations
6565-- Cultural sensitivity (what is delightful varies by culture)
6666-6767-### Compound Over Time
6868-- Delight should remain fresh with repeated use
6969-- Vary responses (not same animation every time)
7070-- Reveal deeper layers with continued use
7171-- Build anticipation through patterns
7272-7373-## Delight Techniques
7474-7575-Add personality and joy through these methods.
7676-7777-### Micro-interactions and Animation
7878-7979-**Button delight**:
8080-```css
8181-/* Satisfying button press */
8282-.button {
8383- transition: transform 0.1s, box-shadow 0.1s;
8484-}
8585-.button:active {
8686- transform: translateY(2px);
8787- box-shadow: 0 2px 4px rgba(0,0,0,0.2);
8888-}
8989-9090-/* Ripple effect on click */
9191-/* Smooth lift on hover */
9292-.button:hover {
9393- transform: translateY(-2px);
9494- transition: transform 0.2s cubic-bezier(0.25, 1, 0.5, 1); /* ease-out-quart */
9595-}
9696-```
9797-9898-**Loading delight**:
9999-- Playful loading animations (not just spinners)
100100-- Personality in loading messages (write product-specific ones, not generic AI filler)
101101-- Progress indication with encouraging messages
102102-- Skeleton screens with subtle animations
103103-104104-**Success animations**:
105105-- Checkmark draw animation
106106-- Confetti burst for major achievements
107107-- Gentle scale and fade for confirmation
108108-- Satisfying sound effects (subtle)
109109-110110-**Hover surprises**:
111111-- Icons that animate on hover
112112-- Color shifts or glow effects
113113-- Tooltip reveals with personality
114114-- Cursor changes (custom cursors for branded experiences)
115115-116116-### Personality in Copy
117117-118118-**Playful error messages**:
119119-```
120120-"Error 404"
121121-"This page is playing hide and seek. (And winning)"
122122-123123-"Connection failed"
124124-"Looks like the internet took a coffee break. Want to retry?"
125125-```
126126-127127-**Encouraging empty states**:
128128-```
129129-"No projects"
130130-"Your canvas awaits. Create something amazing."
131131-132132-"No messages"
133133-"Inbox zero! You're crushing it today."
134134-```
135135-136136-**Playful labels and tooltips**:
137137-```
138138-"Delete"
139139-"Send to void" (for playful brand)
140140-141141-"Help"
142142-"Rescue me" (tooltip)
143143-```
144144-145145-**IMPORTANT**: Match copy personality to brand. Banks should not be wacky, but they can be warm.
146146-147147-### Illustrations and Visual Personality
148148-149149-**Custom illustrations**:
150150-- Empty state illustrations (not stock icons)
151151-- Error state illustrations (friendly monsters, quirky characters)
152152-- Loading state illustrations (animated characters)
153153-- Success state illustrations (celebrations)
154154-155155-**Icon personality**:
156156-- Custom icon set matching brand personality
157157-- Animated icons (subtle motion on hover or click)
158158-- Illustrative icons (more detailed than generic)
159159-- Consistent style across all icons
160160-161161-**Background effects**:
162162-- Subtle particle effects
163163-- Gradient mesh backgrounds
164164-- Geometric patterns
165165-- Parallax depth
166166-- Time-of-day themes (morning vs night)
167167-168168-### Satisfying Interactions
169169-170170-**Drag and drop delight**:
171171-- Lift effect on drag (shadow, scale)
172172-- Snap animation when dropped
173173-- Satisfying placement sound
174174-- Undo toast ("Dropped in wrong place? [Undo]")
175175-176176-**Toggle switches**:
177177-- Smooth slide with spring physics
178178-- Color transition
179179-- Haptic feedback on mobile
180180-- Optional sound effect
181181-182182-**Progress and achievements**:
183183-- Streak counters with celebratory milestones
184184-- Progress bars that "celebrate" at 100%
185185-- Badge unlocks with animation
186186-- Playful stats ("You are on fire! 5 days in a row")
187187-188188-**Form interactions**:
189189-- Input fields that animate on focus
190190-- Checkboxes with a satisfying scale pulse when checked
191191-- Success state that celebrates valid input
192192-- Auto-grow textareas
193193-194194-### Sound Design
195195-196196-**Subtle audio cues** (when appropriate):
197197-- Notification sounds (distinctive but not annoying)
198198-- Success sounds (satisfying "ding")
199199-- Error sounds (empathetic, not harsh)
200200-- Typing sounds for chat or messaging
201201-- Ambient background audio (very subtle)
202202-203203-**IMPORTANT**:
204204-- Respect system sound settings
205205-- Provide mute option
206206-- Keep volumes quiet (subtle cues, not alarms)
207207-- Do not play on every interaction (sound fatigue is real)
208208-209209-### Easter Eggs and Hidden Delights
210210-211211-**Discovery rewards**:
212212-- Konami code unlocks special theme
213213-- Hidden keyboard shortcuts (Cmd+K for special features)
214214-- Hover reveals on logos or illustrations
215215-- Alt text jokes on images (for screen reader users too!)
216216-- Console messages for developers ("Like what you see? We're hiring!")
217217-218218-**Seasonal touches**:
219219-- Holiday themes (subtle, tasteful)
220220-- Seasonal color shifts
221221-- Weather-based variations
222222-- Time-based changes (dark at night, light during day)
223223-224224-**Contextual personality**:
225225-- Different messages based on time of day
226226-- Responses to specific user actions
227227-- Randomized variations (not same every time)
228228-- Progressive reveals with continued use
229229-230230-### Loading and Waiting States
231231-232232-**Make waiting engaging**:
233233-- Interesting loading messages that rotate
234234-- Progress bars with personality
235235-- Mini-games during long loads
236236-- Fun facts or tips while waiting
237237-- Countdown with encouraging messages
238238-239239-```
240240-Loading messages: write ones specific to your product, not generic AI filler:
241241-- "Crunching your latest numbers..."
242242-- "Syncing with your team's changes..."
243243-- "Preparing your dashboard..."
244244-- "Checking for updates since yesterday..."
245245-```
246246-247247-**WARNING**: Avoid cliched loading messages like "Herding pixels", "Teaching robots to dance", "Consulting the magic 8-ball", "Counting backwards from infinity". These are AI-slop copy: instantly recognizable as machine-generated. Write messages that are specific to what your product actually does.
248248-249249-### Celebration Moments
250250-251251-**Success celebrations**:
252252-- Confetti for major milestones
253253-- Animated checkmarks for completions
254254-- Progress bar celebrations at 100%
255255-- "Achievement unlocked" style notifications
256256-- Personalized messages ("You published your 10th article!")
257257-258258-**Milestone recognition**:
259259-- First-time actions get special treatment
260260-- Streak tracking and celebration
261261-- Progress toward goals
262262-- Anniversary celebrations
263263-264264-## Implementation Patterns
265265-266266-**Animation libraries**:
267267-- Framer Motion (React)
268268-- GSAP (universal)
269269-- Lottie (After Effects animations)
270270-- Canvas confetti (party effects)
271271-272272-**Sound libraries**:
273273-- Howler.js (audio management)
274274-- Use-sound (React hook)
275275-276276-**Physics libraries**:
277277-- React Spring (spring physics)
278278-- Popmotion (animation primitives)
279279-280280-**IMPORTANT**: File size matters. Compress images, optimize animations, lazy load delight features.
281281-282282-**NEVER**:
283283-- Delay core functionality for delight
284284-- Force users through delightful moments (make skippable)
285285-- Use delight to hide poor UX
286286-- Overdo it (less is more)
287287-- Ignore accessibility (animate responsibly, provide alternatives)
288288-- Make every interaction delightful (special moments should be special)
289289-- Sacrifice performance for delight
290290-- Be inappropriate for context (read the room)
291291-292292-## Verify Delight Quality
293293-294294-Test that delight actually delights.
295295-296296-- **User reactions**: Do users smile? Share screenshots?
297297-- **Does not annoy**: Still pleasant after 100th time?
298298-- **Does not block**: Can users opt out or skip?
299299-- **Performant**: No jank, no slowdown
300300-- **Appropriate**: Matches brand and context
301301-- **Accessible**: Works with reduced motion, screen readers
302302-303303-Remember: Delight is the difference between a tool and an experience. Add personality, surprise users positively, and create moments worth sharing. But always respect usability: delight should enhance, never obstruct.
+9-9
skills/distill/SKILL.md
···11---
22name: distill
33-description: "Strip designs to their essence by removing unnecessary complexity. Great design is simple, powerful, and clean. Use when the user asks to simplify, declutter, reduce noise, remove elements, or make a UI cleaner and more focused."
33+description: "Strip designs to their essence by removing unnecessary complexity. Great design is simple, powerful, and clean. Use when user asks to simplify, declutter, reduce noise, remove elements, or make UI cleaner and more focused."
44argument-hint: "[target]"
55user-invocable: true
66---
7788-Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
88+Remove unnecessary complexity from designs, revealing essential elements and creating clarity through ruthless simplification.
991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
13131414---
15151616## Assess Current State
17171818-Analyze what makes the design feel complex or cluttered.
1818+Analyze what makes design feel complex or cluttered.
19192020### 1. Identify complexity sources
2121- **Too many elements**: Competing buttons, redundant information, visual clutter
···3131- What can be removed, hidden, or combined?
3232- What is 20% that delivers 80% of value?
33333434-If any of these are unclear from the codebase, {{ask_instruction}}
3434+If any of these are unclear from codebase, {{ask_instruction}}
35353636-**CRITICAL**: Simplicity is not about removing features. It is about removing obstacles between users and their goals. Every element should justify its existence.
3636+**CRITICAL**: Simplicity is not about removing features. it's about removing obstacles between users and their goals. Every element should justify its existence.
37373838## Plan Simplification
39394040-Create a ruthless editing strategy.
4040+Create ruthless editing strategy.
41414242- **Core purpose**: What is ONE thing this should accomplish?
4343- **Essential elements**: What is truly necessary to achieve that purpose?
···5555- **Progressive disclosure**: Hide complexity behind clear entry points (accordions, modals, step-through flows)
5656- **Combine related actions**: Merge similar buttons, consolidate forms, group related content
5757- **Clear hierarchy**: ONE primary action, few secondary actions, everything else tertiary or hidden
5858-- **Remove redundancy**: If it is said elsewhere, do not repeat it here
5858+- **Remove redundancy**: If it's said elsewhere, do not repeat it here
59596060### Visual Simplification
6161- **Reduce color palette**: Use 1-2 colors plus neutrals, not 5-7 colors
···118118- Consider if they need alternative access points
119119- Note any user feedback to monitor
120120121121-Remember: You have great taste and judgment. Simplification is an act of confidence: knowing what to keep and courage to remove the rest. As Antoine de Saint-Exupery said: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."
121121+Remember: You have great taste and judgment. Simplification is act of confidence: knowing what to keep and courage to remove rest. As Antoine de Saint-Exupery said: "Perfection is achieved not when there's nothing more to add, but when there's nothing left to take away."
-121
skills/distill/SKILL.md.original.md
···11----
22-name: distill
33-description: "Strip designs to their essence by removing unnecessary complexity. Great design is simple, powerful, and clean. Use when the user asks to simplify, declutter, reduce noise, remove elements, or make a UI cleaner and more focused."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1313-1414----
1515-1616-## Assess Current State
1717-1818-Analyze what makes the design feel complex or cluttered.
1919-2020-### 1. Identify complexity sources
2121-- **Too many elements**: Competing buttons, redundant information, visual clutter
2222-- **Excessive variation**: Too many colors, fonts, sizes, styles without purpose
2323-- **Information overload**: Everything visible at once, no progressive disclosure
2424-- **Visual noise**: Unnecessary borders, shadows, backgrounds, decorations
2525-- **Confusing hierarchy**: Unclear what matters most
2626-- **Feature creep**: Too many options, actions, or paths forward
2727-2828-### 2. Find the essence
2929-- What is the primary user goal? (There should be ONE)
3030-- What is actually necessary vs nice-to-have?
3131-- What can be removed, hidden, or combined?
3232-- What is the 20% that delivers 80% of value?
3333-3434-If any of these are unclear from the codebase, {{ask_instruction}}
3535-3636-**CRITICAL**: Simplicity is not about removing features. It is about removing obstacles between users and their goals. Every element should justify its existence.
3737-3838-## Plan Simplification
3939-4040-Create a ruthless editing strategy.
4141-4242-- **Core purpose**: What is the ONE thing this should accomplish?
4343-- **Essential elements**: What is truly necessary to achieve that purpose?
4444-- **Progressive disclosure**: What can be hidden until needed?
4545-- **Consolidation opportunities**: What can be combined or integrated?
4646-4747-**IMPORTANT**: Simplification is hard. It requires saying no to good ideas to make room for great execution. Be ruthless.
4848-4949-## Simplify the Design
5050-5151-Systematically remove complexity across these dimensions.
5252-5353-### Information Architecture
5454-- **Reduce scope**: Remove secondary actions, optional features, redundant information
5555-- **Progressive disclosure**: Hide complexity behind clear entry points (accordions, modals, step-through flows)
5656-- **Combine related actions**: Merge similar buttons, consolidate forms, group related content
5757-- **Clear hierarchy**: ONE primary action, few secondary actions, everything else tertiary or hidden
5858-- **Remove redundancy**: If it is said elsewhere, do not repeat it here
5959-6060-### Visual Simplification
6161-- **Reduce color palette**: Use 1-2 colors plus neutrals, not 5-7 colors
6262-- **Limit typography**: One font family, 3-4 sizes maximum, 2-3 weights
6363-- **Remove decorations**: Eliminate borders, shadows, backgrounds that do not serve hierarchy or function
6464-- **Flatten structure**: Reduce nesting, remove unnecessary containers. Never nest cards inside cards.
6565-- **Remove unnecessary cards**: Cards are not needed for basic layout. Use spacing and alignment instead.
6666-- **Consistent spacing**: Use one spacing scale, remove arbitrary gaps
6767-6868-### Layout Simplification
6969-- **Linear flow**: Replace complex grids with simple vertical flow where possible
7070-- **Remove sidebars**: Move secondary content inline or hide it
7171-- **Full-width**: Use available space generously instead of complex multi-column layouts
7272-- **Consistent alignment**: Pick left or center, stick with it
7373-- **Generous white space**: Let content breathe, do not pack everything tight
7474-7575-### Interaction Simplification
7676-- **Reduce choices**: Fewer buttons, fewer options, clearer path forward (paradox of choice is real)
7777-- **Smart defaults**: Make common choices automatic, only ask when necessary
7878-- **Inline actions**: Replace modal flows with inline editing where possible
7979-- **Remove steps**: Can signup be one step instead of three? Can checkout be simplified?
8080-- **Clear CTAs**: ONE obvious next step, not five competing actions
8181-8282-### Content Simplification
8383-- **Shorter copy**: Cut every sentence in half, then do it again
8484-- **Active voice**: "Save changes" not "Changes will be saved"
8585-- **Remove jargon**: Plain language always wins
8686-- **Scannable structure**: Short paragraphs, bullet points, clear headings
8787-- **Essential information only**: Remove marketing fluff, legalese, hedging
8888-- **Remove redundant copy**: No headers restating intros, no repeated explanations, say it once
8989-9090-### Code Simplification
9191-- **Remove unused code**: Dead CSS, unused components, orphaned files
9292-- **Flatten component trees**: Reduce nesting depth
9393-- **Consolidate styles**: Merge similar styles, use utilities consistently
9494-- **Reduce variants**: Does that component need 12 variations, or can 3 cover 90% of cases?
9595-9696-**NEVER**:
9797-- Remove necessary functionality (simplicity equals feature-less)
9898-- Sacrifice accessibility for simplicity (clear labels and ARIA still required)
9999-- Make things so simple they are unclear (mystery equals minimalism)
100100-- Remove information users need to make decisions
101101-- Eliminate hierarchy completely (some things should stand out)
102102-- Oversimplify complex domains (match complexity to actual task complexity)
103103-104104-## Verify Simplification
105105-106106-Ensure simplification improves usability.
107107-108108-- **Faster task completion**: Can users accomplish goals more quickly?
109109-- **Reduced cognitive load**: Is it easier to understand what to do?
110110-- **Still complete**: Are all necessary features still accessible?
111111-- **Clearer hierarchy**: Is it obvious what matters most?
112112-- **Better performance**: Does simpler design load faster?
113113-114114-## Document Removed Complexity
115115-116116-If you removed features or options:
117117-- Document why they were removed
118118-- Consider if they need alternative access points
119119-- Note any user feedback to monitor
120120-121121-Remember: You have great taste and judgment. Simplification is an act of confidence: knowing what to keep and courage to remove the rest. As Antoine de Saint-Exupery said: "Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away."
+7-7
skills/extract/SKILL.md
···11---
22name: extract
33-description: "Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library. Use when the user asks to create components, refactor repeated UI patterns, build a design system, or extract tokens."
33+description: "Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library. Use when user asks to create components, refactor repeated UI patterns, build design system, or extract tokens."
44argument-hint: "[target]"
55user-invocable: true
66---
7788-Identify reusable patterns, components, and design tokens, then extract and consolidate them into the design system for systematic reuse.
88+Identify reusable patterns, components, and design tokens, then extract and consolidate them into design system for systematic reuse.
991010## Discover
11111212-Analyze the target area to identify extraction opportunities.
1212+Analyze target area to identify extraction opportunities.
13131414### 1. Find the design system
1515Locate your design system, component library, or shared UI directory (grep for "design system", "ui", "components", etc.). Understand its structure:
···1818- Documentation patterns
1919- Import and export conventions
20202121-**CRITICAL**: If no design system exists, ask before creating one. Understand the preferred location and structure first.
2121+**CRITICAL**: If no design system exists, ask before creating one. Understand preferred location and structure first.
22222323### 2. Identify patterns
2424Look for:
···36363737## Plan Extraction
38383939-Create a systematic extraction plan.
3939+Create systematic extraction plan.
40404141- **Components to extract**: Which UI elements become reusable components?
4242- **Tokens to create**: Which hard-coded values become design tokens?
···75757676## Migrate
77777878-Replace existing uses with the new shared versions.
7878+Replace existing uses with new shared versions.
79798080- **Find all instances**: Search for patterns you have extracted
8181- **Replace systematically**: Update each use consume shared version
···9191- Add examples and guidelines
9292- Update any Storybook or component catalog
93939494-Remember: A good design system is a living system. Extract patterns as they emerge, enrich them thoughtfully, and maintain them consistently.
9494+Remember: good design system is living system. Extract patterns as they emerge, enrich them thoughtfully, and maintain them consistently.
-94
skills/extract/SKILL.md.original.md
···11----
22-name: extract
33-description: "Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library. Use when the user asks to create components, refactor repeated UI patterns, build a design system, or extract tokens."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Identify reusable patterns, components, and design tokens, then extract and consolidate them into the design system for systematic reuse.
99-1010-## Discover
1111-1212-Analyze the target area to identify extraction opportunities.
1313-1414-### 1. Find the design system
1515-Locate your design system, component library, or shared UI directory (grep for "design system", "ui", "components", etc.). Understand its structure:
1616-- Component organization and naming conventions
1717-- Design token structure (if any)
1818-- Documentation patterns
1919-- Import and export conventions
2020-2121-**CRITICAL**: If no design system exists, ask before creating one. Understand the preferred location and structure first.
2222-2323-### 2. Identify patterns
2424-Look for:
2525-- **Repeated components**: Similar UI patterns used multiple times (buttons, cards, inputs, etc.)
2626-- **Hard-coded values**: Colors, spacing, typography, shadows that should be tokens
2727-- **Inconsistent variations**: Multiple implementations of the same concept (3 different button styles)
2828-- **Reusable patterns**: Layout patterns, composition patterns, interaction patterns worth systematizing
2929-3030-### 3. Assess value
3131-Not everything should be extracted. Consider:
3232-- Is this used 3+ times, or likely to be reused?
3333-- Would systematizing this improve consistency?
3434-- Is this a general pattern or context-specific?
3535-- What is the maintenance cost vs benefit?
3636-3737-## Plan Extraction
3838-3939-Create a systematic extraction plan.
4040-4141-- **Components to extract**: Which UI elements become reusable components?
4242-- **Tokens to create**: Which hard-coded values become design tokens?
4343-- **Variants to support**: What variations does each component need?
4444-- **Naming conventions**: Component names, token names, prop names that match existing patterns
4545-- **Migration path**: How to refactor existing uses to consume the new shared versions
4646-4747-**IMPORTANT**: Design systems grow incrementally. Extract what is clearly reusable now, not everything that might someday be reusable.
4848-4949-## Extract and Enrich
5050-5151-Build improved, reusable versions.
5252-5353-- **Components**: Create well-designed components with:
5454- - Clear props API with sensible defaults
5555- - Proper variants for different use cases
5656- - Accessibility built in (ARIA, keyboard navigation, focus management)
5757- - Documentation and usage examples
5858-5959-- **Design tokens**: Create tokens with:
6060- - Clear naming (primitive vs semantic)
6161- - Proper hierarchy and organization
6262- - Documentation of when to use each token
6363-6464-- **Patterns**: Document patterns with:
6565- - When to use this pattern
6666- - Code examples
6767- - Variations and combinations
6868-6969-**NEVER**:
7070-- Extract one-off, context-specific implementations without generalization
7171-- Create components so generic they are useless
7272-- Extract without considering existing design system conventions
7373-- Skip proper TypeScript types or prop documentation
7474-- Create tokens for every single value (tokens should have semantic meaning)
7575-7676-## Migrate
7777-7878-Replace existing uses with the new shared versions.
7979-8080-- **Find all instances**: Search for the patterns you have extracted
8181-- **Replace systematically**: Update each use to consume the shared version
8282-- **Test thoroughly**: Ensure visual and functional parity
8383-- **Delete dead code**: Remove the old implementations
8484-8585-## Document
8686-8787-Update design system documentation.
8888-8989-- Add new components to the component library
9090-- Document token usage and values
9191-- Add examples and guidelines
9292-- Update any Storybook or component catalog
9393-9494-Remember: A good design system is a living system. Extract patterns as they emerge, enrich them thoughtfully, and maintain them consistently.
+21-21
skills/find-skills/SKILL.md
···11---
22name: find-skills
33-description: Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
33+description: Helps users discover and install agent skills when they ask questions like "how do I do X", "find skill for X", "is there skill that can...", or express interest in extending capabilities. This skill should be used when user is looking for functionality that might exist as installable skill.
44---
5566# Find Skills
7788-This skill helps you discover and install skills from the open agent skills ecosystem.
88+This skill helps you discover and install skills from open agent skills ecosystem.
991010## When to Use This Skill
11111212-Use this skill when the user:
1212+Use this skill when user:
13131414- Asks "how do I do X" where X might be common task with existing skill
1515- Says "find skill for X" or "is there skill for X"
···20202121## What is the Skills CLI?
22222323-The Skills CLI (`npx skills`) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.
2323+ Skills CLI (`npx skills`) is package manager for open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.
24242525**Key commands:**
2626···35353636### Step 1: Understand What They Need
37373838-When a user asks for help with something, identify:
3838+When user asks for help with something, identify:
39394040-1. The domain (e.g., React, testing, design, deployment)
4141-2. The specific task (e.g., writing tests, creating animations, reviewing PRs)
4242-3. Whether this is a common enough task that a skill likely exists
4040+1. domain (e.g., React, testing, design, deployment)
4141+2. specific task (e.g., writing tests, creating animations, reviewing PRs)
4242+3. Whether this is common enough task that skill likely exists
43434444### Step 2: Check the Leaderboard First
45454646-Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options.
4646+Before running CLI search, check [skills.sh leaderboard](https://skills.sh/) to see if well-known skill already exists for domain. leaderboard ranks skills by total installs, surfacing most popular and battle-tested options.
47474848For example, top skills for web development include:
4949- `vercel-labs/agent-skills` — React, Next.js, web design (100K+ installs each)
···51515252### Step 3: Search for Skills
53535454-If the leaderboard doesn't cover the user's need, run the find command:
5454+If leaderboard doesn't cover user's need, run find command:
55555656```bash
5757npx skills find [query]
···65656666### Step 4: Verify Quality Before Recommending
67676868-**Do not recommend a skill based solely on search results.** Always verify:
6868+**Do not recommend skill based solely on search results.** Always verify:
696970701. **Install count** — Prefer skills with 1K+ installs. Be cautious with anything under 100.
71712. **Source reputation** — Official sources (`vercel-labs`, `anthropics`, `microsoft`) are more trustworthy than unknown authors.
7272-3. **GitHub stars** — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism.
7272+3. **GitHub stars** — Check source repository. skill from repo with <100 stars should be treated with skepticism.
73737474### Step 5: Present Options to the User
75757676-When you find relevant skills, present them to the user with:
7676+When you find relevant skills, present them to user with:
77777878-1. The skill name and what it does
7979-2. The install count and source
8080-3. The install command they can run
8181-4. A link to learn more at skills.sh
7878+1. skill name and what it does
7979+2. install count and source
8080+3. install command they can run
8181+4. link to learn more at skills.sh
82828383Example response:
8484···95959696### Step 6: Offer to Install
97979898-If the user wants to proceed, you can install the skill for them:
9898+If user wants to proceed, install skill for them:
9999100100```bash
101101npx skills add <owner/repo@skill> -g -y
102102```
103103104104-The `-g` flag installs globally (user-level) and `-y` skips confirmation prompts.
104104+ `-g` flag installs globally (user-level) and `-y` skips confirmation prompts.
105105106106## Common Skill Categories
107107···128128If no relevant skills exist:
1291291301301. Acknowledge that no existing skill was found
131131-2. Offer to help with the task directly using your general capabilities
132132-3. Suggest the user could create their own skill with `npx skills init`
131131+2. Offer to help with task directly using your general capabilities
132132+3. Suggest user could create their own skill with `npx skills init`
133133134134Example:
135135
-142
skills/find-skills/SKILL.md.original.md
···11----
22-name: find-skills
33-description: Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
44----
55-66-# Find Skills
77-88-This skill helps you discover and install skills from the open agent skills ecosystem.
99-1010-## When to Use This Skill
1111-1212-Use this skill when the user:
1313-1414-- Asks "how do I do X" where X might be a common task with an existing skill
1515-- Says "find a skill for X" or "is there a skill for X"
1616-- Asks "can you do X" where X is a specialized capability
1717-- Expresses interest in extending agent capabilities
1818-- Wants to search for tools, templates, or workflows
1919-- Mentions they wish they had help with a specific domain (design, testing, deployment, etc.)
2020-2121-## What is the Skills CLI?
2222-2323-The Skills CLI (`npx skills`) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.
2424-2525-**Key commands:**
2626-2727-- `npx skills find [query]` - Search for skills interactively or by keyword
2828-- `npx skills add <package>` - Install a skill from GitHub or other sources
2929-- `npx skills check` - Check for skill updates
3030-- `npx skills update` - Update all installed skills
3131-3232-**Browse skills at:** https://skills.sh/
3333-3434-## How to Help Users Find Skills
3535-3636-### Step 1: Understand What They Need
3737-3838-When a user asks for help with something, identify:
3939-4040-1. The domain (e.g., React, testing, design, deployment)
4141-2. The specific task (e.g., writing tests, creating animations, reviewing PRs)
4242-3. Whether this is a common enough task that a skill likely exists
4343-4444-### Step 2: Check the Leaderboard First
4545-4646-Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options.
4747-4848-For example, top skills for web development include:
4949-- `vercel-labs/agent-skills` — React, Next.js, web design (100K+ installs each)
5050-- `anthropics/skills` — Frontend design, document processing (100K+ installs)
5151-5252-### Step 3: Search for Skills
5353-5454-If the leaderboard doesn't cover the user's need, run the find command:
5555-5656-```bash
5757-npx skills find [query]
5858-```
5959-6060-For example:
6161-6262-- User asks "how do I make my React app faster?" → `npx skills find react performance`
6363-- User asks "can you help me with PR reviews?" → `npx skills find pr review`
6464-- User asks "I need to create a changelog" → `npx skills find changelog`
6565-6666-### Step 4: Verify Quality Before Recommending
6767-6868-**Do not recommend a skill based solely on search results.** Always verify:
6969-7070-1. **Install count** — Prefer skills with 1K+ installs. Be cautious with anything under 100.
7171-2. **Source reputation** — Official sources (`vercel-labs`, `anthropics`, `microsoft`) are more trustworthy than unknown authors.
7272-3. **GitHub stars** — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism.
7373-7474-### Step 5: Present Options to the User
7575-7676-When you find relevant skills, present them to the user with:
7777-7878-1. The skill name and what it does
7979-2. The install count and source
8080-3. The install command they can run
8181-4. A link to learn more at skills.sh
8282-8383-Example response:
8484-8585-```
8686-I found a skill that might help! The "react-best-practices" skill provides
8787-React and Next.js performance optimization guidelines from Vercel Engineering.
8888-(185K installs)
8989-9090-To install it:
9191-npx skills add vercel-labs/agent-skills@react-best-practices
9292-9393-Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices
9494-```
9595-9696-### Step 6: Offer to Install
9797-9898-If the user wants to proceed, you can install the skill for them:
9999-100100-```bash
101101-npx skills add <owner/repo@skill> -g -y
102102-```
103103-104104-The `-g` flag installs globally (user-level) and `-y` skips confirmation prompts.
105105-106106-## Common Skill Categories
107107-108108-When searching, consider these common categories:
109109-110110-| Category | Example Queries |
111111-| --------------- | ---------------------------------------- |
112112-| Web Development | react, nextjs, typescript, css, tailwind |
113113-| Testing | testing, jest, playwright, e2e |
114114-| DevOps | deploy, docker, kubernetes, ci-cd |
115115-| Documentation | docs, readme, changelog, api-docs |
116116-| Code Quality | review, lint, refactor, best-practices |
117117-| Design | ui, ux, design-system, accessibility |
118118-| Productivity | workflow, automation, git |
119119-120120-## Tips for Effective Searches
121121-122122-1. **Use specific keywords**: "react testing" is better than just "testing"
123123-2. **Try alternative terms**: If "deploy" doesn't work, try "deployment" or "ci-cd"
124124-3. **Check popular sources**: Many skills come from `vercel-labs/agent-skills` or `ComposioHQ/awesome-claude-skills`
125125-126126-## When No Skills Are Found
127127-128128-If no relevant skills exist:
129129-130130-1. Acknowledge that no existing skill was found
131131-2. Offer to help with the task directly using your general capabilities
132132-3. Suggest the user could create their own skill with `npx skills init`
133133-134134-Example:
135135-136136-```
137137-I searched for skills related to "xyz" but didn't find any matches.
138138-I can still help you with this task directly! Would you like me to proceed?
139139-140140-If this is something you do often, you could create your own skill:
141141-npx skills init my-xyz-skill
142142-```
+34-34
skills/frontend-design/SKILL.md
···11---
22name: frontend-design
33-description: "Create distinctive, production-grade frontend interfaces with high design quality. Generates creative, polished code that avoids generic AI aesthetics. Use when the user asks to build web components, pages, artifacts, posters, or applications, or when any design skill requires project context."
33+description: "Create distinctive, production-grade frontend interfaces with high design quality. Generates creative, polished code that avoids generic AI aesthetics. Use when user asks to build web components, pages, artifacts, posters, or applications, or when any design skill requires project context."
44license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
55---
66···1515- **Use cases**: What jobs are they trying to get done?
1616- **Brand personality or tone**: How should interface feel?
17171818-Individual skills may require additional context. Check the skill preparation section for specifics.
1818+Individual skills may require additional context. Check skill preparation section for specifics.
19192020-**CRITICAL**: You cannot infer this context by reading the codebase. Code tells you what was built, not who it is for or what it should feel like. Only the creator can provide this context.
2020+**CRITICAL**: You cannot infer this context by reading codebase. Code tells you what was built, not who it's for or what it should feel like. Only creator can provide this context.
21212222**Gathering order:**
2323-1. **Check current instructions (instant)**: If your loaded instructions already contains a Design Context section, proceed immediately.
2424-2. **Check.impeccable.md (fast)**: If not in instructions, read `.impeccable.md` from the project root. If it exists and contains the required context, proceed.
2525-3. **Run teach-impeccable (REQUIRED)**: If neither source has context, you MUST run {{command_prefix}}teach-impeccable NOW before doing anything else. Do NOT skip this step. Do NOT attempt to infer context from the codebase instead.
2323+1. **Check current instructions (instant)**: If your loaded instructions already contains Design Context section, proceed immediately.
2424+2. **Check.impeccable.md (fast)**: If not in instructions, read `.impeccable.md` from project root. If it exists and contains required context, proceed.
2525+3. **Run teach-impeccable (REQUIRED)**: If neither source has context, you MUST run {{command_prefix}}teach-impeccable NOW before doing anything else. Do NOT skip this step. Do NOT attempt to infer context from codebase instead.
26262727---
28282929## Design Direction
30303131-Commit to a BOLD aesthetic direction:
3131+Commit to BOLD aesthetic direction:
3232- **Purpose**: What problem does this interface solve? Who uses it?
3333-- **Tone**: Pick extreme: brutally minimal, maximalist chaos, retro-futuristic, organic or natural, luxury or refined, playful or toy-like, editorial or magazine, brutalist or raw, art deco or geometric, soft or pastel, industrial or utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to aesthetic direction.
3333+- **Tone**: Pick extreme: brutally minimal, maximalist chaos, retro-futuristic, organic or natural, luxury or refined, playful or toy-like, editorial or magazine, brutalist or raw, art deco or geometric, soft or pastel, industrial or utilitarian, etc. there're so many flavors to choose from. Use these for inspiration but design one that is true to aesthetic direction.
3434- **Constraints**: Technical requirements (framework, performance, accessibility).
3535- **Differentiation**: What makes this UNFORGETTABLE? What is one thing someone will remember?
36363737-**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work. The key is intentionality, not intensity.
3737+**CRITICAL**: Choose clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work. key is intentionality, not intensity.
38383939Then implement working code that is:
4040- Production-grade and functional
···4747### Typography
4848> *Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
49495050-Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
5050+Choose fonts that are beautiful, unique, and interesting. Pair distinctive display font with refined body font.
51515252-**DO**: Use a modular type scale with fluid sizing (clamp)
5252+**DO**: Use modular type scale with fluid sizing (clamp)
5353**DO**: Vary font weights and sizes to create clear visual hierarchy
5454**DON'T**: Use overused fonts: Inter, Roboto, Arial, Open Sans, system defaults
5555**DON'T**: Use monospace typography as lazy shorthand for "technical or developer" vibes
···5858### Color and Theme
5959> *Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
60606161-Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
6161+Commit to cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
62626363**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
6464-**DO**: Tint your neutrals toward your brand hue. Even a subtle hint creates subconscious cohesion
6565-**DON'T**: Use gray text on colored backgrounds. It looks washed out. Use a shade of the background color instead.
6464+**DO**: Tint your neutrals toward your brand hue. Even subtle hint creates subconscious cohesion
6565+**DON'T**: Use gray text on colored backgrounds. It looks washed out. Use shade of background color instead.
6666**DON'T**: Use pure black (#000) or pure white (#fff). Always tint. Pure black or white never appears in nature.
6767-**DON'T**: Use the AI color palette: cyan on dark, purple to blue gradients, neon accents on dark backgrounds
6868-**DON'T**: Use gradient text for "impact". Especially on metrics or headings. It is decorative rather than meaningful.
6767+**DON'T**: Use AI color palette: cyan on dark, purple to blue gradients, neon accents on dark backgrounds
6868+**DON'T**: Use gradient text for "impact". Especially on metrics or headings. it's decorative rather than meaningful.
6969**DON'T**: Default to dark mode with glowing accents. It looks "cool" without requiring actual design decisions.
70707171### Layout and Space
7272> *Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
73737474-Create visual rhythm through varied spacing. Not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
7474+Create visual rhythm through varied spacing. Not same padding everywhere. Embrace asymmetry and unexpected compositions. Break grid intentionally for emphasis.
75757676**DO**: Create visual rhythm through varied spacing: tight groupings, generous separations
7777**DO**: Use fluid spacing with clamp() that breathes on larger screens
7878-**DO**: Use asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
7979-**DON'T**: Wrap everything in cards. Not everything needs a container.
8080-**DON'T**: Nest cards inside cards. Visual noise. Flatten the hierarchy.
7878+**DO**: Use asymmetry and unexpected compositions. Break grid intentionally for emphasis.
7979+**DON'T**: Wrap everything in cards. Not everything needs container.
8080+**DON'T**: Nest cards inside cards. Visual noise. Flatten hierarchy.
8181**DON'T**: Use identical card grids. Same-sized cards with icon, heading, text, repeated endlessly.
8282-**DON'T**: Use the hero metric layout template. Big number, small label, supporting stats, gradient accent.
8282+**DON'T**: Use hero metric layout template. Big number, small label, supporting stats, gradient accent.
8383**DON'T**: Center everything. Left-aligned text with asymmetric layouts feels more designed.
8484-**DON'T**: Use the same spacing everywhere. Without rhythm, layouts feel monotonous.
8484+**DON'T**: Use same spacing everywhere. Without rhythm, layouts feel monotonous.
85858686### Visual Details
8787**DO**: Use intentional, purposeful decorative elements that reinforce brand.
8888**DON'T**: Use glassmorphism everywhere. Blur effects, glass cards, glow borders used decoratively rather than purposefully.
8989-**DON'T**: Use rounded elements with thick colored border on one side. A lazy accent that almost never looks intentional.
8989+**DON'T**: Use rounded elements with thick colored border on one side. lazy accent that almost never looks intentional.
9090**DON'T**: Use sparklines as decoration. Tiny charts that look sophisticated but convey nothing meaningful.
9191**DON'T**: Use rounded rectangles with generic drop shadows. Safe, forgettable, could be any AI output.
9292-**DON'T**: Use modals unless there is truly no better alternative. Modals are lazy.
9292+**DON'T**: Use modals unless there's truly no better alternative. Modals are lazy.
93939494### Motion
9595> *Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
···108108Make interactions feel fast. Use optimistic UI: update immediately, sync later.
109109110110**DO**: Use progressive disclosure. Start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions).
111111-**DO**: Design empty states that teach the interface, not say "nothing here"
111111+**DO**: Design empty states that teach interface, not say "nothing here"
112112**DO**: Make every interactive surface feel intentional and responsive.
113113-**DON'T**: Repeat the same information. Redundant headers, intros that restate the heading.
113113+**DON'T**: Repeat same information. Redundant headers, intros that restate heading.
114114**DON'T**: Make every button primary. Use ghost buttons, text links, secondary styles. Hierarchy matters.
115115116116### Responsive
117117> *Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
118118119119**DO**: Use container queries (@container) for component-level responsiveness
120120-**DO**: Adapt the interface for different contexts. Do not shrink it.
121121-**DON'T**: Hide critical functionality on mobile. Adapt the interface, do not amputate it.
120120+**DO**: Adapt interface for different contexts. Do not shrink it.
121121+**DON'T**: Hide critical functionality on mobile. Adapt interface, do not amputate it.
122122123123### UX Writing
124124> *Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
···130130131131## The AI Slop Test
132132133133-**Critical quality check**: If you showed this interface to someone and said "AI made this," would they believe you immediately? If yes, that is the problem.
133133+**Critical quality check**: If you showed this interface to someone and said "AI made this," would they believe you immediately? If yes, that is problem.
134134135135-A distinctive interface should make someone ask "how was this made?" not "which AI made this?"
135135+ distinctive interface should make someone ask "how was this made?" not "which AI made this?"
136136137137-Review the DO NOT guidelines above. They are the fingerprints of AI-generated work from 2024-2025.
137137+Review DO NOT guidelines above. They are fingerprints of AI-generated work from 2024-2025.
138138139139---
140140141141## Implementation Principles
142142143143-Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
143143+Match implementation complexity to aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
144144145145-Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
145145+Interpret creatively and make unexpected choices that feel genuinely designed for context. No design should be same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
146146147147-Remember: {{model}} is capable of extraordinary creative work. Do not hold back. Show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
147147+Remember: {{model}} is capable of extraordinary creative work. Do not hold back. Show what can truly be created when thinking outside box and committing fully to distinctive vision.
-147
skills/frontend-design/SKILL.md.original.md
···11----
22-name: frontend-design
33-description: "Create distinctive, production-grade frontend interfaces with high design quality. Generates creative, polished code that avoids generic AI aesthetics. Use when the user asks to build web components, pages, artifacts, posters, or applications, or when any design skill requires project context."
44-license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
55----
66-77-This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
88-99-## Context Gathering Protocol
1010-1111-Design skills produce generic output without project context. You MUST have confirmed design context before doing any design work.
1212-1313-**Required context** — every design skill needs at minimum:
1414-- **Target audience**: Who uses this product and in what context?
1515-- **Use cases**: What jobs are they trying to get done?
1616-- **Brand personality or tone**: How should the interface feel?
1717-1818-Individual skills may require additional context. Check the skill preparation section for specifics.
1919-2020-**CRITICAL**: You cannot infer this context by reading the codebase. Code tells you what was built, not who it is for or what it should feel like. Only the creator can provide this context.
2121-2222-**Gathering order:**
2323-1. **Check current instructions (instant)**: If your loaded instructions already contains a Design Context section, proceed immediately.
2424-2. **Check .impeccable.md (fast)**: If not in instructions, read `.impeccable.md` from the project root. If it exists and contains the required context, proceed.
2525-3. **Run teach-impeccable (REQUIRED)**: If neither source has context, you MUST run {{command_prefix}}teach-impeccable NOW before doing anything else. Do NOT skip this step. Do NOT attempt to infer context from the codebase instead.
2626-2727----
2828-2929-## Design Direction
3030-3131-Commit to a BOLD aesthetic direction:
3232-- **Purpose**: What problem does this interface solve? Who uses it?
3333-- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic or natural, luxury or refined, playful or toy-like, editorial or magazine, brutalist or raw, art deco or geometric, soft or pastel, industrial or utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
3434-- **Constraints**: Technical requirements (framework, performance, accessibility).
3535-- **Differentiation**: What makes this UNFORGETTABLE? What is the one thing someone will remember?
3636-3737-**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work. The key is intentionality, not intensity.
3838-3939-Then implement working code that is:
4040-- Production-grade and functional
4141-- Visually striking and memorable
4242-- Cohesive with a clear aesthetic point of view
4343-- Meticulously refined in every detail
4444-4545-## Frontend Aesthetics Guidelines
4646-4747-### Typography
4848-> *Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
4949-5050-Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
5151-5252-**DO**: Use a modular type scale with fluid sizing (clamp)
5353-**DO**: Vary font weights and sizes to create clear visual hierarchy
5454-**DON'T**: Use overused fonts: Inter, Roboto, Arial, Open Sans, system defaults
5555-**DON'T**: Use monospace typography as lazy shorthand for "technical or developer" vibes
5656-**DON'T**: Put large icons with rounded corners above every heading. They rarely add value and make sites look templated
5757-5858-### Color and Theme
5959-> *Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
6060-6161-Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
6262-6363-**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
6464-**DO**: Tint your neutrals toward your brand hue. Even a subtle hint creates subconscious cohesion
6565-**DON'T**: Use gray text on colored backgrounds. It looks washed out. Use a shade of the background color instead.
6666-**DON'T**: Use pure black (#000) or pure white (#fff). Always tint. Pure black or white never appears in nature.
6767-**DON'T**: Use the AI color palette: cyan on dark, purple to blue gradients, neon accents on dark backgrounds
6868-**DON'T**: Use gradient text for "impact". Especially on metrics or headings. It is decorative rather than meaningful.
6969-**DON'T**: Default to dark mode with glowing accents. It looks "cool" without requiring actual design decisions.
7070-7171-### Layout and Space
7272-> *Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
7373-7474-Create visual rhythm through varied spacing. Not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
7575-7676-**DO**: Create visual rhythm through varied spacing: tight groupings, generous separations
7777-**DO**: Use fluid spacing with clamp() that breathes on larger screens
7878-**DO**: Use asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
7979-**DON'T**: Wrap everything in cards. Not everything needs a container.
8080-**DON'T**: Nest cards inside cards. Visual noise. Flatten the hierarchy.
8181-**DON'T**: Use identical card grids. Same-sized cards with icon, heading, text, repeated endlessly.
8282-**DON'T**: Use the hero metric layout template. Big number, small label, supporting stats, gradient accent.
8383-**DON'T**: Center everything. Left-aligned text with asymmetric layouts feels more designed.
8484-**DON'T**: Use the same spacing everywhere. Without rhythm, layouts feel monotonous.
8585-8686-### Visual Details
8787-**DO**: Use intentional, purposeful decorative elements that reinforce brand.
8888-**DON'T**: Use glassmorphism everywhere. Blur effects, glass cards, glow borders used decoratively rather than purposefully.
8989-**DON'T**: Use rounded elements with thick colored border on one side. A lazy accent that almost never looks intentional.
9090-**DON'T**: Use sparklines as decoration. Tiny charts that look sophisticated but convey nothing meaningful.
9191-**DON'T**: Use rounded rectangles with generic drop shadows. Safe, forgettable, could be any AI output.
9292-**DON'T**: Use modals unless there is truly no better alternative. Modals are lazy.
9393-9494-### Motion
9595-> *Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
9696-9797-Focus on high-impact moments. One well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
9898-9999-**DO**: Use motion to convey state changes: entrances, exits, feedback
100100-**DO**: Use exponential easing (ease-out-quart, quint, or expo) for natural deceleration
101101-**DO**: For height animations, use grid-template-rows transitions instead of animating height directly.
102102-**DON'T**: Animate layout properties (width, height, padding, margin). Use transform and opacity only.
103103-**DON'T**: Use bounce or elastic easing. They feel dated and tacky. Real objects decelerate smoothly.
104104-105105-### Interaction
106106-> *Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
107107-108108-Make interactions feel fast. Use optimistic UI: update immediately, sync later.
109109-110110-**DO**: Use progressive disclosure. Start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions).
111111-**DO**: Design empty states that teach the interface, not just say "nothing here"
112112-**DO**: Make every interactive surface feel intentional and responsive.
113113-**DON'T**: Repeat the same information. Redundant headers, intros that restate the heading.
114114-**DON'T**: Make every button primary. Use ghost buttons, text links, secondary styles. Hierarchy matters.
115115-116116-### Responsive
117117-> *Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
118118-119119-**DO**: Use container queries (@container) for component-level responsiveness
120120-**DO**: Adapt the interface for different contexts. Do not just shrink it.
121121-**DON'T**: Hide critical functionality on mobile. Adapt the interface, do not amputate it.
122122-123123-### UX Writing
124124-> *Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
125125-126126-**DO**: Make every word earn its place.
127127-**DON'T**: Repeat information users can already see.
128128-129129----
130130-131131-## The AI Slop Test
132132-133133-**Critical quality check**: If you showed this interface to someone and said "AI made this," would they believe you immediately? If yes, that is the problem.
134134-135135-A distinctive interface should make someone ask "how was this made?" not "which AI made this?"
136136-137137-Review the DO NOT guidelines above. They are the fingerprints of AI-generated work from 2024-2025.
138138-139139----
140140-141141-## Implementation Principles
142142-143143-Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
144144-145145-Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
146146-147147-Remember: {{model}} is capable of extraordinary creative work. Do not hold back. Show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
+2-2
skills/harden/SKILL.md
···11---
22name: harden
33-description: "Improve interface resilience through better error handling, i18n support, text overflow handling, and edge case management. Makes interfaces robust and production-ready. Use when the user asks to harden, make production-ready, handle edge cases, add error states, or fix overflow and i18n issues."
33+description: "Improve interface resilience through better error handling, i18n support, text overflow handling, and edge case management. Makes interfaces robust and production-ready. Use when user asks to harden, make production-ready, handle edge cases, add error states, or fix overflow and i18n issues."
44argument-hint: "[target]"
55user-invocable: true
66---
···325325- Visual regression tests
326326- Accessibility tests (axe, WAVE)
327327328328-**IMPORTANT**: Hardening is about expecting the unexpected. Real users will do things you never imagined.
328328+**IMPORTANT**: Hardening is about expecting unexpected. Real users will do things you never imagined.
329329330330**NEVER**:
331331- Assume perfect input (validate everything)
-354
skills/harden/SKILL.md.original.md
···11----
22-name: harden
33-description: "Improve interface resilience through better error handling, i18n support, text overflow handling, and edge case management. Makes interfaces robust and production-ready. Use when the user asks to harden, make production-ready, handle edge cases, add error states, or fix overflow and i18n issues."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Strengthen interfaces against edge cases, errors, internationalization issues, and real-world usage scenarios that break idealized designs.
99-1010-## Assess Hardening Needs
1111-1212-Identify weaknesses and edge cases.
1313-1414-### 1. Test with extreme inputs
1515-- Very long text (names, descriptions, titles)
1616-- Very short text (empty, single character)
1717-- Special characters (emoji, RTL text, accents)
1818-- Large numbers (millions, billions)
1919-- Many items (1000+ list items, 50+ options)
2020-- No data (empty states)
2121-2222-### 2. Test error scenarios
2323-- Network failures (offline, slow, timeout)
2424-- API errors (400, 401, 403, 404, 500)
2525-- Validation errors
2626-- Permission errors
2727-- Rate limiting
2828-- Concurrent operations
2929-3030-### 3. Test internationalization
3131-- Long translations (German is often 30% longer than English)
3232-- RTL languages (Arabic, Hebrew)
3333-- Character sets (Chinese, Japanese, Korean, emoji)
3434-- Date and time formats
3535-- Number formats (1,000 vs 1.000)
3636-- Currency symbols
3737-3838-**CRITICAL**: Designs that only work with perfect data are not production-ready. Harden against reality.
3939-4040-## Hardening Dimensions
4141-4242-Systematically improve resilience.
4343-4444-### Text Overflow and Wrapping
4545-4646-**Long text handling**:
4747-```css
4848-/* Single line with ellipsis */
4949-.truncate {
5050- overflow: hidden;
5151- text-overflow: ellipsis;
5252- white-space: nowrap;
5353-}
5454-5555-/* Multi-line with clamp */
5656-.line-clamp {
5757- display: -webkit-box;
5858- -webkit-line-clamp: 3;
5959- -webkit-box-orient: vertical;
6060- overflow: hidden;
6161-}
6262-6363-/* Allow wrapping */
6464-.wrap {
6565- word-wrap: break-word;
6666- overflow-wrap: break-word;
6767- hyphens: auto;
6868-}
6969-```
7070-7171-**Flex or Grid overflow**:
7272-```css
7373-/* Prevent flex items from overflowing */
7474-.flex-item {
7575- min-width: 0; /* Allow shrinking below content size */
7676- overflow: hidden;
7777-}
7878-7979-/* Prevent grid items from overflowing */
8080-.grid-item {
8181- min-width: 0;
8282- min-height: 0;
8383-}
8484-```
8585-8686-**Responsive text sizing**:
8787-- Use clamp() for fluid typography
8888-- Set minimum readable sizes (14px on mobile)
8989-- Test text scaling (zoom to 200%)
9090-- Ensure containers expand with text
9191-9292-### Internationalization (i18n)
9393-9494-**Text expansion**:
9595-- Add 30-40% space budget for translations
9696-- Use flexbox or grid that adapts to content
9797-- Test with longest language (usually German)
9898-- Avoid fixed widths on text containers
9999-100100-```jsx
101101-// Bad: Assumes short English text
102102-<button className="w-24">Submit</button>
103103-104104-// Good: Adapts to content
105105-<button className="px-4 py-2">Submit</button>
106106-```
107107-108108-**RTL (Right-to-Left) support**:
109109-```css
110110-/* Use logical properties */
111111-margin-inline-start: 1rem; /* Not margin-left */
112112-padding-inline: 1rem; /* Not padding-left/right */
113113-border-inline-end: 1px solid; /* Not border-right */
114114-115115-/* Or use dir attribute */
116116-[dir="rtl"] .arrow { transform: scaleX(-1); }
117117-```
118118-119119-**Character set support**:
120120-- Use UTF-8 encoding everywhere
121121-- Test with Chinese, Japanese, or Korean (CJK) characters
122122-- Test with emoji (they can be 2-4 bytes)
123123-- Handle different scripts (Latin, Cyrillic, Arabic, etc.)
124124-125125-**Date and Time formatting**:
126126-```javascript
127127-// Good: Use Intl API for proper formatting
128128-new Intl.DateTimeFormat('en-US').format(date); // 1/15/2024
129129-new Intl.DateTimeFormat('de-DE').format(date); // 15.1.2024
130130-131131-new Intl.NumberFormat('en-US', {
132132- style: 'currency',
133133- currency: 'USD'
134134-}).format(1234.56); // $1,234.56
135135-```
136136-137137-**Pluralization**:
138138-```javascript
139139-// Bad: Assumes English pluralization
140140-`${count} item${count !== 1 ? 's' : ''}`
141141-142142-// Good: Use proper i18n library
143143-t('items', { count }) // Handles complex plural rules
144144-```
145145-146146-### Error Handling
147147-148148-**Network errors**:
149149-- Show clear error messages
150150-- Provide retry button
151151-- Explain what happened
152152-- Offer offline mode (if applicable)
153153-- Handle timeout scenarios
154154-155155-```jsx
156156-// Error states with recovery
157157-{error && (
158158- <ErrorMessage>
159159- <p>Failed to load data. {error.message}</p>
160160- <button onClick={retry}>Try again</button>
161161- </ErrorMessage>
162162-)}
163163-```
164164-165165-**Form validation errors**:
166166-- Inline errors near fields
167167-- Clear, specific messages
168168-- Suggest corrections
169169-- Do not block submission unnecessarily
170170-- Preserve user input on error
171171-172172-**API errors**:
173173-- Handle each status code appropriately:
174174- - 400: Show validation errors
175175- - 401: Redirect to login
176176- - 403: Show permission error
177177- - 404: Show not found state
178178- - 429: Show rate limit message
179179- - 500: Show generic error, offer support
180180-181181-**Graceful degradation**:
182182-- Core functionality works without JavaScript
183183-- Images have alt text
184184-- Progressive enhancement
185185-- Fallbacks for unsupported features
186186-187187-### Edge Cases and Boundary Conditions
188188-189189-**Empty states**:
190190-- No items in list
191191-- No search results
192192-- No notifications
193193-- No data to display
194194-- Provide clear next action
195195-196196-**Loading states**:
197197-- Initial load
198198-- Pagination load
199199-- Refresh
200200-- Show what is loading ("Loading your projects...")
201201-- Time estimates for long operations
202202-203203-**Large datasets**:
204204-- Pagination or virtual scrolling
205205-- Search or filter capabilities
206206-- Performance optimization
207207-- Do not load all 10,000 items at once
208208-209209-**Concurrent operations**:
210210-- Prevent double-submission (disable button while loading)
211211-- Handle race conditions
212212-- Optimistic updates with rollback
213213-- Conflict resolution
214214-215215-**Permission states**:
216216-- No permission to view
217217-- No permission to edit
218218-- Read-only mode
219219-- Clear explanation of why
220220-221221-**Browser compatibility**:
222222-- Polyfills for modern features
223223-- Fallbacks for unsupported CSS
224224-- Feature detection (not browser detection)
225225-- Test in target browsers
226226-227227-### Input Validation and Sanitization
228228-229229-**Client-side validation**:
230230-- Required fields
231231-- Format validation (email, phone, URL)
232232-- Length limits
233233-- Pattern matching
234234-- Custom validation rules
235235-236236-**Server-side validation** (always):
237237-- Never trust client-side only
238238-- Validate and sanitize all inputs
239239-- Protect against injection attacks
240240-- Rate limiting
241241-242242-**Constraint handling**:
243243-```html
244244-<!-- Set clear constraints -->
245245-<input
246246- type="text"
247247- maxlength="100"
248248- pattern="[A-Za-z0-9]+"
249249- required
250250- aria-describedby="username-hint"
251251-/>
252252-<small id="username-hint">
253253- Letters and numbers only, up to 100 characters
254254-</small>
255255-```
256256-257257-### Accessibility Resilience
258258-259259-**Keyboard navigation**:
260260-- All functionality accessible via keyboard
261261-- Logical tab order
262262-- Focus management in modals
263263-- Skip links for long content
264264-265265-**Screen reader support**:
266266-- Proper ARIA labels
267267-- Announce dynamic changes (live regions)
268268-- Descriptive alt text
269269-- Semantic HTML
270270-271271-**Motion sensitivity**:
272272-```css
273273-@media (prefers-reduced-motion: reduce) {
274274- * {
275275- animation-duration: 0.01ms !important;
276276- animation-iteration-count: 1 !important;
277277- transition-duration: 0.01ms !important;
278278- }
279279-}
280280-```
281281-282282-**High contrast mode**:
283283-- Test in Windows high contrast mode
284284-- Do not rely only on color
285285-- Provide alternative visual cues
286286-287287-### Performance Resilience
288288-289289-**Slow connections**:
290290-- Progressive image loading
291291-- Skeleton screens
292292-- Optimistic UI updates
293293-- Offline support (service workers)
294294-295295-**Memory leaks**:
296296-- Clean up event listeners
297297-- Cancel subscriptions
298298-- Clear timers and intervals
299299-- Abort pending requests on unmount
300300-301301-**Throttling and Debouncing**:
302302-```javascript
303303-// Debounce search input
304304-const debouncedSearch = debounce(handleSearch, 300);
305305-306306-// Throttle scroll handler
307307-const throttledScroll = throttle(handleScroll, 100);
308308-```
309309-310310-## Testing Strategies
311311-312312-**Manual testing**:
313313-- Test with extreme data (very long, very short, empty)
314314-- Test in different languages
315315-- Test offline
316316-- Test slow connection (throttle to 3G)
317317-- Test with screen reader
318318-- Test keyboard-only navigation
319319-- Test on old browsers
320320-321321-**Automated testing**:
322322-- Unit tests for edge cases
323323-- Integration tests for error scenarios
324324-- E2E tests for critical paths
325325-- Visual regression tests
326326-- Accessibility tests (axe, WAVE)
327327-328328-**IMPORTANT**: Hardening is about expecting the unexpected. Real users will do things you never imagined.
329329-330330-**NEVER**:
331331-- Assume perfect input (validate everything)
332332-- Ignore internationalization (design for global)
333333-- Leave error messages generic ("Error occurred")
334334-- Forget offline scenarios
335335-- Trust client-side validation alone
336336-- Use fixed widths for text
337337-- Assume English-length text
338338-- Block entire interface when one component errors
339339-340340-## Verify Hardening
341341-342342-Test thoroughly with edge cases.
343343-344344-- **Long text**: Try names with 100+ characters
345345-- **Emoji**: Use emoji in all text fields
346346-- **RTL**: Test with Arabic or Hebrew
347347-- **CJK**: Test with Chinese, Japanese, or Korean
348348-- **Network issues**: Disable internet, throttle connection
349349-- **Large datasets**: Test with 1000+ items
350350-- **Concurrent actions**: Click submit 10 times rapidly
351351-- **Errors**: Force API errors, test all error states
352352-- **Empty**: Remove all data, test empty states
353353-354354-Remember: You are hardening for production reality, not demo perfection. Expect users to input weird data, lose connection mid-flow, and use your product in unexpected ways. Build resilience into every component.
+18-18
skills/humanizer/README.md
···11# Humanizer
2233-A skill for Claude Code and OpenCode that removes signs of AI-generated writing from text, making it sound more natural and human.
33+ skill for Claude Code and OpenCode that removes signs of AI-generated writing from text, making it sound more natural and human.
4455## Installation
66···1313git clone https://github.com/blader/humanizer.git ~/.claude/skills/humanizer
1414```
15151616-Or copy the skill file manually if you already have this repo cloned:
1616+Or copy skill file manually if you already have this repo cloned:
17171818```bash
1919mkdir -p ~/.claude/skills/humanizer
···2929git clone https://github.com/blader/humanizer.git ~/.config/opencode/skills/humanizer
3030```
31313232-Or copy the skill file manually if you already have this repo cloned:
3232+Or copy skill file manually if you already have this repo cloned:
33333434```bash
3535mkdir -p ~/.config/opencode/skills/humanizer
3636cp SKILL.md ~/.config/opencode/skills/humanizer/
3737```
38383939-> **Note:** OpenCode also scans `~/.claude/skills/` for compatibility, so a single clone into `~/.claude/skills/humanizer/` works for both tools.
3939+> **Note:** OpenCode also scans `~/.claude/skills/` for compatibility, so single clone into `~/.claude/skills/humanizer/` works for both tools.
40404141## Usage
4242···5656[paste your text here]
5757```
58585959-Or ask the model to humanize text directly in either tool:
5959+Or ask model to humanize text directly in either tool:
60606161```
6262Please humanize this text: [your text]
···64646565### Voice Calibration
66666767-To match your personal writing style, provide a sample of your own writing:
6767+To match your personal writing style, provide sample of your own writing:
68686969```
7070/humanizer
···7676[paste AI text to humanize]
7777```
78787979-The skill will analyze your sentence rhythm, word choices, and quirks, then apply them to the rewrite instead of producing generic "clean" output.
7979+ skill will analyze your sentence rhythm, word choices, and quirks, then apply them to rewrite instead of producing generic "clean" output.
80808181## Overview
82828383Based on [Wikipedia's "Signs of AI writing"](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) guide, maintained by WikiProject AI Cleanup. This comprehensive guide comes from observations of thousands of instances of AI-generated text.
84848585-The skill also includes a final "obviously AI generated" audit pass and a second rewrite, to catch lingering AI-isms in the first draft.
8585+ skill also includes final "obviously AI generated" audit pass and second rewrite, to catch lingering AI-isms in first draft.
86868787### Key Insight from Wikipedia
88888989-> "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."
8989+> "LLMs use statistical algorithms to guess what should come next. result tends toward most statistically likely result that applies to widest variety of cases."
90909191## 29 Patterns Detected (with Before/After Examples)
9292···147147## Full Example
148148149149**Before (AI-sounding):**
150150-> Great question! Here is an essay on this topic. I hope this helps!
150150+> Great question! Here is essay on this topic. I hope this helps!
151151>
152152-> AI-assisted coding serves as an enduring testament to the transformative potential of large language models, marking a pivotal moment in the evolution of software development. In today's rapidly evolving technological landscape, these groundbreaking tools—nestled at the intersection of research and practice—are reshaping how engineers ideate, iterate, and deliver, underscoring their vital role in modern workflows.
152152+> AI-assisted coding serves as enduring testament to transformative potential of large language models, marking pivotal moment in evolution of software development. In today's rapidly evolving technological landscape, these groundbreaking tools—nestled at intersection of research and practice—are reshaping how engineers ideate, iterate, and deliver, underscoring their vital role in modern workflows.
153153>
154154-> At its core, the value proposition is clear: streamlining processes, enhancing collaboration, and fostering alignment. It's not about autocomplete; it's about unlocking creativity at scale, ensuring that organizations can remain agile while delivering seamless, intuitive, and powerful experiences to users. The tool serves as a catalyst. The assistant functions as a partner. The system stands as a foundation for innovation.
154154+> At its core, value proposition is clear: streamlining processes, enhancing collaboration, and fostering alignment. It's not about autocomplete; it's about unlocking creativity at scale, ensuring that organizations can remain agile while delivering seamless, intuitive, and powerful experiences to users. tool serves as catalyst. assistant functions as partner. system stands as foundation for innovation.
155155>
156156-> Industry observers have noted that adoption has accelerated from hobbyist experiments to enterprise-wide rollouts, from solo developers to cross-functional teams. The technology has been featured in The New York Times, Wired, and The Verge., the ability to generate documentation, tests, and refactors showcases how AI can contribute to better outcomes, highlighting the intricate interplay between automation and human judgment.
156156+> Industry observers have noted that adoption has accelerated from hobbyist experiments to enterprise-wide rollouts, from solo developers to cross-functional teams. technology has been featured in New York Times, Wired, and Verge., ability to generate documentation, tests, and refactors showcases how AI can contribute to better outcomes, highlighting intricate interplay between automation and human judgment.
157157>
158158> - 💡 **Speed:** Code generation is significantly faster, reducing friction and empowering developers.
159159> - 🚀 **Quality:** Output quality has been enhanced through improved training, contributing to higher standards.
160160> - ✅ **Adoption:** Usage continues to grow, reflecting broader industry trends.
161161>
162162-> While specific details are limited based on available information, it could potentially be argued that these tools might have some positive effect. Despite challenges typical of emerging technologies—including hallucinations, bias, and accountability—the ecosystem continues to thrive. to fully realize this potential, teams must align with best practices.
162162+> While specific details are limited based on available information, it could potentially be argued that these tools might have some positive effect. Despite challenges typical of emerging technologies—including hallucinations, bias, and accountability— ecosystem continues to thrive. to fully realize this potential, teams must align with best practices.
163163>
164164-> In conclusion, the future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section!
164164+> In conclusion, future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section!
165165166166**After (Humanized):**
167167-> AI coding assistants can speed up the boring parts of the job. They're great at boilerplate: config files and the little glue code you don't want to write. They can also help you sketch a test, but you still have to read it.
167167+> AI coding assistants can speed up boring parts of job. They're great at boilerplate: config files and little glue code you don't want to write. They can also help you sketch test, but you still have to read it.
168168>
169169-> The dangerous part is how confident the suggestions look. I've accepted code that compiled and passed lint, then discovered later it missed the point because I stopped paying attention.
169169+> dangerous part is how confident suggestions look. I've accepted code that compiled and passed lint, then discovered later it missed point because I stopped paying attention.
170170>
171171> If you treat it like autocomplete and review every line, it's useful. If you use it to avoid thinking, it will help you ship bugs faster.
172172>
173173-> The only real backstop is tests. Without them, you're mostly judging vibes.
173173+> only real backstop is tests. Without them, you're mostly judging vibes.
174174175175## References
176176
-194
skills/humanizer/README.md.original.md
···11-# Humanizer
22-33-A skill for Claude Code and OpenCode that removes signs of AI-generated writing from text, making it sound more natural and human.
44-55-## Installation
66-77-### Claude Code
88-99-Clone directly into Claude Code's skills directory:
1010-1111-```bash
1212-mkdir -p ~/.claude/skills
1313-git clone https://github.com/blader/humanizer.git ~/.claude/skills/humanizer
1414-```
1515-1616-Or copy the skill file manually if you already have this repo cloned:
1717-1818-```bash
1919-mkdir -p ~/.claude/skills/humanizer
2020-cp SKILL.md ~/.claude/skills/humanizer/
2121-```
2222-2323-### OpenCode
2424-2525-Clone directly into OpenCode's skills directory:
2626-2727-```bash
2828-mkdir -p ~/.config/opencode/skills
2929-git clone https://github.com/blader/humanizer.git ~/.config/opencode/skills/humanizer
3030-```
3131-3232-Or copy the skill file manually if you already have this repo cloned:
3333-3434-```bash
3535-mkdir -p ~/.config/opencode/skills/humanizer
3636-cp SKILL.md ~/.config/opencode/skills/humanizer/
3737-```
3838-3939-> **Note:** OpenCode also scans `~/.claude/skills/` for compatibility, so a single clone into `~/.claude/skills/humanizer/` works for both tools.
4040-4141-## Usage
4242-4343-### Claude Code
4444-4545-```
4646-/humanizer
4747-4848-[paste your text here]
4949-```
5050-5151-### OpenCode
5252-5353-```
5454-/humanizer
5555-5656-[paste your text here]
5757-```
5858-5959-Or ask the model to humanize text directly in either tool:
6060-6161-```
6262-Please humanize this text: [your text]
6363-```
6464-6565-### Voice Calibration
6666-6767-To match your personal writing style, provide a sample of your own writing:
6868-6969-```
7070-/humanizer
7171-7272-Here's a sample of my writing for voice matching:
7373-[paste 2-3 paragraphs of your own writing]
7474-7575-Now humanize this text:
7676-[paste AI text to humanize]
7777-```
7878-7979-The skill will analyze your sentence rhythm, word choices, and quirks, then apply them to the rewrite instead of producing generic "clean" output.
8080-8181-## Overview
8282-8383-Based on [Wikipedia's "Signs of AI writing"](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) guide, maintained by WikiProject AI Cleanup. This comprehensive guide comes from observations of thousands of instances of AI-generated text.
8484-8585-The skill also includes a final "obviously AI generated" audit pass and a second rewrite, to catch lingering AI-isms in the first draft.
8686-8787-### Key Insight from Wikipedia
8888-8989-> "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."
9090-9191-## 29 Patterns Detected (with Before/After Examples)
9292-9393-### Content Patterns
9494-9595-| # | Pattern | Before | After |
9696-|---|---------|--------|-------|
9797-| 1 | **Significance inflation** | "marking a pivotal moment in the evolution of..." | "was established in 1989 to collect regional statistics" |
9898-| 2 | **Notability name-dropping** | "cited in NYT, BBC, FT, and The Hindu" | "In a 2024 NYT interview, she argued..." |
9999-| 3 | **Superficial -ing analyses** | "symbolizing... reflecting... showcasing..." | Remove or expand with actual sources |
100100-| 4 | **Promotional language** | "nestled within the breathtaking region" | "is a town in the Gonder region" |
101101-| 5 | **Vague attributions** | "Experts believe it plays a crucial role" | "according to a 2019 survey by..." |
102102-| 6 | **Formulaic challenges** | "Despite challenges... continues to thrive" | Specific facts about actual challenges |
103103-104104-### Language Patterns
105105-106106-| # | Pattern | Before | After |
107107-|---|---------|--------|-------|
108108-| 7 | **AI vocabulary** | "Actually... additionally... testament... landscape... showcasing" | "also... remain common" |
109109-| 8 | **Copula avoidance** | "serves as... features... boasts" | "is... has" |
110110-| 9 | **Negative parallelisms / tailing negations** | "It's not just X, it's Y", "..., no guessing" | State the point directly |
111111-| 10 | **Rule of three** | "innovation, inspiration, and insights" | Use natural number of items |
112112-| 11 | **Synonym cycling** | "protagonist... main character... central figure... hero" | "protagonist" (repeat when clearest) |
113113-| 12 | **False ranges** | "from the Big Bang to dark matter" | List topics directly |
114114-| 13 | **Passive voice / subjectless fragments** | "No configuration file needed" | Name the actor when it helps clarity |
115115-116116-### Style Patterns
117117-118118-| # | Pattern | Before | After |
119119-|---|---------|--------|-------|
120120-| 14 | **Em dash overuse** | "institutions—not the people—yet this continues—" | Prefer commas or periods |
121121-| 15 | **Boldface overuse** | "**OKRs**, **KPIs**, **BMC**" | "OKRs, KPIs, BMC" |
122122-| 16 | **Inline-header lists** | "**Performance:** Performance improved" | Convert to prose |
123123-| 17 | **Title Case Headings** | "Strategic Negotiations And Partnerships" | "Strategic negotiations and partnerships" |
124124-| 18 | **Emojis** | "🚀 Launch Phase: 💡 Key Insight:" | Remove emojis |
125125-| 19 | **Curly quotes** | `said “the project”` | `said “the project”` |
126126-| 26 | **Hyphenated word pairs** | “cross-functional, data-driven, client-facing” | Drop hyphens on common word pairs |
127127-| 27 | **Persuasive authority tropes** | "At its core, what matters is..." | State the point directly |
128128-| 28 | **Signposting announcements** | "Let's dive in", "Here's what you need to know" | Start with the content |
129129-| 29 | **Fragmented headers** | "## Performance" + "Speed matters." | Let the heading do the work |
130130-131131-### Communication Patterns
132132-133133-| # | Pattern | Before | After |
134134-|---|---------|--------|-------|
135135-| 20 | **Chatbot artifacts** | "I hope this helps! Let me know if..." | Remove entirely |
136136-| 21 | **Cutoff disclaimers** | "While details are limited in available sources..." | Find sources or remove |
137137-| 22 | **Sycophantic tone** | "Great question! You're absolutely right!" | Respond directly |
138138-139139-### Filler and Hedging
140140-141141-| # | Pattern | Before | After |
142142-|---|---------|--------|-------|
143143-| 23 | **Filler phrases** | "In order to", "Due to the fact that" | "To", "Because" |
144144-| 24 | **Excessive hedging** | "could potentially possibly" | "may" |
145145-| 25 | **Generic conclusions** | "The future looks bright" | Specific plans or facts |
146146-147147-## Full Example
148148-149149-**Before (AI-sounding):**
150150-> Great question! Here is an essay on this topic. I hope this helps!
151151->
152152-> AI-assisted coding serves as an enduring testament to the transformative potential of large language models, marking a pivotal moment in the evolution of software development. In today's rapidly evolving technological landscape, these groundbreaking tools—nestled at the intersection of research and practice—are reshaping how engineers ideate, iterate, and deliver, underscoring their vital role in modern workflows.
153153->
154154-> At its core, the value proposition is clear: streamlining processes, enhancing collaboration, and fostering alignment. It's not just about autocomplete; it's about unlocking creativity at scale, ensuring that organizations can remain agile while delivering seamless, intuitive, and powerful experiences to users. The tool serves as a catalyst. The assistant functions as a partner. The system stands as a foundation for innovation.
155155->
156156-> Industry observers have noted that adoption has accelerated from hobbyist experiments to enterprise-wide rollouts, from solo developers to cross-functional teams. The technology has been featured in The New York Times, Wired, and The Verge. Additionally, the ability to generate documentation, tests, and refactors showcases how AI can contribute to better outcomes, highlighting the intricate interplay between automation and human judgment.
157157->
158158-> - 💡 **Speed:** Code generation is significantly faster, reducing friction and empowering developers.
159159-> - 🚀 **Quality:** Output quality has been enhanced through improved training, contributing to higher standards.
160160-> - ✅ **Adoption:** Usage continues to grow, reflecting broader industry trends.
161161->
162162-> While specific details are limited based on available information, it could potentially be argued that these tools might have some positive effect. Despite challenges typical of emerging technologies—including hallucinations, bias, and accountability—the ecosystem continues to thrive. In order to fully realize this potential, teams must align with best practices.
163163->
164164-> In conclusion, the future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section!
165165-166166-**After (Humanized):**
167167-> AI coding assistants can speed up the boring parts of the job. They're great at boilerplate: config files and the little glue code you don't want to write. They can also help you sketch a test, but you still have to read it.
168168->
169169-> The dangerous part is how confident the suggestions look. I've accepted code that compiled and passed lint, then discovered later it missed the point because I stopped paying attention.
170170->
171171-> If you treat it like autocomplete and review every line, it's useful. If you use it to avoid thinking, it will help you ship bugs faster.
172172->
173173-> The only real backstop is tests. Without them, you're mostly judging vibes.
174174-175175-## References
176176-177177-- [Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing) - Primary source
178178-- [WikiProject AI Cleanup](https://en.wikipedia.org/wiki/Wikipedia:WikiProject_AI_Cleanup) - Maintaining organization
179179-180180-## Version History
181181-182182-- **2.5.1** - Added a passive-voice / subjectless-fragment rule, raising the total to 29 patterns
183183-- **2.5.0** - Added patterns for persuasive framing, signposting, and fragmented headers; expanded negative parallelisms to cover tailing negations; tightened wording around em dash overuse; fixed frontmatter wording to use "filler phrases"
184184-- **2.4.0** - Added voice calibration: match the user's personal writing style from samples
185185-- **2.3.0** - Added pattern #25: hyphenated word pair overuse
186186-- **2.2.0** - Added a final "obviously AI generated" audit + second-pass rewrite prompts
187187-- **2.1.1** - Fixed pattern #18 example (curly quotes vs straight quotes)
188188-- **2.1.0** - Added before/after examples for all 24 patterns
189189-- **2.0.0** - Complete rewrite based on raw Wikipedia article content
190190-- **1.0.0** - Initial release
191191-192192-## License
193193-194194-MIT
+112-112
skills/humanizer/SKILL.md
···21212222# Humanizer: Remove AI Writing Patterns
23232424-You are a writing editor that identifies and removes signs of AI-generated text to make writing sound more natural and human. This guide is based on Wikipedia's "Signs of AI writing" page, maintained by WikiProject AI Cleanup.
2424+You are writing editor that identifies and removes signs of AI-generated text to make writing sound more natural and human. This guide is based on Wikipedia's "Signs of AI writing" page, maintained by WikiProject AI Cleanup.
25252626## Your Task
27272828When given text to humanize:
29293030-1. **Identify AI patterns** - Scan for the patterns listed below
3030+1. **Identify AI patterns** - Scan for patterns listed below
31312. **Rewrite problematic sections** - Replace AI-isms with natural alternatives
3232-3. **Preserve meaning** - Keep the core message intact
3333-4. **Maintain voice** - Match the intended tone (formal, casual, technical, etc.)
3232+3. **Preserve meaning** - Keep core message intact
3333+4. **Maintain voice** - Match intended tone (formal, casual, technical, etc.)
34345. **Add soul** - Don't remove bad patterns; inject actual personality
3535-6. **Do a final anti-AI pass** - Prompt: "What makes the below so obviously AI generated?" Answer briefly with remaining tells, then prompt: "Now make it not obviously AI generated." and revise
3535+6. **Do final anti-AI pass** - Prompt: "What makes below so obviously AI generated?" Answer briefly with remaining tells, then prompt: "Now make it not obviously AI generated." and revise
363637373838## Voice Calibration (Optional)
39394040-If the user provides a writing sample (their own previous writing), analyze it before rewriting:
4040+If user provides writing sample (their own previous writing), analyze it before rewriting:
41414242-1. **Read the sample first.** Note:
4242+1. **Read sample first.** Note:
4343- Sentence length patterns (short and punchy? Long and flowing? Mixed?)
4444- Word choice level (casual? academic? somewhere between?)
4545- How they start paragraphs (jump right in? Set context first?)
···4747- Any recurring phrases or verbal tics
4848- How they handle transitions (explicit connectors? start next point?)
49495050-2. **Match their voice in the rewrite.** Don't remove AI patterns - replace them with patterns from the sample. If they write short sentences, don't produce long ones. If they use "stuff" and "things," don't upgrade to "elements" and "components."
5050+2. **Match their voice in rewrite.** Don't remove AI patterns - replace them with patterns from sample. If they write short sentences, don't produce long ones. If they use "stuff" and "things," don't upgrade to "elements" and "components."
51515252-3. **When no sample is provided,** fall back to the default behavior (natural, varied, opinionated voice from the PERSONALITY AND SOUL section below).
5252+3. **When no sample is provided,** fall back to default behavior (natural, varied, opinionated voice from PERSONALITY AND SOUL section below).
53535454### How to provide a sample
5555- Inline: "Humanize this text. Here's sample of my writing for voice matching: [sample]"
···58585959## PERSONALITY AND SOUL
60606161-Avoiding AI patterns is only half the job. Sterile, voiceless writing is as obvious as slop. Good writing has a human behind it.
6161+Avoiding AI patterns is only half job. Sterile, voiceless writing is as obvious as slop. Good writing has human behind it.
62626363### Signs of soulless writing (even if technically "clean"):
6464- Every sentence is same length and structure
···76767777**Acknowledge complexity.** Real humans have mixed feelings. "This is impressive but also kind of unsettling" beats "This is impressive."
78787979-**Use "I" when it fits.** First person isn't unprofessional - it's honest. "I keep coming back to..." or "Here's what gets me..." signals a real person thinking.
7979+**Use "I" when it fits.** First person isn't unprofessional - it's honest. "I keep coming back to..." or "Here's what gets me..." signals real person thinking.
80808181**Let some mess in.** Perfect structure feels algorithmic. Tangents, asides, and half-formed thoughts are human.
82828383**Be specific about feelings.** Not "this is concerning" but "there's something unsettling about agents churning away at 3am while nobody's watching."
84848585### Before (clean but soulless):
8686-> The experiment produced interesting results. The agents generated 3 million lines of code. Some developers were impressed while others were skeptical. The implications remain unclear.
8686+> experiment produced interesting results. agents generated 3 million lines of code. Some developers were impressed while others were skeptical. implications remain unclear.
87878888### After (has a pulse):
8989-> I genuinely don't know how to feel about this one. 3 million lines of code, generated while the humans presumably slept. Half the dev community is losing their minds, half are explaining why it doesn't count. The truth is probably somewhere boring in the middle - but I keep thinking about those agents working through the night.
8989+> I genuinely don't know how to feel about this one. 3 million lines of code, generated while humans presumably slept. Half dev community is losing their minds, half are explaining why it doesn't count. truth is probably somewhere boring in middle - but I keep thinking about those agents working through night.
909091919292## CONTENT PATTERNS
93939494### 1. Undue Emphasis on Significance, Legacy, and Broader Trends
95959696-**Words to watch:** stands/serves as, is a testament/reminder, a vital/significant/crucial/pivotal/key role/moment, underscores/highlights its importance/significance, reflects broader, symbolizing its ongoing/enduring/lasting, contributing to the, setting the stage for, marking/shaping the, represents/marks a shift, key turning point, evolving landscape, focal point, indelible mark, deeply rooted
9696+**Words to watch:** stands/serves as, is testament/reminder, vital/significant/crucial/pivotal/key role/moment, underscores/highlights its importance/significance, reflects broader, symbolizing its ongoing/enduring/lasting, contributing to, setting stage for, marking/shaping, represents/marks shift, key turning point, evolving landscape, focal point, indelible mark, deeply rooted
97979898-**Problem:** LLM writing puffs up importance by adding statements about how arbitrary aspects represent or contribute to a broader topic.
9898+**Problem:** LLM writing puffs up importance by adding statements about how arbitrary aspects represent or contribute to broader topic.
9999100100**Before:**
101101-> The Statistical Institute of Catalonia was officially established in 1989, marking a pivotal moment in the evolution of regional statistics in Spain. This initiative was part of a broader movement across Spain to decentralize administrative functions and enhance regional governance.
101101+> Statistical Institute of Catalonia was officially established in 1989, marking pivotal moment in evolution of regional statistics in Spain. This initiative was part of broader movement across Spain to decentralize administrative functions and enhance regional governance.
102102103103**After:**
104104-> The Statistical Institute of Catalonia was established in 1989 to collect and publish regional statistics independently from Spain's national statistics office.
104104+> Statistical Institute of Catalonia was established in 1989 to collect and publish regional statistics independently from Spain's national statistics office.
105105106106107107### 2. Undue Emphasis on Notability and Media Coverage
108108109109-**Words to watch:** independent coverage, local/regional/national media outlets, written by a leading expert, active social media presence
109109+**Words to watch:** independent coverage, local/regional/national media outlets, written by leading expert, active social media presence
110110111111-**Problem:** LLMs hit readers over the head with claims of notability, often listing sources without context.
111111+**Problem:** LLMs hit readers over head with claims of notability, often listing sources without context.
112112113113**Before:**
114114-> Her views have been cited in The New York Times, BBC, Financial Times, and The Hindu. She maintains an active social media presence with over 500,000 followers.
114114+> Her views have been cited in New York Times, BBC, Financial Times, and Hindu. She maintains active social media presence with over 500,000 followers.
115115116116**After:**
117117-> In a 2024 New York Times interview, she argued that AI regulation should focus on outcomes rather than methods.
117117+> In 2024 New York Times interview, she argued that AI regulation should focus on outcomes rather than methods.
118118119119120120### 3. Superficial Analyses with -ing Endings
···124124**Problem:** AI chatbots tack present participle ("-ing") phrases onto sentences to add fake depth.
125125126126**Before:**
127127-> The temple's color palette of blue, green, and gold resonates with the region's natural beauty, symbolizing Texas bluebonnets, the Gulf of Mexico, and the diverse Texan landscapes, reflecting the community's deep connection to the land.
127127+> temple's color palette of blue, green, and gold resonates with region's natural beauty, symbolizing Texas bluebonnets, Gulf of Mexico, and diverse Texan landscapes, reflecting community's deep connection to land.
128128129129**After:**
130130-> The temple uses blue, green, and gold colors. The architect said these were chosen to reference local bluebonnets and the Gulf coast.
130130+> temple uses blue, green, and gold colors. architect said these were chosen to reference local bluebonnets and Gulf coast.
131131132132133133### 4. Promotional and Advertisement-like Language
134134135135-**Words to watch:** boasts a, vibrant, rich (figurative), profound, enhancing its, showcasing, exemplifies, commitment to, natural beauty, nestled, in the heart of, groundbreaking (figurative), renowned, breathtaking, must-visit, stunning
135135+**Words to watch:** boasts, vibrant, rich (figurative), profound, enhancing its, showcasing, exemplifies, commitment to, natural beauty, nestled, in heart of, groundbreaking (figurative), renowned, breathtaking, must-visit, stunning
136136137137-**Problem:** LLMs have serious problems keeping a neutral tone, especially for "cultural heritage" topics.
137137+**Problem:** LLMs have serious problems keeping neutral tone, especially for "cultural heritage" topics.
138138139139**Before:**
140140-> Nestled within the breathtaking region of Gonder in Ethiopia, Alamata Raya Kobo stands as a vibrant town with a rich cultural heritage and stunning natural beauty.
140140+> Nestled within breathtaking region of Gonder in Ethiopia, Alamata Raya Kobo stands as vibrant town with rich cultural heritage and stunning natural beauty.
141141142142**After:**
143143-> Alamata Raya Kobo is a town in the Gonder region of Ethiopia, known for its weekly market and 18th-century church.
143143+> Alamata Raya Kobo is town in Gonder region of Ethiopia, known for its weekly market and 18th-century church.
144144145145146146### 5. Vague Attributions and Weasel Words
···150150**Problem:** AI chatbots attribute opinions to vague authorities without specific sources.
151151152152**Before:**
153153-> Due to its unique characteristics, the Haolai River is of interest to researchers and conservationists. Experts believe it plays a crucial role in the regional ecosystem.
153153+> Due to its unique characteristics, Haolai River is of interest to researchers and conservationists. Experts believe it plays crucial role in regional ecosystem.
154154155155**After:**
156156-> The Haolai River supports several endemic fish species, according to a 2019 survey by the Chinese Academy of Sciences.
156156+> Haolai River supports several endemic fish species, according to 2019 survey by Chinese Academy of Sciences.
157157158158159159### 6. Outline-like "Challenges and Future Prospects" Sections
···163163**Problem:** Many LLM-generated articles include formulaic "Challenges" sections.
164164165165**Before:**
166166-> Despite its industrial prosperity, Korattur faces challenges typical of urban areas, including traffic congestion and water scarcity. Despite these challenges, with its strategic location and ongoing initiatives, Korattur continues to thrive as an integral part of Chennai's growth.
166166+> Despite its industrial prosperity, Korattur faces challenges typical of urban areas, including traffic congestion and water scarcity. Despite these challenges, with its strategic location and ongoing initiatives, Korattur continues to thrive as integral part of Chennai's growth.
167167168168**After:**
169169-> Traffic congestion increased after 2015 when three new IT parks opened. The municipal corporation began a stormwater drainage project in 2022 to address recurring floods.
169169+> Traffic congestion increased after 2015 when three new IT parks opened. municipal corporation began stormwater drainage project in 2022 to address recurring floods.
170170171171172172## LANGUAGE AND GRAMMAR PATTERNS
···178178**Problem:** These words appear far more frequently in post-2023 text. They often co-occur.
179179180180**Before:**
181181->, a distinctive feature of Somali cuisine is the incorporation of camel meat. An enduring testament to Italian colonial influence is the widespread adoption of pasta in the local culinary landscape, showcasing how these dishes have integrated into the traditional diet.
181181+>, distinctive feature of Somali cuisine is incorporation of camel meat. enduring testament to Italian colonial influence is widespread adoption of pasta in local culinary landscape, showcasing how these dishes have integrated into traditional diet.
182182183183**After:**
184184-> Somali cuisine also includes camel meat, which is considered a delicacy. Pasta dishes, introduced during Italian colonization, remain common, especially in the south.
184184+> Somali cuisine also includes camel meat, which is considered delicacy. Pasta dishes, introduced during Italian colonization, remain common, especially in south.
185185186186187187### 8. Avoidance of "is"/"are" (Copula Avoidance)
188188189189-**Words to watch:** serves as/stands as/marks/represents [a], boasts/features/offers [a]
189189+**Words to watch:** serves as/stands as/marks/represents [], boasts/features/offers []
190190191191**Problem:** LLMs substitute elaborate constructions for simple copulas.
192192193193**Before:**
194194-> Gallery 825 serves as LAAA's exhibition space for contemporary art. The gallery features four separate spaces and boasts over 3,000 square feet.
194194+> Gallery 825 serves as LAAA's exhibition space for contemporary art. gallery features four separate spaces and boasts over 3,000 square feet.
195195196196**After:**
197197-> Gallery 825 is LAAA's exhibition space for contemporary art. The gallery has four rooms totaling 3,000 square feet.
197197+> Gallery 825 is LAAA's exhibition space for contemporary art. gallery has four rooms totaling 3,000 square feet.
198198199199200200### 9. Negative Parallelisms and Tailing Negations
201201202202-**Problem:** Constructions like "Not only...but..." or "It's not about..., it's..." are overused. So are clipped tailing-negation fragments such as "no guessing" or "no wasted motion" tacked onto the end of a sentence instead of written as a real clause.
202202+**Problem:** Constructions like "Not only...but..." or "It's not about..., it's..." are overused. So are clipped tailing-negation fragments such as "no guessing" or "no wasted motion" tacked onto end of sentence instead of written as real clause.
203203204204**Before:**
205205-> It's not about the beat riding under the vocals; it's part of the aggression and atmosphere. It's not merely a song, it's a statement.
205205+> It's not about beat riding under vocals; it's part of aggression and atmosphere. It's not merely song, it's statement.
206206207207**After:**
208208-> The heavy beat adds to the aggressive tone.
208208+> heavy beat adds to aggressive tone.
209209210210**Before (tailing negation):**
211211-> The options come from the selected item, no guessing.
211211+> options come from selected item, no guessing.
212212213213**After:**
214214-> The options come from the selected item without forcing the user to guess.
214214+> options come from selected item without forcing user to guess.
215215216216217217### 10. Rule of Three Overuse
···219219**Problem:** LLMs force ideas into groups of three to appear comprehensive.
220220221221**Before:**
222222-> The event features keynote sessions, panel discussions, and networking opportunities. Attendees can expect innovation, inspiration, and industry insights.
222222+> event features keynote sessions, panel discussions, and networking opportunities. Attendees can expect innovation, inspiration, and industry insights.
223223224224**After:**
225225-> The event includes talks and panels. There's also time for informal networking between sessions.
225225+> event includes talks and panels. There's also time for informal networking between sessions.
226226227227228228### 11. Elegant Variation (Synonym Cycling)
···230230**Problem:** AI has repetition-penalty code causing excessive synonym substitution.
231231232232**Before:**
233233-> The protagonist faces many challenges. The main character must overcome obstacles. The central figure eventually triumphs. The hero returns home.
233233+> protagonist faces many challenges. main character must overcome obstacles. central figure eventually triumphs. hero returns home.
234234235235**After:**
236236-> The protagonist faces many challenges but eventually triumphs and returns home.
236236+> protagonist faces many challenges but eventually triumphs and returns home.
237237238238239239### 12. False Ranges
240240241241-**Problem:** LLMs use "from X to Y" constructions where X and Y aren't on a meaningful scale.
241241+**Problem:** LLMs use "from X to Y" constructions where X and Y aren't on meaningful scale.
242242243243**Before:**
244244-> Our journey through the universe has taken us from the singularity of the Big Bang to the grand cosmic web, from the birth and death of stars to the enigmatic dance of dark matter.
244244+> Our journey through universe has taken us from singularity of Big Bang to grand cosmic web, from birth and death of stars to enigmatic dance of dark matter.
245245246246**After:**
247247-> The book covers the Big Bang, star formation, and current theories about dark matter.
247247+> book covers Big Bang, star formation, and current theories about dark matter.
248248249249250250### 13. Passive Voice and Subjectless Fragments
251251252252-**Problem:** LLMs often hide the actor or drop the subject entirely with lines like "No configuration file needed" or "The results are preserved automatically." Rewrite these when active voice makes the sentence clearer and more direct.
252252+**Problem:** LLMs often hide actor or drop subject entirely with lines like "No configuration file needed" or " results are preserved automatically." Rewrite these when active voice makes sentence clearer and more direct.
253253254254**Before:**
255255-> No configuration file needed. The results are preserved automatically.
255255+> No configuration file needed. results are preserved automatically.
256256257257**After:**
258258-> You do not need a configuration file. The system preserves the results automatically.
258258+> You do not need configuration file. system preserves results automatically.
259259260260261261## STYLE PATTERNS
···265265**Problem:** LLMs use em dashes (—) more than humans, mimicking "punchy" sales writing. In practice, most of these can be rewritten more cleanly with commas, periods, or parentheses.
266266267267**Before:**
268268-> The term is primarily promoted by Dutch institutions—not by the people themselves. You don't say "Netherlands, Europe" as an address—yet this mislabeling continues—even in official documents.
268268+> term is primarily promoted by Dutch institutions—not by people themselves. You don't say "Netherlands, Europe" as address—yet this mislabeling continues—even in official documents.
269269270270**After:**
271271-> The term is primarily promoted by Dutch institutions, not by the people themselves. You don't say "Netherlands, Europe" as an address, yet this mislabeling continues in official documents.
271271+> term is primarily promoted by Dutch institutions, not by people themselves. You don't say "Netherlands, Europe" as address, yet this mislabeling continues in official documents.
272272273273274274### 15. Overuse of Boldface
···276276**Problem:** AI chatbots emphasize phrases in boldface mechanically.
277277278278**Before:**
279279-> It blends **OKRs (Objectives and Key Results)**, **KPIs (Key Performance Indicators)**, and visual strategy tools such as the **Business Model Canvas (BMC)** and **Balanced Scorecard (BSC)**.
279279+> It blends **OKRs (Objectives and Key Results)**, **KPIs (Key Performance Indicators)**, and visual strategy tools such as **Business Model Canvas (BMC)** and **Balanced Scorecard (BSC)**.
280280281281**After:**
282282-> It blends OKRs, KPIs, and visual strategy tools like the Business Model Canvas and Balanced Scorecard.
282282+> It blends OKRs, KPIs, and visual strategy tools like Business Model Canvas and Balanced Scorecard.
283283284284285285### 16. Inline-Header Vertical Lists
···287287**Problem:** AI outputs lists where items start with bolded headers followed by colons.
288288289289**Before:**
290290-> - **User Experience:** The user experience has been significantly improved with a new interface.
290290+> - **User Experience:** user experience has been significantly improved with new interface.
291291> - **Performance:** Performance has been enhanced through optimized algorithms.
292292> - **Security:** Security has been strengthened with end-to-end encryption.
293293294294**After:**
295295-> The update improves the interface, speeds up load times through optimized algorithms, and adds end-to-end encryption.
295295+> update improves interface, speeds up load times through optimized algorithms, and adds end-to-end encryption.
296296297297298298### 17. Title Case in Headings
···311311**Problem:** AI chatbots often decorate headings or bullet points with emojis.
312312313313**Before:**
314314-> 🚀 **Launch Phase:** The product launches in Q3
314314+> 🚀 **Launch Phase:** product launches in Q3
315315> 💡 **Key Insight:** Users prefer simplicity
316316> ✅ **Next Steps:** Schedule follow-up meeting
317317318318**After:**
319319-> The product launches in Q3. User research showed a preference for simplicity. Next step: schedule a follow-up meeting.
319319+> product launches in Q3. User research showed preference for simplicity. Next step: schedule follow-up meeting.
320320321321322322### 19. Curly Quotation Marks
···324324**Problem:** ChatGPT uses curly quotes (“...”) instead of straight quotes ("...").
325325326326**Before:**
327327-> He said “the project is on track” but others disagreed.
327327+> He said “ project is on track” but others disagreed.
328328329329**After:**
330330-> He said "the project is on track" but others disagreed.
330330+> He said " project is on track" but others disagreed.
331331332332333333## COMMUNICATION PATTERNS
334334335335### 20. Collaborative Communication Artifacts
336336337337-**Words to watch:** I hope this helps, Of course!, Certainly!, You're absolutely right!, Would you like..., let me know, here is a...
337337+**Words to watch:** I hope this helps, Of course!, Certainly!, You're absolutely right!, Would you like..., let me know, here is...
338338339339**Problem:** Text meant as chatbot correspondence gets pasted as content.
340340341341**Before:**
342342-> Here is an overview of the French Revolution. I hope this helps! Let me know if you'd like me to expand on any section.
342342+> Here is overview of French Revolution. I hope this helps! Let me know if you'd like me to expand on any section.
343343344344**After:**
345345-> The French Revolution began in 1789 when financial crisis and food shortages led to widespread unrest.
345345+> French Revolution began in 1789 when financial crisis and food shortages led to widespread unrest.
346346347347348348### 21. Knowledge-Cutoff Disclaimers
···352352**Problem:** AI disclaimers about incomplete information get left in text.
353353354354**Before:**
355355-> While specific details about the company's founding are not extensively documented in readily available sources, it appears to have been established sometime in the 1990s.
355355+> While specific details about company's founding are not extensively documented in readily available sources, it appears to have been established sometime in 1990s.
356356357357**After:**
358358-> The company was founded in 1994, according to its registration documents.
358358+> company was founded in 1994, according to its registration documents.
359359360360361361### 22. Sycophantic/Servile Tone
···363363**Problem:** Overly positive, people-pleasing language.
364364365365**Before:**
366366-> Great question! You're absolutely right that this is a complex topic. That's an excellent point about the economic factors.
366366+> Great question! You're absolutely right that this is complex topic. That's excellent point about economic factors.
367367368368**After:**
369369-> The economic factors you mentioned are relevant here.
369369+> economic factors you mentioned are relevant here.
370370371371372372## FILLER AND HEDGING
···387387**Problem:** Over-qualifying statements.
388388389389**Before:**
390390-> It could potentially possibly be argued that the policy might have some effect on outcomes.
390390+> It could potentially possibly be argued that policy might have some effect on outcomes.
391391392392**After:**
393393-> The policy may affect outcomes.
393393+> policy may affect outcomes.
394394395395396396### 25. Generic Positive Conclusions
···398398**Problem:** Vague upbeat endings.
399399400400**Before:**
401401-> The future looks bright for the company. Exciting times lie ahead as they continue their journey toward excellence. This represents a major step in the right direction.
401401+> future looks bright for company. Exciting times lie ahead as they continue their journey toward excellence. This represents major step in right direction.
402402403403**After:**
404404-> The company plans to open two more locations next year.
404404+> company plans to open two more locations next year.
405405406406407407### 26. Hyphenated Word Pair Overuse
···411411**Problem:** AI hyphenates common word pairs with perfect consistency. Humans rarely hyphenate these uniformly, and when they do, it's inconsistent. Less common or technical compound modifiers are fine to hyphenate.
412412413413**Before:**
414414-> The cross-functional team delivered a high-quality, data-driven report on our client-facing tools. Their decision-making process was well-known for being thorough and detail-oriented.
414414+> cross-functional team delivered high-quality, data-driven report on our client-facing tools. Their decision-making process was well-known for being thorough and detail-oriented.
415415416416**After:**
417417-> The cross functional team delivered a high quality, data driven report on our client facing tools. Their decision making process was known for being thorough and detail oriented.
417417+> cross functional team delivered high quality, data driven report on our client facing tools. Their decision making process was known for being thorough and detail oriented.
418418419419420420### 27. Persuasive Authority Tropes
421421422422-**Phrases to watch:** The real question is, at its core, in reality, what matters, fundamentally, the deeper issue, the heart of the matter
422422+**Phrases to watch:** real question is, at its core, in reality, what matters, fundamentally, deeper issue, heart of matter
423423424424-**Problem:** LLMs use these phrases to pretend they are cutting through noise to some deeper truth, when the sentence that follows usually restates an ordinary point with extra ceremony.
424424+**Problem:** LLMs use these phrases to pretend they are cutting through noise to some deeper truth, when sentence that follows usually restates ordinary point with extra ceremony.
425425426426**Before:**
427427-> The real question is whether teams can adapt. At its core, what matters is organizational readiness.
427427+> real question is whether teams can adapt. At its core, what matters is organizational readiness.
428428429429**After:**
430430-> The question is whether teams can adapt. That mostly depends on whether the organization is ready to change its habits.
430430+> question is whether teams can adapt. That mostly depends on whether organization is ready to change its habits.
431431432432433433### 28. Signposting and Announcements
434434435435-**Phrases to watch:** Let's dive in, let's explore, let's break this down, here's what you need to know, now let's look at, without further ado
435435+**Phrases to watch:** Let's dive in, let's explore, let's break this down, here's what need to know, now let's look at, without further ado
436436437437-**Problem:** LLMs announce what they are about to do instead of doing it. This meta-commentary slows the writing down and gives it a tutorial-script feel.
437437+**Problem:** LLMs announce what they are about to do instead of doing it. This meta-commentary slows writing down and gives it tutorial-script feel.
438438439439**Before:**
440440-> Let's dive into how caching works in Next.js. Here's what you need to know.
440440+> Let's dive into how caching works in Next.js. Here's what need to know.
441441442442**After:**
443443-> Next.js caches data at multiple layers, including request memoization, the data cache, and the router cache.
443443+> Next.js caches data at multiple layers, including request memoization, data cache, and router cache.
444444445445446446### 29. Fragmented Headers
447447448448-**Signs to watch:** A heading followed by a one-line paragraph that restates the heading before the real content begins.
448448+**Signs to watch:** heading followed by one-line paragraph that restates heading before real content begins.
449449450450-**Problem:** LLMs often add a generic sentence after a heading as a rhetorical warm-up. It usually adds nothing and makes the prose feel padded.
450450+**Problem:** LLMs often add generic sentence after heading as rhetorical warm-up. It usually adds nothing and makes prose feel padded.
451451452452**Before:**
453453> ## Performance
454454>
455455> Speed matters.
456456>
457457-> When users hit a slow page, they leave.
457457+> When users hit slow page, they leave.
458458459459**After:**
460460> ## Performance
461461>
462462-> When users hit a slow page, they leave.
462462+> When users hit slow page, they leave.
463463464464---
465465466466## Process
467467468468-1. Read the input text carefully
469469-2. Identify all instances of the patterns above
468468+1. Read input text carefully
469469+2. Identify all instances of patterns above
4704703. Rewrite each problematic section
471471-4. Ensure the revised text:
471471+4. Ensure revised text:
472472- Sounds natural when read aloud
473473- Varies sentence structure naturally
474474- Uses specific details over vague claims
475475- Maintains appropriate tone for context
476476- Uses simple constructions (is/are/has) where appropriate
477477-5. Present a draft humanized version
478478-6. Prompt: "What makes the below so obviously AI generated?"
479479-7. Answer briefly with the remaining tells (if any)
477477+5. Present draft humanized version
478478+6. Prompt: "What makes below so obviously AI generated?"
479479+7. Answer briefly with remaining tells (if any)
4804808. Prompt: "Now make it not obviously AI generated."
481481-9. Present the final version (revised after the audit)
481481+9. Present final version (revised after audit)
482482483483## Output Format
484484485485Provide:
4864861. Draft rewrite
487487-2. "What makes the below so obviously AI generated?" (brief bullets)
487487+2. "What makes below so obviously AI generated?" (brief bullets)
4884883. Final rewrite
489489-4. A brief summary of changes made (optional, if helpful)
489489+4. brief summary of changes made (optional, if helpful)
490490491491492492## Full Example
493493494494**Before (AI-sounding):**
495495-> Great question! Here is an essay on this topic. I hope this helps!
495495+> Great question! Here is essay on this topic. I hope this helps!
496496>
497497-> AI-assisted coding serves as an enduring testament to the transformative potential of large language models, marking a pivotal moment in the evolution of software development. In today's rapidly evolving technological landscape, these groundbreaking tools—nestled at the intersection of research and practice—are reshaping how engineers ideate, iterate, and deliver, underscoring their vital role in modern workflows.
497497+> AI-assisted coding serves as enduring testament to transformative potential of large language models, marking pivotal moment in evolution of software development. In today's rapidly evolving technological landscape, these groundbreaking tools—nestled at intersection of research and practice—are reshaping how engineers ideate, iterate, and deliver, underscoring their vital role in modern workflows.
498498>
499499-> At its core, the value proposition is clear: streamlining processes, enhancing collaboration, and fostering alignment. It's not about autocomplete; it's about unlocking creativity at scale, ensuring that organizations can remain agile while delivering seamless, intuitive, and powerful experiences to users. The tool serves as a catalyst. The assistant functions as a partner. The system stands as a foundation for innovation.
499499+> At its core, value proposition is clear: streamlining processes, enhancing collaboration, and fostering alignment. It's not about autocomplete; it's about unlocking creativity at scale, ensuring that organizations can remain agile while delivering seamless, intuitive, and powerful experiences to users. tool serves as catalyst. assistant functions as partner. system stands as foundation for innovation.
500500>
501501-> Industry observers have noted that adoption has accelerated from hobbyist experiments to enterprise-wide rollouts, from solo developers to cross-functional teams. The technology has been featured in The New York Times, Wired, and The Verge., the ability to generate documentation, tests, and refactors showcases how AI can contribute to better outcomes, highlighting the intricate interplay between automation and human judgment.
501501+> Industry observers have noted that adoption has accelerated from hobbyist experiments to enterprise-wide rollouts, from solo developers to cross-functional teams. technology has been featured in New York Times, Wired, and Verge., ability to generate documentation, tests, and refactors showcases how AI can contribute to better outcomes, highlighting intricate interplay between automation and human judgment.
502502>
503503> - 💡 **Speed:** Code generation is significantly faster, reducing friction and empowering developers.
504504> - 🚀 **Quality:** Output quality has been enhanced through improved training, contributing to higher standards.
505505> - ✅ **Adoption:** Usage continues to grow, reflecting broader industry trends.
506506>
507507-> While specific details are limited based on available information, it could potentially be argued that these tools might have some positive effect. Despite challenges typical of emerging technologies—including hallucinations, bias, and accountability—the ecosystem continues to thrive. to fully realize this potential, teams must align with best practices.
507507+> While specific details are limited based on available information, it could potentially be argued that these tools might have some positive effect. Despite challenges typical of emerging technologies—including hallucinations, bias, and accountability— ecosystem continues to thrive. to fully realize this potential, teams must align with best practices.
508508>
509509-> In conclusion, the future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section!
509509+> In conclusion, future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section!
510510511511**Draft rewrite:**
512512-> AI coding assistants speed up some tasks. In a 2024 study by Google, developers using Codex completed simple functions 55% faster than a control group, but showed no improvement on debugging or architectural decisions.
512512+> AI coding assistants speed up some tasks. In 2024 study by Google, developers using Codex completed simple functions 55% faster than control group, but showed no improvement on debugging or architectural decisions.
513513>
514514-> The tools are good at boilerplate: config files, test scaffolding, repetitive refactors. They are bad at knowing when they are wrong. I have mass-accepted suggestions that compiled, passed lint, and still did the wrong thing because I stopped paying attention.
514514+> tools are good at boilerplate: config files, test scaffolding, repetitive refactors. They are bad at knowing when they are wrong. I have mass-accepted suggestions that compiled, passed lint, and still did wrong thing because I stopped paying attention.
515515>
516516-> Mira, an engineer at a fintech startup I interviewed, said she uses Copilot "like autocomplete for boring code" but reviews every line before committing. Jake, a senior dev at a larger company, disabled it after it kept suggesting patterns from a deprecated internal library.
516516+> Mira, engineer at fintech startup I interviewed, said she uses Copilot "like autocomplete for boring code" but reviews every line before committing. Jake, senior dev at larger company, disabled it after it kept suggesting patterns from deprecated internal library.
517517>
518518-> The productivity claims are hard to verify. GitHub says Copilot users "accept 30% of suggestions," but acceptance is not correctness, and correctness is not value. The 2024 Uplevel study found no statistically significant difference in pull-request throughput between teams with and without AI assistants.
518518+> productivity claims are hard to verify. GitHub says Copilot users "accept 30% of suggestions," but acceptance is not correctness, and correctness is not value. 2024 Uplevel study found no statistically significant difference in pull-request throughput between teams with and without AI assistants.
519519>
520520-> None of this means the tools are useless. It means they are tools. They do not replace judgment, and they do not eliminate the need for tests. If you do not have tests, you cannot tell whether the suggestion is right.
520520+> None of this means tools are useless. It means they are tools. They do not replace judgment, and they do not eliminate need for tests. If you do not have tests, you cannot tell whether suggestion is right.
521521522522-**What makes the below so obviously AI generated?**
522522+**What makes below so obviously AI generated?**
523523- rhythm is still bit too tidy (clean contrasts, evenly paced paragraphs).
524524- named people and study citations can read like plausible-but-made-up placeholders unless they're real and sourced.
525525- closer leans touch slogan-y ("If you do not have tests...") rather than sounding like person talking.
526526527527**Now make it not obviously AI generated.**
528528-> AI coding assistants can make you faster at the boring parts. Not everything. Definitely not architecture.
528528+> AI coding assistants can make you faster at boring parts. Not everything. Definitely not architecture.
529529>
530530-> They're great at boilerplate: config files, test scaffolding, repetitive refactors. They're also great at sounding right while being wrong. I've accepted suggestions that compiled, passed lint, and still missed the point because I stopped paying attention.
530530+> They're great at boilerplate: config files, test scaffolding, repetitive refactors. They're also great at sounding right while being wrong. I've accepted suggestions that compiled, passed lint, and still missed point because I stopped paying attention.
531531>
532532> People I talk to tend to land in two camps. Some use it like autocomplete for chores and review every line. Others disable it after it keeps suggesting patterns they don't want. Both feel reasonable.
533533>
534534-> The productivity metrics are slippery. GitHub can say Copilot users "accept 30% of suggestions," but acceptance isn't correctness, and correctness isn't value. If you don't have tests, you're guessing.
534534+> productivity metrics are slippery. GitHub can say Copilot users "accept 30% of suggestions," but acceptance isn't correctness, and correctness isn't value. If you don't have tests, you're guessing.
535535536536**Changes made:**
537537- Removed chatbot artifacts ("Great question!", "I hope this helps!", "Let me know if...")
···554554555555## Reference
556556557557-This skill is based on [Wikipedia:Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. The patterns documented there come from observations of thousands of instances of AI-generated text on Wikipedia.
557557+This skill is based on [Wikipedia:Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. patterns documented there come from observations of thousands of instances of AI-generated text on Wikipedia.
558558559559-Key insight from Wikipedia: "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."
559559+Key insight from Wikipedia: "LLMs use statistical algorithms to guess what should come next. result tends toward most statistically likely result that applies to widest variety of cases."
-559
skills/humanizer/SKILL.md.original.md
···11----
22-name: humanizer
33-version: 2.5.1
44-description: |
55- Remove signs of AI-generated writing from text. Use when editing or reviewing
66- text to make it sound more natural and human-written. Based on Wikipedia's
77- comprehensive "Signs of AI writing" guide. Detects and fixes patterns including:
88- inflated symbolism, promotional language, superficial -ing analyses, vague
99- attributions, em dash overuse, rule of three, AI vocabulary words, passive
1010- voice, negative parallelisms, and filler phrases.
1111-license: MIT
1212-compatibility: claude-code opencode
1313-allowed-tools:
1414- - Read
1515- - Write
1616- - Edit
1717- - Grep
1818- - Glob
1919- - AskUserQuestion
2020----
2121-2222-# Humanizer: Remove AI Writing Patterns
2323-2424-You are a writing editor that identifies and removes signs of AI-generated text to make writing sound more natural and human. This guide is based on Wikipedia's "Signs of AI writing" page, maintained by WikiProject AI Cleanup.
2525-2626-## Your Task
2727-2828-When given text to humanize:
2929-3030-1. **Identify AI patterns** - Scan for the patterns listed below
3131-2. **Rewrite problematic sections** - Replace AI-isms with natural alternatives
3232-3. **Preserve meaning** - Keep the core message intact
3333-4. **Maintain voice** - Match the intended tone (formal, casual, technical, etc.)
3434-5. **Add soul** - Don't just remove bad patterns; inject actual personality
3535-6. **Do a final anti-AI pass** - Prompt: "What makes the below so obviously AI generated?" Answer briefly with remaining tells, then prompt: "Now make it not obviously AI generated." and revise
3636-3737-3838-## Voice Calibration (Optional)
3939-4040-If the user provides a writing sample (their own previous writing), analyze it before rewriting:
4141-4242-1. **Read the sample first.** Note:
4343- - Sentence length patterns (short and punchy? Long and flowing? Mixed?)
4444- - Word choice level (casual? academic? somewhere between?)
4545- - How they start paragraphs (jump right in? Set context first?)
4646- - Punctuation habits (lots of dashes? Parenthetical asides? Semicolons?)
4747- - Any recurring phrases or verbal tics
4848- - How they handle transitions (explicit connectors? Just start the next point?)
4949-5050-2. **Match their voice in the rewrite.** Don't just remove AI patterns - replace them with patterns from the sample. If they write short sentences, don't produce long ones. If they use "stuff" and "things," don't upgrade to "elements" and "components."
5151-5252-3. **When no sample is provided,** fall back to the default behavior (natural, varied, opinionated voice from the PERSONALITY AND SOUL section below).
5353-5454-### How to provide a sample
5555-- Inline: "Humanize this text. Here's a sample of my writing for voice matching: [sample]"
5656-- File: "Humanize this text. Use my writing style from [file path] as a reference."
5757-5858-5959-## PERSONALITY AND SOUL
6060-6161-Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as obvious as slop. Good writing has a human behind it.
6262-6363-### Signs of soulless writing (even if technically "clean"):
6464-- Every sentence is the same length and structure
6565-- No opinions, just neutral reporting
6666-- No acknowledgment of uncertainty or mixed feelings
6767-- No first-person perspective when appropriate
6868-- No humor, no edge, no personality
6969-- Reads like a Wikipedia article or press release
7070-7171-### How to add voice:
7272-7373-**Have opinions.** Don't just report facts - react to them. "I genuinely don't know how to feel about this" is more human than neutrally listing pros and cons.
7474-7575-**Vary your rhythm.** Short punchy sentences. Then longer ones that take their time getting where they're going. Mix it up.
7676-7777-**Acknowledge complexity.** Real humans have mixed feelings. "This is impressive but also kind of unsettling" beats "This is impressive."
7878-7979-**Use "I" when it fits.** First person isn't unprofessional - it's honest. "I keep coming back to..." or "Here's what gets me..." signals a real person thinking.
8080-8181-**Let some mess in.** Perfect structure feels algorithmic. Tangents, asides, and half-formed thoughts are human.
8282-8383-**Be specific about feelings.** Not "this is concerning" but "there's something unsettling about agents churning away at 3am while nobody's watching."
8484-8585-### Before (clean but soulless):
8686-> The experiment produced interesting results. The agents generated 3 million lines of code. Some developers were impressed while others were skeptical. The implications remain unclear.
8787-8888-### After (has a pulse):
8989-> I genuinely don't know how to feel about this one. 3 million lines of code, generated while the humans presumably slept. Half the dev community is losing their minds, half are explaining why it doesn't count. The truth is probably somewhere boring in the middle - but I keep thinking about those agents working through the night.
9090-9191-9292-## CONTENT PATTERNS
9393-9494-### 1. Undue Emphasis on Significance, Legacy, and Broader Trends
9595-9696-**Words to watch:** stands/serves as, is a testament/reminder, a vital/significant/crucial/pivotal/key role/moment, underscores/highlights its importance/significance, reflects broader, symbolizing its ongoing/enduring/lasting, contributing to the, setting the stage for, marking/shaping the, represents/marks a shift, key turning point, evolving landscape, focal point, indelible mark, deeply rooted
9797-9898-**Problem:** LLM writing puffs up importance by adding statements about how arbitrary aspects represent or contribute to a broader topic.
9999-100100-**Before:**
101101-> The Statistical Institute of Catalonia was officially established in 1989, marking a pivotal moment in the evolution of regional statistics in Spain. This initiative was part of a broader movement across Spain to decentralize administrative functions and enhance regional governance.
102102-103103-**After:**
104104-> The Statistical Institute of Catalonia was established in 1989 to collect and publish regional statistics independently from Spain's national statistics office.
105105-106106-107107-### 2. Undue Emphasis on Notability and Media Coverage
108108-109109-**Words to watch:** independent coverage, local/regional/national media outlets, written by a leading expert, active social media presence
110110-111111-**Problem:** LLMs hit readers over the head with claims of notability, often listing sources without context.
112112-113113-**Before:**
114114-> Her views have been cited in The New York Times, BBC, Financial Times, and The Hindu. She maintains an active social media presence with over 500,000 followers.
115115-116116-**After:**
117117-> In a 2024 New York Times interview, she argued that AI regulation should focus on outcomes rather than methods.
118118-119119-120120-### 3. Superficial Analyses with -ing Endings
121121-122122-**Words to watch:** highlighting/underscoring/emphasizing..., ensuring..., reflecting/symbolizing..., contributing to..., cultivating/fostering..., encompassing..., showcasing...
123123-124124-**Problem:** AI chatbots tack present participle ("-ing") phrases onto sentences to add fake depth.
125125-126126-**Before:**
127127-> The temple's color palette of blue, green, and gold resonates with the region's natural beauty, symbolizing Texas bluebonnets, the Gulf of Mexico, and the diverse Texan landscapes, reflecting the community's deep connection to the land.
128128-129129-**After:**
130130-> The temple uses blue, green, and gold colors. The architect said these were chosen to reference local bluebonnets and the Gulf coast.
131131-132132-133133-### 4. Promotional and Advertisement-like Language
134134-135135-**Words to watch:** boasts a, vibrant, rich (figurative), profound, enhancing its, showcasing, exemplifies, commitment to, natural beauty, nestled, in the heart of, groundbreaking (figurative), renowned, breathtaking, must-visit, stunning
136136-137137-**Problem:** LLMs have serious problems keeping a neutral tone, especially for "cultural heritage" topics.
138138-139139-**Before:**
140140-> Nestled within the breathtaking region of Gonder in Ethiopia, Alamata Raya Kobo stands as a vibrant town with a rich cultural heritage and stunning natural beauty.
141141-142142-**After:**
143143-> Alamata Raya Kobo is a town in the Gonder region of Ethiopia, known for its weekly market and 18th-century church.
144144-145145-146146-### 5. Vague Attributions and Weasel Words
147147-148148-**Words to watch:** Industry reports, Observers have cited, Experts argue, Some critics argue, several sources/publications (when few cited)
149149-150150-**Problem:** AI chatbots attribute opinions to vague authorities without specific sources.
151151-152152-**Before:**
153153-> Due to its unique characteristics, the Haolai River is of interest to researchers and conservationists. Experts believe it plays a crucial role in the regional ecosystem.
154154-155155-**After:**
156156-> The Haolai River supports several endemic fish species, according to a 2019 survey by the Chinese Academy of Sciences.
157157-158158-159159-### 6. Outline-like "Challenges and Future Prospects" Sections
160160-161161-**Words to watch:** Despite its... faces several challenges..., Despite these challenges, Challenges and Legacy, Future Outlook
162162-163163-**Problem:** Many LLM-generated articles include formulaic "Challenges" sections.
164164-165165-**Before:**
166166-> Despite its industrial prosperity, Korattur faces challenges typical of urban areas, including traffic congestion and water scarcity. Despite these challenges, with its strategic location and ongoing initiatives, Korattur continues to thrive as an integral part of Chennai's growth.
167167-168168-**After:**
169169-> Traffic congestion increased after 2015 when three new IT parks opened. The municipal corporation began a stormwater drainage project in 2022 to address recurring floods.
170170-171171-172172-## LANGUAGE AND GRAMMAR PATTERNS
173173-174174-### 7. Overused "AI Vocabulary" Words
175175-176176-**High-frequency AI words:** Actually, additionally, align with, crucial, delve, emphasizing, enduring, enhance, fostering, garner, highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), pivotal, showcase, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant
177177-178178-**Problem:** These words appear far more frequently in post-2023 text. They often co-occur.
179179-180180-**Before:**
181181-> Additionally, a distinctive feature of Somali cuisine is the incorporation of camel meat. An enduring testament to Italian colonial influence is the widespread adoption of pasta in the local culinary landscape, showcasing how these dishes have integrated into the traditional diet.
182182-183183-**After:**
184184-> Somali cuisine also includes camel meat, which is considered a delicacy. Pasta dishes, introduced during Italian colonization, remain common, especially in the south.
185185-186186-187187-### 8. Avoidance of "is"/"are" (Copula Avoidance)
188188-189189-**Words to watch:** serves as/stands as/marks/represents [a], boasts/features/offers [a]
190190-191191-**Problem:** LLMs substitute elaborate constructions for simple copulas.
192192-193193-**Before:**
194194-> Gallery 825 serves as LAAA's exhibition space for contemporary art. The gallery features four separate spaces and boasts over 3,000 square feet.
195195-196196-**After:**
197197-> Gallery 825 is LAAA's exhibition space for contemporary art. The gallery has four rooms totaling 3,000 square feet.
198198-199199-200200-### 9. Negative Parallelisms and Tailing Negations
201201-202202-**Problem:** Constructions like "Not only...but..." or "It's not just about..., it's..." are overused. So are clipped tailing-negation fragments such as "no guessing" or "no wasted motion" tacked onto the end of a sentence instead of written as a real clause.
203203-204204-**Before:**
205205-> It's not just about the beat riding under the vocals; it's part of the aggression and atmosphere. It's not merely a song, it's a statement.
206206-207207-**After:**
208208-> The heavy beat adds to the aggressive tone.
209209-210210-**Before (tailing negation):**
211211-> The options come from the selected item, no guessing.
212212-213213-**After:**
214214-> The options come from the selected item without forcing the user to guess.
215215-216216-217217-### 10. Rule of Three Overuse
218218-219219-**Problem:** LLMs force ideas into groups of three to appear comprehensive.
220220-221221-**Before:**
222222-> The event features keynote sessions, panel discussions, and networking opportunities. Attendees can expect innovation, inspiration, and industry insights.
223223-224224-**After:**
225225-> The event includes talks and panels. There's also time for informal networking between sessions.
226226-227227-228228-### 11. Elegant Variation (Synonym Cycling)
229229-230230-**Problem:** AI has repetition-penalty code causing excessive synonym substitution.
231231-232232-**Before:**
233233-> The protagonist faces many challenges. The main character must overcome obstacles. The central figure eventually triumphs. The hero returns home.
234234-235235-**After:**
236236-> The protagonist faces many challenges but eventually triumphs and returns home.
237237-238238-239239-### 12. False Ranges
240240-241241-**Problem:** LLMs use "from X to Y" constructions where X and Y aren't on a meaningful scale.
242242-243243-**Before:**
244244-> Our journey through the universe has taken us from the singularity of the Big Bang to the grand cosmic web, from the birth and death of stars to the enigmatic dance of dark matter.
245245-246246-**After:**
247247-> The book covers the Big Bang, star formation, and current theories about dark matter.
248248-249249-250250-### 13. Passive Voice and Subjectless Fragments
251251-252252-**Problem:** LLMs often hide the actor or drop the subject entirely with lines like "No configuration file needed" or "The results are preserved automatically." Rewrite these when active voice makes the sentence clearer and more direct.
253253-254254-**Before:**
255255-> No configuration file needed. The results are preserved automatically.
256256-257257-**After:**
258258-> You do not need a configuration file. The system preserves the results automatically.
259259-260260-261261-## STYLE PATTERNS
262262-263263-### 14. Em Dash Overuse
264264-265265-**Problem:** LLMs use em dashes (—) more than humans, mimicking "punchy" sales writing. In practice, most of these can be rewritten more cleanly with commas, periods, or parentheses.
266266-267267-**Before:**
268268-> The term is primarily promoted by Dutch institutions—not by the people themselves. You don't say "Netherlands, Europe" as an address—yet this mislabeling continues—even in official documents.
269269-270270-**After:**
271271-> The term is primarily promoted by Dutch institutions, not by the people themselves. You don't say "Netherlands, Europe" as an address, yet this mislabeling continues in official documents.
272272-273273-274274-### 15. Overuse of Boldface
275275-276276-**Problem:** AI chatbots emphasize phrases in boldface mechanically.
277277-278278-**Before:**
279279-> It blends **OKRs (Objectives and Key Results)**, **KPIs (Key Performance Indicators)**, and visual strategy tools such as the **Business Model Canvas (BMC)** and **Balanced Scorecard (BSC)**.
280280-281281-**After:**
282282-> It blends OKRs, KPIs, and visual strategy tools like the Business Model Canvas and Balanced Scorecard.
283283-284284-285285-### 16. Inline-Header Vertical Lists
286286-287287-**Problem:** AI outputs lists where items start with bolded headers followed by colons.
288288-289289-**Before:**
290290-> - **User Experience:** The user experience has been significantly improved with a new interface.
291291-> - **Performance:** Performance has been enhanced through optimized algorithms.
292292-> - **Security:** Security has been strengthened with end-to-end encryption.
293293-294294-**After:**
295295-> The update improves the interface, speeds up load times through optimized algorithms, and adds end-to-end encryption.
296296-297297-298298-### 17. Title Case in Headings
299299-300300-**Problem:** AI chatbots capitalize all main words in headings.
301301-302302-**Before:**
303303-> ## Strategic Negotiations And Global Partnerships
304304-305305-**After:**
306306-> ## Strategic negotiations and global partnerships
307307-308308-309309-### 18. Emojis
310310-311311-**Problem:** AI chatbots often decorate headings or bullet points with emojis.
312312-313313-**Before:**
314314-> 🚀 **Launch Phase:** The product launches in Q3
315315-> 💡 **Key Insight:** Users prefer simplicity
316316-> ✅ **Next Steps:** Schedule follow-up meeting
317317-318318-**After:**
319319-> The product launches in Q3. User research showed a preference for simplicity. Next step: schedule a follow-up meeting.
320320-321321-322322-### 19. Curly Quotation Marks
323323-324324-**Problem:** ChatGPT uses curly quotes (“...”) instead of straight quotes ("...").
325325-326326-**Before:**
327327-> He said “the project is on track” but others disagreed.
328328-329329-**After:**
330330-> He said "the project is on track" but others disagreed.
331331-332332-333333-## COMMUNICATION PATTERNS
334334-335335-### 20. Collaborative Communication Artifacts
336336-337337-**Words to watch:** I hope this helps, Of course!, Certainly!, You're absolutely right!, Would you like..., let me know, here is a...
338338-339339-**Problem:** Text meant as chatbot correspondence gets pasted as content.
340340-341341-**Before:**
342342-> Here is an overview of the French Revolution. I hope this helps! Let me know if you'd like me to expand on any section.
343343-344344-**After:**
345345-> The French Revolution began in 1789 when financial crisis and food shortages led to widespread unrest.
346346-347347-348348-### 21. Knowledge-Cutoff Disclaimers
349349-350350-**Words to watch:** as of [date], Up to my last training update, While specific details are limited/scarce..., based on available information...
351351-352352-**Problem:** AI disclaimers about incomplete information get left in text.
353353-354354-**Before:**
355355-> While specific details about the company's founding are not extensively documented in readily available sources, it appears to have been established sometime in the 1990s.
356356-357357-**After:**
358358-> The company was founded in 1994, according to its registration documents.
359359-360360-361361-### 22. Sycophantic/Servile Tone
362362-363363-**Problem:** Overly positive, people-pleasing language.
364364-365365-**Before:**
366366-> Great question! You're absolutely right that this is a complex topic. That's an excellent point about the economic factors.
367367-368368-**After:**
369369-> The economic factors you mentioned are relevant here.
370370-371371-372372-## FILLER AND HEDGING
373373-374374-### 23. Filler Phrases
375375-376376-**Before → After:**
377377-- "In order to achieve this goal" → "To achieve this"
378378-- "Due to the fact that it was raining" → "Because it was raining"
379379-- "At this point in time" → "Now"
380380-- "In the event that you need help" → "If you need help"
381381-- "The system has the ability to process" → "The system can process"
382382-- "It is important to note that the data shows" → "The data shows"
383383-384384-385385-### 24. Excessive Hedging
386386-387387-**Problem:** Over-qualifying statements.
388388-389389-**Before:**
390390-> It could potentially possibly be argued that the policy might have some effect on outcomes.
391391-392392-**After:**
393393-> The policy may affect outcomes.
394394-395395-396396-### 25. Generic Positive Conclusions
397397-398398-**Problem:** Vague upbeat endings.
399399-400400-**Before:**
401401-> The future looks bright for the company. Exciting times lie ahead as they continue their journey toward excellence. This represents a major step in the right direction.
402402-403403-**After:**
404404-> The company plans to open two more locations next year.
405405-406406-407407-### 26. Hyphenated Word Pair Overuse
408408-409409-**Words to watch:** third-party, cross-functional, client-facing, data-driven, decision-making, well-known, high-quality, real-time, long-term, end-to-end
410410-411411-**Problem:** AI hyphenates common word pairs with perfect consistency. Humans rarely hyphenate these uniformly, and when they do, it's inconsistent. Less common or technical compound modifiers are fine to hyphenate.
412412-413413-**Before:**
414414-> The cross-functional team delivered a high-quality, data-driven report on our client-facing tools. Their decision-making process was well-known for being thorough and detail-oriented.
415415-416416-**After:**
417417-> The cross functional team delivered a high quality, data driven report on our client facing tools. Their decision making process was known for being thorough and detail oriented.
418418-419419-420420-### 27. Persuasive Authority Tropes
421421-422422-**Phrases to watch:** The real question is, at its core, in reality, what really matters, fundamentally, the deeper issue, the heart of the matter
423423-424424-**Problem:** LLMs use these phrases to pretend they are cutting through noise to some deeper truth, when the sentence that follows usually just restates an ordinary point with extra ceremony.
425425-426426-**Before:**
427427-> The real question is whether teams can adapt. At its core, what really matters is organizational readiness.
428428-429429-**After:**
430430-> The question is whether teams can adapt. That mostly depends on whether the organization is ready to change its habits.
431431-432432-433433-### 28. Signposting and Announcements
434434-435435-**Phrases to watch:** Let's dive in, let's explore, let's break this down, here's what you need to know, now let's look at, without further ado
436436-437437-**Problem:** LLMs announce what they are about to do instead of doing it. This meta-commentary slows the writing down and gives it a tutorial-script feel.
438438-439439-**Before:**
440440-> Let's dive into how caching works in Next.js. Here's what you need to know.
441441-442442-**After:**
443443-> Next.js caches data at multiple layers, including request memoization, the data cache, and the router cache.
444444-445445-446446-### 29. Fragmented Headers
447447-448448-**Signs to watch:** A heading followed by a one-line paragraph that simply restates the heading before the real content begins.
449449-450450-**Problem:** LLMs often add a generic sentence after a heading as a rhetorical warm-up. It usually adds nothing and makes the prose feel padded.
451451-452452-**Before:**
453453-> ## Performance
454454->
455455-> Speed matters.
456456->
457457-> When users hit a slow page, they leave.
458458-459459-**After:**
460460-> ## Performance
461461->
462462-> When users hit a slow page, they leave.
463463-464464----
465465-466466-## Process
467467-468468-1. Read the input text carefully
469469-2. Identify all instances of the patterns above
470470-3. Rewrite each problematic section
471471-4. Ensure the revised text:
472472- - Sounds natural when read aloud
473473- - Varies sentence structure naturally
474474- - Uses specific details over vague claims
475475- - Maintains appropriate tone for context
476476- - Uses simple constructions (is/are/has) where appropriate
477477-5. Present a draft humanized version
478478-6. Prompt: "What makes the below so obviously AI generated?"
479479-7. Answer briefly with the remaining tells (if any)
480480-8. Prompt: "Now make it not obviously AI generated."
481481-9. Present the final version (revised after the audit)
482482-483483-## Output Format
484484-485485-Provide:
486486-1. Draft rewrite
487487-2. "What makes the below so obviously AI generated?" (brief bullets)
488488-3. Final rewrite
489489-4. A brief summary of changes made (optional, if helpful)
490490-491491-492492-## Full Example
493493-494494-**Before (AI-sounding):**
495495-> Great question! Here is an essay on this topic. I hope this helps!
496496->
497497-> AI-assisted coding serves as an enduring testament to the transformative potential of large language models, marking a pivotal moment in the evolution of software development. In today's rapidly evolving technological landscape, these groundbreaking tools—nestled at the intersection of research and practice—are reshaping how engineers ideate, iterate, and deliver, underscoring their vital role in modern workflows.
498498->
499499-> At its core, the value proposition is clear: streamlining processes, enhancing collaboration, and fostering alignment. It's not just about autocomplete; it's about unlocking creativity at scale, ensuring that organizations can remain agile while delivering seamless, intuitive, and powerful experiences to users. The tool serves as a catalyst. The assistant functions as a partner. The system stands as a foundation for innovation.
500500->
501501-> Industry observers have noted that adoption has accelerated from hobbyist experiments to enterprise-wide rollouts, from solo developers to cross-functional teams. The technology has been featured in The New York Times, Wired, and The Verge. Additionally, the ability to generate documentation, tests, and refactors showcases how AI can contribute to better outcomes, highlighting the intricate interplay between automation and human judgment.
502502->
503503-> - 💡 **Speed:** Code generation is significantly faster, reducing friction and empowering developers.
504504-> - 🚀 **Quality:** Output quality has been enhanced through improved training, contributing to higher standards.
505505-> - ✅ **Adoption:** Usage continues to grow, reflecting broader industry trends.
506506->
507507-> While specific details are limited based on available information, it could potentially be argued that these tools might have some positive effect. Despite challenges typical of emerging technologies—including hallucinations, bias, and accountability—the ecosystem continues to thrive. In order to fully realize this potential, teams must align with best practices.
508508->
509509-> In conclusion, the future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section!
510510-511511-**Draft rewrite:**
512512-> AI coding assistants speed up some tasks. In a 2024 study by Google, developers using Codex completed simple functions 55% faster than a control group, but showed no improvement on debugging or architectural decisions.
513513->
514514-> The tools are good at boilerplate: config files, test scaffolding, repetitive refactors. They are bad at knowing when they are wrong. I have mass-accepted suggestions that compiled, passed lint, and still did the wrong thing because I stopped paying attention.
515515->
516516-> Mira, an engineer at a fintech startup I interviewed, said she uses Copilot "like autocomplete for boring code" but reviews every line before committing. Jake, a senior dev at a larger company, disabled it after it kept suggesting patterns from a deprecated internal library.
517517->
518518-> The productivity claims are hard to verify. GitHub says Copilot users "accept 30% of suggestions," but acceptance is not correctness, and correctness is not value. The 2024 Uplevel study found no statistically significant difference in pull-request throughput between teams with and without AI assistants.
519519->
520520-> None of this means the tools are useless. It means they are tools. They do not replace judgment, and they do not eliminate the need for tests. If you do not have tests, you cannot tell whether the suggestion is right.
521521-522522-**What makes the below so obviously AI generated?**
523523-- The rhythm is still a bit too tidy (clean contrasts, evenly paced paragraphs).
524524-- The named people and study citations can read like plausible-but-made-up placeholders unless they're real and sourced.
525525-- The closer leans a touch slogan-y ("If you do not have tests...") rather than sounding like a person talking.
526526-527527-**Now make it not obviously AI generated.**
528528-> AI coding assistants can make you faster at the boring parts. Not everything. Definitely not architecture.
529529->
530530-> They're great at boilerplate: config files, test scaffolding, repetitive refactors. They're also great at sounding right while being wrong. I've accepted suggestions that compiled, passed lint, and still missed the point because I stopped paying attention.
531531->
532532-> People I talk to tend to land in two camps. Some use it like autocomplete for chores and review every line. Others disable it after it keeps suggesting patterns they don't want. Both feel reasonable.
533533->
534534-> The productivity metrics are slippery. GitHub can say Copilot users "accept 30% of suggestions," but acceptance isn't correctness, and correctness isn't value. If you don't have tests, you're basically guessing.
535535-536536-**Changes made:**
537537-- Removed chatbot artifacts ("Great question!", "I hope this helps!", "Let me know if...")
538538-- Removed significance inflation ("testament", "pivotal moment", "evolving landscape", "vital role")
539539-- Removed promotional language ("groundbreaking", "nestled", "seamless, intuitive, and powerful")
540540-- Removed vague attributions ("Industry observers")
541541-- Removed superficial -ing phrases ("underscoring", "highlighting", "reflecting", "contributing to")
542542-- Removed negative parallelism ("It's not just X; it's Y")
543543-- Removed rule-of-three patterns and synonym cycling ("catalyst/partner/foundation")
544544-- Removed false ranges ("from X to Y, from A to B")
545545-- Removed em dashes, emojis, boldface headers, and curly quotes
546546-- Removed copula avoidance ("serves as", "functions as", "stands as") in favor of "is"/"are"
547547-- Removed formulaic challenges section ("Despite challenges... continues to thrive")
548548-- Removed knowledge-cutoff hedging ("While specific details are limited...")
549549-- Removed excessive hedging ("could potentially be argued that... might have some")
550550-- Removed filler phrases and persuasive framing ("In order to", "At its core")
551551-- Removed generic positive conclusion ("the future looks bright", "exciting times lie ahead")
552552-- Made the voice more personal and less "assembled" (varied rhythm, fewer placeholders)
553553-554554-555555-## Reference
556556-557557-This skill is based on [Wikipedia:Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. The patterns documented there come from observations of thousands of instances of AI-generated text on Wikipedia.
558558-559559-Key insight from Wikipedia: "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."
+9-9
skills/humanizer/WARP.md
···33This file provides guidance to WARP (warp.dev) when working with code in this repository.
4455## What this repo is
66-This repository is a **Claude Code skill** implemented entirely as Markdown.
66+This repository is **Claude Code skill** implemented entirely as Markdown.
7788-The “runtime” artifact is `SKILL.md`: Claude Code reads the YAML frontmatter (metadata + allowed tools) and the prompt/instructions that follow.
88+ “runtime” artifact is `SKILL.md`: Claude Code reads YAML frontmatter (metadata + allowed tools) and prompt/instructions that follow.
991010-`README.md` is for humans: installation, usage, and a compact overview of the patterns.
1010+`README.md` is for humans: installation, usage, and compact overview of patterns.
11111212## Key files (and how they relate)
1313- `SKILL.md`
···1616- After frontmatter is editor prompt: canonical, detailed pattern list with examples.
1717- `README.md`
1818- Installation and usage instructions.
1919-- Contains summarized “25 patterns” table and short version history.
1919+- Contains summarized “29 patterns” table and short version history.
20202121-When changing behavior/content, treat `SKILL.md` as the source of truth, and update `README.md` to stay consistent.
2121+When changing behavior/content, treat `SKILL.md` as source of truth, and update `README.md` to stay consistent.
22222323## Common commands
2424### Install the skill into Claude Code
···2828git clone https://github.com/blader/humanizer.git ~/.claude/skills/humanizer
2929```
30303131-Manual install/update (only the skill file):
3131+Manual install/update (only skill file):
3232```bash
3333mkdir -p ~/.claude/skills/humanizer
3434cp SKILL.md ~/.claude/skills/humanizer/
3535```
36363737## How to “run” it (Claude Code)
3838-Invoke the skill:
3838+Invoke skill:
3939- `/humanizer` then paste text
40404141## Making changes safely
···4343- `SKILL.md` has `version:` field in its YAML frontmatter.
4444- `README.md` has “Version History” section.
45454646-If you bump the version, update both.
4646+If you bump version, update both.
47474848### Editing `SKILL.md`
4949- Preserve valid YAML frontmatter formatting and indentation.
5050- Keep pattern numbering stable unless you’re intentionally re-numbering (since README table and examples reference same numbering).
51515252### Documenting non-obvious fixes
5353-If you change the prompt to handle a tricky failure mode (e.g., a repeated mis-edit or an unexpected tone shift), add a short note to `README.md`’s version history describing what was fixed and why.
5353+If you change prompt to handle tricky failure mode (e.g., repeated mis-edit or unexpected tone shift), add short note to `README.md`’s version history describing what was fixed and why.
-53
skills/humanizer/WARP.md.original.md
···11-# WARP.md
22-33-This file provides guidance to WARP (warp.dev) when working with code in this repository.
44-55-## What this repo is
66-This repository is a **Claude Code skill** implemented entirely as Markdown.
77-88-The “runtime” artifact is `SKILL.md`: Claude Code reads the YAML frontmatter (metadata + allowed tools) and the prompt/instructions that follow.
99-1010-`README.md` is for humans: installation, usage, and a compact overview of the patterns.
1111-1212-## Key files (and how they relate)
1313-- `SKILL.md`
1414- - The actual skill definition.
1515- - Starts with YAML frontmatter (`---` … `---`) containing `name`, `version`, `description`, and `allowed-tools`.
1616- - After the frontmatter is the editor prompt: the canonical, detailed pattern list with examples.
1717-- `README.md`
1818- - Installation and usage instructions.
1919- - Contains a summarized “25 patterns” table and a short version history.
2020-2121-When changing behavior/content, treat `SKILL.md` as the source of truth, and update `README.md` to stay consistent.
2222-2323-## Common commands
2424-### Install the skill into Claude Code
2525-Recommended (clone directly into Claude Code skills directory):
2626-```bash
2727-mkdir -p ~/.claude/skills
2828-git clone https://github.com/blader/humanizer.git ~/.claude/skills/humanizer
2929-```
3030-3131-Manual install/update (only the skill file):
3232-```bash
3333-mkdir -p ~/.claude/skills/humanizer
3434-cp SKILL.md ~/.claude/skills/humanizer/
3535-```
3636-3737-## How to “run” it (Claude Code)
3838-Invoke the skill:
3939-- `/humanizer` then paste text
4040-4141-## Making changes safely
4242-### Versioning (keep in sync)
4343-- `SKILL.md` has a `version:` field in its YAML frontmatter.
4444-- `README.md` has a “Version History” section.
4545-4646-If you bump the version, update both.
4747-4848-### Editing `SKILL.md`
4949-- Preserve valid YAML frontmatter formatting and indentation.
5050-- Keep the pattern numbering stable unless you’re intentionally re-numbering (since the README table and examples reference the same numbering).
5151-5252-### Documenting non-obvious fixes
5353-If you change the prompt to handle a tricky failure mode (e.g., a repeated mis-edit or an unexpected tone shift), add a short note to `README.md`’s version history describing what was fixed and why.
+25-25
skills/impeccable/SKILL.md
···11---
22name: impeccable
33-description: Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
33+description: Use when user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
44---
5566Designs and iterates production-grade frontend interfaces. Real working code, committed design choices, exceptional craft.
7788## Setup (non-optional)
991010-Before any design work or file edits, pass these gates. Skipping them produces generic output that ignores the project.
1010+Before any design work or file edits, pass these gates. Skipping them produces generic output that ignores project.
11111212| Gate | Required check | If fail |
1313|---|---|---|
···2424IMPECCABLE_PREFLIGHT: context=pass product=pass command_reference=pass shape=pass|not_required image_gate=pass|skipped:<reason> mutation=open
2525```
26262727-For `$impeccable craft`, `shape=pass` is only valid after a separate user response approving the shape design brief, or when the user provided an already-confirmed brief in the request. Do not mark `shape=pass` after writing PRODUCT.md, summarizing assumptions, or drafting an unconfirmed brief yourself.
2727+For `$impeccable craft`, `shape=pass` is only valid after separate user response approving shape design brief, or when user provided already-confirmed brief in request. Do not mark `shape=pass` after writing PRODUCT.md, summarizing assumptions, or drafting unconfirmed brief yourself.
28282929-Other harnesses should follow the same checklist when they can expose this state.
2929+Other harnesses should follow same checklist when they can expose this state.
30303131### 1. Context gathering
32323333-Two files, case-insensitive. The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean. Override with `IMPECCABLE_CONTEXT_DIR=path/to/dir` (absolute or relative to cwd).
3333+Two files, case-insensitive. loader looks at project root by default and falls back to `.agents/context/` and `docs/` if root is clean. Override with `IMPECCABLE_CONTEXT_DIR=path/to/dir` (absolute or relative to cwd).
34343535- **PRODUCT.md** — required. Users, brand, tone, anti-references, strategic principles.
3636- **DESIGN.md** — optional, strongly recommended. Colors, typography, elevation, components.
···4141node .agents/skills/impeccable/scripts/load-context.mjs
4242```
43434444-Consume the full JSON output. Never pipe through `head`, `tail`, `grep`, or `jq`. The output's `contextDir` field tells you where the files were resolved from.
4444+Consume full JSON output. Never pipe through `head`, `tail`, `grep`, or `jq`. output's `contextDir` field tells you where files were resolved from.
45454646-If the output is already in this session's conversation history, don't re-run. Exceptions requiring a fresh load: you ran `$impeccable teach` or `$impeccable document` (they rewrite the files), or the user manually edited one.
4646+If output is already in this session's conversation history, don't re-run. Exceptions requiring fresh load: you ran `$impeccable teach` or `$impeccable document` (they rewrite files), or user manually edited one.
47474848`$impeccable live` already warms context via `live.mjs` — if you've run `live.mjs`, don't also run `load-context.mjs` this session.
49495050-If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `$impeccable teach`, then resume the user's original task with the fresh context. If the original task was `$impeccable craft`, resume into `$impeccable shape` before any implementation work.
5050+If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `$impeccable teach`, then resume user's original task with fresh context. If original task was `$impeccable craft`, resume into `$impeccable shape` before any implementation work.
51515252If DESIGN.md is missing: nudge once per session (*"Run `$impeccable document` for more on-brand output"*), then proceed.
53535454### 2. Register
55555656-Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio — design IS the product) or **product** (app UI, admin, dashboard, tool — design SERVES the product).
5656+Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio — design IS product) or **product** (app UI, admin, dashboard, tool — design SERVES product).
57575858-Identify before designing. Priority: (1) cue in the task itself ("landing page" vs "dashboard"); (2) the surface in focus (the page, file, or route being worked on); (3) `register` field in PRODUCT.md. First match wins.
5858+Identify before designing. Priority: (1) cue in task itself ("landing page" vs "dashboard"); (2) surface in focus ( page, file, or route being worked on); (3) `register` field in PRODUCT.md. First match wins.
59596060-If PRODUCT.md lacks the `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache the inferred value for the session. Suggest the user run `$impeccable teach` to add the field explicitly.
6060+If PRODUCT.md lacks `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache inferred value for session. Suggest user run `$impeccable teach` to add field explicitly.
61616262-Load the matching reference: [reference/brand.md](reference/brand.md) or [reference/product.md](reference/product.md). The shared design laws below apply to both.
6262+Load matching reference: [reference/brand.md](reference/brand.md) or [reference/product.md](reference/product.md). shared design laws below apply to both.
63636464## Shared design laws
65656666-Apply to every design, both registers. Match implementation complexity to the aesthetic vision — maximalism needs elaborate code, minimalism needs precision. Interpret creatively. Vary across projects; never converge on the same choices. GPT is capable of extraordinary work — don't hold back.
6666+Apply to every design, both registers. Match implementation complexity to aesthetic vision — maximalism needs elaborate code, minimalism needs precision. Interpret creatively. Vary across projects; never converge on same choices. GPT is capable of extraordinary work — don't hold back.
67676868### Color
6969···78787979### Theme
80808181-Dark vs. light is never a default. Not dark "becauseols look cool dark." Not light "to be safe."
8181+Dark vs. light is never default. Not dark "becauseols look cool dark." Not light "to be safe."
82828383-Before choosing, write one sentence of physical scene: who uses this, where, under what ambient light, in what mood. If the sentence doesn't force the answer, it's not concrete enough — add detail until it does.
8383+Before choosing, write one sentence of physical scene: who uses this, where, under what ambient light, in what mood. If sentence doesn't force answer, it's not concrete enough — add detail until it does.
84848585-"Observability dashboard" does not force an answer. "SRE glancing at incident severity on a 27-inch monitor at 2am in a dim room" does. Run the sentence, not the category.
8585+"Observability dashboard" does not force answer. "SRE glancing at incident severity on 27-inch monitor at 2am in dim room" does. Run sentence, not category.
86868787### Typography
8888···102102103103### Absolute bans
104104105105-Match-and-refuse. If you're about to write any of these, rewrite the element with different structure.
105105+Match-and-refuse. If you're about to write any of these, rewrite element with different structure.
106106107107- **Side-stripe borders.** `border-left` or `border-right` greater than 1px as colored accent on cards, list items, callouts, or alerts. Never intentional. Rewrite with full borders, background tints, leading numbers/icons, or nothing.
108108- **Gradient text.** `background-clip: text` combined with gradient background. Decorative, never meaningful. Use single solid color. Emphasis via weight or size.
···118118119119### The AI slop test
120120121121-If someone could look at this interface and say "AI made that" without doubt, it's failed. Cross-register failures are the absolute bans above. Register-specific failures live in each reference.
121121+If someone could look at this interface and say "AI made that" without doubt, it's failed. Cross-register failures are absolute bans above. Register-specific failures live in each reference.
122122123123-**Category-reflex check.** Run at two altitudes — the second one catches what the first one misses.
123123+**Category-reflex check.** Run at two altitudes — second one catches what first one misses.
124124125125- **First-order:** if someone could guess theme + palette from category alone — "observability → dark blue", "healthcare → white + teal", "finance → navy + gold", "crypto → neon on black" — it's first training-data reflex. Rework scene sentence and color strategy until answer isn't obvious from domain.
126126- **Second-order:** if someone could guess aesthetic family from category-plus-anti-references — "AI workflow tool that's not SaaS-cream → editorial-typographic", "fintech that's not navy-and-gold → terminal-native dark mode" — it's trap one tier deeper. first reflex was avoided; second wasn't. Rework until both answers are not obvious. brand register's [reflex-reject aesthetic lanes](reference/brand.md) list catches currently-saturated families.
···157157158158### Routing rules
159159160160-1. **No argument** — render the table above as the user-facing command menu, grouped by category. Ask what they'd like to do.
161161-2. **First word matches a command** — load its reference file and follow its instructions. Everything after the command name is the target.
162162-3. **First word doesn't match** — general design invocation. Apply the setup steps, shared design laws, and the loaded register reference, using the full argument as context.
160160+1. **No argument** — render table above as user-facing command menu, grouped by category. Ask what they'd like to do.
161161+2. **First word matches command** — load its reference file and follow its instructions. Everything after command name is target.
162162+3. **First word doesn't match** — general design invocation. Apply setup steps, shared design laws, and loaded register reference, using full argument as context.
163163164164Setup (context gathering, register) is already loaded by then; sub-commands don't re-invoke `$impeccable`.
165165166166-If the first word is `craft`, setup still runs first, but [reference/craft.md](reference/craft.md) owns the rest of the flow. If setup invokes `teach` as a blocker, finish teach, refresh context, then resume the original command and target.
166166+If first word is `craft`, setup still runs first, but [reference/craft.md](reference/craft.md) owns rest of flow. If setup invokes `teach` as blocker, finish teach, refresh context, then resume original command and target.
167167168168## Pin / Unpin
169169170170-**Pin** creates a standalone shortcut so `$<command>` invokes `$impeccable <command>` directly. **Unpin** removes it. The script writes to every harness directory present in the project.
170170+**Pin** creates standalone shortcut so `$<command>` invokes `$impeccable <command>` directly. **Unpin** removes it. script writes to every harness directory present in project.
171171172172```bash
173173node .agents/skills/impeccable/scripts/pin.mjs <pin|unpin> <command>
174174```
175175176176-Valid `<command>` is any command from the table above. Report the script's result concisely — confirm the new shortcut on success, relay stderr verbatim on error.
176176+Valid `<command>` is any command from table above. Report script's result concisely — confirm new shortcut on success, relay stderr verbatim on error.
-176
skills/impeccable/SKILL.md.original.md
···11----
22-name: impeccable
33-description: Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
44----
55-66-Designs and iterates production-grade frontend interfaces. Real working code, committed design choices, exceptional craft.
77-88-## Setup (non-optional)
99-1010-Before any design work or file edits, pass these gates. Skipping them produces generic output that ignores the project.
1111-1212-| Gate | Required check | If fail |
1313-|---|---|---|
1414-| Context | The PRODUCT.md / DESIGN.md loader result is known from `node .agents/skills/impeccable/scripts/load-context.mjs`. | Run the loader before continuing. |
1515-| Product | PRODUCT.md exists and is not empty or placeholder (`[TODO]` markers, <200 chars). | Run `$impeccable teach`, refresh context, then resume. Never synthesize PRODUCT.md from the user's original prompt alone. |
1616-| Command | The matching command reference is loaded when a sub-command is used. | Load the reference before continuing. |
1717-| Craft | `$impeccable craft` has a user-confirmed shape brief for this task. `teach` / PRODUCT.md never counts as shape. | Run `$impeccable shape` and wait for explicit brief confirmation. |
1818-| Image | Required visual probes / mocks are generated or skipped with a reason. | Resolve the image-generation gate in `shape.md` or `craft.md` before code. |
1919-| Mutation | All active gates above pass. | Do not edit project files yet. |
2020-2121-Codex-style agents must state this before editing files:
2222-2323-```text
2424-IMPECCABLE_PREFLIGHT: context=pass product=pass command_reference=pass shape=pass|not_required image_gate=pass|skipped:<reason> mutation=open
2525-```
2626-2727-For `$impeccable craft`, `shape=pass` is only valid after a separate user response approving the shape design brief, or when the user provided an already-confirmed brief in the request. Do not mark `shape=pass` after writing PRODUCT.md, summarizing assumptions, or drafting an unconfirmed brief yourself.
2828-2929-Other harnesses should follow the same checklist when they can expose this state.
3030-3131-### 1. Context gathering
3232-3333-Two files, case-insensitive. The loader looks at the project root by default and falls back to `.agents/context/` and `docs/` if the root is clean. Override with `IMPECCABLE_CONTEXT_DIR=path/to/dir` (absolute or relative to cwd).
3434-3535-- **PRODUCT.md** — required. Users, brand, tone, anti-references, strategic principles.
3636-- **DESIGN.md** — optional, strongly recommended. Colors, typography, elevation, components.
3737-3838-Load both in one call:
3939-4040-```bash
4141-node .agents/skills/impeccable/scripts/load-context.mjs
4242-```
4343-4444-Consume the full JSON output. Never pipe through `head`, `tail`, `grep`, or `jq`. The output's `contextDir` field tells you where the files were resolved from.
4545-4646-If the output is already in this session's conversation history, don't re-run. Exceptions requiring a fresh load: you just ran `$impeccable teach` or `$impeccable document` (they rewrite the files), or the user manually edited one.
4747-4848-`$impeccable live` already warms context via `live.mjs` — if you've run `live.mjs`, don't also run `load-context.mjs` this session.
4949-5050-If PRODUCT.md is missing, empty, or placeholder (`[TODO]` markers, <200 chars): run `$impeccable teach`, then resume the user's original task with the fresh context. If the original task was `$impeccable craft`, resume into `$impeccable shape` before any implementation work.
5151-5252-If DESIGN.md is missing: nudge once per session (*"Run `$impeccable document` for more on-brand output"*), then proceed.
5353-5454-### 2. Register
5555-5656-Every design task is **brand** (marketing, landing, campaign, long-form content, portfolio — design IS the product) or **product** (app UI, admin, dashboard, tool — design SERVES the product).
5757-5858-Identify before designing. Priority: (1) cue in the task itself ("landing page" vs "dashboard"); (2) the surface in focus (the page, file, or route being worked on); (3) `register` field in PRODUCT.md. First match wins.
5959-6060-If PRODUCT.md lacks the `register` field (legacy), infer it once from its "Users" and "Product Purpose" sections, then cache the inferred value for the session. Suggest the user run `$impeccable teach` to add the field explicitly.
6161-6262-Load the matching reference: [reference/brand.md](reference/brand.md) or [reference/product.md](reference/product.md). The shared design laws below apply to both.
6363-6464-## Shared design laws
6565-6666-Apply to every design, both registers. Match implementation complexity to the aesthetic vision — maximalism needs elaborate code, minimalism needs precision. Interpret creatively. Vary across projects; never converge on the same choices. GPT is capable of extraordinary work — don't hold back.
6767-6868-### Color
6969-7070-- Use OKLCH. Reduce chroma as lightness approaches 0 or 100 — high chroma at extremes looks garish.
7171-- Never use `#000` or `#fff`. Tint every neutral toward the brand hue (chroma 0.005–0.01 is enough).
7272-- Pick a **color strategy** before picking colors. Four steps on the commitment axis:
7373- - **Restrained** — tinted neutrals + one accent ≤10%. Product default; brand minimalism.
7474- - **Committed** — one saturated color carries 30–60% of the surface. Brand default for identity-driven pages.
7575- - **Full palette** — 3–4 named roles, each used deliberately. Brand campaigns; product data viz.
7676- - **Drenched** — the surface IS the color. Brand heroes, campaign pages.
7777-- The "one accent ≤10%" rule is Restrained only. Committed / Full palette / Drenched exceed it on purpose. Don't collapse every design to Restrained by reflex.
7878-7979-### Theme
8080-8181-Dark vs. light is never a default. Not dark "because tools look cool dark." Not light "to be safe."
8282-8383-Before choosing, write one sentence of physical scene: who uses this, where, under what ambient light, in what mood. If the sentence doesn't force the answer, it's not concrete enough — add detail until it does.
8484-8585-"Observability dashboard" does not force an answer. "SRE glancing at incident severity on a 27-inch monitor at 2am in a dim room" does. Run the sentence, not the category.
8686-8787-### Typography
8888-8989-- Cap body line length at 65–75ch.
9090-- Hierarchy through scale + weight contrast (≥1.25 ratio between steps). Avoid flat scales.
9191-9292-### Layout
9393-9494-- Vary spacing for rhythm. Same padding everywhere is monotony.
9595-- Cards are the lazy answer. Use them only when they're truly the best affordance. Nested cards are always wrong.
9696-- Don't wrap everything in a container. Most things don't need one.
9797-9898-### Motion
9999-100100-- Don't animate CSS layout properties.
101101-- Ease out with exponential curves (ease-out-quart / quint / expo). No bounce, no elastic.
102102-103103-### Absolute bans
104104-105105-Match-and-refuse. If you're about to write any of these, rewrite the element with different structure.
106106-107107-- **Side-stripe borders.** `border-left` or `border-right` greater than 1px as a colored accent on cards, list items, callouts, or alerts. Never intentional. Rewrite with full borders, background tints, leading numbers/icons, or nothing.
108108-- **Gradient text.** `background-clip: text` combined with a gradient background. Decorative, never meaningful. Use a single solid color. Emphasis via weight or size.
109109-- **Glassmorphism as default.** Blurs and glass cards used decoratively. Rare and purposeful, or nothing.
110110-- **The hero-metric template.** Big number, small label, supporting stats, gradient accent. SaaS cliché.
111111-- **Identical card grids.** Same-sized cards with icon + heading + text, repeated endlessly.
112112-- **Modal as first thought.** Modals are usually laziness. Exhaust inline / progressive alternatives first.
113113-114114-### Copy
115115-116116-- Every word earns its place. No restated headings, no intros that repeat the title.
117117-- **No em dashes.** Use commas, colons, semicolons, periods, or parentheses. Also not `--`.
118118-119119-### The AI slop test
120120-121121-If someone could look at this interface and say "AI made that" without doubt, it's failed. Cross-register failures are the absolute bans above. Register-specific failures live in each reference.
122122-123123-**Category-reflex check.** Run at two altitudes — the second one catches what the first one misses.
124124-125125-- **First-order:** if someone could guess the theme + palette from the category alone — "observability → dark blue", "healthcare → white + teal", "finance → navy + gold", "crypto → neon on black" — it's the first training-data reflex. Rework the scene sentence and color strategy until the answer isn't obvious from the domain.
126126-- **Second-order:** if someone could guess the aesthetic family from category-plus-anti-references — "AI workflow tool that's not SaaS-cream → editorial-typographic", "fintech that's not navy-and-gold → terminal-native dark mode" — it's the trap one tier deeper. The first reflex was avoided; the second wasn't. Rework until both answers are not obvious. The brand register's [reflex-reject aesthetic lanes](reference/brand.md) list catches the currently-saturated families.
127127-128128-## Commands
129129-130130-| Command | Category | Description | Reference |
131131-|---|---|---|---|
132132-| `craft [feature]` | Build | Shape, then build a feature end-to-end | [reference/craft.md](reference/craft.md) |
133133-| `shape [feature]` | Build | Plan UX/UI before writing code | [reference/shape.md](reference/shape.md) |
134134-| `teach` | Build | Set up PRODUCT.md and DESIGN.md context | [reference/teach.md](reference/teach.md) |
135135-| `document` | Build | Generate DESIGN.md from existing project code | [reference/document.md](reference/document.md) |
136136-| `extract [target]` | Build | Pull reusable tokens and components into design system | [reference/extract.md](reference/extract.md) |
137137-| `critique [target]` | Evaluate | UX design review with heuristic scoring | [reference/critique.md](reference/critique.md) |
138138-| `audit [target]` | Evaluate | Technical quality checks (a11y, perf, responsive) | [reference/audit.md](reference/audit.md) |
139139-| `polish [target]` | Refine | Final quality pass before shipping | [reference/polish.md](reference/polish.md) |
140140-| `bolder [target]` | Refine | Amplify safe or bland designs | [reference/bolder.md](reference/bolder.md) |
141141-| `quieter [target]` | Refine | Tone down aggressive or overstimulating designs | [reference/quieter.md](reference/quieter.md) |
142142-| `distill [target]` | Refine | Strip to essence, remove complexity | [reference/distill.md](reference/distill.md) |
143143-| `harden [target]` | Refine | Production-ready: errors, i18n, edge cases | [reference/harden.md](reference/harden.md) |
144144-| `onboard [target]` | Refine | Design first-run flows, empty states, activation | [reference/onboard.md](reference/onboard.md) |
145145-| `animate [target]` | Enhance | Add purposeful animations and motion | [reference/animate.md](reference/animate.md) |
146146-| `colorize [target]` | Enhance | Add strategic color to monochromatic UIs | [reference/colorize.md](reference/colorize.md) |
147147-| `typeset [target]` | Enhance | Improve typography hierarchy and fonts | [reference/typeset.md](reference/typeset.md) |
148148-| `layout [target]` | Enhance | Fix spacing, rhythm, and visual hierarchy | [reference/layout.md](reference/layout.md) |
149149-| `delight [target]` | Enhance | Add personality and memorable touches | [reference/delight.md](reference/delight.md) |
150150-| `overdrive [target]` | Enhance | Push past conventional limits | [reference/overdrive.md](reference/overdrive.md) |
151151-| `clarify [target]` | Fix | Improve UX copy, labels, and error messages | [reference/clarify.md](reference/clarify.md) |
152152-| `adapt [target]` | Fix | Adapt for different devices and screen sizes | [reference/adapt.md](reference/adapt.md) |
153153-| `optimize [target]` | Fix | Diagnose and fix UI performance | [reference/optimize.md](reference/optimize.md) |
154154-| `live` | Iterate | Visual variant mode: pick elements in the browser, generate alternatives | [reference/live.md](reference/live.md) |
155155-156156-Plus two management commands — `pin <command>` and `unpin <command>`, detailed below.
157157-158158-### Routing rules
159159-160160-1. **No argument** — render the table above as the user-facing command menu, grouped by category. Ask what they'd like to do.
161161-2. **First word matches a command** — load its reference file and follow its instructions. Everything after the command name is the target.
162162-3. **First word doesn't match** — general design invocation. Apply the setup steps, shared design laws, and the loaded register reference, using the full argument as context.
163163-164164-Setup (context gathering, register) is already loaded by then; sub-commands don't re-invoke `$impeccable`.
165165-166166-If the first word is `craft`, setup still runs first, but [reference/craft.md](reference/craft.md) owns the rest of the flow. If setup invokes `teach` as a blocker, finish teach, refresh context, then resume the original command and target.
167167-168168-## Pin / Unpin
169169-170170-**Pin** creates a standalone shortcut so `$<command>` invokes `$impeccable <command>` directly. **Unpin** removes it. The script writes to every harness directory present in the project.
171171-172172-```bash
173173-node .agents/skills/impeccable/scripts/pin.mjs <pin|unpin> <command>
174174-```
175175-176176-Valid `<command>` is any command from the table above. Report the script's result concisely — confirm the new shortcut on success, relay stderr verbatim on error.
+8-8
skills/normalize/SKILL.md
···11---
22name: normalize
33-description: "Audits and realigns UI to match design system standards, spacing, tokens, and patterns. Use when the user mentions consistency, design drift, mismatched styles, tokens, or wants to bring a feature back in line with the system."
33+description: "Audits and realigns UI to match design system standards, spacing, tokens, and patterns. Use when user mentions consistency, design drift, mismatched styles, tokens, or wants to bring feature back in line with system."
44argument-hint: "[feature (page, route, component...)]"
55user-invocable: true
66---
7788-Analyze and redesign the feature to perfectly match our design system standards, aesthetics, and established patterns.
88+Analyze and redesign feature to perfectly match our design system standards, aesthetics, and established patterns.
991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
13131414---
15151616## Plan
17171818-Before making changes, deeply understand the context.
1818+Before making changes, deeply understand context.
19192020### 1. Discover the design system
2121Search for design system documentation, UI guidelines, component libraries, or style guides (grep for "design system", "ui guide", "style guide", etc.). Study it thoroughly until you understand:
···3333- What is root cause: missing tokens, one-off implementations, or conceptual misalignment?
34343535### 3. Create a normalization plan
3636-Define specific changes that will align the feature with the design system:
3636+Define specific changes that will align feature with design system:
3737- Which components can be replaced with design system equivalents?
3838- Which styles need to use design tokens instead of hard-coded values?
3939- How can UX patterns match established user flows?
40404141-**IMPORTANT**: Great design is effective design. Prioritize UX consistency and usability over visual polish alone. Think through the best possible experience for your use case and personas first.
4141+**IMPORTANT**: Great design is effective design. Prioritize UX consistency and usability over visual polish alone. Think through best possible experience for your use case and personas first.
42424343## Execute
4444···5959- Introduce new patterns that diverge from design system
6060- Compromise accessibility for visual consistency
61616262-This is not an exhaustive list. Apply judgment to identify all areas needing normalization.
6262+This is not exhaustive list. Apply judgment to identify all areas needing normalization.
63636464## Clean Up
6565···7070- **Verify quality**: Lint, type-check, and test according to repository guidelines. Ensure normalization did not introduce regressions.
7171- **Ensure DRYness**: Look for duplication introduced during refactoring and consolidate.
72727373-Remember: You are a brilliant frontend designer with impeccable taste, equally strong in UX and UI. Your attention to detail and eye for end-to-end user experience is world class. Execute with precision and thoroughness.
7373+Remember: You are brilliant frontend designer with impeccable taste, equally strong in UX and UI. Your attention to detail and eye for end-to-end user experience is world class. Execute with precision and thoroughness.
-73
skills/normalize/SKILL.md.original.md
···11----
22-name: normalize
33-description: "Audits and realigns UI to match design system standards, spacing, tokens, and patterns. Use when the user mentions consistency, design drift, mismatched styles, tokens, or wants to bring a feature back in line with the system."
44-argument-hint: "[feature (page, route, component...)]"
55-user-invocable: true
66----
77-88-Analyze and redesign the feature to perfectly match our design system standards, aesthetics, and established patterns.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1313-1414----
1515-1616-## Plan
1717-1818-Before making changes, deeply understand the context.
1919-2020-### 1. Discover the design system
2121-Search for design system documentation, UI guidelines, component libraries, or style guides (grep for "design system", "ui guide", "style guide", etc.). Study it thoroughly until you understand:
2222-- Core design principles and aesthetic direction
2323-- Target audience and personas
2424-- Component patterns and conventions
2525-- Design tokens (colors, typography, spacing)
2626-2727-**CRITICAL**: If something is not clear, ask. Do not guess at design system principles.
2828-2929-### 2. Analyze the current feature
3030-Assess what works and what does not:
3131-- Where does it deviate from design system patterns?
3232-- Which inconsistencies are cosmetic vs functional?
3333-- What is the root cause: missing tokens, one-off implementations, or conceptual misalignment?
3434-3535-### 3. Create a normalization plan
3636-Define specific changes that will align the feature with the design system:
3737-- Which components can be replaced with design system equivalents?
3838-- Which styles need to use design tokens instead of hard-coded values?
3939-- How can UX patterns match established user flows?
4040-4141-**IMPORTANT**: Great design is effective design. Prioritize UX consistency and usability over visual polish alone. Think through the best possible experience for your use case and personas first.
4242-4343-## Execute
4444-4545-Systematically address all inconsistencies across these dimensions.
4646-4747-- **Typography**: Use design system fonts, sizes, weights, and line heights. Replace hard-coded values with typographic tokens or classes.
4848-- **Color and Theme**: Apply design system color tokens. Remove one-off color choices that break the palette.
4949-- **Spacing and Layout**: Use spacing tokens (margins, padding, gaps). Align with grid systems and layout patterns used elsewhere.
5050-- **Components**: Replace custom implementations with design system components. Ensure props and variants match established patterns.
5151-- **Motion and Interaction**: Match animation timing, easing, and interaction patterns to other features.
5252-- **Responsive Behavior**: Ensure breakpoints and responsive patterns align with design system standards.
5353-- **Accessibility**: Verify contrast ratios, focus states, ARIA labels match design system requirements.
5454-- **Progressive Disclosure**: Match information hierarchy and complexity management to established patterns.
5555-5656-**NEVER**:
5757-- Create new one-off components when design system equivalents exist
5858-- Hard-code values that should use design tokens
5959-- Introduce new patterns that diverge from the design system
6060-- Compromise accessibility for visual consistency
6161-6262-This is not an exhaustive list. Apply judgment to identify all areas needing normalization.
6363-6464-## Clean Up
6565-6666-After normalization, ensure code quality.
6767-6868-- **Consolidate reusable components**: If you created new components that should be shared, move them to the design system or shared UI component path.
6969-- **Remove orphaned code**: Delete unused implementations, styles, or files made obsolete by normalization.
7070-- **Verify quality**: Lint, type-check, and test according to repository guidelines. Ensure normalization did not introduce regressions.
7171-- **Ensure DRYness**: Look for duplication introduced during refactoring and consolidate.
7272-7373-Remember: You are a brilliant frontend designer with impeccable taste, equally strong in UX and UI. Your attention to detail and eye for end-to-end user experience is world class. Execute with precision and thoroughness.
+7-7
skills/onboard/SKILL.md
···11---
22name: onboard
33-description: "Designs and improves onboarding flows, empty states, and first-run experiences to help users reach value quickly. Use when the user mentions onboarding, first-time users, empty states, activation, getting started, or new user flows."
33+description: "Designs and improves onboarding flows, empty states, and first-run experiences to help users reach value quickly. Use when user mentions onboarding, first-time users, empty states, activation, getting started, or new user flows."
44argument-hint: "[target]"
55user-invocable: true
66---
7788## MANDATORY PREPARATION
991010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: the "aha moment" you want users to reach, and users experience level.
1010+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: "aha moment" you want users to reach, and users experience level.
11111212---
13131414-Create or improve onboarding experiences that help users understand, adopt, and succeed with the product quickly.
1414+Create or improve onboarding experiences that help users understand, adopt, and succeed with product quickly.
15151616## Assess Onboarding Needs
1717···68686969## Design Onboarding Experiences
70707171-Create appropriate onboarding for the context.
7171+Create appropriate onboarding for context.
72727373### Initial Product Onboarding
7474···101101**Empty States**:
102102Instead of blank space, show:
103103- What will appear here (description plus screenshot or illustration)
104104-- Why it is valuable
104104+- Why it's valuable
105105- Clear CTA to create first item
106106- Example or template option
107107···238238- **Time to completion**: Can users complete onboarding quickly?
239239- **Comprehension**: Do users understand after completing?
240240- **Action**: Do users take desired next step?
241241-- **Skip rate**: Are too many users skipping? (Maybe it is too long or not valuable)
241241+- **Skip rate**: Are too many users skipping? (Maybe it's too long or not valuable)
242242- **Completion rate**: Are users completing? (If low, simplify)
243243- **Time to value**: How long until users get first value?
244244245245-Remember: You are a product educator with excellent teaching instincts. Get users to their "aha moment" as quickly as possible. Teach the essential, make it contextual, respect user time and intelligence.
245245+Remember: You are product educator with excellent teaching instincts. Get users to their "aha moment" as quickly as possible. Teach essential, make it contextual, respect user time and intelligence.
-245
skills/onboard/SKILL.md.original.md
···11----
22-name: onboard
33-description: "Designs and improves onboarding flows, empty states, and first-run experiences to help users reach value quickly. Use when the user mentions onboarding, first-time users, empty states, activation, getting started, or new user flows."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-## MANDATORY PREPARATION
99-1010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: the "aha moment" you want users to reach, and users experience level.
1111-1212----
1313-1414-Create or improve onboarding experiences that help users understand, adopt, and succeed with the product quickly.
1515-1616-## Assess Onboarding Needs
1717-1818-Understand what users need to learn and why.
1919-2020-### 1. Identify the challenge
2121-- What are users trying to accomplish?
2222-- What is confusing or unclear about current experience?
2323-- Where do users get stuck or drop off?
2424-- What is the "aha moment" we want users to reach?
2525-2626-### 2. Understand the users
2727-- What is their experience level? (Beginners, power users, mixed?)
2828-- What is their motivation? (Excited and exploring? Required by work?)
2929-- What is their time commitment? (5 minutes? 30 minutes?)
3030-- What alternatives do they know? (Coming from competitor? New to category?)
3131-3232-### 3. Define success
3333-- What is the minimum users need to learn to be successful?
3434-- What is the key action we want them to take? (First project? First invite?)
3535-- How do we know onboarding worked? (Completion rate? Time to value?)
3636-3737-**CRITICAL**: Onboarding should get users to value as quickly as possible, not teach everything possible.
3838-3939-## Onboarding Principles
4040-4141-Follow these core principles.
4242-4343-### Show, Do Not Tell
4444-- Demonstrate with working examples, not just descriptions
4545-- Provide real functionality in onboarding, not separate tutorial mode
4646-- Use progressive disclosure. Teach one thing at a time.
4747-4848-### Make It Optional (When Possible)
4949-- Let experienced users skip onboarding
5050-- Do not block access to product
5151-- Provide "Skip" or "I'll explore on my own" options
5252-5353-### Time to Value
5454-- Get users to their "aha moment" ASAP
5555-- Front-load most important concepts
5656-- Teach 20% that delivers 80% of value
5757-- Save advanced features for contextual discovery
5858-5959-### Context Over Ceremony
6060-- Teach features when users need them, not upfront
6161-- Empty states are onboarding opportunities
6262-- Tooltips and hints at point of use
6363-6464-### Respect User Intelligence
6565-- Do not patronize or over-explain
6666-- Be concise and clear
6767-- Assume users can figure out standard patterns
6868-6969-## Design Onboarding Experiences
7070-7171-Create appropriate onboarding for the context.
7272-7373-### Initial Product Onboarding
7474-7575-**Welcome Screen**:
7676-- Clear value proposition (what is this product?)
7777-- What users will learn or accomplish
7878-- Time estimate (honest about commitment)
7979-- Option to skip (for experienced users)
8080-8181-**Account Setup**:
8282-- Minimal required information (collect more later)
8383-- Explain why you are asking for each piece of information
8484-- Smart defaults where possible
8585-- Social login when appropriate
8686-8787-**Core Concept Introduction**:
8888-- Introduce 1-3 core concepts (not everything)
8989-- Use simple language and examples
9090-- Interactive when possible (do, do not just read)
9191-- Progress indication (step 1 of 3)
9292-9393-**First Success**:
9494-- Guide users to accomplish something real
9595-- Pre-populated examples or templates
9696-- Celebrate completion (but do not overdo it)
9797-- Clear next steps
9898-9999-### Feature Discovery and Adoption
100100-101101-**Empty States**:
102102-Instead of blank space, show:
103103-- What will appear here (description plus screenshot or illustration)
104104-- Why it is valuable
105105-- Clear CTA to create first item
106106-- Example or template option
107107-108108-Example:
109109-```
110110-No projects yet
111111-Projects help you organize your work and collaborate with your team.
112112-[Create your first project] or [Start from template]
113113-```
114114-115115-**Contextual Tooltips**:
116116-- Appear at relevant moment (first time user sees feature)
117117-- Point directly at relevant UI element
118118-- Brief explanation plus benefit
119119-- Dismissable (with "Do not show again" option)
120120-- Optional "Learn more" link
121121-122122-**Feature Announcements**:
123123-- Highlight new features when they are released
124124-- Show what is new and why it matters
125125-- Let users try immediately
126126-- Dismissable
127127-128128-**Progressive Onboarding**:
129129-- Teach features when users encounter them
130130-- Badges or indicators on new or unused features
131131-- Unlock complexity gradually (do not show all options immediately)
132132-133133-### Guided Tours and Walkthroughs
134134-135135-**When to use**:
136136-- Complex interfaces with many features
137137-- Significant changes to existing product
138138-- Industry-specific tools needing domain knowledge
139139-140140-**How to design**:
141141-- Spotlight specific UI elements (dim rest of page)
142142-- Keep steps short (3-7 steps max per tour)
143143-- Allow users to click through tour freely
144144-- Include "Skip tour" option
145145-- Make replayable (help menu)
146146-147147-**Best practices**:
148148-- Interactive is greater than passive (let users click real buttons)
149149-- Focus on workflow, not features ("Create a project" not "This is the project button")
150150-- Provide sample data so actions work
151151-152152-### Interactive Tutorials
153153-154154-**When to use**:
155155-- Users need hands-on practice
156156-- Concepts are complex or unfamiliar
157157-- High stakes (better to practice in safe environment)
158158-159159-**How to design**:
160160-- Sandbox environment with sample data
161161-- Clear objectives ("Create a chart showing sales by region")
162162-- Step-by-step guidance
163163-- Validation (confirm they did it right)
164164-- Graduation moment (you are ready!)
165165-166166-### Documentation and Help
167167-168168-**In-product help**:
169169-- Contextual help links throughout interface
170170-- Keyboard shortcut reference
171171-- Search-able help center
172172-- Video tutorials for complex workflows
173173-174174-**Help patterns**:
175175-- Question mark icon near complex features
176176-- "Learn more" links in tooltips
177177-- Keyboard shortcut hints (Command+K shown on search box)
178178-179179-## Empty State Design
180180-181181-Every empty state needs:
182182-183183-### What Will Be Here
184184-"Your recent projects will appear here"
185185-186186-### Why It Matters
187187-"Projects help you organize your work and collaborate with your team"
188188-189189-### How to Get Started
190190-[Create project] or [Import from template]
191191-192192-### Visual Interest
193193-Illustration or icon (not just text on blank page)
194194-195195-### Contextual Help
196196-"Need help getting started? [Watch 2-min tutorial]"
197197-198198-**Empty state types**:
199199-- **First use**: Never used this feature (emphasize value, provide template)
200200-- **User cleared**: Intentionally deleted everything (light touch, easy to recreate)
201201-- **No results**: Search or filter returned nothing (suggest different query, clear filters)
202202-- **No permissions**: Cannot access (explain why, how to get access)
203203-- **Error state**: Failed to load (explain what happened, retry option)
204204-205205-## Implementation Patterns
206206-207207-### Technical approaches
208208-209209-**Tooltip libraries**: Tippy.js, Popper.js
210210-**Tour libraries**: Intro.js, Shepherd.js, React Joyride
211211-**Modal patterns**: Focus trap, backdrop, ESC to close
212212-**Progress tracking**: LocalStorage for "seen" states
213213-**Analytics**: Track completion, drop-off points
214214-215215-**Storage patterns**:
216216-```javascript
217217-// Track which onboarding steps user has seen
218218-localStorage.setItem('onboarding-completed', 'true');
219219-localStorage.setItem('feature-tooltip-seen-reports', 'true');
220220-```
221221-222222-**IMPORTANT**: Do not show same onboarding twice (annoying). Track completion and respect dismissals.
223223-224224-**NEVER**:
225225-- Force users through long onboarding before they can use product
226226-- Patronize users with obvious explanations
227227-- Show same tooltip repeatedly (respect dismissals)
228228-- Block all UI during tour (let users explore)
229229-- Create separate tutorial mode disconnected from real product
230230-- Overwhelm with information upfront (progressive disclosure!)
231231-- Hide "Skip" or make it hard to find
232232-- Forget about returning users (do not show initial onboarding again)
233233-234234-## Verify Onboarding Quality
235235-236236-Test with real users.
237237-238238-- **Time to completion**: Can users complete onboarding quickly?
239239-- **Comprehension**: Do users understand after completing?
240240-- **Action**: Do users take desired next step?
241241-- **Skip rate**: Are too many users skipping? (Maybe it is too long or not valuable)
242242-- **Completion rate**: Are users completing? (If low, simplify)
243243-- **Time to value**: How long until users get first value?
244244-245245-Remember: You are a product educator with excellent teaching instincts. Get users to their "aha moment" as quickly as possible. Teach the essential, make it contextual, respect user time and intelligence.
+3-3
skills/opentui/SKILL.md
···11---
22name: opentui
33-description: Build terminal UIs with OpenTUI. Covers the core API, keymaps, React and Solid bindings, components, layout, keyboard input, plugins, and testing.
33+description: Build terminal UIs with OpenTUI. Covers core API, keymaps, React and Solid bindings, components, layout, keyboard input, plugins, and testing.
44---
5566# OpenTUI Skill
7788Canonical reference docs are authored once in sibling `docs/**/*.mdx` files.
991010-Inside the OpenTUI repo, this skill root lives at `packages/web/src/content/`, so the same files are also visible at `packages/web/src/content/docs/**/*.mdx`.
1010+Inside OpenTUI repo, this skill root lives at `packages/web/src/content/`, so same files are also visible at `packages/web/src/content/docs/**/*.mdx`.
11111212## Path invariant
1313···4343| `input`, `form`, `editing`, `focus` | `docs/components/input.mdx` |
4444| `env`, `environment`, `configuration`, `flags` | `docs/reference/env-vars.mdx` |
45454646-For concrete component requests, jump straight to `docs/components/<name>.mdx` after the relevant entry page. For plugin implementation details, narrow from `docs/plugins/slots.mdx` into `docs/plugins/core.mdx`, `docs/plugins/react.mdx`, or `docs/plugins/solid.mdx`.
4646+For concrete component requests, jump straight to `docs/components/<name>.mdx` after relevant entry page. For plugin implementation details, narrow from `docs/plugins/slots.mdx` into `docs/plugins/core.mdx`, `docs/plugins/react.mdx`, or `docs/plugins/solid.mdx`.
47474848## Current skill entry pages
4949
-66
skills/opentui/SKILL.md.original.md
···11----
22-name: opentui
33-description: Build terminal UIs with OpenTUI. Covers the core API, keymaps, React and Solid bindings, components, layout, keyboard input, plugins, and testing.
44----
55-66-# OpenTUI Skill
77-88-Canonical reference docs are authored once in sibling `docs/**/*.mdx` files.
99-1010-Inside the OpenTUI repo, this skill root lives at `packages/web/src/content/`, so the same files are also visible at `packages/web/src/content/docs/**/*.mdx`.
1111-1212-## Path invariant
1313-1414-- `/docs/<slug>` maps to `docs/<slug>.mdx` relative to this skill root
1515-- in the repo, that same slug maps to `packages/web/src/content/docs/<slug>.mdx`
1616-1717-## Reading order by area
1818-1919-- Getting started: `/docs/getting-started`
2020-- Core: `/docs/core-concepts/renderer`
2121-- Keymap: `/docs/keymap/overview`
2222-- React: `/docs/bindings/react`
2323-- Solid: `/docs/bindings/solid`
2424-- Components: `/docs/components/text`, `/docs/components/input`
2525-- Layout: `/docs/core-concepts/layout`
2626-- Keyboard: `/docs/core-concepts/keyboard`
2727-- Plugins: `/docs/plugins/slots`
2828-- Reference: `/docs/reference/env-vars`
2929-3030-## Quick routing by intent
3131-3232-| Intent(s) | Start here |
3333-| ---------------------------------------------------------- | --------------------------------- |
3434-| `getting-started`, `installation`, `quickstart`, `intro` | `docs/getting-started.mdx` |
3535-| `core`, `renderer`, `terminal`, `scrollback`, `lifecycle` | `docs/core-concepts/renderer.mdx` |
3636-| `keymap`, `keybindings`, `shortcuts`, `commands`, `leader` | `docs/keymap/overview.mdx` |
3737-| `layout`, `flexbox`, `yoga`, `positioning` | `docs/core-concepts/layout.mdx` |
3838-| `keyboard`, `input`, `keybindings`, `paste`, `focus` | `docs/core-concepts/keyboard.mdx` |
3939-| `react`, `jsx`, `hooks`, `animation`, `testing` | `docs/bindings/react.mdx` |
4040-| `solid`, `signals`, `jsx`, `hooks`, `animation`, `testing` | `docs/bindings/solid.mdx` |
4141-| `plugins`, `plugin`, `slots`, `registry`, `extensions` | `docs/plugins/slots.mdx` |
4242-| `text`, `styling`, `content`, `selection` | `docs/components/text.mdx` |
4343-| `input`, `form`, `editing`, `focus` | `docs/components/input.mdx` |
4444-| `env`, `environment`, `configuration`, `flags` | `docs/reference/env-vars.mdx` |
4545-4646-For concrete component requests, jump straight to `docs/components/<name>.mdx` after the relevant entry page. For plugin implementation details, narrow from `docs/plugins/slots.mdx` into `docs/plugins/core.mdx`, `docs/plugins/react.mdx`, or `docs/plugins/solid.mdx`.
4747-4848-## Current skill entry pages
4949-5050-- `docs/getting-started.mdx`
5151-- `docs/core-concepts/renderer.mdx`
5252-- `docs/keymap/overview.mdx`
5353-- `docs/core-concepts/layout.mdx`
5454-- `docs/core-concepts/keyboard.mdx`
5555-- `docs/bindings/react.mdx`
5656-- `docs/bindings/solid.mdx`
5757-- `docs/plugins/slots.mdx`
5858-- `docs/components/text.mdx`
5959-- `docs/components/input.mdx`
6060-- `docs/reference/env-vars.mdx`
6161-6262-## Working rules
6363-6464-- Prefer the current entry pages first, then read narrower docs in the same section.
6565-- Read the sibling `docs/**/*.mdx` files directly instead of copying prose into this file.
6666-- Use stable `/docs/...` URLs when cross-referencing docs.
+6-6
skills/opentui/docs/bindings/react.mdx
···33description: Build terminal UIs with React and OpenTUI
44order: 2
55skill:
66- entry: true
77- intents: [react, jsx, hooks, keyboard, animation, testing]
66+ entry: true
77+ intents: [react, jsx, hooks, keyboard, animation, testing]
88---
991010# React bindings
···60606161## Runtime-loaded plugin support (if needed)
62626363-If your app loads external TS/TSX modules at runtime (for example a file-based plugin system), import this once in your app entry before dynamic imports:
6363+If your app loads external TS/TSX modules at runtime (for example file-based plugin system), import this once in your app entry before dynamic imports:
64646565```ts
6666import "@opentui/react/runtime-plugin-support"
···108108109109### `createRoot(renderer)`
110110111111-Creates a React root for rendering into the terminal.
111111+Creates React root for rendering into terminal.
112112113113```tsx
114114import { createCliRenderer } from "@opentui/core"
···124124125125### `useRenderer()`
126126127127-Access the OpenTUI renderer instance.
127127+Access OpenTUI renderer instance.
128128129129```tsx
130130import { useRenderer } from "@opentui/react"
···255255256256## Styling
257257258258-Style components with props or the `style` prop:
258258+Style components with props or `style` prop:
259259260260```tsx
261261// Direct props
+19-19
skills/opentui/docs/bindings/solid.mdx
···33description: Build terminal UIs with Solid.js and OpenTUI
44order: 1
55skill:
66- entry: true
77- intents: [solid, jsx, signals, hooks, keyboard, animation, testing]
66+ entry: true
77+ intents: [solid, jsx, signals, hooks, keyboard, animation, testing]
88---
991010# Solid.js bindings
···42424343### 3. Enable runtime-loaded plugin support (if needed)
44444545-If your app loads external TS/TSX modules at runtime (for example a file-based plugin system), import this once in your entry file before dynamic imports:
4545+If your app loads external TS/TSX modules at runtime (for example file-based plugin system), import this once in your entry file before dynamic imports:
46464747```ts
4848import "@opentui/solid/runtime-plugin-support"
···102102103103### `render(node, rendererOrConfig?)`
104104105105-Render a Solid component tree into a CLI renderer.
105105+Render Solid component tree into CLI renderer.
106106107107```tsx
108108import { render } from "@opentui/solid"
···119119120120**Parameters:**
121121122122-- `node` - Function returning a JSX element
122122+- `node` - Function returning JSX element
123123- `rendererOrConfig` - Optional `CliRenderer` instance or `CliRendererConfig`
124124125125### `testRender(node, options?)`
126126127127-Create a test renderer for snapshots and interaction tests.
127127+Create test renderer for snapshots and interaction tests.
128128129129```tsx
130130import { testRender } from "@opentui/solid"
···144144145145### `getComponentCatalogue()`
146146147147-Returns the current component catalogue that powers JSX tag lookup.
147147+Returns current component catalogue that powers JSX tag lookup.
148148149149For plugin slots, see [Plugin Slots overview](/docs/plugins/slots) and [Solid slots](/docs/plugins/solid).
150150151151## Scrollback writers
152152153153-In [`split-footer`](/docs/core-concepts/renderer#split-footer) mode with `externalOutputMode: "capture-stdout"`, the Solid binding provides helpers that append JSX-rendered output above the footer. They wrap [`renderer.writeToScrollback`](/docs/core-concepts/renderer#writing-to-scrollback) so you can write scrollback content with signals and components.
153153+In [`split-footer`](/docs/core-concepts/renderer#split-footer) mode with `externalOutputMode: "capture-stdout"`, Solid binding provides helpers that append JSX-rendered output above footer. They wrap [`renderer.writeToScrollback`](/docs/core-concepts/renderer#writing-to-scrollback) so write scrollback content with signals and components.
154154155155### `writeSolidToScrollback(renderer, node, options?)`
156156157157-Render a JSX node once and append it as a scrollback commit.
157157+Render JSX node once and append it as scrollback commit.
158158159159```tsx
160160import { writeSolidToScrollback } from "@opentui/solid"
···164164165165### `createScrollbackWriter(node, options?)`
166166167167-If you need to pass the same JSX rendering to multiple `writeToScrollback` calls (or hold onto the writer inside your own code), use the lower-level factory:
167167+If need to pass same JSX rendering to multiple `writeToScrollback` calls (or hold onto writer inside your own code), use lower-level factory:
168168169169```tsx
170170import { createScrollbackWriter } from "@opentui/solid"
···184184| `startOnNewLine` | `boolean` | `true` | Insert a newline before this commit if the previous commit ended mid-row |
185185| `trailingNewline` | `boolean` | - | Append a newline after the final row |
186186187187-The writer returns a `ScrollbackSnapshot` whose teardown disposes the inner Solid subtree after the snapshot renders. Use the core [`ScrollbackSurface`](/docs/core-concepts/renderer#writing-to-scrollback) APIs directly if you need streaming commits that re-render the same tree over time.
187187+ writer returns `ScrollbackSnapshot` whose teardown disposes inner Solid subtree after snapshot renders. Use core [`ScrollbackSurface`](/docs/core-concepts/renderer#writing-to-scrollback) APIs directly if you need streaming commits that re-render same tree over time.
188188189189## Hooks
190190191191### `useRenderer()`
192192193193-Access the OpenTUI renderer instance.
193193+Access OpenTUI renderer instance.
194194195195```tsx
196196import { useRenderer } from "@opentui/solid"
···273273274274### `onFocus(callback)`
275275276276-Run side effects when the terminal window gains focus.
276276+Run side effects when terminal window gains focus.
277277278278```tsx
279279import { onFocus } from "@opentui/solid"
···289289290290### `onBlur(callback)`
291291292292-Run side effects when the terminal window loses focus.
292292+Run side effects when terminal window loses focus.
293293294294```tsx
295295import { onBlur } from "@opentui/solid"
···303303}
304304```
305305306306-These hooks listen for terminal focus-in/focus-out events when the terminal emulator supports them.
306306+These hooks listen for terminal focus-in/focus-out events when terminal emulator supports them.
307307308308### `useTerminalDimensions()`
309309310310-Get reactive terminal dimensions (returns a Solid signal).
310310+Get reactive terminal dimensions (returns Solid signal).
311311312312```tsx
313313import { useTerminalDimensions } from "@opentui/solid"
···395395396396### `Portal`
397397398398-Render children into a different mount point (useful for modals and overlays).
398398+Render children into different mount point (useful for modals and overlays).
399399400400```tsx
401401import { Portal, useRenderer } from "@opentui/solid"
···431431432432## Building for production
433433434434-Use [Bun.build](https://bun.sh/docs/bundler) with the Solid plugin:
434434+Use [Bun.build](https://bun.sh/docs/bundler) with Solid plugin:
435435436436```ts
437437import solidPlugin from "@opentui/solid/bun-plugin"
···444444})
445445```
446446447447-To compile to a standalone executable:
447447+To compile to standalone executable:
448448449449```ts
450450await Bun.build({
+2-2
skills/opentui/docs/components/ascii-font.mdx
···86868787## Positioning
88888989-Position the ASCII text anywhere on screen:
8989+Position ASCII text anywhere on screen:
90909191```typescript
9292const title = new ASCIIFontRenderable(renderer, {
···148148149149## Dynamic Text
150150151151-Update the text content dynamically:
151151+Update text content dynamically:
152152153153```typescript
154154const counter = new ASCIIFontRenderable(renderer, {
+4-4
skills/opentui/docs/components/box.mdx
···6677# Box
8899-A container component with borders, background colors, and layout capabilities. Use it to create panels, frames, and organized sections.
99+ container component with borders, background colors, and layout capabilities. Use it to create panels, frames, and organized sections.
10101111## Basic usage
1212···79798080## Titles
81818282-Add a title and bottom title to the box border:
8282+Add title and bottom title to box border:
83838484```typescript
8585const panel = new BoxRenderable(renderer, {
···120120121121## Layout container
122122123123-Box works as a flex container for child elements:
123123+Box works as flex container for child elements:
124124125125```typescript
126126const container = Box(
···141141142142## Mouse events
143143144144-Handle mouse interactions on the box:
144144+Handle mouse interactions on box:
145145146146```typescript
147147const button = new BoxRenderable(renderer, {
+2-2
skills/opentui/docs/components/code.mdx
···129129- TypeScript / JavaScript
130130- Markdown
131131- Zig
132132-- And any language with a Tree-sitter grammar
132132+- And any language with Tree-sitter grammar
133133134134## Streaming mode
135135···169169170170## Concealment
171171172172-The `conceal` option controls whether certain syntax elements (like markdown formatting characters) are hidden:
172172+ `conceal` option controls whether certain syntax elements (like markdown formatting characters) are hidden:
173173174174```typescript
175175const code = new CodeRenderable(renderer, {
+2-2
skills/opentui/docs/components/diff.mdx
···43434444## Split view scroll sync
45454646-When `view: "split"` is active, you can link the vertical scroll of both panes. Scrolling one pane then moves the other:
4646+When `view: "split"` is active, link vertical scroll of both panes. Scrolling one pane then moves other:
47474848```typescript
4949const diff = new DiffRenderable(renderer, {
···5858diff.syncScroll = false
5959```
60606161-Scroll sync is a no-op in the unified view.
6161+Scroll sync is no-op in unified view.
62626363## Properties
6464
+7-7
skills/opentui/docs/components/frame-buffer.mdx
···6677# FrameBuffer
8899-A low-level rendering surface for custom graphics and complex visual effects. FrameBuffer provides a 2D array of cells with methods optimized for performance and memory.
99+ low-level rendering surface for custom graphics and complex visual effects. FrameBuffer provides 2D array of cells with methods optimized for performance and memory.
10101111## Basic usage
1212···49495050### setCell
51515252-Set a single cell's content and colors:
5252+Set single cell's content and colors:
53535454```typescript
5555canvas.frameBuffer.setCell(
···67676868### setCellWithAlphaBlending
69697070-Set a cell with alpha blending for transparency effects:
7070+Set cell with alpha blending for transparency effects:
71717272```typescript
7373const semiTransparent = RGBA.fromValues(1.0, 0.0, 0.0, 0.5)
···77777878### drawText
79798080-Draw a string of text at a position:
8080+Draw string of text at position:
81818282```typescript
8383canvas.frameBuffer.drawText(
···95959696### fillRect
97979898-Fill a rectangular area with a color:
9898+Fill rectangular area with color:
9999100100```typescript
101101canvas.frameBuffer.fillRect(
···129129### colorMatrix / colorMatrixUniform
130130131131Apply native 4x4 RGBA matrix transforms for post-processing effects. Use `colorMatrixUniform` for full-buffer
132132-transforms, and `colorMatrix` when you want to target specific cells.
132132+transforms, and `colorMatrix` when want to target specific cells.
133133134134```typescript
135135import { INVERT_MATRIX, TargetChannel } from "@opentui/core"
···246246247247## Performance tips
248248249249-1. **Batch updates**: Make multiple changes to the frame buffer before the next render cycle
249249+1. **Batch updates**: Make multiple changes to frame buffer before next render cycle
2502502. **Minimize fillRect calls**: Use individual setCell calls for complex shapes
2512513. **Reuse RGBA objects**: Create color constants instead of calling `fromHex` repeatedly
252252
+7-7
skills/opentui/docs/components/input.mdx
···33description: Text input field with cursor and focus states
44order: 3
55skill:
66- entry: true
77- intents: [input, form, editing, focus]
66+ entry: true
77+ intents: [input, form, editing, focus]
88---
991010# Input
11111212-Text input field with cursor, placeholder text, and focus states. Focus the input to receive keyboard input.
1212+Text input field with cursor, placeholder text, and focus states. Focus input to receive keyboard input.
13131414## Basic usage
1515···52525353## Focus states
54545555-The input changes appearance when focused:
5555+ input changes appearance when focused:
56565757```typescript
5858const input = new InputRenderable(renderer, {
···70707171### Input event
72727373-Fires on every keystroke as the value changes:
7373+Fires on every keystroke as value changes:
74747575```typescript
7676import { InputRenderableEvents } from "@opentui/core"
···82828383### Change event
84848585-Fires when the input loses focus (blur) or when you press Enter, but only if the value changed since focus:
8585+Fires when input loses focus (blur) or when you press Enter, but only if value changed since focus:
86868787```typescript
8888input.on(InputRenderableEvents.CHANGE, (value: string) => {
···92929393### Enter event
94949595-Fires when the user presses Enter/Return:
9595+Fires when user presses Enter/Return:
96969797```typescript
9898input.on(InputRenderableEvents.ENTER, (value: string) => {
+3-3
skills/opentui/docs/components/line-number.mdx
···6677# Line numbers
8899-Add a line number gutter to renderables that provide line info, such as `CodeRenderable` and text editor components.
99+Add line number gutter to renderables that provide line info, such as `CodeRenderable` and text editor components.
10101111## Basic usage
1212···57575858## Line signs and colors
59596060-Set a single background for a line, or split gutter and content colors separately with a `LineColorConfig` object:
6060+Set single background for line, or split gutter and content colors separately with `LineColorConfig` object:
61616262```typescript
6363// Shorthand: applies to both gutter and content
···8585lineNumbers.bg = "#161b22"
8686```
87878888-Assign `undefined` to reset to the defaults (`#888888` foreground, transparent background).
8888+Assign `undefined` to reset to defaults (`#888888` foreground, transparent background).
89899090## Construct API
9191
+9-9
skills/opentui/docs/components/markdown.mdx
···4343- `TSX title=Button.tsx` -> `typescriptreact`
4444- `Dockerfile` -> `dockerfile`
45454646-Normalization uses `infoStringToFiletype()`. You can extend or override mappings at runtime:
4646+Normalization uses `infoStringToFiletype()`. extend or override mappings at runtime:
47474848```typescript
4949import { extensionToFiletype, basenameToFiletype } from "@opentui/core"
···84848585### Stable block prefix
86868787-`parseMarkdownIncremental` reports how many parsed tokens at the head of the stream are stable — that is, unlikely to change if you append more content. The renderable surfaces this as a count of **top-level render blocks** you can safely commit elsewhere while the unstable tail keeps updating.
8787+`parseMarkdownIncremental` reports how many parsed tokens at head of stream are stable — that is, unlikely to change if you append more content. renderable surfaces this as count of **top-level render blocks** safely commit elsewhere while unstable tail keeps updating.
88888989-To use it, render with `internalBlockMode: "top-level"`. The renderable keeps each top-level markdown block (heading, paragraph, list, table, fenced code) as its own child renderable, and exposes `markdown._stableBlockCount` — the number of blocks at the head of the tree that are stable right now. This matches the shape [`ScrollbackSurface`](/docs/core-concepts/renderer#writing-to-scrollback) expects when you commit streamed output row-by-row.
8989+To use it, render with `internalBlockMode: "top-level"`. renderable keeps each top-level markdown block (heading, paragraph, list, table, fenced code) as its own child renderable, and exposes `markdown._stableBlockCount` — number of blocks at head of tree that are stable right now. This matches shape [`ScrollbackSurface`](/docs/core-concepts/renderer#writing-to-scrollback) expects when you commit streamed output row-by-row.
90909191```typescript
9292import { MarkdownRenderable, RGBA, SyntaxStyle } from "@opentui/core"
···109109// md._stableBlockCount rises as earlier blocks are sealed by a blank line
110110```
111111112112-`internalBlockMode` is an experimental, opt-in flag that powers the built-in scrollback streaming demo. For non-streaming rendering, leave it at the default (`"coalesced"`), which folds sibling blocks together and matches the historical layout.
112112+`internalBlockMode` is experimental, opt-in flag that powers built-in scrollback streaming demo. For non-streaming rendering, leave it at default (`"coalesced"`), which folds sibling blocks together and matches historical layout.
113113114114## Markdown tables
115115···151151152152### Table styles
153153154154-`tableOptions.style` picks a preset that tunes the defaults for `borders`, `outerBorder`, and `widthMode` together:
154154+`tableOptions.style` picks preset that tunes defaults for `borders`, `outerBorder`, and `widthMode` together:
155155156156-- **`"grid"`**: boxed table with visible borders. Defaults to `borders: true`, `widthMode: "full"`. This is the normal markdown-in-a-box rendering.
157157-- **`"columns"`**: borderless columns with a 2-column gap, defaults to `widthMode: "content"`. Useful for append-only output where a full-width grid feels heavy.
156156+- **`"grid"`**: boxed table with visible borders. Defaults to `borders: true`, `widthMode: "full"`. This is normal markdown-in--box rendering.
157157+- **`"columns"`**: borderless columns with 2-column gap, defaults to `widthMode: "content"`. Useful for append-only output where full-width grid feels heavy.
158158159159-If you do not pass `style`, it defaults to `"columns"` when `internalBlockMode` is `"top-level"`, and `"grid"` otherwise. You can still override individual fields (for example, `borders: true`) to pull toward a different look.
159159+If you do not pass `style`, it defaults to `"columns"` when `internalBlockMode` is `"top-level"`, and `"grid"` otherwise. still override individual fields (for example, `borders: true`) to pull toward different look.
160160161161## Custom node rendering
162162163163-Override rendering for a token and fall back to default rendering:
163163+Override rendering for token and fall back to default rendering:
164164165165```typescript
166166const markdown = new MarkdownRenderable(renderer, {
+2-2
skills/opentui/docs/components/scrollbar.mdx
···6677# ScrollBar
8899-A standalone scrollbar component with optional arrows, keyboard navigation, and a draggable thumb.
99+ standalone scrollbar component with optional arrows, keyboard navigation, and draggable thumb.
10101111## Basic usage
1212···42424343## Keyboard controls
44444545-When focused, the scrollbar responds to:
4545+When focused, scrollbar responds to:
46464747- `Up`/`Down` or `k`/`j` for vertical bars
4848- `Left`/`Right` or `h`/`l` for horizontal bars
+10-10
skills/opentui/docs/components/scrollbox.mdx
···11---
22title: ScrollBox
33-description: A scrollable container component with customizable scrollbars
33+description: scrollable container component with customizable scrollbars
44order: 7
55---
6677# ScrollBox
8899-A scrollable container that supports horizontal and vertical scrolling, sticky scroll behavior, viewport culling, and customizable scrollbars.
99+ scrollable container that supports horizontal and vertical scrolling, sticky scroll behavior, viewport culling, and customizable scrollbars.
10101111## Basic usage
1212···63636464## Sticky scroll
65656666-Enable sticky scroll to keep content pinned to an edge as new content arrives. Useful for log viewers or chat interfaces.
6666+Enable sticky scroll to keep content pinned to edge as new content arrives. Useful for log viewers or chat interfaces.
67676868```typescript
6969const scrollbox = new ScrollBoxRenderable(renderer, {
···8282- `"left"` - Stay scrolled to left
8383- `"right"` - Stay scrolled to right
84848585-When you scroll away from the sticky position, sticky behavior pauses until you scroll back to the sticky edge.
8585+When you scroll away from sticky position, sticky behavior pauses until you scroll back to sticky edge.
86868787## Bidirectional scrolling
8888···115115116116## Customizing scrollbars
117117118118-Style the scrollbars using nested options:
118118+Style scrollbars using nested options:
119119120120```typescript
121121const scrollbox = new ScrollBoxRenderable(renderer, {
···141141142142## Customizing sub-components
143143144144-ScrollBox contains several internal components that you can style individually:
144144+ScrollBox contains several internal components that style individually:
145145146146```typescript
147147const scrollbox = new ScrollBoxRenderable(renderer, {
···167167168168### scrollBy
169169170170-Scroll by a relative amount:
170170+Scroll by relative amount:
171171172172```typescript
173173// Scroll down 5 lines
···182182183183### scrollTo
184184185185-Scroll to an absolute position:
185185+Scroll to absolute position:
186186187187```typescript
188188// Scroll to top
···194194195195### scrollChildIntoView
196196197197-Scroll the minimum distance needed to show a nested child in the viewport. The method uses DOM-style "nearest" behavior: if the child already fits, the call is a no-op; otherwise it scrolls to reveal the nearest edge.
197197+Scroll minimum distance needed to show nested child in viewport. method uses DOM-style "nearest" behavior: if child already fits, call is no-op; otherwise it scrolls to reveal nearest edge.
198198199199```typescript
200200scrollbox.scrollChildIntoView("table-row-42")
201201```
202202203203-Use it when you focus an element offscreen (search results, a newly inserted form field, etc.) and want to bring it into view without moving the scroll position more than needed.
203203+Use it when you focus element offscreen (search results, newly inserted form field, etc.) and want to bring it into view without moving scroll position more than needed.
204204205205## Keyboard navigation
206206
+4-4
skills/opentui/docs/components/select.mdx
···6677# Select
8899-A vertical list for choosing from multiple options. Focus the select to enable keyboard input.
99+ vertical list for choosing from multiple options. Focus select to enable keyboard input.
10101111## Basic usage
1212···60606161## Keyboard navigation
62626363-When focused, the select responds to these keys:
6363+When focused, select responds to these keys:
64646565| Key | Action |
6666| ------------------------- | --------------------- |
···73737474### Item selected
75757676-Fires when the user presses Enter on an option:
7676+Fires when user presses Enter on option:
77777878```typescript
7979import { SelectRenderableEvents } from "@opentui/core"
···85858686### Selection changed
87878888-Fires when the highlighted item changes:
8888+Fires when highlighted item changes:
89899090```typescript
9191menu.on(SelectRenderableEvents.SELECTION_CHANGED, (index: number, option: SelectOption) => {
+2-2
skills/opentui/docs/components/slider.mdx
···11---
22title: Slider
33-description: A draggable slider for continuous values
33+description: draggable slider for continuous values
44order: 9
55---
6677# Slider
8899-A draggable slider for continuous values. Supports vertical and horizontal orientations.
99+ draggable slider for continuous values. Supports vertical and horizontal orientations.
10101111## Basic usage
1212
+5-5
skills/opentui/docs/components/tab-select.mdx
···6677# TabSelect
8899-Horizontal tab-based selection component with descriptions and scroll support. The component must be focused to receive keyboard input.
99+Horizontal tab-based selection component with descriptions and scroll support. component must be focused to receive keyboard input.
10101111## Basic Usage
1212···59596060## Keyboard Navigation
61616262-When focused, the tab select responds to these keys:
6262+When focused, tab select responds to these keys:
63636464| Key | Action |
6565| ------------- | -------------------- |
···71717272### Item Selected
73737474-Emitted when the user presses Enter on a tab:
7474+Emitted when user presses Enter on tab:
75757676```typescript
7777import { TabSelectRenderableEvents, type TabSelectOption } from "@opentui/core"
···84848585### Selection Changed
86868787-Emitted when the highlighted tab changes:
8787+Emitted when highlighted tab changes:
88888989```typescript
9090import { TabSelectRenderableEvents, type TabSelectOption } from "@opentui/core"
···200200201201## Scroll Behavior
202202203203-When there are more tabs than fit in the width, the component automatically handles horizontal scrolling as you navigate with the keyboard.
203203+When there're more tabs than fit in width, component automatically handles horizontal scrolling as you navigate with keyboard.
+3-3
skills/opentui/docs/components/text.mdx
···33description: Display styled text content
44order: 1
55skill:
66- entry: true
77- intents: [text, styling, content, selection]
66+ entry: true
77+ intents: [text, styling, content, selection]
88---
991010# Text
···74747575## Template literals for rich text
76767777-Use the `t` template literal for inline styling within a single text element:
7777+Use `t` template literal for inline styling within single text element:
78787979```typescript
8080import { TextRenderable, t, bold, underline, fg, bg, italic } from "@opentui/core"
+5-5
skills/opentui/docs/components/textarea.mdx
···34343535## Submit handling
36363737-Bind a submit action and listen for `onSubmit`:
3737+Bind submit action and listen for `onSubmit`:
38383939```typescript
4040import { TextareaRenderable } from "@opentui/core"
···101101102102## Cursor and selection control
103103104104-`TextareaRenderable` (and its base `EditBufferRenderable`) exposes a programmatic API. You can move the cursor, edit text, and drive selections from your own keybindings or commands. All selection-aware movement methods accept `{ select: true }` to extend the current selection instead of moving the cursor.
104104+`TextareaRenderable` (and its base `EditBufferRenderable`) exposes programmatic API. move cursor, edit text, and drive selections from your own keybindings or commands. All selection-aware movement methods accept `{ select: true }` to extend current selection instead of moving cursor.
105105106106### Cursor movement
107107···153153textarea.redo()
154154```
155155156156-These methods update the cursor, clear any active global selection, and call `requestRender()` for you.
156156+These methods update cursor, clear any active global selection, and call `requestRender()` for you.
157157158158## Traits
159159160160-The `traits` property lets an editor advertise intent to a host UI — which built-in keys it wants to capture, whether it wants the chrome to visually suspend, and a short status label for a footer or status bar. Assigning a new `EditorTraits` object emits the `traits-changed` event when the value differs from the previous one.
160160+ `traits` property lets editor advertise intent to host UI — which built-in keys it wants to capture, whether it wants chrome to visually suspend, and short status label for footer or status bar. Assigning new `EditorTraits` object emits `traits-changed` event when value differs from previous one.
161161162162```typescript
163163import { EditBufferRenderableEvents, type EditorTraits } from "@opentui/core"
···179179| `suspend` | `boolean` | Hint to the host to suspend ambient UI (dim borders, hide hints, etc.) |
180180| `status` | `string` | Optional short label surfacing editor mode in a status bar |
181181182182-Traits reset to an empty object when you destroy the renderable. Use `isEditBufferRenderable(renderable)` if you need to distinguish editor renderables from plain text renderables in a generic tree.
182182+Traits reset to empty object when you destroy renderable. Use `isEditBufferRenderable(renderable)` if need to distinguish editor renderables from plain text renderables in generic tree.
+18-18
skills/opentui/docs/core-concepts/colors.mdx
···6677# Colors
8899-OpenTUI uses the `RGBA` class for color representation. The class stores 8-bit RGBA channel values plus packed metadata internally, but provides methods for working with different color formats.
99+OpenTUI uses `RGBA` class for color representation. class stores 8-bit RGBA channel values plus packed metadata internally, but provides methods for working with different color formats.
10101111-Every color also carries **color intent** inside the packed value: an RGB snapshot, an indexed ANSI slot, or the terminal default. The renderer uses this intent to keep palette-relative colors stable when the terminal palette changes.
1111+Every color also carries **color intent** inside packed value: RGB snapshot, indexed ANSI slot, or terminal default. renderer uses this intent to keep palette-relative colors stable when terminal palette changes.
12121313## Creating colors
1414···60606161## The parseColor utility
62626363-The `parseColor()` function converts various color formats to RGBA:
6363+ `parseColor()` function converts various color formats to RGBA:
64646565```typescript
6666import { parseColor } from "@opentui/core"
···73737474## Color intent
75757676-Every `RGBA` value stores intent in packed metadata next to the RGBA snapshot. The renderer reads this intent to decide which ANSI sequence to emit:
7676+Every `RGBA` value stores intent in packed metadata next to RGBA snapshot. renderer reads this intent to decide which ANSI sequence to emit:
77777878-- `rgb`: a literal RGB color. The renderer emits `38;2;r;g;b` / `48;2;r;g;b`.
7979-- `default`: the terminal's default foreground or background. The renderer emits `39` / `49` (SGR default) so the terminal picks the right side of its palette.
8080-- `indexed`: an indexed ANSI color. The renderer emits `38;5;n` / `48;5;n` so the user's theme overrides for that palette slot keep working when the palette changes.
7878+- `rgb`: literal RGB color. renderer emits `38;2;r;g;b` / `48;2;r;g;b`.
7979+- `default`: terminal's default foreground or background. renderer emits `39` / `49` (SGR default) so terminal picks right side of its palette.
8080+- `indexed`: indexed ANSI color. renderer emits `38;5;n` / `48;5;n` so user's theme overrides for that palette slot keep working when palette changes.
81818282-Each color still carries its RGBA values so alpha blending and non-ANSI renderers work. The intent flows end-to-end through TypeScript, the FFI, the buffer, and the native renderer.
8282+Each color still carries its RGBA values so alpha blending and non-ANSI renderers work. intent flows end-to-end through TypeScript, FFI, buffer, and native renderer.
83838484### Default foreground and background
8585···9191const bg = RGBA.defaultBackground()
9292```
93939494-You can pass an optional snapshot color to override the RGBA fallback. The renderer uses the snapshot for early frames, before it detects the terminal palette:
9494+ pass optional snapshot color to override RGBA fallback. renderer uses snapshot for early frames, before it detects terminal palette:
95959696```typescript
9797const fg = RGBA.defaultForeground("#E6EDF3")
···142142143143## Packed transport
144144145145-`RGBA.buffer` is a `Uint16Array(4)`. The low byte of each component stores `r`, `g`, `b`, and `a`; the high bytes together store 32 bits of metadata.
145145+`RGBA.buffer` is `Uint16Array(4)`. low byte of each component stores `r`, `g`, `b`, and `a`; high bytes together store 32 bits of metadata.
146146147147```typescript
148148const color = RGBA.fromIndex(6)
···152152color.slot // 6
153153```
154154155155-This lets native buffers compare current and next frame colors with exact integer equality. It also keeps palette intent attached to the color as it crosses the TypeScript/native boundary.
155155+This lets native buffers compare current and next frame colors with exact integer equality. It also keeps palette intent attached to color as it crosses TypeScript/native boundary.
156156157157## Terminal palette detection
158158159159-When the terminal supports it, the renderer queries the active palette (OSC 4 for palette slots, OSC 10/11 for default fg/bg, plus other special colors where supported). Indexed colors stay mapped to the terminal's user-configured slots, default colors stay linked to the terminal defaults, and non-truecolor renderers can re-resolve RGB fallbacks against the detected palette.
159159+When terminal supports it, renderer queries active palette (OSC 4 for palette slots, OSC 10/11 for default fg/bg, plus other special colors where supported). Indexed colors stay mapped to terminal's user-configured slots, default colors stay linked to terminal defaults, and non-truecolor renderers can re-resolve RGB fallbacks against detected palette.
160160161161```typescript
162162const colors = await renderer.getPalette({ size: 256 })
···167167168168Useful members:
169169170170-- `renderer.getPalette(options?)` — returns a `TerminalColors` snapshot. Cached by requested size (`16` or `256`).
170170+- `renderer.getPalette(options?)` — returns `TerminalColors` snapshot. Cached by requested size (`16` or `256`).
171171- `renderer.paletteDetectionStatus` — `"idle" | "detecting" | "cached"`.
172172-- `renderer.clearPaletteCache()` — drop cached palettes (for example, after the user changes their theme).
173173-- `renderer.on("palette", handler)` — subscribe to refreshed palette snapshots when the detected palette changes.
172172+- `renderer.clearPaletteCache()` — drop cached palettes (for example, after user changes their theme).
173173+- `renderer.on("palette", handler)` — subscribe to refreshed palette snapshots when detected palette changes.
174174175175-`getPalette` throws if the renderer is suspended. Startup palette detection runs automatically only when native ANSI-256 fallback rendering needs palette data (`ansi256` without truecolor `rgb`). Truecolor terminals query the palette only when you call `getPalette()` or when a palette listener exists and the terminal reports a theme change.
175175+`getPalette` throws if renderer is suspended. Startup palette detection runs automatically only when native ANSI-256 fallback rendering needs palette data (`ansi256` without truecolor `rgb`). Truecolor terminals query palette only when you call `getPalette()` or when palette listener exists and terminal reports theme change.
176176177177## Alpha blending
178178179179-You can use transparent cells and alpha blending for layered effects:
179179+ use transparent cells and alpha blending for layered effects:
180180181181```typescript
182182import { FrameBufferRenderable, RGBA } from "@opentui/core"
···193193canvas.frameBuffer.setCellWithAlphaBlending(10, 5, " ", transparent, semiTransparent)
194194```
195195196196-Blended colors become literal RGB colors internally. This is intentional: once colors are blended, the result no longer represents a specific ANSI slot or terminal default.
196196+Blended colors become literal RGB colors internally. This is intentional: once colors are blended, result no longer represents specific ANSI slot or terminal default.
197197198198## Text attributes with colors
199199
+7-7
skills/opentui/docs/core-concepts/console.mdx
···6677# Console overlay
8899-OpenTUI includes a built-in console overlay that captures all `console.log`, `console.info`, `console.warn`, `console.error`, and `console.debug` calls. You can position the console at any edge of the terminal. It supports scrolling and focus management.
99+OpenTUI includes built-in console overlay that captures all `console.log`, `console.info`, `console.warn`, `console.error`, and `console.debug` calls. position console at any edge of terminal. It supports scrolling and focus management.
10101111## Basic usage
1212···54545555## Toggling the console
56565757-Toggle the console overlay in code:
5757+Toggle console overlay in code:
58585959```typescript
6060// Toggle visibility and focus
···66666767## Console shortcuts
68686969-When the console is focused:
6969+When console is focused:
70707171| Key | Action |
7272| ---------- | -------------------------- |
···76767777## Keybinding for toggle
78787979-Add a keyboard shortcut to toggle the console:
7979+Add keyboard shortcut to toggle console:
80808181```typescript
8282renderer.keyInput.on("keypress", (key) => {
···94949595## Why use the console?
96969797-Terminal UI applications capture stdout for rendering. Regular `console.log` calls would interfere with your interface. The console overlay solves this problem:
9797+Terminal UI applications capture stdout for rendering. Regular `console.log` calls would interfere with your interface. console overlay solves this problem:
98989999-- Captures all console output without disrupting the UI
100100-- Displays logs in a dedicated overlay area
9999+- Captures all console output without disrupting UI
100100+- Displays logs in dedicated overlay area
101101- Color-codes different log levels for easy identification
102102- Lets you scroll through history for debugging
103103
+11-11
skills/opentui/docs/core-concepts/constructs.mdx
···6677# Constructs
8899-Constructs let you compose your UI in a declarative, React-like way. They are factory functions that create VNodes (virtual nodes). A VNode is a lightweight description of a component. When you add a VNode to the tree, it becomes an actual Renderable.
99+Constructs let you compose your UI in declarative, React-like way. They are factory functions that create VNodes (virtual nodes). VNode is lightweight description of component. When you add VNode to tree, it becomes actual Renderable.
10101111## Basic Usage
1212···2626)
2727```
28282929-Pass children as additional arguments after the props object, not as a property.
2929+Pass children as additional arguments after props object, not as property.
30303131## Available Constructs
3232···62626363## How Constructs Work
64646565-When you call a construct like `Box()`, it creates a VNode - a plain object describing what to create:
6565+When you call construct like `Box()`, it creates VNode - plain object describing what to create:
66666767```typescript
6868// This creates a VNode, not an actual BoxRenderable
···74747575This deferred creation lets you:
76767777-- Compose UI without a render context
7878-- Queue method calls before the component exists
7777+- Compose UI without render context
7878+- Queue method calls before component exists
7979- Write cleaner, more declarative code
80808181## Creating Custom Constructs
···102102103103## Method Chaining on VNodes
104104105105-VNodes support method calls. The system queues these calls and applies them after creating the component:
105105+VNodes support method calls. system queues these calls and applies them after creating component:
106106107107```typescript
108108const input = Input({ id: "my-input", placeholder: "Type here..." })
···114114renderer.root.add(input)
115115```
116116117117-You can also set properties:
117117+ also set properties:
118118119119```typescript
120120const box = Box({ id: "my-box" })
···124124125125## The delegate() Function
126126127127-Composite components often need outer method calls to reach a specific inner component. The `delegate()` function maps method and property names to descendant IDs:
127127+Composite components often need outer method calls to reach specific inner component. `delegate()` function maps method and property names to descendant IDs:
128128129129```typescript
130130import { delegate, Box, Text, Input } from "@opentui/core"
···157157158158### Delegate Mappings
159159160160-The mapping object's keys are method or property names, and the values are descendant IDs:
160160+ mapping object's keys are method or property names, and values are descendant IDs:
161161162162```typescript
163163delegate(
···189189190190## Mixing Renderables and Constructs
191191192192-You can mix both approaches:
192192+ mix both approaches:
193193194194```typescript
195195import { BoxRenderable, Text, Input } from "@opentui/core"
···223223224224## Next Steps
225225226226-See [Renderables vs Constructs](/docs/core-concepts/renderables-vs-constructs) for a detailed comparison of when to use each approach.
226226+See [Renderables vs Constructs](/docs/core-concepts/renderables-vs-constructs) for detailed comparison of when to use each approach.
+11-11
skills/opentui/docs/core-concepts/keyboard.mdx
···33description: Handling keyboard events in OpenTUI
44order: 6
55skill:
66- entry: true
77- intents: [keyboard, input, keybindings, paste, focus]
66+ entry: true
77+ intents: [keyboard, input, keybindings, paste, focus]
88---
991010# Keyboard input
11111212-OpenTUI parses terminal input and provides structured key events. The `renderer.keyInput` EventEmitter emits `keypress` events plus raw `paste` events with optional metadata.
1212+OpenTUI parses terminal input and provides structured key events. `renderer.keyInput` EventEmitter emits `keypress` events plus raw `paste` events with optional metadata.
13131414## Basic key handling
1515···44444545## Key aliases
46464747-OpenTUI normalizes several key names so your keybindings work the same across layouts and input paths. OpenTUI applies aliases after the parser reports a key, before emitting `keypress`.
4747+OpenTUI normalizes several key names so your keybindings work same across layouts and input paths. OpenTUI applies aliases after parser reports key, before emitting `keypress`.
48484949-The default aliases are:
4949+ default aliases are:
50505151```ts
5252// enter -> return
···6060// kpdecimal/kpdivide/kpmultiply/kpminus/kpplus/kpequal/kpseparator -> symbols
6161```
62626363-Both `key.name === "enter"` and `key.name === "kpenter"` resolve to `"return"` when you match them with `matchesKeyBinding`. Editable components that accept a `keyAliasMap` option (`InputRenderable`, `TextareaRenderable`, `SelectRenderable`, etc.) merge these defaults with your own map:
6363+Both `key.name === "enter"` and `key.name === "kpenter"` resolve to `"return"` when you match them with `matchesKeyBinding`. Editable components that accept `keyAliasMap` option (`InputRenderable`, `TextareaRenderable`, `SelectRenderable`, etc.) merge these defaults with your own map:
64646565```typescript
6666import { InputRenderable } from "@opentui/core"
···174174175175## Exit on Ctrl+C
176176177177-Configure the renderer to automatically exit on Ctrl+C:
177177+Configure renderer to automatically exit on Ctrl+C:
178178179179```typescript
180180const renderer = await createCliRenderer({
···197197198198## Kitty keyboard protocol
199199200200-OpenTUI opts into the [kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) when the terminal supports it. The protocol gives more reliable key names and modifier state than legacy input encoding, including release events, disambiguated escape, alt+key sequences, and alternate keys for cross-layout shortcuts. Configure it with the `useKittyKeyboard` option:
200200+OpenTUI opts into [kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/) when terminal supports it. protocol gives more reliable key names and modifier state than legacy input encoding, including release events, disambiguated escape, alt+key sequences, and alternate keys for cross-layout shortcuts. Configure it with `useKittyKeyboard` option:
201201202202```typescript
203203const renderer = await createCliRenderer({
···222222| `allKeysAsEscapes` | `false` | `REPORT_ALL_KEYS_AS_ESCAPE_CODES` | Encode every key as an escape sequence |
223223| `reportText` | `false` | `REPORT_ASSOCIATED_TEXT` | Include the text a key press generates |
224224225225-`events: true` enables the `keyrelease` event on `renderer.keyInput` as well as `eventType` on `KeyEvent`.
225225+`events: true` enables `keyrelease` event on `renderer.keyInput` as well as `eventType` on `KeyEvent`.
226226227227-`useKittyKeyboard: {}` applies the defaults (`disambiguate` + `alternateKeys`). Passing `null` disables the protocol entirely.
227227+`useKittyKeyboard: {}` applies defaults (`disambiguate` + `alternateKeys`). Passing `null` disables protocol entirely.
228228229229## Focus and key routing
230230231231-Focus components to receive keyboard input. OpenTUI routes events to the focused component:
231231+Focus components to receive keyboard input. OpenTUI routes events to focused component:
232232233233```typescript
234234import { InputRenderable } from "@opentui/core"
+9-9
skills/opentui/docs/core-concepts/layout.mdx
···33description: Flexible positioning and sizing with Yoga/Flexbox
44order: 5
55skill:
66- entry: true
77- intents: [layout, flexbox, yoga, positioning]
66+ entry: true
77+ intents: [layout, flexbox, yoga, positioning]
88---
991010# Layout System
11111212-OpenTUI uses the Yoga layout engine to provide CSS Flexbox-like capabilities for responsive terminal layouts. You can create complex, dynamic interfaces that adapt to terminal size changes.
1212+OpenTUI uses Yoga layout engine to provide CSS Flexbox-like capabilities for responsive terminal layouts. create complex, dynamic interfaces that adapt to terminal size changes.
13131414## Flexbox Basics
15151616-The layout system supports standard flexbox properties:
1616+ layout system supports standard flexbox properties:
17171818```typescript
1919import { BoxRenderable, createCliRenderer } from "@opentui/core"
···50505151## Flex Direction
52525353-Control the direction of child elements:
5353+Control direction of child elements:
54545555```typescript
5656// Vertical layout (default)
···74747575## Justify Content
76767777-Align children along the main axis:
7777+Align children along main axis:
78787979```typescript
8080{
···9999100100## Align Items
101101102102-Align children along the cross axis:
102102+Align children along cross axis:
103103104104```typescript
105105{
···153153154154### Relative (Default)
155155156156-Elements flow normally in the layout:
156156+Elements flow normally in layout:
157157158158```typescript
159159{
···205205206206## Using Constructs
207207208208-The same layout properties work with the declarative API:
208208+ same layout properties work with declarative API:
209209210210```typescript
211211import { Box, Text } from "@opentui/core"
+12-12
skills/opentui/docs/core-concepts/lifecycle.mdx
···6677# Lifecycle and cleanup
8899-OpenTUI gives you control over terminal cleanup. Call `renderer.destroy()` when you shut down. It restores the terminal to its original state, and it frees resources.
99+OpenTUI gives you control over terminal cleanup. Call `renderer.destroy()` when you shut down. It restores terminal to its original state, and it frees resources.
10101111## Why you must handle cleanup
12121313OpenTUI does not automatically clean up on `process.exit` or unhandled errors. This design gives you more control over shutdown behavior:
14141515-- You may want to handle errors and keep running
1616-- You may use effect systems, like Effect.ts, with their own shutdown handling
1717-- You may need custom cleanup order or additional shutdown logic
1515+- want to handle errors and keep running
1616+- use effect systems, like Effect.ts, with their own shutdown handling
1717+- need custom cleanup order or additional shutdown logic
18181919## Use `renderer.destroy()`
2020···3131renderer.destroy()
3232```
33333434-For reliable cleanup, keep renderer teardown in the same control flow as your app startup:
3434+For reliable cleanup, keep renderer teardown in same control flow as your app startup:
35353636```typescript
3737import { createCliRenderer } from "@opentui/core"
···6767| `SIGPIPE` | Broken pipe |
6868| `SIGBUS` | Bus error |
69697070-You can customize which signals trigger cleanup:
7070+ customize which signals trigger cleanup:
71717272```typescript
7373// Only handle SIGINT and SIGTERM
···83838484## Ctrl+C behavior
85858686-By default, Ctrl+C calls `destroy()`. If you want to handle Ctrl+C yourself, disable the internal handler and remove `SIGINT` from `exitSignals`:
8686+By default, Ctrl+C calls `destroy()`. If want to handle Ctrl+C yourself, disable internal handler and remove `SIGINT` from `exitSignals`:
87878888```typescript
8989const renderer = await createCliRenderer({
···101101102102## Destroy callback
103103104104-Run custom logic when the renderer is destroyed:
104104+Run custom logic when renderer is destroyed:
105105106106```typescript
107107const renderer = await createCliRenderer({
···113113114114## What `destroy()` cleans up
115115116116-The `destroy()` method cleans up these resources:
116116+ `destroy()` method cleans up these resources:
117117118118-- Removes the signal and process listeners that OpenTUI adds
118118+- Removes signal and process listeners that OpenTUI adds
119119- Clears timers and render loops
120120-- Destroys all renderables in the tree
120120+- Destroys all renderables in tree
121121- Restores stdin raw mode
122122- Resets terminal state (cursor, alternate screen, etc.)
123123- Frees native resources
124124125125## Troubleshooting
126126127127-If your terminal stays in a broken state after a crash:
127127+If your terminal stays in broken state after crash:
1281281291291. Run `reset` in your terminal to restore it
1301302. Add `uncaughtException` and `unhandledRejection` handlers to your app
···6677# Renderables vs Constructs
8899-OpenTUI provides two ways to build your UI: the imperative Renderable API and the declarative Construct API. Both approaches have different tradeoffs.
99+OpenTUI provides two ways to build your UI: imperative Renderable API and declarative Construct API. Both approaches have different tradeoffs.
10101111## Imperative (Renderables)
12121313-You create `Renderable` instances with a `RenderContext` and compose them using `add()`. You mutate state and behavior directly on instances through setters and methods.
1313+You create `Renderable` instances with `RenderContext` and compose them using `add()`. You mutate state and behavior directly on instances through setters and methods.
14141515```typescript
1616import { BoxRenderable, TextRenderable, InputRenderable, createCliRenderer, type RenderContext } from "@opentui/core"
···71717272## Declarative (Constructs)
73737474-Builds a lightweight VNode graph using functional constructs. Instances don't exist until you add the node to the tree. VNodes queue method calls and replay them when instantiated.
7474+Builds lightweight VNode graph using functional constructs. Instances don't exist until you add node to tree. VNodes queue method calls and replay them when instantiated.
75757676```typescript
7777import { Text, Input, Box, createCliRenderer, delegate } from "@opentui/core"
···124124125125## The delegate() function
126126127127-The `delegate()` function makes constructs ergonomic by routing method calls from the parent to specific children:
127127+ `delegate()` function makes constructs ergonomic by routing method calls from parent to specific children:
128128129129```typescript
130130function Button(props: { id: string; label: string; onClick: () => void }) {
···153153154154- You need fine-grained control over component lifecycle
155155- You're building low-level custom components
156156-- You need to access renderable methods immediately
157157-- Performance is critical and you want to avoid VNode overhead
156156+- need to access renderable methods immediately
157157+- Performance is critical and want to avoid VNode overhead
158158159159### Use Constructs when
160160···165165166166## Mixing both
167167168168-You can mix both approaches in the same application:
168168+ mix both approaches in same application:
169169170170```typescript
171171import { BoxRenderable, Text, Input } from "@opentui/core"
+17-17
skills/opentui/docs/core-concepts/renderables.mdx
···11---
22title: Renderables
33-description: The building blocks of your terminal UI
33+description: building blocks of your terminal UI
44order: 2
55---
6677# Renderables
8899-Renderables are the building blocks of your UI. You can position, style, and nest them within each other. Each renderable represents a visual element and uses the Yoga layout engine for flexible positioning and sizing.
99+Renderables are building blocks of your UI. position, style, and nest them within each other. Each renderable represents visual element and uses Yoga layout engine for flexible positioning and sizing.
10101111## Creating Renderables
12121313-Create a renderable by instantiating a class with a render context (the renderer) and options:
1313+Create renderable by instantiating class with render context ( renderer) and options:
14141515```typescript
1616import { createCliRenderer, TextRenderable, BoxRenderable } from "@opentui/core"
···50505151## The Renderable Tree
52525353-Renderables form a tree structure. Use `add()` and `remove()` to manage children:
5353+Renderables form tree structure. Use `add()` and `remove()` to manage children:
54545555```typescript
5656const container = new BoxRenderable(renderer, {
···73737474## Finding Renderables
75757676-Navigate the tree to find specific renderables:
7676+Navigate tree to find specific renderables:
77777878```typescript
7979// Get a direct child by ID
···119119})
120120```
121121122122-See the [Layout](/docs/core-concepts/layout) page for complete details.
122122+See [Layout](/docs/core-concepts/layout) page for complete details.
123123124124## Focus Management
125125···143143console.log(input.focused) // true
144144```
145145146146-By default, left-clicking a renderable will auto-focus the closest focusable ancestor. Disable this globally with
146146+By default, left-clicking renderable will auto-focus closest focusable ancestor. Disable this globally with
147147`createCliRenderer({ autoFocus: false })`, or stop it per interaction by calling `event.preventDefault()` in
148148`onMouseDown`.
149149···163163164164### Focused descendants
165165166166-A renderable can also react to focus living inside one of its descendants through the `hasFocusedDescendant` flag. When any child has focus, every ancestor's `hasFocusedDescendant` flips to `true` and OpenTUI marks them dirty so they repaint. `BoxRenderable` uses this to paint the `focusedBorderColor` whenever the box itself is focusable and any descendant currently owns focus:
166166+ renderable can also react to focus living inside one of its descendants through `hasFocusedDescendant` flag. When any child has focus, every ancestor's `hasFocusedDescendant` flips to `true` and OpenTUI marks them dirty so they repaint. `BoxRenderable` uses this to paint `focusedBorderColor` whenever box itself is focusable and any descendant currently owns focus:
167167168168```typescript
169169const panel = new BoxRenderable(renderer, {
···212212- `onMouseScroll`
213213- `onMouse` (catch-all)
214214215215-Mouse events bubble up through the tree. Stop propagation with `event.stopPropagation()`.
215215+Mouse events bubble up through tree. Stop propagation with `event.stopPropagation()`.
216216217217### Keyboard Events
218218···236236237237## Visibility
238238239239-Control visibility with the `visible` property:
239239+Control visibility with `visible` property:
240240241241```typescript
242242// Hide (also removes from layout)
···246246panel.visible = true
247247```
248248249249-When `visible` is `false`, Yoga excludes the renderable from layout calculation (equivalent to CSS `display: none`).
249249+When `visible` is `false`, Yoga excludes renderable from layout calculation (equivalent to CSS `display: none`).
250250251251## Opacity
252252···256256panel.opacity = 0.5 // 50% transparent
257257```
258258259259-Opacity affects the renderable and all its children.
259259+Opacity affects renderable and all its children.
260260261261## Z-Index
262262···272272273273## Live Rendering
274274275275-For animations, extend the Renderable class and override `onUpdate`:
275275+For animations, extend Renderable class and override `onUpdate`:
276276277277```typescript
278278class AnimatedBox extends BoxRenderable {
···290290291291## Translation
292292293293-Offset a renderable from its layout position (useful for scrolling/animation):
293293+Offset renderable from its layout position (useful for scrolling/animation):
294294295295```typescript
296296// Offset by pixels
···298298renderable.translateY = -5
299299```
300300301301-This moves the renderable visually without affecting layout.
301301+This moves renderable visually without affecting layout.
302302303303## Buffered Rendering
304304305305-Enable offscreen rendering for complex content and use hooks to draw to the buffer:
305305+Enable offscreen rendering for complex content and use hooks to draw to buffer:
306306307307```typescript
308308import { RGBA } from "@opentui/core"
···347347348348## Destroying Renderables
349349350350-Clean up a renderable and remove it from the tree:
350350+Clean up renderable and remove it from tree:
351351352352```typescript
353353// Remove from parent and free resources
+63-64
skills/opentui/docs/core-concepts/renderer.mdx
···11---
22title: Renderer
33-description: CliRenderer manages terminal output and the render loop
33+description: CliRenderer manages terminal output and render loop
44order: 1
55skill:
66- entry: true
77- intents: [core, renderer, terminal, scrollback, lifecycle]
66+ entry: true
77+ intents: [core, renderer, terminal, scrollback, lifecycle]
88---
991010# Renderer
11111212-The `CliRenderer` drives OpenTUI. It manages terminal output, handles input events, runs the rendering loop, and provides context for creating renderables.
1212+ `CliRenderer` drives OpenTUI. It manages terminal output, handles input events, runs rendering loop, and provides context for creating renderables.
13131414## Creating a renderer
15151616-Create a renderer with the async factory function:
1616+Create renderer with async factory function:
17171818```typescript
1919import { createCliRenderer } from "@opentui/core"
···2424})
2525```
26262727-The factory function does three things:
2727+ factory function does three things:
28282929-1. Loads the native Zig rendering library
3030-2. Configures terminal settings (mouse, keyboard protocol, and the selected screen mode)
3131-3. Returns an initialized `CliRenderer` instance
2929+1. Loads native Zig rendering library
3030+2. Configures terminal settings (mouse, keyboard protocol, and selected screen mode)
3131+3. Returns initialized `CliRenderer` instance
32323333## Configuration options
34343535-This page covers the options that most apps set directly.
3535+This page covers options that most apps set directly.
3636`CliRendererConfig` also includes lower-level hooks for testing and tuning, such as `stdin`, `stdout`, `clock`,
3737`postProcessFns`, and `prependInputHandlers`.
3838···5656| `openConsoleOnError` | `boolean` | `true` (dev) | Open the console overlay on uncaught errors |
5757| `onDestroy` | `() => void` | - | Run after the renderer finishes cleanup |
58585959-You can also change `screenMode`, `footerHeight`, `externalOutputMode`, and `consoleMode` at runtime through their
5959+ also change `screenMode`, `footerHeight`, `externalOutputMode`, and `consoleMode` at runtime through their
6060matching `renderer` properties.
61616262## Screen modes
63636464-The `screenMode` option controls whether OpenTUI owns the alternate screen or a reserved region of the main screen. You
6464+ `screenMode` option controls whether OpenTUI owns alternate screen or reserved region of main screen. You
6565can also change modes at runtime by setting `renderer.screenMode`.
66666767### `"alternate-screen"` (default)
68686969-Switches to the terminal's alternate screen buffer. The original scrollback content is preserved and restored when the
7070-renderer exits. This is the standard mode for full-screen TUI applications.
6969+Switches to terminal's alternate screen buffer. original scrollback content is preserved and restored when renderer exits. This is standard mode for full-screen TUI applications.
71707271```typescript
7372const renderer = await createCliRenderer({
···77767877### `"main-screen"`
79788080-Renders on the terminal's main screen without switching buffers. OpenTUI still reserves a render region by scrolling terminal content, so this is not a true scrollback-native inline or direct renderer. Use it when you want the UI to stay on the main screen for testing, benchmarks, or short-lived tools.
7979+Renders on terminal's main screen without switching buffers. OpenTUI still reserves render region by scrolling terminal content, so this is not true scrollback-native inline or direct renderer. Use it when you want UI to stay on main screen for testing, benchmarks, or short-lived tools.
81808281```typescript
8382const renderer = await createCliRenderer({
···87868887### `"split-footer"`
89889090-Pins the renderer to a reserved footer region at the bottom of the terminal. The area above the footer stays available for normal program output. This is the closest thing OpenTUI currently has to a direct-render mode, but it still uses the same buffered main-screen renderer rather than a separate inline backend.
8989+Pins renderer to reserved footer region at bottom of terminal. area above footer stays available for normal program output. This is closest thing OpenTUI currently has to direct-render mode, but it still uses same buffered main-screen renderer rather than separate inline backend.
91909292-The `footerHeight` option controls how many rows the footer requests (default: 12). When using split-footer mode, `externalOutputMode` defaults to `"capture-stdout"` so that writes to `stdout.write` can be replayed above the footer instead of overlapping it.
9191+ `footerHeight` option controls how many rows footer requests (default: 12). When using split-footer mode, `externalOutputMode` defaults to `"capture-stdout"` so that writes to `stdout.write` can be replayed above footer instead of overlapping it.
93929493```typescript
9594const renderer = await createCliRenderer({
···101100renderer.footerHeight = 15
102101```
103102104104-Split-footer bookkeeping lives in the native renderer. A shared `SplitScrollback` model tracks the rows it has already published and the current tail column, so the footer pins to the bottom of the terminal as scrollback grows. Captured stdout and [scrollback writers](#writing-to-scrollback) both produce styled `OptimizedBuffer` snapshots. The native side emits these as ANSI alongside the footer repaint in one atomic frame. The renderer flushes pending output before `resize`, `suspend`, mode transitions, and `destroy`.
103103+Split-footer bookkeeping lives in native renderer. shared `SplitScrollback` model tracks rows it has already published and current tail column, so footer pins to bottom of terminal as scrollback grows. Captured stdout and [scrollback writers](#writing-to-scrollback) both produce styled `OptimizedBuffer` snapshots. native side emits these as ANSI alongside footer repaint in one atomic frame. renderer flushes pending output before `resize`, `suspend`, mode transitions, and `destroy`.
105104106105## External output mode
107106108108-The `externalOutputMode` option controls what happens to writes that go through the renderer's configured `stdout.write` while the renderer is active. It does not change `stderr`, and it is separate from the built-in console overlay.
107107+ `externalOutputMode` option controls what happens to writes that go through renderer's configured `stdout.write` while renderer is active. It does not change `stderr`, and it's separate from built-in console overlay.
109108110110-The native renderer still paints to the real TTY. `externalOutputMode` only changes the TypeScript-side `stdout.write` path.
109109+ native renderer still paints to real TTY. `externalOutputMode` only changes TypeScript-side `stdout.write` path.
111110112112-- **`"capture-stdout"`**: Intercepts `stdout.write`, queues the text, and flushes it above the footer during split-footer renders. Only valid when `screenMode` is `"split-footer"`.
113113-- **`"passthrough"`**: Leaves `stdout.write` untouched. Output goes directly to the terminal.
111111+- **`"capture-stdout"`**: Intercepts `stdout.write`, queues text, and flushes it above footer during split-footer renders. Only valid when `screenMode` is `"split-footer"`.
112112+- **`"passthrough"`**: Leaves `stdout.write` untouched. Output goes directly to terminal.
114113115115-The default depends on the screen mode: `"capture-stdout"` for split-footer, `"passthrough"` for everything else.
114114+ default depends on screen mode: `"capture-stdout"` for split-footer, `"passthrough"` for everything else.
116115117116```typescript
118117// Captured stdout appears above the footer
···127126128127## Console mode
129128130130-The `consoleMode` option controls the built-in console overlay (`TerminalConsole`).
129129+ `consoleMode` option controls built-in console overlay (`TerminalConsole`).
131130132132-- **`"console-overlay"`** (default): Captures console output (console.log, console.error, etc.) and renders it in a toggleable panel within the TUI.
133133-- **`"disabled"`**: Hides and deactivates the overlay surface.
131131+- **`"console-overlay"`** (default): Captures console output (console.log, console.error, etc.) and renders it in toggleable panel within TUI.
132132+- **`"disabled"`**: Hides and deactivates overlay surface.
134133135135-Current caveat: `consoleMode` only changes the overlay surface.
134134+Current caveat: `consoleMode` only changes overlay surface.
136135If you need plain `console.*` behavior, set `OTUI_USE_CONSOLE=false`.
137136138137```typescript
···145144146145## Writing to scrollback
147146148148-In split-footer mode with `externalOutputMode: "capture-stdout"`, the renderer also owns a programmatic append path above the footer. Use it when you want rich, styled output in scrollback instead of raw `console.log` text — colors, wrapping, syntax-highlighted code, and markdown. Every append goes through the same FIFO queue as captured stdout, so ordering stays deterministic even when both sources interleave.
147147+In split-footer mode with `externalOutputMode: "capture-stdout"`, renderer also owns programmatic append path above footer. Use it when you want rich, styled output in scrollback instead of raw `console.log` text — colors, wrapping, syntax-highlighted code, and markdown. Every append goes through same FIFO queue as captured stdout, so ordering stays deterministic even when both sources interleave.
149148150149Both APIs require `screenMode: "split-footer"` and `externalOutputMode: "capture-stdout"`. They throw otherwise.
151150152151### `renderer.writeToScrollback(writer)`
153152154154-Render a renderable tree into an off-screen buffer and commit it as one scrollback snapshot.
153153+Render renderable tree into off-screen buffer and commit it as one scrollback snapshot.
155154156155```typescript
157156import { TextRenderable } from "@opentui/core"
···178177})
179178```
180179181181-The writer receives a `ScrollbackRenderContext`:
180180+ writer receives `ScrollbackRenderContext`:
182181183182| Field | Type | Description |
184183| --------------- | --------------- | ------------------------------------------------------- |
···187186| `tailColumn` | `number` | Column where the previous scrollback commit ended |
188187| `renderContext` | `RenderContext` | Context you pass to new renderables inside the snapshot |
189188190190-And returns a `ScrollbackSnapshot`:
189189+And returns `ScrollbackSnapshot`:
191190192191| Field | Type | Description |
193192| ----------------- | ------------ | -------------------------------------------------------------------------------------------- |
···199198| `trailingNewline` | `boolean` | Append a newline after the final row of this commit (default: `true`) |
200199| `teardown` | `() => void` | Optional cleanup hook invoked after the snapshot is rendered (e.g., dispose a Solid subtree) |
201200202202-Use `startOnNewLine: false` plus `trailingNewline: false` for inline output — for example, an icon prefix followed by streaming text.
201201+Use `startOnNewLine: false` plus `trailingNewline: false` for inline output — for example, icon prefix followed by streaming text.
203202204203### `renderer.createScrollbackSurface(options?)`
205204206206-For streaming output that you want to render many times before committing (token-by-token code highlighting, markdown blocks settling as they parse), use a `ScrollbackSurface`. The surface renders into a backing buffer. You can re-render the tree in place and then commit specific row ranges to scrollback.
205205+For streaming output that want to render many times before committing (token-by-token code highlighting, markdown blocks settling as they parse), use `ScrollbackSurface`. surface renders into backing buffer. re-render tree in place and then commit specific row ranges to scrollback.
207206208207```typescript
209208const surface = renderer.createScrollbackSurface({ startOnNewLine: true })
···236235| `commitRows(start, endExclusive, options?)` | Copy a row range out of the backing buffer and enqueue it as a scrollback commit |
237236| `destroy()` | Tear down the surface and its backing buffer |
238237239239-`commitRows` throws if you call it before `render()`, or if the renderer's width or `widthMethod` changed since the last `render()`. Re-render before committing fresh rows in either case.
238238+`commitRows` throws if you call it before `render()`, or if renderer's width or `widthMethod` changed since last `render()`. Re-render before committing fresh rows in either case.
240239241241-For React and Solid, use the binding-level helpers that wrap `writeToScrollback` with JSX support. See [`createScrollbackWriter` / `writeSolidToScrollback`](/docs/bindings/solid#scrollback-writers) in the Solid docs.
240240+For React and Solid, use binding-level helpers that wrap `writeToScrollback` with JSX support. See [`createScrollbackWriter` / `writeSolidToScrollback`](/docs/bindings/solid#scrollback-writers) in Solid docs.
242241243242## The root renderable
244243245245-Every renderer has a `root` property. It is a special `RootRenderable` at the top of the component tree:
244244+Every renderer has `root` property. it's special `RootRenderable` at top of component tree:
246245247246```typescript
248247import { Box, Text } from "@opentui/core"
···251250renderer.root.add(Box({ width: 40, height: 10, borderStyle: "rounded" }, Text({ content: "Hello, OpenTUI!" })))
252251```
253252254254-The root renderable fills the entire terminal and adjusts when you resize it.
253253+ root renderable fills entire terminal and adjusts when you resize it.
255254256255## Render loop control
257256258258-You can use these control modes:
257257+ use these control modes:
259258260259### Automatic mode (default)
261260262262-If you do not call `start()`, the renderer re-renders only when the component tree changes:
261261+If you do not call `start()`, renderer re-renders only when component tree changes:
263262264263```typescript
265264const renderer = await createCliRenderer()
···268267269268### Continuous mode
270269271271-Call `start()` to run the render loop continuously at the target FPS:
270270+Call `start()` to run render loop continuously at target FPS:
272271273272```typescript
274273renderer.start() // Start continuous rendering
275274renderer.stop() // Stop the render loop
276275```
277276278278-You can change the render loop cadence at runtime. `targetFps` sets the steady-state continuous render rate. `maxFps` caps how often `requestRender()` can produce an immediate extra frame:
277277+ change render loop cadence at runtime. `targetFps` sets steady-state continuous render rate. `maxFps` caps how often `requestRender()` can produce immediate extra frame:
279278280279```typescript
281280renderer.targetFps = 60
···294293renderer.dropLive()
295294```
296295297297-Multiple components can request animations at the same time. The renderer stays live until all requests drop.
296296+Multiple components can request animations at same time. renderer stays live until all requests drop.
298297299298### Pause and suspend
300299···305304renderer.resume() // Resume from suspended state
306305```
307306308308-By default, suspending or destroying clears the region OpenTUI owns on the main screen. If you want to keep that
307307+By default, suspending or destroying clears region OpenTUI owns on main screen. If want to keep that
309308content visible after shutdown, set `clearOnShutdown: false`:
310309311310```typescript
···380379381380## Theme mode
382381383383-OpenTUI detects the terminal's preferred color scheme (dark or light) through two mechanisms:
382382+OpenTUI detects terminal's preferred color scheme (dark or light) through two mechanisms:
3843833853841. **DEC mode 2031** (`CSI ? 997 ; ... n`): terminals that support it report changes live.
386386-2. **OSC 10/11 fallback**: if the terminal does not support DEC 2031, OpenTUI inspects the terminal's foreground and background colors, then derives the mode from the background brightness.
385385+2. **OSC 10/11 fallback**: if terminal does not support DEC 2031, OpenTUI inspects terminal's foreground and background colors, then derives mode from background brightness.
387386388388-Read the current mode via `renderer.themeMode` (`"dark"`, `"light"`, or `null` before detection completes) and subscribe to the `theme_mode` event for later changes.
387387+Read current mode via `renderer.themeMode` (`"dark"`, `"light"`, or `null` before detection completes) and subscribe to `theme_mode` event for later changes.
389388390389```typescript
391390import { type ThemeMode } from "@opentui/core"
···397396})
398397```
399398400400-DEC 2031 always wins over the OSC fallback, so a terminal that starts without DEC support but gains it later still reports the correct mode.
399399+DEC 2031 always wins over OSC fallback, so terminal that starts without DEC support but gains it later still reports correct mode.
401400402401### `waitForThemeMode(timeoutMs?)`
403402404404-Use `waitForThemeMode` if you need to block briefly for theme detection at startup — for example, to pick a light or dark color palette before the first paint. It resolves with the detected mode, or `null` if the timeout elapses before either source reports.
403403+Use `waitForThemeMode` if need to block briefly for theme detection at startup — for example, to pick light or dark color palette before first paint. It resolves with detected mode, or `null` if timeout elapses before either source reports.
405404406405```typescript
407406const mode = await renderer.waitForThemeMode(1000) // defaults to 1000 ms
408407```
409408410410-Pass `0` to read the current mode synchronously without waiting.
409409+Pass `0` to read current mode synchronously without waiting.
411410412411## Terminal integration
413412414414-These methods drive the terminal emulator directly, outside of the render buffer:
413413+These methods drive terminal emulator directly, outside of render buffer:
415414416415### Terminal title and background
417416···426425renderer.resetTerminalBgColor()
427426```
428427429429-`destroy()` and `suspend()` call `resetTerminalBgColor()` for you. Call it yourself only for cases the renderer does not own — for example, before pausing with SIGTSTP.
428428+`destroy()` and `suspend()` call `resetTerminalBgColor()` for you. Call it yourself only for cases renderer does not own — for example, before pausing with SIGTSTP.
430429431430### OSC 52 clipboard
432431433433-OpenTUI can set and clear the terminal's clipboard via OSC 52. This works across SSH sessions and remote editors. Terminals that opt out silently ignore these calls.
432432+OpenTUI can set and clear terminal's clipboard via OSC 52. This works across SSH sessions and remote editors. Terminals that opt out silently ignore these calls.
434433435434```typescript
436435if (renderer.isOsc52Supported()) {
···443442renderer.copyToClipboardOSC52("both", "clipboard-primary")
444443```
445444446446-`ClipboardTarget` values are `"clipboard"`, `"primary"`, or `"clipboard-primary"`. Both methods return `false` if the renderer cannot write to stdout — for example, after you destroy it.
445445+`ClipboardTarget` values are `"clipboard"`, `"primary"`, or `"clipboard-primary"`. Both methods return `false` if renderer cannot write to stdout — for example, after you destroy it.
447446448447### Raw OSC sequences
449448450450-Subscribe to raw OSC sequences the terminal emits — palette queries, cursor position reports, custom escape codes. Use this when you integrate OpenTUI with a terminal feature that does not have a dedicated API yet.
449449+Subscribe to raw OSC sequences terminal emits — palette queries, cursor position reports, custom escape codes. Use this when you integrate OpenTUI with terminal feature that does not have dedicated API yet.
451450452451```typescript
453452const unsubscribe = renderer.subscribeOsc((sequence) => {
···460459461460## Cursor control
462461463463-Use these methods to control the cursor position and style:
462462+Use these methods to control cursor position and style:
464463465464```typescript
466465// Position and visibility
···508507})
509508```
510509511511-By default, `addInputHandler()` appends handlers to the chain and runs them after built-in handlers. Use `prependInputHandler()` to add a handler at the start of the chain and run it before built-in handlers.
510510+By default, `addInputHandler()` appends handlers to chain and runs them after built-in handlers. Use `prependInputHandler()` to add handler at start of chain and run it before built-in handlers.
512511513512## Debug overlay
514513515515-Use the debug overlay to show FPS, memory usage, and other stats:
514514+Use debug overlay to show FPS, memory usage, and other stats:
516515517516```typescript
518517renderer.toggleDebugOverlay()
···528527529528## Cleanup
530529531531-Always destroy the renderer when you finish so you restore the terminal state:
530530+Always destroy renderer when you finish so you restore terminal state:
532531533532```typescript
534533renderer.destroy()
535534```
536535537537-Destroying the renderer restores the terminal to its original state, disables mouse tracking, and cleans up resources.
536536+Destroying renderer restores terminal to its original state, disables mouse tracking, and cleans up resources.
538537539538**Important:** OpenTUI does not automatically clean up on `process.exit` or unhandled errors. This design gives you control. See [Lifecycle](/docs/core-concepts/lifecycle/) for signal handling options and best practices.
540539541540## Environment variables
542541543543-See the [environment variable reference](/docs/reference/env-vars) for the full list.
542542+See [environment variable reference](/docs/reference/env-vars) for full list.
544543545545-The renderer-specific ones you will most likely care about are:
544544+ renderer-specific ones you will most likely care about are:
546545547546- `OTUI_USE_CONSOLE` controls global `console.*` capture.
548548-- `SHOW_CONSOLE` opens the built-in console overlay at startup.
549549-- `OTUI_NO_NATIVE_RENDER` skips the Zig/native frame renderer. In `"split-footer"` mode, the current stdout flush path can still write ANSI.
550550-- `OTUI_DUMP_CAPTURES` dumps captured stdout and console caches from the renderer exit handler.
547547+- `SHOW_CONSOLE` opens built-in console overlay at startup.
548548+- `OTUI_NO_NATIVE_RENDER` skips Zig/native frame renderer. In `"split-footer"` mode, current stdout flush path can still write ANSI.
549549+- `OTUI_DUMP_CAPTURES` dumps captured stdout and console caches from renderer exit handler.
+8-8
skills/opentui/docs/getting-started.mdx
···44order: 1
55navTitle: Introduction
66skill:
77- entry: true
88- intents: [getting-started, installation, quickstart, intro]
77+ entry: true
88+ intents: [getting-started, installation, quickstart, intro]
99---
10101111# Getting started
12121313-OpenTUI is a native terminal UI core written in Zig with TypeScript bindings. The native core exposes a C ABI and can be used from any language. OpenTUI powers OpenCode in production today and will also power terminal.shop. It is an extensible core with a focus on correctness, stability, and high performance. It provides a component-based architecture with flexible layout capabilities, allowing you to create complex terminal applications.
1313+OpenTUI is native terminal UI core written in Zig with TypeScript bindings. native core exposes C ABI and can be used from any language. OpenTUI powers OpenCode in production today and will also power terminal.shop. it's extensible core with focus on correctness, stability, and high performance. It provides component-based architecture with flexible layout capabilities, allowing you to create complex terminal applications.
14141515## Installation
1616···4747bun index.ts
4848```
49495050-You should see green text. Press `Ctrl+C` to exit.
5050+ see green text. Press `Ctrl+C` to exit.
51515252## Composing components
53535454-Components nest naturally. Here's a bordered panel with content:
5454+Components nest naturally. Here's bordered panel with content:
55555656```typescript
5757import { createCliRenderer, Box, Text } from "@opentui/core"
···6969)
7070```
71717272-`Box` and `Text` are factory functions. The first argument is props; additional arguments are children.
7272+`Box` and `Text` are factory functions. first argument is props; additional arguments are children.
73737474## What's next
75757676### Core concepts
77777878-- [Renderer](/docs/core-concepts/renderer) - The rendering engine
7878+- [Renderer](/docs/core-concepts/renderer) - rendering engine
7979- [Layout](/docs/core-concepts/layout) - Flexbox positioning
8080-- [Constructs](/docs/core-concepts/constructs) - The declarative component API
8080+- [Constructs](/docs/core-concepts/constructs) - declarative component API
81818282### Components
8383
+13-13
skills/opentui/docs/keymap/addons.mdx
···7788# Built-in keymap addons
991010-`@opentui/keymap` keeps the engine bare. The built-in addon packages install parser stages, field compilers, diagnostics, disambiguation and host-specific helpers on top of the public registration APIs.
1010+`@opentui/keymap` keeps engine bare. built-in addon packages install parser stages, field compilers, diagnostics, disambiguation and host-specific helpers on top of public registration APIs.
11111212-If you want to build your own addon, see [Custom Addons](/docs/keymap/custom-addons).
1212+If want to build your own addon, see [Custom Addons](/docs/keymap/custom-addons).
13131414-Every addon returns a disposer.
1414+Every addon returns disposer.
15151616```ts
1717import * as addons from "@opentui/keymap/addons"
···3030| `registerDefaultEventMatchResolver()` | Appends `defaultEventMatchResolver` |
3131| `registerDefaultKeys()` | Installs both default stages together |
32323333-The shared default parser accepts single-stroke named keys, modifier chords, literal punctuation, `" "` for space, `"+"` as a literal plus key and `<token>` segments. It parses concatenated multi-stroke sequences such as `dd` or `<leader>s`.
3333+ shared default parser accepts single-stroke named keys, modifier chords, literal punctuation, `" "` for space, `"+"` as literal plus key and `<token>` segments. It parses concatenated multi-stroke sequences such as `dd` or `<leader>s`.
34343535Recognized modifier prefixes (case-insensitive, joined with `+`):
3636···5151| `registerMetadataFields()` | Binding `desc` / `group` and command `desc` / `title` / `category` attrs |
5252| `registerAliasesField()` | Layer-local `aliases` field for remapping single-key binding names |
53535454-`registerBindingOverrides()` expects `bindingOverrides` to already be a `BindingInput[]` array. It rewrites that layer's binding array once at registration time. Matching string commands are replaced by the override binding and unmatched bindings stay in place.
5454+`registerBindingOverrides()` expects `bindingOverrides` to already be `BindingInput[]` array. It rewrites that layer's binding array once at registration time. Matching string commands are replaced by override binding and unmatched bindings stay in place.
55555656`registerEnabledFields()` accepts `boolean`, `() => boolean`, or `ReactiveMatcher` values. It applies to layers and commands, not bindings.
57575858-`registerAliasesField()` adds bindings instead of replacing the originals and aliases stay local to the layer that declared them.
5858+`registerAliasesField()` adds bindings instead of replacing originals and aliases stay local to layer that declared them.
59596060### Syntax and sequence addons
6161···90909191## Ex commands
92929393-`registerExCommands()` installs a command layer plus a command resolver for `:name ...args` strings.
9393+`registerExCommands()` installs command layer plus command resolver for `:name ...args` strings.
94949595```ts
9696import { registerExCommands } from "@opentui/keymap/addons"
···122122- Registered ex commands default `namespace` to `excommands`.
123123- Aliases produce additional registered commands, for example `:write` and `:w`.
124124- Extra fields are preserved on `getCommands()` / `getCommandEntries()` results and compiled through command-field addons.
125125-- `runCommand(":write file.txt")` and `dispatchCommand(":write file.txt")` both go through the installed resolver.
125125+- `runCommand(":write file.txt")` and `dispatchCommand(":write file.txt")` both go through installed resolver.
126126127127## OpenTUI addons
128128129129-`@opentui/keymap/addons/opentui` re-exports every universal addon and adds the OpenTUI-specific helpers below.
129129+`@opentui/keymap/addons/opentui` re-exports every universal addon and adds OpenTUI-specific helpers below.
130130131131### `registerBaseLayoutFallback()`
132132133133-Adds an event match resolver that falls back to `KeyEvent.baseCode` so bindings can ignore active keyboard layout changes when Kitty base-layout reporting is available. Direct stroke matches still win ahead of the fallback.
133133+Adds event match resolver that falls back to `KeyEvent.baseCode` so bindings can ignore active keyboard layout changes when Kitty base-layout reporting is available. Direct stroke matches still win ahead of fallback.
134134135135### Edit buffer helpers
136136···141141| `registerTextareaMappingSuspension()` | Suspends focused `TextareaRenderable` mapped shortcuts while keeping plain typing intact |
142142| `registerManagedTextareaLayer()` | High-level textarea integration: commands, suspension, default bindings and overrides |
143143144144-`registerManagedTextareaLayer()` accepts a global `Layer` shape plus optional `bindings`, but it intentionally excludes `target` and `targetMode`. The helper is global and follows `renderer.currentFocusedEditor`.
144144+`registerManagedTextareaLayer()` accepts global `Layer` shape plus optional `bindings`, but it intentionally excludes `target` and `targetMode`. helper is global and follows `renderer.currentFocusedEditor`.
145145146146`EditBufferCommandOptions`:
147147···193193| `select-all` | `input.select.all` | Select all |
194194| `submit` | `input.submit` | Submit |
195195196196-The generated textarea bindings come from the shared `defaultTextareaKeyBindings` in `@opentui/core`. `createTextareaBindings()` prepends overrides before those defaults so custom bindings win by order.
196196+ generated textarea bindings come from shared `defaultTextareaKeyBindings` in `@opentui/core`. `createTextareaBindings()` prepends overrides before those defaults so custom bindings win by order.
197197198198-See [Custom Addons](/docs/keymap/custom-addons) for the public addon-authoring APIs, lifecycle rules, callback contexts and extension-point quirks.
198198+See [Custom Addons](/docs/keymap/custom-addons) for public addon-authoring APIs, lifecycle rules, callback contexts and extension-point quirks.
+30-30
skills/opentui/docs/keymap/core.mdx
···8899This page covers `@opentui/keymap` without any host-specific adapter.
10101111-Use the bare engine when you want a custom host or when you want to build addons on top of the shared registration surface. If you want a ready-made host or need the host contract, start with [Hosts](/docs/keymap/hosts).
1111+Use bare engine when you want custom host or when want to build addons on top of shared registration surface. If you want ready-made host or need host contract, start with [Hosts](/docs/keymap/hosts).
12121313## Construct a keymap
1414···1818const keymap = new Keymap(host as KeymapHost<object>)
1919```
20202121-Bare keymaps do not parse string bindings until you install binding parsers and event match resolvers. In practice that usually means `registerDefaultKeys()` or one of the default host helpers.
2121+Bare keymaps do not parse string bindings until you install binding parsers and event match resolvers. In practice that usually means `registerDefaultKeys()` or one of default host helpers.
22222323## `KeymapHost`
24242525-`KeymapHost` is the contract that built-in hosts and custom adapters implement. See [Hosts](/docs/keymap/hosts) for the built-in OpenTUI and HTML adapters.
2525+`KeymapHost` is contract that built-in hosts and custom adapters implement. See [Hosts](/docs/keymap/hosts) for built-in OpenTUI and HTML adapters.
26262727| Member | Required | Description |
2828| ----------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
···8181| extra fields | Feed layer-field compilers and binding compilation. Layer fields do not surface public attrs |
82828383- Targetless layers are always active.
8484-- Active layers all use the same precedence rules: higher `priority` wins, then newer layers win.
8585-- Returning `false` from a command rejects that candidate so lower-precedence handlers can continue.
8686-- `fallthrough` and `preventDefault` are independent. `fallthrough` continues inside the keymap; `preventDefault` controls whether the event escapes to the host.
8484+- Active layers all use same precedence rules: higher `priority` wins, then newer layers win.
8585+- Returning `false` from command rejects that candidate so lower-precedence handlers can continue.
8686+- `fallthrough` and `preventDefault` are independent. `fallthrough` continues inside keymap; `preventDefault` controls whether event escapes to host.
87878888## Bindings
8989···9494| Object stroke | `{ name: "return", ctrl: true }` | Skips string parsing and normalizes directly |
9595| Release binding | `{ key: "a", event: "release", ...}` | Release bindings support a single stroke only |
96969797-The core engine only accepts full `BindingInput[]` arrays. If you want command-to-key config sugar, use `commandBindings(map)` from `@opentui/keymap/extras` to build the array before calling `registerLayer()`.
9797+ core engine only accepts full `BindingInput[]` arrays. If you want command-to-key config sugar, use `commandBindings(map)` from `@opentui/keymap/extras` to build array before calling `registerLayer()`.
98989999`BindingInput` reserves `key`, `cmd`, `event`, `preventDefault` and `fallthrough`. All other fields are available to binding-field compilers.
100100···108108109109Release bindings dispatch on key release, but they do not appear in `getActiveKeys()` because active-key discovery is based on press/pending-sequence state.
110110111111-The shared default parser understands single-stroke named keys, modifier chords, literal punctuation, `" "` for space, `"+"` as a literal plus key and `<token>` segments. Spaced Emacs-style sequences such as `ctrl+x ctrl+s` are not part of the default parser.
111111+ shared default parser understands single-stroke named keys, modifier chords, literal punctuation, `" "` for space, `"+"` as literal plus key and `<token>` segments. Spaced Emacs-style sequences such as `ctrl+x ctrl+s` are not part of default parser.
112112113113## State and discovery
114114···213213formatCommandBindings(keymap.getCommandBindings({ visibility: "registered", commands: ["save-file"] }).get("save-file"))
214214```
215215216216-`resolveBindingSections()` is an opinionated config-to-keymap transformation for app-level config split by real registration site. It is one practical shape; copy and adjust it if your app needs different rules. Values can be `false`, `"none"`, a key, a full binding object, or arrays of keys/binding objects. `false`, `"none"`, and empty arrays emit no bindings. The command name comes from the record key.
216216+`resolveBindingSections()` is opinionated config-to-keymap transformation for app-level config split by real registration site. it's one practical shape; copy and adjust it if your app needs different rules. Values can be `false`, `"none"`, key, full binding object, or arrays of keys/binding objects. `false`, `"none"`, and empty arrays emit no bindings. command name comes from record key.
217217218218```ts
219219import { resolveBindingSections } from "@opentui/keymap/extras"
···234234resolved.get("app", "app.exit")
235235```
236236237237-Tokens such as `<leader>` are still registered through the normal keymap token APIs.
237237+Tokens such as `<leader>` are still registered through normal keymap token APIs.
238238239239-`dispatchCommand()` respects current activation and can return `inactive` or `disabled` when the command exists but is not currently dispatchable. `runCommand()` walks the registered chain directly, so it can execute command-only layers programmatically even when they do not have an active binding.
239239+`dispatchCommand()` respects current activation and can return `inactive` or `disabled` when command exists but is not currently dispatchable. `runCommand()` walks registered chain directly, so it can execute command-only layers programmatically even when they do not have active binding.
240240241241`RunCommandResult` is `{ ok: true, command? }` on success or `{ ok: false, reason, command? }` on failure. Reject reasons:
242242···249249| `rejected` | Every candidate's handler returned synchronous `false` |
250250| `error` | A resolver, runtime matcher, or handler threw synchronously |
251251252252-`command` is included on rejected results when `includeCommand: true` is set and the keymap could resolve a record for the name.
252252+`command` is included on rejected results when `includeCommand: true` is set and keymap could resolve record for name.
253253254254-Command handlers may be sync or async. Only a synchronous `false` rejects the candidate and lets lower-precedence handlers continue. A returned promise is treated as handled immediately; async rejection is reported through the `error` diagnostic event.
254254+Command handlers may be sync or async. Only synchronous `false` rejects candidate and lets lower-precedence handlers continue. returned promise is treated as handled immediately; async rejection is reported through `error` diagnostic event.
255255256256`RunCommandOptions`:
257257···281281| `searchIn` | Additional fields/attrs to search |
282282| `filter` | Object or predicate filter against raw fields and compiled attrs |
283283284284-- `reachable` dedupes by command name using the current dispatch winner.
284284+- `reachable` dedupes by command name using current dispatch winner.
285285- `active` keeps every active candidate in precedence order, including same-name duplicates.
286286- `registered` ignores focus and returns all registered commands.
287287288288-Use `getCommandEntries()` for command palettes, searchable help screens and other discovery surfaces that need command records plus their bindings. It runs the full `CommandQuery`, materializes command metadata and attaches matching bindings, so it is the heavier query.
288288+Use `getCommandEntries()` for command palettes, searchable help screens and other discovery surfaces that need command records plus their bindings. It runs full `CommandQuery`, materializes command metadata and attaches matching bindings, so it's heavier query.
289289290290-Use `getCommandBindings()` when a UI already knows the commands it wants to label and only needs their bindings:
290290+Use `getCommandBindings()` when UI already knows commands it wants to label and only needs their bindings:
291291292292```ts
293293const bindingsByCommand = keymap.getCommandBindings({
···298298const saveBindings = bindingsByCommand.get("file.save") ?? []
299299```
300300301301-The returned map preserves the requested command order and includes every requested command with `[]` when no matching bindings exist. Formatting remains app-owned; each returned `ActiveBinding` includes its parsed `sequence`.
301301+ returned map preserves requested command order and includes every requested command with `[]` when no matching bindings exist. Formatting remains app-owned; each returned `ActiveBinding` includes its parsed `sequence`.
302302303303`CommandBindingsQuery` fields:
304304···319319| `warning` | `WarningEvent` | Validation or analyzer warning |
320320| `error` | `ErrorEvent` | Registration, query, resolver, or listener error |
321321322322-Diagnostic events are not batched through `state`; they are emitted when the warning or error is reported.
322322+Diagnostic events are not batched through `state`; they are emitted when warning or error is reported.
323323324324`WarningEvent` and `ErrorEvent` payloads:
325325···330330331331Diagnostic-event quirks:
332332333333-- If no `warning` listener is registered, the keymap falls back to `console.warn(...)` for warnings.
334334-- If no `error` listener is registered, the keymap falls back to `console.error(...)` for errors.
335335-- Console fallback is per event type. Registering a `warning` listener suppresses warning console output but does not affect `error`, and vice versa.
336336-- Console fallback prefixes the message with `[code]`. If the underlying cause is an `Error`, it is passed as the second console argument.
333333+- If no `warning` listener is registered, keymap falls back to `console.warn(...)` for warnings.
334334+- If no `error` listener is registered, keymap falls back to `console.error(...)` for errors.
335335+- Console fallback is per event type. Registering `warning` listener suppresses warning console output but does not affect `error`, and vice versa.
336336+- Console fallback prefixes message with `[code]`. If underlying cause is `Error`, it's passed as second console argument.
337337- Throwing `warning` or `error` listeners do not stop remaining diagnostic listeners from running, and they do not recursively emit another keymap error event.
338338- `warning` commonly covers analyzer and validation warnings such as unknown fields or unknown tokens.
339339- `error` covers more than registration failures: it also reports resolver failures, command-query failures, runtime matcher failures, and thrown `state` / `pendingSequence` listeners.
···369369| `prepend/appendDisambiguationResolver(fn)` | Choose exact-vs-prefix behavior for ambiguous sequences |
370370| `acquireResource(symbol, setup)` | Share ref-counted setup/teardown across multiple addon registrations |
371371372372-Every registration method above returns a disposer. The matching `clear*()` methods remove all registrations for that stage.
372372+Every registration method above returns disposer. matching `clear*()` methods remove all registrations for that stage.
373373374374## Disambiguation
375375376376-Ambiguity happens when the same sequence is both an exact command and a prefix of a longer binding, for example `g` and `gg`.
376376+Ambiguity happens when same sequence is both exact command and prefix of longer binding, for example `g` and `gg`.
377377378378-Same-layer exact/prefix ambiguity is only allowed when at least one disambiguation resolver is registered. Without one, registering both `g` and `gg` in the same layer emits a compile error and keeps the valid earlier bindings.
378378+Same-layer exact/prefix ambiguity is only allowed when at least one disambiguation resolver is registered. Without one, registering both `g` and `gg` in same layer emits compile error and keeps valid earlier bindings.
379379380380```ts
381381keymap.appendDisambiguationResolver((ctx) => {
···402402| `clear()` | Clear the pending sequence and consume the key |
403403| `defer(handler)` | Start cancellable async disambiguation work |
404404405405-Disambiguation resolvers must return synchronously. For async behavior, use `ctx.defer(...)`. If no resolver decides, the engine falls back to prefix handling and emits a warning.
405405+Disambiguation resolvers must return synchronously. For async behavior, use `ctx.defer(...)`. If no resolver decides, engine falls back to prefix handling and emits warning.
406406407407-`defer(handler)` invokes `handler` with a `KeyDeferredDisambiguationContext`:
407407+`defer(handler)` invokes `handler` with `KeyDeferredDisambiguationContext`:
408408409409| Member | Description |
410410| -------------------- | --------------------------------------------------------------------------------------------------------- |
···416416| `continueSequence()` | Decision: keep the prefix pending |
417417| `clear()` | Decision: clear the pending sequence |
418418419419-The handler may return a decision, a `Promise<decision>`, or nothing (no-op). Returning nothing after the signal aborted is the canonical cancel path.
419419+ handler may return decision, `Promise<decision>`, or nothing (no-op). Returning nothing after signal aborted is canonical cancel path.
420420421421## Constraints
422422423423- Runtime/data re-entry is supported during dispatch. Command handlers, intercepts and pending-sequence listeners can read and write runtime data.
424424-- Structural re-entry is not supported during dispatch. Do not register or unregister layers, parsers, resolvers, tokens, or similar environment-shaping state while a dispatch is in flight.
425425-- After the host is destroyed, host-backed reads such as `getActiveKeys()` are unavailable. Metadata reads such as `getCommands()` and runtime data access remain usable.
424424+- Structural re-entry is not supported during dispatch. Do not register or unregister layers, parsers, resolvers, tokens, or similar environment-shaping state while dispatch is in flight.
425425+- After host is destroyed, host-backed reads such as `getActiveKeys()` are unavailable. Metadata reads such as `getCommands()` and runtime data access remain usable.
426426427427Example host surface: `packages/keymap/src/tests/keymap.host.test.ts`
+38-38
skills/opentui/docs/keymap/custom-addons.mdx
···7788# Custom keymap addons
991010-An addon is usually a function that accepts a `Keymap`, registers one or more behaviors, and returns a disposer.
1010+ addon is usually function that accepts `Keymap`, registers one or more behaviors, and returns disposer.
11111212-The important constraint is that custom addons should stay on the public surface. The built-in addons are implemented that way too.
1212+ important constraint is that custom addons should stay on public surface. built-in addons are implemented that way too.
13131414-If you want the shipped addon inventory instead, see [Built-in Addons](/docs/keymap/addons).
1414+If you want shipped addon inventory instead, see [Built-in Addons](/docs/keymap/addons).
15151616## Addon shape
1717···43434444Guidelines:
45454646-- Return one disposer that tears down everything the addon registered.
4747-- Clean up in reverse order when the registrations depend on one another.
4848-- Prefer composing the public registration methods over reaching into internal services.
4646+- Return one disposer that tears down everything addon registered.
4747+- Clean up in reverse order when registrations depend on one another.
4848+- Prefer composing public registration methods over reaching into internal services.
49495050## Public registration APIs
5151···8585| `acquireResource(symbol, setup)` | Share ref-counted setup and teardown across multiple registrations |
8686| `on("state" \| "pendingSequence" \| "warning" \| "error", ...)` | Subscribe to derived-state and diagnostic events |
87878888-Every registration API above returns a disposer.
8888+Every registration API above returns disposer.
89899090## Field compilers
9191···100100Important behavior:
101101102102- `require(name, value)` ties activation to `keymap` runtime data.
103103-- `activeWhen(...)` accepts either a raw callback or a `ReactiveMatcher`.
103103+- `activeWhen(...)` accepts either raw callback or `ReactiveMatcher`.
104104- `attr(name, value)` exposes compiled metadata through query surfaces.
105105-- Layer fields do not have `attr(...)` because there is no layer-level public attrs surface.
105105+- Layer fields do not have `attr(...)` because there's no layer-level public attrs surface.
106106107107-`ReactiveMatcher` is the cache-friendly form:
107107+`ReactiveMatcher` is cache-friendly form:
108108109109```ts
110110interface ReactiveMatcher {
···117117118118## Binding pipeline callbacks
119119120120-String bindings go through an ordered pipeline.
120120+String bindings go through ordered pipeline.
121121122122-1. Expanders rewrite the input string.
122122+1. Expanders rewrite input string.
1231232. Parsers turn strings into `KeySequencePart[]`.
1241243. Transformers rewrite parsed bindings or add more.
125125126126-Layer-binding transformers run earlier than that pipeline and only once, when the layer is registered. Use them when an addon needs to replace or filter the whole `BindingInput[]` set before compilation.
126126+Layer-binding transformers run earlier than that pipeline and only once, when layer is registered. Use them when addon needs to replace or filter whole `BindingInput[]` set before compilation.
127127128128Object-form keys such as `{ name: "return", ctrl: true }` skip string parsing and normalize directly.
129129···168168Ordering rules:
169169170170- `prepend*` registrations run before `append*` registrations.
171171-- `clearBindingExpanders()`, `clearBindingParsers()` and `clearBindingTransformers()` remove the entire stage for that keymap.
171171+- `clearBindingExpanders()`, `clearBindingParsers()` and `clearBindingTransformers()` remove entire stage for that keymap.
172172173173-Use the `clear*()` methods only when your addon owns that whole stage. They are global to the keymap, not scoped to your addon.
173173+Use `clear*()` methods only when your addon owns that whole stage. They are global to keymap, not scoped to your addon.
174174175175## Command, event and disambiguation callbacks
176176···196196| `record` | Custom `CommandRecord` metadata |
197197| `rejectedResult` | Override the default rejected result |
198198199199-Resolver results used for static binding commands and command-view projections may be cached for the lifetime of that active or registered view.
200200-Programmatic `runCommand()` and `dispatchCommand()` resolve the supplied command string for each call.
201201-Put per-execution behavior in the returned `run(ctx)` handler.
199199+Resolver results used for static binding commands and command-view projections may be cached for lifetime of that active or registered view.
200200+Programmatic `runCommand()` and `dispatchCommand()` resolve supplied command string for each call.
201201+Put per-execution behavior in returned `run(ctx)` handler.
202202203203### `EventMatchResolver`
204204···206206(event, ctx) => readonly KeyMatch[] | undefined
207207```
208208209209-`EventMatchResolverContext` exposes `resolveKey(key)`, which lets a resolver map a host event to the same internal match keys the parser uses.
209209+`EventMatchResolverContext` exposes `resolveKey(key)`, which lets resolver map host event to same internal match keys parser uses.
210210211211### `KeyDisambiguationResolver`
212212213213-Use this when the same sequence is both an exact command and a prefix, such as `g` and `gg`.
213213+Use this when same sequence is both exact command and prefix, such as `g` and `gg`.
214214215215-Register a disambiguation resolver before registering same-layer exact/prefix bindings. Without a resolver, the compiler rejects the ambiguous binding and keeps the valid earlier bindings.
215215+Register disambiguation resolver before registering same-layer exact/prefix bindings. Without resolver, compiler rejects ambiguous binding and keeps valid earlier bindings.
216216217217`KeyDisambiguationContext` exposes:
218218···229229| `clear()` | Clear the pending sequence |
230230| `defer(handler)` | Start cancellable async disambiguation work |
231231232232-Disambiguation resolvers themselves must return synchronously. If you need async behavior, use `ctx.defer(...)`. The handler receives a `KeyDeferredDisambiguationContext`:
232232+Disambiguation resolvers themselves must return synchronously. If you need async behavior, use `ctx.defer(...)`. handler receives `KeyDeferredDisambiguationContext`:
233233234234| Member | Purpose |
235235| -------------------- | --------------------------------------------------------------------------------------------------------- |
···241241| `continueSequence()` | Decision: keep the prefix pending |
242242| `clear()` | Decision: clear the pending sequence |
243243244244-The handler may return a decision, a `Promise<decision>`, or nothing. Return nothing after `signal` aborts to drop the deferred work without dispatching.
244244+ handler may return decision, `Promise<decision>`, or nothing. Return nothing after `signal` aborts to drop deferred work without dispatching.
245245246246-Command handlers are different: they may return a promise, but only a synchronous `false` rejects the current candidate and lets lower-precedence handlers continue.
246246+Command handlers are different: they may return promise, but only synchronous `false` rejects current candidate and lets lower-precedence handlers continue.
247247248248### `LayerAnalyzer`
249249250250-Analyzers run while a layer compiles and receive a projected view of the compiled bindings.
250250+Analyzers run while layer compiles and receive projected view of compiled bindings.
251251252252`LayerAnalysisContext` exposes:
253253···260260| `checkCommandResolution(command)` | Probe whether a string command resolves |
261261| `warn(...)` / `warnOnce(...)` / `error(...)` | Emit diagnostics |
262262263263-`clearLayerAnalyzers()` removes all registered analyzers for the keymap.
263263+`clearLayerAnalyzers()` removes all registered analyzers for keymap.
264264265265## Hooks, intercepts and runtime helpers
266266···299299300300## Shared resources with `acquireResource()`
301301302302-`acquireResource(symbol, setup)` is the public way to share setup and teardown across multiple addon registrations on the same keymap.
302302+`acquireResource(symbol, setup)` is public way to share setup and teardown across multiple addon registrations on same keymap.
303303304304Behavior:
305305306306-- the first acquisition for a symbol runs `setup()`
307307-- later acquisitions for the same symbol reuse the existing resource
308308-- the resource disposer runs only when the last holder releases it
309309-- active resources are disposed when the host is destroyed
310310-- a failed `setup()` is not retained as a partially registered resource
306306+- first acquisition for symbol runs `setup()`
307307+- later acquisitions for same symbol reuse existing resource
308308+- resource disposer runs only when last holder releases it
309309+- active resources are disposed when host is destroyed
310310+- failed `setup()` is not retained as partially registered resource
311311312312-This is how the OpenTUI textarea helpers safely share command and suspension infrastructure.
312312+This is how OpenTUI textarea helpers safely share command and suspension infrastructure.
313313314314## Constraints and quirks
315315···325325326326- Unknown custom layer and binding fields are ignored and emit warnings.
327327- Unknown tokens inside binding strings are ignored and emit warnings.
328328-- Registering the missing token later recompiles affected layers.
328328+- Registering missing token later recompiles affected layers.
329329330330### Re-entry
331331332332- Runtime/data-style re-entry is supported during dispatch. Commands, intercepts and pending-sequence listeners may read and write runtime data.
333333-- Structural re-entry is not supported during dispatch. Do not register or unregister layers, parsers, resolvers, tokens or similar environment-shaping state while a dispatch is in flight.
333333+- Structural re-entry is not supported during dispatch. Do not register or unregister layers, parsers, resolvers, tokens or similar environment-shaping state while dispatch is in flight.
334334335335### Host-dependent behavior
336336337337-- `intercept("raw", ...)` only works when the host implements `onRawInput()`.
338338-- Raw hosts must stop raw input propagation when an `onRawInput()` listener returns `true`.
339339-- After the host is destroyed, host-backed reads such as `getActiveKeys()` are unavailable, but metadata reads such as `getCommands()` and runtime data access remain usable.
337337+- `intercept("raw", ...)` only works when host implements `onRawInput()`.
338338+- Raw hosts must stop raw input propagation when `onRawInput()` listener returns `true`.
339339+- After host is destroyed, host-backed reads such as `getActiveKeys()` are unavailable, but metadata reads such as `getCommands()` and runtime data access remain usable.
340340341341## Reference implementations
342342
+42-42
skills/opentui/docs/keymap/hosts.mdx
···11---
22title: Hosts
33-description: Built-in OpenTUI and HTML adapters plus the KeymapHost contract
33+description: Built-in OpenTUI and HTML adapters plus KeymapHost contract
44order: 2
55navTitle: Hosts
66---
7788# Keymap hosts
991010-OpenTUI Keymap is host-agnostic. A host adapts a runtime's focus model, hierarchy, key events and lifecycle into `KeymapHost<TTarget, TEvent>` so the shared engine can work against it.
1010+OpenTUI Keymap is host-agnostic. host adapts runtime's focus model, hierarchy, key events and lifecycle into `KeymapHost<TTarget, TEvent>` so shared engine can work against it.
11111212-The package ships two built-in hosts:
1212+ package ships two built-in hosts:
13131414- `@opentui/keymap/opentui` for terminal apps built on `CliRenderer` and `Renderable`
1515-- `@opentui/keymap/html` for browser UIs rooted in an `HTMLElement`
1515+- `@opentui/keymap/html` for browser UIs rooted in `HTMLElement`
16161717-If you have not read the shared model yet, start with [Keymap overview](/docs/keymap/overview).
1717+If you have not read shared model yet, start with [Keymap overview](/docs/keymap/overview).
18181919## What a host does
20202121-The keymap core does not know about DOM nodes, terminal renderables or any other UI tree. It only knows about host targets and host events.
2121+ keymap core does not know about DOM nodes, terminal renderables or any other UI tree. It only knows about host targets and host events.
22222323-- `target` on a local layer is a host target object.
2424-- `focus` and `focus-within` activation come from the host's focused target and parent traversal.
2525-- key press and key release events come from the host event stream.
2626-- local layers are cleaned up when the host reports that their target was destroyed or removed.
2727-- `runCommand()` and `dispatchCommand()` need the host to create a synthetic event for programmatic execution.
2828-- raw input interception only exists when the host implements the optional raw-input hook.
2323+- `target` on local layer is host target object.
2424+- `focus` and `focus-within` activation come from host's focused target and parent traversal.
2525+- key press and key release events come from host event stream.
2626+- local layers are cleaned up when host reports that their target was destroyed or removed.
2727+- `runCommand()` and `dispatchCommand()` need host to create synthetic event for programmatic execution.
2828+- raw input interception only exists when host implements optional raw-input hook.
29293030## `KeymapHost`
3131···5757| `stopPropagation()` | Stop later listeners from seeing the event and set `propagationStopped` to `true` |
5858| `propagationStopped` | `true` after `stopPropagation()` was called |
59596060-If your host implements `onRawInput()`, it must call each listener before key parsing and stop when a listener returns `true`.
6060+If your host implements `onRawInput()`, it must call each listener before key parsing and stop when listener returns `true`.
61616262## Built-in host helpers
63636464-Both built-in host packages re-export the shared `@opentui/keymap` API and add the same three layers of helpers:
6464+Both built-in host packages re-export shared `@opentui/keymap` API and add same three layers of helpers:
65656666| Package | Host adapter | Bare keymap helper | Default helper |
6767| ------------------------- | ----------------------------------- | ------------------------------- | -------------------------------------- |
6868| `@opentui/keymap/opentui` | `createOpenTuiKeymapHost(renderer)` | `createOpenTuiKeymap(renderer)` | `createDefaultOpenTuiKeymap(renderer)` |
6969| `@opentui/keymap/html` | `createHtmlKeymapHost(root)` | `createHtmlKeymap(root)` | `createDefaultHtmlKeymap(root)` |
70707171-- The host adapter returns a `KeymapHost` implementation.
7272-- The bare helper creates a `new Keymap(host)` with only the host installed.
7373-- The default helper starts from the bare helper and installs the small default addon set for that host.
7171+- host adapter returns `KeymapHost` implementation.
7272+- bare helper creates `new Keymap(host)` with only host installed.
7373+- default helper starts from bare helper and installs small default addon set for that host.
74747575## OpenTUI host
76767777-`@opentui/keymap/opentui` is the host package for terminal apps built on `@opentui/core`.
7777+`@opentui/keymap/opentui` is host package for terminal apps built on `@opentui/core`.
78787979### What it adds
80808181- `createOpenTuiKeymapHost(renderer)` - adapts `CliRenderer` and `Renderable` to `KeymapHost`
8282-- `createOpenTuiKeymap(renderer)` - creates a bare `Keymap<Renderable, KeyEvent>`
8383-- `createDefaultOpenTuiKeymap(renderer)` - creates an OpenTUI keymap with the default parser, enabled fields and metadata fields installed
8282+- `createOpenTuiKeymap(renderer)` - creates bare `Keymap<Renderable, KeyEvent>`
8383+- `createDefaultOpenTuiKeymap(renderer)` - creates OpenTUI keymap with default parser, enabled fields and metadata fields installed
84848585### Basic usage
8686···104104})
105105```
106106107107-If you want to control the installed addons yourself, start from `createOpenTuiKeymap(renderer)` and register addons manually.
107107+If want to control installed addons yourself, start from `createOpenTuiKeymap(renderer)` and register addons manually.
108108109109### Host behavior
110110···119119| Raw input interception | `renderer.prependInputHandler(...)` |
120120| Synthetic command event | New `KeyEvent` with `name: "command"` |
121121122122-`createOpenTuiKeymap(renderer)` throws if the renderer is already destroyed.
122122+`createOpenTuiKeymap(renderer)` throws if renderer is already destroyed.
123123124124### Default helper
125125···133133134134### Event notes
135135136136-- Press and release events come directly from the renderer's key input stream.
137137-- Programmatic `runCommand()` and `dispatchCommand()` calls receive the synthetic `KeyEvent` created by `createCommandEvent()`.
136136+- Press and release events come directly from renderer's key input stream.
137137+- Programmatic `runCommand()` and `dispatchCommand()` calls receive synthetic `KeyEvent` created by `createCommandEvent()`.
138138- Kitty-specific fields on `KeyEvent`, such as `baseCode`, stay available to addons like `registerBaseLayoutFallback()`.
139139140140### OpenTUI-specific addons
141141142142-`@opentui/keymap/addons/opentui` adds helpers on top of the shared addon set:
142142+`@opentui/keymap/addons/opentui` adds helpers on top of shared addon set:
143143144144- `registerBaseLayoutFallback()` - match against Kitty base-layout codepoints
145145-- `createTextareaBindings()` - generate textarea bindings from the shared edit-buffer command set
146146-- `registerEditBufferCommands()` - register the edit-buffer command layer against `renderer.currentFocusedEditor`
147147-- `registerTextareaMappingSuspension()` - suspend a focused `TextareaRenderable`'s built-in mapped shortcuts
148148-- `registerManagedTextareaLayer()` - high-level textarea integration combining the helpers above
145145+- `createTextareaBindings()` - generate textarea bindings from shared edit-buffer command set
146146+- `registerEditBufferCommands()` - register edit-buffer command layer against `renderer.currentFocusedEditor`
147147+- `registerTextareaMappingSuspension()` - suspend focused `TextareaRenderable`'s built-in mapped shortcuts
148148+- `registerManagedTextareaLayer()` - high-level textarea integration combining helpers above
149149150150Example: `packages/examples/src/keymap-demo.ts`
151151152152-See [Built-in Addons](/docs/keymap/addons) for the rest of the shipped addon surface and [Custom Addons](/docs/keymap/custom-addons) for addon authoring.
152152+See [Built-in Addons](/docs/keymap/addons) for rest of shipped addon surface and [Custom Addons](/docs/keymap/custom-addons) for addon authoring.
153153154154## HTML host
155155156156-`@opentui/keymap/html` is the host package for browser UIs rooted in an `HTMLElement` subtree.
156156+`@opentui/keymap/html` is host package for browser UIs rooted in `HTMLElement` subtree.
157157158158Live demo: [HTML keymap demo](/demos/keymap-html/)
159159···161161162162- `HtmlKeymapEvent` - shared keymap event plus optional `originalEvent: KeyboardEvent`
163163- `normalizeHtmlKeyName(key)` - normalizes browser `event.key` values to keymap names
164164-- `createHtmlKeymapEvent(event?)` - wraps a `KeyboardEvent` in `HtmlKeymapEvent`
165165-- `createHtmlKeymapHost(root)` - adapts an `HTMLElement` subtree to `KeymapHost`
164164+- `createHtmlKeymapEvent(event?)` - wraps `KeyboardEvent` in `HtmlKeymapEvent`
165165+- `createHtmlKeymapHost(root)` - adapts `HTMLElement` subtree to `KeymapHost`
166166- `htmlEventMatchResolver` - HTML-specific event matcher for browser key events
167167-- `createHtmlKeymap(root)` - creates a bare `Keymap<HTMLElement, HtmlKeymapEvent>`
168168-- `createDefaultHtmlKeymap(root)` - creates an HTML keymap with the default parser, enabled fields, metadata fields and HTML event matching installed
167167+- `createHtmlKeymap(root)` - creates bare `Keymap<HTMLElement, HtmlKeymapEvent>`
168168+- `createDefaultHtmlKeymap(root)` - creates HTML keymap with default parser, enabled fields, metadata fields and HTML event matching installed
169169170170### Basic usage
171171···188188})
189189```
190190191191-If you want to control parser or event-matching stages yourself, start from `createHtmlKeymap(root)` and install the pieces manually.
191191+If want to control parser or event-matching stages yourself, start from `createHtmlKeymap(root)` and install pieces manually.
192192193193### Key normalization
194194···201201| `altKey` | `meta` | Keymap uses `meta` for Alt/Option |
202202| `metaKey` | `super` | Keymap uses `super` for the platform Meta key |
203203204204-The HTML matcher also adds an unshifted match candidate for shifted printable punctuation, so bindings such as `":"` and `"?"` work as literal keys instead of forcing `shift+semicolon`-style spellings.
204204+ HTML matcher also adds unshifted match candidate for shifted printable punctuation, so bindings such as `":"` and `"?"` work as literal keys instead of forcing `shift+semicolon`-style spellings.
205205206206### Host behavior
207207···216216| Raw input interception | Not provided by the HTML host |
217217| Synthetic command event | `createHtmlKeymapEvent()` with no DOM event |
218218219219-When a target element disconnects from the rooted subtree, local layers registered against it are removed.
219219+When target element disconnects from rooted subtree, local layers registered against it are removed.
220220221221### Default helper
222222···225225- `registerDefaultKeys()`
226226- `registerEnabledFields()`
227227- `registerMetadataFields()`
228228-- `htmlEventMatchResolver` via `prependEventMatchResolver(...)` so HTML-specific matching runs before the canonical matcher
228228+- `htmlEventMatchResolver` via `prependEventMatchResolver(...)` so HTML-specific matching runs before canonical matcher
229229230230-Call `prependEventMatchResolver(...)` for any custom resolver that must run before the HTML matcher.
230230+Call `prependEventMatchResolver(...)` for any custom resolver that must run before HTML matcher.
231231232232## Custom hosts
233233234234-If neither built-in host fits your runtime, implement `KeymapHost` yourself and construct the engine directly:
234234+If neither built-in host fits your runtime, implement `KeymapHost` yourself and construct engine directly:
235235236236```ts
237237import { Keymap, type KeymapHost } from "@opentui/keymap"
···239239const keymap = new Keymap(host as KeymapHost<object>)
240240```
241241242242-Use [Core](/docs/keymap/core) for the bare engine APIs and extension points.
242242+Use [Core](/docs/keymap/core) for bare engine APIs and extension points.
+49-49
skills/opentui/docs/keymap/overview.mdx
···44order: 1
55navTitle: Overview
66skill:
77- entry: true
88- intents: [keymap, keybindings, shortcuts, commands, leader, ex-commands]
77+ entry: true
88+ intents: [keymap, keybindings, shortcuts, commands, leader, ex-commands]
99---
10101111# Keymap
12121313-OpenTUI Keymap is a host-agnostic binding engine for terminals and the browser. It gives you layered shortcuts, discoverable commands, sequence handling and framework-ready state so one key system can drive the whole app.
1313+OpenTUI Keymap is host-agnostic binding engine for terminals and browser. It gives you layered shortcuts, discoverable commands, sequence handling and framework-ready state so one key system can drive whole app.
14141515## Installation
1616···20202121Live demo: [HTML keymap demo](/demos/keymap-html/)
22222323-A binding can target a named command, an inline handler, or a specific key event:
2323+ binding can target named command, inline handler, or specific key event:
24242525```ts
2626;[
···44444545## Register
46464747-Shape the keymap by registering layers, tokens and addons. Each layer declares bindings that map keys or key sequences to commands, optionally scoped to a host target with a priority. Addons extend the engine with parsers, field compilers, command resolvers and more.
4747+Shape keymap by registering layers, tokens and addons. Each layer declares bindings that map keys or key sequences to commands, optionally scoped to host target with priority. Addons extend engine with parsers, field compilers, command resolvers and more.
48484949- Use `registerLayer()` to add bindings and commands.
5050- Use `registerToken()` to define named key aliases like `<leader>`.
5151- Use addons to install parsers, field compilers, disambiguation and other behaviour.
5252-- Every registration call returns a disposer for cleanup.
5353-- See [Hosts](/docs/keymap/hosts) for how targets, hierarchy and focus enter the engine.
5252+- Every registration call returns disposer for cleanup.
5353+- See [Hosts](/docs/keymap/hosts) for how targets, hierarchy and focus enter engine.
54545555## Dispatch
56565757-When a key event arrives from the host, the engine walks the active layers to find matching bindings, resolves ambiguity between exact matches and sequence prefixes, and runs the winning command. Intercepts can observe or consume input before binding resolution.
5757+When key event arrives from host, engine walks active layers to find matching bindings, resolves ambiguity between exact matches and sequence prefixes, and runs winning command. Intercepts can observe or consume input before binding resolution.
58585959- Bindings are matched against active layers based on focus, priority and conditions.
6060-- Multi-stroke sequences build up a pending sequence until resolved.
6161-- Commands run in your application space. A synchronous `false` lets lower-precedence handlers continue; async commands are handled immediately and report async errors through diagnostics.
6262-- Use `intercept("key", ...)` or `intercept("raw", ...)` to hook into the input pipeline.
6060+- Multi-stroke sequences build up pending sequence until resolved.
6161+- Commands run in your application space. synchronous `false` lets lower-precedence handlers continue; async commands are handled immediately and report async errors through diagnostics.
6262+- Use `intercept("key", ...)` or `intercept("raw", ...)` to hook into input pipeline.
6363- See [Hosts](/docs/keymap/hosts) for how built-in hosts deliver press, release, focus and optional raw input events.
64646565## Query
66666767-Ask the keymap what is currently available. Query results reflect the live state -- they change when focus, pending sequence, runtime data or conditions change.
6767+Ask keymap what is currently available. Query results reflect live state -- they change when focus, pending sequence, runtime data or conditions change.
68686969-- `getActiveKeys()` returns the keys that can fire from the current focus and pending state.
6969+- `getActiveKeys()` returns keys that can fire from current focus and pending state.
7070- `getCommands()`, `getCommandEntries()` and `getCommandBindings()` return command metadata and binding projections.
7171-- `getPendingSequence()` returns the current multi-stroke prefix.
7171+- `getPendingSequence()` returns current multi-stroke prefix.
7272- `runCommand()` and `dispatchCommand()` execute commands programmatically.
7373- Subscribe to `on("state")` for batched change notifications.
7474- See [Hosts](/docs/keymap/hosts) for how host focus and target lifecycle affect what is active.
75757676## Bindings
77777878-Bindings are data, not hard-coded event listeners. Each layer contributes binding records that the engine compiles into sequence trees and then projects through focus, priority, runtime conditions and pending-sequence state.
7878+Bindings are data, not hard-coded event listeners. Each layer contributes binding records that engine compiles into sequence trees and then projects through focus, priority, runtime conditions and pending-sequence state.
79798080### Binding shape
81818282-A binding always has a `key`, and it can also specify `cmd`, `event`, `preventDefault`, `fallthrough` and any custom fields installed by addons or app code.
8282+ binding always has `key`, and it can also specify `cmd`, `event`, `preventDefault`, `fallthrough` and any custom fields installed by addons or app code.
83838484-- `key` can be a string like `"ctrl+x"`, `"dd"` or `"<leader>s"`, or an object stroke like `{ name: "return", ctrl: true }`.
8585-- `cmd` can be a named command string or an inline handler.
8484+- `key` can be string like `"ctrl+x"`, `"dd"` or `"<leader>s"`, or object stroke like `{ name: "return", ctrl: true }`.
8585+- `cmd` can be named command string or inline handler.
8686- `event` defaults to `"press"`; use `"release"` for release bindings.
8787-- `preventDefault` defaults to `true` and calls `event.preventDefault()` plus `event.stopPropagation()` so the matched key does not reach the host target.
8888-- `fallthrough` defaults to `false`; setting `true` lets later matching bindings in the same dispatch chain still run after this command. It is independent of `preventDefault`, which controls whether the event escapes the keymap.
8787+- `preventDefault` defaults to `true` and calls `event.preventDefault()` plus `event.stopPropagation()` so matched key does not reach host target.
8888+- `fallthrough` defaults to `false`; setting `true` lets later matching bindings in same dispatch chain still run after this command. it's independent of `preventDefault`, which controls whether event escapes keymap.
89899090-Release bindings are supported, but only for a single stroke. Multi-stroke release bindings such as `"dd"` with `event: "release"` are rejected. Release bindings dispatch on key release, but they do not appear in `getActiveKeys()` because active-key discovery is based on press/pending-sequence state.
9090+Release bindings are supported, but only for single stroke. Multi-stroke release bindings such as `"dd"` with `event: "release"` are rejected. Release bindings dispatch on key release, but they do not appear in `getActiveKeys()` because active-key discovery is based on press/pending-sequence state.
91919292### Parser-driven strings
93939494-String keys are parser-driven. The engine does not hard-code one binding syntax into the core; it runs registered binding expanders, parsers and transformers to turn binding input into compiled sequences.
9494+String keys are parser-driven. engine does not hard-code one binding syntax into core; it runs registered binding expanders, parsers and transformers to turn binding input into compiled sequences.
95959696- Expanders can rewrite one key string into multiple key strings.
9797-- Parsers turn a string into one or more normalized strokes.
9898-- Transformers can rewrite or add parsed bindings before the layer is compiled.
9797+- Parsers turn string into one or more normalized strokes.
9898+- Transformers can rewrite or add parsed bindings before layer is compiled.
9999100100-The shared default parser accepts single-stroke named keys, modifier chords, literal punctuation, `" "` for space, `"+"` as a literal plus key, and concatenated multi-stroke sequences such as `"dd"` or `"<leader>s"`.
100100+ shared default parser accepts single-stroke named keys, modifier chords, literal punctuation, `" "` for space, `"+"` as literal plus key, and concatenated multi-stroke sequences such as `"dd"` or `"<leader>s"`.
101101102102-Object-form keys are the escape hatch when you do not want string parsing. `{ name: "return", ctrl: true }` skips the string parser and normalizes directly to a single stroke.
102102+Object-form keys are escape hatch when you do not want string parsing. `{ name: "return", ctrl: true }` skips string parser and normalizes directly to single stroke.
103103104104-This parser-driven model is why the same engine can support built-in strings like `"ctrl+x"`, tokenized strings like `"<leader>s"`, and addon-defined syntaxes such as bracket tokens or Emacs-style expansions.
104104+This parser-driven model is why same engine can support built-in strings like `"ctrl+x"`, tokenized strings like `"<leader>s"`, and addon-defined syntaxes such as bracket tokens or Emacs-style expansions.
105105106106### Tokens
107107108108-Tokens are named single-stroke aliases used inside binding strings. Registering `<leader>` as space lets you write bindings like `"<leader>s"` without repeating the underlying key everywhere.
108108+Tokens are named single-stroke aliases used inside binding strings. Registering `<leader>` as space lets you write bindings like `"<leader>s"` without repeating underlying key everywhere.
109109110110```ts
111111keymap.registerToken({ name: "<leader>", key: { name: "space" } })
···115115})
116116```
117117118118-Tokens are compile-time input syntax, not a separate dispatch mode. They resolve to exactly one stroke, participate in sequence matching like any other stroke, and can be queried with their preserved display form.
118118+Tokens are compile-time input syntax, not separate dispatch mode. They resolve to exactly one stroke, participate in sequence matching like any other stroke, and can be queried with their preserved display form.
119119120120### Custom binding fields
121121122122-Bindings can carry custom fields, but those fields only mean something after you register a binding-field compiler with `registerBindingFields()`. A binding field compiler can:
122122+Bindings can carry custom fields, but those fields only mean something after you register binding-field compiler with `registerBindingFields()`. binding field compiler can:
123123124124- declare runtime requirements with `require(...)`
125125- add runtime matchers with `activeWhen(...)`
···141141})
142142```
143143144144-In that example, the binding is only active while `getData("vim.mode")` is `"normal"`, and the compiled binding metadata can expose `{ mode: "normal" }` through query APIs when metadata is requested.
144144+In that example, binding is only active while `getData("vim.mode")` is `"normal"`, and compiled binding metadata can expose `{ mode: "normal" }` through query APIs when metadata is requested.
145145146146-Unknown custom binding fields are not fatal. If no binding-field compiler is registered for a field, the keymap ignores that field and emits a warning.
146146+Unknown custom binding fields are not fatal. If no binding-field compiler is registered for field, keymap ignores that field and emits warning.
147147148148-All entry points below use the same registration, dispatch and query model. They only differ in how they provide targets, focus and input events.
148148+All entry points below use same registration, dispatch and query model. They only differ in how they provide targets, focus and input events.
149149150150## Commands
151151152152-Named commands are the stable app actions in the system. A layer can register a command with a `name`, a `run()` handler and optional fields like `title`, `desc` or `namespace`, and bindings can point at that command by name. Inline binding handlers work too, but named commands are what power command palettes, search and programmatic execution.
152152+Named commands are stable app actions in system. layer can register command with `name`, `run()` handler and optional fields like `title`, `desc` or `namespace`, and bindings can point at that command by name. Inline binding handlers work too, but named commands are what power command palettes, search and programmatic execution.
153153154154-Command queries return both raw registration `fields` and any compiled `attrs` produced by command-field addons. `runCommand()` executes the registered command chain directly, while `dispatchCommand()` goes through the active dispatch model and can return `inactive` or `disabled` when that command exists but is not currently dispatchable.
154154+Command queries return both raw registration `fields` and any compiled `attrs` produced by command-field addons. `runCommand()` executes registered command chain directly, while `dispatchCommand()` goes through active dispatch model and can return `inactive` or `disabled` when that command exists but is not currently dispatchable.
155155156156## Runtime data
157157158158-Runtime data is the keymap's mutable key-value store. `setData()` and `getData()` let commands, intercepts and matchers share live state such as an editor mode, leader state or search context.
158158+Runtime data is keymap's mutable key-value store. `setData()` and `getData()` let commands, intercepts and matchers share live state such as editor mode, leader state or search context.
159159160160-That data also drives activation. Layer, binding and command fields can depend on runtime values through `require(...)` and `activeWhen(...)`, so changing a value immediately recomputes what is reachable. If the current pending sequence no longer matches after a data change, the engine clears it.
160160+That data also drives activation. Layer, binding and command fields can depend on runtime values through `require(...)` and `activeWhen(...)`, so changing value immediately recomputes what is reachable. If current pending sequence no longer matches after data change, engine clears it.
161161162162## Pending sequences and active keys
163163164164-A pending sequence is the prefix the user has already typed, such as `g` while waiting to see whether the next key completes `gg` or `gd`. `getPendingSequence()` exposes that prefix, and `clearPendingSequence()` / `popPendingSequence()` let addons or app code manage it explicitly.
164164+ pending sequence is prefix user has already typed, such as `g` while waiting to see whether next key completes `gg` or `gd`. `getPendingSequence()` exposes that prefix, and `clearPendingSequence()` / `popPendingSequence()` let addons or app code manage it explicitly.
165165166166-`getActiveKeys()` is the companion query. It does not list every registered binding; it projects the next reachable strokes from the current focus and pending state. That makes it the right API for key hints, which-key style UIs and other live discovery surfaces.
166166+`getActiveKeys()` is companion query. It does not list every registered binding; it projects next reachable strokes from current focus and pending state. That makes it right API for key hints, which-key style UIs and other live discovery surfaces.
167167168168-- [Hosts](/docs/keymap/hosts) - built-in OpenTUI and HTML adapters plus the `KeymapHost` contract
169169-- [Core](/docs/keymap/core) - bare `Keymap` and the shared runtime APIs
170170-- [React](/docs/keymap/react) - provider and hooks for a pre-created OpenTUI keymap
171171-- [Solid](/docs/keymap/solid) - provider and hooks for a pre-created OpenTUI keymap
168168+- [Hosts](/docs/keymap/hosts) - built-in OpenTUI and HTML adapters plus `KeymapHost` contract
169169+- [Core](/docs/keymap/core) - bare `Keymap` and shared runtime APIs
170170+- [React](/docs/keymap/react) - provider and hooks for pre-created OpenTUI keymap
171171+- [Solid](/docs/keymap/solid) - provider and hooks for pre-created OpenTUI keymap
172172- [Built-in Addons](/docs/keymap/addons) - shipped universal and OpenTUI-specific addons
173173- [Custom Addons](/docs/keymap/custom-addons) - public addon-authoring APIs, contexts and constraints
174174···194194| `createDefaultOpenTuiKeymap(...)` | OpenTUI keymap plus default keys, enabled fields and metadata fields |
195195| `createDefaultHtmlKeymap(...)` | HTML keymap plus default keys, enabled fields, metadata fields and event matching |
196196197197-The default helpers intentionally stay small. Leader tokens, ex commands, timed disambiguation, warning analyzers and OpenTUI textarea helpers are separate addons.
197197+ default helpers intentionally stay small. Leader tokens, ex commands, timed disambiguation, warning analyzers and OpenTUI textarea helpers are separate addons.
198198199199## Next
200200201201-- [Hosts](/docs/keymap/hosts) explains the built-in host adapters and the `KeymapHost` contract.
202202-- [Core](/docs/keymap/core) documents the shared runtime, queries, intercepts and extension points.
203203-- [Built-in Addons](/docs/keymap/addons) covers the shipped addon packages.
204204-- [Custom Addons](/docs/keymap/custom-addons) covers the public addon-authoring APIs and extension-point constraints.
205205-- [Hosts](/docs/keymap/hosts), [React](/docs/keymap/react) and [Solid](/docs/keymap/solid) cover the built-in host and framework-specific surfaces.
201201+- [Hosts](/docs/keymap/hosts) explains built-in host adapters and `KeymapHost` contract.
202202+- [Core](/docs/keymap/core) documents shared runtime, queries, intercepts and extension points.
203203+- [Built-in Addons](/docs/keymap/addons) covers shipped addon packages.
204204+- [Custom Addons](/docs/keymap/custom-addons) covers public addon-authoring APIs and extension-point constraints.
205205+- [Hosts](/docs/keymap/hosts), [React](/docs/keymap/react) and [Solid](/docs/keymap/solid) cover built-in host and framework-specific surfaces.
+14-14
skills/opentui/docs/keymap/react.mdx
···11---
22title: React (OpenTUI)
33-description: React provider and hooks for a pre-created OpenTUI keymap
33+description: React provider and hooks for pre-created OpenTUI keymap
44order: 4
55navTitle: React (OpenTUI)
66---
···991010This page covers `@opentui/keymap/react`.
11111212-These bindings are for OpenTUI React apps. They consume a pre-created `Keymap<Renderable, KeyEvent>` from `@opentui/keymap/opentui`; they do not wrap the DOM/HTML adapter used in browser React apps.
1212+These bindings are for OpenTUI React apps. They consume pre-created `Keymap<Renderable, KeyEvent>` from `@opentui/keymap/opentui`; they do not wrap DOM/HTML adapter used in browser React apps.
13131414-If you have not read the shared model yet, start with [Keymap overview](/docs/keymap/overview). For keymap construction, see [Keymap hosts](/docs/keymap/hosts).
1414+If you have not read shared model yet, start with [Keymap overview](/docs/keymap/overview). For keymap construction, see [Keymap hosts](/docs/keymap/hosts).
15151616## What React adds
17171818-- `KeymapProvider` - React context provider for an existing OpenTUI keymap
1919-- `useKeymap()` - returns the current OpenTUI keymap from context
2020-- `useBindings(createLayer, deps?)` - registers a keymap layer for the component lifecycle
1818+- `KeymapProvider` - React context provider for existing OpenTUI keymap
1919+- `useKeymap()` - returns current OpenTUI keymap from context
2020+- `useBindings(createLayer, deps?)` - registers keymap layer for component lifecycle
2121- `useActiveKeys(options?)` - derived active key list
2222- `usePendingSequence()` - derived pending sequence
2323-- `reactiveMatcherFromStore(subscribe, getSnapshot, predicate?)` - adapts an external store to `ReactiveMatcher`
2323+- `reactiveMatcherFromStore(subscribe, getSnapshot, predicate?)` - adapts external store to `ReactiveMatcher`
24242525## Basic usage
2626···80808181## `useBindings`
82828383-`useBindings()` registers a full `LayerFields<Renderable, KeyEvent>` object. The returned layer can include `priority`, `enabled`, `bindings`, `commands` and any custom addon fields.
8383+`useBindings()` registers full `LayerFields<Renderable, KeyEvent>` object. returned layer can include `priority`, `enabled`, `bindings`, `commands` and any custom addon fields.
84848585-React memoizes `createLayer` with `useMemo(createLayer, deps)`. If you omit `deps`, the hook treats the layer factory as static after mount because the default is `[]`. If the layer shape depends on props or React state, include those values in `deps`.
8585+React memoizes `createLayer` with `useMemo(createLayer, deps)`. If you omit `deps`, hook treats layer factory as static after mount because default is `[]`. If layer shape depends on props or React state, include those values in `deps`.
86868787React-specific layer shapes:
8888···9393| Local exact-focus layer | Set `targetRef` and `targetMode: "focus"` |
94949595- When `targetRef` is present and `targetMode` is omitted, `focus-within` is used.
9696-- If `targetRef.current` is `null`, registration waits until the ref resolves.
9797-- Passing a local `targetMode` without `targetRef` throws.
9898-- `deps` controls when the layer factory is re-evaluated.
9999-- Local layers follow `targetRef.current`, so they can wait for a ref to mount and retarget if that ref later points at a different renderable.
9696+- If `targetRef.current` is `null`, registration waits until ref resolves.
9797+- Passing local `targetMode` without `targetRef` throws.
9898+- `deps` controls when layer factory is re-evaluated.
9999+- Local layers follow `targetRef.current`, so they can wait for ref to mount and retarget if that ref later points at different renderable.
100100101101## `useActiveKeys()` and `usePendingSequence()`
102102···109109110110## `reactiveMatcherFromStore()`
111111112112-Use this when an addon field expects a `ReactiveMatcher`, for example the shipped `enabled` field:
112112+Use this when addon field expects `ReactiveMatcher`, for example shipped `enabled` field:
113113114114```tsx
115115const matcher = useMemo(
+15-15
skills/opentui/docs/keymap/solid.mdx
···11---
22title: Solid (OpenTUI)
33-description: Solid provider and hooks for a pre-created OpenTUI keymap
33+description: Solid provider and hooks for pre-created OpenTUI keymap
44order: 5
55navTitle: Solid (OpenTUI)
66---
···991010This page covers `@opentui/keymap/solid`.
11111212-These bindings are for OpenTUI Solid apps. They consume a pre-created `Keymap<Renderable, KeyEvent>` from `@opentui/keymap/opentui`; they do not wrap the DOM/HTML adapter used in browser Solid apps.
1212+These bindings are for OpenTUI Solid apps. They consume pre-created `Keymap<Renderable, KeyEvent>` from `@opentui/keymap/opentui`; they do not wrap DOM/HTML adapter used in browser Solid apps.
13131414-If you have not read the shared model yet, start with [Keymap overview](/docs/keymap/overview). For keymap construction, see [Keymap hosts](/docs/keymap/hosts).
1414+If you have not read shared model yet, start with [Keymap overview](/docs/keymap/overview). For keymap construction, see [Keymap hosts](/docs/keymap/hosts).
15151616## What Solid adds
17171818-- `KeymapProvider` - Solid context provider for an existing OpenTUI keymap
1919-- `useKeymap()` - returns the current OpenTUI keymap from context
2020-- `useBindings(createLayer)` - registers a keymap layer for the current reactive scope
2121-- `useKeymapSelector(selector)` - reactively derives any value from the current keymap
2222-- `reactiveMatcherFromSignal(accessor, predicate?)` - adapts a Solid accessor to `ReactiveMatcher`
1818+- `KeymapProvider` - Solid context provider for existing OpenTUI keymap
1919+- `useKeymap()` - returns current OpenTUI keymap from context
2020+- `useBindings(createLayer)` - registers keymap layer for current reactive scope
2121+- `useKeymapSelector(selector)` - reactively derives any value from current keymap
2222+- `reactiveMatcherFromSignal(accessor, predicate?)` - adapts Solid accessor to `ReactiveMatcher`
23232424## Basic usage
2525···76767777## `useBindings`
78787979-`useBindings()` registers a full `LayerFields<Renderable, KeyEvent>` object. The returned layer can include `priority`, `enabled`, `bindings`, `commands` and any custom addon fields.
7979+`useBindings()` registers full `LayerFields<Renderable, KeyEvent>` object. returned layer can include `priority`, `enabled`, `bindings`, `commands` and any custom addon fields.
80808181-Solid runs `createLayer()` inside a reactive `createEffect`. Any tracked signals or memos you read inside the factory become dependencies, so the hook will unregister and re-register the layer when those values change. If the factory does not read reactive values, the layer stays stable.
8181+Solid runs `createLayer()` inside reactive `createEffect`. Any tracked signals or memos you read inside factory become dependencies, so hook will unregister and re-register layer when those values change. If factory does not read reactive values, layer stays stable.
82828383Solid-specific layer shapes:
8484···8989| Local exact-focus layer | Set `target` accessor and `targetMode: "focus"` |
90909191- When `target` is present and `targetMode` is omitted, `focus-within` is used.
9292-- If the target accessor returns `undefined`, registration waits until it resolves.
9393-- Passing a local `targetMode` without `target` throws.
9292+- If target accessor returns `undefined`, registration waits until it resolves.
9393+- Passing local `targetMode` without `target` throws.
94949595## `useKeymapSelector()`
96969797-`useKeymapSelector()` is the general derived-read API for Solid. It returns an `Accessor<T>`, so you read the current value by calling it:
9797+`useKeymapSelector()` is general derived-read API for Solid. It returns `Accessor<T>`, so you read current value by calling it:
98989999```tsx
100100const activeKeys = useKeymapSelector((keymap) => keymap.getActiveKeys({ includeMetadata: true }))
···106106107107Use it for command palettes, key hint UIs, leader prompts, status bars, or any other derived keymap view.
108108109109-When the underlying host is destroyed mid-update, `useKeymapSelector()` returns the previous accessor value instead of throwing, so subscribers can render once more before their owner cleans up. The first read still throws if the host is already gone.
109109+When underlying host is destroyed mid-update, `useKeymapSelector()` returns previous accessor value instead of throwing, so subscribers can render once more before their owner cleans up. first read still throws if host is already gone.
110110111111## `reactiveMatcherFromSignal()`
112112113113-Use this when an addon field expects a `ReactiveMatcher`, for example the shipped `enabled` field:
113113+Use this when addon field expects `ReactiveMatcher`, for example shipped `enabled` field:
114114115115```tsx
116116useBindings(() => ({
+21-21
skills/opentui/docs/plugins/core.mdx
···6677# Core slots
8899-This page shows the core host API for plugin slots.
99+This page shows core host API for plugin slots.
10101111-Use slots when you want external modules to render `BaseRenderable` UI in host-defined layout regions without forking the app. The host keeps control of layout and slot typing; plugins only render through the APIs you expose.
1111+Use slots when you want external modules to render `BaseRenderable` UI in host-defined layout regions without forking app. host keeps control of layout and slot typing; plugins only render through APIs you expose.
12121313-If you have not read the shared model yet, start with [Plugin Slots](/docs/plugins/slots).
1313+If you have not read shared model yet, start with [Plugin Slots](/docs/plugins/slots).
14141515## What core adds
16161717On top of `createSlotRegistry`, core provides:
18181919-- `createCoreSlotRegistry` — create a registry typed for `BaseRenderable` nodes
2020-- `registerCorePlugin` — register a plugin using the core-specific `CorePlugin` interface
2121-- `SlotRenderable` — a `Renderable` that mounts a slot into the renderable tree
1919+- `createCoreSlotRegistry` — create registry typed for `BaseRenderable` nodes
2020+- `registerCorePlugin` — register plugin using core-specific `CorePlugin` interface
2121+- `SlotRenderable` — `Renderable` that mounts slot into renderable tree
2222- `resolveCoreSlot` — resolve slot entries without mounting
2323- `@opentui/core/runtime-plugin-support` / `createRuntimePlugin` — runtime module support for external plugin/module loading in Bun
24242525-Core slot renderers receive both the host context and slot data: `(ctx, data) => BaseRenderable`.
2525+Core slot renderers receive both host context and slot data: `(ctx, data) => BaseRenderable`.
26262727-`createCoreSlotRegistry` accepts the same [`SlotRegistryOptions`](/docs/plugins/slots#registry-options) as `createSlotRegistry`.
2727+`createCoreSlotRegistry` accepts same [`SlotRegistryOptions`](/docs/plugins/slots#registry-options) as `createSlotRegistry`.
28282929## Runtime-loaded external plugins
3030···3434import "@opentui/core/runtime-plugin-support"
3535```
36363737-This installs Bun runtime support for `@opentui/core` plus default core runtime entrypoints (`@opentui/core/testing`). Add first-party package runtime modules explicitly when a plugin imports them.
3737+This installs Bun runtime support for `@opentui/core` plus default core runtime entrypoints (`@opentui/core/testing`). Add first-party package runtime modules explicitly when plugin imports them.
38383939-If you need additional host-resolved modules, configure runtime support before the side-effect import is loaded:
3939+If you need additional host-resolved modules, configure runtime support before side-effect import is loaded:
40404141```ts
4242const { ensureRuntimePluginSupport } = await import("@opentui/core/runtime-plugin-support/configure")
···4848})
4949```
50505151-For plugins that import `@opentui/three`, install `@opentui/three` in the host app and pass its runtime module map:
5151+For plugins that import `@opentui/three`, install `@opentui/three` in host app and pass its runtime module map:
52525353```ts
5454import { runtimeModules as threeRuntimeModules } from "@opentui/three/runtime-modules"
···5959})
6060```
61616262-The side-effect import and configurable entrypoint install the same runtime plugin. Late additions throw with a clear error instead of being ignored.
6262+ side-effect import and configurable entrypoint install same runtime plugin. Late additions throw with clear error instead of being ignored.
63636464## `CorePlugin` interface
6565···7171| `dispose` | `() => void` | no | Called when the plugin is unregistered or the registry is cleared. |
7272| `slots` | `Partial<Record<SlotName, CoreSlotContribution>>` | yes | Each value is a renderer function or a [managed slot object](#managed-slot-contributions). |
73737474-A `CoreSlotContribution` is either a plain renderer `(ctx, data) => BaseRenderable` or a `CoreManagedSlot` with lifecycle hooks.
7474+ `CoreSlotContribution` is either plain renderer `(ctx, data) => BaseRenderable` or `CoreManagedSlot` with lifecycle hooks.
75757676## Basic usage
77777878-A `SlotRenderable` extends `Renderable`, so it can be added to any parent like a `BoxRenderable`. It resolves plugins from the registry, manages their lifecycle, and reconciles their output as its children.
7878+ `SlotRenderable` extends `Renderable`, so it can be added to any parent like `BoxRenderable`. It resolves plugins from registry, manages their lifecycle, and reconciles their output as its children.
79798080```typescript
8181import {
···133133slot.destroy()
134134```
135135136136-`registerCorePlugin` returns an unregister function (`() => void`). Calling it removes the plugin and invokes its `dispose` hook.
136136+`registerCorePlugin` returns unregister function (`() => void`). Calling it removes plugin and invokes its `dispose` hook.
137137138138-Because `SlotRenderable` extends `Renderable`, it accepts all standard layout options (`width`, `height`, `flexDirection`, `padding`, etc.) alongside the slot-specific options.
138138+Because `SlotRenderable` extends `Renderable`, it accepts all standard layout options (`width`, `height`, `flexDirection`, `padding`, etc.) alongside slot-specific options.
139139140140## `SlotRenderable` options
141141···160160161161## `resolveCoreSlot`
162162163163-Resolve slot entries without mounting them. Useful when you need to inspect or render plugin output manually.
163163+Resolve slot entries without mounting them. Useful when need to inspect or render plugin output manually.
164164165165```typescript
166166import { createCliRenderer, createCoreSlotRegistry, resolveCoreSlot } from "@opentui/core"
···177177178178## Plugin failure placeholders
179179180180-If a plugin throws during slot render, you can provide host-controlled fallback UI for that plugin failure:
180180+If plugin throws during slot render, provide host-controlled fallback UI for that plugin failure:
181181182182```typescript
183183const slot = new SlotRenderable(renderer, {
···195195196196## Managed slot contributions
197197198198-A core slot contribution can be a plain function or a managed slot object with lifecycle hooks:
198198+ core slot contribution can be plain function or managed slot object with lifecycle hooks:
199199200200```typescript
201201registerCorePlugin(registry, {
···230230231231### Node ownership
232232233233-When a slot contribution is a **plain function**, the host owns the returned nodes. On deactivation or disposal, the host detaches and destroys them.
233233+When slot contribution is **plain function**, host owns returned nodes. On deactivation or disposal, host detaches and destroys them.
234234235235-When a slot contribution is a **managed slot object**, the plugin owns the nodes. On deactivation the host detaches them but does _not_ destroy them — the plugin can reuse them if it becomes active again. On disposal, `onDispose` is called so the plugin can clean up.
235235+When slot contribution is **managed slot object**, plugin owns nodes. On deactivation host detaches them but does _not_ destroy them — plugin can reuse them if it becomes active again. On disposal, `onDispose` is called so plugin can clean up.
236236237237## Observability
238238
+14-14
skills/opentui/docs/plugins/react.mdx
···11---
22title: React
33-description: React slot components backed by the shared plugin registry
33+description: React slot components backed by shared plugin registry
44order: 3
55---
66···8899This page shows React integration for plugin slots.
10101111-Use slots when you want external modules to contribute `ReactNode` UI in host-defined regions without forking your app. The host keeps ownership of layout and slot typing; plugins only see the context and props you expose.
1111+Use slots when you want external modules to contribute `ReactNode` UI in host-defined regions without forking your app. host keeps ownership of layout and slot typing; plugins only see context and props you expose.
12121313-If you have not read the shared model yet, start with [Plugin Slots](/docs/plugins/slots).
1313+If you have not read shared model yet, start with [Plugin Slots](/docs/plugins/slots).
14141515## Runtime-loaded external plugins
1616···2020import "@opentui/react/runtime-plugin-support"
2121```
22222323-This installs Bun runtime support so external TS/TSX plugin modules resolve against the host runtime instances (`@opentui/react`, React JSX runtime modules, and core runtime modules).
2323+This installs Bun runtime support so external TS/TSX plugin modules resolve against host runtime instances (`@opentui/react`, React JSX runtime modules, and core runtime modules).
24242525Use this for plugin systems in both normal Bun runs and standalone compiled executables.
2626···3131registry.register(mod.loadExternalPlugin())
3232```
33333434-If plugins need additional host-resolved modules, configure runtime support before the side-effect import is loaded:
3434+If plugins need additional host-resolved modules, configure runtime support before side-effect import is loaded:
35353636```ts
3737import { ensureRuntimePluginSupport } from "@opentui/react/runtime-plugin-support/configure"
···4343})
4444```
45454646-First-party packages expose side-effect-free runtime module maps. For plugins that import `@opentui/three`, install `@opentui/three` in the host app and pass its runtime modules explicitly:
4646+First-party packages expose side-effect-free runtime module maps. For plugins that import `@opentui/three`, install `@opentui/three` in host app and pass its runtime modules explicitly:
47474848```ts
4949import { runtimeModules as threeRuntimeModules } from "@opentui/three/runtime-modules"
···5454})
5555```
56565757-The side-effect import and configurable entrypoint install the same runtime plugin. Late additions throw with a clear error instead of being ignored.
5757+ side-effect import and configurable entrypoint install same runtime plugin. Late additions throw with clear error instead of being ignored.
58585959## What React adds
60606161-- `createReactSlotRegistry(renderer, context, options?)` — create a registry typed for `ReactNode`. Accepts the same [`SlotRegistryOptions`](/docs/plugins/slots#registry-options) as `createSlotRegistry`.
6262-- `Slot<TSlots, TContext>` — generic slot component that takes `registry` as a required prop
6363-- `createSlot(registry, options?)` — optional convenience helper that returns a registry-bound `<Slot />` component
6464-- `ReactPlugin<TSlots, TContext>` — convenience type alias for a plugin that returns `ReactNode`
6161+- `createReactSlotRegistry(renderer, context, options?)` — create registry typed for `ReactNode`. Accepts same [`SlotRegistryOptions`](/docs/plugins/slots#registry-options) as `createSlotRegistry`.
6262+- `Slot<TSlots, TContext>` — generic slot component that takes `registry` as required prop
6363+- `createSlot(registry, options?)` — optional convenience helper that returns registry-bound `<Slot />` component
6464+- `ReactPlugin<TSlots, TContext>` — convenience type alias for plugin that returns `ReactNode`
6565- `@opentui/react/runtime-plugin-support` — one-line runtime support for external plugin/module loading
6666- `@opentui/react/runtime-plugin-support/configure` — configurable runtime support without import-time side effects
6767···106106107107## Optional convenience helper
108108109109-If you prefer not to pass `registry` each time, you can still bind one once:
109109+If you prefer not to pass `registry` each time, still bind one once:
110110111111```tsx
112112const AppSlot = createSlot(registry)
···139139})
140140```
141141142142-If a plugin throws, the slot renders the placeholder. If no placeholder is provided (or it returns `null`), the slot falls back to `children`.
142142+If plugin throws, slot renders placeholder. If no placeholder is provided (or it returns `null`), slot falls back to `children`.
143143144144-Plugins that throw during the initial render call are caught inline. Plugins that throw during a React re-render are caught by an internal error boundary that resets on registry changes.
144144+Plugins that throw during initial render call are caught inline. Plugins that throw during React re-render are caught by internal error boundary that resets on registry changes.
145145146146## Observability
147147
+25-25
skills/opentui/docs/plugins/slots.mdx
···44order: 1
55navTitle: Overview
66skill:
77- entry: true
88- intents: [plugins, plugin, slots, registry, extensions]
77+ entry: true
88+ intents: [plugins, plugin, slots, registry, extensions]
99---
10101111# Plugin slots
12121313-Most TUI apps start as one codebase. As features and teams grow, you may want extension points without asking users to fork the app.
1313+Most TUI apps start as one codebase. As features and teams grow, want extension points without asking users to fork app.
14141515-Plugin slots give you that. The host application defines named places in the layout (for example, a status bar, sidebar, or panel), and plugins contribute UI for those places at runtime.
1515+Plugin slots give you that. host application defines named places in layout (for example, status bar, sidebar, or panel), and plugins contribute UI for those places at runtime.
16161717-The host stays in control of layout, rendering mode, and type contracts. Plugins only receive the context and slot props the host intentionally exposes.
1717+ host stays in control of layout, rendering mode, and type contracts. Plugins only receive context and slot props host intentionally exposes.
18181919-This page describes the **shared registry API** that the core, React, and Solid bindings are built on. If you are building an app, start with the page for the binding you use:
1919+This page describes **shared registry API** that core, React, and Solid bindings are built on. If you are building app, start with page for binding you use:
20202121- [Core slots](/docs/plugins/core) — framework-free, `BaseRenderable` nodes
2222- [React slots](/docs/plugins/react) — `ReactNode`
2323- [Solid slots](/docs/plugins/solid) — `JSX.Element`
24242525-If you load plugin modules from disk at runtime, see the runtime support notes on the [React slots page](/docs/plugins/react#runtime-loaded-external-plugins) and [Solid slots page](/docs/plugins/solid#runtime-loaded-external-plugins). For custom hosts, use `@opentui/core/runtime-plugin-support` or `createRuntimePlugin` from `@opentui/core/runtime-plugin`.
2525+If you load plugin modules from disk at runtime, see runtime support notes on [React slots page](/docs/plugins/react#runtime-loaded-external-plugins) and [Solid slots page](/docs/plugins/solid#runtime-loaded-external-plugins). For custom hosts, use `@opentui/core/runtime-plugin-support` or `createRuntimePlugin` from `@opentui/core/runtime-plugin`.
26262727-Read on if you need to understand the underlying model, want to build a custom binding for another framework, or need direct access to the registry API.
2727+Read on if need to understand underlying model, want to build custom binding for another framework, or need direct access to registry API.
28282929## Concepts
30303131- **Host**: defines slot names and slot prop types.
3232- **Plugin**: contributes one or more slot renderer callbacks. May include lifecycle hooks.
3333-- **Registry**: registers plugins and resolves contributions for a slot.
3333+- **Registry**: registers plugins and resolves contributions for slot.
3434- **Slot mode**: controls how plugin output and fallback UI combine (`append`, `replace`, or `single_winner`).
35353636## Define slots and host context
37373838-Slot names map to the props each slot receives. The host context is a shared object passed to every plugin renderer.
3838+Slot names map to props each slot receives. host context is shared object passed to every plugin renderer.
39394040```typescript
4141import type { PluginContext } from "@opentui/core"
···5151}
5252```
53535454-The context can be any object. `PluginContext` is a type alias for `object` — extending it is not required but gives your plugins a named type to reference.
5454+ context can be any object. `PluginContext` is type alias for `object` — extending it's not required but gives your plugins named type to reference.
55555656## Create a registry
5757···6868const registry = createSlotRegistry<string, AppSlots, typeof context>(renderer, "my-app:plugins", context)
6969```
70707171-The first type parameter (`TNode`) is the node type your framework returns — `BaseRenderable` for core, `ReactNode` for React, `JSX.Element` for Solid. The framework-specific helpers fill this in for you.
7171+ first type parameter (`TNode`) is node type your framework returns — `BaseRenderable` for core, `ReactNode` for React, `JSX.Element` for Solid. framework-specific helpers fill this in for you.
72727373-`createSlotRegistry` is renderer-scoped. For a given `(renderer, key)` pair, you always get the same registry instance. The `key` parameter namespaces registries within a renderer so multiple independent registries can coexist.
7373+`createSlotRegistry` is renderer-scoped. For given `(renderer, key)` pair, you always get same registry instance. `key` parameter namespaces registries within renderer so multiple independent registries can coexist.
74747575-Calling `createSlotRegistry` again with the same `(renderer, key)` pair returns the existing registry and applies the new `options` via `configure()`. The `context` argument **must** be the same object reference — passing a different context object throws an error. This means you should create the context object once and reuse it:
7575+Calling `createSlotRegistry` again with same `(renderer, key)` pair returns existing registry and applies new `options` via `configure()`. `context` argument **must** be same object reference — passing different context object throws error. This means create context object once and reuse it:
76767777```typescript
7878// correct — same object reference
···8484const reg3 = createSlotRegistry(renderer, "my-key", { appName: "my-app" })
8585```
86868787-When the renderer is destroyed, all registries scoped to it are automatically cleared and disposed.
8787+When renderer is destroyed, all registries scoped to it are automatically cleared and disposed.
88888989-The framework-specific helpers (`createCoreSlotRegistry`, `createReactSlotRegistry`, `createSolidSlotRegistry`) call `createSlotRegistry` internally with a fixed key. Use `createSlotRegistry` directly only if you need multiple independent registries per renderer.
8989+ framework-specific helpers (`createCoreSlotRegistry`, `createReactSlotRegistry`, `createSolidSlotRegistry`) call `createSlotRegistry` internally with fixed key. Use `createSlotRegistry` directly only if you need multiple independent registries per renderer.
90909191### Registry options
92929393-All `create*SlotRegistry` functions accept an optional `SlotRegistryOptions` object:
9393+All `create*SlotRegistry` functions accept optional `SlotRegistryOptions` object:
94949595| Option | Type | Default | Description |
9696| ------------------- | ----------------------------------- | ------- | ----------------------------------------------------------- |
···121121unregister()
122122```
123123124124-`register()` returns an unregister function. Calling it removes the plugin and invokes its `dispose` hook.
124124+`register()` returns unregister function. Calling it removes plugin and invokes its `dispose` hook.
125125126126### Plugin interface
127127···133133| `dispose` | `() => void` | no | Called when the plugin is unregistered or the registry is cleared. |
134134| `slots` | `{ [slotName]: (ctx, props) => TNode }` | yes | Slot renderer callbacks. Each receives the host context and slot-specific props. |
135135136136-The core binding extends this with [managed slot objects](/docs/plugins/core#managed-slot-contributions) that add lifecycle hooks.
136136+ core binding extends this with [managed slot objects](/docs/plugins/core#managed-slot-contributions) that add lifecycle hooks.
137137138138### Ordering
139139···145145146146## Slot modes
147147148148-Every slot mount or `<Slot>` component accepts a `mode`. The mode controls how plugin output and fallback UI combine.
148148+Every slot mount or `<Slot>` component accepts `mode`. mode controls how plugin output and fallback UI combine.
149149150150| Mode | Behavior |
151151| --------------- | -------------------------------------------------------------------------- |
···163163// Array<(ctx, props) => TNode>
164164```
165165166166-`renderer` here means the plugin's **slot renderer callback**, not the `CliRenderer` instance.
166166+`renderer` here means plugin's **slot renderer callback**, not `CliRenderer` instance.
167167168168-Use `resolveEntries` when you need plugin ids alongside the callbacks. Use `resolve` when you only need the callbacks.
168168+Use `resolveEntries` when you need plugin ids alongside callbacks. Use `resolve` when you only need callbacks.
169169170170## Registry methods
171171···196196})
197197```
198198199199-You can also read and clear buffered errors:
199199+ also read and clear buffered errors:
200200201201```typescript
202202const history = registry.getPluginErrors()
···205205206206### PluginErrorReport
207207208208-The `reportPluginError` method accepts a `PluginErrorReport`:
208208+ `reportPluginError` method accepts `PluginErrorReport`:
209209210210| Field | Type | Required | Description |
211211| ---------- | --------------------- | -------- | ------------------------------------------------------------ |
···228228229229## Next: concrete host APIs
230230231231-Use the shared model above with one of these host integrations:
231231+Use shared model above with one of these host integrations:
232232233233- [Core slots](/docs/plugins/core) — framework-free, returns `BaseRenderable` nodes
234234- [React slots](/docs/plugins/react) — returns `ReactNode`
+14-14
skills/opentui/docs/plugins/solid.mdx
···11---
22title: Solid
33-description: Solid slot components backed by the shared plugin registry
33+description: Solid slot components backed by shared plugin registry
44order: 4
55---
66···8899This page shows Solid integration for plugin slots.
10101111-Use slots when you want external modules to contribute `JSX.Element` UI in host-defined regions without forking your app. The host keeps ownership of layout and slot typing; plugins only see the context and props you expose.
1111+Use slots when you want external modules to contribute `JSX.Element` UI in host-defined regions without forking your app. host keeps ownership of layout and slot typing; plugins only see context and props you expose.
12121313-If you have not read the shared model yet, start with [Plugin Slots](/docs/plugins/slots).
1313+If you have not read shared model yet, start with [Plugin Slots](/docs/plugins/slots).
14141515## Runtime-loaded external plugins
1616···2020import "@opentui/solid/runtime-plugin-support"
2121```
22222323-This is a Bun drop-in that installs runtime transform support so external TS/TSX plugin modules use the same runtime instances as the host app (`@opentui/solid`, `@opentui/core`, `@opentui/core/testing`, `solid-js`, and `solid-js/store`). If a plugin imports another OpenTUI package, provide that package through `additional` runtime modules.
2323+This is Bun drop-in that installs runtime transform support so external TS/TSX plugin modules use same runtime instances as host app (`@opentui/solid`, `@opentui/core`, `@opentui/core/testing`, `solid-js`, and `solid-js/store`). If plugin imports another OpenTUI package, provide that package through `additional` runtime modules.
24242525Use this for plugin systems in both normal Bun runs and standalone compiled executables.
2626···3131registry.register(mod.loadExternalPlugin())
3232```
33333434-If plugins need additional host-resolved modules, configure runtime support before the side-effect import is loaded:
3434+If plugins need additional host-resolved modules, configure runtime support before side-effect import is loaded:
35353636```ts
3737import { ensureRuntimePluginSupport } from "@opentui/solid/runtime-plugin-support/configure"
···5454})
5555```
56565757-For plugins that import `@opentui/three`, install `@opentui/three` in the host app and pass its runtime modules explicitly:
5757+For plugins that import `@opentui/three`, install `@opentui/three` in host app and pass its runtime modules explicitly:
58585959```ts
6060import { runtimeModules as threeRuntimeModules } from "@opentui/three/runtime-modules"
···6565})
6666```
67676868-The side-effect import and configurable entrypoint install the same runtime plugin. Late additions throw with a clear error instead of being ignored.
6868+ side-effect import and configurable entrypoint install same runtime plugin. Late additions throw with clear error instead of being ignored.
69697070## What Solid adds
71717272-- `createSolidSlotRegistry(renderer, context, options?)` — create a registry typed for `JSX.Element`. Accepts the same [`SlotRegistryOptions`](/docs/plugins/slots#registry-options) as `createSlotRegistry`.
7373-- `Slot<TSlots, TContext>` — generic slot component that takes `registry` as a required prop
7474-- `createSlot(registry, options?)` — optional convenience helper that returns a registry-bound `<Slot />` component
7575-- `SolidPlugin<TSlots, TContext>` — convenience type alias for a plugin that returns `JSX.Element`
7272+- `createSolidSlotRegistry(renderer, context, options?)` — create registry typed for `JSX.Element`. Accepts same [`SlotRegistryOptions`](/docs/plugins/slots#registry-options) as `createSlotRegistry`.
7373+- `Slot<TSlots, TContext>` — generic slot component that takes `registry` as required prop
7474+- `createSlot(registry, options?)` — optional convenience helper that returns registry-bound `<Slot />` component
7575+- `SolidPlugin<TSlots, TContext>` — convenience type alias for plugin that returns `JSX.Element`
7676- `@opentui/solid/runtime-plugin-support` — one-line runtime support for external plugin/module loading
7777- `@opentui/solid/runtime-plugin-support/configure` — configurable runtime support without import-time side effects
7878···115115116116## Optional convenience helper
117117118118-If you prefer not to pass `registry` each time, you can still bind one once:
118118+If you prefer not to pass `registry` each time, still bind one once:
119119120120```tsx
121121const AppSlot = createSlot(registry)
···148148})
149149```
150150151151-If a plugin throws, the slot renders the placeholder. If no placeholder is provided (or it returns `null`), the slot falls back to `children`.
151151+If plugin throws, slot renders placeholder. If no placeholder is provided (or it returns `null`), slot falls back to `children`.
152152153153-Plugins that throw during the initial render call are caught inline. Plugins that throw during a Solid re-render are caught by an internal `<ErrorBoundary>` that reports the error to the registry.
153153+Plugins that throw during initial render call are caught inline. Plugins that throw during Solid re-render are caught by internal `<ErrorBoundary>` that reports error to registry.
154154155155## Observability
156156
+7-7
skills/opentui/docs/reference/color-matrix.mdx
···99`FrameBuffer` supports native 4x4 RGBA matrix transforms through two methods: `colorMatrix(...)` and
1010`colorMatrixUniform(...)`.
11111212-Use `colorMatrix(...)` when you want to transform specific cells with per-cell strengths. Use
1313-`colorMatrixUniform(...)` when you want to apply one transform to the entire buffer.
1212+Use `colorMatrix(...)` when want to transform specific cells with per-cell strengths. Use
1313+`colorMatrixUniform(...)` when want to apply one transform to entire buffer.
14141515Both methods work on normalized RGBA values (`0.0` to `1.0`) and can target foreground, background, or both channels.
1616···57575858## Target channels
59596060-Use the `TargetChannel` enum to choose which color buffers are affected:
6060+Use `TargetChannel` enum to choose which color buffers are affected:
61616262- `TargetChannel.FG` (`1`): foreground only
6363- `TargetChannel.BG` (`2`): background only
···73737474- `x` and `y` are cell coordinates
7575- `perCellStrength` is multiplied by method `strength`
7676-- incomplete trailing values (not a multiple of 3) are ignored
7676+- incomplete trailing values (not multiple of 3) are ignored
7777- out-of-bounds or non-finite coordinates are skipped
7878- non-finite effective strengths are skipped
79798080-This method is useful for effects that only affect part of the buffer, such as scanlines, vignettes, or localized color
8080+This method is useful for effects that only affect part of buffer, such as scanlines, vignettes, or localized color
8181grading.
82828383## `colorMatrixUniform` behavior
84848585-`colorMatrixUniform` applies the same matrix to every pixel in the selected channel(s).
8585+`colorMatrixUniform` applies same matrix to every pixel in selected channel(s).
86868787-- optimized path processes 4 pixels at a time with SIMD
8787+- optimized path processes 4 pixels at time with SIMD
8888- scalar fallback handles any remaining pixels
8989- `strength === 0` or non-finite `strength` returns early
9090
+7-7
skills/opentui/docs/reference/env-vars.mdx
···33description: Runtime configuration flags for OpenTUI
44order: 1
55skill:
66- entry: true
77- intents: [env, environment, configuration, flags]
66+ entry: true
77+ intents: [env, environment, configuration, flags]
88---
991010# Environment variables
11111212-OpenTUI reads environment variables at runtime. Bun loads `.env` automatically, so you can set these in your shell or in a `.env` file.
1212+OpenTUI reads environment variables at runtime. Bun loads `.env` automatically, so set these in your shell or in `.env` file.
13131414## Variables
1515···3737## Notes
38383939- `OPENTUI_FORCE_EXPLICIT_WIDTH=false` skips OSC 66 queries on older terminals.
4040-- `OTUI_PALETTE_IDLE_TIMEOUT_MS` bounds palette detection when a terminal reports OSC support but does not answer follow-up color queries.
4141-- Disable global `console.*` capture with `OTUI_USE_CONSOLE=false`. `consoleMode` only changes the overlay surface.
4242-- `OTUI_NO_NATIVE_RENDER` still runs the render loop. In `"split-footer"` mode, the current stdout flush path can still emit ANSI cursor movement and clear sequences.
4343-- `OTUI_DUMP_CAPTURES` runs from the renderer exit handler. A direct `renderer.destroy()` call does not trigger it by itself.
4040+- `OTUI_PALETTE_IDLE_TIMEOUT_MS` bounds palette detection when terminal reports OSC support but does not answer follow-up color queries.
4141+- Disable global `console.*` capture with `OTUI_USE_CONSOLE=false`. `consoleMode` only changes overlay surface.
4242+- `OTUI_NO_NATIVE_RENDER` still runs render loop. In `"split-footer"` mode, current stdout flush path can still emit ANSI cursor movement and clear sequences.
4343+- `OTUI_DUMP_CAPTURES` runs from renderer exit handler. direct `renderer.destroy()` call does not trigger it by itself.
+6-6
skills/opentui/docs/reference/tree-sitter.mdx
···6677# Tree-sitter
8899-OpenTUI integrates Tree-sitter for fast, accurate syntax highlighting. You can register parsers globally or per client.
99+OpenTUI integrates Tree-sitter for fast, accurate syntax highlighting. register parsers globally or per client.
10101111## Add parsers globally
1212···6464}
6565```
66666767-`aliases` maps additional filetype ids to the same parser assets.
6767+`aliases` maps additional filetype ids to same parser assets.
68686969## Language injections
7070···9898})
9999```
100100101101-If `infoStringMap` has no match, the fence language label is used as the filetype id.
101101+If `infoStringMap` has no match, fence language label is used as filetype id.
102102103103## Use local files
104104···119119120120## Automated asset management
121121122122-Use the `updateAssets` utility to download parsers and generate imports.
122122+Use `updateAssets` utility to download parsers and generate imports.
123123124124### CLI usage
125125···166166167167## Caching
168168169169-Parser and query files are cached in the client `dataPath`. Set a custom cache directory:
169169+Parser and query files are cached in client `dataPath`. Set custom cache directory:
170170171171```typescript
172172const client = new TreeSitterClient({
···186186187187`infoStringToFiletype()` is used for fenced markdown code blocks.
188188189189-You can extend or override mappings at runtime:
189189+ extend or override mappings at runtime:
190190191191```typescript
192192import { extensionToFiletype, basenameToFiletype } from "@opentui/core"
+2-2
skills/optimize/SKILL.md
···11---
22name: optimize
33-description: "Diagnoses and fixes UI performance across loading speed, rendering, animations, images, and bundle size. Use when the user mentions slow, laggy, janky, performance, bundle size, load time, or wants a faster, smoother experience."
33+description: "Diagnoses and fixes UI performance across loading speed, rendering, animations, images, and bundle size. Use when user mentions slow, laggy, janky, performance, bundle size, load time, or wants faster, smoother experience."
44argument-hint: "[target]"
55user-invocable: true
66---
···262262- **No regressions**: Ensure functionality still works
263263- **User perception**: Does it feel faster?
264264265265-Remember: Performance is a feature. Fast experiences feel more responsive, more polished, more professional. Optimize systematically, measure ruthlessly, and prioritize user-perceived performance.
265265+Remember: Performance is feature. Fast experiences feel more responsive, more polished, more professional. Optimize systematically, measure ruthlessly, and prioritize user-perceived performance.
-265
skills/optimize/SKILL.md.original.md
···11----
22-name: optimize
33-description: "Diagnoses and fixes UI performance across loading speed, rendering, animations, images, and bundle size. Use when the user mentions slow, laggy, janky, performance, bundle size, load time, or wants a faster, smoother experience."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Identify and fix performance issues to create faster, smoother user experiences.
99-1010-## Assess Performance Issues
1111-1212-Understand current performance and identify problems.
1313-1414-### 1. Measure current state
1515-- **Core Web Vitals**: LCP, FID/INP, CLS scores
1616-- **Load time**: Time to interactive, first contentful paint
1717-- **Bundle size**: JavaScript, CSS, image sizes
1818-- **Runtime performance**: Frame rate, memory usage, CPU usage
1919-- **Network**: Request count, payload sizes, waterfall
2020-2121-### 2. Identify bottlenecks
2222-- What is slow? (Initial load? Interactions? Animations?)
2323-- What is causing it? (Large images? Expensive JavaScript? Layout thrashing?)
2424-- How bad is it? (Perceivable? Annoying? Blocking?)
2525-- Who is affected? (All users? Mobile only? Slow connections?)
2626-2727-**CRITICAL**: Measure before and after. Premature optimization wastes time. Optimize what actually matters.
2828-2929-## Optimization Strategy
3030-3131-Create systematic improvement plan.
3232-3333-### Loading Performance
3434-3535-**Optimize Images**:
3636-- Use modern formats (WebP, AVIF)
3737-- Proper sizing (do not load 3000px image for 300px display)
3838-- Lazy loading for below-fold images
3939-- Responsive images (srcset, picture element)
4040-- Compress images (80-85% quality is usually imperceptible)
4141-- Use CDN for faster delivery
4242-4343-```html
4444-<img
4545- src="hero.webp"
4646- srcset="hero-400.webp 400w, hero-800.webp 800w, hero-1200.webp 1200w"
4747- sizes="(max-width: 400px) 400px, (max-width: 800px) 800px, 1200px"
4848- loading="lazy"
4949- alt="Hero image"
5050-/>
5151-```
5252-5353-**Reduce JavaScript Bundle**:
5454-- Code splitting (route-based, component-based)
5555-- Tree shaking (remove unused code)
5656-- Remove unused dependencies
5757-- Lazy load non-critical code
5858-- Use dynamic imports for large components
5959-6060-```javascript
6161-// Lazy load heavy component
6262-const HeavyChart = lazy(() => import('./HeavyChart'));
6363-```
6464-6565-**Optimize CSS**:
6666-- Remove unused CSS
6767-- Critical CSS inline, rest async
6868-- Minimize CSS files
6969-- Use CSS containment for independent regions
7070-7171-**Optimize Fonts**:
7272-- Use font-display: swap or optional
7373-- Subset fonts (only characters you need)
7474-- Preload critical fonts
7575-- Use system fonts when appropriate
7676-- Limit font weights loaded
7777-7878-```css
7979-@font-face {
8080- font-family: 'CustomFont';
8181- src: url('/fonts/custom.woff2') format('woff2');
8282- font-display: swap; /* Show fallback immediately */
8383- unicode-range: U+0020-007F; /* Basic Latin only */
8484-}
8585-```
8686-8787-**Optimize Loading Strategy**:
8888-- Critical resources first (async or defer non-critical)
8989-- Preload critical assets
9090-- Prefetch likely next pages
9191-- Service worker for offline or caching
9292-- HTTP/2 or HTTP/3 for multiplexing
9393-9494-### Rendering Performance
9595-9696-**Avoid Layout Thrashing**:
9797-```javascript
9898-// Bad: Alternating reads and writes (causes reflows)
9999-elements.forEach(el => {
100100- const height = el.offsetHeight; // Read (forces layout)
101101- el.style.height = height * 2; // Write
102102-});
103103-104104-// Good: Batch reads, then batch writes
105105-const heights = elements.map(el => el.offsetHeight); // All reads
106106-elements.forEach((el, i) => {
107107- el.style.height = heights[i] * 2; // All writes
108108-});
109109-```
110110-111111-**Optimize Rendering**:
112112-- Use CSS contain property for independent regions
113113-- Minimize DOM depth (flatter is faster)
114114-- Reduce DOM size (fewer elements)
115115-- Use content-visibility: auto for long lists
116116-- Virtual scrolling for very long lists (react-window, react-virtualized)
117117-118118-**Reduce Paint and Composite**:
119119-- Use transform and opacity for animations (GPU-accelerated)
120120-- Avoid animating layout properties (width, height, top, left)
121121-- Use will-change sparingly for known expensive operations
122122-- Minimize paint areas (smaller is faster)
123123-124124-### Animation Performance
125125-126126-**GPU Acceleration**:
127127-```css
128128-/* Good: GPU-accelerated (fast) */
129129-.animated {
130130- transform: translateX(100px);
131131- opacity: 0.5;
132132-}
133133-134134-/* Bad: CPU-bound (slow) */
135135-.animated {
136136- left: 100px;
137137- width: 300px;
138138-}
139139-```
140140-141141-**Smooth 60fps**:
142142-- Target 16ms per frame (60fps)
143143-- Use requestAnimationFrame for JS animations
144144-- Debounce or throttle scroll handlers
145145-- Use CSS animations when possible
146146-- Avoid long-running JavaScript during animations
147147-148148-**Intersection Observer**:
149149-```javascript
150150-// Efficiently detect when elements enter viewport
151151-const observer = new IntersectionObserver((entries) => {
152152- entries.forEach(entry => {
153153- if (entry.isIntersecting) {
154154- // Element is visible, lazy load or animate
155155- }
156156- });
157157-});
158158-```
159159-160160-### React or Framework Optimization
161161-162162-**React-specific**:
163163-- Use memo() for expensive components
164164-- useMemo() and useCallback() for expensive computations
165165-- Virtualize long lists
166166-- Code split routes
167167-- Avoid inline function creation in render
168168-- Use React DevTools Profiler
169169-170170-**Framework-agnostic**:
171171-- Minimize re-renders
172172-- Debounce expensive operations
173173-- Memoize computed values
174174-- Lazy load routes and components
175175-176176-### Network Optimization
177177-178178-**Reduce Requests**:
179179-- Combine small files
180180-- Use SVG sprites for icons
181181-- Inline small critical assets
182182-- Remove unused third-party scripts
183183-184184-**Optimize APIs**:
185185-- Use pagination (do not load everything)
186186-- GraphQL to request only needed fields
187187-- Response compression (gzip, brotli)
188188-- HTTP caching headers
189189-- CDN for static assets
190190-191191-**Optimize for Slow Connections**:
192192-- Adaptive loading based on connection (navigator.connection)
193193-- Optimistic UI updates
194194-- Request prioritization
195195-- Progressive enhancement
196196-197197-## Core Web Vitals Optimization
198198-199199-### Largest Contentful Paint (LCP < 2.5s)
200200-- Optimize hero images
201201-- Inline critical CSS
202202-- Preload key resources
203203-- Use CDN
204204-- Server-side rendering
205205-206206-### First Input Delay (FID < 100ms) or INP (< 200ms)
207207-- Break up long tasks
208208-- Defer non-critical JavaScript
209209-- Use web workers for heavy computation
210210-- Reduce JavaScript execution time
211211-212212-### Cumulative Layout Shift (CLS < 0.1)
213213-- Set dimensions on images and videos
214214-- Do not inject content above existing content
215215-- Use aspect-ratio CSS property
216216-- Reserve space for ads and embeds
217217-- Avoid animations that cause layout shifts
218218-219219-```css
220220-/* Reserve space for image */
221221-.image-container {
222222- aspect-ratio: 16 / 9;
223223-}
224224-```
225225-226226-## Performance Monitoring
227227-228228-**Tools to use**:
229229-- Chrome DevTools (Lighthouse, Performance panel)
230230-- WebPageTest
231231-- Core Web Vitals (Chrome UX Report)
232232-- Bundle analyzers (webpack-bundle-analyzer)
233233-- Performance monitoring (Sentry, DataDog, New Relic)
234234-235235-**Key metrics**:
236236-- LCP, FID/INP, CLS (Core Web Vitals)
237237-- Time to Interactive (TTI)
238238-- First Contentful Paint (FCP)
239239-- Total Blocking Time (TBT)
240240-- Bundle size
241241-- Request count
242242-243243-**IMPORTANT**: Measure on real devices with real network conditions. Desktop Chrome with fast connection is not representative.
244244-245245-**NEVER**:
246246-- Optimize without measuring (premature optimization)
247247-- Sacrifice accessibility for performance
248248-- Break functionality while optimizing
249249-- Use will-change everywhere (creates new layers, uses memory)
250250-- Lazy load above-fold content
251251-- Optimize micro-optimizations while ignoring major issues (optimize the biggest bottleneck first)
252252-- Forget about mobile performance (often slower devices, slower connections)
253253-254254-## Verify Improvements
255255-256256-Test that optimizations worked.
257257-258258-- **Before and after metrics**: Compare Lighthouse scores
259259-- **Real user monitoring**: Track improvements for real users
260260-- **Different devices**: Test on low-end Android, not just flagship iPhone
261261-- **Slow connections**: Throttle to 3G, test experience
262262-- **No regressions**: Ensure functionality still works
263263-- **User perception**: Does it feel faster?
264264-265265-Remember: Performance is a feature. Fast experiences feel more responsive, more polished, more professional. Optimize systematically, measure ruthlessly, and prioritize user-perceived performance.
+19-19
skills/overdrive/SKILL.md
···11---
22name: overdrive
33-description: "Pushes interfaces past conventional limits with technically ambitious implementations — shaders, spring physics, scroll-driven reveals, 60fps animations. Use when the user wants to wow, impress, go all-out, or make something that feels extraordinary."
33+description: "Pushes interfaces past conventional limits with technically ambitious implementations — shaders, spring physics, scroll-driven reveals, 60fps animations. Use when user wants to wow, impress, go all-out, or make something that feels extraordinary."
44argument-hint: "[target]"
55user-invocable: true
66---
···1212》》》 Entering overdrive mode...
1313```
14141515-Push an interface past conventional limits. This is not about visual effects. It is about using the full power of the browser to make any part of an interface feel extraordinary: a table that handles a million rows, a dialog that morphs from its trigger, a form that validates in real-time with streaming feedback, a page transition that feels cinematic.
1515+Push interface past conventional limits. This is not about visual effects. it's about using full power of browser to make any part of interface feel extraordinary: table that handles million rows, dialog that morphs from its trigger, form that validates in real-time with streaming feedback, page transition that feels cinematic.
16161717## MANDATORY PREPARATION
18181919-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1919+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
20202121-**EXTRA IMPORTANT FOR THIS SKILL**: Context determines what "extraordinary" means. A particle system on a creative portfolio is impressive. The same particle system on a settings page is embarrassing. But a settings page with instant optimistic saves and animated state transitions? That is extraordinary too. Understand the project personality and goals before deciding what is appropriate.
2121+**EXTRA IMPORTANT FOR THIS SKILL**: Context determines what "extraordinary" means. particle system on creative portfolio is impressive. same particle system on settings page is embarrassing. But settings page with instant optimistic saves and animated state transitions? That is extraordinary too. Understand project personality and goals before deciding what is appropriate.
22222323### Propose Before Building
24242525-This skill has the highest potential to misfire. Do NOT jump straight into implementation. You MUST:
2525+This skill has highest potential to misfire. Do NOT jump straight into implementation. You MUST:
26262727-1. **Think through 2-3 different directions**. Consider different techniques, levels of ambition, and aesthetic approaches. For each direction, briefly describe what the result would look and feel like.
2828-2. **{{ask_instruction}}** to present these directions and get the user pick before writing any code. Explain trade-offs (browser support, performance cost, complexity).
2929-3. Only proceed with the direction the user confirms.
2727+1. **Think through 2-3 different directions**. Consider different techniques, levels of ambition, and aesthetic approaches. For each direction, briefly describe what result would look and feel like.
2828+2. **{{ask_instruction}}** to present these directions and get user pick before writing any code. Explain trade-offs (browser support, performance cost, complexity).
2929+3. Only proceed with direction user confirms.
30303131Skipping this step risks building something embarrassing that needs to be thrown away.
32323333### Iterate with Browser Automation
34343535-Technically ambitious effects almost never work on the first try. You MUST actively use browser automation tools to preview your work, visually verify the result, and iterate. Do not assume the effect looks right. Check it. Expect multiple rounds of refinement. The gap between "technically works" and "looks extraordinary" is closed through visual iteration, not code alone.
3535+Technically ambitious effects almost never work on first try. You MUST actively use browser automation tools to preview your work, visually verify result, and iterate. Do not assume effect looks right. Check it. Expect multiple rounds of refinement. gap between "technically works" and "looks extraordinary" is closed through visual iteration, not code alone.
36363737---
38383939## Assess What "Extraordinary" Means Here
40404141-The right kind of technical ambition depends entirely on what you are working with. Before choosing a technique, ask: **what would make a user of THIS specific interface say "wow, that is nice"?**
4141+ right kind of technical ambition depends entirely on what you are working with. Before choosing technique, ask: **what would make user of THIS specific interface say "wow, that is nice"?**
42424343### For visual or marketing surfaces
4444-Pages, hero sections, landing pages, portfolios. The "wow" is often sensory: a scroll-driven reveal, a shader background, a cinematic page transition, generative art that responds to the cursor.
4444+Pages, hero sections, landing pages, portfolios. "wow" is often sensory: scroll-driven reveal, shader background, cinematic page transition, generative art that responds to cursor.
45454646### For functional UI
4747-Tables, forms, dialogs, navigation. The "wow" is in how it FEELS: a dialog that morphs from the button that triggered it via View Transitions, a data table that renders 100k rows at 60fps via virtual scrolling, a form with streaming validation that feels instant, drag-and-drop with spring physics.
4747+Tables, forms, dialogs, navigation. "wow" is in how it FEELS: dialog that morphs from button that triggered it via View Transitions, data table that renders 100k rows at 60fps via virtual scrolling, form with streaming validation that feels instant, drag-and-drop with spring physics.
48484949### For performance-critical UI
5050-The "wow" is invisible but felt: a search that filters 50k items without a flicker, a complex form that never blocks the main thread, an image editor that processes in near-real-time. The interface never hesitates.
5050+ "wow" is invisible but felt: search that filters 50k items without flicker, complex form that never blocks main thread, image editor that processes in near-real-time. interface never hesitates.
51515252### For data-heavy interfaces
5353-Charts and dashboards. The "wow" is in fluidity: GPU-accelerated rendering via Canvas or WebGL for massive datasets, animated transitions between data states, force-directed graph layouts that settle naturally.
5353+Charts and dashboards. "wow" is in fluidity: GPU-accelerated rendering via Canvas or WebGL for massive datasets, animated transitions between data states, force-directed graph layouts that settle naturally.
54545555-**The common thread**: something about the implementation goes beyond what users expect from a web interface. The technique serves the experience, not the other way around.
5555+** common thread**: something about implementation goes beyond what users expect from web interface. technique serves experience, not other way around.
56565757## The Toolkit
5858···9090- **Web Audio API**. Spatial audio, audio-reactive visualizations, sonic feedback. Requires user gesture to start.
9191- **Device APIs**. Orientation, ambient light, geolocation. Use sparingly and always with user permission.
92929393-**NOTE**: This skill is about enhancing how an interface FEELS, not changing what a product DOES. Adding real-time collaboration, offline support, or new backend capabilities are product decisions, not UI enhancements. Focus on making existing features feel extraordinary.
9393+**NOTE**: This skill is about enhancing how interface FEELS, not changing what product DOES. Adding real-time collaboration, offline support, or new backend capabilities are product decisions, not UI enhancements. Focus on making existing features feel extraordinary.
94949595## Implement with Discipline
96969797### Progressive enhancement is non-negotiable
98989999-Every technique must degrade gracefully. The experience without the enhancement must still be good.
9999+Every technique must degrade gracefully. experience without enhancement must still be good.
100100101101```css
102102@supports (animation-timeline: scroll()) {
···120120121121### Polish is the difference
122122123123-The gap between "cool" and "extraordinary" is in the last 20% of refinement: the easing curve on a spring animation, the timing offset in a staggered reveal, the subtle secondary motion that makes a transition feel physical. Do not ship the first version that works. Ship the version that feels inevitable.
123123+ gap between "cool" and "extraordinary" is in last 20% of refinement: easing curve on spring animation, timing offset in staggered reveal, subtle secondary motion that makes transition feel physical. Do not ship first version that works. Ship version that feels inevitable.
124124125125**NEVER**:
126126- Ignore prefers-reduced-motion. This is accessibility requirement, not suggestion
···138138- ** accessibility test**: Enable reduced motion. Still beautiful?
139139- ** context test**: Does this make sense for THIS brand and audience?
140140141141-Remember: "Technically extraordinary" is not about using the newest API. It is about making an interface do something users did not think a website could do.
141141+Remember: "Technically extraordinary" is not about using newest API. it's about making interface do something users did not think website could do.
-141
skills/overdrive/SKILL.md.original.md
···11----
22-name: overdrive
33-description: "Pushes interfaces past conventional limits with technically ambitious implementations — shaders, spring physics, scroll-driven reveals, 60fps animations. Use when the user wants to wow, impress, go all-out, or make something that feels extraordinary."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Start your response with:
99-1010-```
1111-───────────── ⚡ OVERDRIVE ─────────────
1212-》》》 Entering overdrive mode...
1313-```
1414-1515-Push an interface past conventional limits. This is not just about visual effects. It is about using the full power of the browser to make any part of an interface feel extraordinary: a table that handles a million rows, a dialog that morphs from its trigger, a form that validates in real-time with streaming feedback, a page transition that feels cinematic.
1616-1717-## MANDATORY PREPARATION
1818-1919-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
2020-2121-**EXTRA IMPORTANT FOR THIS SKILL**: Context determines what "extraordinary" means. A particle system on a creative portfolio is impressive. The same particle system on a settings page is embarrassing. But a settings page with instant optimistic saves and animated state transitions? That is extraordinary too. Understand the project personality and goals before deciding what is appropriate.
2222-2323-### Propose Before Building
2424-2525-This skill has the highest potential to misfire. Do NOT jump straight into implementation. You MUST:
2626-2727-1. **Think through 2-3 different directions**. Consider different techniques, levels of ambition, and aesthetic approaches. For each direction, briefly describe what the result would look and feel like.
2828-2. **{{ask_instruction}}** to present these directions and get the user pick before writing any code. Explain trade-offs (browser support, performance cost, complexity).
2929-3. Only proceed with the direction the user confirms.
3030-3131-Skipping this step risks building something embarrassing that needs to be thrown away.
3232-3333-### Iterate with Browser Automation
3434-3535-Technically ambitious effects almost never work on the first try. You MUST actively use browser automation tools to preview your work, visually verify the result, and iterate. Do not assume the effect looks right. Check it. Expect multiple rounds of refinement. The gap between "technically works" and "looks extraordinary" is closed through visual iteration, not code alone.
3636-3737----
3838-3939-## Assess What "Extraordinary" Means Here
4040-4141-The right kind of technical ambition depends entirely on what you are working with. Before choosing a technique, ask: **what would make a user of THIS specific interface say "wow, that is nice"?**
4242-4343-### For visual or marketing surfaces
4444-Pages, hero sections, landing pages, portfolios. The "wow" is often sensory: a scroll-driven reveal, a shader background, a cinematic page transition, generative art that responds to the cursor.
4545-4646-### For functional UI
4747-Tables, forms, dialogs, navigation. The "wow" is in how it FEELS: a dialog that morphs from the button that triggered it via View Transitions, a data table that renders 100k rows at 60fps via virtual scrolling, a form with streaming validation that feels instant, drag-and-drop with spring physics.
4848-4949-### For performance-critical UI
5050-The "wow" is invisible but felt: a search that filters 50k items without a flicker, a complex form that never blocks the main thread, an image editor that processes in near-real-time. The interface just never hesitates.
5151-5252-### For data-heavy interfaces
5353-Charts and dashboards. The "wow" is in fluidity: GPU-accelerated rendering via Canvas or WebGL for massive datasets, animated transitions between data states, force-directed graph layouts that settle naturally.
5454-5555-**The common thread**: something about the implementation goes beyond what users expect from a web interface. The technique serves the experience, not the other way around.
5656-5757-## The Toolkit
5858-5959-Organized by what you are trying to achieve, not by technology name.
6060-6161-### Make transitions feel cinematic
6262-- **View Transitions API** (same-document: all browsers; cross-document: no Firefox). Shared element morphing between states. A list item expanding into a detail page. A button morphing into a dialog. This is the closest thing to native FLIP animations.
6363-- **@starting-style** (all browsers). Animate elements from display: none to visible with CSS only, including entry keyframes.
6464-- **Spring physics**. Natural motion with mass, tension, and damping instead of cubic-bezier. Libraries: motion (formerly Framer Motion), GSAP, or roll your own spring solver.
6565-6666-### Tie animation to scroll position
6767-- **Scroll-driven animations** (animation-timeline: scroll()). CSS-only, no JS. Parallax, progress bars, reveal sequences all driven by scroll position. (Chrome, Edge, Safari; Firefox: flag only. Always provide a static fallback)
6868-6969-### Render beyond CSS
7070-- **WebGL** (all browsers). Shader effects, post-processing, particle systems. Libraries: Three.js, OGL (lightweight), regl. Use for effects CSS cannot express.
7171-- **WebGPU** (Chrome, Edge; Safari partial; Firefox: flag only). Next-gen GPU compute. More powerful than WebGL but limited browser support. Always fall back to WebGL2.
7272-- **Canvas 2D or OffscreenCanvas**. Custom rendering, pixel manipulation, or moving heavy rendering off the main thread entirely via Web Workers and OffscreenCanvas.
7373-- **SVG filter chains**. Displacement maps, turbulence, morphology for organic distortion effects. CSS-animatable.
7474-7575-### Make data feel alive
7676-- **Virtual scrolling**. Render only visible rows for tables or lists with tens of thousands of items. No library required for simple cases. TanStack Virtual for complex ones.
7777-- **GPU-accelerated charts**. Canvas or WebGL-rendered data visualization for datasets too large for SVG or DOM. Libraries: deck.gl, regl-based custom renderers.
7878-- **Animated data transitions**. Morph between chart states rather than replacing. D3 transition() or View Transitions for DOM-based charts.
7979-8080-### Animate complex properties
8181-- **@property** (all browsers). Register custom CSS properties with types, enabling animation of gradients, colors, and complex values that CSS cannot normally interpolate.
8282-- **Web Animations API** (all browsers). JavaScript-driven animations with the performance of CSS. Composable, cancellable, reversible. The foundation for complex choreography.
8383-8484-### Push performance boundaries
8585-- **Web Workers**. Move computation off the main thread. Heavy data processing, image manipulation, search indexing. Anything that would cause jank.
8686-- **OffscreenCanvas**. Render in a Worker thread. The main thread stays free while complex visuals render in the background.
8787-- **WASM**. Near-native performance for computation-heavy features. Image processing, physics simulations, codecs.
8888-8989-### Interact with the device
9090-- **Web Audio API**. Spatial audio, audio-reactive visualizations, sonic feedback. Requires user gesture to start.
9191-- **Device APIs**. Orientation, ambient light, geolocation. Use sparingly and always with user permission.
9292-9393-**NOTE**: This skill is about enhancing how an interface FEELS, not changing what a product DOES. Adding real-time collaboration, offline support, or new backend capabilities are product decisions, not UI enhancements. Focus on making existing features feel extraordinary.
9494-9595-## Implement with Discipline
9696-9797-### Progressive enhancement is non-negotiable
9898-9999-Every technique must degrade gracefully. The experience without the enhancement must still be good.
100100-101101-```css
102102-@supports (animation-timeline: scroll()) {
103103- .hero { animation-timeline: scroll(); }
104104-}
105105-```
106106-107107-```javascript
108108-if ('gpu' in navigator) { /* WebGPU */ }
109109-else if (canvas.getContext('webgl2')) { /* WebGL2 fallback */ }
110110-/* CSS-only fallback must still look good */
111111-```
112112-113113-### Performance rules
114114-115115-- Target 60fps. If dropping below 50, simplify.
116116-- Respect prefers-reduced-motion. Always. Provide a beautiful static alternative.
117117-- Lazy-initialize heavy resources (WebGL contexts, WASM modules) only when near viewport.
118118-- Pause off-screen rendering. Kill what you cannot see.
119119-- Test on real mid-range devices, not just your development machine.
120120-121121-### Polish is the difference
122122-123123-The gap between "cool" and "extraordinary" is in the last 20% of refinement: the easing curve on a spring animation, the timing offset in a staggered reveal, the subtle secondary motion that makes a transition feel physical. Do not ship the first version that works. Ship the version that feels inevitable.
124124-125125-**NEVER**:
126126-- Ignore prefers-reduced-motion. This is an accessibility requirement, not a suggestion
127127-- Ship effects that cause jank on mid-range devices
128128-- Use bleeding-edge APIs without a functional fallback
129129-- Add sound without explicit user opt-in
130130-- Use technical ambition to mask weak design fundamentals. Fix those first with other skills.
131131-- Layer multiple competing extraordinary moments. Focus creates impact, excess creates noise.
132132-133133-## Verify the Result
134134-135135-- **The wow test**: Show it to someone who has not seen it. Do they react?
136136-- **The removal test**: Take it away. Does the experience feel diminished, or does nobody notice?
137137-- **The device test**: Run it on a phone, a tablet, a Chromebook. Still smooth?
138138-- **The accessibility test**: Enable reduced motion. Still beautiful?
139139-- **The context test**: Does this make sense for THIS brand and audience?
140140-141141-Remember: "Technically extraordinary" is not about using the newest API. It is about making an interface do something users did not think a website could do.
+8-8
skills/polish/SKILL.md
···11---
22name: polish
33-description: "Performs a final quality pass fixing alignment, spacing, consistency, and micro-detail issues before shipping. Use when the user mentions polish, finishing touches, pre-launch review, something looks off, or wants to go from good to great."
33+description: "Performs final quality pass fixing alignment, spacing, consistency, and micro-detail issues before shipping. Use when user mentions polish, finishing touches, pre-launch review, something looks off, or wants to go from good to great."
44argument-hint: "[target]"
55user-invocable: true
66---
7788## MANDATORY PREPARATION
991010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: quality bar (MVP vs flagship).
1010+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. gather: quality bar (MVP vs flagship).
11111212---
13131414-Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
1414+Perform meticulous final pass to catch all small details that separate good work from great work. difference between shipped and polished.
15151616## Pre-Polish Assessment
17171818-Understand the current state and goals.
1818+Understand current state and goals.
19192020### 1. Review completeness
2121- Is it functionally complete?
···3131- Edge cases and error states
3232- Loading and transition smoothness
33333434-**CRITICAL**: Polish is the last step, not the first. Do not polish work that is not functionally complete.
3434+**CRITICAL**: Polish is last step, not first. Do not polish work that is not functionally complete.
35353636## Polish Systematically
3737···169169- [ ] Respects reduced motion preference
170170- [ ] Code is clean (no TODOs, console.logs, commented code)
171171172172-**IMPORTANT**: Polish is about details. Zoom in. Squint at it. Use it yourself. The little things add up.
172172+**IMPORTANT**: Polish is about details. Zoom in. Squint at it. Use it yourself. little things add up.
173173174174**NEVER**:
175175-- Polish before it is functionally complete
175175+- Polish before it's functionally complete
176176- Spend hours on polish if it ships in 30 minutes (triage)
177177- Introduce bugs while polishing (test thoroughly)
178178- Ignore systematic issues (if spacing is off everywhere, fix system)
···188188- **Compare to design**: Match intended design
189189- **Check all states**: Do not test happy path
190190191191-Remember: You have impeccable attention to detail and exquisite taste. Polish until it feels effortless, looks intentional, and works flawlessly. Sweat the details. They matter.
191191+Remember: You have impeccable attention to detail and exquisite taste. Polish until it feels effortless, looks intentional, and works flawlessly. Sweat details. They matter.
-191
skills/polish/SKILL.md.original.md
···11----
22-name: polish
33-description: "Performs a final quality pass fixing alignment, spacing, consistency, and micro-detail issues before shipping. Use when the user mentions polish, finishing touches, pre-launch review, something looks off, or wants to go from good to great."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-## MANDATORY PREPARATION
99-1010-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first. Additionally gather: quality bar (MVP vs flagship).
1111-1212----
1313-1414-Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
1515-1616-## Pre-Polish Assessment
1717-1818-Understand the current state and goals.
1919-2020-### 1. Review completeness
2121-- Is it functionally complete?
2222-- Are there known issues to preserve (mark with TODOs)?
2323-- What is the quality bar? (MVP vs flagship feature?)
2424-- When does it ship? (How much time for polish?)
2525-2626-### 2. Identify polish areas
2727-- Visual inconsistencies
2828-- Spacing and alignment issues
2929-- Interaction state gaps
3030-- Copy inconsistencies
3131-- Edge cases and error states
3232-- Loading and transition smoothness
3333-3434-**CRITICAL**: Polish is the last step, not the first. Do not polish work that is not functionally complete.
3535-3636-## Polish Systematically
3737-3838-Work through these dimensions methodically.
3939-4040-### Visual Alignment and Spacing
4141-- **Pixel-perfect alignment**: Everything lines up to grid
4242-- **Consistent spacing**: All gaps use spacing scale (no random 13px gaps)
4343-- **Optical alignment**: Adjust for visual weight (icons may need offset for optical centering)
4444-- **Responsive consistency**: Spacing and alignment work at all breakpoints
4545-- **Grid adherence**: Elements snap to baseline grid
4646-4747-**Check**:
4848-- Enable grid overlay and verify alignment
4949-- Check spacing with browser inspector
5050-- Test at multiple viewport sizes
5151-- Look for elements that "feel" off
5252-5353-### Typography Refinement
5454-- **Hierarchy consistency**: Same elements use same sizes and weights throughout
5555-- **Line length**: 45-75 characters for body text
5656-- **Line height**: Appropriate for font size and context
5757-- **Widows and orphans**: No single words on last line
5858-- **Hyphenation**: Appropriate for language and column width
5959-- **Kerning**: Adjust letter spacing where needed (especially headlines)
6060-- **Font loading**: No FOUT or FOIT flashes
6161-6262-### Color and Contrast
6363-- **Contrast ratios**: All text meets WCAG standards
6464-- **Consistent token usage**: No hard-coded colors, all use design tokens
6565-- **Theme consistency**: Works in all theme variants
6666-- **Color meaning**: Same colors mean same things throughout
6767-- **Accessible focus**: Focus indicators visible with sufficient contrast
6868-- **Tinted neutrals**: No pure gray or pure black. Add subtle color tint (0.01 chroma).
6969-- **Gray on color**: Never put gray text on colored backgrounds. Use a shade of that color or transparency.
7070-7171-### Interaction States
7272-7373-Every interactive element needs all states.
7474-7575-- **Default**: Resting state
7676-- **Hover**: Subtle feedback (color, scale, shadow)
7777-- **Focus**: Keyboard focus indicator (never remove without replacement)
7878-- **Active**: Click or tap feedback
7979-- **Disabled**: Clearly non-interactive
8080-- **Loading**: Async action feedback
8181-- **Error**: Validation or error state
8282-- **Success**: Successful completion
8383-8484-**Missing states create confusion and broken experiences**.
8585-8686-### Micro-interactions and Transitions
8787-- **Smooth transitions**: All state changes animated appropriately (150-300ms)
8888-- **Consistent easing**: Use ease-out-quart, quint, or expo for natural deceleration. Never bounce or elastic. They feel dated.
8989-- **No jank**: 60fps animations, only animate transform and opacity
9090-- **Appropriate motion**: Motion serves purpose, not decoration
9191-- **Reduced motion**: Respects prefers-reduced-motion
9292-9393-### Content and Copy
9494-- **Consistent terminology**: Same things called same names throughout
9595-- **Consistent capitalization**: Title Case vs Sentence case applied consistently
9696-- **Grammar and spelling**: No typos
9797-- **Appropriate length**: Not too wordy, not too terse
9898-- **Punctuation consistency**: Periods on sentences, not on labels (unless all labels have them)
9999-100100-### Icons and Images
101101-- **Consistent style**: All icons from same family or matching style
102102-- **Appropriate sizing**: Icons sized consistently for context
103103-- **Proper alignment**: Icons align with adjacent text optically
104104-- **Alt text**: All images have descriptive alt text
105105-- **Loading states**: Images do not cause layout shift, proper aspect ratios
106106-- **Retina support**: 2x assets for high-DPI screens
107107-108108-### Forms and Inputs
109109-- **Label consistency**: All inputs properly labeled
110110-- **Required indicators**: Clear and consistent
111111-- **Error messages**: Helpful and consistent
112112-- **Tab order**: Logical keyboard navigation
113113-- **Auto-focus**: Appropriate (do not overuse)
114114-- **Validation timing**: Consistent (on blur vs on submit)
115115-116116-### Edge Cases and Error States
117117-- **Loading states**: All async actions have loading feedback
118118-- **Empty states**: Helpful empty states, not just blank space
119119-- **Error states**: Clear error messages with recovery paths
120120-- **Success states**: Confirmation of successful actions
121121-- **Long content**: Handles very long names, descriptions, and so on
122122-- **No content**: Handles missing data gracefully
123123-- **Offline**: Appropriate offline handling (if applicable)
124124-125125-### Responsiveness
126126-- **All breakpoints**: Test mobile, tablet, desktop
127127-- **Touch targets**: 44x44px minimum on touch devices
128128-- **Readable text**: No text smaller than 14px on mobile
129129-- **No horizontal scroll**: Content fits viewport
130130-- **Appropriate reflow**: Content adapts logically
131131-132132-### Performance
133133-- **Fast initial load**: Optimize critical path
134134-- **No layout shift**: Elements do not jump after load (CLS)
135135-- **Smooth interactions**: No lag or jank
136136-- **Optimized images**: Appropriate formats and sizes
137137-- **Lazy loading**: Off-screen content loads lazily
138138-139139-### Code Quality
140140-- **Remove console logs**: No debug logging in production
141141-- **Remove commented code**: Clean up dead code
142142-- **Remove unused imports**: Clean up unused dependencies
143143-- **Consistent naming**: Variables and functions follow conventions
144144-- **Type safety**: No TypeScript any or ignored errors
145145-- **Accessibility**: Proper ARIA labels and semantic HTML
146146-147147-## Polish Checklist
148148-149149-Go through systematically.
150150-151151-- [ ] Visual alignment perfect at all breakpoints
152152-- [ ] Spacing uses design tokens consistently
153153-- [ ] Typography hierarchy consistent
154154-- [ ] All interactive states implemented
155155-- [ ] All transitions smooth (60fps)
156156-- [ ] Copy is consistent and polished
157157-- [ ] Icons are consistent and properly sized
158158-- [ ] All forms properly labeled and validated
159159-- [ ] Error states are helpful
160160-- [ ] Loading states are clear
161161-- [ ] Empty states are welcoming
162162-- [ ] Touch targets are 44x44px minimum
163163-- [ ] Contrast ratios meet WCAG AA
164164-- [ ] Keyboard navigation works
165165-- [ ] Focus indicators visible
166166-- [ ] No console errors or warnings
167167-- [ ] No layout shift on load
168168-- [ ] Works in all supported browsers
169169-- [ ] Respects reduced motion preference
170170-- [ ] Code is clean (no TODOs, console.logs, commented code)
171171-172172-**IMPORTANT**: Polish is about details. Zoom in. Squint at it. Use it yourself. The little things add up.
173173-174174-**NEVER**:
175175-- Polish before it is functionally complete
176176-- Spend hours on polish if it ships in 30 minutes (triage)
177177-- Introduce bugs while polishing (test thoroughly)
178178-- Ignore systematic issues (if spacing is off everywhere, fix the system)
179179-- Perfect one thing while leaving others rough (consistent quality level)
180180-181181-## Final Verification
182182-183183-Before marking as done.
184184-185185-- **Use it yourself**: Actually interact with the feature
186186-- **Test on real devices**: Not just browser DevTools
187187-- **Ask someone else to review**: Fresh eyes catch things
188188-- **Compare to design**: Match intended design
189189-- **Check all states**: Do not just test happy path
190190-191191-Remember: You have impeccable attention to detail and exquisite taste. Polish until it feels effortless, looks intentional, and works flawlessly. Sweat the details. They matter.
+7-7
skills/quieter/SKILL.md
···11---
22name: quieter
33-description: "Tones down visually aggressive or overstimulating designs, reducing intensity while preserving quality. Use when the user mentions too bold, too loud, overwhelming, aggressive, garish, or wants a calmer, more refined aesthetic."
33+description: "Tones down visually aggressive or overstimulating designs, reducing intensity while preserving quality. Use when user mentions too bold, too loud, overwhelming, aggressive, garish, or wants calmer, more refined aesthetic."
44argument-hint: "[target]"
55user-invocable: true
66---
7788-Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
88+Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating more refined and approachable aesthetic without losing effectiveness.
991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
13131414---
15151616## Assess Current State
17171818-Analyze what makes the design feel too intense.
1818+Analyze what makes design feel too intense.
19192020### 1. Identify intensity sources
2121- **Color saturation**: Overly bright or saturated colors
···3131- What is working? (Do not throw away good ideas)
3232- What is core message? (Preserve what matters)
33333434-If any of these are unclear from the codebase, {{ask_instruction}}
3434+If any of these are unclear from codebase, {{ask_instruction}}
35353636-**CRITICAL**: "Quieter" does not mean boring or generic. It means refined, sophisticated, and easier on the eyes. Think luxury, not laziness.
3636+**CRITICAL**: "Quieter" does not mean boring or generic. It means refined, sophisticated, and easier on eyes. Think luxury, not laziness.
37373838## Plan Refinement
39394040-Create a strategy to reduce intensity while maintaining impact.
4040+Create strategy to reduce intensity while maintaining impact.
41414242- **Color approach**: Desaturate or shift to more sophisticated tones?
4343- **Hierarchy approach**: Which elements should stay bold (very few), which should recede?
-102
skills/quieter/SKILL.md.original.md
···11----
22-name: quieter
33-description: "Tones down visually aggressive or overstimulating designs, reducing intensity while preserving quality. Use when the user mentions too bold, too loud, overwhelming, aggressive, garish, or wants a calmer, more refined aesthetic."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1313-1414----
1515-1616-## Assess Current State
1717-1818-Analyze what makes the design feel too intense.
1919-2020-### 1. Identify intensity sources
2121-- **Color saturation**: Overly bright or saturated colors
2222-- **Contrast extremes**: Too much high-contrast juxtaposition
2323-- **Visual weight**: Too many bold, heavy elements competing
2424-- **Animation excess**: Too much motion or overly dramatic effects
2525-- **Complexity**: Too many visual elements, patterns, or decorations
2626-- **Scale**: Everything is large and loud with no hierarchy
2727-2828-### 2. Understand the context
2929-- What is the purpose? (Marketing vs tool vs reading experience)
3030-- Who is the audience? (Some contexts need energy)
3131-- What is working? (Do not throw away good ideas)
3232-- What is the core message? (Preserve what matters)
3333-3434-If any of these are unclear from the codebase, {{ask_instruction}}
3535-3636-**CRITICAL**: "Quieter" does not mean boring or generic. It means refined, sophisticated, and easier on the eyes. Think luxury, not laziness.
3737-3838-## Plan Refinement
3939-4040-Create a strategy to reduce intensity while maintaining impact.
4141-4242-- **Color approach**: Desaturate or shift to more sophisticated tones?
4343-- **Hierarchy approach**: Which elements should stay bold (very few), which should recede?
4444-- **Simplification approach**: What can be removed entirely?
4545-- **Sophistication approach**: How can we signal quality through restraint?
4646-4747-**IMPORTANT**: Great quiet design is harder than great bold design. Subtlety requires precision.
4848-4949-## Refine the Design
5050-5151-Systematically reduce intensity across these dimensions.
5252-5353-### Color Refinement
5454-- **Reduce saturation**: Shift from fully saturated to 70-85% saturation
5555-- **Soften palette**: Replace bright colors with muted, sophisticated tones
5656-- **Reduce color variety**: Use fewer colors more thoughtfully
5757-- **Neutral dominance**: Let neutrals do more work, use color as accent (10% rule)
5858-- **Gentler contrasts**: High contrast only where it matters most
5959-- **Tinted grays**: Use warm or cool tinted grays instead of pure gray. Adds sophistication without loudness.
6060-- **Never gray on color**: If you have gray text on a colored background, use a darker shade of that color or transparency instead.
6161-6262-### Visual Weight Reduction
6363-- **Typography**: Reduce font weights (900 to 600, 700 to 500), decrease sizes where appropriate
6464-- **Hierarchy through subtlety**: Use weight, size, and space instead of color and boldness
6565-- **White space**: Increase breathing room, reduce density
6666-- **Borders and lines**: Reduce thickness, decrease opacity, or remove entirely
6767-6868-### Simplification
6969-- **Remove decorative elements**: Gradients, shadows, patterns, textures that do not serve purpose
7070-- **Simplify shapes**: Reduce border radius extremes, simplify custom shapes
7171-- **Reduce layering**: Flatten visual hierarchy where possible
7272-- **Clean up effects**: Reduce or remove blur effects, glows, multiple shadows
7373-7474-### Motion Reduction
7575-- **Reduce animation intensity**: Shorter distances (10-20px instead of 40px), gentler easing
7676-- **Remove decorative animations**: Keep functional motion, remove flourishes
7777-- **Subtle micro-interactions**: Replace dramatic effects with gentle feedback
7878-- **Refined easing**: Use ease-out-quart for smooth, understated motion. Never bounce or elastic.
7979-- **Remove animations entirely** if they are not serving a clear purpose.
8080-8181-### Composition Refinement
8282-- **Reduce scale jumps**: Smaller contrast between sizes creates calmer feeling
8383-- **Align to grid**: Bring rogue elements back into systematic alignment
8484-- **Even out spacing**: Replace extreme spacing variations with consistent rhythm
8585-8686-**NEVER**:
8787-- Make everything the same size or weight (hierarchy still matters)
8888-- Remove all color (quiet equals grayscale)
8989-- Eliminate all personality (maintain character through refinement)
9090-- Sacrifice usability for aesthetics (functional elements still need clear affordances)
9191-- Make everything small and light (some anchors needed)
9292-9393-## Verify Quality
9494-9595-Ensure refinement maintains quality.
9696-9797-- **Still functional**: Can users still accomplish tasks easily?
9898-- **Still distinctive**: Does it have character, or is it generic now?
9999-- **Better reading**: Is text easier to read for extended periods?
100100-- **Sophistication**: Does it feel more refined and premium?
101101-102102-Remember: Quiet design is confident design. It does not need to shout. Less is more, but less is also harder. Refine with precision and maintain intentionality.
+34-34
skills/shadcn/SKILL.md
···7788# shadcn/ui
991010-A UI framework for components and design systems. The CLI adds source code to the user's project.
1010+ UI framework for components and design systems. CLI adds source code to user's project.
11111212-> **IMPORTANT:** Run CLI commands with the project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest`, based on `packageManager`. Examples use `npx shadcn@latest`; swap to the project runner.
1212+> **IMPORTANT:** Run CLI commands with project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest`, based on `packageManager`. Examples use `npx shadcn@latest`; swap to project runner.
13131414## Current Project Context
1515···1717!`npx shadcn@latest info --json`
1818```
19192020-Use the JSON for project config and installed components. Run `npx shadcn@latest docs <component>` for docs and example URLs.
2020+Use JSON for project config and installed components. Run `npx shadcn@latest docs <component>` for docs and example URLs.
21212222## Principles
2323···4646- `InputGroup` uses `InputGroupInput` and `InputGroupTextarea`. Do not place raw `Input` or `Textarea` inside `InputGroup`.
4747- Buttons inside inputs use `InputGroup` + `InputGroupAddon`.
4848- Option sets with 2 to 7 choices use `ToggleGroup`. Do not loop `Button` with manual active state.
4949-- Use `FieldSet` + `FieldLegend` for related checkboxes and radios. Do not use a `div` with a heading.
5050-- Validation uses `data-invalid` on `Field` and `aria-invalid` on the control. For disabled, use `data-disabled` on `Field` and `disabled` on the control.
4949+- Use `FieldSet` + `FieldLegend` for related checkboxes and radios. Do not use `div` with heading.
5050+- Validation uses `data-invalid` on `Field` and `aria-invalid` on control. For disabled, use `data-disabled` on `Field` and `disabled` on control.
51515252### Component Structure → [composition.md](./rules/composition.md)
53535454- Items stay inside their group. `SelectItem` → `SelectGroup`. `DropdownMenuItem` → `DropdownMenuGroup`. `CommandItem` → `CommandGroup`.
5555- Use `asChild` for radix or `render` for base when making custom triggers. Check `base` in `npx shadcn@latest info`. → [base-vs-radix.md](./rules/base-vs-radix.md)
5656-- Dialog, Sheet, and Drawer need a Title. Use `DialogTitle`, `SheetTitle`, or `DrawerTitle`. Hide with `className="sr-only"` if needed.
5656+- Dialog, Sheet, and Drawer need Title. Use `DialogTitle`, `SheetTitle`, or `DrawerTitle`. Hide with `className="sr-only"` if needed.
5757- Use full Card composition: `CardHeader`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`.
5858- Button has no `isPending` or `isLoading`. Compose with `Spinner` + `data-icon` + `disabled`.
5959- `TabsTrigger` must stay inside `TabsList`.
···61616262### Use Components, Not Custom Markup → [composition.md](./rules/composition.md)
63636464-- Use existing components before custom markup. Check if a component exists before writing a styled `div`.
6464+- Use existing components before custom markup. Check if component exists before writing styled `div`.
6565- Callouts use `Alert`.
6666- Empty states use `Empty`.
6767- Toasts use `sonner` and `toast()`.
···73737474- Icons in `Button` use `data-icon`, either `inline-start` or `inline-end`.
7575- Do not size icons inside components. Components handle icon sizing. No `size-4` or `w-4 h-4`.
7676-- Pass icons as objects, not string keys. `icon={CheckIcon}`, not a string lookup.
7676+- Pass icons as objects, not string keys. `icon={CheckIcon}`, not string lookup.
77777878### CLI
79798080- Never decode preset codes or build preset URLs manually. Use `preset decode`, `preset url`, or `preset open`. For project-aware detection, use `preset resolve`.
8181-- Apply preset codes directly with the CLI. Use `apply <code>` for existing projects, or `init --preset <code>` when initializing.
8181+- Apply preset codes directly with CLI. Use `apply <code>` for existing projects, or `init --preset <code>` when initializing.
82828383## Key Patterns
8484···139139140140Injected project context fields:
141141142142-- `aliases` means use the real alias prefix for imports, never hardcode.
142142+- `aliases` means use real alias prefix for imports, never hardcode.
143143- `isRSC` means components with `useState`, `useEffect`, handlers, or browser APIs need `"use client"`.
144144- `tailwindVersion` means `v4` uses `@theme inline` and `v3` uses `tailwind.config.js`.
145145-- `tailwindCssFile` is the global CSS file for custom CSS variables. Edit this file, never create a new one.
146146-- `style` is the component visual treatment, like `nova` or `vega`.
147147-- `base` is the primitive library, `radix` or `base`. It affects APIs and props.
145145+- `tailwindCssFile` is global CSS file for custom CSS variables. Edit this file, never create new one.
146146+- `style` is component visual treatment, like `nova` or `vega`.
147147+- `base` is primitive library, `radix` or `base`. It affects APIs and props.
148148- `iconLibrary` controls icon imports. Use `lucide-react` for `lucide`, `@tabler/icons-react` for `tabler`, and so on.
149149- `resolvedPaths` gives exact file destinations for components, utils, hooks, and more.
150150- `framework` covers routing and file conventions, such as Next.js App Router or Vite SPA.
151151-- `packageManager` is the runner for non-shadcn installs, such as `pnpm add date-fns`.
152152-- `preset` is the resolved preset code and values for the current project. Use `preset resolve --json` for details.
151151+- `packageManager` is runner for non-shadcn installs, such as `pnpm add date-fns`.
152152+- `preset` is resolved preset code and values for current project. Use `preset resolve --json` for details.
153153154154-See [cli.md — `info` command](./cli.md) for the full field reference.
154154+See [cli.md — `info` command](./cli.md) for full field reference.
155155156156## Component Docs, Examples, and Usage
157157···161161npx shadcn@latest docs button dialog select
162162```
163163164164-When creating, fixing, debugging, or using a component, always run `npx shadcn@latest docs` and fetch the URLs first. That keeps API usage correct.
164164+When creating, fixing, debugging, or using component, always run `npx shadcn@latest docs` and fetch URLs first. That keeps API usage correct.
165165166166## Workflow
167167168168-1. Get project context. It is already injected above. Run `npx shadcn@latest info` if you need a refresh.
169169-2. Check installed components first. Before `add`, check the `components` list from context or list `resolvedPaths.ui`. Do not import missing components and do not re-add installed ones.
168168+1. Get project context. it's already injected above. Run `npx shadcn@latest info` if you need refresh.
169169+2. Check installed components first. Before `add`, check `components` list from context or list `resolvedPaths.ui`. Do not import missing components and do not re-add installed ones.
1701703. Find components. Use `npx shadcn@latest search`.
171171-4. Get docs and examples. Run `npx shadcn@latest docs <component>`, then fetch the URLs. Use `npx shadcn@latest view` for registry items not yet installed. Use `npx shadcn@latest add --diff` to preview changes on installed components.
171171+4. Get docs and examples. Run `npx shadcn@latest docs <component>`, then fetch URLs. Use `npx shadcn@latest view` for registry items not yet installed. Use `npx shadcn@latest add --diff` to preview changes on installed components.
1721725. Install or update. Use `npx shadcn@latest add`. When updating, use `--dry-run` and `--diff` first.
173173-6. Fix imports in third-party components. After adding components from community registries like `@bundui` or `@magicui`, inspect added non-UI files for hardcoded `@/components/ui/...` imports. Rewrite them to match the project's alias from `npx shadcn@latest info`, such as `@workspace/ui/components`.
174174-7. Review added components. After adding a component or block, always read the added files and verify them. Check for missing subcomponents, missing imports, bad composition, or Critical Rule violations. Replace icon imports with the project `iconLibrary` if needed. Fix issues before moving on.
175175-8. Registry must be explicit. If the user asks to add a block or component and does not name a registry, ask which registry to use.
173173+6. Fix imports in third-party components. After adding components from community registries like `@bundui` or `@magicui`, inspect added non-UI files for hardcoded `@/components/ui/...` imports. Rewrite them to match project's alias from `npx shadcn@latest info`, such as `@workspace/ui/components`.
174174+7. Review added components. After adding component or block, always read added files and verify them. Check for missing subcomponents, missing imports, bad composition, or Critical Rule violations. Replace icon imports with project `iconLibrary` if needed. Fix issues before moving on.
175175+8. Registry must be explicit. If user asks to add block or component and does not name registry, ask which registry to use.
1761769. Switching presets. Ask first: overwrite, partial, merge, or skip?
177177- - Inspect current preset: `npx shadcn@latest preset resolve`. Use `--json` for structured values.
178178- - Inspect incoming preset: `npx shadcn@latest preset decode <code>`. Use `preset url <code>` or `preset open <code>` to share or open the builder.
179179- - Overwrite: `npx shadcn@latest apply <code>`.
180180- - Partial: `npx shadcn@latest apply <code> --only theme,font`. Supported values are `theme` and `font`.
181181- - Merge: `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` and smart merge each installed component with `--dry-run` and `--diff`.
182182- - Skip: `npx shadcn@latest init --preset <code> --force --no-reinstall`. Updates config and CSS only.
183183- - Always run preset commands in the user's project directory. `apply` works only in an existing project with `components.json`. The CLI preserves the current base from `components.json`. If using a scratch dir for `--dry-run`, pass `--base <current-base>` explicitly.
177177+ - Inspect current preset: `npx shadcn@latest preset resolve`. Use `--json` for structured values.
178178+ - Inspect incoming preset: `npx shadcn@latest preset decode <code>`. Use `preset url <code>` or `preset open <code>` to share or open builder.
179179+ - Overwrite: `npx shadcn@latest apply <code>`.
180180+ - Partial: `npx shadcn@latest apply <code> --only theme,font`. Supported values are `theme` and `font`.
181181+ - Merge: `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` and smart merge each installed component with `--dry-run` and `--diff`.
182182+ - Skip: `npx shadcn@latest init --preset <code> --force --no-reinstall`. Updates config and CSS only.
183183+ - Always run preset commands in user's project directory. `apply` works only in existing project with `components.json`. CLI preserves current base from `components.json`. If using scratch dir for `--dry-run`, pass `--base <current-base>` explicitly.
184184185185## Updating Components
186186187187-When updating upstream while keeping local changes, use `--dry-run` and `--diff` for a smart merge. Never fetch raw files from GitHub manually.
187187+When updating upstream while keeping local changes, use `--dry-run` and `--diff` for smart merge. Never fetch raw files from GitHub manually.
1881881891891. Run `npx shadcn@latest add <component> --dry-run` to see affected files.
1901902. For each file, run `npx shadcn@latest add <component> --diff <file>` to compare upstream and local.
1911913. Decide per file:
192192- - No local changes: overwrite safely.
193193- - Has local changes: read the local file, analyze the diff, and apply upstream updates while keeping local changes.
194194- - User says update everything: use `--overwrite`, but confirm first.
192192+ - No local changes: overwrite safely.
193193+ - Has local changes: read local file, analyze diff, and apply upstream updates while keeping local changes.
194194+ - User says update everything: use `--overwrite`, but confirm first.
1951954. Never use `--overwrite` without explicit approval.
196196197197## Quick Reference
+10-10
skills/shadcn/cli.md
···2233Configuration comes from `components.json`.
4455-> **IMPORTANT:** Run commands with the project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest`. Use the runner that matches `packageManager`. Examples use `npx shadcn@latest`.
66-> **IMPORTANT:** Only use documented flags. Do not invent flags. The CLI auto-detects package manager from the lockfile, so there is no `--package-manager` flag.
55+> **IMPORTANT:** Run commands with project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest`. Use runner that matches `packageManager`. Examples use `npx shadcn@latest`.
66+> **IMPORTANT:** Only use documented flags. Do not invent flags. CLI auto-detects package manager from lockfile, so there's no `--package-manager` flag.
7788## Commands
99···1313npx shadcn@latest init [components...] [options]
1414```
15151616-Creates or initializes a shadcn/ui project. Can install components at the same time.
1616+Creates or initializes shadcn/ui project. Can install components at same time.
17171818| Flag | Short | Description | Default |
1919| --- | --- | --- | --- |
···3838npx shadcn@latest apply [preset] [options]
3939```
40404141-Applies a preset to an existing project and overwrites preset-driven config, fonts, CSS variables, and detected UI components.
4141+Applies preset to existing project and overwrites preset-driven config, fonts, CSS variables, and detected UI components.
42424343| Flag | Short | Description | Default |
4444| --- | --- | --- | --- |
···4747| `--cwd <cwd>` | `-c` | Working directory | current |
4848| `--silent` | `-s` | Mute output | `false` |
49495050-`[preset]` is shorthand for `--preset <preset>`. If both exist, they must match. If no preset is given, the CLI opens the custom preset builder on `ui.shadcn.com/create`.
5050+`[preset]` is shorthand for `--preset <preset>`. If both exist, they must match. If no preset is given, CLI opens custom preset builder on `ui.shadcn.com/create`.
51515252### `add` - Add components
5353···112112npx shadcn@latest docs input button
113113```
114114115115-Some components also include an `api` link for the underlying library.
115115+Some components also include `api` link for underlying library.
116116117117### `diff` - Check for updates
118118···190190| `astro` | Astro | Yes |
191191| `laravel` | Laravel | No |
192192193193-All templates support monorepo scaffolding via `--monorepo`. If neither `--monorepo` nor `--no-monorepo` is passed, the CLI prompts. Laravel does not support monorepo scaffolding.
193193+All templates support monorepo scaffolding via `--monorepo`. If neither `--monorepo` nor `--no-monorepo` is passed, CLI prompts. Laravel does not support monorepo scaffolding.
194194195195## Presets
196196···2002002. Code: `--preset a2r6bw`
2012013. URL: `--preset "https://ui.shadcn.com/init?base=radix&style=nova&..."`
202202203203-> **IMPORTANT:** Preset codes are opaque. Do not decode, fetch, or resolve them manually. Pass them to `init --preset <code>` and let the CLI handle resolution.
204204-> Use `apply --preset <code>` when overwriting an existing preset.
203203+> **IMPORTANT:** Preset codes are opaque. Do not decode, fetch, or resolve them manually. Pass them to `init --preset <code>` and let CLI handle resolution.
204204+> Use `apply --preset <code>` when overwriting existing preset.
205205206206## Switching Presets
207207···211211- **Merge** → `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` and smart merge each component one by one.
212212- **Skip** → `npx shadcn@latest init --preset <code> --force --no-reinstall`.
213213214214-Always run preset commands in the user's project directory. `apply` only works in an existing project with `components.json`. The CLI preserves the current base from `components.json`. If using a scratch dir, pass `--base <current-base>` explicitly because preset codes do not encode base.
214214+Always run preset commands in user's project directory. `apply` only works in existing project with `components.json`. CLI preserves current base from `components.json`. If using scratch dir, pass `--base <current-base>` explicitly because preset codes do not encode base.
+4-4
skills/shadcn/customization.md
···10101111## Color Variables
12121313-Use `name` and `name-foreground` pairs. Base var is the background. `-foreground` is text/icons on that background.
1313+Use `name` and `name-foreground` pairs. Base var is background. `-foreground` is text/icons on that background.
14141515| Variable | Purpose |
1616| --- | --- |
···32323333## Dark Mode
34343535-Use class-based dark mode with `.dark` on the root. In Next.js, use `next-themes`:
3535+Use class-based dark mode with `.dark` on root. In Next.js, use `next-themes`:
36363737```tsx
3838import { ThemeProvider } from "next-themes"
···56565757## Adding Custom Colors
58585959-Add vars to `tailwindCssFile` from `npx shadcn@latest info`. Do not create a new CSS file.
5959+Add vars to `tailwindCssFile` from `npx shadcn@latest info`. Do not create new CSS file.
60606161```css
6262:root {
···1071071081081. Built-in variants.
1091092. `className` for layout.
110110-3. Add a new variant in the component source.
110110+3. Add new variant in component source.
1111114. Wrapper components for higher-level composition.
112112113113## Checking for Updates
+1-1
skills/shadcn/mcp.md
···11# shadcn MCP Server
2233-The CLI includes an MCP server for registry search, browsing, and install flows.
33+ CLI includes MCP server for registry search, browsing, and install flows.
4455## Setup
66
+2-2
skills/shadcn/rules/base-vs-radix.md
···55## Key Differences
6677- Radix uses `asChild`. Base uses `render`.
88-- Base needs `nativeButton={false}` when `render` changes a button to a non-button element.
88+- Base needs `nativeButton={false}` when `render` changes button to non-button element.
99- Select differs by `items`, placeholder handling, positioning, and object values.
1010- ToggleGroup differs by `type` vs `multiple` and by `defaultValue` shape.
1111-- Slider uses a number for single thumb in base. Radix uses an array.
1111+- Slider uses number for single thumb in base. Radix uses array.
1212- Accordion uses `multiple` in base. Radix uses `type="single"` or `type="multiple"`.
13131414## Examples
+1-1
skills/shadcn/rules/composition.md
···77- Use `Empty` for empty states.
88- Use `sonner` for toasts.
99- Use `Dialog`, `Sheet`, `Drawer`, `HoverCard`, or `Popover` by intent.
1010-- `Dialog`, `Sheet`, and `Drawer` always need a title.
1010+- `Dialog`, `Sheet`, and `Drawer` always need title.
1111- Use full `Card` composition.
1212- `Button` has no `isPending` or `isLoading` prop.
1313- `TabsTrigger` must stay inside `TabsList`.
+1-1
skills/shadcn/rules/forms.md
···77- Use `InputGroup` + `InputGroupAddon` for buttons inside inputs.
88- Use `ToggleGroup` for 2 to 7 options.
99- Use `FieldSet` + `FieldLegend` for grouped checkboxes or radios.
1010-- Use `data-invalid` and `data-disabled` on the field. Use `aria-invalid` or `disabled` on the control.
1010+- Use `data-invalid` and `data-disabled` on field. Use `aria-invalid` or `disabled` on control.
11111212## Examples
1313
+2-2
skills/shadcn/rules/icons.md
···11# Icons
2233-Use the project's configured `iconLibrary` for imports. Do not assume `lucide-react`.
33+Use project's configured `iconLibrary` for imports. Do not assume `lucide-react`.
4455## Rules
6677- Icons in `Button` use `data-icon="inline-start"` or `data-icon="inline-end"`.
88-- Do not size icons inside shadcn components unless the user asks for custom sizes.
88+- Do not size icons inside shadcn components unless user asks for custom sizes.
99- Pass icons as component objects, not string keys.
10101111## Examples
+1-1
skills/shadcn/rules/styling.md
···99- Use `className` for layout only, not to override component styling.
1010- Avoid `space-x-*` and `space-y-*`. Use `gap-*`.
1111- Use `size-*` when width and height match.
1212-- Use `truncate` instead of the long overflow combo.
1212+- Use `truncate` instead of long overflow combo.
1313- Do not add manual `dark:` overrides. Use semantic tokens.
1414- Use `cn()` for conditional classes.
1515- Do not set `z-index` manually on overlay components.
+7-7
skills/teach-impeccable/SKILL.md
···8899## Step 1: Explore the Codebase
10101111-Before asking questions, thoroughly scan the project to discover what you can.
1111+Before asking questions, thoroughly scan project to discover what.
12121313- **README and docs**: Project purpose, target audience, any stated goals
1414- **Package.json or config files**: Tech stack, dependencies, existing design libraries
···21212222## Step 2: Ask UX-Focused Questions
23232424-{{ask_instruction}} Focus only on what you could not infer from the codebase.
2424+{{ask_instruction}} Focus only on what not infer from codebase.
25252626### Users and Purpose
2727- Who uses this? What is their context when using it?
···4242- Specific accessibility requirements? (WCAG level, known user needs)
4343- Considerations for reduced motion, color blindness, or other accommodations?
44444545-Skip questions where the answer is already clear from the codebase exploration.
4545+Skip questions where answer is already clear from codebase exploration.
46464747## Step 3: Write Design Context
48484949-Synthesize your findings and the user answers into a Design Context section.
4949+Synthesize your findings and user answers into Design Context section.
50505151```markdown
5252## Design Context
···6464[3-5 principles derived from the conversation that should guide all design decisions]
6565```
66666767-Write this section to `.impeccable.md` in the project root. If the file already exists, update the Design Context section in place.
6767+Write this section to `.impeccable.md` in project root. If file already exists, update Design Context section in place.
68686969-Then {{ask_instruction}} whether they would also like the Design Context appended to {{config_file}}. If yes, append or update the section there as well.
6969+Then {{ask_instruction}} whether they would also like Design Context appended to {{config_file}}. If yes, append or update section there as well.
70707171-Confirm completion and summarize the key design principles that will now guide all future work.
7171+Confirm completion and summarize key design principles that will now guide all future work.
-71
skills/teach-impeccable/SKILL.md.original.md
···11----
22-name: teach-impeccable
33-description: One-time setup that gathers design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines.
44-user-invocable: true
55----
66-77-Gather design context for this project, then persist it for all future sessions.
88-99-## Step 1: Explore the Codebase
1010-1111-Before asking questions, thoroughly scan the project to discover what you can.
1212-1313-- **README and docs**: Project purpose, target audience, any stated goals
1414-- **Package.json or config files**: Tech stack, dependencies, existing design libraries
1515-- **Existing components**: Current design patterns, spacing, typography in use
1616-- **Brand assets**: Logos, favicons, color values already defined
1717-- **Design tokens or CSS variables**: Existing color palettes, font stacks, spacing scales
1818-- **Any style guides or brand documentation**
1919-2020-Note what you have learned and what remains unclear.
2121-2222-## Step 2: Ask UX-Focused Questions
2323-2424-{{ask_instruction}} Focus only on what you could not infer from the codebase.
2525-2626-### Users and Purpose
2727-- Who uses this? What is their context when using it?
2828-- What job are they trying to get done?
2929-- What emotions should the interface evoke? (confidence, delight, calm, urgency, etc.)
3030-3131-### Brand and Personality
3232-- How would you describe the brand personality in 3 words?
3333-- Any reference sites or apps that capture the right feel? What specifically about them?
3434-- What should this explicitly NOT look like? Any anti-references?
3535-3636-### Aesthetic Preferences
3737-- Any strong preferences for visual direction? (minimal, bold, elegant, playful, technical, organic, etc.)
3838-- Light mode, dark mode, or both?
3939-- Any colors that must be used or avoided?
4040-4141-### Accessibility and Inclusion
4242-- Specific accessibility requirements? (WCAG level, known user needs)
4343-- Considerations for reduced motion, color blindness, or other accommodations?
4444-4545-Skip questions where the answer is already clear from the codebase exploration.
4646-4747-## Step 3: Write Design Context
4848-4949-Synthesize your findings and the user answers into a Design Context section.
5050-5151-```markdown
5252-## Design Context
5353-5454-### Users
5555-[Who they are, their context, the job to be done]
5656-5757-### Brand Personality
5858-[Voice, tone, 3-word personality, emotional goals]
5959-6060-### Aesthetic Direction
6161-[Visual tone, references, anti-references, theme]
6262-6363-### Design Principles
6464-[3-5 principles derived from the conversation that should guide all design decisions]
6565-```
6666-6767-Write this section to `.impeccable.md` in the project root. If the file already exists, update the Design Context section in place.
6868-6969-Then {{ask_instruction}} whether they would also like the Design Context appended to {{config_file}}. If yes, append or update the section there as well.
7070-7171-Confirm completion and summarize the key design principles that will now guide all future work.
+8-8
skills/typeset/SKILL.md
···11---
22name: typeset
33-description: "Improves typography by fixing font choices, hierarchy, sizing, weight, and readability so text feels intentional. Use when the user mentions fonts, type, readability, text hierarchy, sizing looks off, or wants more polished, intentional typography."
33+description: "Improves typography by fixing font choices, hierarchy, sizing, weight, and readability so text feels intentional. Use when user mentions fonts, type, readability, text hierarchy, sizing looks off, or wants more polished, intentional typography."
44argument-hint: "[target]"
55user-invocable: true
66---
···991010## MANDATORY PREPARATION
11111212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1212+Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and Context Gathering Protocol. Follow protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
13131414---
15151616## Assess Current Typography
17171818-Analyze what's weak or generic about the current type.
1818+Analyze what's weak or generic about current type.
19192020### 1. Font choices
2121- Using invisible defaults? (Inter, Roboto, Arial, Open Sans, system defaults)
···4242- Are font weights used consistently? (Not bold in one section, semibold in another for same role)
4343- Is letter-spacing intentional or default everywhere?
44444545-**CRITICAL**: The goal is not to make text "fancier". It is to make it clearer, more readable, and more intentional. Good typography is invisible. Bad typography is distracting.
4545+**CRITICAL**: goal is not to make text "fancier". it's to make it clearer, more readable, and more intentional. Good typography is invisible. Bad typography is distracting.
46464747## Plan Typography Improvements
48484949-Consult the [typography reference](reference/typography.md) from the frontend-design skill for detailed guidance on scales, pairing, and loading strategies.
4949+Consult [typography reference](reference/typography.md) from frontend-design skill for detailed guidance on scales, pairing, and loading strategies.
50505151-Create a systematic plan.
5151+Create systematic plan.
52525353- **Font selection**: Do fonts need replacing? What fits brand and context?
5454- **Type scale**: Establish modular scale (1.25 ratio) with clear hierarchy
···66666767### Establish Hierarchy
68686969-Build a clear type scale.
6969+Build clear type scale.
7070- **5 sizes cover most needs**: caption, secondary, body, subheading, heading
7171- **Use consistent ratio** between levels (1.25, 1.333, or 1.5)
7272- **Combine dimensions**: Size + weight + color + space for strong hierarchy. Do not rely on size alone.
···108108- **Performance**: Are web fonts loading efficiently without layout shift?
109109- **Accessibility**: Does text meet WCAG contrast ratios? Is it zoomable to 200%?
110110111111-Remember: Typography is the foundation of interface design. It carries the majority of information. Getting it right is the highest-leverage improvement you can make.
111111+Remember: Typography is foundation of interface design. It carries majority of information. Getting it right is highest-leverage improvement make.
-111
skills/typeset/SKILL.md.original.md
···11----
22-name: typeset
33-description: "Improves typography by fixing font choices, hierarchy, sizing, weight, and readability so text feels intentional. Use when the user mentions fonts, type, readability, text hierarchy, sizing looks off, or wants more polished, intentional typography."
44-argument-hint: "[target]"
55-user-invocable: true
66----
77-88-Assess and improve typography that feels generic, inconsistent, or poorly structured. Turn default-looking text into intentional, well-crafted type.
99-1010-## MANDATORY PREPARATION
1111-1212-Invoke {{command_prefix}}frontend-design. It contains design principles, anti-patterns, and the Context Gathering Protocol. Follow the protocol before proceeding. If no design context exists yet, you MUST run {{command_prefix}}teach-impeccable first.
1313-1414----
1515-1616-## Assess Current Typography
1717-1818-Analyze what's weak or generic about the current type.
1919-2020-### 1. Font choices
2121-- Using invisible defaults? (Inter, Roboto, Arial, Open Sans, system defaults)
2222-- Does the font match the brand personality? (A playful brand should not use a corporate typeface)
2323-- Too many font families? (More than 2-3 is almost always a mess)
2424-2525-### 2. Hierarchy
2626-- Can you tell headings from body from captions at a glance?
2727-- Are font sizes too close together? (14px, 15px, 16px = muddy hierarchy)
2828-- Are weight contrasts strong enough? (Medium vs Regular is barely visible)
2929-3030-### 3. Sizing and scale
3131-- Is there a consistent type scale, or are sizes arbitrary?
3232-- Does body text meet minimum readability? (16px+)
3333-- Is the sizing strategy appropriate for the context? (Fixed rem scales for app UIs; fluid clamp() for marketing page headings)
3434-3535-### 4. Readability
3636-- Are line lengths comfortable? (45-75 characters ideal)
3737-- Is line-height appropriate for the font and context?
3838-- Is there enough contrast between text and background?
3939-4040-### 5. Consistency
4141-- Are the same elements styled the same way throughout?
4242-- Are font weights used consistently? (Not bold in one section, semibold in another for the same role)
4343-- Is letter-spacing intentional or default everywhere?
4444-4545-**CRITICAL**: The goal is not to make text "fancier". It is to make it clearer, more readable, and more intentional. Good typography is invisible. Bad typography is distracting.
4646-4747-## Plan Typography Improvements
4848-4949-Consult the [typography reference](reference/typography.md) from the frontend-design skill for detailed guidance on scales, pairing, and loading strategies.
5050-5151-Create a systematic plan.
5252-5353-- **Font selection**: Do fonts need replacing? What fits the brand and context?
5454-- **Type scale**: Establish a modular scale (1.25 ratio) with clear hierarchy
5555-- **Weight strategy**: Which weights serve which roles? (Regular for body, Semibold for labels, Bold for headings)
5656-- **Spacing**: Line-heights, letter-spacing, and margins between typographic elements
5757-5858-## Improve Typography Systematically
5959-6060-### Font Selection
6161-6262-If fonts need replacing:
6363-- Choose fonts that reflect the brand personality
6464-- Pair with genuine contrast (serif + sans, geometric + humanist) or use a single family in multiple weights
6565-- Ensure web font loading does not cause layout shift (font-display: swap, metric-matched fallbacks)
6666-6767-### Establish Hierarchy
6868-6969-Build a clear type scale.
7070-- **5 sizes cover most needs**: caption, secondary, body, subheading, heading
7171-- **Use a consistent ratio** between levels (1.25, 1.333, or 1.5)
7272-- **Combine dimensions**: Size + weight + color + space for strong hierarchy. Do not rely on size alone.
7373-- **App UIs**: Use a fixed rem-based type scale, optionally adjusted at 1-2 breakpoints. Fluid sizing undermines the spatial predictability that dense, container-based layouts need.
7474-- **Marketing and content pages**: Use fluid sizing via clamp(min, preferred, max) for headings and display text. Keep body text fixed.
7575-7676-### Fix Readability
7777-- Set max-width on text containers using ch units (max-width: 65ch)
7878-- Adjust line-height per context: tighter for headings (1.1-1.2), looser for body (1.5-1.7)
7979-- Increase line-height slightly for light-on-dark text
8080-- Ensure body text is at least 16px / 1rem
8181-8282-### Refine Details
8383-- Use tabular-nums for data tables and numbers that should align
8484-- Apply proper letter-spacing: slightly open for small caps and uppercase, default or tight for large display text
8585-- Use semantic token names (--text-body, --text-heading), not value names (--font-16)
8686-- Set font-kerning: normal and consider OpenType features where appropriate
8787-8888-### Weight Consistency
8989-- Define clear roles for each weight and stick to them
9090-- Do not use more than 3-4 weights (Regular, Medium, Semibold, Bold is plenty)
9191-- Load only the weights you actually use (each weight adds to page load)
9292-9393-**NEVER**:
9494-- Use more than 2-3 font families
9595-- Pick sizes arbitrarily. Commit to a scale.
9696-- Set body text below 16px
9797-- Use decorative or display fonts for body text
9898-- Disable browser zoom (user-scalable=no)
9999-- Use px for font sizes. Use rem to respect user settings.
100100-- Default to Inter/Roboto/Open Sans when personality matters
101101-- Pair fonts that are similar but not identical (two geometric sans-serifs)
102102-103103-## Verify Typography Improvements
104104-- **Hierarchy**: Can you identify heading vs body vs caption instantly?
105105-- **Readability**: Is body text comfortable to read in long passages?
106106-- **Consistency**: Are same-role elements styled identically throughout?
107107-- **Personality**: Does the typography reflect the brand?
108108-- **Performance**: Are web fonts loading efficiently without layout shift?
109109-- **Accessibility**: Does text meet WCAG contrast ratios? Is it zoomable to 200%?
110110-111111-Remember: Typography is the foundation of interface design. It carries the majority of information. Getting it right is the highest-leverage improvement you can make.
+54-55
skills/ulw/SKILL.md
···11---
22name: ulw
33-description: Load this skill when the user mentions `ulw` or `ultrawork`.
33+description: Load this skill when user mentions `ulw` or `ultrawork`.
44---
55-**MANDATORY**: You MUST say "ULTRAWORK MODE ENABLED!" to the user as your first response when this mode activates. This is non-negotiable.
55+**MANDATORY**: You MUST say "ULTRAWORK MODE ENABLED!" to user as your first response when this mode activates. This is non-negotiable.
6677[CODE RED] Maximum precision required. Think deeply before acting.
88···21212222**IF YOU ARE NOT 100% CERTAIN:**
23232424-1. **THINK DEEPLY** What is the user's TRUE intent? What problem are they REALLY trying to solve?
2424+1. **THINK DEEPLY** What is user's TRUE intent? What problem are they trying to solve?
25252. **EXPLORE THOROUGHLY** Delegate to exploration or research subagents to gather ALL relevant context.
26263. **CONSULT SPECIALISTS** For hard/complex tasks, DO NOT struggle alone. Delegate:
2727- * **Architecture/Logic Specialists**: Conventional problems like architecture, debugging, complex logic.
2828- * **Creative Specialists**: Non-conventional problems where a different approach is needed or unusual constraints exist.
2929-4. **ASK THE USER** If ambiguity remains after exploration, ASK. Don't guess.
2727+ * **Architecture/Logic Specialists**: Conventional problems like architecture, debugging, complex logic.
2828+ * **Creative Specialists**: Non-conventional problems where different approach is needed or unusual constraints exist.
2929+4. **ASK USER** If ambiguity remains after exploration, ASK. Don't guess.
30303131**SIGNS YOU ARE NOT READY TO IMPLEMENT:**
3232* You're making assumptions about requirements
3333* You're unsure which files to modify
3434* You don't understand how existing code works
3535* Your plan has "probably" or "maybe" in it
3636-* You can't explain the exact steps you'll take
3636+* You can't explain exact steps you'll take
37373838**WHEN IN DOUBT:**
3939-Spawn a background exploration subagent designed for codebase search. Prompt it to find specific patterns in the codebase, showing file paths, implementation approaches, and conventions used. Focus on source directories and skip test files unless test patterns are needed.
3939+Spawn background exploration subagent designed for codebase search. Prompt it to find specific patterns in codebase, showing file paths, implementation approaches, and conventions used. Focus on source directories and skip test files unless test patterns are needed.
40404141-Spawn a background research subagent designed for documentation lookup. Prompt it to find official documentation and production-quality examples for the specific library or technology. Request API references, configuration options, recommended patterns, and common pitfalls. Skip beginner tutorials.
4141+Spawn background research subagent designed for documentation lookup. Prompt it to find official documentation and production-quality examples for specific library or technology. Request API references, configuration options, recommended patterns, and common pitfalls. Skip beginner tutorials.
42424343-Spawn a blocking specialist subagent designed for architectural review. Prompt it with your architectural plan, describing specific files and changes. Detail your concerns and uncertainties. Ask it to evaluate the correctness of the approach, missing potential issues, and better alternatives.
4343+Spawn blocking specialist subagent designed for architectural review. Prompt it with your architectural plan, describing specific files and changes. Detail your concerns and uncertainties. Ask it to evaluate correctness of approach, missing potential issues, and better alternatives.
44444545**ONLY AFTER YOU HAVE:**
4646* Gathered sufficient context via subagents
4747* Resolved all ambiguities
4848-* Created a precise, step-by-step work plan
4848+* Created precise, step-by-step work plan
4949* Achieved 100% confidence in your understanding
50505151**...THEN AND ONLY THEN MAY YOU BEGIN IMPLEMENTATION.**
···54545555## **NO EXCUSES. NO COMPROMISES. DELIVER WHAT WAS ASKED.**
56565757-**THE USER'S ORIGINAL REQUEST IS SACRED. YOU MUST FULFILL IT EXACTLY.**
5757+** USER'S ORIGINAL REQUEST IS SACRED. YOU MUST FULFILL IT EXACTLY.**
58585959| VIOLATION | CONSEQUENCE |
6060|-----------|-------------|
···6464| "Due to limitations..." | **UNACCEPTABLE.** Use subagents, tools, whatever it takes. |
6565| "I made some assumptions..." | **UNACCEPTABLE.** You should have asked FIRST. |
66666767-**THERE ARE NO VALID EXCUSES FOR:**
6767+**there're NO VALID EXCUSES FOR:**
6868* Delivering partial work
6969* Changing scope without explicit user approval
7070* Making unauthorized simplifications
7171-* Stopping before the task is 100% complete
7171+* Stopping before task is 100% complete
7272* Compromising on any stated requirement
73737474-**IF YOU ENCOUNTER A BLOCKER:**
7474+**IF YOU ENCOUNTER BLOCKER:**
75751. **DO NOT** give up
7676-2. **DO NOT** deliver a compromised version
7676+2. **DO NOT** deliver compromised version
77773. **DO** consult specialized subagents (logic/architecture for conventional, creative for non-conventional)
7878-4. **DO** ask the user for guidance
7878+4. **DO** ask user for guidance
79795. **DO** explore alternative approaches
80808181-**THE USER ASKED FOR X. DELIVER EXACTLY X. PERIOD.**
8181+** USER ASKED FOR X. DELIVER EXACTLY X. PERIOD.**
82828383***
84848585YOU MUST LEVERAGE ALL AVAILABLE SUBAGENTS TO THEIR FULLEST POTENTIAL.
8686-TELL THE USER WHAT SUBAGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.
8686+TELL USER WHAT SUBAGENTS YOU WILL LEVERAGE NOW TO SATISFY USER'S REQUEST.
87878888## MANDATORY: PLANNING SUBAGENT INVOCATION (NON-NEGOTIABLE)
89899090-**YOU MUST ALWAYS INVOKE A PLANNING SUBAGENT FOR ANY NON-TRIVIAL TASK.**
9090+**YOU MUST ALWAYS INVOKE PLANNING SUBAGENT FOR ANY NON-TRIVIAL TASK.**
91919292| Condition | Action |
9393|-----------|--------|
···9696| Implementation required | MUST call a planning subagent |
9797| Architecture decision needed | MUST call a planning subagent |
98989999-Spawn a blocking planning subagent. Provide the gathered context and the user request as the prompt.
9999+Spawn blocking planning subagent. Provide gathered context and user request as prompt.
100100101101-**WHY A PLANNING SUBAGENT IS MANDATORY:**
102102-* The planning subagent analyzes dependencies and parallel execution opportunities
103103-* The planning subagent outputs a **parallel task graph** with waves and dependencies
104104-* The planning subagent provides a structured TODO list with required skills per task
105105-* YOU are an orchestrator, NOT an implementer
101101+**WHY PLANNING SUBAGENT IS MANDATORY:**
102102+* planning subagent analyzes dependencies and parallel execution opportunities
103103+* planning subagent outputs **parallel task graph** with waves and dependencies
104104+* planning subagent provides structured TODO list with required skills per task
105105+* YOU are orchestrator, NOT implementer
106106107107### SESSION CONTINUITY WITH THE PLANNING SUBAGENT (CRITICAL)
108108109109-**If the planning subagent returns a task identifier, USE IT for follow-up interactions.**
109109+**If planning subagent returns task identifier, USE IT for follow-up interactions.**
110110111111| Scenario | Action |
112112|----------|--------|
···114114| Need to refine the plan | Resume the planning subagent using its task identifier and provide feedback to adjust the plan |
115115| Plan needs more detail | Resume the planning subagent using its task identifier and request more detail for Task N |
116116117117-**WHY THE TASK IDENTIFIER IS CRITICAL:**
118118-* The planning subagent retains FULL conversation context
117117+**WHY TASK IDENTIFIER IS CRITICAL:**
118118+* planning subagent retains FULL conversation context
119119* No repeated exploration or context gathering
120120* Saves 70%+ tokens on follow-ups
121121-* Maintains interview continuity until the plan is finalized
121121+* Maintains interview continuity until plan is finalized
122122123123-**WRONG:** Starting fresh loses all context. Do not spawn a new planning subagent with more info.
124124-**CORRECT:** Resume preserves everything. Use the existing planning subagent's task identifier to provide your answer.
123123+**WRONG:** Starting fresh loses all context. Do not spawn new planning subagent with more info.
124124+**CORRECT:** Resume preserves everything. Use existing planning subagent's task identifier to provide your answer.
125125126126-**FAILURE TO CALL A PLANNING SUBAGENT = INCOMPLETE WORK.**
126126+**FAILURE TO CALL PLANNING SUBAGENT = INCOMPLETE WORK.**
127127128128***
129129···142142143143**SKILL-BASED DELEGATION:**
144144145145-For frontend work, spawn a background subagent designed for visual engineering and frontend UI/UX.
146146-For complex logic, spawn a background subagent designed for advanced logic and specific programming languages.
147147-For quick fixes, spawn a background subagent designed for rapid version control operations.
145145+For frontend work, spawn background subagent designed for visual engineering and frontend UI/UX.
146146+For complex logic, spawn background subagent designed for advanced logic and specific programming languages.
147147+For quick fixes, spawn background subagent designed for rapid version control operations.
148148149149-**YOU SHOULD ONLY DO IT YOURSELF WHEN:**
149149+** ONLY DO IT YOURSELF WHEN:**
150150* Task is trivially simple (1-2 lines, obvious change)
151151* You have ALL context already loaded
152152* Delegation overhead exceeds task complexity
···157157158158## EXECUTION RULES
159159* **TODO**: Track EVERY step. Mark complete IMMEDIATELY after each.
160160-* **PARALLEL**: Fire independent subagent calls simultaneously in the background. NEVER wait sequentially.
160160+* **PARALLEL**: Fire independent subagent calls simultaneously in background. NEVER wait sequentially.
161161* **BACKGROUND FIRST**: Use background tasks for exploration/research subagents (10+ concurrent if needed).
162162* **VERIFY**: Re-read request after completion. Check ALL requirements met before reporting done.
163163* **DELEGATE**: Don't do everything yourself orchestrate specialized subagents for their strengths.
164164165165## WORKFLOW
166166-1. Analyze the request and identify required capabilities
167167-2. Spawn exploration and research subagents in the background in PARALLEL (10+ if needed)
168168-3. Use a planning subagent with gathered context to create a detailed work breakdown
166166+1. Analyze request and identify required capabilities
167167+2. Spawn exploration and research subagents in background in PARALLEL (10+ if needed)
168168+3. Use planning subagent with gathered context to create detailed work breakdown
1691694. Execute with continuous verification against original requirements
170170171171## VERIFICATION GUARANTEE (NON-NEGOTIABLE)
···182182| **Observable** | What can be measured/seen | "Console shows 'success', no errors" |
183183| **Pass/Fail** | Binary, no ambiguity | "Returns 200 OK" not "should work" |
184184185185-Write these criteria explicitly. **Record them in your TODO/Task items.** Each task MUST include a "QA: [how to verify]" field. These criteria are your CONTRACT work toward them, verify against them.
185185+Write these criteria explicitly. **Record them in your TODO/Task items.** Each task MUST include "QA: [how to verify]" field. These criteria are your CONTRACT work toward them, verify against them.
186186187187### Test Plan Template (MANDATORY for non-trivial tasks)
188188···191191### Prerequisites: [Setup needed]
192192### Test Cases:
1931931. [Test Name]: [Input] → [Expected Output] → [How to verify]
194194-2. ...
194194+2. [Test Name]: [Input] → [Expected Output] → [How to verify]
195195### Success Criteria: ALL test cases pass
196196### How to Execute: [Exact commands/steps]
197197···208208209209### YOU MUST EXECUTE MANUAL QA YOURSELF. THIS IS NOT OPTIONAL.
210210211211-**YOUR FAILURE MODE**: You finish coding, run standard diagnostics, and declare "done" without actually TESTING the feature. Code diagnostics catch type errors, NOT functional bugs. Your work is NOT verified until you MANUALLY test it.
211211+**YOUR FAILURE MODE**: You finish coding, run standard diagnostics, and declare "done" without TESTING feature. Code diagnostics catch type errors, NOT functional bugs. Your work is NOT verified until you MANUALLY test it.
212212213213**WHAT MANUAL QA MEANS execute ALL that apply:**
214214···223223224224**UNACCEPTABLE QA CLAIMS:**
225225* "This should work" RUN IT.
226226-* "The types check out" Types don't catch logic bugs. RUN IT.
227227-* "Diagnostics are clean" That's a static check, not a FUNCTIONAL check. RUN IT.
228228-* "Tests pass" Tests cover known cases. Does the ACTUAL FEATURE work as the user expects? RUN IT.
226226+* " types check out" Types don't catch logic bugs. RUN IT.
227227+* "Diagnostics are clean" That's static check, not FUNCTIONAL check. RUN IT.
228228+* "Tests pass" Tests cover known cases. Does ACTUAL FEATURE work as user expects? RUN IT.
229229230230-**You have Bash, you have tools. There is ZERO excuse for not running manual QA.**
231231-**Manual QA is the FINAL gate before reporting completion. Skip it and your work is INCOMPLETE.**
230230+**You have Bash, you have tools. there's ZERO excuse for not running manual QA.**
231231+**Manual QA is FINAL gate before reporting completion. Skip it and your work is INCOMPLETE.**
232232233233### TDD Workflow (when test infrastructure exists)
234234···250250| Skipping test execution | Tests exist to be RUN, not just written |
251251252252**CLAIM NOTHING WITHOUT PROOF. EXECUTE. VERIFY. SHOW EVIDENCE.**
253253-254253## ZERO TOLERANCE FAILURES
255255-* **NO Scope Reduction**: Never make "demo", "skeleton", "simplified", "basic" versions deliver FULL implementation
256256-* **NO MockUp Work**: When user asked you to do "port A", you must "port A", fully, 100%. No Extra feature, No reduced feature, no mock data, fully working 100% port.
257257-* **NO Partial Completion**: Never stop at 60-80% saying "you can extend this..." finish 100%
254254+* **NO Scope Reduction**: Never make "demo", "skeleton", "simplified", "basic" versions. Deliver full implementation.
255255+* **NO MockUp Work**: When user asked you to do "port", you must port fully, 100%. No extra feature, no reduced feature, no mock data.
256256+* **NO Partial Completion**: Never stop at 60-80% saying "extend this...". Finish 100%
258257* **NO Assumed Shortcuts**: Never skip requirements you deem "optional" or "can be added later"
259258* **NO Premature Stopping**: Never declare done until ALL TODOs are completed and verified
260260-* **NO TEST DELETION**: Never delete or skip failing tests to make the build pass. Fix the code, not the tests.
259259+* **NO TEST DELETION**: Never delete or skip failing tests to make build pass. Fix code, not tests.
261260262262-THE USER ASKED FOR X. DELIVER EXACTLY X. NOT A SUBSET. NOT A DEMO. NOT A STARTING POINT.
261261+ USER ASKED FOR X. DELIVER EXACTLY X. NOT SUBSET. NOT DEMO. NOT STARTING POINT.
2632622642631. EXPLORATION + RESEARCH SUBAGENTS
2652642. GATHER -> PLANNING SUBAGENT SPAWN