Skip to content
Automation
Skill

/panel-node-pack-sync

Keep the ComfyUI sidebar panel node-pack (comfyui-agent-panel) in step with the orchestrator after comfyui-mcp updates. Use this whenever the orchestrator was just updated (install_comfyui (action:"self_update"), npm i -g comfyui-mcp, a new version in the ENVIRONMENT line), when

From plugin
comfyui-mcp
88442 skills4 agents11 commands1 MCP

Claude Code

$ npx -y skills add artokun/comfyui-mcp --skill panel-node-pack-sync --agent claude-code

SKILL.md

panel-node-pack-sync.SKILL.md
name: panel-node-pack-sync
description: Keep the ComfyUI sidebar panel node-pack (comfyui-agent-panel) in step with the orchestrator after comfyui-mcp updates. Use this whenever the orchestrator was just updated (install_comfyui (action:"self_update"), npm i -g comfyui-mcp, a new version in the ENVIRONMENT line), when a panel/bridge command fails in a way that smells like version drift ("panel is too old", a graph_/ui_ command the panel doesn't implement, a feature that works in the docs but not in the sidebar), or when the user asks to update/pin/unpin the panel. It checks the installed panel version against what THIS orchestrator build needs, RESPECTS an explicit version pin (warn-only, never move a pinned user), offers a clear way to unset the pin, runs the sync through the verified install_comfyui(action:'panel') path, and reports the version RE-READ from disk. Never claim a sync that did not happen.

Keep the panel node-pack in sync with the orchestrator

The orchestrator (`comfyui-mcp`, from npm) and the sidebar panel (`comfyui-agent-panel` on the Comfy Registry, repo `comfyui-mcp-panel`) ship **separately**. Updating one does not update the other. A new orchestrator driving an old panel fails in confusing ways, such as a bridge command the panel doesn't implement or a feature that exists in the docs but not in the sidebar, and those failures are hard for a user to diagnose. This skill closes that gap.

The two rules that outrank everything else here

1. **Never report a sync that did not happen.** This whole feature sits on top of the fabricate-success fixes (#639/#641): ComfyUI-Manager reports its queue "drained" even when it never enqueued anything, and a `.bak`-style copy in `custom_nodes` can shadow the real panel in the browser. So the only version you may ever tell the user is the one **read back from disk after the fact**. If the tool throws, the sync FAILED. Say so plainly. Do not soften it, do not retry it into a success, do not report the version you *intended* to install.

2. **Never move a pinned user.** A pin is a promise. If the user pinned the panel, you **warn and stop**. You do not unpin for them, you do not "just this once", you do not sync anyway because the new version is obviously better. Offer to clear the pin, and act only if they say yes.

Step 1 — Look before you touch anything

install_comfyui(action:'panel', panel_action:'status')

This never errors. Read these fields:

| Field | Meaning | |---|---| | `installedVersion` | The panel version on disk (from its `pyproject.toml`). | | `sync.requiredPanelVersion` | The highest panel version **this** orchestrator build needs. | | `sync.decision` | What to do — the whole decision is made for you (Step 2). | | `sync.summary` | Plain-language explanation, safe to paraphrase to the user. | | `pin` | The active pin: `{ pinned, version, source: "env"\|"settings", reason }`. | | `shadows` | `.bak`-style copies that shadow the real panel in the browser. | | `isDevSymlink` | A developer's symlinked checkout — never ours to modify. |

Do not compute the comparison yourself. `sync.decision` already accounts for the pin, shadow copies, dev symlinks, remote/cloud mode, and unreadable versions.

Step 2 — Act on `sync.decision`

| `decision` | What it means | What you do | |---|---|---| | `meets-floor` | Panel clears the **minimum** the orchestrator needs. It is **not** a statement that a newer panel does not exist — nothing on this path knows the newest published version, and most panel fixes ship without raising the floor (#806). | Nothing, unless the user is chasing a bug. Say "meets the minimum (X ≥ Y)", never "up to date". If they are debugging, add that a newer panel may carry the fix and that the latest is published in the pack's `pyproject.toml`. | | `sync` | Behind, not pinned, nothing ambiguous. | Step 3 — sync it. | | `pinned-warn` | Behind, **but pinned**. | Step 4 — warn only. **Do not sync.** | | `blocked` | A shadow copy, or a pin we couldn't read. | Step 5 — get it unblocked first. | | `unknown` | The installed version isn't comparable (`nightly`, `dev`, unreadable) **and nothing is pinned**. | Report it, don't guess. Offer a deliberate `install_comfyui(action:'panel', panel_action:'update')` and let the user decide. (If they *were* pinned you'd have got `pinned-warn` instead, so `unknown` never means "quietly ignore a pin".) | | `dev-install` | Symlinked dev checkout. | Tell them to `git pull` their own checkout. Change nothing. | | `not-applicable` | Remote/cloud, or no local ComfyUI. | Explain the panel is managed on the ComfyUI host. |

Step 3 — Sync (`decision: "sync"`)

install_comfyui(action:'panel', panel_action:'sync')

That single call re-checks the decision at execution time (the pin may have been set a second ago), runs the update through the hardened, verified path, and re-reads the pack from disk afterwards. Read the result:

  • `synced: true` → it moved. Report **`verifiedVersion`**, the version observed

on disk after the op, not the one we asked for. Then tell the user **ComfyUI must be RESTARTED** to load it (`restartRequired: true`); this never auto-restarts. Now read `stillBehind`, which is **tri-state**:

  • `false` → the panel provably meets what the orchestrator needs. Done.
  • `true` → the update applied but did **not** close the gap. Say so; do not

round it up to "you're current now".

  • **`null`** → it landed, but the resulting version (e.g. `nightly`) can't be

compared, so whether the mismatch is fixed is **unknown**. Say exactly that. `null` is not `false`. Never report it as "you're fine".

  • `synced: false` → nothing was changed. `decision` says why (`pinned-warn`,

`meets-floor`, `blocked`, …). This is a normal outcome, not a failure.

  • **The tool errored** → the sync FAILED. The error text names the cause

(ComfyUI-Manager's stale-3.x silent no-op, a shadow copy, an unverifiable post-state) and

Read more
@artokun
Ships withcomfyui-mcp

<img src="docs/images/demo-poster.jpg" width="760" alt="The Agent panel driving ComfyUI end to end. Click to watch the demo"> The Agent panel driving ComfyUI end to end. It reads what is installed locally, wires the graph, frees VRAM, and runs the render.

88442 skills4 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
884
Star history of artokun/comfyui-mcp on GitHub, a chart by star-history.com

Other skills on comfyui-mcp.

ai-toolkit-trainer

ai-toolkit-trainer

Train custom LoRAs with ostris AI-Toolkit. Covers WAN 2.2/2.1 (people, styles, video motion) and Z-Image (Turbo & Base, low-VRAM…

@artokun@artokunInstall Skill
anima-base

anima-base

Anime/illustration text-to-image (ANIMA 1.0, ~2B Cosmos DiT). Use for anime, manga, illustrated characters; accepts Danbooru tags…

@artokun@artokunInstall Skill
anima-lora-trainer

anima-lora-trainer

Train a custom anime LoRA on the ANIMA base model with Citron's local Gradio trainer (kohya sd-scripts), <6GB VRAM,…

@artokun@artokunInstall Skill
civitai

civitai

Discover Civitai models with the BUILT-IN download_model action:"search_civitai" and install/generate them locally. Find a…

@artokun@artokunInstall Skill
color-correction

color-correction

Diagnose and fix video/image color OBJECTIVELY with the get_image (action:"analyze_color") tool (scopes/stats such as black/white…

@artokun@artokunInstall Skill
comfyui-core

comfyui-core

Core ComfyUI knowledge covering workflow format, node types, pipeline patterns, and MCP tool usage

@artokun@artokunInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n11d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about panel-node-pack-sync.

Which coding agents can use panel-node-pack-sync?
panel-node-pack-sync installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.