cue-ai 0.3.0 → 0.4.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 CHANGED
@@ -1,305 +1,411 @@
1
- # cue — Agent Profile Manager for Claude Code & Codex
1
+ <p align="center">
2
+ <img src="./docs/assets/hero.svg" alt="cue — Agent Profile Manager for Claude Code & Codex" width="820">
3
+ </p>
2
4
 
3
- > Pick a profile. Launch with the right skills, MCPs, and plugins. Nothing else.
5
+ <p align="center">
6
+ <a href="https://www.npmjs.com/package/cue-ai"><img src="https://img.shields.io/npm/v/cue-ai?style=flat-square&label=npm&color=6366f1" alt="npm version"></a>
7
+ <a href="https://www.npmjs.com/package/cue-ai"><img src="https://img.shields.io/npm/dw/cue-ai?style=flat-square&label=downloads&color=22c55e" alt="npm downloads"></a>
8
+ <a href="https://github.com/recodeee/cue/stargazers"><img src="https://img.shields.io/github/stars/recodeee/cue?style=flat-square&label=★&color=fbbf24" alt="GitHub stars"></a>
9
+ <a href="https://github.com/recodeee/cue/commits/main"><img src="https://img.shields.io/github/last-commit/recodeee/cue?style=flat-square&label=last%20commit&color=ec4899" alt="last commit"></a>
10
+ <a href="./LICENSE"><img src="https://img.shields.io/github/license/recodeee/cue?style=flat-square&color=8b5cf6" alt="MIT license"></a>
11
+ </p>
4
12
 
5
- `cue` is a CLI that sits between your shell and the agent binary. Type `claude` or `codex` and `cue` intercepts: it resolves which profile applies in the current directory, materializes an isolated `CLAUDE_CONFIG_DIR` (or `CODEX_HOME`) with just that profile's skills, MCP servers, and Claude Code plugins, then exec's the real agent. Per-directory pins mean the right loadout follows the project, not the terminal session.
13
+ # cue Agent Profile Manager for Claude Code, Codex & 8 more
6
14
 
7
- ## Why cue?
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.**
16
+
17
+ **Works with:** Claude Code · Codex · Cursor · Cline · Gemini · GitHub Copilot · Windsurf · Roo Code · Amp · Aider &nbsp;→ &nbsp; [jump to the full matrix ↓](#agents-cue-supports)
18
+
19
+ ## ⚡ 60-second quickstart
20
+
21
+ ```bash
22
+ npm install -g cue-ai # 1. install
23
+ cd ~/projects/q4-launch && echo marketing > .cue-profile # 2. pin a profile to this repo
24
+ claude # 3. boots with only the marketing loadout
25
+ ```
26
+
27
+ That's it. `cd` into any other repo and `claude` will boot with that repo's profile instead — no flags, no env vars, no daemon.
28
+
29
+ <p align="center">
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
+ </p>
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
+ <details>
36
+ <summary>📑 <b>Table of contents</b></summary>
37
+
38
+ - [Why a profile manager at all?](#why-a-profile-manager-at-all)
39
+ - [How cue compares](#how-cue-compares)
40
+ - [How it works](#how-it-works)
41
+ - [Agents cue supports](#agents-cue-supports)
42
+ - [`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
+ - [Install](#install)
45
+ - [What ships with each profile](#what-ships-with-each-profile-the-lean-stack)
46
+ - [FAQ](#faq)
47
+ - [Repo layout](#repo-layout)
48
+ - [Built with / built on](#built-with--built-on)
49
+ - [Contributing](#contributing)
50
+
51
+ </details>
52
+
53
+ ---
54
+
55
+ ## Why a profile manager at all?
56
+
57
+ > **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.
58
+
59
+ <p align="center">
60
+ <img src="./docs/assets/isolation-comparison.svg" alt="Per-session loadout — without cue vs with cue" width="820">
61
+ </p>
8
62
 
9
63
  - **Per-profile isolation.** Skills, MCP servers, and Claude Code plugins are scoped to the active profile. Marketing work doesn't see frontend's MCPs; backend doesn't see design's skills. No more "every session has every tool" overload.
10
64
  - **Directory-aware.** Pin a profile to a directory (`.cue-profile`), and every `claude` / `codex` you launch from inside boots with that loadout automatically. No flag wrangling.
11
65
  - **Composable.** Profiles inherit from a `core` baseline so cross-session memory (claude-mem) and meta skills are shared by default. Add team-wide tools in one place.
12
66
  - **Pre-launch picker.** First time you type `claude` in a fresh directory, a TUI picker opens. Pin or one-shot — your choice.
13
- - **Materialized, hash-short-circuited.** Each launch rebuilds the runtime only when the resolved profile actually changed. Cold-start cost is a stat + sha256 compare.
67
+ - **Materialized, hash-short-circuited.** Each launch rebuilds the runtime only when the resolved profile actually changed. Cold-start cost is a `stat()` + sha256 compare.
14
68
  - **No service to run.** No daemon, no background process, no auto-update. Just a Bun CLI and a shim script in `~/.local/bin`.
15
69
 
16
- ## Repo layout
70
+ ---
17
71
 
18
- - `profiles/` one directory per profile; a YAML decides what loads. Inheritance chains depth-3, agents=[claude-code|codex] scoping per resource.
19
- - `resources/skills/` — local skill library composed into profiles. Source for the `skills/local:` field.
20
- - `resources/mcps/` — MCP server configs (`claude.sanitized.json`, `codex.sanitized.json`) composed into profiles.
21
- - `plugins/cue/` — the Claude Code plugin shipping `/cue`, `/cue switch`, `/cue reload`, `/cue current` slash commands.
22
- - `src/` — the Bun CLI itself: `commands/`, `lib/{cwd-resolver,picker,runtime-materializer,...}`.
23
- - `setup/` — per-OS install prompts you can paste into an agent session.
24
- - `docs/` — `launch.md` (hot-path flow), `shell-install.md` (shim install + PATH), `superpowers/specs/` (design + plans).
72
+ ## How cue compares
25
73
 
26
- License: [MIT](./LICENSE).
74
+ > **TL;DR** — `claude-code-switcher` swaps MCPs only; `skillport` / `skillshub` / `agent-skills-cli` / `agent-skill-manager` / `add-skills` deliver skills only; Kiro Powers is IDE-locked. **cue is the only tool that composes skills + MCPs + plugins together, per-directory, with inheritance and materialized isolation.**
27
75
 
28
- ---
76
+ <p align="center">
77
+ <img src="./docs/assets/comparison.svg" alt="Feature matrix: cue is the only tool covering skills + MCPs + plugins + profiles + per-directory + isolation + inheritance" width="880">
78
+ </p>
29
79
 
30
- ## Install (one line)
80
+ Several tools touch parts of the problem — switching MCP configs, distributing skills, installing from marketplaces. **cue is the only one that treats the full agent loadout (skills + MCPs + plugins) as a composable, inheritable, directory-aware profile system.**
31
81
 
32
- ```bash
33
- curl -fsSL https://raw.githubusercontent.com/recodeee/cue/main/get.sh | bash
34
- ```
82
+ Quick links to each tool: [`claude-code-switcher`](https://github.com/search?q=claude-code-switcher) · [`skillport`](https://github.com/search?q=skillport) · [`agent-skills-cli`](https://github.com/search?q=agent-skills-cli) · [`agent-skill-manager`](https://pypi.org/project/agent-skill-manager/) · [`skillshub`](https://github.com/search?q=skillshub) · [`add-skills`](https://github.com/search?q=add-skills) · **Kiro Powers** (IDE-only).
35
83
 
36
- This installs bun (if needed), clones the repo to `~/Documents/cue`, and runs the interactive installer.
84
+ <details>
85
+ <summary>📊 <b>Same matrix as a markdown table</b> (for screen readers / LLM ingestion)</summary>
37
86
 
38
- **Options:**
87
+ | Tool | skills | MCPs | plugins | profiles | per-dir | isolation | inherit |
88
+ |---|---|---|---|---|---|---|---|
89
+ | **cue** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
90
+ | claude-code-switcher | — | ✅ | — | ◐ | — | — | — |
91
+ | skillport | ✅ | — | — | — | — | — | — |
92
+ | agent-skills-cli | ✅ | — | — | — | — | — | — |
93
+ | agent-skill-manager | ✅ | — | — | — | — | — | — |
94
+ | skillshub | ✅ | — | — | — | — | — | — |
95
+ | add-skills | ✅ | — | — | — | — | — | — |
96
+ | Kiro Powers | ✅ | ✅ | — | — | ◐ | — | — |
39
97
 
40
- ```bash
41
- # Non-interactive (auto-yes)
42
- curl -fsSL https://raw.githubusercontent.com/recodeee/cue/main/get.sh | bash -s -- --yes
98
+ Canonical source: [`docs/data/comparison.md`](./docs/data/comparison.md).
43
99
 
44
- # Custom install location
45
- CUE_DIR=~/dev/cue curl -fsSL https://raw.githubusercontent.com/recodeee/cue/main/get.sh | bash
46
- ```
100
+ </details>
47
101
 
48
- **Or clone manually:**
102
+ **Where cue is the only one:**
49
103
 
50
- ```bash
51
- git clone https://github.com/recodeee/cue.git ~/Documents/cue && ~/Documents/cue/install.sh
52
- ```
104
+ 1. **`.cue-profile` per-directory pinning** — `cd` into a repo, the right loadout loads automatically.
105
+ 2. **Materialized isolation** builds a real `CLAUDE_CONFIG_DIR` per profile, not just a config swap.
106
+ 3. **Hash-cached rebuilds** — content-addressed sha256 check, <5 ms when unchanged.
107
+ 4. **Three dimensions as one unit** — skills + MCPs + plugins composed together. Others manage one at a time.
108
+ 5. **Inheritance with merge semantics** — `core → backend → medusa-dev` chains; child overrides parent cleanly.
109
+ 6. **Shim-based interception** — type `claude` like always. The right environment just shows up.
110
+ 7. **No daemon** — pure CLI, no background process, nothing to monitor.
111
+ 8. **`cue optimizer` dashboard** — visual audit of every profile's loadout, install status, and per-skill usage scanned from your actual session transcripts.
53
112
 
54
- `install.sh` is interactive: it installs the `claude` shim by default and asks before touching `codex` (in case you already have a wrapper there). Non-interactive variants:
113
+ ---
55
114
 
56
- ```bash
57
- ~/Documents/cue/install.sh --yes # install claude shim, skip codex prompt
58
- ~/Documents/cue/install.sh --yes --codex # install both shims (clobbers existing codex on PATH)
59
- ~/Documents/cue/install.sh --uninstall # remove the symlinks, leave the repo
60
- ```
115
+ ## How it works
61
116
 
62
- ### What the installer does
117
+ > **TL;DR** — three steps on every `claude`/`codex` invocation: **resolve** the profile from `.cue-profile` (walks up to `$HOME`), **materialize** `~/.config/cue/runtime/<profile>/` if the content hash changed, then **exec** the real binary with `CLAUDE_CONFIG_DIR` / `CODEX_HOME` set.
63
118
 
64
- 1. Verifies `git` and `bun` (Bun ≥ 1.0; install from https://bun.sh)
65
- 2. Runs `bun install` inside the repo
66
- 3. Self-checks `bin/cue --version`
67
- 4. Symlinks `~/.local/bin/cue` → `<repo>/bin/cue`
68
- 5. Checks that `~/.local/bin` is on your `$PATH` (warns if not)
69
- 6. Writes the `~/.local/bin/claude` shim (and optionally `codex`)
119
+ <p align="center">
120
+ <img src="./docs/assets/architecture.svg" alt="Launch flow: resolve materialize → exec" width="820">
121
+ </p>
70
122
 
71
- Idempotent. Safe to re-run on any machine that already has cue installed.
123
+ Typing `claude` or `codex` in a repo where cue's shims are installed triggers a three-step launch flow:
72
124
 
73
- ### After install
125
+ 1. **Resolve** — cue checks for a `.cue-profile` file in the current directory (or any parent up to `$HOME`). If none is found, it falls back to a repo-level default, a global default, or opens the TUI picker.
126
+ 2. **Materialize** — cue builds `~/.config/cue/runtime/<profile>/{claude,codex}/` with a content-addressed hash check. If the profile hasn't changed, this is a no-op.
127
+ 3. **Exec** — the real `claude` or `codex` binary is launched with `CLAUDE_CONFIG_DIR` (or `CODEX_HOME`) pointing at the materialized runtime tree.
128
+
129
+ Full resolve-precedence rules and bypass paths: **[docs/launch.md](./docs/launch.md)**.
130
+
131
+ ---
132
+
133
+ ## Agents cue supports
134
+
135
+ > **TL;DR** — **10 agents**: Claude Code, Codex, Cursor, Cline, Gemini CLI, GitHub Copilot, Windsurf, Roo Code, Sourcegraph Amp, Aider. One `profile.yaml` materializes into each agent's native format (`.cursorrules`, `.clinerules`, `~/.gemini/skills/*.md`, `.github/copilot-instructions.md`, etc.).
136
+
137
+ Originally built for Claude Code & Codex — now **one profile, ten agents**. The same `profile.yaml` (skills + MCPs) materializes into the exact format each agent expects.
74
138
 
75
139
  ```bash
76
- cd ~/projects/q4-launch-campaign
77
- echo marketing > .cue-profile
78
- claude # boots with the marketing profile's skills, MCPs, and plugins
140
+ cue materialize cursor --profile backend # → .cursorrules + .cursor/mcp.json
141
+ cue materialize cline --profile backend # → .clinerules + cline_mcp_settings.json
142
+ cue materialize --all --profile backend # all agents in this profile
79
143
  ```
80
144
 
81
- See [docs/launch.md](./docs/launch.md) for the resolve materialize exec flow.
145
+ | Agent | `cue materialize` command | What gets written |
146
+ |---|---|---|
147
+ | **Claude Code** | (default — uses shim) | `~/.config/cue/runtime/<profile>/claude/` |
148
+ | **OpenAI Codex** | (default — uses shim) | `~/.config/cue/runtime/<profile>/codex/` |
149
+ | **Cursor** | `cue materialize cursor` | `.cursorrules` · `.cursor/mcp.json` |
150
+ | **Cline** | `cue materialize cline` | `.clinerules` · `cline_mcp_settings.json` |
151
+ | **Google Gemini CLI** | `cue materialize gemini` | `~/.gemini/skills/*.md` |
152
+ | **GitHub Copilot** | `cue materialize copilot` | `.github/copilot-instructions.md` |
153
+ | **Windsurf** | `cue materialize windsurf` | `.windsurfrules` · `.windsurf/mcp.json` |
154
+ | **Roo Code** | `cue materialize roo` | `.roo/rules/*.md` · `.roo/mcp.json` |
155
+ | **Sourcegraph Amp** | `cue materialize amp` | `AGENTS.md` · `.amp/mcp.json` |
156
+ | **Aider** | `cue materialize aider` | `.aider.conventions.md` |
157
+
158
+ Each adapter writes skills + MCPs in the precise format that agent expects — Cursor's `.cursorrules` syntax, Gemini's per-skill markdown, Copilot's instruction file, etc. **Same profiles, same skills, any agent.** Switch from Claude Code to Cursor on the same repo without touching a single skill definition.
159
+
160
+ See [`src/commands/materialize.ts`](./src/commands/materialize.ts) for the full flag set (`--all`, `--profile`, `--dir`, dry-run).
82
161
 
83
162
  ---
84
163
 
85
- ## Quick installpick your OS (legacy soul flow)
164
+ ## `cue optimizer`see every loadout at a glance
86
165
 
87
- Two paths per OS:
166
+ > **TL;DR** — `cue optimizer` prints a visual audit of every profile: skills loaded, MCP servers, required CLIs (install status ✅/❌), GitHub sources, and per-skill usage bars computed from your local session transcripts. No telemetry.
88
167
 
89
- - **Direct** copy a shell block, paste in a terminal, runs the install end-to-end.
90
- - **Agent-driven** — paste the corresponding `setup/<os>.md` into Claude Code as your first message; it walks you through the phases interactively (recommended if you've never set this up).
168
+ Run it once and you get a dashboard of every profile: skills (with per-session usage), MCP servers, required CLIs (with install status ✅/❌), GitHub sources, and brand icons.
91
169
 
92
- The shell blocks below trigger GitHub's "copy" button when you hover over them on github.com — one click to clipboard.
170
+ <p align="center">
171
+ <img src="./docs/assets/optimizer-dashboard.svg" alt="cue optimizer summary: 16 profiles, 1,927 skills, 15 MCPs, 79 CLIs" width="820">
172
+ </p>
93
173
 
94
- ### macOS
174
+ What the optimizer scans for you:
95
175
 
96
- Open **Terminal** (⌘+Space → "Terminal"), paste, run once:
176
+ - Every `profile.yaml` (inheritance resolved, `*` wildcards expanded)
177
+ - Each skill's frontmatter for `allowed-tools` and `## Prerequisites` → required CLIs
178
+ - `which <cli>` for every CLI → install status per profile
179
+ - `~/.claude/projects/**/*.jsonl` → per-skill usage counts across all sessions
180
+ - `~/skills-lock.json` → which GitHub repo each skill came from
181
+
182
+ ### Terminal output
183
+
184
+ <p align="center">
185
+ <img src="./docs/assets/terminal-optimizer.svg" alt="cue optimizer running in the terminal" width="820">
186
+ </p>
187
+
188
+ > 🐱 **Recommended terminal: [Kitty](https://sw.kovidgoyal.net/kitty/).** cue's optimizer renders bar charts, gradients, brand glyphs, and inline images via the Kitty graphics protocol. It also works in [WezTerm](https://wezfurlong.org/wezterm/) and [Ghostty](https://ghostty.org/) — but inside macOS Terminal or stock `gnome-terminal` you'll see the ASCII fallback (still readable, just less pretty).
97
189
 
98
190
  ```bash
99
- # 1. Homebrew
100
- [ -x "$(command -v brew)" ] || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
101
- # 2. Core tools
102
- brew install bun node@22 python@3.12 uv jq rtk
103
- # 3. Claude Code
104
- curl -fsSL https://claude.ai/install.sh | sh
105
- # 4. RTK token-savings hook
106
- rtk init -g
107
- echo "Setup complete. Run: claude — then paste setup/macos.md as your first message."
191
+ cue optimizer # all profiles
192
+ cue optimizer backend # just one
193
+ cue optimizer --expand # expand grouped skills (useful for cybersecurity's 754)
108
194
  ```
109
195
 
110
- Full agent-driven prompt: **[setup/macos.md](./setup/macos.md)** (paste into Claude Code)
196
+ ### A single profile, expanded
111
197
 
112
- ### Linux (Ubuntu / Debian / Fedora / Arch)
198
+ <p align="center">
199
+ <img src="./docs/assets/profile-card.svg" alt="frontend profile — skills, MCPs, CLIs, per-session usage" width="820">
200
+ </p>
201
+
202
+ Each card shows what's actually loaded *plus* how often you've reached for each skill. The bar chart is computed from your local session transcripts — no telemetry leaves the machine.
203
+
204
+ ---
205
+
206
+ ## The 16-profile catalog
207
+
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>`.
209
+
210
+ <p align="center">
211
+ <img src="./docs/assets/profiles-grid.svg" alt="The 16 profiles shipped with cue" width="820">
212
+ </p>
213
+
214
+ <details>
215
+ <summary>📋 <b>All 16 profiles as a table</b> (for screen readers / LLM ingestion)</summary>
216
+
217
+ | Profile | Domain |
218
+ |---|---|
219
+ | `core` | Baseline shared by every profile — claude-mem, caveman, RTK, gbrain. |
220
+ | `backend` | APIs, webhooks, security review, CI, packaging, databases. |
221
+ | `frontend` | UI implementation, redesign, screenshots, browser testing. |
222
+ | `marketing` | Copywriting, SEO, CRO, growth, channels, brand. |
223
+ | `medusa-dev` | Medusa v2 backend, storefront, admin, migration, shop setup. |
224
+ | `cybersecurity` | 754 cybersecurity skills (red/blue team, forensics, DFIR). |
225
+ | `nvidia` | NVIDIA cuOpt: routing, LP/MILP, GPU-accelerated optimization. |
226
+ | `creative-media` | Image, video, product asset, brand, visual generation. |
227
+ | `docs-writer` | Documentation, Markdown, PDF, Obsidian, structured writing. |
228
+ | `readme-writer` | Beautiful README design with SVG diagrams. |
229
+ | `caveman-quick` | Fast low-context edits, summaries, reviews, notes, commits. |
230
+ | `coolify` | Coolify deploys, server config, app env vars, CI. |
231
+ | `hostinger` | Hostinger DNS, domain, VPS, hosting management. |
232
+ | `fleet-control` | Multi-agent orchestration, Colony coordination, OMX flows. |
233
+ | `full` | Diagnostic fallback — loads every local skill and MCP. |
234
+ | `setup` | Per-OS install assistant. |
235
+
236
+ Canonical source: [`docs/data/profiles.md`](./docs/data/profiles.md).
237
+
238
+ </details>
113
239
 
114
240
  ```bash
115
- # 1. System packages
116
- if command -v apt >/dev/null; then sudo apt update && sudo apt install -y curl git jq build-essential python3 python3-pip
117
- elif command -v dnf >/dev/null; then sudo dnf install -y curl git jq @development-tools python3 python3-pip
118
- elif command -v pacman >/dev/null; then sudo pacman -S --noconfirm curl git jq base-devel python python-pip
119
- fi
120
- # 2. Bun
121
- [ -x "$(command -v bun)" ] || curl -fsSL https://bun.sh/install | bash
122
- export PATH="$HOME/.bun/bin:$HOME/.local/bin:$PATH"
123
- # 3. uv (Python venv manager)
124
- [ -x "$(command -v uv)" ] || curl -LsSf https://astral.sh/uv/install.sh | sh
125
- # 4. RTK
126
- [ -x "$(command -v rtk)" ] || (curl -fsSL https://github.com/rtk-ai/rtk/releases/latest/download/rtk-x86_64-unknown-linux-gnu.tar.gz | tar xz -C /tmp && sudo install /tmp/rtk /usr/local/bin/rtk)
127
- # 5. Claude Code
128
- curl -fsSL https://claude.ai/install.sh | sh
129
- rtk init -g
130
- echo "Setup complete. Run: claude — then paste setup/linux.md as your first message."
241
+ cue list # show all
242
+ cue use medusa-dev # pin to current directory
243
+ claude # launches with medusa-dev's loadout
131
244
  ```
132
245
 
133
- → Full agent-driven prompt: **[setup/linux.md](./setup/linux.md)**
246
+ ---
134
247
 
135
- ### Windows 10 / 11 (PowerShell)
248
+ ## Install
136
249
 
137
- Open **PowerShell**. First-time only:
250
+ > **TL;DR** — `npm install -g cue-ai`, then `echo <profile> > .cue-profile` in any repo. Idempotent. No daemon. Uninstall with `install.sh --uninstall`.
138
251
 
139
- ```powershell
140
- Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
252
+ ```bash
253
+ npm install -g cue-ai
141
254
  ```
142
255
 
143
- Then:
144
-
145
- ```powershell
146
- # 1. Core tools via winget
147
- winget install --id OpenJS.NodeJS.LTS --silent --accept-source-agreements --accept-package-agreements
148
- winget install --id Python.Python.3.12 --silent --accept-source-agreements --accept-package-agreements
149
- winget install --id stedolan.jq --silent --accept-source-agreements --accept-package-agreements
150
- winget install --id Git.Git --silent --accept-source-agreements --accept-package-agreements
151
- $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
152
- # 2. Bun + uv
153
- if (-not (Get-Command bun -ErrorAction SilentlyContinue)) { irm bun.sh/install.ps1 | iex }
154
- if (-not (Get-Command uv -ErrorAction SilentlyContinue)) { irm https://astral.sh/uv/install.ps1 | iex }
155
- # 3. Claude Code via npm
156
- npm install -g @anthropic-ai/claude-code
157
- # 4. RTK
158
- if (-not (Get-Command rtk -ErrorAction SilentlyContinue)) {
159
- Invoke-WebRequest -Uri "https://github.com/rtk-ai/rtk/releases/latest/download/rtk-x86_64-pc-windows-msvc.zip" -OutFile "$env:TEMP\rtk.zip"
160
- Expand-Archive -Path "$env:TEMP\rtk.zip" -DestinationPath "$env:USERPROFILE\.local\bin" -Force
161
- }
162
- rtk init -g
163
- Write-Host "Setup complete. Run: claude — then paste setup/windows.md as your first message."
256
+ That's it. Then in any project:
257
+
258
+ ```bash
259
+ cd ~/projects/q4-launch
260
+ echo marketing > .cue-profile
261
+ claude
164
262
  ```
165
263
 
166
- Full agent-driven prompt: **[setup/windows.md](./setup/windows.md)**
264
+ **Other install paths** (pick what you prefer):
167
265
 
168
- (WSL2 user? Use the Linux block inside your WSL distro instead — cleaner.)
266
+ | Path | Command |
267
+ |---|---|
268
+ | **One-line script** | `curl -fsSL https://raw.githubusercontent.com/recodeee/cue/main/get.sh \| bash` |
269
+ | **Manual clone** | `git clone https://github.com/recodeee/cue.git ~/Documents/cue && ~/Documents/cue/install.sh` |
270
+ | **Per-OS bootstrap (agent-driven)** | paste [`setup/macos.md`](./setup/macos.md) · [`setup/linux.md`](./setup/linux.md) · [`setup/windows.md`](./setup/windows.md) into Claude Code |
271
+
272
+ `install.sh --help` lists `--yes`, `--codex`, `--uninstall`. Idempotent — safe to re-run.
169
273
 
170
274
  ---
171
275
 
172
- ## Optional Parallel agents tier (Colony + gitguardex)
276
+ ## What ships with each profile (the lean stack)
173
277
 
174
- If you want to run **2+ Codex/Claude agents in parallel on the same repo** without them stomping on each other, layer this tier on top of the lean stack:
278
+ | Layer | What it does |
279
+ |---|---|
280
+ | **claude-mem** plugin | Passive observation capture; `mem-search "topic"` recalls across sessions |
281
+ | **caveman** plugin | `/caveman` terse mode, `/caveman-commit` Conventional Commits |
282
+ | **RTK** CLI hook | Filters shell output — 60-90% token savings on `ls` / `git` / `cat` |
283
+ | **gbrain** MCP | Personal wiki with embeddings + backlinks |
284
+ | **excel-mcp** / **word-mcp** | Native `.xlsx` / `.docx` read & write |
175
285
 
176
- - **[recodeee/gitguardex](https://github.com/recodeee/gitguardex)** `gx` CLI. Per-agent branch + worktree isolation, file locks, PR-only merges.
177
- - **[recodeee/colony](https://github.com/recodeee/colony)** — Local-first MCP for fleet coordination. Replaces 30k-token repo handoffs with ~400-token compact state in SQLite at `~/.colony`. Auto-detects file claims, task graphs, and prior decisions so agents see ownership before editing.
286
+ 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.
178
287
 
179
- → Full setup prompt: **[setup/parallel-agents.md](./setup/parallel-agents.md)** (Linux + macOS; Windows via WSL2)
288
+ ---
180
289
 
181
- Skip this tier if you only ever run one Claude Code window at a time — claude-mem + gbrain are enough for solo work.
290
+ ## FAQ
182
291
 
183
- ---
292
+ <details>
293
+ <summary><b>Why not just use <code>~/.claude/</code> like everyone else?</b></summary>
184
294
 
185
- ## How it works
295
+ That's exactly the problem cue solves. `~/.claude/` is one global folder shared across every repo, so every session loads every skill, every MCP, and every plugin you've ever installed. The model burns tokens picking through irrelevant tools and frequently picks the wrong one. cue gives each project its own isolated `CLAUDE_CONFIG_DIR` materialized just-in-time — only what that project needs.
296
+ </details>
186
297
 
187
- Typing `claude` or `codex` in a repo where cue's shims are installed triggers the launch flow:
298
+ <details>
299
+ <summary><b>Does this break Claude Code's auto-update?</b></summary>
188
300
 
189
- 1. **Resolve** — cue checks for a `.cue-profile` file in the current directory (or any parent up to `$HOME`). If none is found, it falls back to a repo-level default, a global default, or opens the TUI picker.
190
- 2. **Materialize** — cue builds `~/.config/cue/runtime/<profile>/{claude,codex}/` with a content-addressed hash check. If the profile hasn't changed, this is a no-op.
191
- 3. **Exec** — the real `claude` or `codex` binary is launched with `CLAUDE_CONFIG_DIR` (or `CODEX_HOME`) pointing at the materialized runtime tree.
301
+ No. cue doesn't touch the `claude` binary it just intercepts the *call*, sets `CLAUDE_CONFIG_DIR`, and execs the real binary at the end of the shim. Claude Code's update mechanism still runs the same way.
302
+ </details>
192
303
 
193
- The shims are a one-time install: `cue shell install`. See **[docs/launch.md](./docs/launch.md)** for the full resolve-precedence rules and bypass paths.
304
+ <details>
305
+ <summary><b>Can I use cue with only Codex (no Claude Code)?</b></summary>
194
306
 
195
- ---
307
+ Yes. Run `cue shell install --codex-only` (or skip the `claude` shim during interactive install). cue scopes resources per-agent in `profile.yaml`, so a Codex-only profile only materializes `CODEX_HOME`.
308
+ </details>
196
309
 
197
- ## Profiles
310
+ <details>
311
+ <summary><b>What if I only want one global profile and never want to think about this?</b></summary>
198
312
 
199
- Profiles keep each Claude Code or Codex session lean by materializing only the skills and MCPs needed for the current job.
313
+ Set a global default with `cue use <profile> --global`. cue will use it for every directory that doesn't have its own `.cue-profile`. The picker stops appearing.
314
+ </details>
200
315
 
201
- ```bash
202
- cue list
203
- cue use medusa-dev
204
- cd profiles/medusa-dev/workspace && claude
205
- ```
316
+ <details>
317
+ <summary><b>Is this a daemon or background service?</b></summary>
206
318
 
207
- Each profile carries an emoji icon shown in the picker:
319
+ No. cue is a pure CLI when you type `claude`, the shim runs `cue launch`, which does a `stat()` + sha256 compare, materializes the runtime if anything changed (else no-op), and then `exec`s the real binary. Nothing stays resident. Nothing to monitor. Nothing to `systemctl restart`.
320
+ </details>
208
321
 
209
- ```
210
- 🐻 backend APIs, webhooks, security review, CI, package, …
211
- 🦋 frontend Frontend UI implementation, redesign, screenshots, …
212
- 🦜 marketing Marketing — copywriting, SEO, CRO, growth, …
213
- 🦉 research Source-backed lookup, extraction, market research
214
- 🐺 fleet-control Multi-agent orchestration, Colony, OMX, gx
215
- 🦚 creative-media Image, video, brand, visual generation
216
- 🐝 docs-writer Markdown, PDF, Obsidian, structured writing
217
- 🐆 caveman-quick Fast low-context edits, summaries, reviews
218
- 🦄 full Diagnostic profile — every local skill + MCP
219
- 🐢 core Shared baseline (claude-mem, meta skills, …)
220
- ```
322
+ <details>
323
+ <summary><b>How fast is the launch overhead?</b></summary>
221
324
 
222
- Pick or change an icon: `cue icon <profile>` (interactive emoji picker).
325
+ Cold start (first launch of a new profile): typically 50–200 ms depending on how many skills + MCPs are linked. Warm start (profile unchanged): &lt;5 ms — just a sha256 compare and an `exec`. Both are imperceptible vs. Claude Code's own startup.
326
+ </details>
223
327
 
224
- The active profile is also stamped at the top of the materialized `CLAUDE.md`,
225
- so `/goal` inside Claude Code shows which profile is loaded.
328
+ <details>
329
+ <summary><b>Does cue send telemetry anywhere?</b></summary>
226
330
 
227
- ### Saving the current session as a profile
331
+ No. Everything cue computes (including the per-skill usage bars in `cue optimizer`) is read from your local `~/.claude/projects/**/*.jsonl` session transcripts. Nothing leaves the machine.
332
+ </details>
228
333
 
229
- From any Claude Code session, ask: *"save this as a profile"*. The
230
- `meta/save-profile` skill walks you through the steps and calls
231
- `cue create-profile` to write the YAML:
334
+ <details>
335
+ <summary><b>What does cue NOT do?</b></summary>
232
336
 
233
- ```bash
234
- cue create-profile my-project \
235
- --icon "🦊" \
236
- --description "My project work" \
237
- --skills design/ui-ux-pro-max,research/find-skills \
238
- --pin
239
- ```
337
+ - It does not modify or repackage the Claude Code / Codex binary.
338
+ - It does not host a remote skill marketplace — skills live in your repo or come from [open-source sources](#built-with--built-on).
339
+ - It does not coordinate multi-agent runs (that's [`recodeee/colony`](https://github.com/recodeee/colony) + [`gitguardex`](https://github.com/recodeee/gitguardex), layered on top via the parallel-agents tier).
340
+ - It does not auto-pick a profile from repo contents — you pin once with `echo <profile> > .cue-profile`. (A scan-to-profile flow is on the roadmap.)
240
341
 
241
- ### Multi-account flow (with authmux)
342
+ </details>
242
343
 
243
- If you keep separate Claude/Codex accounts (e.g. via `authmux`), point each
244
- alias at its own `CLAUDE_CONFIG_DIR`:
344
+ ---
245
345
 
246
- ```bash
247
- alias claude-account2="CLAUDE_CONFIG_DIR=$HOME/.claude-accounts/account2 cue launch claude"
248
- ```
346
+ ## Repo layout
249
347
 
250
- cue detects the pre-set config dir, copies `.credentials.json` and merges the
251
- account's `settings.json` into the materialized runtime, and **always shows
252
- the picker** with the previously-pinned profile on top so you can pick a
253
- different profile per session without losing the auth.
348
+ ```
349
+ cue/
350
+ ├── profiles/ one dir per profile, YAML decides what loads (inheritance, agent scoping)
351
+ ├── resources/
352
+ │ ├── skills/ 110+ local skills (medusa, codex-fleet, higgsfield, caveman, …)
353
+ │ ├── mcps/ MCP server configs (claude.sanitized.json, codex.sanitized.json)
354
+ │ └── icons/ brand icons used in the optimizer dashboard
355
+ ├── plugins/cue/ the Claude Code plugin: /cue, /cue switch, /cue reload, /cue current
356
+ ├── src/ the Bun CLI — commands/{optimizer,launch,picker,…}, lib/runtime-materializer
357
+ ├── setup/ paste-into-agent install prompts (macos, linux, windows, parallel-agents)
358
+ └── docs/ launch.md, shell-install.md, assets/ (the SVGs in this README)
359
+ ```
254
360
 
255
- Start with the docs hub at **[docs/profiles/](./docs/profiles/)** for the schema, inheritance model, scan-to-profile flow, and troubleshooting.
361
+ Full docs: **[docs/launch.md](./docs/launch.md)** (resolve materialize → exec flow) · **[docs/profiles/](./docs/profiles/)** (schema, inheritance, scan-to-profile, troubleshooting) · **[AGENTS.md](./AGENTS.md)** (bootstrap contract for AI agents).
256
362
 
257
363
  ---
258
364
 
259
- ## For AI agents
365
+ ## Built with / built on
260
366
 
261
- If you are an AI coding agent helping a human set this up, read **[AGENTS.md](./AGENTS.md)** first it explains the bootstrap contract (phase-by-phase, ask-before-network, verify-each-step) and points to the per-OS prompt your user should paste.
367
+ cue glues together a small set of excellent open-source projects. Star counts are live from GitHub.
262
368
 
263
- ---
369
+ **Runtime & dependencies (the CLI itself):**
264
370
 
265
- ## What you get
371
+ | Project | What we use it for | |
372
+ |---|---|---|
373
+ | [oven-sh/bun](https://github.com/oven-sh/bun) | TypeScript runtime that ships `bin/cue` | [![stars](https://img.shields.io/github/stars/oven-sh/bun?style=flat-square&label=★&color=6366f1)](https://github.com/oven-sh/bun) |
374
+ | [natemoo-re/clack](https://github.com/natemoo-re/clack) | `@clack/prompts` powers the TUI profile picker | [![stars](https://img.shields.io/github/stars/natemoo-re/clack?style=flat-square&label=★&color=6366f1)](https://github.com/natemoo-re/clack) |
375
+ | [ajv-validator/ajv](https://github.com/ajv-validator/ajv) | JSON Schema validation for `profile.yaml` | [![stars](https://img.shields.io/github/stars/ajv-validator/ajv?style=flat-square&label=★&color=6366f1)](https://github.com/ajv-validator/ajv) |
376
+ | [eemeli/yaml](https://github.com/eemeli/yaml) | YAML parsing for profile definitions | [![stars](https://img.shields.io/github/stars/eemeli/yaml?style=flat-square&label=★&color=6366f1)](https://github.com/eemeli/yaml) |
266
377
 
267
- After bootstrap (~550 MB cold RAM per session):
378
+ **Built-in terminal integration:**
268
379
 
269
- | Layer | What it does |
270
- |---|---|
271
- | **claude-mem** plugin | Captures session observations passively; `mem-search "topic"` to recall across sessions |
272
- | **caveman** plugin | `/caveman` for terse replies, `/caveman-commit` for Conventional Commit messages |
273
- | **RTK** (CLI hook) | Filters shell-command outputs — 60-90% token savings on `ls` / `git` / `cat` |
274
- | **gbrain** MCP | Personal knowledge wiki with embeddings, backlinks, timeline |
275
- | **excel-mcp-server** | Native `.xlsx` read/write/format |
276
- | **office-word-mcp-server** | Native `.docx` read/write |
380
+ | Project | What we use it for | |
381
+ |---|---|---|
382
+ | [kovidgoyal/kitty](https://github.com/kovidgoyal/kitty) | **Kitty graphics protocol** inline brand logos & profile icons rendered directly in the terminal (see [`src/lib/kitty-image.ts`](./src/lib/kitty-image.ts), spec [here](https://sw.kovidgoyal.net/kitty/graphics-protocol/)). Auto-detected; falls back to emoji if you're not on Kitty. | [![stars](https://img.shields.io/github/stars/kovidgoyal/kitty?style=flat-square&label=★&color=22c55e)](https://github.com/kovidgoyal/kitty) |
277
383
 
278
- claude-mem (passive) and gbrain (manual wiki) are complementary — both recommended.
384
+ **Agents we shim:**
279
385
 
280
- ---
386
+ | Project | Role | |
387
+ |---|---|---|
388
+ | [anthropics/claude-code](https://github.com/anthropics/claude-code) | The `claude` binary cue intercepts and re-launches with `CLAUDE_CONFIG_DIR` | [![stars](https://img.shields.io/github/stars/anthropics/claude-code?style=flat-square&label=★&color=f59e0b)](https://github.com/anthropics/claude-code) |
389
+ | [openai/codex](https://github.com/openai/codex) | The `codex` binary cue intercepts and re-launches with `CODEX_HOME` | [![stars](https://img.shields.io/github/stars/openai/codex?style=flat-square&label=★&color=f59e0b)](https://github.com/openai/codex) |
281
390
 
282
- ## What's inside the repo
391
+ **Skill packs & sister tools:**
283
392
 
284
- ```
285
- cue/
286
- ├── skills/ 110+ Claude Code / Codex skills
287
- │ ├── medusa/ building-with-medusa, storefront-best-practices,
288
- │ ├── codex-fleet/ bringup, dispatch, supervisors, panes, troubleshoot
289
- │ ├── higgsfield/ generate, marketplace-cards, soul-id
290
- │ ├── caveman/ caveman, caveman-commit, caveman-compress
291
- │ └── ...
292
- ├── mcps/ MCP server snapshots + configs
293
- │ ├── configs/ claude.sanitized.json, codex.sanitized.json, …
294
- │ ├── mcps/ individual MCP server entries
295
- │ └── plugins/ Claude Code plugin snapshots
296
- └── setup/ paste-into-Claude-Code prompts (macos.md, linux.md, windows.md)
297
- ```
393
+ | Project | Role | |
394
+ |---|---|---|
395
+ | [mukul975/Anthropic-Cybersecurity-Skills](https://github.com/mukul975/Anthropic-Cybersecurity-Skills) | 754 cybersecurity skills (red/blue team, forensics, DFIR) loaded by the `cybersecurity` profile | [![stars](https://img.shields.io/github/stars/mukul975/Anthropic-Cybersecurity-Skills?style=flat-square&label=★&color=ef4444)](https://github.com/mukul975/Anthropic-Cybersecurity-Skills) |
396
+ | [recodeee/colony](https://github.com/recodeee/colony) | Local-first MCP for multi-agent coordination — used by the `fleet-control` profile | [![stars](https://img.shields.io/github/stars/recodeee/colony?style=flat-square&label=★&color=ec4899)](https://github.com/recodeee/colony) |
397
+ | [recodeee/gitguardex](https://github.com/recodeee/gitguardex) | `gx` CLI for branch + worktree isolation when running 2+ agents on one repo | [![stars](https://img.shields.io/github/stars/recodeee/gitguardex?style=flat-square&label=★&color=ec4899)](https://github.com/recodeee/gitguardex) |
398
+ | [rtk-ai/rtk](https://github.com/rtk-ai/rtk) | Token-savings hook on shell output (60–90% reduction on `ls`/`git`/`cat`) | [![stars](https://img.shields.io/github/stars/rtk-ai/rtk?style=flat-square&label=★&color=fbbf24)](https://github.com/rtk-ai/rtk) |
399
+ | [astral-sh/uv](https://github.com/astral-sh/uv) | Python venv manager used by `setup/<os>.md` to run uvx-based MCP servers (Excel / Word) | [![stars](https://img.shields.io/github/stars/astral-sh/uv?style=flat-square&label=★&color=22c55e)](https://github.com/astral-sh/uv) |
400
+
401
+ Plus the **brand logos** you see in the optimizer dashboard and hero come from each vendor's official press kit (OpenAI, NVIDIA, Hostinger, Coolify, Medusa, Stripe, Higgsfield, Obsidian) — see [`resources/icons/`](./resources/icons/).
298
402
 
299
403
  ---
300
404
 
301
405
  ## Contributing
302
406
 
303
- Each skill is a folder with `SKILL.md` (frontmatter + body) plus reference files. The frontmatter `description` is what the LLM matches against — write it as `"when user says X, do Y"`.
407
+ 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.
304
408
 
305
- To add a new skill: copy an existing one as a template, edit `SKILL.md`, drop it under `skills/skills/<category>/<slug>/`. The catalog regenerates on the next sync.
409
+ The SVGs in this README live in [`docs/assets/`](./docs/assets/) edit the XML directly or regenerate from the `readme-writer` profile.
410
+
411
+ License: [MIT](./LICENSE).