cue-ai 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +225 -8
  2. package/package.json +3 -2
  3. package/profiles/affiliate/profile.yaml +67 -0
  4. package/profiles/go-api/profile.yaml +8 -0
  5. package/profiles/marketing/profile.yaml +4 -1
  6. package/profiles/nextjs/profile.yaml +8 -0
  7. package/profiles/python-api/profile.yaml +8 -0
  8. package/profiles/rust/profile.yaml +8 -0
  9. package/profiles/video/profile.yaml +10 -0
  10. package/resources/mcps/configs/claude_runtime.sanitized.json +15 -1
  11. package/resources/skills/skills/design/headless-gif-demo/SKILL.md +57 -12
  12. package/resources/skills/skills/meta/awesome-list-submit/SKILL.md +463 -0
  13. package/src/commands/_index.ts +44 -0
  14. package/src/commands/ai-score.e2e.test.ts +113 -0
  15. package/src/commands/ai.ts +179 -0
  16. package/src/commands/benchmark.ts +258 -0
  17. package/src/commands/clean.ts +109 -0
  18. package/src/commands/completions.ts +4 -0
  19. package/src/commands/cost.ts +77 -3
  20. package/src/commands/diff.ts +105 -0
  21. package/src/commands/import-profile.ts +28 -5
  22. package/src/commands/launch.e2e.test.ts +119 -0
  23. package/src/commands/launch.ts +19 -0
  24. package/src/commands/lock.ts +21 -1
  25. package/src/commands/marketplace.ts +88 -3
  26. package/src/commands/migrate.ts +100 -0
  27. package/src/commands/optimizer.ts +2 -2
  28. package/src/commands/replay-whatif.ts +142 -0
  29. package/src/commands/replay.ts +6 -0
  30. package/src/commands/score.ts +304 -0
  31. package/src/commands/security.ts +47 -7
  32. package/src/commands/shell.ts +17 -0
  33. package/src/commands/skills.ts +2 -2
  34. package/src/commands/status.ts +14 -0
  35. package/src/commands/suggest.ts +170 -0
  36. package/src/commands/upgrade.ts +154 -0
  37. package/src/index.ts +24 -1
  38. package/src/lib/analytics.ts +73 -1
  39. package/src/lib/auto-detect.ts +38 -5
  40. package/src/lib/cache.ts +47 -6
  41. package/src/lib/runtime-materializer.test.ts +22 -11
  42. package/src/lib/runtime-materializer.ts +58 -15
  43. package/src/lib/star-prompt.ts +10 -0
package/README.md CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
  # cue — Agent Profile Manager for Claude Code, Codex & 8 more
14
14
 
15
- > Every `claude` session loads all **1,927** skills you've ever installed. Your model picks the wrong one. Your tokens evaporate. **cue fixes this in one command.**
15
+ > Every `claude` session loads **all** your skills, MCPs, and plugins — every one you've ever installed. Your model picks the wrong tool. Your tokens evaporate. **cue fixes this in one command.**
16
16
 
17
- **Works with:** Claude Code · Codex · Cursor · Cline · Gemini · GitHub Copilot · Windsurf · Roo Code · Amp · Aider  →   [jump to the full matrix ↓](#agents-cue-supports)
17
+ **Works with:** [![Claude Code](https://img.shields.io/badge/Claude_Code-cc785c?style=flat-square&logo=anthropic&logoColor=white)](https://github.com/anthropics/claude-code) [![Codex](https://img.shields.io/badge/Codex-000000?style=flat-square&logo=openai&logoColor=white)](https://github.com/openai/codex) [![Cursor](https://img.shields.io/badge/Cursor-000000?style=flat-square&logo=cursor&logoColor=white)](https://cursor.sh) [![Cline](https://img.shields.io/badge/Cline-5A45FF?style=flat-square)](https://github.com/cline/cline) [![Gemini](https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=google&logoColor=white)](https://github.com/google-gemini/gemini-cli) [![Copilot](https://img.shields.io/badge/Copilot-000000?style=flat-square&logo=github&logoColor=white)](https://github.com/features/copilot) [![Windsurf](https://img.shields.io/badge/Windsurf-06B6D4?style=flat-square)](https://windsurf.com) [![Roo Code](https://img.shields.io/badge/Roo_Code-7C3AED?style=flat-square)](https://github.com/RooVetGit/Roo-Code) [![Amp](https://img.shields.io/badge/Amp-FF4500?style=flat-square&logo=sourcegraph&logoColor=white)](https://sourcegraph.com/amp) [![Aider](https://img.shields.io/badge/Aider-14B8A6?style=flat-square)](https://aider.chat)  →  [full matrix ↓](#agents-cue-supports)
18
18
 
19
19
  ## ⚡ 60-second quickstart
20
20
 
@@ -30,28 +30,65 @@ That's it. `cd` into any other repo and `claude` will boot with that repo's prof
30
30
  <img src="./docs/assets/demo.gif" alt="cue 30-second demo — install, pin a profile, optimize, launch" width="820" onerror="this.style.display='none'">
31
31
  </p>
32
32
 
33
- > **No GIF yet?** Generate it with [`vhs`](https://github.com/charmbracelet/vhs): `vhs docs/demo.tape` → writes `docs/assets/demo.gif`.
34
-
35
33
  <details>
36
34
  <summary>📑 <b>Table of contents</b></summary>
37
35
 
36
+ - [5 commands you need](#-5-commands-you-need)
37
+ - [Before & After — token cost](#-before--after--token-cost)
38
38
  - [Why a profile manager at all?](#why-a-profile-manager-at-all)
39
+ - [Skills are not just prompts](#skills-are-not-just-prompts)
39
40
  - [How cue compares](#how-cue-compares)
40
41
  - [How it works](#how-it-works)
41
42
  - [Agents cue supports](#agents-cue-supports)
42
43
  - [`cue optimizer` — see every loadout at a glance](#cue-optimizer--see-every-loadout-at-a-glance)
43
- - [The 16-profile catalog](#the-16-profile-catalog)
44
+ - [The 23-profile catalog](#the-23-profile-catalog)
45
+ - [Create your own profile in 30 seconds](#️-create-your-own-profile-in-30-seconds)
46
+ - [`cue share` — community profiles](#-cue-share--community-profiles)
44
47
  - [Install](#install)
45
48
  - [What ships with each profile](#what-ships-with-each-profile-the-lean-stack)
46
49
  - [FAQ](#faq)
47
50
  - [Repo layout](#repo-layout)
48
51
  - [Built with / built on](#built-with--built-on)
52
+ - [Star History](#star-history)
49
53
  - [Contributing](#contributing)
50
54
 
51
55
  </details>
52
56
 
53
57
  ---
54
58
 
59
+ ## 🧠 5 commands you need
60
+
61
+ ```bash
62
+ cue use <profile> # switch profile for this directory
63
+ cue list # see all available profiles
64
+ cue optimizer # audit: skills, MCPs, CLIs, usage per profile
65
+ cue doctor --fix # diff declared vs actual state, auto-repair
66
+ cue skills add <github-url> # install a skill from GitHub into a profile
67
+ ```
68
+
69
+ That covers 90% of daily use. Everything else (`cue share`, `cue materialize`, `cue tree`, etc.) is there when you need it — run `cue --help` for the full list.
70
+
71
+ ---
72
+
73
+ ## 📊 Before & After — token cost
74
+
75
+ > **TL;DR** — loading everything costs you tokens on every single message. cue cuts context size by 10–25×.
76
+
77
+ | Scenario | Context loaded | Tokens per session | Cost (Sonnet) |
78
+ |---|---|---|---|
79
+ | **Without cue** — all 1,927 skills + 15 MCPs | ~180k tokens | ~$2.70/session | 😱 |
80
+ | **With cue** — `backend` profile (12 skills, 2 MCPs) | ~8k tokens | ~$0.12/session | ✅ |
81
+ | **With cue** — `caveman-quick` (3 skills, 0 MCPs) | ~2k tokens | ~$0.03/session | 🚀 |
82
+
83
+ That's **22× fewer tokens** for a typical backend session. Over a day of 20 sessions, you save ~$50 in raw API cost — or equivalently, your model picks the right tool on the first try because it's not drowning in 1,900 irrelevant skill descriptions.
84
+
85
+ ```bash
86
+ cue cost # see token budget for your active profile
87
+ cue cost --profile full # compare against the "everything" baseline
88
+ ```
89
+
90
+ ---
91
+
55
92
  ## Why a profile manager at all?
56
93
 
57
94
  > **TL;DR** — without cue, every `claude` session loads every skill, MCP, and plugin you've ever installed. cue scopes the loadout per-directory so each repo only sees what it actually needs.
@@ -67,6 +104,74 @@ That's it. `cd` into any other repo and `claude` will boot with that repo's prof
67
104
  - **Materialized, hash-short-circuited.** Each launch rebuilds the runtime only when the resolved profile actually changed. Cold-start cost is a `stat()` + sha256 compare.
68
105
  - **No service to run.** No daemon, no background process, no auto-update. Just a Bun CLI and a shim script in `~/.local/bin`.
69
106
 
107
+ ### Profile inheritance
108
+
109
+ Profiles compose via single-parent inheritance. Each child adds or overrides what it needs:
110
+
111
+ ```
112
+ ┌─────────────────────────────────────────────────────────────┐
113
+ │ core │
114
+ │ claude-mem · caveman · RTK · gbrain │
115
+ └──────────┬──────────────────┬───────────────────┬───────────┘
116
+ │ │ │
117
+ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
118
+ │ backend │ │ frontend │ │ marketing │
119
+ │ +12 skills │ │ +8 skills │ │ +6 skills │
120
+ │ +coolify │ │ +playwright│ │ +seo-mcp │
121
+ └──────┬──────┘ └─────────────┘ └─────────────┘
122
+
123
+ ┌──────▼──────┐
124
+ │ medusa-dev │
125
+ │ +medusa/* │
126
+ │ +medusadocs│
127
+ └─────────────┘
128
+ ```
129
+
130
+ Child profiles inherit all skills, MCPs, and plugins from their parent. Override or extend — never duplicate.
131
+
132
+ ---
133
+
134
+ ## Skills are not just prompts
135
+
136
+ > **TL;DR** — a cue skill isn't a markdown file the model reads and forgets. It's a **wired capability** — a skill declares which CLIs it needs, which MCP tools it calls, and cue ensures all three layers (skill + MCP + CLI) are present and connected before the session starts.
137
+
138
+ Most "skill" tools stop at prompt injection: paste markdown into the context window and hope the model follows it. That works for style guides. It doesn't work for *doing things*.
139
+
140
+ A real capability has three layers:
141
+
142
+ | Layer | What it does | Example |
143
+ |---|---|---|
144
+ | **Skill** (the instruction) | Tells the model *when* and *how* to act | "When user says 'analyze video', extract frames at 1 fps…" |
145
+ | **MCP server** (the tool) | Gives the model a callable function | `video_watch`, `gbrain__put_page`, `excel__create_workbook` |
146
+ | **CLI** (the runtime) | The binary the MCP or skill shells out to | `ffmpeg`, `yt-dlp`, `whisper-cpp`, `uv` |
147
+
148
+ **Without cue**, you install these independently and pray they line up. A skill references an MCP that isn't running. An MCP calls a CLI that isn't installed. The model hallucinates a tool name because 40 other MCPs are polluting the namespace.
149
+
150
+ **With cue**, a profile declares all three as a unit:
151
+
152
+ ```yaml
153
+ # profiles/video/profile.yaml
154
+ skills:
155
+ local:
156
+ - design/headless-gif-demo # ← knows it needs ffmpeg
157
+ plugins:
158
+ - claude-video-vision@jordanrendric # ← registers video_watch MCP
159
+ mcps: [] # ← inherited gbrain from core
160
+ ```
161
+
162
+ `cue optimizer` then verifies the full stack:
163
+
164
+ ```
165
+ video profile
166
+ ✅ ffmpeg installed (/usr/bin/ffmpeg)
167
+ ✅ yt-dlp installed (~/.local/bin/yt-dlp)
168
+ ❌ whisper-cpp missing → brew install whisper-cpp
169
+ ✅ MCP: video_watch (claude-video-vision plugin)
170
+ ✅ MCP: gbrain (inherited from core)
171
+ ```
172
+
173
+ **The result:** when the model receives a skill, it's not reading a suggestion — it's reading a contract backed by tools that are actually there. Skills become reliable capabilities, not hopeful prompts.
174
+
70
175
  ---
71
176
 
72
177
  ## How cue compares
@@ -203,16 +308,16 @@ Each card shows what's actually loaded *plus* how often you've reached for each
203
308
 
204
309
  ---
205
310
 
206
- ## The 16-profile catalog
311
+ ## The 23-profile catalog
207
312
 
208
- > **TL;DR** — 16 profiles ship with cue: `core`, `backend`, `frontend`, `marketing`, `medusa-dev`, `cybersecurity`, `nvidia`, `creative-media`, `docs-writer`, `caveman-quick`, `coolify`, `hostinger`, `fleet-control`, `readme-writer`, `full`, plus the per-OS `setup` profile. Switch with `cue use <name>`.
313
+ > **TL;DR** — 23 profiles ship with cue: `core`, `backend`, `frontend`, `nextjs`, `python-api`, `rust`, `go-api`, `marketing`, `medusa-dev`, `cybersecurity`, `nvidia`, `creative-media`, `docs-writer`, `caveman-quick`, `coolify`, `hostinger`, `fleet-control`, `readme-writer`, `full`, `research`, `threejs`, `video`, `affiliate`, plus the per-OS `setup` profile. Switch with `cue use <name>`.
209
314
 
210
315
  <p align="center">
211
316
  <img src="./docs/assets/profiles-grid.svg" alt="The 16 profiles shipped with cue" width="820">
212
317
  </p>
213
318
 
214
319
  <details>
215
- <summary>📋 <b>All 16 profiles as a table</b> (for screen readers / LLM ingestion)</summary>
320
+ <summary>📋 <b>All 23 profiles as a table</b> (for screen readers / LLM ingestion)</summary>
216
321
 
217
322
  | Profile | Domain |
218
323
  |---|---|
@@ -231,6 +336,14 @@ Each card shows what's actually loaded *plus* how often you've reached for each
231
336
  | `hostinger` | Hostinger DNS, domain, VPS, hosting management. |
232
337
  | `fleet-control` | Multi-agent orchestration, Colony coordination, OMX flows. |
233
338
  | `full` | Diagnostic fallback — loads every local skill and MCP. |
339
+ | `research` | Deep research, literature review, citation management. |
340
+ | `threejs` | Three.js 3D scenes, shaders, WebGL, interactive visuals. |
341
+ | `video` | Video/GIF analysis — frame extraction, transcription, Claude Vision. |
342
+ | `affiliate` | Affiliate marketing, link management, conversion tracking. |
343
+ | `nextjs` | Next.js full-stack — App Router, Server Components, API routes, Vercel. |
344
+ | `python-api` | Python API — FastAPI, Django, Flask, SQLAlchemy, Alembic, pytest. |
345
+ | `rust` | Rust — cargo, async, traits, error handling, CLI tools, systems. |
346
+ | `go-api` | Go API — net/http, gin/echo/chi, GORM, migrations, testing. |
234
347
  | `setup` | Per-OS install assistant. |
235
348
 
236
349
  Canonical source: [`docs/data/profiles.md`](./docs/data/profiles.md).
@@ -245,6 +358,54 @@ claude # launches with medusa-dev's loadout
245
358
 
246
359
  ---
247
360
 
361
+ ## 🛠️ Create your own profile in 30 seconds
362
+
363
+ ```bash
364
+ cue new my-stack # scaffold profile.yaml
365
+ ```
366
+
367
+ Edit the generated file:
368
+
369
+ ```yaml
370
+ # profiles/my-stack/profile.yaml
371
+ name: my-stack
372
+ icon: "🔧"
373
+ description: My custom dev environment
374
+ inherits: core # gets claude-mem, caveman, RTK, gbrain
375
+ skills:
376
+ local:
377
+ - review/code-review
378
+ - meta/rtk-context-trim
379
+ mcps:
380
+ - gbrain
381
+ ```
382
+
383
+ Activate it:
384
+
385
+ ```bash
386
+ cue use my-stack # pin to current directory
387
+ cue doctor --fix # verify everything resolves
388
+ claude # launches with your loadout
389
+ ```
390
+
391
+ Want to start from what's already in a project? `cue init` scans your repo and suggests a profile based on detected languages, frameworks, and config files.
392
+
393
+ ---
394
+
395
+ ## 🌐 `cue share` — community profiles
396
+
397
+ > **TL;DR** — publish your profile as a GitHub Gist, browse what others have shared, install with one command.
398
+
399
+ ```bash
400
+ cue share publish --profile backend # upload to your GitHub Gists
401
+ cue share browse # see community profiles
402
+ cue share install <gist-id> # pull someone else's profile
403
+ ```
404
+
405
+ Shared profiles include the full `profile.yaml` + metadata (skill count, MCP list, description). Browse profiles others have published, fork them, or use them as a starting point for your own.
406
+
407
+ ---
408
+
248
409
  ## Install
249
410
 
250
411
  > **TL;DR** — `npm install -g cue-ai`, then `echo <profile> > .cue-profile` in any repo. Idempotent. No daemon. Uninstall with `install.sh --uninstall`.
@@ -283,6 +444,22 @@ claude
283
444
  | **gbrain** MCP | Personal wiki with embeddings + backlinks |
284
445
  | **excel-mcp** / **word-mcp** | Native `.xlsx` / `.docx` read & write |
285
446
 
447
+ ### 💰 Token savings stack
448
+
449
+ The combination of **profile isolation + RTK + caveman** compounds:
450
+
451
+ | Optimization | What it cuts | Savings |
452
+ |---|---|---|
453
+ | **Profile isolation** | Irrelevant skills/MCPs never loaded | 10–25× fewer context tokens |
454
+ | **RTK** | Filters `ls`, `git log`, `cat` output before it hits the model | 60–90% per shell command |
455
+ | **Caveman mode** | Terse responses, no filler | ~40% fewer output tokens |
456
+ | **Combined** | All three together | **$2.70 → $0.08/session** typical |
457
+
458
+ ```bash
459
+ rtk gain # see your cumulative RTK savings
460
+ cue cost # token budget for active profile
461
+ ```
462
+
286
463
  Want to **run 2+ agents in parallel on one repo**? Layer the optional **Colony + gitguardex** tier — see [`setup/parallel-agents.md`](./setup/parallel-agents.md). Skip it for solo work.
287
464
 
288
465
  ---
@@ -402,6 +579,46 @@ Plus the **brand logos** you see in the optimizer dashboard and hero come from e
402
579
 
403
580
  ---
404
581
 
582
+ ## Who uses cue
583
+
584
+ Projects and teams using `.cue-profile` in production:
585
+
586
+ | Project | Profile | What they do |
587
+ |---------|---------|-------------|
588
+ | [recodeee/cue](https://github.com/recodeee/cue) | `full`, `readme-writer` | This repo — dogfooding cue on itself |
589
+ | [recodeee/colony](https://github.com/recodeee/colony) | `fleet-control` | Multi-agent coordination MCP |
590
+ | [recodeee/gitguardex](https://github.com/recodeee/gitguardex) | `backend` | Branch + worktree isolation for parallel agents |
591
+
592
+ > **Using cue?** Add your project — open a PR or drop a link in [Discussions](https://github.com/recodeee/cue/discussions).
593
+
594
+ ---
595
+
596
+ ## Star History
597
+
598
+ <a href="https://star-history.com/#recodeee/cue&Date">
599
+ <picture>
600
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=recodeee/cue&type=Date&theme=dark" />
601
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=recodeee/cue&type=Date" />
602
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=recodeee/cue&type=Date" width="720" />
603
+ </picture>
604
+ </a>
605
+
606
+ ---
607
+
608
+ ## Who uses cue
609
+
610
+ Projects and teams using `.cue-profile` in production:
611
+
612
+ | Project | Profile | What they do |
613
+ |---------|---------|-------------|
614
+ | [recodeee/cue](https://github.com/recodeee/cue) | `full`, `readme-writer` | This repo — dogfooding cue on itself |
615
+ | [recodeee/colony](https://github.com/recodeee/colony) | `fleet-control` | Multi-agent coordination MCP |
616
+ | [recodeee/gitguardex](https://github.com/recodeee/gitguardex) | `backend` | Branch + worktree isolation for parallel agents |
617
+
618
+ > **Using cue?** Add your project — open a PR or drop a link in [Discussions](https://github.com/recodeee/cue/discussions).
619
+
620
+ ---
621
+
405
622
  ## Contributing
406
623
 
407
624
  Each skill is a folder with `SKILL.md` (frontmatter + body). The frontmatter `description` is what the LLM matches against — write it as `"when user says X, do Y"`. Copy an existing skill as a template, drop it under `resources/skills/skills/<category>/<slug>/`, and the catalog regenerates on the next sync.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cue-ai",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "cue — Agent Profile Manager for Claude Code & Codex. Pick a profile, launch with the right skills, MCPs, and plugins.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,7 +13,8 @@
13
13
  "scripts": {
14
14
  "cue": "bun src/index.ts",
15
15
  "test": "bun test",
16
- "build": "bun build src/index.ts --no-bundle"
16
+ "build": "bun build src/index.ts --no-bundle",
17
+ "postinstall": "echo '' && echo ' ✅ cue installed. Run: cue init' && echo ' Docs: https://github.com/recodeee/cue' && echo ''"
17
18
  },
18
19
  "keywords": [
19
20
  "claude-code",
@@ -0,0 +1,67 @@
1
+ name: affiliate
2
+ icon: "💰"
3
+ description: "Affiliate marketing flywheel — 52 skills across research, content, SEO, landing pages, distribution, analytics, and automation"
4
+ inherits: core
5
+ skills:
6
+ npx:
7
+ - repo: Affitor/affiliate-skills
8
+ skills:
9
+ # S1: Research & Discovery
10
+ - affiliate-program-search
11
+ - niche-opportunity-finder
12
+ - competitor-spy
13
+ - commission-calculator
14
+ - monopoly-niche-finder
15
+ - purple-cow-audit
16
+ - trending-content-scout
17
+ - content-angle-ranker
18
+ - traffic-analyzer
19
+ # S2: Content Creation
20
+ - viral-post-writer
21
+ - twitter-thread-writer
22
+ - reddit-post-writer
23
+ - tiktok-script-writer
24
+ - content-pillar-atomizer
25
+ - content-research-brief
26
+ - infographic-generator
27
+ # S3: Blog & SEO
28
+ - affiliate-blog-builder
29
+ - comparison-post-writer
30
+ - listicle-generator
31
+ - how-to-tutorial-writer
32
+ - keyword-cluster-architect
33
+ - content-moat-calculator
34
+ - content-decay-detector
35
+ # S4: Offers & Landing Pages
36
+ - landing-page-creator
37
+ - product-showcase-page
38
+ - squeeze-page-builder
39
+ - webinar-registration-page
40
+ - grand-slam-offer
41
+ - bonus-stack-builder
42
+ - guarantee-generator
43
+ - value-ladder-architect
44
+ # S5: Distribution & Deployment
45
+ - bio-link-deployer
46
+ - email-drip-sequence
47
+ - social-media-scheduler
48
+ - github-pages-deployer
49
+ # S6: Analytics & Optimization
50
+ - conversion-tracker
51
+ - ab-test-generator
52
+ - performance-report
53
+ - seo-audit
54
+ - internal-linking-optimizer
55
+ # S7: Automation & Scale
56
+ - email-automation-builder
57
+ - content-repurposer
58
+ - multi-program-manager
59
+ - paid-ad-copy-writer
60
+ - proprietary-data-generator
61
+ # S8: Meta
62
+ - skill-finder
63
+ - funnel-planner
64
+ - compliance-checker
65
+ - self-improver
66
+ - category-designer
67
+ mcps: []
@@ -0,0 +1,8 @@
1
+ name: go-api
2
+ icon: "🐹"
3
+ description: Go API development — net/http, gin/echo/chi, GORM, migrations, testing
4
+ inherits: core
5
+ skills:
6
+ local:
7
+ - review/code-review
8
+ mcps: []
@@ -1,6 +1,6 @@
1
1
  name: marketing
2
2
  icon: "🦜"
3
- description: Marketing — copywriting, SEO, CRO, growth, channels, brand
3
+ description: Marketing — copywriting, SEO, CRO, growth, channels, brand, awesome-list outreach, X/Twitter
4
4
  inherits: core
5
5
  skills:
6
6
  local:
@@ -8,5 +8,8 @@ skills:
8
8
  - design/gpt-taste
9
9
  - design/high-end-visual-design
10
10
  - design/imagegen-frontend-web
11
+ - meta/awesome-list-submit
12
+ mcps:
13
+ - x-api
11
14
  plugins:
12
15
  - marketing-skills@claude-code-skills
@@ -0,0 +1,8 @@
1
+ name: nextjs
2
+ icon: "▲"
3
+ description: Next.js full-stack — App Router, Server Components, API routes, Vercel deploy
4
+ inherits: frontend
5
+ skills:
6
+ local:
7
+ - review/code-review
8
+ mcps: []
@@ -0,0 +1,8 @@
1
+ name: python-api
2
+ icon: "🐍"
3
+ description: Python API development — FastAPI, Django, Flask, SQLAlchemy, Alembic, pytest
4
+ inherits: core
5
+ skills:
6
+ local:
7
+ - review/code-review
8
+ mcps: []
@@ -0,0 +1,8 @@
1
+ name: rust
2
+ icon: "🦀"
3
+ description: Rust development — cargo, async, traits, error handling, CLI tools, systems programming
4
+ inherits: core
5
+ skills:
6
+ local:
7
+ - review/code-review
8
+ mcps: []
@@ -0,0 +1,10 @@
1
+ name: video
2
+ icon: "🎬"
3
+ description: Video and GIF analysis — frame extraction, audio transcription, and visual understanding via ffmpeg + Claude Vision
4
+ inherits: core
5
+ skills:
6
+ local:
7
+ - design/headless-gif-demo
8
+ plugins:
9
+ - claude-video-vision@jordanrendric
10
+ mcps: []
@@ -113,8 +113,22 @@
113
113
  },
114
114
  "cue-tty-watch": {
115
115
  "command": "/home/deadpool/Documents/cue/resources/mcps/cue-tty-watch/bin/cue-tty-watch"
116
+ },
117
+ "x-api": {
118
+ "command": "npm",
119
+ "args": [
120
+ "start"
121
+ ],
122
+ "cwd": "${HOME}/.x-api-mcp",
123
+ "env": {
124
+ "X_API_KEY": "${X_API_KEY}",
125
+ "X_API_SECRET": "${X_API_SECRET}",
126
+ "X_BEARER_TOKEN": "${X_BEARER_TOKEN}",
127
+ "X_ACCESS_TOKEN": "${X_ACCESS_TOKEN}",
128
+ "X_ACCESS_TOKEN_SECRET": "${X_ACCESS_TOKEN_SECRET}"
129
+ }
116
130
  }
117
131
  },
118
132
  "source": "claude_runtime",
119
133
  "source_path": "~/.claude.json"
120
- }
134
+ }
@@ -1,10 +1,14 @@
1
1
  ---
2
- description: "When user asks to record a high-quality CLI demo GIF that needs Kitty graphics protocol (real PNG icons inline) — use this headless Xvfb + Kitty + tmux + ffmpeg pipeline instead of vhs/asciinema which don't speak the Kitty protocol"
3
- requires_mcps: []
4
- allowed-tools: Bash(Xvfb:*), Bash(kitty:*), Bash(tmux:*), Bash(xdotool:*), Bash(ffmpeg:*), Bash(/usr/bin/ffmpeg:*), Read(*), Write(*)
2
+ description: "When user asks to record a high-quality CLI demo GIF that needs Kitty graphics protocol (real PNG icons inline) — use this headless cage/Wayland + Kitty + tmux + ffmpeg pipeline instead of vhs/asciinema which don't speak the Kitty protocol. Includes auto-redaction of moving text via tesseract OCR."
3
+ requires_mcps: [cue-tty-watch]
4
+ allowed-tools: Bash(cage:*), Bash(weston:*), Bash(Xvfb:*), Bash(kitty:*), Bash(tmux:*), Bash(xdotool:*), Bash(wf-recorder:*), Bash(grim:*), Bash(ffmpeg:*), Bash(/usr/bin/ffmpeg:*), Bash(tesseract:*), Bash(convert:*), Read(*), Write(*), mcp__cue-tty-watch__*
5
5
  ---
6
6
 
7
- # Headless GIF demos with Kitty + tmux + Xvfb + ffmpeg
7
+ # Headless GIF demos with Cage (Wayland) + Kitty + tmux + auto-redaction
8
+
9
+ > Updated pipeline: prefer **cage** (headless wlroots compositor) over Xvfb when on a Wayland host.
10
+ > Kitty graphics protocol works through wf-recorder → real brand-icon PNGs render in the GIF.
11
+ > Tesseract OCR + `redact_video` MCP tool handles moving-text redaction automatically.
8
12
 
9
13
  When you need a demo GIF of a CLI tool that uses **Kitty graphics protocol** (e.g. cue's brand-logo PNGs in `cue optimizer`), `vhs` and `asciinema` won't work — they render in `ttyd` which doesn't speak the protocol. Logos show as garbled placeholder boxes or fall back to emoji.
10
14
 
@@ -20,15 +24,19 @@ This skill captures the working pipeline: spin up a virtual X display, run real
20
24
 
21
25
  ## Required tools
22
26
 
23
- | Tool | Install (apt) | Install (nix) |
27
+ | Tool | Purpose | Install |
24
28
  |---|---|---|
25
- | `Xvfb` | `sudo apt install xvfb` | `nix profile install nixpkgs#xorg.xorgserver` |
26
- | `xdotool` | `sudo apt install xdotool` | `nix profile install nixpkgs#xdotool` |
27
- | `ffmpeg` with `x11grab` | `sudo apt install ffmpeg` (**not** nix-pure ffmpeg — that one lacks x11grab) | `nix profile install nixpkgs#ffmpeg-full` |
28
- | `kitty` | already on your box | |
29
- | `tmux` | already on your box | |
30
-
31
- **Gotcha:** verify ffmpeg has x11grab with `ffmpeg -devices | grep x11`. nix's stock `ffmpeg` doesn't ship it use `/usr/bin/ffmpeg` (apt) or `ffmpeg-full` (nix).
29
+ | `cage` | Headless wlroots compositor (preferred over weston — speaks `wlr-screencopy`) | `sudo apt install cage` |
30
+ | `wf-recorder` | Wayland screen capture (needs wlroots compositor) | `sudo apt install wf-recorder` |
31
+ | `grim` | Wayland screenshot (for preflight checks) | `sudo apt install grim` |
32
+ | `kitty` | Terminal with graphics protocol — renders brand PNGs inline | already there |
33
+ | `tmux` | Drives the demo via `send-keys` (works on any display protocol) | already there |
34
+ | `/usr/bin/ffmpeg` (apt) | Used to convert mp4→gif. Nix's `ffmpeg` lacks `x11grab`/`palettegen` features sometimes — apt build is safer. | `sudo apt install ffmpeg` |
35
+ | `tesseract` | OCR for auto-redaction. Returns bounding boxes per word/line. | `sudo apt install tesseract-ocr tesseract-ocr-eng` |
36
+ | `ollama` + `moondream` | Optional: fast vision Q&A ("is the splash visible yet?") | `ollama pull moondream` |
37
+ | `opencv-python`, `scenedetect`, `numpy`, `pillow` | Vision scripting in `~/.venvs/video` (or similar) | `pip install opencv-python-headless scenedetect numpy pillow` |
38
+
39
+ **Fallback (X11-only systems):** `Xvfb` + `ffmpeg x11grab` + `xdotool`. Same shape, X-only verbs.
32
40
 
33
41
  ## The pipeline
34
42
 
@@ -166,3 +174,40 @@ Pathological capture (means kitty didn't render to Xvfb):
166
174
  3. Test-run; check the preflight screenshot is non-empty
167
175
  4. Iterate on timing — pickers and Claude Code splash both need 2–3 s headroom
168
176
  5. Commit both the script and the resulting GIF — re-running gives byte-identical output for a fixed tape
177
+
178
+ ## Auto-redaction with the cue-tty-watch MCP
179
+
180
+ When the demo captures sensitive moving text (email in a splash card that scrolls as content is added below), don't fight per-frame `drawbox` coordinates by hand. The `cue-tty-watch` MCP (autoloaded on every cue profile via `core` inheritance) wraps tesseract + scenedetect + moondream so the agent can do this automatically:
181
+
182
+ | MCP tool | Backed by | Use when |
183
+ |---|---|---|
184
+ | `screenshot(display)` | `xwd` / `grim` | "What's on the headless display right now?" |
185
+ | `tmux_pane(socket, session)` | `tmux capture-pane -p` | "What text did the inner shell render?" |
186
+ | `send_keys_tmux(...)` | `tmux send-keys` | Drive the demo non-interactively |
187
+ | `find_text(image, query)` | `tesseract` | Get `{x,y,w,h}` for every occurrence of a substring in a frame |
188
+ | `ask_about_image(image, q)` | `ollama` + `moondream` | Fast yes/no-style vision Q&A ("did the splash render?") |
189
+ | `detect_scenes(video)` | `scenedetect` (`ContentDetector`) | Find scene-cut timestamps automatically |
190
+ | **`redact_video(in, out, query)`** | All of the above | **One call**: walks the video, OCRs each sampled frame, finds `query`, builds per-frame drawbox+drawtext filter, encodes the output |
191
+
192
+ `redact_video` is the killer. The "email scrolls up as Claude responds and my fixed drawbox is in the wrong place" problem reduces to:
193
+
194
+ ```jsonc
195
+ // MCP call
196
+ {
197
+ "tool": "redact_video",
198
+ "input_path": "/tmp/cue-demo-raw.mp4",
199
+ "output_path": "/tmp/cue-demo-redacted.mp4",
200
+ "query": "webubusiness",
201
+ "label": "[ account info · redacted ]",
202
+ "samples_per_second": 4,
203
+ "pad": 6
204
+ }
205
+ ```
206
+
207
+ Then convert the redacted mp4 → gif with the standard 2-pass palette pipeline.
208
+
209
+ Why this beats the manual approach:
210
+ - No more 3-phase time-gated drawboxes that leak at transitions
211
+ - Adapts automatically to any future demo (different fonts, scroll speeds, splash layouts)
212
+ - Handles boundaries cleanly — text disappears one frame, box disappears the next
213
+ - Works for ANY moving sensitive text, not just the email row