@kennethsolomon/shipkit 3.10.1 → 3.11.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.
- package/README.md +121 -49
- package/commands/sk/autopilot.md +2 -2
- package/commands/sk/context-budget.md +5 -0
- package/commands/sk/eval.md +5 -0
- package/commands/sk/health.md +5 -0
- package/commands/sk/help.md +32 -8
- package/commands/sk/learn.md +5 -0
- package/commands/sk/resume-session.md +5 -0
- package/commands/sk/safety-guard.md +5 -0
- package/commands/sk/save-session.md +5 -0
- package/commands/sk/security-check.md +2 -2
- package/commands/sk/set-profile.md +8 -0
- package/commands/sk/status.md +4 -9
- package/package.json +1 -1
- package/skills/sk:accessibility/SKILL.md +10 -1
- package/skills/sk:autopilot/SKILL.md +26 -45
- package/skills/sk:brainstorming/SKILL.md +13 -0
- package/skills/sk:context/SKILL.md +11 -15
- package/skills/sk:context-budget/SKILL.md +126 -0
- package/skills/sk:dashboard/SKILL.md +3 -4
- package/skills/sk:dashboard/server.js +0 -65
- package/skills/sk:e2e/SKILL.md +3 -3
- package/skills/sk:eval/SKILL.md +188 -0
- package/skills/sk:fast-track/SKILL.md +0 -9
- package/skills/sk:frontend-design/SKILL.md +232 -0
- package/skills/sk:gates/SKILL.md +2 -3
- package/skills/sk:health/SKILL.md +146 -0
- package/skills/sk:learn/SKILL.md +138 -0
- package/skills/sk:lint/SKILL.md +3 -3
- package/skills/sk:perf/SKILL.md +3 -3
- package/skills/sk:resume-session/SKILL.md +95 -0
- package/skills/sk:retro/SKILL.md +1 -2
- package/skills/sk:review/SKILL.md +2 -2
- package/skills/sk:safety-guard/SKILL.md +134 -0
- package/skills/sk:save-session/SKILL.md +84 -0
- package/skills/sk:setup-claude/SKILL.md +40 -4
- package/skills/sk:setup-claude/scripts/__pycache__/apply_setup_claude.cpython-314.pyc +0 -0
- package/skills/sk:setup-claude/scripts/apply_setup_claude.py +0 -1
- package/skills/sk:setup-claude/templates/.claude/settings.json.template +110 -26
- package/skills/sk:setup-claude/templates/.claude/statusline.sh +1 -15
- package/skills/sk:setup-claude/templates/CLAUDE.md.template +69 -138
- package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +2 -13
- package/skills/sk:setup-claude/templates/hooks/config-protection.sh +71 -0
- package/skills/sk:setup-claude/templates/hooks/console-log-warning.sh +42 -0
- package/skills/sk:setup-claude/templates/hooks/cost-tracker.sh +26 -0
- package/skills/sk:setup-claude/templates/hooks/post-edit-format.sh +53 -0
- package/skills/sk:setup-claude/templates/hooks/pre-compact.sh +1 -12
- package/skills/sk:setup-claude/templates/hooks/safety-guard.sh +72 -0
- package/skills/sk:setup-claude/templates/hooks/session-start.sh +0 -11
- package/skills/sk:setup-claude/templates/hooks/session-stop.sh +0 -7
- package/skills/sk:setup-claude/templates/hooks/suggest-compact.sh +35 -0
- package/skills/sk:setup-claude/tests/__pycache__/test_apply_setup_claude.cpython-314.pyc +0 -0
- package/skills/sk:setup-claude/tests/test_apply_setup_claude.py +2 -33
- package/skills/sk:setup-optimizer/SKILL.md +68 -15
- package/skills/sk:start/SKILL.md +34 -11
- package/skills/sk:test/SKILL.md +3 -3
- package/skills/sk:setup-claude/templates/tasks/workflow-status.md.template +0 -28
|
@@ -61,15 +61,6 @@ Before proceeding, check the scope of planned changes:
|
|
|
61
61
|
### 6. Finalize
|
|
62
62
|
- Run `/sk:finish-feature` for changelog + PR
|
|
63
63
|
|
|
64
|
-
## Workflow Status
|
|
65
|
-
|
|
66
|
-
Fast-track updates `tasks/workflow-status.md` with abbreviated steps:
|
|
67
|
-
- Steps 1-2 (read): done
|
|
68
|
-
- Steps 3-6 (explore, design, accessibility, plan): skipped (fast-track)
|
|
69
|
-
- Steps 7-11 (branch, implement, commit): done
|
|
70
|
-
- Steps 12-17 (gates): handled by `/sk:gates`
|
|
71
|
-
- Steps 18-21 (update, finalize, sync, release): done as applicable
|
|
72
|
-
|
|
73
64
|
## Model Routing
|
|
74
65
|
|
|
75
66
|
| Profile | Model |
|
|
@@ -63,6 +63,235 @@ Interpret creatively and make unexpected choices that feel genuinely designed fo
|
|
|
63
63
|
|
|
64
64
|
Remember: Claude is capable of extraordinary creative thinking. Don't hold back on the design direction — show what can be envisioned when thinking outside the box and committing fully to a distinctive aesthetic.
|
|
65
65
|
|
|
66
|
+
## UX Quality Constraints
|
|
67
|
+
|
|
68
|
+
Apply these rules as hard constraints during design. They are organized by priority — address CRITICAL issues first, then HIGH, then MEDIUM. Skip categories irrelevant to the current design (e.g., Charts for a landing page).
|
|
69
|
+
|
|
70
|
+
| Priority | Category | Impact | Key Rule |
|
|
71
|
+
|---|---|---|---|
|
|
72
|
+
| 1 | Accessibility | CRITICAL | Contrast 4.5:1, keyboard nav, aria-labels, focus rings |
|
|
73
|
+
| 2 | Touch & Interaction | CRITICAL | Min 44×44px targets, tap feedback, no hover-only |
|
|
74
|
+
| 3 | Performance | HIGH | WebP/AVIF images, lazy load, skeleton screens, no layout shift |
|
|
75
|
+
| 4 | Style Selection | HIGH | Match style to product type, SVG icons (never emoji), one primary CTA |
|
|
76
|
+
| 5 | Layout & Responsive | HIGH | Mobile-first, breakpoints 375/768/1024/1440, no horizontal scroll |
|
|
77
|
+
| 6 | Typography & Color | MEDIUM | Base 16px body, line-height 1.5, semantic color tokens |
|
|
78
|
+
| 7 | Animation | MEDIUM | 150–300ms duration, transform/opacity only, respect prefers-reduced-motion |
|
|
79
|
+
| 8 | Forms & Feedback | MEDIUM | Visible labels, error near field, loading → success/error on submit |
|
|
80
|
+
| 9 | Navigation | HIGH | Bottom nav ≤5 items, predictable back, deep linking |
|
|
81
|
+
| 10 | Charts & Data | LOW | Match chart to data type, accessible colors, legend visible |
|
|
82
|
+
|
|
83
|
+
### 1. Accessibility (CRITICAL)
|
|
84
|
+
|
|
85
|
+
- Minimum 4.5:1 contrast ratio for normal text (large text 3:1)
|
|
86
|
+
- Visible focus rings on all interactive elements (2–4px outline)
|
|
87
|
+
- Descriptive alt text on all meaningful images
|
|
88
|
+
- `aria-label` on icon-only buttons
|
|
89
|
+
- Tab order matches visual order; full keyboard navigation supported
|
|
90
|
+
- `label[for]` on every form input — never placeholder-only
|
|
91
|
+
- Never convey information by color alone (add icon or text)
|
|
92
|
+
- Respect `prefers-reduced-motion` — reduce or disable animations when set
|
|
93
|
+
- Sequential heading hierarchy h1→h6, no skipped levels
|
|
94
|
+
- Screen reader logical reading order; meaningful accessibilityLabel/Hint
|
|
95
|
+
- Skip-to-main-content link for keyboard users
|
|
96
|
+
|
|
97
|
+
### 2. Touch & Interaction (CRITICAL)
|
|
98
|
+
|
|
99
|
+
- Minimum 44×44pt (iOS) / 48×48dp (Android) tap target — expand hitSlop if icon is smaller
|
|
100
|
+
- Minimum 8px gap between adjacent touch targets
|
|
101
|
+
- Never rely on hover-only for primary interactions — use click/tap
|
|
102
|
+
- Disable buttons during async operations; show spinner or progress
|
|
103
|
+
- Add `cursor-pointer` to all clickable elements (web)
|
|
104
|
+
- Provide visual feedback on press within 100ms (ripple, opacity, elevation)
|
|
105
|
+
- Use `touch-action: manipulation` to eliminate 300ms tap delay (web)
|
|
106
|
+
- Avoid horizontal swipe on scrollable content — prefer vertical scroll
|
|
107
|
+
- Don't block system gestures (back swipe, Control Center, home indicator)
|
|
108
|
+
|
|
109
|
+
### 3. Performance (HIGH)
|
|
110
|
+
|
|
111
|
+
- Use WebP/AVIF with `srcset`/`sizes`; lazy load non-hero images
|
|
112
|
+
- Declare `width`/`height` or `aspect-ratio` on images to prevent CLS
|
|
113
|
+
- Use `font-display: swap` or `optional` to avoid FOIT
|
|
114
|
+
- Preload only critical fonts — avoid preloading every weight variant
|
|
115
|
+
- Lazy load non-hero components via dynamic import / route-level splitting
|
|
116
|
+
- Load third-party scripts `async`/`defer`
|
|
117
|
+
- Reserve space for async content to avoid layout jumps (CLS < 0.1)
|
|
118
|
+
- Virtualize lists with 50+ items
|
|
119
|
+
- Use skeleton/shimmer for loads >300ms — never a blank frame
|
|
120
|
+
- Keep per-frame work <16ms (60fps); move heavy tasks off main thread
|
|
121
|
+
- Debounce/throttle scroll, resize, and input handlers
|
|
122
|
+
|
|
123
|
+
### 4. Style Selection (HIGH)
|
|
124
|
+
|
|
125
|
+
- Match style to product type and industry — no random style mixing
|
|
126
|
+
- Use SVG icons (Heroicons, Lucide) — never emojis as structural icons
|
|
127
|
+
- Use one icon set throughout — consistent stroke width, corner radius, filled vs outline
|
|
128
|
+
- Each screen has exactly one primary CTA; secondary actions are visually subordinate
|
|
129
|
+
- Apply a consistent elevation/shadow scale — no arbitrary shadow values
|
|
130
|
+
- Design light and dark variants together; don't assume light values work in dark mode
|
|
131
|
+
- Blur signals background dismissal (modals, sheets) — not decoration
|
|
132
|
+
- Respect platform idioms (iOS HIG vs Material Design) for navigation, controls, motion
|
|
133
|
+
|
|
134
|
+
### 5. Layout & Responsive (HIGH)
|
|
135
|
+
|
|
136
|
+
- `<meta name="viewport" content="width=device-width, initial-scale=1">` — never disable zoom
|
|
137
|
+
- Design mobile-first; scale up to 768, 1024, 1440
|
|
138
|
+
- No horizontal scroll on mobile; all content fits viewport width
|
|
139
|
+
- Use 4pt/8dp incremental spacing system throughout
|
|
140
|
+
- Consistent `max-w-6xl`/`7xl` container on desktop
|
|
141
|
+
- Define a z-index scale (e.g., 0 / 10 / 20 / 40 / 100 / 1000) — no arbitrary values
|
|
142
|
+
- Fixed navbars/bottom bars must pad underlying scroll content
|
|
143
|
+
- Use `min-h-dvh` instead of `100vh` on mobile
|
|
144
|
+
- Establish hierarchy via size, spacing, contrast — not color alone
|
|
145
|
+
- Core content first on mobile; fold or hide secondary content
|
|
146
|
+
|
|
147
|
+
### 6. Typography & Color (MEDIUM)
|
|
148
|
+
|
|
149
|
+
- Minimum 16px body text on mobile (prevents iOS auto-zoom)
|
|
150
|
+
- Line-height 1.5–1.75 for body text
|
|
151
|
+
- 60–75 characters per line on desktop; 35–60 on mobile
|
|
152
|
+
- Consistent type scale (e.g., 12 / 14 / 16 / 18 / 24 / 32)
|
|
153
|
+
- Bold headings (600–700), regular body (400), medium labels (500)
|
|
154
|
+
- Define semantic color tokens (`--color-primary`, `--color-error`, `--color-surface`) — never raw hex in components
|
|
155
|
+
- Dark mode: use desaturated/lighter tonal variants, not inverted colors; test contrast independently
|
|
156
|
+
- All foreground/background pairs must meet 4.5:1 (AA); use a contrast checker
|
|
157
|
+
- Use tabular/monospaced figures for prices, data columns, and timers
|
|
158
|
+
- Use whitespace intentionally to group related items and separate sections
|
|
159
|
+
|
|
160
|
+
### 7. Animation (MEDIUM)
|
|
161
|
+
|
|
162
|
+
- Duration: 150–300ms for micro-interactions; complex transitions ≤400ms; never >500ms
|
|
163
|
+
- Animate `transform` and `opacity` only — never `width`, `height`, `top`, `left`
|
|
164
|
+
- Use ease-out for entering elements; ease-in for exiting
|
|
165
|
+
- Every animation expresses cause-effect — no purely decorative motion
|
|
166
|
+
- State changes (hover, active, expanded, modal) animate smoothly — no snapping
|
|
167
|
+
- Page transitions maintain spatial continuity (shared element, directional slide)
|
|
168
|
+
- Exit animations should be 60–70% of enter duration to feel responsive
|
|
169
|
+
- Stagger list/grid item entrance by 30–50ms per item
|
|
170
|
+
- Animations must be interruptible — user tap cancels in-progress animation immediately
|
|
171
|
+
- Never block user input during an animation
|
|
172
|
+
- Scale feedback on press: subtle 0.95–1.05 scale on tappable cards/buttons
|
|
173
|
+
- `prefers-reduced-motion` must reduce or disable animations entirely
|
|
174
|
+
|
|
175
|
+
### 8. Forms & Feedback (MEDIUM)
|
|
176
|
+
|
|
177
|
+
- Every input has a visible label — never placeholder-only
|
|
178
|
+
- Show errors immediately below the related field (not only at the top)
|
|
179
|
+
- Mark required fields (asterisk or explicit label)
|
|
180
|
+
- Submit button: loading state → success or error state
|
|
181
|
+
- Auto-dismiss toasts in 3–5s; toasts must not steal focus (`aria-live="polite"`)
|
|
182
|
+
- Confirm before destructive actions (modals, undo toasts)
|
|
183
|
+
- Validate on blur, not on every keystroke
|
|
184
|
+
- Use semantic input types (`email`, `tel`, `number`) for correct mobile keyboard
|
|
185
|
+
- Provide show/hide toggle on password fields
|
|
186
|
+
- Error messages state the cause + how to fix — not just "Invalid input"
|
|
187
|
+
- Multi-step forms show a step indicator and allow back navigation
|
|
188
|
+
- After submit error, auto-focus the first invalid field
|
|
189
|
+
|
|
190
|
+
### 9. Navigation (HIGH)
|
|
191
|
+
|
|
192
|
+
- Bottom navigation: maximum 5 items with both icon and text label
|
|
193
|
+
- Back navigation is predictable and restores scroll/filter state
|
|
194
|
+
- All key screens are deep-linkable via URL/route
|
|
195
|
+
- Current location is visually highlighted in navigation (color, weight, indicator)
|
|
196
|
+
- Modals have a clear close affordance; support swipe-down to dismiss on mobile
|
|
197
|
+
- Never use modals for primary navigation flows
|
|
198
|
+
- Large screens (≥1024px) prefer sidebar; small screens use bottom/top nav
|
|
199
|
+
- Don't mix Tab + Sidebar + Bottom Nav at the same hierarchy level
|
|
200
|
+
- Dangerous actions (logout, delete account) are visually separated from normal nav
|
|
201
|
+
- After route change, move focus to main content region for screen readers
|
|
202
|
+
|
|
203
|
+
### 10. Charts & Data (when applicable)
|
|
204
|
+
|
|
205
|
+
- Match chart type to data: trend → line, comparison → bar, proportion → pie/donut
|
|
206
|
+
- Avoid pie/donut for >5 categories — use bar chart instead
|
|
207
|
+
- Use accessible color palettes; never red/green only (colorblind users)
|
|
208
|
+
- Always show a legend near the chart (not below a scroll fold)
|
|
209
|
+
- Provide tooltips/data labels on hover (web) or tap (mobile)
|
|
210
|
+
- Label all axes with units; avoid rotated labels on mobile
|
|
211
|
+
- Charts must reflow on small screens (horizontal bar instead of vertical, fewer ticks)
|
|
212
|
+
- Show skeleton/shimmer while chart data loads — never an empty axis frame
|
|
213
|
+
- Grid lines should be low-contrast (e.g., `gray-200`) so they don't compete with data
|
|
214
|
+
- Provide a text summary or `aria-label` describing the chart's key insight
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Professional UI Anti-Patterns
|
|
219
|
+
|
|
220
|
+
These are frequently overlooked issues that make UI look unprofessional. Flag any of these in the design spec so implementation avoids them.
|
|
221
|
+
|
|
222
|
+
### Icons & Visual Elements
|
|
223
|
+
- **No emoji as icons** — use Heroicons, Lucide, or equivalent SVG sets
|
|
224
|
+
- **No raster icons** — SVG only; PNGs blur and can't adapt to dark mode
|
|
225
|
+
- **No mixed icon styles** — pick one set; consistent stroke width and fill style throughout
|
|
226
|
+
- **No inconsistent sizing** — define icon size tokens (sm/md/lg = 16/20/24pt)
|
|
227
|
+
- **Pressed states must not shift layout** — use opacity/color/elevation, not transforms that reflow siblings
|
|
228
|
+
|
|
229
|
+
### Interaction
|
|
230
|
+
- **No tap-only no-feedback** — every tappable element responds visually within 100ms
|
|
231
|
+
- **No hover-only states on mobile** — hover states are fine for desktop, never the only affordance
|
|
232
|
+
- **No disabled elements that look enabled** — use `opacity: 0.38–0.5` + `cursor: not-allowed` + semantic `disabled` attribute
|
|
233
|
+
- **No precision-required targets** — avoid requiring taps on thin edges or pixel-perfect areas
|
|
234
|
+
|
|
235
|
+
### Light/Dark Mode
|
|
236
|
+
- **No hardcoded hex in components** — use semantic tokens that map per theme
|
|
237
|
+
- **No light-mode-only testing** — always verify dark mode contrast independently
|
|
238
|
+
- **No weak modal scrims** — use 40–60% black so background doesn't compete with foreground
|
|
239
|
+
- **No color-only state indicators** — always pair color with icon or label
|
|
240
|
+
|
|
241
|
+
### Layout & Spacing
|
|
242
|
+
- **No safe-area violations** — respect notch, Dynamic Island, and gesture bar on mobile
|
|
243
|
+
- **No scroll content hidden behind fixed bars** — add correct insets
|
|
244
|
+
- **No random spacing** — every gap follows the 4/8dp rhythm
|
|
245
|
+
- **No edge-to-edge paragraphs on tablets** — constrain long-form text width for readability
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Pre-Delivery Checklist
|
|
250
|
+
|
|
251
|
+
Include this checklist at the end of every design output. Implementation must pass all applicable items before shipping.
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
### Pre-Delivery Checklist
|
|
255
|
+
|
|
256
|
+
**Accessibility**
|
|
257
|
+
- [ ] All text contrast ≥4.5:1 (normal) or ≥3:1 (large/UI)
|
|
258
|
+
- [ ] Focus rings visible on all interactive elements
|
|
259
|
+
- [ ] All images/icons have alt text or aria-label
|
|
260
|
+
- [ ] No color-only information conveyance
|
|
261
|
+
- [ ] prefers-reduced-motion respected
|
|
262
|
+
|
|
263
|
+
**Touch & Interaction**
|
|
264
|
+
- [ ] All tap targets ≥44×44pt
|
|
265
|
+
- [ ] Every tappable element has pressed-state feedback
|
|
266
|
+
- [ ] No hover-only interactions on mobile
|
|
267
|
+
- [ ] cursor-pointer on all clickable web elements
|
|
268
|
+
|
|
269
|
+
**Layout**
|
|
270
|
+
- [ ] No horizontal scroll at 375px
|
|
271
|
+
- [ ] Safe areas respected (notch, gesture bar, tab bar)
|
|
272
|
+
- [ ] Scroll content not hidden behind fixed bars
|
|
273
|
+
- [ ] 4/8dp spacing rhythm consistent throughout
|
|
274
|
+
|
|
275
|
+
**Typography & Color**
|
|
276
|
+
- [ ] Body text ≥16px on mobile
|
|
277
|
+
- [ ] Semantic color tokens used (no raw hex in components)
|
|
278
|
+
- [ ] Dark mode contrast verified independently
|
|
279
|
+
|
|
280
|
+
**Performance**
|
|
281
|
+
- [ ] Images use WebP/AVIF with declared dimensions
|
|
282
|
+
- [ ] Skeleton/shimmer shown for loads >300ms
|
|
283
|
+
- [ ] No layout shift from async content (CLS < 0.1)
|
|
284
|
+
|
|
285
|
+
**Animation**
|
|
286
|
+
- [ ] All transitions 150–300ms
|
|
287
|
+
- [ ] Only transform/opacity animated (no width/height/top/left)
|
|
288
|
+
- [ ] Animations interruptible; no input blocking
|
|
289
|
+
|
|
290
|
+
**Icons**
|
|
291
|
+
- [ ] No emojis used as icons (SVG only)
|
|
292
|
+
- [ ] Consistent icon family and stroke style throughout
|
|
293
|
+
```
|
|
294
|
+
|
|
66
295
|
## Output Format
|
|
67
296
|
|
|
68
297
|
End every `/sk:frontend-design` session with a structured summary:
|
|
@@ -93,6 +322,9 @@ End every `/sk:frontend-design` session with a structured summary:
|
|
|
93
322
|
|
|
94
323
|
### Implementation Notes
|
|
95
324
|
[Specific Tailwind classes, CSS patterns, or gotchas for /sk:execute-plan]
|
|
325
|
+
|
|
326
|
+
### Pre-Delivery Checklist
|
|
327
|
+
[Copy the checklist from the UX Quality Constraints section above and mark which items are covered by this design, and which need special attention during implementation]
|
|
96
328
|
```
|
|
97
329
|
|
|
98
330
|
After presenting the design summary, you **MUST** stop and ask — do not continue or summarize further:
|
package/skills/sk:gates/SKILL.md
CHANGED
|
@@ -65,11 +65,10 @@ All gates passed. Run /sk:update-task
|
|
|
65
65
|
|
|
66
66
|
## Failure Handling
|
|
67
67
|
|
|
68
|
-
- Each agent handles its own fix →
|
|
68
|
+
- Each agent handles its own fix → re-run loop internally
|
|
69
|
+
- **Squash gate commits:** When a gate requires fixes, collect all fixes for that pass, then make ONE commit: `fix(<gate>): resolve <gate> issues`. Do not commit after each individual fix.
|
|
69
70
|
- If any agent fails after 3 attempts → stop all gates and report to user
|
|
70
71
|
- Do NOT proceed to the next batch if the current batch has unresolved failures
|
|
71
|
-
- Update `tasks/workflow-status.md` for each gate as it completes:
|
|
72
|
-
- Steps 12-17 marked `done` with attempt count in Notes
|
|
73
72
|
|
|
74
73
|
## 3-Strike Protocol
|
|
75
74
|
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sk:health
|
|
3
|
+
description: "Run harness self-audit and produce a health scorecard."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /sk:health — Harness Self-Audit Scorecard
|
|
7
|
+
|
|
8
|
+
Deterministic scoring of your ShipKit setup across 7 categories. Produces a reproducible scorecard that identifies gaps and recommends improvements.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/sk:health # full scorecard
|
|
14
|
+
/sk:health --category <name> # single category deep-dive
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Model Routing
|
|
18
|
+
|
|
19
|
+
Read `.shipkit/config.json` from the project root if it exists.
|
|
20
|
+
|
|
21
|
+
| Profile | Model |
|
|
22
|
+
|---------|-------|
|
|
23
|
+
| `full-sail` | haiku |
|
|
24
|
+
| `quality` | haiku |
|
|
25
|
+
| `balanced` | haiku |
|
|
26
|
+
| `budget` | haiku |
|
|
27
|
+
|
|
28
|
+
> File checks + arithmetic — haiku is sufficient.
|
|
29
|
+
|
|
30
|
+
## Scoring Categories
|
|
31
|
+
|
|
32
|
+
Each category scores 0-10. Maximum total: 70.
|
|
33
|
+
|
|
34
|
+
### 1. Tool Coverage (0-10)
|
|
35
|
+
|
|
36
|
+
Check for presence and completeness of:
|
|
37
|
+
|
|
38
|
+
| Check | Points |
|
|
39
|
+
|-------|--------|
|
|
40
|
+
| `.claude/hooks/` exists with 6+ hooks | +2 |
|
|
41
|
+
| `.claude/agents/` exists with 4+ agents | +2 |
|
|
42
|
+
| `.claude/rules/` exists with 1+ rules | +1 |
|
|
43
|
+
| `commands/sk/` or `.claude/commands/sk/` has 10+ commands | +2 |
|
|
44
|
+
| MCP servers configured | +1 |
|
|
45
|
+
| Statusline configured in settings.json | +1 |
|
|
46
|
+
| Permissions deny list has 3+ entries | +1 |
|
|
47
|
+
|
|
48
|
+
### 2. Context Efficiency (0-10)
|
|
49
|
+
|
|
50
|
+
| Check | Points |
|
|
51
|
+
|-------|--------|
|
|
52
|
+
| CLAUDE.md exists and is <250 lines | +2 (>250: +1, >400: 0) |
|
|
53
|
+
| No duplicate instructions across CLAUDE.md and skills | +2 |
|
|
54
|
+
| MCP tools total <40 | +2 (40-60: +1, >60: 0) |
|
|
55
|
+
| Skills total <60 | +2 (>60: +1, >80: 0) |
|
|
56
|
+
| Agent descriptions all <200 lines | +2 |
|
|
57
|
+
|
|
58
|
+
### 3. Quality Gates (0-10)
|
|
59
|
+
|
|
60
|
+
| Check | Points |
|
|
61
|
+
|-------|--------|
|
|
62
|
+
| Lint configured (package.json scripts or Makefile) | +2 |
|
|
63
|
+
| Test runner configured | +2 |
|
|
64
|
+
| Security check available (npm audit, composer audit, etc.) | +2 |
|
|
65
|
+
| E2E test config exists (playwright.config, cypress.config) | +2 |
|
|
66
|
+
| Code review skill available | +2 |
|
|
67
|
+
|
|
68
|
+
### 4. Memory Persistence (0-10)
|
|
69
|
+
|
|
70
|
+
| Check | Points |
|
|
71
|
+
|-------|--------|
|
|
72
|
+
| `tasks/findings.md` exists and has content | +2 |
|
|
73
|
+
| `tasks/lessons.md` exists and has content | +2 |
|
|
74
|
+
| `tasks/progress.md` exists | +1 |
|
|
75
|
+
| `tasks/tech-debt.md` exists | +1 |
|
|
76
|
+
| `tasks/cross-platform.md` exists | +1 |
|
|
77
|
+
| Session hooks active (session-start.sh, session-stop.sh) | +2 |
|
|
78
|
+
| `.claude/sessions/` directory exists | +1 |
|
|
79
|
+
|
|
80
|
+
### 5. Eval Coverage (0-10)
|
|
81
|
+
|
|
82
|
+
| Check | Points |
|
|
83
|
+
|-------|--------|
|
|
84
|
+
| Test directory exists (`tests/`, `test/`, `spec/`, `__tests__/`) | +2 |
|
|
85
|
+
| Test assertions exist (grep for assert/expect/test/it/describe) | +2 |
|
|
86
|
+
| Coverage config exists (jest.config coverage, phpunit coverage) | +2 |
|
|
87
|
+
| `.claude/evals/` directory exists with eval definitions | +2 |
|
|
88
|
+
| CI/CD runs tests (`.github/workflows/` with test step) | +2 |
|
|
89
|
+
|
|
90
|
+
### 6. Security Guardrails (0-10)
|
|
91
|
+
|
|
92
|
+
| Check | Points |
|
|
93
|
+
|-------|--------|
|
|
94
|
+
| validate-commit hook exists | +2 |
|
|
95
|
+
| validate-push hook exists | +2 |
|
|
96
|
+
| config-protection hook exists | +2 |
|
|
97
|
+
| Deny rules in settings.json (3+ patterns) | +2 |
|
|
98
|
+
| safety-guard hook exists | +2 |
|
|
99
|
+
|
|
100
|
+
### 7. Cost Efficiency (0-10)
|
|
101
|
+
|
|
102
|
+
| Check | Points |
|
|
103
|
+
|-------|--------|
|
|
104
|
+
| Model routing configured (`.shipkit/config.json` exists) | +3 |
|
|
105
|
+
| Compact suggestions active (suggest-compact hook) | +2 |
|
|
106
|
+
| Cost tracker active (cost-tracker hook) | +2 |
|
|
107
|
+
| Context budget recently audited (`/sk:context-budget` run) | +3 |
|
|
108
|
+
|
|
109
|
+
## Output Format
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
=== ShipKit Health Scorecard ===
|
|
113
|
+
|
|
114
|
+
Tool Coverage: 8/10 ||||||||..
|
|
115
|
+
Context Efficiency: 7/10 |||||||...
|
|
116
|
+
Quality Gates: 10/10 ||||||||||
|
|
117
|
+
Memory Persistence: 6/10 ||||||....
|
|
118
|
+
Eval Coverage: 4/10 ||||......
|
|
119
|
+
Security Guardrails: 8/10 ||||||||..
|
|
120
|
+
Cost Efficiency: 5/10 |||||.....
|
|
121
|
+
─────────────────────────────────
|
|
122
|
+
Total: 48/70 (69%)
|
|
123
|
+
|
|
124
|
+
Rating: GOOD
|
|
125
|
+
|
|
126
|
+
Findings:
|
|
127
|
+
[MISSING] No .claude/evals/ directory — no formal eval definitions
|
|
128
|
+
[MISSING] No CI/CD test step detected
|
|
129
|
+
[MISSING] Context budget never audited
|
|
130
|
+
[WEAK] Only 4 hooks installed (recommended: 8+)
|
|
131
|
+
|
|
132
|
+
Top 3 Actions:
|
|
133
|
+
1. Run /sk:eval define to create eval definitions (+4 points)
|
|
134
|
+
2. Add CI/CD test workflow (+2 points)
|
|
135
|
+
3. Run /sk:context-budget to audit token usage (+3 points)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Rating Scale
|
|
139
|
+
|
|
140
|
+
| Score | Rating |
|
|
141
|
+
|-------|--------|
|
|
142
|
+
| 60-70 | EXCELLENT |
|
|
143
|
+
| 45-59 | GOOD |
|
|
144
|
+
| 30-44 | FAIR |
|
|
145
|
+
| 15-29 | NEEDS WORK |
|
|
146
|
+
| 0-14 | CRITICAL |
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sk:learn
|
|
3
|
+
description: "Extract reusable patterns from the current session into learned instincts."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /sk:learn — Extract Reusable Patterns
|
|
7
|
+
|
|
8
|
+
Analyzes the current session for extractable patterns and saves them as learned instincts. Patterns evolve from tentative observations into strong conventions over time.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/sk:learn # analyze current session
|
|
14
|
+
/sk:learn --list # show all learned patterns
|
|
15
|
+
/sk:learn --promote <id> # promote project pattern to global
|
|
16
|
+
/sk:learn --export # export patterns as shareable file
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Model Routing
|
|
20
|
+
|
|
21
|
+
Read `.shipkit/config.json` from the project root if it exists.
|
|
22
|
+
|
|
23
|
+
| Profile | Model |
|
|
24
|
+
|---------|-------|
|
|
25
|
+
| `full-sail` | haiku |
|
|
26
|
+
| `quality` | haiku |
|
|
27
|
+
| `balanced` | haiku |
|
|
28
|
+
| `budget` | haiku |
|
|
29
|
+
|
|
30
|
+
> Pattern detection is lightweight keyword matching — haiku is sufficient.
|
|
31
|
+
|
|
32
|
+
## How It Works
|
|
33
|
+
|
|
34
|
+
### Phase 1: Session Analysis
|
|
35
|
+
|
|
36
|
+
Scan the current conversation for extractable patterns:
|
|
37
|
+
|
|
38
|
+
1. **Error resolutions** — problems encountered and how they were solved
|
|
39
|
+
2. **Debugging techniques** — investigation steps that led to root causes
|
|
40
|
+
3. **Workarounds** — non-obvious solutions to framework/tool limitations
|
|
41
|
+
4. **Project conventions** — naming patterns, file organization, code style decisions
|
|
42
|
+
5. **Tool usage patterns** — effective tool combinations and sequences
|
|
43
|
+
|
|
44
|
+
Filter out trivial items:
|
|
45
|
+
- Typo fixes, syntax errors, simple formatting
|
|
46
|
+
- One-off configuration changes
|
|
47
|
+
- Standard framework usage (documented in official docs)
|
|
48
|
+
|
|
49
|
+
### Phase 2: Pattern Extraction
|
|
50
|
+
|
|
51
|
+
For each candidate pattern, extract:
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
---
|
|
55
|
+
name: [descriptive-slug]
|
|
56
|
+
type: [error-resolution | debugging | workaround | convention | tool-usage]
|
|
57
|
+
confidence: [0.3 | 0.5 | 0.7 | 0.9]
|
|
58
|
+
scope: [project | global]
|
|
59
|
+
created: [YYYY-MM-DD]
|
|
60
|
+
seen_count: 1
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Problem
|
|
64
|
+
[What triggered this pattern]
|
|
65
|
+
|
|
66
|
+
## Solution
|
|
67
|
+
[What resolved it — specific steps]
|
|
68
|
+
|
|
69
|
+
## Example
|
|
70
|
+
[Concrete code or command example]
|
|
71
|
+
|
|
72
|
+
## When to Apply
|
|
73
|
+
[Conditions that indicate this pattern is relevant]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Phase 3: Confidence Scoring
|
|
77
|
+
|
|
78
|
+
| Score | Label | Meaning |
|
|
79
|
+
|-------|-------|---------|
|
|
80
|
+
| 0.3 | tentative | Seen once, might be coincidence |
|
|
81
|
+
| 0.5 | emerging | Seen in similar contexts, likely a real pattern |
|
|
82
|
+
| 0.7 | strong | Proven effective multiple times |
|
|
83
|
+
| 0.9 | near-certain | Battle-tested, consistently reliable |
|
|
84
|
+
|
|
85
|
+
New patterns start at 0.3. Confidence increases when:
|
|
86
|
+
- Same pattern seen again in a different session (+0.2)
|
|
87
|
+
- User explicitly confirms the pattern (+0.2)
|
|
88
|
+
- Pattern seen in a different project (+0.1, also promotes to global)
|
|
89
|
+
|
|
90
|
+
### Phase 4: Storage
|
|
91
|
+
|
|
92
|
+
- **Project patterns**: `~/.claude/skills/learned/[project-name]/[pattern-name].md`
|
|
93
|
+
- **Global patterns**: `~/.claude/skills/learned/global/[pattern-name].md`
|
|
94
|
+
|
|
95
|
+
### Phase 5: User Confirmation
|
|
96
|
+
|
|
97
|
+
Present extracted patterns and ask for confirmation before saving:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Extracted 3 patterns from this session:
|
|
101
|
+
|
|
102
|
+
1. [error-resolution] "laravel-queue-retry-after" (0.3 tentative)
|
|
103
|
+
Problem: Queue jobs silently failing after Redis timeout
|
|
104
|
+
Solution: Set retry_after in queue config > job timeout
|
|
105
|
+
|
|
106
|
+
2. [convention] "api-resource-wrapping" (0.3 tentative)
|
|
107
|
+
Problem: Inconsistent API response format
|
|
108
|
+
Solution: Always wrap in ApiResource with data key
|
|
109
|
+
|
|
110
|
+
3. [tool-usage] "parallel-explore-before-implement" (0.3 tentative)
|
|
111
|
+
Problem: Missing context leads to wrong implementation
|
|
112
|
+
Solution: Launch 3 Explore agents before writing code
|
|
113
|
+
|
|
114
|
+
Save patterns? (all / 1,3 / none)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Promotion: Project to Global
|
|
118
|
+
|
|
119
|
+
A pattern is auto-promoted to global when:
|
|
120
|
+
- Same pattern (by name or content similarity) appears in 2+ projects
|
|
121
|
+
- Confidence >= 0.7 in both projects
|
|
122
|
+
- User hasn't marked it as project-specific
|
|
123
|
+
|
|
124
|
+
Manual promotion: `/sk:learn --promote <pattern-id>`
|
|
125
|
+
|
|
126
|
+
## Export / Import
|
|
127
|
+
|
|
128
|
+
Export all patterns for sharing:
|
|
129
|
+
```
|
|
130
|
+
/sk:learn --export > my-patterns.json
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Import from a colleague:
|
|
134
|
+
```
|
|
135
|
+
/sk:learn --import colleague-patterns.json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Imported patterns start at 0.3 confidence regardless of source confidence.
|
package/skills/sk:lint/SKILL.md
CHANGED
|
@@ -111,10 +111,10 @@ If any analyzer reports errors or the dep audit blocks:
|
|
|
111
111
|
2. Re-run formatters (fixes may need formatting)
|
|
112
112
|
3. Re-launch all analyzers in parallel
|
|
113
113
|
4. Re-run dep audit if any dependency was fixed
|
|
114
|
-
5.
|
|
115
|
-
6.
|
|
114
|
+
5. Re-run from step 3 until every tool exits clean
|
|
115
|
+
6. Once all tools pass clean, make ONE squash commit: `fix(lint): resolve lint and dep audit issues` — do NOT ask the user
|
|
116
116
|
|
|
117
|
-
>
|
|
117
|
+
> Squash gate commits — collect all fixes for the pass, then one commit. Do not commit after each individual fix.
|
|
118
118
|
|
|
119
119
|
### 7. Report Results
|
|
120
120
|
|
package/skills/sk:perf/SKILL.md
CHANGED
|
@@ -12,8 +12,8 @@ Run this skill after implementing and passing lint/tests, but before `/sk:review
|
|
|
12
12
|
|
|
13
13
|
## Hard Rules
|
|
14
14
|
|
|
15
|
-
- **Fix all critical and high in-scope findings** (files in `git diff main..HEAD --name-only`) immediately after the audit.
|
|
16
|
-
- **Medium/low in-scope findings:** fix them in the same
|
|
15
|
+
- **Fix all critical and high in-scope findings** (files in `git diff main..HEAD --name-only`) immediately after the audit. Re-run the audit until critical/high = 0. Once clean, make ONE squash commit: `fix(perf): resolve performance findings`.
|
|
16
|
+
- **Medium/low in-scope findings:** fix them in the same pass if straightforward, otherwise log to `tasks/tech-debt.md`.
|
|
17
17
|
- **Pre-existing findings** (files outside the current branch diff): log to `tasks/tech-debt.md` using this format — do NOT fix inline:
|
|
18
18
|
```
|
|
19
19
|
### [YYYY-MM-DD] Found during: sk:perf
|
|
@@ -21,7 +21,7 @@ Run this skill after implementing and passing lint/tests, but before `/sk:review
|
|
|
21
21
|
Issue: description of the performance issue
|
|
22
22
|
Severity: critical | high | medium | low
|
|
23
23
|
```
|
|
24
|
-
- **
|
|
24
|
+
- **Squash gate commits** — collect all fixes for the pass, then one commit. Do not commit after each individual fix.
|
|
25
25
|
- **Every finding must cite a specific file and line number.**
|
|
26
26
|
- **Every finding must include an estimated impact** (high/medium/low) and a recommendation.
|
|
27
27
|
- **Auto-detect the stack** — only run checks relevant to what's present.
|