claude-code-pilot 3.2.0 → 3.3.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 (93) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +14 -9
  3. package/bin/install.js +113 -15
  4. package/manifest.json +18 -3
  5. package/package.json +3 -2
  6. package/src/agents/django-build-resolver.md +252 -0
  7. package/src/agents/django-reviewer.md +169 -0
  8. package/src/agents/fastapi-reviewer.md +79 -0
  9. package/src/agents/fsharp-reviewer.md +109 -0
  10. package/src/agents/swift-build-resolver.md +170 -0
  11. package/src/agents/swift-reviewer.md +116 -0
  12. package/src/commands/ccp/cost-report.md +107 -0
  13. package/src/commands/ccp/intel.md +3 -3
  14. package/src/commands/ccp/mvp-phase.md +45 -0
  15. package/src/commands/ccp/plan-prd.md +160 -0
  16. package/src/commands/ccp/pr-ecc.md +184 -0
  17. package/src/commands/ccp/security-scan.md +74 -0
  18. package/src/hooks/ccp-bash-hook-dispatcher.js +96 -0
  19. package/src/hooks/ccp-context-monitor.js +23 -0
  20. package/src/hooks/ccp-doc-file-warning.js +93 -0
  21. package/src/hooks/ccp-pre-bash-dispatcher.js +24 -0
  22. package/src/hooks/ccp-write-gateguard.js +868 -0
  23. package/src/lib/project-detect.js +0 -2
  24. package/src/lib/shell-substitution.js +499 -0
  25. package/src/pilot/references/execute-mvp-tdd.md +81 -0
  26. package/src/pilot/references/mvp-concepts.md +49 -0
  27. package/src/pilot/references/planner-graphify-auto-update.md +67 -0
  28. package/src/pilot/references/planner-human-verify-mode.md +57 -0
  29. package/src/pilot/references/planner-mvp-mode.md +53 -0
  30. package/src/pilot/references/skeleton-template.md +48 -0
  31. package/src/pilot/references/spidr-splitting.md +69 -0
  32. package/src/pilot/references/user-story-template.md +58 -0
  33. package/src/pilot/references/verify-mvp-mode.md +85 -0
  34. package/src/pilot/references/worktree-path-safety.md +89 -0
  35. package/src/pilot/workflows/help.md +5 -0
  36. package/src/pilot/workflows/mvp-phase.md +199 -0
  37. package/src/skills/agent-architecture-audit/SKILL.md +256 -0
  38. package/src/skills/agent-harness-design/SKILL.md +73 -0
  39. package/src/skills/angular-developer/SKILL.md +154 -0
  40. package/src/skills/angular-developer/references/angular-animations.md +160 -0
  41. package/src/skills/angular-developer/references/angular-aria.md +410 -0
  42. package/src/skills/angular-developer/references/cli.md +86 -0
  43. package/src/skills/angular-developer/references/component-harnesses.md +59 -0
  44. package/src/skills/angular-developer/references/component-styling.md +91 -0
  45. package/src/skills/angular-developer/references/components.md +117 -0
  46. package/src/skills/angular-developer/references/creating-services.md +97 -0
  47. package/src/skills/angular-developer/references/data-resolvers.md +69 -0
  48. package/src/skills/angular-developer/references/define-routes.md +67 -0
  49. package/src/skills/angular-developer/references/defining-providers.md +72 -0
  50. package/src/skills/angular-developer/references/di-fundamentals.md +120 -0
  51. package/src/skills/angular-developer/references/e2e-testing.md +56 -0
  52. package/src/skills/angular-developer/references/effects.md +83 -0
  53. package/src/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  54. package/src/skills/angular-developer/references/host-elements.md +80 -0
  55. package/src/skills/angular-developer/references/injection-context.md +63 -0
  56. package/src/skills/angular-developer/references/inputs.md +101 -0
  57. package/src/skills/angular-developer/references/linked-signal.md +59 -0
  58. package/src/skills/angular-developer/references/loading-strategies.md +61 -0
  59. package/src/skills/angular-developer/references/mcp.md +108 -0
  60. package/src/skills/angular-developer/references/navigate-to-routes.md +69 -0
  61. package/src/skills/angular-developer/references/outputs.md +86 -0
  62. package/src/skills/angular-developer/references/reactive-forms.md +122 -0
  63. package/src/skills/angular-developer/references/rendering-strategies.md +44 -0
  64. package/src/skills/angular-developer/references/resource.md +77 -0
  65. package/src/skills/angular-developer/references/route-animations.md +56 -0
  66. package/src/skills/angular-developer/references/route-guards.md +52 -0
  67. package/src/skills/angular-developer/references/router-lifecycle.md +45 -0
  68. package/src/skills/angular-developer/references/router-testing.md +87 -0
  69. package/src/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  70. package/src/skills/angular-developer/references/signal-forms.md +795 -0
  71. package/src/skills/angular-developer/references/signals-overview.md +94 -0
  72. package/src/skills/angular-developer/references/tailwind-css.md +69 -0
  73. package/src/skills/angular-developer/references/template-driven-forms.md +114 -0
  74. package/src/skills/angular-developer/references/testing-fundamentals.md +65 -0
  75. package/src/skills/error-handling/SKILL.md +376 -0
  76. package/src/skills/fastapi-patterns/SKILL.md +327 -0
  77. package/src/skills/flox-environments/SKILL.md +496 -0
  78. package/src/skills/fsharp-testing/SKILL.md +280 -0
  79. package/src/skills/ios-icon-gen/SKILL.md +157 -0
  80. package/src/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  81. package/src/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  82. package/src/skills/make-interfaces-feel-better/SKILL.md +151 -0
  83. package/src/skills/mysql-patterns/SKILL.md +412 -0
  84. package/src/skills/plan-orchestrate/SKILL.md +220 -0
  85. package/src/skills/prisma-patterns/SKILL.md +371 -0
  86. package/src/skills/production-audit/SKILL.md +206 -0
  87. package/src/skills/security-scan/references/agentshield-policy-exception/candidate-playbook.md +49 -0
  88. package/src/skills/security-scan/references/agentshield-policy-exception/report.json +35 -0
  89. package/src/skills/security-scan/references/agentshield-policy-exception/scenario.json +62 -0
  90. package/src/skills/security-scan/references/agentshield-policy-exception/trace.json +45 -0
  91. package/src/skills/security-scan/references/agentshield-policy-exception/verifier-result.json +35 -0
  92. package/src/skills/vite-patterns/SKILL.md +449 -0
  93. package/src/skills/windows-desktop-e2e/SKILL.md +887 -0
@@ -0,0 +1,235 @@
1
+ #!/bin/bash
2
+ #
3
+ # Generate iOS icon imagesets from Iconify API (275k+ open source icons)
4
+ # Uses: curl (download SVG) + sips (SVG->PNG conversion, built into macOS)
5
+ #
6
+ # Usage:
7
+ # iconify_gen.sh <icon-id> <asset-name> [options]
8
+ # iconify_gen.sh search <query> [--prefix <collection>] [--limit <n>]
9
+ #
10
+ # Examples:
11
+ # iconify_gen.sh mdi:receipt-text-outline myExpenseIcon
12
+ # iconify_gen.sh search "business card"
13
+ # iconify_gen.sh search receipt --prefix mdi
14
+
15
+ set -euo pipefail
16
+
17
+ API_BASE="https://api.iconify.design"
18
+ readonly CURL_OPTS=(--fail --silent --show-error --connect-timeout 10 --max-time 30)
19
+
20
+ # Defaults
21
+ SIZE=68
22
+ COLOR="8E8E93"
23
+ OUTPUT="/tmp/icons"
24
+ LIMIT=20
25
+
26
+ require_value() {
27
+ local flag="$1"
28
+ local value="${2-}"
29
+ if [[ -z "$value" || "$value" == --* ]]; then
30
+ echo "ERROR: ${flag} requires a value" >&2
31
+ exit 1
32
+ fi
33
+ }
34
+
35
+ usage() {
36
+ cat <<'EOF'
37
+ Usage:
38
+ iconify_gen.sh <icon-id> <asset-name> [options] Generate an icon imageset
39
+ iconify_gen.sh search <query> [options] Search for icons
40
+ iconify_gen.sh preview <icon-id> Download preview SVG
41
+ iconify_gen.sh collections List popular icon collections
42
+
43
+ Generate Options:
44
+ --size <pt> Base size in points (default: 68)
45
+ --color <hex> Color hex without # (default: 8E8E93)
46
+ --output <dir> Output directory (default: /tmp/icons)
47
+
48
+ Search Options:
49
+ --prefix <name> Filter by collection (e.g., mdi, lucide, tabler, ph)
50
+ --limit <n> Max results (default: 20)
51
+
52
+ Icon ID Format: <collection>:<icon-name>
53
+ Examples: mdi:receipt-text-outline, lucide:credit-card, ph:address-book
54
+
55
+ Popular Collections:
56
+ mdi Material Design Icons (7400+ icons)
57
+ lucide Lucide (1700+ icons)
58
+ tabler Tabler Icons (6000+ icons)
59
+ ph Phosphor (9000+ icons)
60
+ ri Remix Icon (2800+ icons)
61
+ carbon Carbon (2100+ icons)
62
+ EOF
63
+ exit 0
64
+ }
65
+
66
+ search_icons() {
67
+ local query="$1"
68
+ shift
69
+ local prefix=""
70
+
71
+ while [[ $# -gt 0 ]]; do
72
+ case "$1" in
73
+ --prefix) require_value --prefix "${2-}"; prefix="$2"; shift 2 ;;
74
+ --limit) require_value --limit "${2-}"; LIMIT="$2"; shift 2 ;;
75
+ *) shift ;;
76
+ esac
77
+ done
78
+
79
+ local encoded_query
80
+ encoded_query="$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$query")"
81
+ local url="${API_BASE}/search?query=${encoded_query}&limit=${LIMIT}"
82
+ if [[ -n "$prefix" ]]; then
83
+ url="${url}&prefix=${prefix}"
84
+ fi
85
+
86
+ local response
87
+ response=$(curl "${CURL_OPTS[@]}" "$url") || { echo "ERROR: Search request failed"; exit 1; }
88
+
89
+ local total
90
+ total=$(echo "$response" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total',0))")
91
+
92
+ echo "Found ${total} icons for '${query}':"
93
+ echo ""
94
+ echo "$response" | python3 -c "
95
+ import sys, json
96
+ data = json.load(sys.stdin)
97
+ for icon in data.get('icons', []):
98
+ print(f' {icon}')
99
+ "
100
+ echo ""
101
+ echo "Generate with: iconify_gen.sh <icon-id> <asset-name>"
102
+ echo "Preview with: iconify_gen.sh preview <icon-id>"
103
+ }
104
+
105
+ list_collections() {
106
+ echo "Popular Iconify collections:"
107
+ echo ""
108
+ local resp
109
+ resp=$(curl "${CURL_OPTS[@]}" "${API_BASE}/collections") || { echo "ERROR: Failed to fetch collections list"; exit 1; }
110
+ echo "$resp" | python3 -c "
111
+ import sys, json
112
+ data = json.load(sys.stdin)
113
+ popular = ['mdi','lucide','tabler','ph','ri','carbon','solar','heroicons','bi','octicon','ion','fe','charm','ci','iconoir','basil','uil','mingcute','flowbite','mynaui']
114
+ for k in popular:
115
+ if k in data:
116
+ v = data[k]
117
+ name = v.get('name','')
118
+ total = v.get('total',0)
119
+ print(f' {k:12s} {name} ({total} icons)')
120
+ "
121
+ echo ""
122
+ echo "Full list: https://icon-sets.iconify.design/"
123
+ }
124
+
125
+ preview_icon() {
126
+ local icon_id="$1"
127
+ local collection="${icon_id%%:*}"
128
+ local name="${icon_id#*:}"
129
+ local url="${API_BASE}/${collection}/${name}.svg?width=136&height=136&color=%23${COLOR}"
130
+ local outfile="/tmp/iconify_preview_${collection}_${name}.svg"
131
+
132
+ curl "${CURL_OPTS[@]}" "$url" -o "$outfile" || { echo "ERROR: Icon '${icon_id}' not found"; exit 1; }
133
+ echo "Preview SVG: ${outfile}"
134
+ echo "URL: ${url}"
135
+
136
+ # Also convert to PNG for visual check
137
+ local pngfile="/tmp/iconify_preview_${collection}_${name}.png"
138
+ sips -s format png "$outfile" --out "$pngfile" >/dev/null 2>&1 || echo "WARNING: sips conversion failed; PNG may be incorrect"
139
+ echo "Preview PNG: ${pngfile}"
140
+ }
141
+
142
+ generate_icon() {
143
+ local icon_id="$1"
144
+ local asset_name="$2"
145
+ shift 2
146
+
147
+ while [[ $# -gt 0 ]]; do
148
+ case "$1" in
149
+ --size) require_value --size "${2-}"; SIZE="$2"; shift 2 ;;
150
+ --color) require_value --color "${2-}"; COLOR="$2"; shift 2 ;;
151
+ --output) require_value --output "${2-}"; OUTPUT="$2"; shift 2 ;;
152
+ *) shift ;;
153
+ esac
154
+ done
155
+
156
+ local collection="${icon_id%%:*}"
157
+ local name="${icon_id#*:}"
158
+ local imageset_dir="${OUTPUT}/${asset_name}.imageset"
159
+
160
+ mkdir -p "$imageset_dir"
161
+
162
+ echo "Generating ${asset_name} from Iconify '${icon_id}':"
163
+
164
+ local scales=("1:${SIZE}" "2:$((SIZE * 2))" "3:$((SIZE * 3))")
165
+
166
+ for scale_info in "${scales[@]}"; do
167
+ local scale="${scale_info%%:*}"
168
+ local px="${scale_info#*:}"
169
+ local suffix=""
170
+ [[ "$scale" != "1" ]] && suffix="@${scale}x"
171
+
172
+ local svg_url="${API_BASE}/${collection}/${name}.svg?width=${px}&height=${px}&color=%23${COLOR}"
173
+ local svg_file="${imageset_dir}/${asset_name}${suffix}.svg"
174
+ local png_file="${imageset_dir}/${asset_name}${suffix}.png"
175
+
176
+ curl "${CURL_OPTS[@]}" "$svg_url" -o "$svg_file" || { echo "ERROR: Failed to download icon '${icon_id}'"; exit 1; }
177
+ sips -s format png "$svg_file" --out "$png_file" >/dev/null 2>&1 || echo "WARNING: sips conversion may have failed for ${svg_file}"
178
+ rm "$svg_file"
179
+
180
+ echo " ${asset_name}${suffix}.png (${px}x${px})"
181
+ done
182
+
183
+ # Write Contents.json
184
+ cat > "${imageset_dir}/Contents.json" <<JSONEOF
185
+ {
186
+ "images" : [
187
+ {
188
+ "filename" : "${asset_name}.png",
189
+ "idiom" : "universal",
190
+ "scale" : "1x"
191
+ },
192
+ {
193
+ "filename" : "${asset_name}@2x.png",
194
+ "idiom" : "universal",
195
+ "scale" : "2x"
196
+ },
197
+ {
198
+ "filename" : "${asset_name}@3x.png",
199
+ "idiom" : "universal",
200
+ "scale" : "3x"
201
+ }
202
+ ],
203
+ "info" : {
204
+ "author" : "xcode",
205
+ "version" : 1
206
+ }
207
+ }
208
+ JSONEOF
209
+
210
+ echo "Output: ${imageset_dir}/"
211
+ }
212
+
213
+ # Main
214
+ [[ $# -eq 0 ]] && usage
215
+ [[ "$1" == "--help" || "$1" == "-h" ]] && usage
216
+
217
+ case "$1" in
218
+ search)
219
+ shift
220
+ [[ $# -eq 0 ]] && { echo "Usage: iconify_gen.sh search <query>"; exit 1; }
221
+ search_icons "$@"
222
+ ;;
223
+ preview)
224
+ shift
225
+ [[ $# -eq 0 ]] && { echo "Usage: iconify_gen.sh preview <icon-id>"; exit 1; }
226
+ preview_icon "$1"
227
+ ;;
228
+ collections)
229
+ list_collections
230
+ ;;
231
+ *)
232
+ [[ $# -lt 2 ]] && { echo "Usage: iconify_gen.sh <icon-id> <asset-name> [options]"; exit 1; }
233
+ generate_icon "$@"
234
+ ;;
235
+ esac
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: make-interfaces-feel-better
3
+ description: Apply concrete design-engineering details that make interfaces feel polished. Use when reviewing or improving UI spacing, typography, borders, shadows, motion, hit areas, icons, text wrapping, and interaction states.
4
+ origin: community
5
+ ---
6
+
7
+ # Make Interfaces Feel Better
8
+
9
+ Use this skill for the small design-engineering details that compound into a
10
+ more polished interface.
11
+
12
+ Source: salvaged from stale community PR #1659 by `linus707`.
13
+
14
+ ## When to Use
15
+
16
+ - The user says the UI feels off, flat, generic, cramped, jumpy, or unfinished.
17
+ - You are building controls, cards, lists, dashboards, navigation, forms, or
18
+ toolbars.
19
+ - A component needs hover, active, focus, enter, exit, loading, or empty states.
20
+ - A frontend review needs specific before/after recommendations.
21
+
22
+ ## Core Principles
23
+
24
+ ### Concentric Radius
25
+
26
+ For nearby nested rounded surfaces:
27
+
28
+ ```text
29
+ outer radius = inner radius + padding
30
+ ```
31
+
32
+ If padding is large, treat layers as separate surfaces instead of forcing the
33
+ math. The point is optical coherence, not formula worship.
34
+
35
+ ### Optical Alignment
36
+
37
+ Geometric centering is not always visual centering. Icon buttons, play
38
+ triangles, arrows, stars, and asymmetric icons often need a small offset. Fix the
39
+ SVG when possible; otherwise adjust with a pixel-level margin or padding change.
40
+
41
+ ### Shadows And Borders
42
+
43
+ Use borders for separation and focus rings. Use layered shadows when a card,
44
+ button, dropdown, or popover needs depth. Shadows should be transparent and
45
+ subtle enough to work across backgrounds.
46
+
47
+ ### Text Wrapping
48
+
49
+ - Use `text-wrap: balance` on headings and short titles.
50
+ - Use `text-wrap: pretty` on short-to-medium body text, captions, descriptions,
51
+ and list items.
52
+ - Avoid both on long prose, code, and preformatted content.
53
+ - Use `font-variant-numeric: tabular-nums` for counters, timers, prices, tables,
54
+ and other updating numbers.
55
+
56
+ ### Font Smoothing
57
+
58
+ On macOS, apply antialiased font smoothing at the root layout when the project
59
+ does not already do so:
60
+
61
+ ```css
62
+ html {
63
+ -webkit-font-smoothing: antialiased;
64
+ -moz-osx-font-smoothing: grayscale;
65
+ }
66
+ ```
67
+
68
+ ### Image Outlines
69
+
70
+ Images often need a subtle inset outline so their edges do not blur into the
71
+ surface.
72
+
73
+ ```css
74
+ img {
75
+ outline: 1px solid rgba(0, 0, 0, 0.1);
76
+ outline-offset: -1px;
77
+ }
78
+
79
+ @media (prefers-color-scheme: dark) {
80
+ img {
81
+ outline-color: rgba(255, 255, 255, 0.1);
82
+ }
83
+ }
84
+ ```
85
+
86
+ Use neutral black or white alpha outlines. Do not tint image outlines with the
87
+ brand palette.
88
+
89
+ ### Motion
90
+
91
+ Use CSS transitions for interactive state changes because they can retarget
92
+ when the user changes intent mid-motion. Reserve keyframes for staged
93
+ one-shot entrances or loading sequences.
94
+
95
+ Good motion defaults:
96
+
97
+ - Enter: combine opacity, small `translateY`, and optionally blur.
98
+ - Exit: shorter and quieter than enter, usually 150ms.
99
+ - Press: `scale(0.96)` for tactile buttons, with a way to disable it when the
100
+ movement distracts.
101
+ - Icon swaps: cross-fade with opacity, scale, and blur instead of instant
102
+ visibility toggles.
103
+
104
+ ### Transition Scope
105
+
106
+ Never use `transition: all`. Specify the changed properties:
107
+
108
+ ```css
109
+ .button {
110
+ transition-property: transform, background-color, box-shadow;
111
+ transition-duration: 150ms;
112
+ transition-timing-function: ease-out;
113
+ }
114
+ ```
115
+
116
+ Use `will-change` only for first-frame stutter on compositor-friendly
117
+ properties such as `transform`, `opacity`, and `filter`. Never use
118
+ `will-change: all`.
119
+
120
+ ### Hit Areas
121
+
122
+ Interactive controls should have at least a 40x40px hit area, ideally 44x44px
123
+ where the layout allows it. Expand with a pseudo-element when the visible icon
124
+ is smaller, but do not let expanded hit areas overlap.
125
+
126
+ ## Review Output
127
+
128
+ When reviewing a UI polish pass, report concrete changes in before/after rows:
129
+
130
+ | Principle | Before | After |
131
+ | --- | --- | --- |
132
+ | Concentric radius | Same radius on parent and child | Parent radius accounts for padding |
133
+ | Tabular numbers | Counter shifts as digits change | Counter uses `tabular-nums` |
134
+ | Transition scope | `transition: all` | Explicit transition properties |
135
+
136
+ Include file paths and properties when they are not obvious from the snippets.
137
+ Omit principles that you checked but did not change.
138
+
139
+ ## Checklist
140
+
141
+ - Nested rounded elements are optically coherent.
142
+ - Icons are visually centered.
143
+ - Buttons, cards, and popovers use borders or shadows for the right reason.
144
+ - Headings and short text avoid awkward wrapping.
145
+ - Dynamic numbers use tabular numerals.
146
+ - Images have neutral outlines where needed.
147
+ - Enter and exit animations are split, subtle, and interruptible where
148
+ appropriate.
149
+ - Buttons have tactile active states without exaggerated motion.
150
+ - `transition: all` and `will-change: all` are absent.
151
+ - Small controls still have usable hit areas.