liteagents 2.6.1 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +4 -2
  3. package/installer/cli.js +4 -1
  4. package/package.json +1 -1
  5. package/packages/ampcode/commands/live-canvas/README.md +38 -47
  6. package/packages/{claude/skills/live-canvas/templates/demo → ampcode/commands/live-canvas/dev}/post-variants.html +8 -3
  7. package/packages/ampcode/commands/live-canvas/templates/lab-banner.html +6 -0
  8. package/packages/ampcode/commands/live-canvas/templates/overlay-vanilla.js +64 -6
  9. package/packages/ampcode/commands/live-canvas.md +140 -161
  10. package/packages/ampcode/commands/security.md +50 -12
  11. package/packages/ampcode/commands/ship.md +33 -11
  12. package/packages/claude/commands/git-commit.md +1 -1
  13. package/packages/claude/commands/security.md +50 -12
  14. package/packages/claude/commands/ship.md +33 -11
  15. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/.claude-plugin/plugin.json +1 -1
  16. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/README.md +2 -2
  17. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package.json +1 -1
  18. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/schema.json +1 -1
  19. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/server.js +320 -27
  20. package/packages/claude/plugins/live-canvas-marketplace/setup.sh +83 -24
  21. package/packages/claude/skills/live-canvas/README.md +53 -57
  22. package/packages/claude/skills/live-canvas/SKILL.md +122 -158
  23. package/packages/{ampcode/commands/live-canvas/templates/demo → claude/skills/live-canvas/dev}/post-variants.html +8 -3
  24. package/packages/claude/skills/live-canvas/templates/lab-banner.html +6 -0
  25. package/packages/claude/skills/live-canvas/templates/overlay-vanilla.js +64 -6
  26. package/packages/droid/commands/live-canvas/README.md +38 -47
  27. package/packages/droid/commands/live-canvas/{templates/demo → dev}/post-variants.html +8 -3
  28. package/packages/droid/commands/live-canvas/templates/lab-banner.html +6 -0
  29. package/packages/droid/commands/live-canvas/templates/overlay-vanilla.js +64 -6
  30. package/packages/droid/commands/live-canvas.md +140 -161
  31. package/packages/droid/commands/security.md +50 -12
  32. package/packages/droid/commands/ship.md +33 -11
  33. package/packages/opencode/command/live-canvas/README.md +38 -47
  34. package/packages/opencode/command/live-canvas/{templates/demo → dev}/post-variants.html +8 -3
  35. package/packages/opencode/command/live-canvas/templates/lab-banner.html +6 -0
  36. package/packages/opencode/command/live-canvas/templates/overlay-vanilla.js +64 -6
  37. package/packages/opencode/command/live-canvas.md +140 -161
  38. package/packages/opencode/command/security.md +50 -12
  39. package/packages/opencode/command/ship.md +33 -11
  40. package/packages/ampcode/commands/live-canvas/templates/.claude/settings.local.json +0 -8
  41. package/packages/ampcode/commands/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
  42. package/packages/ampcode/commands/live-canvas/templates/feedback-react/format-utils.ts +0 -283
  43. package/packages/ampcode/commands/live-canvas/templates/feedback-react/index.ts +0 -62
  44. package/packages/ampcode/commands/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
  45. package/packages/ampcode/commands/live-canvas/templates/feedback-react/types.ts +0 -118
  46. package/packages/claude/skills/live-canvas/INTEGRATION_NOTES.md +0 -210
  47. package/packages/claude/skills/live-canvas/templates/.claude/settings.local.json +0 -8
  48. package/packages/claude/skills/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
  49. package/packages/claude/skills/live-canvas/templates/feedback-react/format-utils.ts +0 -283
  50. package/packages/claude/skills/live-canvas/templates/feedback-react/index.ts +0 -62
  51. package/packages/claude/skills/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
  52. package/packages/claude/skills/live-canvas/templates/feedback-react/types.ts +0 -118
  53. package/packages/droid/commands/live-canvas/templates/.claude/settings.local.json +0 -8
  54. package/packages/droid/commands/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
  55. package/packages/droid/commands/live-canvas/templates/feedback-react/format-utils.ts +0 -283
  56. package/packages/droid/commands/live-canvas/templates/feedback-react/index.ts +0 -62
  57. package/packages/droid/commands/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
  58. package/packages/droid/commands/live-canvas/templates/feedback-react/types.ts +0 -118
  59. package/packages/opencode/command/live-canvas/templates/.claude/settings.local.json +0 -8
  60. package/packages/opencode/command/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +0 -1299
  61. package/packages/opencode/command/live-canvas/templates/feedback-react/format-utils.ts +0 -283
  62. package/packages/opencode/command/live-canvas/templates/feedback-react/index.ts +0 -62
  63. package/packages/opencode/command/live-canvas/templates/feedback-react/selector-utils.ts +0 -423
  64. package/packages/opencode/command/live-canvas/templates/feedback-react/types.ts +0 -118
@@ -1,61 +1,120 @@
1
1
  #!/usr/bin/env bash
2
- # Live Canvas channel — one-time setup helper.
2
+ # Live Canvas channel — one-time setup.
3
3
  #
4
- # Run this once from a shell, then follow the printed manual steps in Claude Code.
5
- # Safe to re-run; `npm install` is idempotent.
4
+ # Copies the marketplace into ~/.claude/plugins/, installs the channel
5
+ # plugin's npm deps, and adds a `live-claude` shell function so the user
6
+ # can launch a Live-mode session with one word in a new terminal.
7
+ #
8
+ # Safe to re-run: existing install at ~/.claude/plugins/live-canvas-marketplace/
9
+ # is overwritten; the shell function is replaced in place via marker guards.
6
10
 
7
11
  set -e
12
+
8
13
  HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- PLUGIN_DIR="$HERE/plugins/live-canvas-channel"
10
- MARKETPLACE_PATH="$HERE"
14
+ DEST_ROOT="${HOME}/.claude/plugins"
15
+ DEST="${DEST_ROOT}/live-canvas-marketplace"
16
+ PLUGIN_DIR="${DEST}/plugins/live-canvas-channel"
17
+ MARKER_BEGIN="# >>> live-canvas: live-claude function (managed by setup.sh) >>>"
18
+ MARKER_END="# <<< live-canvas: live-claude function <<<"
11
19
 
12
20
  bold() { printf '\033[1m%s\033[0m\n' "$*"; }
13
21
  ok() { printf '\033[32m✓\033[0m %s\n' "$*"; }
14
22
  warn() { printf '\033[33m!\033[0m %s\n' "$*"; }
23
+ err() { printf '\033[31m✗\033[0m %s\n' "$*"; }
15
24
 
16
- if ! command -v node >/dev/null 2>&1; then
17
- warn "Node.js not found. Install Node >= 18 first: https://nodejs.org"
25
+ # ---------- prereq checks ----------
26
+
27
+ if [ "$(id -u)" = "0" ] && [ -n "${SUDO_USER:-}" ]; then
28
+ err "Don't run setup.sh with sudo — it would install into root's home (\$HOME=$HOME)."
29
+ err "Rerun as your normal user: bash $0"
18
30
  exit 1
19
31
  fi
20
32
 
33
+ if ! command -v node >/dev/null 2>&1; then
34
+ err "Node.js not found. Install Node >= 18: https://nodejs.org"
35
+ exit 1
36
+ fi
21
37
  NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]')"
22
38
  if [ "$NODE_MAJOR" -lt 18 ]; then
23
- warn "Node >= 18 required (found $(node -v))."
39
+ err "Node >= 18 required (found $(node -v))."
24
40
  exit 1
25
41
  fi
26
-
27
42
  if ! command -v npm >/dev/null 2>&1; then
28
- warn "npm not found. Usually ships with Node."
43
+ err "npm not found. Usually ships with Node."
29
44
  exit 1
30
45
  fi
31
46
 
47
+ # ---------- 1. copy marketplace into ~/.claude/plugins ----------
48
+
49
+ bold "Installing marketplace to ${DEST}…"
50
+ mkdir -p "$DEST_ROOT"
51
+ # Overwrite any prior install. Small, self-contained tree — safe to wipe.
52
+ rm -rf "$DEST"
53
+ cp -R "$HERE" "$DEST"
54
+ ok "Copied marketplace files."
55
+
56
+ # ---------- 2. npm install channel plugin deps ----------
57
+
32
58
  bold "Installing channel plugin dependencies…"
33
59
  cd "$PLUGIN_DIR"
34
60
  npm install --silent
35
61
  ok "Dependencies installed in $PLUGIN_DIR"
36
62
 
37
- echo
38
- bold "Next steps (run these inside Claude Code):"
63
+ # ---------- 3. add live-claude function to shell rc files ----------
64
+
65
+ add_to_rc() {
66
+ local rc="$1"
67
+ [ -e "$rc" ] || return 0
68
+
69
+ local tmp
70
+ tmp="$(mktemp)"
71
+ # Strip any prior managed block, preserving the rest of the file verbatim.
72
+ awk -v b="$MARKER_BEGIN" -v e="$MARKER_END" '
73
+ $0 == b { skip = 1; next }
74
+ $0 == e { skip = 0; next }
75
+ !skip { print }
76
+ ' "$rc" > "$tmp"
77
+
78
+ {
79
+ cat "$tmp"
80
+ echo ""
81
+ echo "$MARKER_BEGIN"
82
+ echo "live-claude() {"
83
+ echo " claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace \"\$@\""
84
+ echo "}"
85
+ echo "$MARKER_END"
86
+ } > "$rc.live-canvas.tmp"
87
+
88
+ mv "$rc.live-canvas.tmp" "$rc"
89
+ rm -f "$tmp"
90
+ ok "Updated $rc"
91
+ }
92
+
93
+ bold "Adding live-claude function to your shell rc files…"
94
+ add_to_rc "$HOME/.zshrc"
95
+ add_to_rc "$HOME/.bashrc"
96
+
97
+ # ---------- 4. print remaining manual steps ----------
98
+
39
99
  cat <<EOF
40
100
 
41
- 1. Register this marketplace:
42
- /plugin marketplace add $MARKETPLACE_PATH
101
+ $(bold "Two more steps — run these inside Claude Code:")
102
+
103
+ 1. Register the marketplace:
104
+ /plugin marketplace add ${DEST}
43
105
 
44
106
  2. Install the plugin from it:
45
107
  /plugin install live-canvas-channel@live-canvas-marketplace
46
108
 
47
- 3. Close this session and start a new one with the dev-channels flag:
48
- claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace
109
+ $(bold "Then daily use:")
49
110
 
50
- 4. Confirm the one-time safety prompt. Channel is now listening on
51
- port 8788 for overlay feedback events.
111
+ Open a fresh shell (or: source ~/.zshrc) so live-claude is on PATH.
112
+ Terminal A your dev server (e.g. npm run dev).
113
+ • Terminal B — run: live-claude
114
+ (this is just: claude --dangerously-load-development-channels …)
115
+ • Inside that Claude session, run /live-canvas.
52
116
 
53
- 5. Run /live-canvas to generate variants in any project. The skill will
54
- auto-detect the channel and use Live mode.
55
-
56
- Tip — save yourself typing with a shell alias in ~/.zshrc or ~/.bashrc:
57
- alias claude-live='claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace'
117
+ You'll be asked Live vs JSON mode each time.
58
118
 
59
119
  EOF
60
-
61
120
  ok "Setup complete."
@@ -2,7 +2,7 @@
2
2
 
3
3
  Click-to-annotate UI design tool for Claude Code. Renders N variants of a component or page in your browser, you click an element and type what to change, and Claude edits the variant file while you watch in the browser. No window switching, no pasted JSON.
4
4
 
5
- Ships as a Claude Code skill plus an MCP channel plugin. Works in every tool liteagents supports (Claude, Droid, Amp, Opencode), but **Live mode only works in Claude Code** — other tools run in Batch mode only (see modes below).
5
+ Ships as a Claude Code skill plus an MCP channel plugin. Works in every tool liteagents supports (Claude, Droid, Amp, Opencode), but **Live mode only works in Claude Code** — other tools run in JSON mode only (see modes below).
6
6
 
7
7
  ---
8
8
 
@@ -11,7 +11,7 @@ Ships as a Claude Code skill plus an MCP channel plugin. Works in every tool lit
11
11
  ```
12
12
  ┌──────────────────────┐ POST /feedback ┌─────────────────────┐
13
13
  │ Overlay in browser │ ─────────────────────────► │ live-canvas-channel │
14
- │ (vanilla JS or React)│ │ (Node MCP server) │
14
+ │ (vanilla JS, ~500 lines)│ │ (Node MCP server) │
15
15
  └──────────────────────┘ └──────────┬──────────┘
16
16
  ▲ │
17
17
  │ dev server hot-reloads the page │ notifications/
@@ -31,28 +31,31 @@ Each Save in the overlay streams into the Claude session as a `<channel>` tag wi
31
31
 
32
32
  ## Modes
33
33
 
34
- The overlay auto-selects at runtime, the user never toggles manually.
34
+ The skill asks you which mode you want every time `/live-canvas` runs.
35
35
 
36
- | Mode | Trigger | What happens per Save |
36
+ | Mode | Use when | What happens per Save |
37
37
  |---|---|---|
38
- | **Live** | Channel server answers `GET /health`, session was started with the dev-channels flag | Comment streams into Claude's context; Claude edits the file; dev server hot-reloads. Toast: "Pushed to Claude ✨". |
39
- | **Batch** | No channel, or running under Droid/Amp/Opencode | Comment stays local. On Finish/Submit it writes JSONL (or downloads the file if no endpoint). User pastes or says "check" in the CLI to have the assistant act on the whole batch. |
38
+ | **Live** | You launched the session with `live-claude` (sets `--dangerously-load-development-channels`) | Comment streams into Claude's context; Claude edits the file; dev server hot-reloads. Toast: "Pushed to Claude ✨". |
39
+ | **JSON** | Any session, any tool (Claude, Droid, Amp, Opencode) | Comment stays local. On Submit it POSTs to a `/feedback-jsonl` route on the channel server, which writes to `<project>/.claude-design/feedback.jsonl`. Falls back to browser download only when the MCP isn't running (e.g. Droid/Amp/Opencode users). |
40
40
 
41
- Live mode gracefully degrades to Batch if a push ever fails mid-session.
41
+ If you pick Live but the session lacks the channels flag, `channel_open` returns `no_channel_capability` and the skill prints the exact relaunch command — it never silently downgrades to JSON. If another live-canvas session is already holding port 8788, `channel_open` takes over (same plugin + same user = safe) and announces it. Foreign processes on 8788 (e.g. a stray dev server) are refused with the holder's pid so you know what to investigate.
42
42
 
43
43
  ---
44
44
 
45
45
  ## One-time setup (Live mode, Claude Code only)
46
46
 
47
- Run this once per machine. Without it, the skill still works in Batch mode.
47
+ Run this once per machine. Without it, the skill still works in JSON mode.
48
48
 
49
- ### 1. Install plugin npm dependencies
49
+ ### 1. Run the installer
50
50
 
51
51
  ```bash
52
- bash ~/.claude/plugins/live-canvas-marketplace/setup.sh
52
+ bash packages/claude/plugins/live-canvas-marketplace/setup.sh
53
53
  ```
54
54
 
55
- Checks Node >= 18, runs `npm install` inside the plugin dir. Idempotent.
55
+ The installer:
56
+ - copies the marketplace into `~/.claude/plugins/live-canvas-marketplace/` (overwrites any prior install)
57
+ - runs `npm install` inside the channel plugin
58
+ - adds a `live-claude` shell function to `~/.zshrc` and `~/.bashrc` (idempotent — re-runs replace in place)
56
59
 
57
60
  ### 2. Register the marketplace in Claude Code
58
61
 
@@ -66,21 +69,9 @@ Checks Node >= 18, runs `npm install` inside the plugin dir. Idempotent.
66
69
  /plugin install live-canvas-channel@live-canvas-marketplace
67
70
  ```
68
71
 
69
- ### 4. Start Claude Code with the dev-channels flag
72
+ ### 4. Open a fresh shell
70
73
 
71
- ```bash
72
- claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace
73
- ```
74
-
75
- Accept the safety prompt (custom channels are in research preview and not on the default allowlist).
76
-
77
- **Save yourself typing** — add to `~/.bashrc` or `~/.zshrc`:
78
-
79
- ```bash
80
- alias claude-live='claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace'
81
- ```
82
-
83
- From now on, `claude-live` to enable Live mode, plain `claude` for everything else.
74
+ `live-claude` is now available. Use plain `claude` for everything else; use `live-claude` when you want Live mode for this skill.
84
75
 
85
76
  ---
86
77
 
@@ -88,7 +79,7 @@ From now on, `claude-live` to enable Live mode, plain `claude` for everything el
88
79
 
89
80
  ### Start a session
90
81
 
91
- Either `claude` (Batch only) or `claude-live` (Live available).
82
+ Either `claude` (JSON only) or `live-claude` (Live available).
92
83
 
93
84
  ### Invoke the skill in a project
94
85
 
@@ -96,13 +87,16 @@ Either `claude` (Batch only) or `claude-live` (Live available).
96
87
  /live-canvas
97
88
  ```
98
89
 
99
- Phase 0 probes the channel and decides what to do:
90
+ Phase 0 always asks which mode you want — Live channel or JSON file then calls the MCP tool that binds (or refuses) port 8788:
100
91
 
101
- | State | Skill behavior |
102
- |---|---|
103
- | Channel responding | Announces Live mode, goes straight into the interview |
104
- | Plugin installed but channel not responding (you forgot the dev flag) | AskUserQuestion: Batch now, or close and restart with the flag? |
105
- | Plugin not installed at all (first run) | AskUserQuestion: set up Live, or just use Batch? Prints the 4-step setup. |
92
+ | Choice | `channel_open` / `batch_open` result | Skill behavior |
93
+ |---|---|---|
94
+ | Live | `opened` | Live mode announces it, starts the interview |
95
+ | Live | `opened` + `took_over: <pid>` | Live mode announces it and that it took over a sibling live-canvas server (your prior session) |
96
+ | Live | `no_channel_capability` | Stops. Prints the exact `live-claude --continue` command for relaunch |
97
+ | Live | `in_use` (foreign holder) | Stops. Prints the holder pid + `ps -fp <pid>` so you can investigate |
98
+ | JSON | `opened` / `already_listening` | 📝 JSON mode — Submit writes to `.claude-design/feedback.jsonl` |
99
+ | JSON | `in_use` / MCP unavailable | 📝 JSON mode — Submit downloads a JSON file you paste back |
106
100
 
107
101
  ### Interview & generation
108
102
 
@@ -113,13 +107,15 @@ Skill asks 5 short questions (scope, pain points, inspiration, persona, constrai
113
107
  Open `http://localhost:<dev-port>/__live_canvas`. Click **Add Feedback** (bottom right), click any element in any variant, type a one-liner, Save.
114
108
 
115
109
  - Live mode: toast says "Pushed to Claude ✨", Claude acknowledges and edits the file, dev server hot-reloads.
116
- - Batch mode: toast says "Saved — submit when ready", pin stays on the element, counter in the Submit button ticks up.
110
+ - JSON mode: toast says "Saved — submit when ready", pin stays on the element, counter in the Submit button ticks up.
111
+
112
+ Need the page back? The overlay has a "−" button next to **Add Feedback** that collapses everything to a small circle in the corner — tap to expand again. Useful on mobile where the bar can cover what's underneath.
117
113
 
118
114
  Keep clicking until a winner emerges.
119
115
 
120
116
  ### Finish
121
117
 
122
- Click the pink **Finish** (Live) or **Submit** (Batch) button:
118
+ Click the pink **Finish** (Live) or **Submit** (JSON) button:
123
119
 
124
120
  1. Type the overall direction: e.g. *"Go with B's layout, A's button styling"*
125
121
  2. Click Finish
@@ -142,12 +138,11 @@ packages/claude/
142
138
  ├── skills/live-canvas/
143
139
  │ ├── SKILL.md # Skill instructions (phases, flow)
144
140
  │ ├── DESIGN_PRINCIPLES.md # UX/a11y/motion reference
145
- │ ├── INTEGRATION_NOTES.md # Design-time notes (channel paths explored)
146
141
  │ ├── README.md # This file
142
+ │ ├── dev/post-variants.html # Standalone demo for local QA of the overlay
147
143
  │ └── templates/
148
- │ ├── overlay-vanilla.js # Framework-agnostic overlay (~400 lines)
149
- ├── feedback-react/ # React overlay for React/Next/Vite projects
150
- │ └── demo/post-variants.html # Standalone demo for testing the overlay
144
+ │ ├── overlay-vanilla.js # Framework-agnostic overlay (~500 lines)
145
+ └── lab-banner.html # "This is a temp lab" notice snippet
151
146
  └── plugins/
152
147
  └── live-canvas-marketplace/
153
148
  ├── .claude-plugin/marketplace.json
@@ -188,9 +183,9 @@ The skill checks the cache dir to tell first-time vs returning users apart.
188
183
  <project-root>/
189
184
  └── .claude-design/
190
185
  ├── lab/variants/VariantA.tsx … VariantE.tsx
191
- ├── lab/FeedbackOverlay.tsx (React) OR overlay-vanilla.js (other)
186
+ ├── overlay-vanilla.js (copied into the project's public/static dir)
192
187
  ├── design-brief.json # Structured output from the interview
193
- └── feedback.jsonl # Batch mode only; deleted on Finish
188
+ └── feedback.jsonl # JSON mode only; deleted on Finish
194
189
  ```
195
190
 
196
191
  Plus a temporary route (e.g. `app/__live_canvas/page.tsx` for Next.js App Router). Everything under `.claude-design/` and the temporary route is deleted on Finish or Abort.
@@ -207,12 +202,11 @@ Plus a temporary route (e.g. `app/__live_canvas/page.tsx` for Next.js App Router
207
202
 
208
203
  ## The install pipeline, end to end
209
204
 
210
- 1. **Liteagents installer** copies files:
205
+ 1. **Liteagents installer** copies the skill:
211
206
  - `packages/claude/skills/live-canvas/` → `~/.claude/skills/live-canvas/`
212
- - `packages/claude/plugins/live-canvas-marketplace/` → `~/.claude/plugins/live-canvas-marketplace/`
213
- 2. **User, once:** runs `bash ~/.claude/plugins/live-canvas-marketplace/setup.sh` → installs the plugin's npm deps
207
+ 2. **User, once:** runs `bash packages/claude/plugins/live-canvas-marketplace/setup.sh`copies marketplace to `~/.claude/plugins/`, runs `npm install`, adds `live-claude` function to `~/.zshrc` and `~/.bashrc`
214
208
  3. **User, once:** in a Claude session, runs `/plugin marketplace add ~/.claude/plugins/live-canvas-marketplace` + `/plugin install live-canvas-channel@live-canvas-marketplace`
215
- 4. **User, every session that wants Live mode:** starts Claude with `--dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace` (or `claude-live` alias)
209
+ 4. **User, every session that wants Live mode:** runs `live-claude` (function installed by step 2)
216
210
  5. **User, whenever:** `/live-canvas` in any project
217
211
 
218
212
  Steps 1, 2, 3 are truly one-time. Step 4 is per-session. Step 5 is per-project-use.
@@ -221,32 +215,34 @@ Steps 1, 2, 3 are truly one-time. Step 4 is per-session. Step 5 is per-project-u
221
215
 
222
216
  ## Troubleshooting
223
217
 
224
- ### "Listening for channel messages…" appears on session start, but skill still says Batch
218
+ ### Port 8788 stuck from a prior session
225
219
 
226
- Port 8788 is stuck from an earlier session's server process. Kill it:
220
+ You shouldn't hit this — `channel_open` now detects sibling live-canvas servers (same uid, same plugin) and takes them over automatically. If you do see `{status: "in_use", holder_pid: <pid>}` from the tool, that means the holder is **not** a live-canvas server (the plugin refuses to kill anything it doesn't own). Investigate with:
227
221
 
228
222
  ```bash
229
- lsof -i :8788
230
- kill <pid>
223
+ ps -fp <pid> # what is it
224
+ kill <pid> # only if it's safe to stop
231
225
  ```
232
226
 
233
- Then `/reload-plugins` in the new session.
227
+ Then re-run `/live-canvas`.
228
+
229
+ ### Skill says `no_channel_capability` and refuses Live mode
234
230
 
235
- ### Skill says "No response on :8788" even though I set everything up
231
+ The session was started with plain `claude`, which can't receive channel notifications (notifications would be silently dropped). Open a fresh terminal and run `live-claude` — the function added to your shellrc by `setup.sh` runs `claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace`. Then `/live-canvas` in the new session works.
236
232
 
237
- Three common causes, in order of likelihood:
233
+ ### Skill says `/mcp` shows the plugin as failed
238
234
 
239
- 1. You didn't start this session with the dev flag. Close it, reopen with `claude-live`.
240
- 2. The plugin subprocess died on startup. In the session, run `/mcp` — look for `live-canvas` with its status. "Failed to connect" means a node/dep error: check `~/.claude/debug/<session-id>.txt` for the stderr.
241
- 3. You never ran step 2 of setup. Re-run `bash ~/.claude/plugins/live-canvas-marketplace/setup.sh`.
235
+ The plugin subprocess died on startup (usually a node/dep error). In the session, run `/mcp` — "Failed to connect" means look at `~/.claude/debug/<session-id>.txt` for the stderr. Common fix: re-run `setup.sh` so `npm install` runs again inside the plugin dir.
242
236
 
243
237
  ### Overlay loads in the browser but no pills appear
244
238
 
245
- The overlay script didn't load. Most common cause: you started the Python server inside the wrong directory so the relative `../overlay-vanilla.js` path couldn't resolve. Start the server one level up and navigate with the `/demo/` prefix.
239
+ The overlay script didn't load. Most common cause: you started a static file server inside the wrong directory so the relative `overlay-vanilla.js` path couldn't resolve. Start the server from the directory containing the lab's `index.html` (or `__live_canvas` route).
246
240
 
247
- ### "Pushed to Claude ✨" toast appears but nothing happens in the terminal
241
+ ### "Pushed to Claude ✨" toast appears but nothing lands in the terminal
248
242
 
249
- Either (a) you're not in a dev-flag session, or (b) an older channel server process is answering on 8788 and is stdio-connected to a dead session. See the two troubleshooting items above.
243
+ This shouldn't happen with v0.3.0+ the flag gate refuses bind from plain-claude sessions so the silent black-hole case is impossible. If you do see it, one of:
244
+ - You're on an old plugin (v0.2.0 or earlier). Run `/reload-plugins` in the session; the new in-memory MCP will be v0.5.0+.
245
+ - You're typing in the wrong session. Channel notifications go to whichever Claude session's MCP bound port 8788 — check `ss -lntp | grep 8788`, walk up the parent pid until you find the `claude` process, and switch terminals to that one.
250
246
 
251
247
  ### I want to uninstall
252
248