cue-ai 0.9.2 → 0.9.4

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 (278) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +154 -394
  3. package/bin/cue-learnings +30 -4
  4. package/bin/cue-review-progress +0 -0
  5. package/bin/cue-review-watch +0 -0
  6. package/dist/cue.js +4328 -3108
  7. package/package.json +1 -1
  8. package/plugins/cue/commands/cue-switch.md +1 -1
  9. package/plugins/cue/commands/cue.md +1 -1
  10. package/profiles/backend/profile.yaml +4 -0
  11. package/profiles/browser/profile.yaml +4 -0
  12. package/profiles/career/profile.yaml +2 -13
  13. package/profiles/commerce/profile.yaml +0 -2
  14. package/profiles/coolify/profile.yaml +0 -1
  15. package/profiles/core/profile.yaml +78 -11
  16. package/profiles/dash-merge-test/profile.yaml +6 -1
  17. package/profiles/designer/profile.yaml +9 -1
  18. package/profiles/dropshipping/profile.yaml +69 -0
  19. package/profiles/frontend/profile.yaml +4 -0
  20. package/profiles/google-ads/profile.yaml +34 -0
  21. package/profiles/google-analytics/profile.yaml +34 -0
  22. package/profiles/google-drive/profile.yaml +34 -0
  23. package/profiles/gstack/profile.yaml +117 -29
  24. package/profiles/marketing/profile.yaml +0 -1
  25. package/profiles/media/README.md +70 -0
  26. package/profiles/media/profile.yaml +104 -0
  27. package/profiles/nano-banana/profile.yaml +52 -0
  28. package/profiles/ops/profile.yaml +1 -2
  29. package/profiles/secops/profile.yaml +3 -0
  30. package/profiles/skill-writer/profile.yaml +15 -0
  31. package/profiles/video/profile.yaml +3 -0
  32. package/profiles/web-frontend-base/profile.yaml +6 -0
  33. package/profiles/webshop/profile.yaml +0 -1
  34. package/profiles/webshop-google/profile.yaml +1 -0
  35. package/profiles/x-growth-bot/profile.yaml +2 -0
  36. package/resources/icons/generate-icons.py +2 -128
  37. package/resources/mcps/configs/claude.sanitized.json +88 -20
  38. package/resources/mcps/configs/claude_runtime.sanitized.json +40 -1
  39. package/resources/mcps/configs/codex.sanitized.json +29 -0
  40. package/resources/skills/skills/career/job-hunter/LICENSE +21 -0
  41. package/resources/skills/skills/career/job-hunter/README.md +323 -0
  42. package/resources/skills/skills/career/job-hunter/SKILL.md +91 -0
  43. package/resources/skills/skills/career/job-hunter/agents/README.md +96 -0
  44. package/resources/skills/skills/career/job-hunter/agents/apply-assessment-prep.md +195 -0
  45. package/resources/skills/skills/career/job-hunter/agents/apply-ats-scan.md +155 -0
  46. package/resources/skills/skills/career/job-hunter/agents/apply-bias-audit.md +224 -0
  47. package/resources/skills/skills/career/job-hunter/agents/apply-cover-letter.md +69 -0
  48. package/resources/skills/skills/career/job-hunter/agents/apply-decode-jd.md +117 -0
  49. package/resources/skills/skills/career/job-hunter/agents/apply-fit-score.md +183 -0
  50. package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-audit.md +74 -0
  51. package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-scrape.md +255 -0
  52. package/resources/skills/skills/career/job-hunter/agents/apply-portfolio-brief.md +123 -0
  53. package/resources/skills/skills/career/job-hunter/agents/apply-reality-check.md +164 -0
  54. package/resources/skills/skills/career/job-hunter/agents/apply-reference-prep.md +150 -0
  55. package/resources/skills/skills/career/job-hunter/agents/apply-rejection-analysis.md +172 -0
  56. package/resources/skills/skills/career/job-hunter/agents/apply-resume.md +70 -0
  57. package/resources/skills/skills/career/job-hunter/agents/apply-skills-gap-filler.md +109 -0
  58. package/resources/skills/skills/career/job-hunter/agents/career-internal.md +94 -0
  59. package/resources/skills/skills/career/job-hunter/agents/career-linkedin-content.md +173 -0
  60. package/resources/skills/skills/career/job-hunter/agents/career-linkedin-scanner.md +262 -0
  61. package/resources/skills/skills/career/job-hunter/agents/career-network-message.md +108 -0
  62. package/resources/skills/skills/career/job-hunter/agents/career-promote.md +102 -0
  63. package/resources/skills/skills/career/job-hunter/agents/career-review.md +71 -0
  64. package/resources/skills/skills/career/job-hunter/agents/interview-debrief.md +117 -0
  65. package/resources/skills/skills/career/job-hunter/agents/interview-mock.md +171 -0
  66. package/resources/skills/skills/career/job-hunter/agents/interview-panel-decoder.md +152 -0
  67. package/resources/skills/skills/career/job-hunter/agents/interview-prep.md +184 -0
  68. package/resources/skills/skills/career/job-hunter/agents/interview-question-bank.md +133 -0
  69. package/resources/skills/skills/career/job-hunter/agents/interview-research.md +148 -0
  70. package/resources/skills/skills/career/job-hunter/agents/offer-compare.md +117 -0
  71. package/resources/skills/skills/career/job-hunter/agents/offer-counteroffer.md +144 -0
  72. package/resources/skills/skills/career/job-hunter/agents/offer-deadline-manager.md +148 -0
  73. package/resources/skills/skills/career/job-hunter/agents/offer-negotiate.md +126 -0
  74. package/resources/skills/skills/career/job-hunter/agents/offer-schedule.md +99 -0
  75. package/resources/skills/skills/career/job-hunter/agents/offer-thankyou.md +80 -0
  76. package/resources/skills/skills/career/job-hunter/agents/search-company-research.md +146 -0
  77. package/resources/skills/skills/career/job-hunter/agents/search-follow-up.md +129 -0
  78. package/resources/skills/skills/career/job-hunter/agents/search-ghost-job-detector.md +152 -0
  79. package/resources/skills/skills/career/job-hunter/agents/search-inbox-scan.md +193 -0
  80. package/resources/skills/skills/career/job-hunter/agents/search-interview-scorecard.md +164 -0
  81. package/resources/skills/skills/career/job-hunter/agents/search-jobs.md +149 -0
  82. package/resources/skills/skills/career/job-hunter/agents/search-momentum-check.md +194 -0
  83. package/resources/skills/skills/career/job-hunter/agents/search-outreach.md +85 -0
  84. package/resources/skills/skills/career/job-hunter/agents/search-referral-finder.md +124 -0
  85. package/resources/skills/skills/career/job-hunter/agents/search-salary.md +96 -0
  86. package/resources/skills/skills/career/job-hunter/agents/search-send-email.md +109 -0
  87. package/resources/skills/skills/career/job-hunter/agents/search-tracker-update.md +127 -0
  88. package/resources/skills/skills/career/job-hunter/inputs/README.md +26 -0
  89. package/resources/skills/skills/career/job-hunter/inputs/apply-linkedin-url.txt +8 -0
  90. package/resources/skills/skills/career/job-hunter/inputs/interview-context.md +24 -0
  91. package/resources/skills/skills/career/job-hunter/inputs/job-description.md +20 -0
  92. package/resources/skills/skills/career/job-hunter/inputs/job-search-criteria.md +36 -0
  93. package/resources/skills/skills/career/job-hunter/inputs/my-linkedin.md +24 -0
  94. package/resources/skills/skills/career/job-hunter/inputs/my-resume.md +28 -0
  95. package/resources/skills/skills/career/job-hunter/inputs/search-outreach-target.md +24 -0
  96. package/resources/skills/skills/career/job-hunter/rules/README.md +37 -0
  97. package/resources/skills/skills/career/job-hunter/rules/writing-rules.md +81 -0
  98. package/resources/skills/skills/design/banana/SKILL.md +375 -0
  99. package/resources/skills/skills/design/banana/references/cost-tracking.md +47 -0
  100. package/resources/skills/skills/design/banana/references/gemini-models.md +236 -0
  101. package/resources/skills/skills/design/banana/references/mcp-tools.md +145 -0
  102. package/resources/skills/skills/design/banana/references/post-processing.md +192 -0
  103. package/resources/skills/skills/design/banana/references/presets.md +69 -0
  104. package/resources/skills/skills/design/banana/references/prompt-engineering.md +481 -0
  105. package/resources/skills/skills/design/banana/scripts/batch.py +97 -0
  106. package/resources/skills/skills/design/banana/scripts/cost_tracker.py +191 -0
  107. package/resources/skills/skills/design/banana/scripts/edit.py +159 -0
  108. package/resources/skills/skills/design/banana/scripts/generate.py +168 -0
  109. package/resources/skills/skills/design/banana/scripts/presets.py +154 -0
  110. package/resources/skills/skills/design/banana/scripts/setup_mcp.py +151 -0
  111. package/resources/skills/skills/design/banana/scripts/validate_setup.py +133 -0
  112. package/resources/skills/skills/gstack/ship/SKILL.md +13 -0
  113. package/resources/skills/skills/media/3d-logo-animation/SKILL.md +59 -0
  114. package/resources/skills/skills/media/action-figure-generator/SKILL.md +48 -0
  115. package/resources/skills/skills/media/ad-creative/SKILL.md +79 -0
  116. package/resources/skills/skills/media/ai-clipping/SKILL.md +194 -0
  117. package/resources/skills/skills/media/ai-clipping/scripts/run-ai-clipping.sh +200 -0
  118. package/resources/skills/skills/media/ai-fight-scene/SKILL.md +132 -0
  119. package/resources/skills/skills/media/amazon-product-listing/SKILL.md +68 -0
  120. package/resources/skills/skills/media/animal-video-generator/SKILL.md +59 -0
  121. package/resources/skills/skills/media/award-ceremony-video/SKILL.md +87 -0
  122. package/resources/skills/skills/media/blog-header/SKILL.md +61 -0
  123. package/resources/skills/skills/media/brand-kit/SKILL.md +72 -0
  124. package/resources/skills/skills/media/brochures/SKILL.md +65 -0
  125. package/resources/skills/skills/media/cartoon-dance-animation/SKILL.md +62 -0
  126. package/resources/skills/skills/media/character-story-video/SKILL.md +84 -0
  127. package/resources/skills/skills/media/chibi-collage-effect/SKILL.md +63 -0
  128. package/resources/skills/skills/media/cinema-director/SKILL.md +93 -0
  129. package/resources/skills/skills/media/cinema-director/scripts/generate-film.sh +78 -0
  130. package/resources/skills/skills/media/color-analysis-board/SKILL.md +71 -0
  131. package/resources/skills/skills/media/core-edit/SKILL.md +48 -0
  132. package/resources/skills/skills/media/core-edit/edit-image.sh +54 -0
  133. package/resources/skills/skills/media/core-edit/enhance-image.sh +191 -0
  134. package/resources/skills/skills/media/core-edit/lipsync.sh +144 -0
  135. package/resources/skills/skills/media/core-edit/video-effects.sh +193 -0
  136. package/resources/skills/skills/media/core-media/SKILL.md +49 -0
  137. package/resources/skills/skills/media/core-media/create-music.sh +169 -0
  138. package/resources/skills/skills/media/core-media/generate-image.sh +161 -0
  139. package/resources/skills/skills/media/core-media/generate-video.sh +137 -0
  140. package/resources/skills/skills/media/core-media/image-to-video.sh +228 -0
  141. package/resources/skills/skills/media/core-media/schema_data.json +18708 -0
  142. package/resources/skills/skills/media/core-media/upload.sh +41 -0
  143. package/resources/skills/skills/media/core-platform/SKILL.md +41 -0
  144. package/resources/skills/skills/media/core-platform/check-result.sh +37 -0
  145. package/resources/skills/skills/media/core-platform/setup.sh +31 -0
  146. package/resources/skills/skills/media/couple-grid-creator/SKILL.md +47 -0
  147. package/resources/skills/skills/media/design-guide/SKILL.md +73 -0
  148. package/resources/skills/skills/media/drone-style-video/SKILL.md +61 -0
  149. package/resources/skills/skills/media/fashion-try-on/SKILL.md +61 -0
  150. package/resources/skills/skills/media/floor-plan-rendering/SKILL.md +56 -0
  151. package/resources/skills/skills/media/freeze-effect-video/SKILL.md +100 -0
  152. package/resources/skills/skills/media/giant-product-showcase/SKILL.md +61 -0
  153. package/resources/skills/skills/media/instagram-post/SKILL.md +58 -0
  154. package/resources/skills/skills/media/interior-design/SKILL.md +61 -0
  155. package/resources/skills/skills/media/interior-design-visualizer/SKILL.md +57 -0
  156. package/resources/skills/skills/media/jewelry-product-video/SKILL.md +61 -0
  157. package/resources/skills/skills/media/kdenlive/SKILL.md +106 -0
  158. package/resources/skills/skills/media/kdenlive/scripts/assemble.sh +57 -0
  159. package/resources/skills/skills/media/kdenlive/scripts/common.sh +30 -0
  160. package/resources/skills/skills/media/kdenlive/scripts/inspect.sh +19 -0
  161. package/resources/skills/skills/media/kdenlive/scripts/reframe.sh +22 -0
  162. package/resources/skills/skills/media/kdenlive/scripts/render.sh +16 -0
  163. package/resources/skills/skills/media/kdenlive/scripts/title-card.sh +25 -0
  164. package/resources/skills/skills/media/keyboard-art-maker/SKILL.md +44 -0
  165. package/resources/skills/skills/media/logo-branding/SKILL.md +70 -0
  166. package/resources/skills/skills/media/logo-creator/SKILL.md +80 -0
  167. package/resources/skills/skills/media/logo-creator/scripts/create-logo.sh +38 -0
  168. package/resources/skills/skills/media/logo-generator/SKILL.md +56 -0
  169. package/resources/skills/skills/media/multi-angle-reshoot/SKILL.md +70 -0
  170. package/resources/skills/skills/media/multi-angle-shots/SKILL.md +73 -0
  171. package/resources/skills/skills/media/music-video/SKILL.md +61 -0
  172. package/resources/skills/skills/media/nano-banana/SKILL.md +80 -0
  173. package/resources/skills/skills/media/nano-banana/scripts/generate-nano-art.sh +54 -0
  174. package/resources/skills/skills/media/one-shot-video/SKILL.md +56 -0
  175. package/resources/skills/skills/media/photo-pack-generator/SKILL.md +205 -0
  176. package/resources/skills/skills/media/photo-pack-generator/scripts/generate-pack.sh +241 -0
  177. package/resources/skills/skills/media/product-ad-cinematic/SKILL.md +78 -0
  178. package/resources/skills/skills/media/product-campaign/SKILL.md +76 -0
  179. package/resources/skills/skills/media/product-showcase-video/SKILL.md +60 -0
  180. package/resources/skills/skills/media/product-video-ad-maker/SKILL.md +59 -0
  181. package/resources/skills/skills/media/rednote-cover/SKILL.md +57 -0
  182. package/resources/skills/skills/media/seedance-2/SKILL.md +632 -0
  183. package/resources/skills/skills/media/seedance-2/scripts/generate-seedance.sh +701 -0
  184. package/resources/skills/skills/media/selfie-with-celebrities/SKILL.md +64 -0
  185. package/resources/skills/skills/media/social-media-video/SKILL.md +277 -0
  186. package/resources/skills/skills/media/social-media-video/scripts/run-social-video.sh +316 -0
  187. package/resources/skills/skills/media/social-pack/SKILL.md +58 -0
  188. package/resources/skills/skills/media/storyboard/SKILL.md +57 -0
  189. package/resources/skills/skills/media/storyboard-to-cooking-video/SKILL.md +143 -0
  190. package/resources/skills/skills/media/talking-baby-video/SKILL.md +57 -0
  191. package/resources/skills/skills/media/ugc-ads-workflow/SKILL.md +70 -0
  192. package/resources/skills/skills/media/ugc-lifestyle-try-on/SKILL.md +65 -0
  193. package/resources/skills/skills/media/ugc-video-factory/SKILL.md +134 -0
  194. package/resources/skills/skills/media/ui-design/SKILL.md +81 -0
  195. package/resources/skills/skills/media/ui-design/scripts/generate-mockup.sh +49 -0
  196. package/resources/skills/skills/media/url-to-design/SKILL.md +61 -0
  197. package/resources/skills/skills/media/workflow/SKILL.md +197 -0
  198. package/resources/skills/skills/media/workflow/scripts/discover-workflow.sh +18 -0
  199. package/resources/skills/skills/media/workflow/scripts/generate-workflow.sh +33 -0
  200. package/resources/skills/skills/media/workflow/scripts/interactive-run.sh +16 -0
  201. package/resources/skills/skills/media/workflow/scripts/list-workflows.sh +20 -0
  202. package/resources/skills/skills/media/workflow/scripts/run-workflow.sh +34 -0
  203. package/resources/skills/skills/media/youtube-shorts/SKILL.md +173 -0
  204. package/resources/skills/skills/media/youtube-shorts/scripts/run-youtube-shorts.sh +141 -0
  205. package/resources/skills/skills/media/youtube-thumbnail/SKILL.md +66 -0
  206. package/resources/skills/skills/meta/cue-developer/references/architecture.md +2 -2
  207. package/resources/skills/skills/meta/cue-usage/SKILL.md +1 -1
  208. package/resources/skills/skills/meta/profile-fit-monitor/SKILL.md +2 -2
  209. package/resources/skills/skills/meta/profile-optimizer/SKILL.md +1 -1
  210. package/resources/skills/skills/meta/profile-suggest/SKILL.md +7 -7
  211. package/resources/skills/skills/meta/profile-summon/SKILL.md +159 -0
  212. package/resources/skills/skills/meta/profile-summon/evals/evals.json +53 -0
  213. package/resources/skills/skills/meta/save-profile/SKILL.md +1 -1
  214. package/resources/skills/skills/meta/skill-reviewer/SKILL.md +3 -0
  215. package/resources/skills/skills/meta/skill-reviewer/references/tdd-for-skills.md +55 -0
  216. package/resources/skills/skills/research/find-skills/SKILL.md +1 -1
  217. package/resources/skills/skills/review/code-review-deep/SKILL.md +20 -0
  218. package/resources/skills/skills/security/trivy-scan/SKILL.md +139 -0
  219. package/resources/skills/skills/security/trivy-scan/scripts/ensure-trivy.sh +21 -0
  220. package/resources/skills/skills/tools/ccusage/SKILL.md +142 -0
  221. package/src/commands/_index.ts +8 -0
  222. package/src/commands/ai.ts +2 -2
  223. package/src/commands/auto-detect.test.ts +74 -0
  224. package/src/commands/auto-detect.ts +9 -7
  225. package/src/commands/cli.test.ts +20 -4
  226. package/src/commands/cli.ts +36 -20
  227. package/src/commands/create-profile.ts +2 -2
  228. package/src/commands/debug.ts +2 -2
  229. package/src/commands/discover.ts +14 -4
  230. package/src/commands/export-docker.ts +1 -1
  231. package/src/commands/features-batch1.test.ts +1 -1
  232. package/src/commands/gates.ts +1 -1
  233. package/src/commands/import-profile.ts +1 -1
  234. package/src/commands/init.ts +15 -11
  235. package/src/commands/install.test.ts +192 -0
  236. package/src/commands/install.ts +610 -0
  237. package/src/commands/launch-handoff.e2e.test.ts +33 -1
  238. package/src/commands/launch.e2e.test.ts +15 -10
  239. package/src/commands/launch.ts +73 -116
  240. package/src/commands/materialize.ts +2 -2
  241. package/src/commands/prune.ts +1 -1
  242. package/src/commands/security-audit.ts +1 -1
  243. package/src/commands/shell.ts +7 -7
  244. package/src/commands/skill-report.ts +1 -1
  245. package/src/commands/skills.ts +3 -3
  246. package/src/commands/snapshot.ts +2 -2
  247. package/src/commands/summon.test.ts +116 -0
  248. package/src/commands/summon.ts +338 -0
  249. package/src/commands/trigger-gaps.ts +1 -1
  250. package/src/commands/use.ts +47 -3
  251. package/src/commands/watch-live.ts +5 -5
  252. package/src/commands/watch.ts +8 -8
  253. package/src/index.ts +2 -0
  254. package/src/lib/active-sessions.test.ts +3 -3
  255. package/src/lib/active-sessions.ts +4 -4
  256. package/src/lib/auto-detect.test.ts +172 -8
  257. package/src/lib/auto-detect.ts +191 -136
  258. package/src/lib/codex-persona-parity.test.ts +58 -0
  259. package/src/lib/companion-detect.test.ts +43 -1
  260. package/src/lib/companion-detect.ts +35 -0
  261. package/src/lib/credentials-sync.test.ts +121 -1
  262. package/src/lib/credentials-sync.ts +95 -1
  263. package/src/lib/cwd-resolver.test.ts +8 -8
  264. package/src/lib/cwd-resolver.ts +2 -2
  265. package/src/lib/dashboard-merge.test.ts +9 -4
  266. package/src/lib/dashboard-server.ts +1 -1
  267. package/src/lib/picker.test.ts +1 -1
  268. package/src/lib/picker.ts +5 -5
  269. package/src/lib/profile-merge.test.ts +8 -0
  270. package/src/lib/profile-names.test.ts +3 -3
  271. package/src/lib/runtime-install.ts +166 -0
  272. package/src/lib/runtime-materializer.test.ts +137 -0
  273. package/src/lib/runtime-materializer.ts +105 -2
  274. package/src/lib/skill-router.test.ts +38 -0
  275. package/src/lib/skill-router.ts +65 -4
  276. package/profiles/eu-tender-research/README.md +0 -48
  277. package/profiles/eu-tender-research/logo.png +0 -0
  278. package/profiles/eu-tender-research/profile.yaml +0 -108
@@ -0,0 +1,141 @@
1
+ #!/bin/bash
2
+ # YouTube Shorts Generator — Platform-aware preset over the AI Clipping primitive.
3
+ #
4
+ # Picks platform-specific defaults (aspect ratio + clip count) for short-form
5
+ # social and delegates to muapi.ai's /ai-clipping endpoint, which handles
6
+ # transcription, highlight ranking, dedupe, and face-tracked auto-crop server-side.
7
+ #
8
+ # Usage:
9
+ # bash run-youtube-shorts.sh --source "<URL>" [options]
10
+ #
11
+ # Requires: bash 3.2+, jq, muapi-cli
12
+
13
+ set -euo pipefail
14
+
15
+ # ============================================================
16
+ # Locate skills root
17
+ # ============================================================
18
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ SKILLS_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
20
+ AI_CLIPPING_SCRIPT="$SKILLS_ROOT/ai-clipping/scripts/run-ai-clipping.sh"
21
+
22
+ if [ -f "$SKILLS_ROOT/.env" ]; then
23
+ set +u; source "$SKILLS_ROOT/.env" 2>/dev/null || true; set -u
24
+ fi
25
+
26
+ # ============================================================
27
+ # Defaults
28
+ # ============================================================
29
+ SOURCE=""
30
+ PLATFORM="shorts"
31
+ NUM_CLIPS=""
32
+ ASPECT_RATIO=""
33
+ OUTPUT_JSON=""
34
+ VIEW=false
35
+ ASYNC=false
36
+ POLL_INTERVAL="${MUAPI_POLL_INTERVAL:-5}"
37
+ POLL_TIMEOUT="${MUAPI_POLL_TIMEOUT:-1800}"
38
+
39
+ # ============================================================
40
+ # Argument parsing
41
+ # ============================================================
42
+ while [[ $# -gt 0 ]]; do
43
+ case $1 in
44
+ --source|-s) SOURCE="$2"; shift 2 ;;
45
+ --platform|-p) PLATFORM="$2"; shift 2 ;;
46
+ --num-clips|-n) NUM_CLIPS="$2"; shift 2 ;;
47
+ --aspect-ratio|-a) ASPECT_RATIO="$2"; shift 2 ;;
48
+ --output-json|-o) OUTPUT_JSON="$2"; shift 2 ;;
49
+ --view) VIEW=true; shift ;;
50
+ --async) ASYNC=true; shift ;;
51
+ --poll-interval) POLL_INTERVAL="$2"; shift 2 ;;
52
+ --poll-timeout) POLL_TIMEOUT="$2"; shift 2 ;;
53
+ --help|-h)
54
+ cat <<'HELP'
55
+ YouTube Shorts Generator — platform-aware preset over AI Clipping
56
+ Usage: bash run-youtube-shorts.sh --source "<URL>" [options]
57
+
58
+ REQUIRED
59
+ --source, -s URL YouTube URL, hosted mp4 URL, or local file path
60
+
61
+ PLATFORM PRESETS (sets ratio + clip-count defaults)
62
+ --platform shorts 9:16, 3 clips (YouTube Shorts — default)
63
+ --platform tiktok 9:16, 5 clips (TikTok)
64
+ --platform reels 9:16, 3 clips (Instagram Reels)
65
+ --platform feed 1:1, 3 clips (Instagram Feed)
66
+
67
+ OVERRIDES
68
+ --num-clips, -n N Override clip count
69
+ --aspect-ratio, -a RATIO Override ratio: 9:16 | 1:1 | 4:5
70
+
71
+ OUTPUT
72
+ --output-json, -o PATH Dump full result here (use "-" for stdout)
73
+ --view Download clips and open in system viewer (macOS)
74
+ --async Return request_id immediately without polling
75
+
76
+ POLLING
77
+ --poll-interval SEC Seconds between job-status polls (default: 5)
78
+ --poll-timeout SEC Give up after this long (default: 1800)
79
+
80
+ EXAMPLES
81
+ # Defaults — three 9:16 YouTube Shorts
82
+ bash run-youtube-shorts.sh --source "https://youtube.com/watch?v=VIDEO_ID"
83
+
84
+ # TikTok — 5 clips, view in player
85
+ bash run-youtube-shorts.sh -s "<URL>" -p tiktok --view
86
+
87
+ # Instagram Feed — square clips
88
+ bash run-youtube-shorts.sh -s "<URL>" -p feed -n 3
89
+ HELP
90
+ exit 0
91
+ ;;
92
+ *) echo "Unknown flag: $1" >&2; exit 2 ;;
93
+ esac
94
+ done
95
+
96
+ # ============================================================
97
+ # Validation
98
+ # ============================================================
99
+ if [[ -z "$SOURCE" ]]; then
100
+ echo "ERROR: --source is required" >&2
101
+ exit 2
102
+ fi
103
+ if [[ ! -f "$AI_CLIPPING_SCRIPT" ]]; then
104
+ echo "ERROR: ai-clipping primitive not found at $AI_CLIPPING_SCRIPT" >&2
105
+ exit 3
106
+ fi
107
+
108
+ # ============================================================
109
+ # Platform preset → defaults
110
+ # ============================================================
111
+ case "$PLATFORM" in
112
+ shorts) PLATFORM_RATIO="9:16"; PLATFORM_NUM=3 ;;
113
+ tiktok) PLATFORM_RATIO="9:16"; PLATFORM_NUM=5 ;;
114
+ reels) PLATFORM_RATIO="9:16"; PLATFORM_NUM=3 ;;
115
+ feed) PLATFORM_RATIO="1:1"; PLATFORM_NUM=3 ;;
116
+ *)
117
+ echo "ERROR: --platform must be one of: shorts, tiktok, reels, feed (got: $PLATFORM)" >&2
118
+ exit 2
119
+ ;;
120
+ esac
121
+
122
+ [[ -z "$ASPECT_RATIO" ]] && ASPECT_RATIO="$PLATFORM_RATIO"
123
+ [[ -z "$NUM_CLIPS" ]] && NUM_CLIPS="$PLATFORM_NUM"
124
+
125
+ # ============================================================
126
+ # Delegate to AI Clipping primitive
127
+ # ============================================================
128
+ echo ">> Platform: $PLATFORM (ratio=$ASPECT_RATIO, num=$NUM_CLIPS)"
129
+
130
+ ARGS=(
131
+ --video "$SOURCE"
132
+ --num-clips "$NUM_CLIPS"
133
+ --aspect-ratio "$ASPECT_RATIO"
134
+ --poll-interval "$POLL_INTERVAL"
135
+ --poll-timeout "$POLL_TIMEOUT"
136
+ )
137
+ [[ -n "$OUTPUT_JSON" ]] && ARGS+=(--output-json "$OUTPUT_JSON")
138
+ [[ "$VIEW" == true ]] && ARGS+=(--view)
139
+ [[ "$ASYNC" == true ]] && ARGS+=(--async)
140
+
141
+ exec bash "$AI_CLIPPING_SCRIPT" "${ARGS[@]}"
@@ -0,0 +1,66 @@
1
+ ---
2
+ slug: muapi-youtube-thumbnail
3
+ name: muapi-youtube-thumbnail
4
+ version: "1.0.0"
5
+ description: Design a high-CTR YouTube thumbnail — striking imagery, bold text placement, and emotional face/subject if needed.
6
+ acceptLicenseTerms: true
7
+ ---
8
+
9
+
10
+ # YouTube Thumbnail
11
+
12
+ **Design a high-CTR YouTube thumbnail — striking imagery, bold text placement, and emotional face/subject if needed.**
13
+
14
+ ## Inputs
15
+
16
+ | Name | Type | Required | Default | Description |
17
+ |:---|:---|:---|:---|:---|
18
+ | `title` | text | yes | — | The video title or topic (e.g. "I tried 7 AI tools in 24 hours — here's what happened"). |
19
+ | `channel_style` | text | no | bold, high contrast, bright colors, clean design, YouTube tech aesthetic | Channel brand style (e.g. "dark moody gaming", "bright educational", "minimal corporate"). |
20
+ | `subject_description` | text | no | — | Optional description of the person or subject to feature (e.g. "a surprised young man in a hoodie"). |
21
+
22
+
23
+ ## Steps
24
+
25
+ Thumbnails are the #1 factor in YouTube CTR. Generate a single, maximum-impact 16:9 image.
26
+
27
+ ### Phase A — Plan the composition
28
+
29
+ Before generating, briefly reason about the best thumbnail formula for this topic:
30
+ - **Emotion-first**: shocked/curious face if relevant + bold text = high CTR
31
+ - **Text overlay**: 3–5 words max, high-contrast (white/yellow on dark, or vice-versa)
32
+ - **Contrast & saturation**: thumbnails compete in a grid — they must pop
33
+
34
+ ### Phase B — Generate the thumbnail
35
+
36
+ 1. Build the image generation prompt:
37
+ - Subject: `{{subject_description}}` if provided, otherwise design an object/scene that dramatizes the topic.
38
+ - Mood: derives from `{{channel_style}}`.
39
+ - Composition: rule-of-thirds, subject on left or right with empty space for text.
40
+ - Style tags: `{{channel_style}}, youtube thumbnail composition, ultra detailed, vibrant, high contrast, 16:9`.
41
+ 2. Call `muapi image generate` (model=gpt-image-2-text-to-image, aspect_ratio=16:9).
42
+
43
+ ### Phase C — Text overlay guidance
44
+
45
+ After generation, return:
46
+ - **Suggested overlay text**: 3–5 bold words that complement the title `{{title}}`.
47
+ - **Text placement**: where on the canvas to position text (e.g. "bold yellow text, top-right third").
48
+ - **Font recommendation**: style suggestion (e.g. "Impact-style all-caps with black outline").
49
+
50
+ ## Notes
51
+ - Never put too much text in the prompt — text rendering in image models is unreliable. Guide the user on adding text in post-production (Canva, Photoshop).
52
+ - If the user already has a channel image or face photo in the session, use `muapi image edit` to incorporate it.
53
+ - Suggest A/B variants only if the user asks.
54
+
55
+ ## Trigger Keywords
56
+
57
+ `youtube thumbnail`, `yt thumbnail`, `thumbnail`, `video thumbnail`, `youtube cover`
58
+
59
+
60
+ ---
61
+
62
+ ## Notes for the Executing Agent
63
+
64
+ - This recipe is LLM-orchestrated: read each phase, gather any missing inputs from the user, then call `muapi` CLI commands. Use `muapi auth configure` first if `MUAPI_API_KEY` is unset.
65
+ - For model IDs without a CLI alias yet, fall back to the raw endpoint via `curl -X POST https://api.muapi.ai/api/v1/<endpoint> -H "x-api-key: $MUAPI_API_KEY" -H 'content-type: application/json' -d '{...}'` and poll with `muapi predict wait <request_id>`.
66
+ - Substitute `{{input_name}}` placeholders with the user's actual inputs before issuing each call.
@@ -20,8 +20,8 @@ allocation-light and avoid adding synchronous network or heavy parsing to it.
20
20
  ## Profile resolution order
21
21
 
22
22
  1. `--cue-profile X` flag (explicit).
23
- 2. `.cue-profile` file in cwd, walking up to `$HOME`.
24
- 3. Repo-level default (`.cue-profile` at the git root).
23
+ 2. `.cue.profile` file in cwd, walking up to `$HOME`.
24
+ 3. Repo-level default (`.cue.profile` at the git root).
25
25
  4. Global default (`~/.config/cue/default-profile`).
26
26
  5. TUI picker (interactive fallback).
27
27
 
@@ -169,5 +169,5 @@ Or interactively: `cue init`
169
169
  - **Skills** are SKILL.md files that teach the agent specific tasks
170
170
  - **MCPs** are tool servers (local or remote via Smithery)
171
171
  - **Packs** group related skills for reuse
172
- - `.cue-profile` file pins a profile to a directory
172
+ - `.cue.profile` file pins a profile to a directory
173
173
  - Changes require `/cue-reload` to take effect
@@ -14,11 +14,11 @@ Track how well the active profile matches what the user is actually doing. If yo
14
14
  Then **after completing the user's immediate request**, surface the mismatch with a one-line suggestion:
15
15
 
16
16
  > 💡 This session has been mostly [backend / infra / docs / …] work — your current profile is **{active-profile}**.
17
- > A better fit might be **[suggested]**. Switch with: `/cue switch [name]` or `echo [name] > .cue-profile`
17
+ > A better fit might be **[suggested]**. Switch with: `/cue switch [name]` or `echo [name] > .cue.profile`
18
18
 
19
19
  ## Rules
20
20
 
21
21
  - Only suggest once per session — don't nag.
22
22
  - Never interrupt urgent or in-flight work to suggest a switch; wait for a natural break.
23
- - If the user has explicitly pinned the profile (`.cue-profile` present, or recently ran `/cue switch`), assume they meant it and stay quiet unless the mismatch is extreme.
23
+ - If the user has explicitly pinned the profile (`.cue.profile` present, or recently ran `/cue switch`), assume they meant it and stay quiet unless the mismatch is extreme.
24
24
  - Match the suggested profile to the work category — don't suggest randomly. If unsure, just describe the mismatch without picking a target.
@@ -37,7 +37,7 @@ the worst-possible failure mode for this skill.
37
37
  Run the optimizer for the active profile:
38
38
 
39
39
  ```bash
40
- cue optimizer $(cat .cue-profile 2>/dev/null || cue current 2>/dev/null | head -1)
40
+ cue optimizer $(cat .cue.profile 2>/dev/null || cue current 2>/dev/null | head -1)
41
41
  ```
42
42
 
43
43
  Present the output to the user. Highlight:
@@ -2,10 +2,10 @@
2
2
  name: profile-suggest
3
3
  description: >-
4
4
  Analyzes a repo on the first message and suggests the best cue profile
5
- when no .cue-profile is set, then self-removes from the project CLAUDE.md.
5
+ when no .cue.profile is set, then self-removes from the project CLAUDE.md.
6
6
  Use when user says "suggest a profile", "which profile", "auto-detect
7
7
  profile", "scan this repo", or arrives in a directory with no
8
- .cue-profile.
8
+ .cue.profile.
9
9
  tags: [meta, cue, profiles, onboarding]
10
10
  category: meta
11
11
  version: 1.0.0
@@ -15,7 +15,7 @@ allowed-tools: Bash
15
15
 
16
16
  # Profile Suggestion (First-Time Repo Setup)
17
17
 
18
- **This skill activates ONLY on the first message in a repo without a `.cue-profile`.**
18
+ **This skill activates ONLY on the first message in a repo without a `.cue.profile`.**
19
19
 
20
20
  ## Trigger
21
21
 
@@ -58,13 +58,13 @@ I detected: [Next.js + Stripe + Supabase project]
58
58
  → Recommended: **🦋 frontend** — has ui-ux-pro-max, playwright, image-to-code
59
59
  Also relevant: stripe-webhooks, supabase (from backend profile)
60
60
 
61
- Pin it? I'll run: `echo frontend > .cue-profile` — or pick another with `cue list`
61
+ Pin it? I'll run: `echo frontend > .cue.profile` — or pick another with `cue list`
62
62
  ```
63
63
 
64
64
  ### 4. If user agrees (or says nothing against it)
65
65
 
66
66
  ```bash
67
- echo "<profile-name>" > .cue-profile
67
+ echo "<profile-name>" > .cue.profile
68
68
  ```
69
69
 
70
70
  Then tell them: "Done! Next time you run `claude` here, it'll boot with the **<name>** profile. Restart to activate, or continue — current session still works."
@@ -72,7 +72,7 @@ Then tell them: "Done! Next time you run `claude` here, it'll boot with the **<n
72
72
  ### 5. Remove the first-time marker
73
73
 
74
74
  After suggesting (whether accepted or not), the marker is gone next session
75
- because `.cue-profile` now exists (or user explicitly skipped).
75
+ because `.cue.profile` now exists (or user explicitly skipped).
76
76
 
77
77
  ## Rules
78
78
 
@@ -80,7 +80,7 @@ because `.cue-profile` now exists (or user explicitly skipped).
80
80
  - **Don't block.** Show the suggestion, then immediately proceed with the user's actual request.
81
81
  - **One suggestion only.** Don't nag if they ignore it.
82
82
  - **If the repo is ambiguous** (could be frontend or backend), suggest the broader one and mention the alternative.
83
- - **If a profile already exists** (`.cue-profile` is present), do nothing — this skill shouldn't have fired.
83
+ - **If a profile already exists** (`.cue.profile` is present), do nothing — this skill shouldn't have fired.
84
84
 
85
85
  ## Matching heuristics
86
86
 
@@ -0,0 +1,159 @@
1
+ ---
2
+ name: profile-summon
3
+ description: >-
4
+ Use when a directory has no .cue.profile, or the user says "summon",
5
+ "load", "apply", or "pull in" a profile, or "no profile here". Soft-loads
6
+ a profile's persona and skills into the LIVE session and pins it, no restart.
7
+ tags: [meta, cue, routing, profile]
8
+ category: meta
9
+ version: 1.0.0
10
+ requires_mcps: []
11
+ allowed-tools: Bash(cue:*), Bash(jq:*), Read
12
+ triggers:
13
+ - "summon a profile"
14
+ - "load a profile"
15
+ - "apply the vercel profile"
16
+ - "pull in the X profile"
17
+ - "no profile here"
18
+ - "bind a profile"
19
+ - "which profile for this repo"
20
+ ---
21
+
22
+ # profile-summon
23
+
24
+ ## Prerequisites
25
+
26
+ - `cue` CLI on PATH (the profile manager that ships this skill).
27
+ - `jq` (`apt install jq` / `brew install jq`) to read `cue summon --json`.
28
+
29
+ Open a directory with no `.cue.profile` and the right profile's skills and MCPs
30
+ normally need a pin plus a full `claude` restart, because `CLAUDE_CONFIG_DIR`, the
31
+ `Skill()` list, MCP servers, `/slash` commands, and plugins are all frozen at boot.
32
+ This skill is the bridge: it binds a profile into the **running** session now and
33
+ hands back a warm re-exec for the parts a soft load cannot provide.
34
+
35
+ ## Two tiers, honestly
36
+
37
+ 1. **Now, zero restart (soft-load).** `cue summon` lists the profile's persona and
38
+ each skill's `SKILL.md` path. You `Read` those paths and apply the persona plus
39
+ the relevant skill playbooks inline. Same mechanism as `meta/smart-loader`, just
40
+ whole-profile.
41
+ 2. **Durable plus full fidelity (warm re-exec).** `cue summon` pins `.cue.profile`
42
+ so the next launch is correct, and prints `claude --continue`. Running that
43
+ resumes THIS conversation under the fully materialized profile, the only path to
44
+ its MCP servers and `/slash` commands.
45
+
46
+ ## Iron contract
47
+
48
+ 1. **Never fake the harness.** MCP tools, `/slash` commands, and plugins cannot be
49
+ hot-added. Do not pretend to call an MCP tool or run a `/command` that is not in
50
+ your actual tool list. The warm re-exec is the sanctioned path to them.
51
+ 2. **Only follow SKILL.md you actually read.** Read each path from `cue summon`
52
+ output this session before applying it. No paraphrasing from memory.
53
+ 3. **Honest framing.** Tell the user once, plainly, what soft-loaded and what still
54
+ needs `claude --continue` (see the example below).
55
+ 4. **Propose, then apply.** On a no-profile directory, show the detected profile and
56
+ what it will soft-load in 3 to 4 lines, then apply on the user's OK. Do not inject
57
+ a profile's persona silently.
58
+ 5. **One summon per topic per session.** Once a profile is soft-loaded, it stays
59
+ applied. Do not re-run for the same directory.
60
+
61
+ ## When to summon
62
+
63
+ Summon when **any** holds:
64
+
65
+ - The directory has no `.cue.profile` (the first-time launch block points here).
66
+ - The user names a profile to load: "summon vercel", "apply the backend profile".
67
+ - The user asks "which profile for this repo" and wants it active now, not later.
68
+
69
+ Do not summon when a `.cue.profile` is already pinned and active, or when a loaded
70
+ skill already covers the task (use `Skill()` directly).
71
+
72
+ ## The recipe
73
+
74
+ ### Step 1, resolve and inspect
75
+
76
+ Auto-detect from the repo, or pass an explicit profile:
77
+
78
+ ```bash
79
+ cue summon --json # auto-detect from cwd
80
+ cue summon vercel --json # force a known profile
81
+ ```
82
+
83
+ Parse the result. The useful fields:
84
+
85
+ ```bash
86
+ cue summon vercel --json | jq '{profile, detected, confidence,
87
+ soft_loadable: [.skills[] | select(.mcp_status=="ok") | {id, path}],
88
+ gated: [.skills[] | select(.mcp_status!="ok") | {id, mcp_status}],
89
+ mcps, commands, plugins, reexec_cmd}'
90
+ ```
91
+
92
+ `--json` writes the `.cue.profile` pin by default. Add `--no-pin` to inspect first,
93
+ `--pick` to list candidates without acting, `--dry-run` to compute and write nothing.
94
+
95
+ ### Step 2, propose
96
+
97
+ When you auto-detected (no profile named), show the user a short proposal before
98
+ applying:
99
+
100
+ ```
101
+ No .cue.profile here. Detected: vercel (97% match: vercel.json, @vercel dep).
102
+ Summon it? Soft-loads persona + N skills now, pins .cue.profile, no restart.
103
+ The Vercel MCP and /deploy need `claude --continue` after.
104
+ ```
105
+
106
+ ### Step 3, apply inline
107
+
108
+ On the user's OK, apply the persona, then `Read` each `mcp_status:"ok"` skill path
109
+ and follow the ones the task needs. Skills with `mcp_status:"missing:..."`, npx
110
+ skills, `/slash` commands, and plugins do not soft-load: list them as available
111
+ after the warm re-exec.
112
+
113
+ ### Step 4, hand back the warm re-exec
114
+
115
+ Close with the honest summary:
116
+
117
+ > Soft-loaded the `vercel` persona plus N skill playbooks into this session and
118
+ > pinned `.cue.profile`. The Vercel MCP (`mcp.vercel.com`) and `/deploy` `/env`
119
+ > commands ride in the plugin, which needs the harness. To get them, run
120
+ > `claude --continue`: it resumes this exact conversation under the full profile.
121
+
122
+ ## What can never be faked (needs `claude --continue`)
123
+
124
+ | Capability | Why it is frozen | Soft-load? |
125
+ |---|---|---|
126
+ | MCP servers (e.g. `mcp.vercel.com`) | Registered at `claude` boot from CLAUDE_CONFIG_DIR | No |
127
+ | `/slash` commands (`/deploy`, `/env`) | Wired into the harness at boot | No |
128
+ | Plugins | Loaded at boot | No |
129
+ | `Skill()` invocation of a new skill | Skill list frozen at boot | No (apply as prose) |
130
+ | Skill **playbooks** (the SKILL.md body) | Plain files on disk | **Yes** |
131
+ | Profile **persona** | Plain prose | **Yes** |
132
+
133
+ ## Example: Vercel summon
134
+
135
+ User opens a Next.js plus Vercel repo (has `vercel.json`) with no `.cue.profile`.
136
+
137
+ ```bash
138
+ cue summon --json | jq '{profile, confidence, reasons}'
139
+ # → { "profile": "vercel", "confidence": 0.97,
140
+ # "reasons": ["vercel.json", "package.json @vercel/* or vercel"] }
141
+ ```
142
+
143
+ Propose `vercel`, apply on OK: persona plus the soft-loadable skills (`agent-browser`,
144
+ the framework playbooks) apply now. The hosted MCP, `/deploy`, and `/env` are flagged
145
+ as needing `claude --continue`. The pin is written so that re-exec lands the full
146
+ profile and resumes the chat.
147
+
148
+ ## What this skill is NOT
149
+
150
+ - Not an MCP shim. It never calls `mcp.vercel.com` for you.
151
+ - Not a slash-command emulator. `/deploy` stays a harness command.
152
+ - Not a search engine. To find one off-profile skill for a topic, use
153
+ `meta/smart-loader`. profile-summon binds a whole profile.
154
+
155
+ ## Linking
156
+
157
+ - Related: [[smart-loader]], soft-loads a single off-profile skill by topic.
158
+ - Related: [[profile-suggest]], suggests a profile when none is pinned.
159
+ - Related: [[focus]], routes among already-loaded skills.
@@ -0,0 +1,53 @@
1
+ [
2
+ {
3
+ "id": "summon-001-no-profile-vercel",
4
+ "question": "I just opened this Next.js app deployed on Vercel and there's no .cue.profile pinned. What profile should I use?",
5
+ "expected_skill": "profile-summon",
6
+ "expected_script": null,
7
+ "ground_truth": "The agent runs `cue summon --json` to auto-detect from the repo, sees the vercel profile detected from vercel.json plus the @vercel dependency, and proposes it in 3 to 4 lines before applying. On the user's OK it applies the vercel persona and reads the soft-loadable skill paths from the JSON, applying the ones the task needs. It states plainly which capabilities soft-loaded now (persona plus skill playbooks) and which need the harness (the hosted Vercel MCP and the /deploy, /env slash commands), and hands back `claude --continue` as the warm re-exec that resumes the conversation under the full profile. It does not pretend to call the Vercel MCP or run /deploy.",
8
+ "expected_behavior": [
9
+ "Runs `cue summon --json` (or `cue summon vercel`) to resolve the profile",
10
+ "Proposes the detected profile before applying, not silently",
11
+ "Reads the SKILL.md paths from the summon output before applying them",
12
+ "Distinguishes what soft-loads now from what needs claude --continue",
13
+ "Names `claude --continue` as the warm re-exec for the MCP / slash-command tail",
14
+ "Does not fake an MCP tool call or a /slash command"
15
+ ]
16
+ },
17
+ {
18
+ "id": "summon-002-explicit-load",
19
+ "question": "Summon the backend profile into this session.",
20
+ "expected_skill": "profile-summon",
21
+ "expected_script": null,
22
+ "ground_truth": "The agent treats this as an explicit summon, runs `cue summon backend --json`, applies the backend persona and the soft-loadable skill playbooks inline, pins .cue.profile to backend, and reports which MCPs or commands still need a warm re-exec. It does not require a restart for the persona and skill bodies.",
23
+ "expected_behavior": [
24
+ "Runs `cue summon backend --json` with the explicit profile name",
25
+ "Applies persona plus soft-loadable skills inline, no restart",
26
+ "Confirms the .cue.profile pin was written",
27
+ "Surfaces any MCP-gated skills or commands as needing claude --continue"
28
+ ]
29
+ },
30
+ {
31
+ "id": "summon-003-pinned-noop",
32
+ "question": "This repo already has .cue.profile set to medusa-dev and it's the active profile. Can you re-summon it?",
33
+ "expected_skill": "profile-summon",
34
+ "expected_script": null,
35
+ "ground_truth": "The agent recognizes the profile is already pinned and active, so a summon is unnecessary. It says the active session already has medusa-dev loaded and does not re-inject the persona or re-read skills. It offers smart-loader only if the user needs an off-profile skill for a specific task.",
36
+ "expected_behavior": [
37
+ "Recognizes a pinned, active profile needs no summon",
38
+ "Does not re-inject the persona or re-run the soft-load",
39
+ "Stays honest rather than performing a no-op summon for show"
40
+ ]
41
+ },
42
+ {
43
+ "id": "summon-004-no-trigger-general-chat",
44
+ "question": "What's the difference between edge and node runtimes on Vercel?",
45
+ "expected_skill": null,
46
+ "expected_script": null,
47
+ "ground_truth": "This is a conceptual question with a profile already active, not a request to bind a profile. The agent answers directly and does not invoke profile-summon.",
48
+ "expected_behavior": [
49
+ "Answers the conceptual question directly",
50
+ "Does not invoke profile-summon for a non-binding request"
51
+ ]
52
+ }
53
+ ]
@@ -30,7 +30,7 @@ Flags:
30
30
  - `--inherits` — parent profile (default `core`)
31
31
  - `--skills` — comma-separated `category/slug` paths
32
32
  - `--mcps` — comma-separated MCP IDs
33
- - `--pin` — also write `.cue-profile` in the cwd
33
+ - `--pin` — also write `.cue.profile` in the cwd
34
34
  - `--force` — overwrite an existing profile
35
35
 
36
36
  ## Workflow inside Claude Code
@@ -38,6 +38,9 @@ detail — load on demand, don't inline:
38
38
  expansion (R001–R008 + manual checks).
39
39
  - [references/roi-model.md](references/roi-model.md) — full ROI scoring
40
40
  model with the data-gathering commands.
41
+ - [references/tdd-for-skills.md](references/tdd-for-skills.md): baseline-first
42
+ authoring (RED-GREEN-REFACTOR). Prove a skill changes behavior under pressure,
43
+ not just that it fires. Ported from obra/superpowers.
41
44
 
42
45
  Read the references when the workflow says "see references/X.md", not
43
46
  preemptively.
@@ -0,0 +1,55 @@
1
+ # TDD for skills: baseline-first authoring
2
+
3
+ Ported from `obra/superpowers` (`skills/writing-skills`, 217K★). cue already
4
+ scores activation (`skill-eval`) and optimizes triggers (`description-optimizer`).
5
+ This adds the missing discipline: prove the skill changes **behavior under
6
+ pressure**, not just that it fires.
7
+
8
+ ## Core principle
9
+
10
+ > If you did not watch an agent fail **without** the skill, you do not know if
11
+ > the skill teaches the right thing.
12
+
13
+ Writing a skill is test-driven development applied to process documentation.
14
+ Run the test (a pressure scenario) before you write the skill, watch it fail,
15
+ write the minimal skill that fixes the exact failure, watch it pass.
16
+
17
+ ## The RED-GREEN-REFACTOR loop for a skill
18
+
19
+ | TDD step | Skill authoring |
20
+ |---|---|
21
+ | Write the test first | Write a pressure scenario a subagent will face |
22
+ | Watch it fail (RED) | Run it with **no skill loaded**; record the exact rationalizations the agent uses to dodge the right behavior |
23
+ | Minimal code | Write the smallest skill that closes those specific rationalizations |
24
+ | Watch it pass (GREEN) | Re-run the same scenario with the skill loaded; confirm the agent complies |
25
+ | Refactor | Hunt for *new* loopholes the agent invents, plug them, re-run |
26
+
27
+ The baseline (RED) is the part teams skip. Without it you are guessing what to
28
+ write, and you cannot tell a skill that works from one that just sounds good.
29
+
30
+ ## How to run it in cue
31
+
32
+ 1. **Pick the behavior** the skill must enforce (e.g. "always run the check
33
+ before claiming done").
34
+ 2. **Scaffold the scenario** with `skill-eval`, but add a *no-skill* baseline
35
+ arm, not only the activation arm. Capture the agent's transcript.
36
+ 3. **Read the failure**, quote the rationalizations verbatim (these become the
37
+ "Common mistakes" section of the skill).
38
+ 4. **Write the minimal skill** addressing those exact dodges.
39
+ 5. **Re-run**; if the agent finds a new escape hatch, that is the next RED.
40
+ Loop until two clean passes.
41
+
42
+ ## What this changes about review
43
+
44
+ When reviewing a skill, ask: *was there a baseline?* A skill written without
45
+ watching a failure first is a hypothesis. Flag it 🟡 and request the RED
46
+ transcript, or run one before trusting the skill in a profile.
47
+
48
+ ## Related
49
+
50
+ - `description` is WHEN, never WHAT. Never summarize the workflow in the
51
+ description (see [decision-brief-format.md](decision-brief-format.md) and the
52
+ description-optimizer skill). superpowers calls this Claude Search Optimization.
53
+ - Skills are reusable techniques, **not** narratives of how you solved something
54
+ once. If it only applies to this repo, it belongs in CLAUDE.md, not a skill.
55
+ - Close loopholes iteratively. See the REFACTOR row above.
@@ -106,7 +106,7 @@ After user picks which skills to add:
106
106
 
107
107
  ```bash
108
108
  # Check current profile
109
- PROFILE=$(cat .cue-profile 2>/dev/null || cue current --json 2>/dev/null | jq -r '.profile')
109
+ PROFILE=$(cat .cue.profile 2>/dev/null || cue current --json 2>/dev/null | jq -r '.profile')
110
110
 
111
111
  # Show what will be added
112
112
  echo "Adding to profile: $PROFILE"
@@ -43,6 +43,26 @@ Two non-negotiables:
43
43
  diff is > 2000 lines, warn the user — quality drops on huge diffs;
44
44
  suggest splitting.
45
45
 
46
+ ## Pass 0 — Supply-chain gate (Trivy, always run)
47
+
48
+ Before reviewing the diff by hand, run the dependency/secret/misconfig
49
+ scanner. Code review does not catch a known CVE in a transitive
50
+ dependency or a leaked key. Trivy does.
51
+
52
+ Invoke the `security/trivy-scan` skill (the single source of truth for
53
+ the gate). In short:
54
+
55
+ ```bash
56
+ trivy fs --scanners vuln,secret,misconfig --severity HIGH,CRITICAL --exit-code 1 --no-progress --skip-dirs "**/node_modules" --skip-dirs "**/_cache" --skip-dirs "**/dist" --skip-dirs "**/.next" --skip-dirs "**/vendor" .
57
+ ```
58
+
59
+ - **Exit 1 (HIGH/CRITICAL found)** → this is a **CRITICAL review finding**.
60
+ Report the rows and **block the merge**, same as any Pass 1 critical.
61
+ - **Exit 0** → note "Trivy: clean" and continue to Pass 1.
62
+ - **Trivy missing / errored** → run `security/trivy-scan`'s installer; if
63
+ it still can't run, report that the gate could not run and treat as
64
+ block, not a silent pass.
65
+
46
66
  ## Pass 1 — CRITICAL (always run)
47
67
 
48
68
  Run the checks in [`checklist.md`](checklist.md), section "Pass 1".