@turquoisehealth/pit-viper 2.179.1-dev.0 → 2.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/claude-plugin/.claude-plugin/plugin.json +8 -2
  2. package/claude-plugin/.mcp.json +8 -0
  3. package/claude-plugin/CLAUDE.md +71 -250
  4. package/claude-plugin/README.md +123 -69
  5. package/claude-plugin/skills/pit-viper/SKILL.md +180 -0
  6. package/claude-plugin/skills/pit-viper/references/design-language.md +80 -0
  7. package/claude-plugin/skills/pit-viper/references/design-rules.md +254 -0
  8. package/claude-plugin/skills/pit-viper/references/html-patterns.md +451 -0
  9. package/claude-plugin/skills/pit-viper/references/layout-patterns.md +359 -0
  10. package/claude-plugin/skills/pit-viper/references/patterns-core.md +97 -0
  11. package/claude-plugin/skills/pit-viper/references/theme-guide.md +149 -0
  12. package/claude-plugin/skills/pit-viper/references/vue-guidelines.md +513 -0
  13. package/package.json +3 -3
  14. package/pv-components/dist/stats/vue/base/stats.html +1 -1
  15. package/pv-components/dist/stats/vue/visualizations/stats.html +1 -1
  16. package/pv-components/dist/stats/web/pv-menu-stats.html +1 -1
  17. package/pv-components/dist/stats/web/pv-multi-select-button-stats.html +1 -1
  18. package/pv-components/dist/stats/web/pv-query-builder-input-stats.html +1 -1
  19. package/pv-components/dist/stats/web/pv-select-button-stats.html +1 -1
  20. package/pv-components/dist/vue/base/pv-components-base.mjs +2 -2
  21. package/pv-components/dist/vue/base/pv-components-base.mjs.map +1 -1
  22. package/pv-components/dist/vue/visualizations/components/tables/PvDataTable/filters/filterHelpers.d.ts +1 -1
  23. package/pv-components/dist/vue/visualizations/pv-components-visualizations.mjs +5 -5
  24. package/pv-components/dist/vue/visualizations/pv-components-visualizations.mjs.map +1 -1
  25. package/pv-components/dist/web/components/pv-menu/pv-menu.js +2 -2
  26. package/pv-components/dist/web/components/pv-multi-select-button/pv-multi-select-button.js +2 -2
  27. package/pv-components/dist/web/components/pv-query-builder-input/pv-query-builder-input.js +2 -2
  28. package/pv-components/dist/web/components/pv-select-button/pv-select-button.js +2 -2
  29. package/pv-components/dist/web/pv-components.iife.js +1 -1
  30. package/pv-components/dist/web/pv-components.iife.js.map +1 -1
  31. package/claude-plugin/skills/audit/SKILL.md +0 -125
  32. package/claude-plugin/skills/create/SKILL.md +0 -389
  33. package/claude-plugin/skills/resolve/SKILL.md +0 -142
@@ -1,5 +1,11 @@
1
1
  {
2
2
  "name": "pit-viper",
3
- "version": "1.0.0",
4
- "description": "Pit Viper design system tooling for Claude Code"
3
+ "version": "0.0.2",
4
+ "description": "Pit Viper design system tooling for Claude Code",
5
+ "marketplace": {
6
+ "type": "github",
7
+ "owner": "turquoisehealth",
8
+ "repo": "pit-viper",
9
+ "path": "claude-plugin"
10
+ }
5
11
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "figma": {
4
+ "type": "http",
5
+ "url": "https://mcp.figma.com/mcp"
6
+ }
7
+ }
8
+ }
@@ -1,286 +1,107 @@
1
- # Pit Viper Design System Reference
1
+ # Pit Viper Design System
2
2
 
3
- This plugin provides tooling for Turquoise Health's Pit Viper design system. Use `/pit-viper:resolve` to find components and `/pit-viper:audit` to check compliance.
3
+ Pit Viper is Turquoise Health's design system. Use it for all frontend work.
4
4
 
5
- ## Resources
6
-
7
- - **Storybook:** https://pit-viper-storybook.netlify.app
8
- - **Icons:** https://pitviper.turquoise.health/visual-style/icons/
9
-
10
- ### CSS Themes
11
-
12
- For complete utility class definitions, fetch the appropriate theme:
13
-
14
- | Theme | URL | Usage |
15
- |-------|-----|-------|
16
- | **Platform** (default) | https://pitviper.turquoise.health/assets/css/pit-viper-v2.css | Internal platform apps |
17
- | **Consumer** | https://pitviper.turquoise.health/assets/css/pit-viper-consumer.css | Marketing / consumer-facing pages |
18
-
19
- Do not use the `-scoped` variant.
20
-
21
- ## Overview
22
-
23
- Pit Viper is Turquoise Health's custom design system. It exists as:
24
-
25
- 1. **CSS framework** — utility classes for spacing, typography, color, layout (`pv-*` prefix)
26
- 2. **Vue component library** — `@turquoisehealth/pit-viper`, providing 58+ components
27
-
28
- **Package:** `@turquoisehealth/pit-viper` in `node_modules/`
29
- **Font:** Inter (400, 500, 600)
30
- **Type scale:** Compact (body-md = 0.75rem / 12px)
31
-
32
- ## Color Palette
33
-
34
- ### Brand Colors
35
- | Token | Hex | Usage |
36
- |---|---|---|
37
- | Primary Brand | `#176F6F` | Interactive text, links, primary buttons, borders |
38
- | Secondary Brand | `#02363D` | Body text, secondary buttons, dark surfaces |
39
- | Brand Accent Light | `#A8E6E1` | Inverse buttons, AI button, tertiary buttons |
40
- | Brand Accent Bg | `#F3FCFB` | Brand accent backgrounds |
41
- | Brand Variant | `#16696D` | Visited links, tag primary, status success |
42
- | Brand Gradient | `linear-gradient(109deg, #176F6F 0%, #02363D 100%)` | Brand surface gradient |
43
-
44
- ### Semantic Colors
45
- | Token | Hex | Usage |
46
- |---|---|---|
47
- | Error / Critical | `#DA1E28` | Error text, destructive buttons |
48
- | Error Hover | `#A2191F` | Error border, destructive hover |
49
- | Warning | `#896000` | Warning text |
50
- | Success | `#0E6027` | Success text |
51
- | Success Status | `#218C88` | Checked states, success status dots |
52
- | Yellow Status | `#E5A000` | Status indicators |
53
-
54
- ### Text Colors
55
- | Class | Hex | Usage |
56
- |---|---|---|
57
- | `.pv-text-default` | `#02363D` | Primary body text |
58
- | `.pv-text-subdued` | `#6E7784` | Secondary/helper text |
59
- | `.pv-text-tertiary` | `#6E8081` | Tertiary text |
60
- | `.pv-text-inverse` | `#FFFFFF` | Text on dark surfaces |
61
- | `.pv-text-brand` | `#176F6F` | Brand-colored text, links |
62
- | `.pv-text-critical` | `#DA1E28` | Error messages |
63
- | `.pv-text-warning` | `#896000` | Warning text |
64
- | `.pv-text-success` | `#0E6027` | Success text |
65
-
66
- ### Surface Colors
67
- | Class | Hex | Usage |
68
- |---|---|---|
69
- | `.pv-surface` | `#FFFFFF` | Default background |
70
- | `.pv-surface-accent` | `#F8F8FA` | Subtle alternate backgrounds |
71
- | `.pv-surface-brand` | `#02363D` | Dark brand surfaces |
72
- | `.pv-surface-brand-inverse` | `#176F6F` | Teal brand surfaces |
73
- | `.pv-surface-highlight` | `#E4F8F6` | Highlight/selection backgrounds |
74
- | `.pv-surface-brand-accent` | `#F3FCFB` | Light teal backgrounds |
75
- | `.pv-surface-inverse` | `#242626` | Dark mode surfaces |
76
- | `.pv-surface-warning` | `#FAECCC` | Warning backgrounds |
77
- | `.pv-surface-success` | `#E8FDEA` | Success backgrounds |
78
- | `.pv-surface-critical` | `#FFF1F1` | Error backgrounds |
79
-
80
- ### Border Colors
81
- | Token | Hex | Usage |
82
- |---|---|---|
83
- | Default | `#DCDFE4` | Standard borders |
84
- | Accent | `#176F6F` | Active/focus borders |
85
- | Warning | `#EFC666` | Warning borders |
86
- | Critical | `#A2191F` | Error borders |
87
- | Brand | `#02363D` | Brand borders |
88
-
89
- ### Data Visualization Colors (in order)
90
- 1. `#36C5BA` 2. `#16696D` 3. `#FF7A4E` 4. `#C97AEB` 5. `#F2AD0D` 6. `#7C8AF4` 7. `#95C54C`
5
+ ## Philosophy
91
6
 
92
- ## Typography
7
+ Pit Viper enforces visual consistency across 50+ Turquoise Health apps by:
93
8
 
94
- ### Headings
95
- | Class | Size | Line Height | Weight |
96
- |---|---|---|---|
97
- | `.pv-heading-1` | 1.25rem (20px) | 1.2 | 600 |
98
- | `.pv-heading-2` | 1rem (16px) | 1.5 | 600 |
99
- | `.pv-heading-3` | 0.875rem (14px) | 1.43 | 600 |
100
- | `.pv-heading-4` | 0.75rem (12px) | 1.33 | 600 |
101
- | `.pv-heading-5` | 0.75rem (12px) | 1.33 | 600 |
9
+ - **Eliminating custom CSS** — Use only pv-* utility classes
10
+ - **Replacing raw HTML elements** Use semantic Pit Viper components
11
+ - **Maintaining brand coherence** — Consistent colors, typography, spacing
102
12
 
103
- ### Body Text
104
- | Class | Size | Line Height |
105
- |---|---|---|
106
- | `.pv-text-body-xl` | 0.875rem (14px) | 1.14 |
107
- | `.pv-text-body-lg` | 0.875rem (14px) | 1.14 |
108
- | `.pv-text-body-md` | 0.75rem (12px) | 1.33 |
109
- | `.pv-text-body-sm` | 0.6875rem (11px) | 1.45 |
110
- | `.pv-text-body-xs` | 0.6875rem (11px) | 1.45 |
111
-
112
- ### Title Classes (semibold variants)
113
- `.pv-text-title-xl`, `.pv-text-title-lg`, `.pv-text-title-md`, `.pv-text-title-sm`, `.pv-text-title-xs` — same sizes as body, weight 600.
114
-
115
- ### Eyebrow Classes
116
- | Class | Size | Weight | Style |
117
- |---|---|---|---|
118
- | `.pv-text-eyebrow-lg` | 0.875rem | 700 | Uppercase, letter-spacing 0.0375rem |
119
- | `.pv-text-eyebrow-sm` | 0.75rem | 700 | Uppercase, letter-spacing 0.0375rem |
120
-
121
- ## Spacing
122
-
123
- All spacing uses a 4px base grid. Classes apply `margin-bottom` (stack) or `padding` (inset).
124
-
125
- ### Stack (Vertical Margin)
126
- | Class | Value |
127
- |---|---|
128
- | `.pv-stack-0` | 0 |
129
- | `.pv-stack-4` | 0.25rem (4px) |
130
- | `.pv-stack-8` | 0.5rem (8px) |
131
- | `.pv-stack-12` | 0.75rem (12px) |
132
- | `.pv-stack-16` | 1rem (16px) |
133
- | `.pv-stack-20` | 1.25rem (20px) |
134
- | `.pv-stack-24` | 1.5rem (24px) |
135
- | `.pv-stack-32` | 2rem (32px) |
136
- | `.pv-stack-64` | 4rem (64px) |
137
- | `.pv-stack-128` | 8rem (128px) |
13
+ ## Rules
138
14
 
139
- Responsive variants (e.g. `.pv-stack-16-responsive`) use half-size on mobile, full size at 768px+.
15
+ These are non-negotiable:
140
16
 
141
- ### Inset (Padding)
142
- | Pattern | Example Classes | Description |
143
- |---|---|---|
144
- | Square (all sides) | `.pv-inset-square-8` through `-48` | Equal padding |
145
- | Squish (horiz > vert) | `.pv-inset-squish-8`, `-12`, `-16` | e.g. `0.75rem 1rem` |
146
- | Block (vertical) | `.pv-inset-block-8` through `-32` | `padding-block` only |
147
- | Inline (horizontal) | `.pv-inset-inline-16` through `-32` | `padding-inline` only |
17
+ 1. **No custom CSS** — Only pv-* utility classes. No `<style>` blocks.
18
+ 2. **No Tailwind** Pit Viper has its own utility system.
19
+ 3. **No raw form elements** — Use PvInput, PvButton, PvSelectButton, etc.
20
+ 4. **No guessing** Verify icons and component names exist before using.
148
21
 
149
- ### Flow (Gap between children)
150
- `.pv-flow-8`, `.pv-flow-16`, `.pv-flow-24` — margin-bottom on all children except last.
22
+ ## LLM Endpoints
151
23
 
152
- ### Flex
153
- | Class | Description |
154
- |---|---|
155
- | `.pv-flex` | `display: flex; gap: 0.5rem; align-items: center` |
156
- | `.pv-flex-vertical` | Column direction |
157
- | `.pv-flex-responsive` | Column on mobile, row at 768px+ |
158
- | `.pv-flex-item` | `flex: 1` |
159
- | `.pv-space-between` | `justify-content: space-between` |
24
+ Use these to look up current component info (via WebFetch):
160
25
 
161
- Use CSS custom property `--flex-gap` to override gap, `--flex-justify` for justify-content.
26
+ | Endpoint | Purpose |
27
+ |----------|---------|
28
+ | `GET /llm/search?q={query}` | Search Vue + CSS components |
29
+ | `GET /llm/component/{name}` | Get component props, stories, source |
30
+ | `GET /llm/component` | List all Vue components |
31
+ | `GET /llm/css/{component}` | Get CSS component docs |
32
+ | `GET /llm/css` | List all CSS components |
33
+ | `GET /llm/tokens?category={cat}` | Get design tokens (color, spacing, etc.) |
162
34
 
163
- ## Border Radius
35
+ Base URL: `https://pitviper.turquoise.health`
164
36
 
165
- | Class | Value |
166
- |---|---|
167
- | `.pv-radius-sm` | 2px |
168
- | `.pv-radius` | 5px (default) |
169
- | `.pv-radius-lg` | 12px |
170
- | `.pv-radius-top` | 5px 5px 0 0 |
171
- | `.pv-radius-bottom` | 0 0 5px 5px |
37
+ Always search before assuming a component or class exists.
172
38
 
173
- ## Shadows & Elevation
39
+ ## Quick Reference
174
40
 
175
- | Level | Usage | Value |
176
- |---|---|---|
177
- | Button | Default button elevation | `0px 6px 8px rgba(0,0,0,0.05), 0px 4px 6px -2px rgba(0,0,0,0.04)` |
178
- | Popover | Dropdowns, popovers | `0px 8px 12px -4px rgba(0,0,0,0.08), 0px 12px 16px rgba(0,0,0,0.1)` |
179
- | Elevated Hover | Button hover state | `0px 12px 16px rgba(0,0,0,0.1), 0px 8px 12px -4px rgba(0,0,0,0.08)` |
180
- | Modal | Dialogs, drawers | `0px 12px 20px rgba(0,0,0,0.25), 0px 16px 28px -8px rgba(0,0,0,0.25)` |
41
+ ### Themes
181
42
 
182
- ## Responsive Breakpoints
43
+ | Theme | CSS File | Use Case |
44
+ |-------|----------|----------|
45
+ | Platform | `pit-viper-v2.css` | Internal tools, dashboards |
46
+ | Consumer | `pit-viper-consumer.css` | Marketing, public sites |
183
47
 
184
- | Breakpoint | Usage |
185
- |---|---|
186
- | **768px** | Primary breakpoint — sidebar collapses, flex columns stack, responsive spacing adjusts |
48
+ ### Common Classes
187
49
 
188
- Container max-widths: `.pv-container-sm` (768px), `.pv-container-md` (972px), `.pv-container-lg` (1448px).
50
+ **Typography:**
51
+ - `.pv-heading-1` through `.pv-heading-5`
52
+ - `.pv-text-body-md`, `.pv-text-body-sm`
53
+ - `.pv-text-title-md`, `.pv-text-subdued`
189
54
 
190
- Standard transition duration: **0.125s ease-in-out**.
55
+ **Spacing (4px grid):**
56
+ - `.pv-stack-8`, `.pv-stack-16`, `.pv-stack-24` (margin-bottom)
57
+ - `.pv-inset-square-16`, `.pv-inset-squish-12` (padding)
58
+ - `.pv-flow-16` (gap between children)
191
59
 
192
- ## Components
60
+ **Layout:**
61
+ - `.pv-flex`, `.pv-flex-vertical`
62
+ - `.pv-space-between`
63
+ - `.pv-container-md`, `.pv-container-lg`
193
64
 
194
- ### Most Commonly Used
195
- | Component | Purpose |
196
- |---|---|
197
- | `PvButton` | All buttons (props: `variant`, `size`, `leftIcon`, `rightIcon`, `loading`, `disabled`, `inverse`) |
198
- | `PvAiButton` | AI-specific action buttons |
199
- | `PvIcon` | SVG icon (props: `name`, `size`: 10/12/20/24/32/64) |
200
- | `PvSpinner` | Loading spinner (props: `variant`, `size`) |
201
- | `PvInput` | Text input (v-model, props: `type`, `variant`, `placeholder`, `error`, `disabled`) |
202
- | `PvTextArea` | Multi-line input |
203
- | `PvCheckbox` | Checkbox (v-model, props: `indeterminate`, `disabled`) |
204
- | `PvSwitch` | Toggle switch (v-model, props: `size`, `label`, `disabled`) |
205
- | `PvSelectButton` | Dropdown with search (v-model, props: `options`, `optionsVariant`, `label`) |
206
- | `PvTabs` | Tab bar (v-model, props: `tabs` array with `label`/`counter`/`icon`) |
207
- | `PvSegmentedControl` | Button group toggle |
208
- | `PvModal` | Dialog (v-model, props: `header`, `subheader`; slots: `#body`, `#footer`) |
209
- | `PvDrawer` | Side panel (v-model, props: `header`, `showSearchbar`; slots: `#header`, `#default`, `#footer`) |
210
- | `PvAccordion` | Collapsible section (v-model, props: `header`, `chevronPosition`, `counter`) |
211
- | `PvToast` | Notification (props: `label`, `variant`: success/error/info/dark) |
212
- | `PvTooltip` | Tooltip (props: `variant`, `tooltipPosition`, `interactive`; slots: `#label`, `#tooltip-content`) |
213
- | `PvPopoverMenu` | Dropdown menu |
214
- | `PvTag` | Inline tag |
215
- | `PvPill` | Rounded badge |
216
- | `PvCounterBadge` | Numeric badge |
217
- | `PvBanner` | Alert banner |
218
- | `PvAvatar` | User avatar |
219
- | `PvCard` | Card container |
220
- | `PvSkeleton` | Loading placeholder |
221
- | `PvProgressBar` | Progress indicator |
222
- | `PvTree` | Hierarchical tree |
223
- | `PvSidePanel` | Three-column layout |
224
- | `PvBreadcrumbs` | Breadcrumb nav |
225
- | `PvPagination` | Pagination controls |
65
+ **Colors:**
66
+ - `.pv-text-default`, `.pv-text-brand`, `.pv-text-subdued`
67
+ - `.pv-surface`, `.pv-surface-accent`, `.pv-surface-brand`
226
68
 
227
- ### Visualization Components
228
- Import from `@turquoisehealth/pit-viper/components/visualizations`:
69
+ ### Common Components
229
70
 
230
- | Component | Purpose |
231
- |---|---|
232
- | `PvDataTable` | AG Grid wrapper for data tables |
233
- | `PvChart` | AG Charts wrapper for visualizations |
234
- | `PvDataTableWithChart` | Combined table and chart view |
235
- | `PvMapChart` | Geographic map visualization |
71
+ | Need | Component |
72
+ |------|-----------|
73
+ | Button | `PvButton` |
74
+ | Text input | `PvInput` |
75
+ | Dropdown | `PvSelectButton` |
76
+ | Multi-select | `PvMultiSelectButton` |
77
+ | Data table | `PvDataTable` |
78
+ | Chart | `PvChart` |
79
+ | Modal | `PvModal` |
80
+ | Drawer | `PvDrawer` |
81
+ | Tabs | `PvTabs` |
82
+ | Card | `PvCard` |
236
83
 
237
- ## Import Paths
84
+ ### Import Paths
238
85
 
239
86
  ```typescript
240
87
  // Base components
241
- import { PvButton, PvInput, PvModal } from '@turquoisehealth/pit-viper/components'
88
+ import { PvButton, PvInput } from '@turquoisehealth/pit-viper/components'
242
89
 
243
90
  // Visualization components
244
91
  import { PvDataTable, PvChart } from '@turquoisehealth/pit-viper/components/visualizations'
245
- ```
246
-
247
- ## Theme Selection
248
-
249
- Choose the appropriate theme based on the application type:
250
-
251
- | Application Type | Theme | CSS File |
252
- |-----------------|-------|----------|
253
- | Internal tools, dashboards, admin panels | Platform | `pit-viper-v2.css` |
254
- | Marketing pages, public websites, consumer apps | Consumer | `pit-viper-consumer.css` |
255
-
256
- ### Key Visual Differences
257
-
258
- | Property | Platform | Consumer |
259
- |----------|----------|----------|
260
- | Font Family | Inter | GT Standard |
261
- | Heading-1 Size | 1.25rem (20px) | 3.875rem (62px) |
262
- | Body Text Size | 0.75rem (12px) | 1rem (16px) |
263
- | Overall Density | Compact | Spacious |
264
- | Color Warmth | Cool blue-gray | Warmer teal |
265
-
266
- ### Theme URLs
267
92
 
268
- ```
269
- Platform: https://pitviper.turquoise.health/assets/css/pit-viper-v2.css
270
- Consumer: https://pitviper.turquoise.health/assets/css/pit-viper-consumer.css
93
+ // Layout (direct import)
94
+ import PvSidePanel from '@turquoisehealth/pit-viper/components/layout/PvSidePanel/PvSidePanel.vue'
271
95
  ```
272
96
 
273
- ### Web Components (for non-Vue apps)
97
+ ## Resources
274
98
 
275
- ```html
276
- <script src="https://unpkg.com/@turquoisehealth/pit-viper/pv-components/dist/web/pv-components.iife.js"></script>
277
- ```
99
+ - **Storybook:** https://pit-viper-storybook.netlify.app
100
+ - **Icons:** https://pitviper.turquoise.health/visual-style/icons/
101
+ - **LLM API:** https://pitviper.turquoise.health/llm
278
102
 
279
- Web components use kebab-case: `<pv-button>`, `<pv-input>`, `<pv-card>`, etc.
103
+ ## Skills
280
104
 
281
- ## Rules
105
+ - `/pit-viper` — Main skill for all FE work (implicit triggering)
282
106
 
283
- 1. **No custom CSS** Use only Pit Viper utility classes (see CSS Themes above)
284
- 2. **No Tailwind** — Pit Viper has its own utility system
285
- 3. **Prefer components** — Use Pit Viper components over raw HTML elements
286
- 4. **Valid icons only** — Only use icon names from https://pitviper.turquoise.health/visual-style/icons/
107
+ To audit files for compliance, ask the skill: "audit this file" or "check for pit viper violations".
@@ -1,20 +1,34 @@
1
1
  # Pit Viper Claude Plugin
2
2
 
3
- Internal Claude Code plugin for Pit Viper design system tooling.
3
+ Claude Code plugin for Pit Viper design system.
4
4
 
5
5
  ## Installation
6
6
 
7
- ### Claude Code CLI
7
+ ### Option 1: Install from GitHub (recommended)
8
8
 
9
+ **Step 1: Add the marketplace**
10
+
11
+ Claude Code CLI:
9
12
  ```bash
10
- claude --plugin-dir ~/claude-plugins-pit-viper
13
+ /plugin
11
14
  ```
15
+ Then select **Marketplace** → **Add marketplace** → enter `turquoisehealth/pit-viper`
16
+
17
+ Claude Code Desktop:
18
+ Customize → Create plugin → Add marketplace → enter `turquoisehealth/pit-viper`
12
19
 
13
- Or add to your Claude Code settings for persistent installation.
20
+ **Step 2: Install the plugin**
21
+ ```bash
22
+ /plugin install turquoisehealth@pit-viper
23
+ ```
14
24
 
15
- ### Cowork
25
+ ### Option 2: Clone and install locally
16
26
 
17
- Contact DevTools team for managed installation.
27
+ ```bash
28
+ git clone https://github.com/turquoisehealth/pit-viper.git
29
+ cd pit-viper
30
+ /plugin add ./claude-plugin
31
+ ```
18
32
 
19
33
  ## Prerequisites
20
34
 
@@ -26,94 +40,134 @@ npm install @turquoisehealth/pit-viper
26
40
 
27
41
  For Figma integration, authenticate via `/mcp` in Claude Code.
28
42
 
29
- ## Available Skills
43
+ ## Skills
30
44
 
31
- ### `/pit-viper:create`
45
+ ### `/pit-viper` (Implicit)
32
46
 
33
- Build complete pages and layouts from natural language descriptions. No Vue, imports, or CSS knowledge required.
47
+ The main skill triggers automatically on all frontend work UI building, Vue/HTML editing, component usage, and visual interface work.
34
48
 
35
- **Usage:**
36
- ```
37
- /pit-viper:create a dashboard with a sidebar and data table
38
- /pit-viper:create a login form
39
- /pit-viper:create a settings page with tabs for profile and notifications
40
- /pit-viper:create a marketing landing page with hero and features
41
- ```
49
+ **Output Modes:**
50
+ - **Engineer Mode**: Vue 3 Composition API code (when editing .vue files)
51
+ - **Prototype Mode**: HTML with pv-* classes (for quick prototypes, non-technical users)
52
+ - **Design Review Mode**: Component selection rationale (for design discussions)
42
53
 
43
- **Output:** Complete Vue SFC or HTML file ready to use.
54
+ **Workflow:**
55
+ 1. Searches for components via `/llm/search`
56
+ 2. Gets detailed props/usage via `/llm/component/{name}`
57
+ 3. Fetches CSS utilities and tokens via `/llm/css` and `/llm/tokens`
58
+ 4. Generates appropriate output based on context
44
59
 
45
- **Theme Detection:**
46
- - Keywords like "marketing", "landing", "consumer" → Consumer theme (large typography)
47
- - Keywords like "dashboard", "admin", "internal" → Platform theme (compact, default)
48
- - Override with `--theme=consumer` or `--theme=platform`
60
+ ### Auditing Files
49
61
 
50
- **Format Options:**
51
- - Default: Vue Single File Component (`<script setup>` + `<template>`)
52
- - Add `--format=html` for plain HTML with web components
62
+ To check files for design system compliance, ask the skill:
63
+ - "audit this file for pit viper violations"
64
+ - "check src/components/Foo.vue for compliance"
65
+ - "fix any pit viper violations in changed files"
53
66
 
54
- ### `/pit-viper:resolve`
67
+ The skill will check for custom CSS, raw HTML elements, invalid classes, and wrong imports — then auto-fix them.
55
68
 
56
- Find the correct Pit Viper component for a UI element.
69
+ ## LLM Endpoints
57
70
 
58
- **Usage:**
59
- ```
60
- /pit-viper:resolve dropdown with search
61
- /pit-viper:resolve <figma-url>
62
- /pit-viper:resolve <html-snippet>
63
- ```
71
+ The skill uses Pit Viper's `/llm` HTTP endpoints (via WebFetch) for dynamic component lookup:
64
72
 
65
- **Output:** Component name, import path, props, and usage example.
73
+ | Endpoint | Purpose |
74
+ |----------|---------|
75
+ | `GET /llm` | API index |
76
+ | `GET /llm/search?q={query}` | Search across CSS and Vue components |
77
+ | `GET /llm/component` | List all Vue components |
78
+ | `GET /llm/component/{name}` | Get component details (props, stories, source) |
79
+ | `GET /llm/component/{name}?web_component=true` | Get web component variant |
80
+ | `GET /llm/css` | List all CSS components |
81
+ | `GET /llm/css/{component}` | Get CSS component documentation |
82
+ | `GET /llm/css/themes` | Get theme CDN URLs |
83
+ | `GET /llm/tokens` | List all design tokens |
84
+ | `GET /llm/tokens?category={cat}` | Filter tokens (color, spacing, typography, border, shadow) |
66
85
 
67
- ### `/pit-viper:audit`
86
+ Base URL: `https://pitviper.turquoise.health`
68
87
 
69
- Check files for design system compliance and auto-fix violations.
88
+ ## MCP Servers
70
89
 
71
- **Usage:**
72
- ```
73
- /pit-viper:audit # Audit git-changed files
74
- /pit-viper:audit src/components/Foo.vue # Audit specific file
75
- /pit-viper:audit --all # Audit all Vue/HTML files
90
+ The plugin includes an MCP configuration for Figma integration:
91
+
92
+ ```json
93
+ {
94
+ "mcpServers": {
95
+ "figma": {
96
+ "type": "http",
97
+ "url": "https://mcp.figma.com/mcp"
98
+ }
99
+ }
100
+ }
76
101
  ```
77
102
 
78
- **Checks:**
79
- - Custom CSS (`<style>` blocks, inline styles)
80
- - Raw HTML elements that should be Pit Viper components
81
- - Invalid CSS class names
82
- - Wrong import paths
103
+ To authenticate, run `/mcp` in Claude Code and follow the Figma OAuth flow.
83
104
 
84
- ## Adding Production Examples
105
+ ## Running Evals
85
106
 
86
- Add curated code snippets to `examples/` for the resolve skill to reference:
107
+ The plugin includes an eval suite to verify skill behavior. Evals are stored in `pit-viper-workspace/evals/`.
108
+
109
+ ### Using skill-creator
110
+
111
+ ```bash
112
+ /skill-creator
113
+ ```
114
+
115
+ Then follow the prompts to run evals against the pit-viper skill. The skill-creator will:
116
+ 1. Spawn test cases with and without the skill
117
+ 2. Grade assertions automatically
118
+ 3. Generate a benchmark report
119
+ 4. Open a viewer for qualitative review
120
+
121
+ ### Eval structure
87
122
 
88
123
  ```
89
- examples/
90
- ├── PvDataTable.vue # Common table patterns
91
- ├── PvSelectButton.vue # Dropdown usage
92
- ├── PvModal.vue # Modal with form
93
- └── ...
124
+ pit-viper-workspace/
125
+ ├── evals/
126
+ ├── evals.json # Test cases with prompts and assertions
127
+ │ └── fixtures/ # Vue files used as test inputs
128
+ └── iteration-N/ # Results from each eval run
129
+ ├── eval-name/
130
+ │ ├── with_skill/
131
+ │ └── without_skill/
132
+ └── benchmark.json
94
133
  ```
95
134
 
96
- The resolve skill checks `examples/{ComponentName}.vue` before falling back to Storybook.
135
+ ### Eval categories
136
+
137
+ | Category | Tests |
138
+ |----------|-------|
139
+ | Engineer (E1-E3) | Vue component generation, loading states, unknown components |
140
+ | Prototype (P1-P3) | HTML generation, settings pages, iterative context |
141
+ | Design (D1-D3) | Component selection, token validation, layout review |
142
+ | Cross (X1-X4) | Tailwind avoidance, theme detection, mode ambiguity, icons |
143
+ | Tables (T1-T4) | PvDataTable usage, PvChart usage, HTML tables, chart rejection |
97
144
 
98
145
  ## Resources
99
146
 
100
147
  - **Storybook:** https://pit-viper-storybook.netlify.app
101
148
  - **Icons:** https://pitviper.turquoise.health/visual-style/icons/
102
- - **Design Tokens:** See `CLAUDE.md` for full color, typography, and spacing reference
103
- - **MCP Server:** https://pitviper.turquoise.health/mcp
104
-
105
- ## MCP Tools
106
-
107
- The plugin uses the Pit Viper MCP server for fast component lookups. Available tools:
149
+ - **Design Tokens:** See `CLAUDE.md` for quick reference
150
+ - **LLM API:** https://pitviper.turquoise.health/llm
108
151
 
109
- | Tool | Purpose |
110
- |------|---------|
111
- | `mcp__pit-viper__search` | Search across CSS and Vue components |
112
- | `mcp__pit-viper__storybook_get_component` | Get Vue component details (props, stories, source) |
113
- | `mcp__pit-viper__storybook_list_components` | List all Vue components with stories |
114
- | `mcp__pit-viper__css_get_docs` | Get CSS component documentation |
115
- | `mcp__pit-viper__css_list_components` | List CSS components by category |
116
- | `mcp__pit-viper__css_list_tokens` | List design tokens (colors, spacing, etc.) |
117
- | `mcp__pit-viper__css_search_classes` | Search CSS classes by pattern |
152
+ ## Plugin Structure
118
153
 
119
- The MCP server is automatically enabled when using this plugin in the pit-viper repo.
154
+ ```
155
+ claude-plugin/
156
+ ├── .claude-plugin/
157
+ │ └── plugin.json # Plugin metadata
158
+ ├── .mcp.json # MCP server configuration (Figma)
159
+ ├── CLAUDE.md # Philosophy, rules, quick reference
160
+ ├── README.md # This file
161
+ ├── skills/
162
+ │ └── pit-viper/
163
+ │ ├── SKILL.md # Main skill (implicit triggering)
164
+ │ └── references/
165
+ │ ├── design-rules.md # Mandatory spacing, typography, layout rules
166
+ │ ├── patterns-core.md # Universal utility class patterns (always loaded)
167
+ │ ├── vue-guidelines.md # Engineer Mode — Vue patterns + anti-patterns
168
+ │ ├── html-patterns.md # Prototype Mode — HTML patterns + anti-patterns
169
+ │ ├── design-language.md # Design Review Mode reference
170
+ │ ├── layout-patterns.md # Page layout patterns
171
+ │ └── theme-guide.md # Theme selection guide
172
+ └── examples/ # Example usage files
173
+ ```