diff --git a/README.md b/README.md index cbbff39..2271b3f 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,10 @@ included, with deletes). Always `git pull && ./install.sh` **before** working, a `./sync.sh` after — syncing from a machine that hasn't installed the latest pull will remove the other machines' memory/skill files from the repo. -**CLI dependencies:** `install.sh` also installs the Codex CLI (`npm install -g @openai/codex`) when missing, -since the `codex@openai-codex` plugin shells out to it. Requires `npm` on the target machine. +**CLI dependencies:** `install.sh` also installs the Codex CLI (`npm install -g @openai/codex`) and the +QuickDesign CLI (`npm install -g @quickdesign/cli`) when missing, +since the `codex@openai-codex` and `quickdesign@claude-community` plugins shell out to them. Requires `npm` on +the target machine. QuickDesign also needs a one-off `quickdesign login` per machine (OAuth; not synced). ## Install on a new machine diff --git a/install.sh b/install.sh index 8840d04..95c96a6 100755 --- a/install.sh +++ b/install.sh @@ -46,7 +46,13 @@ done # Skills — copy each skill directory into ~/.claude/skills/ if [ -d "$SCRIPT_DIR/skills" ]; then mkdir -p "$CLAUDE_DIR/skills" - rsync -a "$SCRIPT_DIR/skills/" "$CLAUDE_DIR/skills/" + if command -v rsync >/dev/null 2>&1; then + rsync -a "$SCRIPT_DIR/skills/" "$CLAUDE_DIR/skills/" + else + # No rsync (Git Bash on Windows). This direction is a plain overlay with no + # --delete, so cp is an exact substitute. + cp -R "$SCRIPT_DIR/skills/." "$CLAUDE_DIR/skills/" + fi echo " Installed: skills -> ~/.claude/skills/" fi @@ -62,6 +68,21 @@ else echo " WARNING: npm not found — install the Codex CLI manually: npm install -g @openai/codex" fi +# QuickDesign CLI, required by the quickdesign@claude-community plugin to actually run. +# The bundled skill only wraps this binary; without it every invocation dies on "command not found". +# Auth is per-machine and NOT synced — run `quickdesign login` once per box. Do not run +# `quickdesign init`: it copies the skill into ~/.claude/skills/, duplicating the plugin's copy. +if command -v quickdesign >/dev/null 2>&1; then + echo " QuickDesign CLI already present: $(quickdesign --version 2>/dev/null | head -1)" +elif command -v npm >/dev/null 2>&1; then + echo " Installing QuickDesign CLI (npm install -g @quickdesign/cli)..." + npm install -g @quickdesign/cli >/dev/null 2>&1 \ + && echo " Installed: QuickDesign CLI $(quickdesign --version 2>/dev/null | head -1)" \ + || echo " WARNING: QuickDesign CLI install failed — run manually: npm install -g @quickdesign/cli" +else + echo " WARNING: npm not found — install the QuickDesign CLI manually: npm install -g @quickdesign/cli" +fi + # Obsidian vault MCP server (filesystem access). # The vault lives in a different place on every machine: on MINI-S it is inside the # homelab Docker stack (~/docker/obsidian/config/...), on the Macs it is a native diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 6850a0e..c9d1228 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -26,3 +26,5 @@ - [Haunt app](haunt-app.md) — generative horror ambience machine at ~/haunt/ (14 scenes, 36 layers, tension arc + jump scares, FX rack); port 8767, not in git - [Grimoire app](grimoire-app.md) — dark-fantasy keys preset instrument (40 presets, knobs, arp, key lock, textures) at ~/grimoire/; port 8768, not in git - [Nexus app](nexus-app.md) — combined cinematic score workstation (Blade Runner/horror/Alien/drama, 18 scenes, mood pad, arcs, cue pads, split keys, 42 layers) at ~/nexus/; port 8769, not in git +- [QuickDesign plugin](quickdesign-plugin.md) — AI media generation (Seedance/Sora2/Kling/Nano Banana); plugin + CLI installed 2026-08-30, still needs `quickdesign login` +- [Installing Claude plugins via CLI](claude-plugin-install-cli.md) — use `claude plugin install`, not hand-edited settings.json; marketplace name ≠ repo name diff --git a/memory/claude-plugin-install-cli.md b/memory/claude-plugin-install-cli.md new file mode 100644 index 0000000..121e1b0 --- /dev/null +++ b/memory/claude-plugin-install-cli.md @@ -0,0 +1,19 @@ +--- +name: claude-plugin-install-cli +description: Install Claude Code plugins non-interactively with the claude CLI instead of hand-editing settings.json. +metadata: + type: feedback +--- + +Add and enable plugins with the CLI, not by editing `~/.claude/settings.json` by hand: + +``` +claude plugin marketplace add / +claude plugin install @ --scope user -y +``` + +**Why:** the CLI writes all three places that must stay in sync — `settings.json` (`enabledPlugins` + `extraKnownMarketplaces`), `plugins/known_marketplaces.json`, and `plugins/installed_plugins.json` (with the resolved version and git SHA) — and clones the plugin into `plugins/cache/`. Hand-editing settings.json sets the flag but leaves the plugin uninstalled and the manifests stale. + +**How to apply:** the `` is the `name` field inside the repo's `.claude-plugin/marketplace.json`, which often differs from the repo name (e.g. `anthropics/claude-plugins-community` → `claude-community`). Read it, or take it from the `Successfully added marketplace: ` line. `-y` is required when stdout is not a TTY. + +Related: [[quickdesign-plugin]] diff --git a/memory/project_plugin_sync.md b/memory/project_plugin_sync.md index 5778018..e3f7392 100644 --- a/memory/project_plugin_sync.md +++ b/memory/project_plugin_sync.md @@ -17,7 +17,9 @@ The user explicitly wants newly installed plugins propagated to every machine. - From non-official marketplaces (each registered in `extraKnownMarketplaces`): `codex@openai-codex` (`openai/codex-plugin-cc`), `warp@claude-code-warp` (`warpdotdev/claude-code-warp`), `ui-ux-pro-max@ui-ux-pro-max-skill` (`nextlevelbuilder/ui-ux-pro-max-skill`), - `impeccable@impeccable` (`pbakaus/impeccable`) + `impeccable@impeccable` (`pbakaus/impeccable`), `claude-mem@thedotmack` (`thedotmack/claude-mem`), + `quickdesign@claude-community` (`anthropics/claude-plugins-community` — note the marketplace NAME is + `claude-community`, not the repo name; `quickdesign@claude-plugins-community` fails) **Why:** Plugins are declared in `settings.json` (`enabledPlugins` + `extraKnownMarketplaces`), which the [[user-github]] `claude-config` repo already tracks. The installed plugin *cache* under `~/.claude/plugins/` @@ -27,9 +29,16 @@ is NOT synced and should not be — each server re-fetches plugins from its mark `settings.json` to GitHub. On another server, `git pull && ./install.sh`, then start Claude Code — it auto-installs the enabled plugins from `claude-plugins-official`. UNVERIFIED as of 2026-07-16: whether startup also auto-fetches *non-official* marketplaces from `extraKnownMarketplaces`. If a synced non-official plugin is missing on MINI-S, -run the two-step CLI install below there, then note the answer here. CLI dependency: the `codex@openai-codex` plugin shells out to the Codex CLI (`@openai/codex`, binary `codex`). -`install.sh` installs it via `npm install -g @openai/codex` when missing, so it propagates to every server that -runs the installer (requires npm on the target machine). +run the two-step CLI install below there, then note the answer here. + +**CLI dependencies.** Two plugins shell out to a binary and are inert without it: `codex@openai-codex` needs +the Codex CLI (`@openai/codex`, binary `codex`), and `quickdesign@claude-community` needs `@quickdesign/cli` +(binary `quickdesign`). `install.sh` installs both via `npm install -g` when missing, so they propagate to every +server that runs the installer (requires npm on the target machine). `quickdesign` additionally needs a +per-machine `quickdesign login` (OAuth browser flow, token at `~/.config/quickdesign/auth.json`, or +`--token-stdin`/`QUICKDESIGN_TOKEN` headless) — that part cannot be synced. Do NOT run `quickdesign init`: it +copies the same skill into `~/.claude/skills/quickdesign`, duplicating the plugin copy (and `sync.sh` would then +commit it into the repo's `skills/`). Use `quickdesign login` alone. **Gotcha — hand-editing `extraKnownMarketplaces` does NOT fetch the marketplace.** Adding a marketplace + `enabledPlugins` entry by hand only *declares* it. `/reload-plugins` will NOT pick it up: that command reloads diff --git a/memory/quickdesign-plugin.md b/memory/quickdesign-plugin.md new file mode 100644 index 0000000..21aca5c --- /dev/null +++ b/memory/quickdesign-plugin.md @@ -0,0 +1,17 @@ +--- +name: quickdesign-plugin +description: QuickDesign AI-media plugin and CLI — both installed 2026-08-30; marketplace id is claude-community, and the CLI still needs `quickdesign login`. +metadata: + type: reference +--- + +`quickdesign@claude-community` — AI media generation (UGC/talking-avatar video, multi-segment promos, image edits, video upscale) via Seedance 2.0 R2V/I2V, Kling 3 Pro, Sora 2, Nano Banana 2, GPT Image, Topaz upscale. + +- Marketplace: `anthropics/claude-plugins-community`, but its declared **name is `claude-community`**, not the repo name — so the plugin id is `quickdesign@claude-community`. Installing by repo name fails. +- Upstream (the actual product): https://github.com/ottasilver/quickdesign-cli — https://quickdesign.io. Community-contributed, not Anthropic-authored. +- Installed at user scope, v0.8.0, 2026-08-30. Cache: `~/.claude/plugins/cache/claude-community/quickdesign/0.8.0`. +- Wraps a `quickdesign` binary, installed globally 2026-08-30 (`npm install -g @quickdesign/cli`, v0.8.0, at `~/nodejs/quickdesign`). **Not authed yet** — `quickdesign whoami` says "Not logged in"; run `quickdesign login` (OAuth browser flow, token to `~/.config/quickdesign/auth.json`; `--token-stdin` or `QUICKDESIGN_TOKEN` for headless/CI). Hosted paid SaaS backend. +- **Do NOT run `quickdesign init`** — it copies the same skill into `~/.claude/skills/quickdesign`, duplicating the plugin copy. Use `quickdesign login` alone. +- Skill hard rule worth knowing: `seedance-2.0-r2v` is the default for *all* UGC/avatar/promo work — do not "downgrade" to `seedance-2.0-i2v` just because the clip is short; i2v forfeits multi-`--reference-image` and `--reference-audio` voice continuity. + +Related: [[claude-plugin-install-cli]] diff --git a/settings.json b/settings.json index 2b71f76..a163507 100644 --- a/settings.json +++ b/settings.json @@ -26,7 +26,8 @@ "amazon-location-service@claude-plugins-official": true, "ui-ux-pro-max@ui-ux-pro-max-skill": true, "impeccable@impeccable": true, - "claude-mem@thedotmack": true + "claude-mem@thedotmack": true, + "quickdesign@claude-community": true }, "extraKnownMarketplaces": { "claude-code-warp": { @@ -58,6 +59,12 @@ "source": "github", "repo": "thedotmack/claude-mem" } + }, + "claude-community": { + "source": { + "source": "github", + "repo": "anthropics/claude-plugins-community" + } } }, "autoUpdatesChannel": "latest", diff --git a/sync.sh b/sync.sh index 1ca7a51..874630d 100755 --- a/sync.sh +++ b/sync.sh @@ -49,8 +49,15 @@ if [ -d "$CLAUDE_DIR/skills" ]; then # into ~/.agents/skills. Copying them as symlinks would commit links that dangle # on every other machine; dereferencing them would vendor someone else's skills. # Only real skill directories belong in this repo. - rsync -a --delete --no-links "$CLAUDE_DIR/skills/" "$SCRIPT_DIR/skills/" - echo " Copied: skills/" + if command -v rsync >/dev/null 2>&1; then + rsync -a --delete --no-links "$CLAUDE_DIR/skills/" "$SCRIPT_DIR/skills/" + echo " Copied: skills/" + else + # No rsync (e.g. Git Bash on Windows). Skipping is the safe failure: a plain cp + # cannot express --delete or --no-links, and getting it wrong has wiped skills/rpg + # from the repo before. Sync skills from a machine that has rsync. + echo " Skipped: skills/ — rsync not found on this machine (repo copy left intact)" + fi fi cd "$SCRIPT_DIR"