Files
AgentHub/plugins/agenthub/commands/agenthub-update.md
T
nntrivi2001 6c605849d8 feat: workspace aliases, tab groups of split panes, native path picker (v2.1.0)
- /api/workspaces and `agenthub workspace(s)` / `--workspace` as aliases of
  /api/lanes and `agenthub lanes` / `--lane`; old names print one stderr note.
  REPL `help lanes|workspace|workspaces` resolves through the aliases.
- A workspace holds up to ten sessions (slots 0-9); every console tab is a
  group of 1-4 split panes (PaneGroups, agenthub.workspace.paneLayout);
  parseGroups keeps the stored active tab when an earlier one is dropped.
- Browse button beside path fields: POST /api/lanes/pick-path opens the OS
  picker on the server's desktop — loopback only and no forwarding header
  (EREMOTE), a display failure is ENODIALOG not a Cancel, the dialog is
  killed when the request closes, a folder field falls back to the in-app
  browser on any failure.
- Changes rail counts chip, image viewer (/git/raw), status bar session
  counts and per-day cost (`date=` on /api/pricing/cost).
- /agenthub-open and /agenthub-doctor run from the INSTALLED build
  (supersededBy), doctor offers fixes behind two confirmations; plugin-open
  treats a locked bootstrap as non-fatal.
- New-terminal shell waits for the first attach (issue #55).
- repo-onboarding / debug-live-issue skills removed.
- OpenAPI: pick-path, lane/date on /pricing/cost, tool on /run/history,
  /api/workspaces mount.
2026-10-06 11:31:26 +07:00

2.3 KiB

description
description
Pull the latest agenthub plugin version and refresh the dashboard runtime

Pull the newest agenthub release from its marketplace, then reinstall the runtime dependencies and restart the dashboard server against it. Use this to get a new dashboard build, or when /agenthub-doctor reports missing dependencies or a dead server.

First, find which marketplace this install's agenthub came from and pull the latest version into the plugin cache:

INSTALLED=$(claude plugin list 2>/dev/null | grep -o 'agenthub@[^ ]*' | head -1)
MARKETPLACE="${INSTALLED#agenthub@}"
if [ -z "$MARKETPLACE" ]; then
  echo "agenthub is not installed as a plugin (checkout install?) - nothing to update this way."
else
  claude plugin marketplace update "$MARKETPLACE"
  # An older Claude Code has no `-y` (and no prompt for it to answer).
  claude plugin update "agenthub@$MARKETPLACE" -y 2>/dev/null ||
    claude plugin update "agenthub@$MARKETPLACE"
fi

That downloads the new version into a NEW directory under ~/.claude/plugins/cache/, while ${CLAUDE_PLUGIN_ROOT} in this session still names the old one — and the old build's bootstrap refuses to run once a newer build is installed (supersededBy). So refresh the runtime from the build that is installed now: the new directory when one was just pulled, else this one. This stops the running dashboard server before starting the new one. Say so, then run:

ROOT=$(node -e 'console.log(require(process.argv[1]).supersededBy() || "")' \
  "${CLAUDE_PLUGIN_ROOT}/scripts/plugin-bootstrap.js")
ROOT="${ROOT:-${CLAUDE_PLUGIN_ROOT}}"
echo "Refreshing the AgentHub runtime from $ROOT"
node "$ROOT/scripts/plugin-bootstrap.js" --force
node "$ROOT/scripts/plugin-doctor.js"

Run it as ONE command (the shell does not keep ROOT between commands). The bootstrap runs in the foreground and can take a few minutes on a cold cache; the doctor that follows verifies the result.

If a new version was pulled, tell the user the dashboard already runs it, but this Claude Code session still loads the old plugin's commands and skills until they run /reload-plugins or start a new session.

Report the final state in a few lines. If the bootstrap failed, quote the decisive line from bootstrap.log in the runtime dir (<Data dir>/runtime — the doctor's Data dir row; by default ~/.claude/agenthub/runtime).