Claude-skill-registry debug-connection

Debug WebSocket connection issues between CLI and FigJam plugin. Use when diagrams aren't syncing, connection fails, plugin shows "Connecting..." indefinitely, or patches aren't being applied to canvas.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/debug-connection" ~/.claude/skills/majiayu000-claude-skill-registry-debug-connection && rm -rf "$T"
manifest: skills/data/debug-connection/SKILL.md
source content

WebSocket Connection Debugging

Architecture

CLI serve (Bun) ←── WebSocket ──→ Plugin UI (ui.ts) ←── postMessage ──→ Plugin Main (code.ts)
     │                                  │                                    │
  File watcher                    Browser APIs                          Figma API
  YAML parsing                    WebSocket client                      Canvas rendering

Common Issues

IssueSymptomSolution
CLI not running"Connecting..." indefinitelyStart
bun run packages/cli/src/index.ts serve diagram.yaml
Port in useConnection refusedCheck
lsof -i :3456
, use different port
Secret mismatchConnects then immediately closesMatch
--secret
value in CLI and plugin
YAML errorsConnected but no updatesFix validation errors in CLI output
docId mismatchNo response after helloEnsure plugin docId matches YAML
docId
Patches not appliedConnected, canvas unchangedCheck Plugin Main console for render errors

Debugging Steps

  1. CLI side: Check terminal for errors, verify YAML with
    bun run packages/cli/src/index.ts build diagram.yaml
  2. Plugin UI: Right-click plugin → Inspect → Console for WebSocket events
  3. Plugin Main: Figma Desktop → Plugins → Development → Open console

Message Flow

Plugin                          CLI
  │                              │
  │──── hello ─────────────────►│  {type:"hello", docId, secret?}
  │◄──── full ─────────────────│  {type:"full", rev, ir}
  │                              │
  │      [YAML changes]          │
  │◄──── patch ────────────────│  {type:"patch", baseRev, nextRev, ops}
  │                              │
  │      [Reconnect]             │
  │──── requestFull ───────────►│  {type:"requestFull", docId}
  │◄──── full ─────────────────│

JSON Import Errors

  • JSON must be an object with
    version
    ,
    docId
    ,
    nodes
  • DSL format:
    nodes
    as array
  • IR format:
    nodes
    as object (Record)
  • Validation errors shown in alert with path + message

Quick Test

# Start server
bun run packages/cli/src/index.ts serve examples/diagram.yaml

# Test with wscat
wscat -c ws://localhost:3456
> {"type":"hello","docId":"test"}