cue-ai 0.9.2 → 0.9.3
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/CHANGELOG.md +4 -3
- package/README.md +148 -170
- package/bin/cue-learnings +30 -4
- package/bin/cue-review-progress +0 -0
- package/bin/cue-review-watch +0 -0
- package/dist/cue.js +4328 -3108
- package/package.json +1 -1
- package/plugins/cue/commands/cue-switch.md +1 -1
- package/plugins/cue/commands/cue.md +1 -1
- package/profiles/backend/profile.yaml +4 -0
- package/profiles/browser/profile.yaml +4 -0
- package/profiles/career/profile.yaml +2 -13
- package/profiles/commerce/profile.yaml +0 -2
- package/profiles/coolify/profile.yaml +0 -1
- package/profiles/core/profile.yaml +78 -11
- package/profiles/dash-merge-test/profile.yaml +6 -1
- package/profiles/designer/profile.yaml +9 -1
- package/profiles/dropshipping/profile.yaml +69 -0
- package/profiles/frontend/profile.yaml +4 -0
- package/profiles/google-ads/profile.yaml +34 -0
- package/profiles/google-analytics/profile.yaml +34 -0
- package/profiles/google-drive/profile.yaml +34 -0
- package/profiles/gstack/profile.yaml +117 -29
- package/profiles/marketing/profile.yaml +0 -1
- package/profiles/media/README.md +70 -0
- package/profiles/media/profile.yaml +104 -0
- package/profiles/nano-banana/profile.yaml +52 -0
- package/profiles/ops/profile.yaml +1 -2
- package/profiles/secops/profile.yaml +3 -0
- package/profiles/skill-writer/profile.yaml +15 -0
- package/profiles/video/profile.yaml +3 -0
- package/profiles/web-frontend-base/profile.yaml +6 -0
- package/profiles/webshop/profile.yaml +0 -1
- package/profiles/webshop-google/profile.yaml +1 -0
- package/profiles/x-growth-bot/profile.yaml +2 -0
- package/resources/icons/generate-icons.py +2 -128
- package/resources/mcps/configs/claude.sanitized.json +88 -20
- package/resources/mcps/configs/claude_runtime.sanitized.json +40 -1
- package/resources/mcps/configs/codex.sanitized.json +29 -0
- package/resources/skills/skills/career/job-hunter/LICENSE +21 -0
- package/resources/skills/skills/career/job-hunter/README.md +323 -0
- package/resources/skills/skills/career/job-hunter/SKILL.md +91 -0
- package/resources/skills/skills/career/job-hunter/agents/README.md +96 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-assessment-prep.md +195 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-ats-scan.md +155 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-bias-audit.md +224 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-cover-letter.md +69 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-decode-jd.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-fit-score.md +183 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-audit.md +74 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-linkedin-scrape.md +255 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-portfolio-brief.md +123 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-reality-check.md +164 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-reference-prep.md +150 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-rejection-analysis.md +172 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-resume.md +70 -0
- package/resources/skills/skills/career/job-hunter/agents/apply-skills-gap-filler.md +109 -0
- package/resources/skills/skills/career/job-hunter/agents/career-internal.md +94 -0
- package/resources/skills/skills/career/job-hunter/agents/career-linkedin-content.md +173 -0
- package/resources/skills/skills/career/job-hunter/agents/career-linkedin-scanner.md +262 -0
- package/resources/skills/skills/career/job-hunter/agents/career-network-message.md +108 -0
- package/resources/skills/skills/career/job-hunter/agents/career-promote.md +102 -0
- package/resources/skills/skills/career/job-hunter/agents/career-review.md +71 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-debrief.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-mock.md +171 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-panel-decoder.md +152 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-prep.md +184 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-question-bank.md +133 -0
- package/resources/skills/skills/career/job-hunter/agents/interview-research.md +148 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-compare.md +117 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-counteroffer.md +144 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-deadline-manager.md +148 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-negotiate.md +126 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-schedule.md +99 -0
- package/resources/skills/skills/career/job-hunter/agents/offer-thankyou.md +80 -0
- package/resources/skills/skills/career/job-hunter/agents/search-company-research.md +146 -0
- package/resources/skills/skills/career/job-hunter/agents/search-follow-up.md +129 -0
- package/resources/skills/skills/career/job-hunter/agents/search-ghost-job-detector.md +152 -0
- package/resources/skills/skills/career/job-hunter/agents/search-inbox-scan.md +193 -0
- package/resources/skills/skills/career/job-hunter/agents/search-interview-scorecard.md +164 -0
- package/resources/skills/skills/career/job-hunter/agents/search-jobs.md +149 -0
- package/resources/skills/skills/career/job-hunter/agents/search-momentum-check.md +194 -0
- package/resources/skills/skills/career/job-hunter/agents/search-outreach.md +85 -0
- package/resources/skills/skills/career/job-hunter/agents/search-referral-finder.md +124 -0
- package/resources/skills/skills/career/job-hunter/agents/search-salary.md +96 -0
- package/resources/skills/skills/career/job-hunter/agents/search-send-email.md +109 -0
- package/resources/skills/skills/career/job-hunter/agents/search-tracker-update.md +127 -0
- package/resources/skills/skills/career/job-hunter/inputs/README.md +26 -0
- package/resources/skills/skills/career/job-hunter/inputs/apply-linkedin-url.txt +8 -0
- package/resources/skills/skills/career/job-hunter/inputs/interview-context.md +24 -0
- package/resources/skills/skills/career/job-hunter/inputs/job-description.md +20 -0
- package/resources/skills/skills/career/job-hunter/inputs/job-search-criteria.md +36 -0
- package/resources/skills/skills/career/job-hunter/inputs/my-linkedin.md +24 -0
- package/resources/skills/skills/career/job-hunter/inputs/my-resume.md +28 -0
- package/resources/skills/skills/career/job-hunter/inputs/search-outreach-target.md +24 -0
- package/resources/skills/skills/career/job-hunter/rules/README.md +37 -0
- package/resources/skills/skills/career/job-hunter/rules/writing-rules.md +81 -0
- package/resources/skills/skills/design/banana/SKILL.md +375 -0
- package/resources/skills/skills/design/banana/references/cost-tracking.md +47 -0
- package/resources/skills/skills/design/banana/references/gemini-models.md +236 -0
- package/resources/skills/skills/design/banana/references/mcp-tools.md +145 -0
- package/resources/skills/skills/design/banana/references/post-processing.md +192 -0
- package/resources/skills/skills/design/banana/references/presets.md +69 -0
- package/resources/skills/skills/design/banana/references/prompt-engineering.md +481 -0
- package/resources/skills/skills/design/banana/scripts/batch.py +97 -0
- package/resources/skills/skills/design/banana/scripts/cost_tracker.py +191 -0
- package/resources/skills/skills/design/banana/scripts/edit.py +159 -0
- package/resources/skills/skills/design/banana/scripts/generate.py +168 -0
- package/resources/skills/skills/design/banana/scripts/presets.py +154 -0
- package/resources/skills/skills/design/banana/scripts/setup_mcp.py +151 -0
- package/resources/skills/skills/design/banana/scripts/validate_setup.py +133 -0
- package/resources/skills/skills/gstack/ship/SKILL.md +13 -0
- package/resources/skills/skills/media/3d-logo-animation/SKILL.md +59 -0
- package/resources/skills/skills/media/action-figure-generator/SKILL.md +48 -0
- package/resources/skills/skills/media/ad-creative/SKILL.md +79 -0
- package/resources/skills/skills/media/ai-clipping/SKILL.md +194 -0
- package/resources/skills/skills/media/ai-clipping/scripts/run-ai-clipping.sh +200 -0
- package/resources/skills/skills/media/ai-fight-scene/SKILL.md +132 -0
- package/resources/skills/skills/media/amazon-product-listing/SKILL.md +68 -0
- package/resources/skills/skills/media/animal-video-generator/SKILL.md +59 -0
- package/resources/skills/skills/media/award-ceremony-video/SKILL.md +87 -0
- package/resources/skills/skills/media/blog-header/SKILL.md +61 -0
- package/resources/skills/skills/media/brand-kit/SKILL.md +72 -0
- package/resources/skills/skills/media/brochures/SKILL.md +65 -0
- package/resources/skills/skills/media/cartoon-dance-animation/SKILL.md +62 -0
- package/resources/skills/skills/media/character-story-video/SKILL.md +84 -0
- package/resources/skills/skills/media/chibi-collage-effect/SKILL.md +63 -0
- package/resources/skills/skills/media/cinema-director/SKILL.md +93 -0
- package/resources/skills/skills/media/cinema-director/scripts/generate-film.sh +78 -0
- package/resources/skills/skills/media/color-analysis-board/SKILL.md +71 -0
- package/resources/skills/skills/media/core-edit/SKILL.md +48 -0
- package/resources/skills/skills/media/core-edit/edit-image.sh +54 -0
- package/resources/skills/skills/media/core-edit/enhance-image.sh +191 -0
- package/resources/skills/skills/media/core-edit/lipsync.sh +144 -0
- package/resources/skills/skills/media/core-edit/video-effects.sh +193 -0
- package/resources/skills/skills/media/core-media/SKILL.md +49 -0
- package/resources/skills/skills/media/core-media/create-music.sh +169 -0
- package/resources/skills/skills/media/core-media/generate-image.sh +161 -0
- package/resources/skills/skills/media/core-media/generate-video.sh +137 -0
- package/resources/skills/skills/media/core-media/image-to-video.sh +228 -0
- package/resources/skills/skills/media/core-media/schema_data.json +18708 -0
- package/resources/skills/skills/media/core-media/upload.sh +41 -0
- package/resources/skills/skills/media/core-platform/SKILL.md +41 -0
- package/resources/skills/skills/media/core-platform/check-result.sh +37 -0
- package/resources/skills/skills/media/core-platform/setup.sh +31 -0
- package/resources/skills/skills/media/couple-grid-creator/SKILL.md +47 -0
- package/resources/skills/skills/media/design-guide/SKILL.md +73 -0
- package/resources/skills/skills/media/drone-style-video/SKILL.md +61 -0
- package/resources/skills/skills/media/fashion-try-on/SKILL.md +61 -0
- package/resources/skills/skills/media/floor-plan-rendering/SKILL.md +56 -0
- package/resources/skills/skills/media/freeze-effect-video/SKILL.md +100 -0
- package/resources/skills/skills/media/giant-product-showcase/SKILL.md +61 -0
- package/resources/skills/skills/media/instagram-post/SKILL.md +58 -0
- package/resources/skills/skills/media/interior-design/SKILL.md +61 -0
- package/resources/skills/skills/media/interior-design-visualizer/SKILL.md +57 -0
- package/resources/skills/skills/media/jewelry-product-video/SKILL.md +61 -0
- package/resources/skills/skills/media/kdenlive/SKILL.md +106 -0
- package/resources/skills/skills/media/kdenlive/scripts/assemble.sh +57 -0
- package/resources/skills/skills/media/kdenlive/scripts/common.sh +30 -0
- package/resources/skills/skills/media/kdenlive/scripts/inspect.sh +19 -0
- package/resources/skills/skills/media/kdenlive/scripts/reframe.sh +22 -0
- package/resources/skills/skills/media/kdenlive/scripts/render.sh +16 -0
- package/resources/skills/skills/media/kdenlive/scripts/title-card.sh +25 -0
- package/resources/skills/skills/media/keyboard-art-maker/SKILL.md +44 -0
- package/resources/skills/skills/media/logo-branding/SKILL.md +70 -0
- package/resources/skills/skills/media/logo-creator/SKILL.md +80 -0
- package/resources/skills/skills/media/logo-creator/scripts/create-logo.sh +38 -0
- package/resources/skills/skills/media/logo-generator/SKILL.md +56 -0
- package/resources/skills/skills/media/multi-angle-reshoot/SKILL.md +70 -0
- package/resources/skills/skills/media/multi-angle-shots/SKILL.md +73 -0
- package/resources/skills/skills/media/music-video/SKILL.md +61 -0
- package/resources/skills/skills/media/nano-banana/SKILL.md +80 -0
- package/resources/skills/skills/media/nano-banana/scripts/generate-nano-art.sh +54 -0
- package/resources/skills/skills/media/one-shot-video/SKILL.md +56 -0
- package/resources/skills/skills/media/photo-pack-generator/SKILL.md +205 -0
- package/resources/skills/skills/media/photo-pack-generator/scripts/generate-pack.sh +241 -0
- package/resources/skills/skills/media/product-ad-cinematic/SKILL.md +78 -0
- package/resources/skills/skills/media/product-campaign/SKILL.md +76 -0
- package/resources/skills/skills/media/product-showcase-video/SKILL.md +60 -0
- package/resources/skills/skills/media/product-video-ad-maker/SKILL.md +59 -0
- package/resources/skills/skills/media/rednote-cover/SKILL.md +57 -0
- package/resources/skills/skills/media/seedance-2/SKILL.md +632 -0
- package/resources/skills/skills/media/seedance-2/scripts/generate-seedance.sh +701 -0
- package/resources/skills/skills/media/selfie-with-celebrities/SKILL.md +64 -0
- package/resources/skills/skills/media/social-media-video/SKILL.md +277 -0
- package/resources/skills/skills/media/social-media-video/scripts/run-social-video.sh +316 -0
- package/resources/skills/skills/media/social-pack/SKILL.md +58 -0
- package/resources/skills/skills/media/storyboard/SKILL.md +57 -0
- package/resources/skills/skills/media/storyboard-to-cooking-video/SKILL.md +143 -0
- package/resources/skills/skills/media/talking-baby-video/SKILL.md +57 -0
- package/resources/skills/skills/media/ugc-ads-workflow/SKILL.md +70 -0
- package/resources/skills/skills/media/ugc-lifestyle-try-on/SKILL.md +65 -0
- package/resources/skills/skills/media/ugc-video-factory/SKILL.md +134 -0
- package/resources/skills/skills/media/ui-design/SKILL.md +81 -0
- package/resources/skills/skills/media/ui-design/scripts/generate-mockup.sh +49 -0
- package/resources/skills/skills/media/url-to-design/SKILL.md +61 -0
- package/resources/skills/skills/media/workflow/SKILL.md +197 -0
- package/resources/skills/skills/media/workflow/scripts/discover-workflow.sh +18 -0
- package/resources/skills/skills/media/workflow/scripts/generate-workflow.sh +33 -0
- package/resources/skills/skills/media/workflow/scripts/interactive-run.sh +16 -0
- package/resources/skills/skills/media/workflow/scripts/list-workflows.sh +20 -0
- package/resources/skills/skills/media/workflow/scripts/run-workflow.sh +34 -0
- package/resources/skills/skills/media/youtube-shorts/SKILL.md +173 -0
- package/resources/skills/skills/media/youtube-shorts/scripts/run-youtube-shorts.sh +141 -0
- package/resources/skills/skills/media/youtube-thumbnail/SKILL.md +66 -0
- package/resources/skills/skills/meta/cue-developer/references/architecture.md +2 -2
- package/resources/skills/skills/meta/cue-usage/SKILL.md +1 -1
- package/resources/skills/skills/meta/profile-fit-monitor/SKILL.md +2 -2
- package/resources/skills/skills/meta/profile-optimizer/SKILL.md +1 -1
- package/resources/skills/skills/meta/profile-suggest/SKILL.md +7 -7
- package/resources/skills/skills/meta/profile-summon/SKILL.md +159 -0
- package/resources/skills/skills/meta/profile-summon/evals/evals.json +53 -0
- package/resources/skills/skills/meta/save-profile/SKILL.md +1 -1
- package/resources/skills/skills/meta/skill-reviewer/SKILL.md +3 -0
- package/resources/skills/skills/meta/skill-reviewer/references/tdd-for-skills.md +55 -0
- package/resources/skills/skills/research/find-skills/SKILL.md +1 -1
- package/resources/skills/skills/review/code-review-deep/SKILL.md +20 -0
- package/resources/skills/skills/security/trivy-scan/SKILL.md +139 -0
- package/resources/skills/skills/security/trivy-scan/scripts/ensure-trivy.sh +21 -0
- package/resources/skills/skills/tools/ccusage/SKILL.md +142 -0
- package/src/commands/_index.ts +8 -0
- package/src/commands/ai.ts +2 -2
- package/src/commands/auto-detect.test.ts +74 -0
- package/src/commands/auto-detect.ts +9 -7
- package/src/commands/cli.test.ts +20 -4
- package/src/commands/cli.ts +36 -20
- package/src/commands/create-profile.ts +2 -2
- package/src/commands/debug.ts +2 -2
- package/src/commands/discover.ts +14 -4
- package/src/commands/export-docker.ts +1 -1
- package/src/commands/features-batch1.test.ts +1 -1
- package/src/commands/gates.ts +1 -1
- package/src/commands/import-profile.ts +1 -1
- package/src/commands/init.ts +15 -11
- package/src/commands/install.test.ts +192 -0
- package/src/commands/install.ts +610 -0
- package/src/commands/launch-handoff.e2e.test.ts +33 -1
- package/src/commands/launch.e2e.test.ts +15 -10
- package/src/commands/launch.ts +73 -116
- package/src/commands/materialize.ts +2 -2
- package/src/commands/prune.ts +1 -1
- package/src/commands/security-audit.ts +1 -1
- package/src/commands/shell.ts +7 -7
- package/src/commands/skill-report.ts +1 -1
- package/src/commands/skills.ts +3 -3
- package/src/commands/snapshot.ts +2 -2
- package/src/commands/summon.test.ts +116 -0
- package/src/commands/summon.ts +338 -0
- package/src/commands/trigger-gaps.ts +1 -1
- package/src/commands/use.ts +47 -3
- package/src/commands/watch-live.ts +5 -5
- package/src/commands/watch.ts +8 -8
- package/src/index.ts +2 -0
- package/src/lib/active-sessions.test.ts +3 -3
- package/src/lib/active-sessions.ts +4 -4
- package/src/lib/auto-detect.test.ts +172 -8
- package/src/lib/auto-detect.ts +191 -136
- package/src/lib/codex-persona-parity.test.ts +58 -0
- package/src/lib/companion-detect.test.ts +43 -1
- package/src/lib/companion-detect.ts +35 -0
- package/src/lib/credentials-sync.test.ts +121 -1
- package/src/lib/credentials-sync.ts +95 -1
- package/src/lib/cwd-resolver.test.ts +8 -8
- package/src/lib/cwd-resolver.ts +2 -2
- package/src/lib/dashboard-merge.test.ts +9 -4
- package/src/lib/dashboard-server.ts +1 -1
- package/src/lib/picker.test.ts +1 -1
- package/src/lib/picker.ts +5 -5
- package/src/lib/profile-merge.test.ts +8 -0
- package/src/lib/profile-names.test.ts +3 -3
- package/src/lib/runtime-install.ts +166 -0
- package/src/lib/runtime-materializer.test.ts +137 -0
- package/src/lib/runtime-materializer.ts +105 -2
- package/src/lib/skill-router.test.ts +38 -0
- package/src/lib/skill-router.ts +65 -4
- package/profiles/eu-tender-research/README.md +0 -48
- package/profiles/eu-tender-research/logo.png +0 -0
- 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
|
|
24
|
-
3. Repo-level default (`.cue
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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".
|