add quickdesign plugin + CLI; make skills sync rsync-optional for Windows

This commit is contained in:
2026-08-30 19:46:52 +01:00
parent 50d695dcd7
commit 85e718dcca
8 changed files with 94 additions and 10 deletions
+4 -2
View File
@@ -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
+22 -1
View File
@@ -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
+2
View File
@@ -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
+19
View File
@@ -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 <owner>/<repo>
claude plugin install <plugin>@<marketplace-name> --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 `<marketplace-name>` 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: <name>` line. `-y` is required when stdout is not a TTY.
Related: [[quickdesign-plugin]]
+13 -4
View File
@@ -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
+17
View File
@@ -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]]
+8 -1
View File
@@ -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",
+9 -2
View File
@@ -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"