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.
- package/README.md +225 -8
- package/package.json +3 -2
- package/profiles/affiliate/profile.yaml +67 -0
- package/profiles/go-api/profile.yaml +8 -0
- package/profiles/marketing/profile.yaml +4 -1
- package/profiles/nextjs/profile.yaml +8 -0
- package/profiles/python-api/profile.yaml +8 -0
- package/profiles/rust/profile.yaml +8 -0
- package/profiles/video/profile.yaml +10 -0
- package/resources/mcps/configs/claude_runtime.sanitized.json +15 -1
- package/resources/skills/skills/design/headless-gif-demo/SKILL.md +57 -12
- package/resources/skills/skills/meta/awesome-list-submit/SKILL.md +463 -0
- package/src/commands/_index.ts +44 -0
- package/src/commands/ai-score.e2e.test.ts +113 -0
- package/src/commands/ai.ts +179 -0
- package/src/commands/benchmark.ts +258 -0
- package/src/commands/clean.ts +109 -0
- package/src/commands/completions.ts +4 -0
- package/src/commands/cost.ts +77 -3
- package/src/commands/diff.ts +105 -0
- package/src/commands/import-profile.ts +28 -5
- package/src/commands/launch.e2e.test.ts +119 -0
- package/src/commands/launch.ts +19 -0
- package/src/commands/lock.ts +21 -1
- package/src/commands/marketplace.ts +88 -3
- package/src/commands/migrate.ts +100 -0
- package/src/commands/optimizer.ts +2 -2
- package/src/commands/replay-whatif.ts +142 -0
- package/src/commands/replay.ts +6 -0
- package/src/commands/score.ts +304 -0
- package/src/commands/security.ts +47 -7
- package/src/commands/shell.ts +17 -0
- package/src/commands/skills.ts +2 -2
- package/src/commands/status.ts +14 -0
- package/src/commands/suggest.ts +170 -0
- package/src/commands/upgrade.ts +154 -0
- package/src/index.ts +24 -1
- package/src/lib/analytics.ts +73 -1
- package/src/lib/auto-detect.ts +38 -5
- package/src/lib/cache.ts +47 -6
- package/src/lib/runtime-materializer.test.ts +22 -11
- package/src/lib/runtime-materializer.ts +58 -15
- 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
|
|
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
|
|
17
|
+
**Works with:** [](https://github.com/anthropics/claude-code) [](https://github.com/openai/codex) [](https://cursor.sh) [](https://github.com/cline/cline) [](https://github.com/google-gemini/gemini-cli) [](https://github.com/features/copilot) [](https://windsurf.com) [](https://github.com/RooVetGit/Roo-Code) [](https://sourcegraph.com/amp) [](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
|
|
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
|
|
311
|
+
## The 23-profile catalog
|
|
207
312
|
|
|
208
|
-
> **TL;DR** —
|
|
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
|
|
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.
|
|
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: []
|
|
@@ -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,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
|
|
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
|
|
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 |
|
|
27
|
+
| Tool | Purpose | Install |
|
|
24
28
|
|---|---|---|
|
|
25
|
-
| `
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `kitty` |
|
|
29
|
-
| `tmux` |
|
|
30
|
-
|
|
31
|
-
|
|
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
|