mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
7.4 KiB
7.4 KiB
vibe-design-plugins Repository
This repository provides cross-provider design skills and commands for LLM-powered development tools (Cursor, Claude Code, Gemini CLI, Codex CLI).
Repository Purpose
Maintain a single source of truth for design-focused skills and commands, then automatically transform them into provider-specific formats. Each provider has different capabilities (frontmatter, arguments, modular files), so we use a build system to generate appropriate outputs.
Architecture: Option A (Feature-Rich Source)
We use a feature-rich source format that gets transformed for each provider:
- Source files (
source/): Full metadata with YAML frontmatter, args, descriptions - Build system (
scripts/): Transforms source → provider-specific formats - Distribution (
dist/): Committed output files for 4 providers
Why Option A?
Cursor doesn't support frontmatter or arguments (lowest common denominator). Instead of limiting all providers, we:
- Author with full metadata in source files
- Generate full-featured versions for providers that support it (Claude Code, Gemini, Codex)
- Generate downgraded versions for Cursor (strip frontmatter, rely on appending)
Repository Structure
vibe-design-plugins/
├── source/ # EDIT THESE! Single source of truth
│ ├── commands/ # Command definitions with frontmatter
│ │ └── normalize.md
│ └── skills/ # Skill definitions with frontmatter
│ └── frontend-design.md
├── dist/ # Generated outputs (committed for users)
│ ├── cursor/ # Downgraded (no frontmatter)
│ │ ├── commands/*.md
│ │ └── rules/*.md
│ ├── claude-code/ # Full featured
│ │ ├── commands/*.md
│ │ └── skills/*/SKILL.md
│ ├── gemini/ # TOML commands + modular skills
│ │ ├── commands/*.toml
│ │ ├── GEMINI.md
│ │ └── GEMINI.*.md
│ └── codex/ # Custom prompts + modular skills
│ ├── prompts/*.md
│ ├── AGENTS.md
│ └── AGENTS.*.md
├── scripts/ # Build system (Bun)
│ ├── build.js # Main orchestrator
│ ├── lib/
│ │ ├── utils.js # Shared utilities
│ │ └── transformers/ # Provider-specific transformers
│ │ ├── cursor.js
│ │ ├── claude-code.js
│ │ ├── gemini.js
│ │ └── codex.js
├── README.md # End user documentation
├── DEVELOP.md # Contributor documentation
└── package.json # Bun scripts
Source File Format
Commands (source/commands/*.md)
---
name: command-name
description: Clear description of what this command does
args:
- name: argname
description: Argument description
required: false
---
Command prompt here. Use {{argname}} placeholders for arguments.
Skills (source/skills/*.md)
---
name: skill-name
description: Clear description of what this skill provides
license: License info (optional)
---
Skill instructions for the LLM here.
Build System
Uses Bun for fast builds. Modular architecture:
utils.js: Shared functions (parseFrontmatter, readSourceFiles, writeFile, etc.)- Transformer pattern: Each provider has one focused file
- Registry:
transformers/index.jsexports all transformers - Main script:
build.jsorchestrates everything (~50 lines)
Run: bun run build
Provider Transformations
1. Cursor (Downgraded)
- Commands: Body only →
dist/cursor/commands/*.md - Skills: Body only →
dist/cursor/rules/*.md - Strips: All frontmatter, all metadata
- Args: Not supported, arguments get appended to end of prompt
2. Claude Code (Full Featured)
- Commands: Full YAML frontmatter →
dist/claude-code/commands/*.md - Skills: Full YAML frontmatter →
dist/claude-code/skills/{name}/SKILL.md - Preserves: All metadata, all args
- Format: Matches Anthropic Skills spec
3. Gemini CLI (Full Featured)
- Commands: TOML format →
dist/gemini/commands/*.toml- Uses
descriptionandpromptkeys - Transforms
{{argname}}→{{args}}(Gemini uses single args string)
- Uses
- Skills: Modular with imports →
dist/gemini/GEMINI.{name}.md- Main
GEMINI.mduses@./GEMINI.{name}.mdimport syntax - Gemini automatically loads imported files
- Main
4. Codex CLI (Full Featured)
- Commands: Custom prompt format →
dist/codex/prompts/*.md- Uses
descriptionandargument-hintin frontmatter - Transforms
{{argname}}→$ARGNAME(uppercase variables) - Invoked as
/prompts:<name>
- Uses
- Skills: Modular with routing →
dist/codex/AGENTS.{name}.md- Main
AGENTS.mdprovides routing instructions - Tells Codex when to read which skill file
- Main
Key Design Decisions
Why commit dist/?
End users can copy files directly without needing build tools.
Why separate transformers?
- Each provider ~30-85 lines, easy to understand
- Can modify one without affecting others
- Easy to add new providers
Why Bun?
- Much faster than Node.js (2-4x)
- All-in-one toolkit (runtime + package manager)
- Zero config, TypeScript native
- Node.js compatible (works with existing code)
Why modular skills for Gemini/Codex?
- Better context management (load only what's needed)
- Cleaner file organization
- Gemini: Uses native
@file.mdimport feature - Codex: Uses routing pattern with AGENTS.md guide
Adding New Content
- Create source file in
source/commands/orsource/skills/ - Add frontmatter with name, description, args (for commands) or license (for skills)
- Write body with instructions/prompt
- Build:
bun run build - Test with your provider
- Commit both source and dist files
Current Content
Commands
- normalize: Normalize design to match design system
Skills
- frontend-design: Create distinctive, production-grade frontend interfaces
Important Notes
- Source is truth: Always edit
source/, never editdist/directly - Test across providers: Changes affect 4 different outputs
- Argument handling: Write prompts that work with both placeholders and appending
- Cursor limitations: No frontmatter/args, so design for graceful degradation
Documentation
- README.md: End user guide (installation, usage)
- DEVELOP.md: Contributor guide (architecture, build system, adding content)
- This file: Context for AI assistants and new developers