Skip to content

Run inside Claude Code Hub

Claude Code Hub puts several Claude Code tools in one window, one tab per app. Claude Code Marketplace is one of those tabs. The app works the same as it does standalone, with a few additions for keys, theme, and project.

The hub starts Claude Code Marketplace as a child process and sets three environment variables:

Variable Value
CLAUDE_HUB 1. Sets enabled in the hub settings, which turns on hub mode in the page.
HUB_URL The hub address, for example http://localhost:3540. It also controls the framing rules and the accepted Origin.
CLAUDE_CONFIG_DIR The Claude config dir that is active in the hub.

The app reads the config dir once at startup. When you switch the config dir in the hub, the hub uses a different Claude Code Marketplace process for that dir.

The hub also gives the app its SDK. In hub mode, the page asks the server for its hub settings at GET /hub-config, and the answer is {"enabled": true, "url": "<HUB_URL>"}. Standalone, the app has no /hub-config route and uses a stub of the SDK that talks to no hub, so none of the changes on this page apply. See Hub protocol v1.

A key press inside a tab does not reach the hub window by itself. In hub mode, Claude Code Marketplace sends these keys to the hub:

  • Ctrl+Alt+Left and Ctrl+Alt+Right
  • Ctrl+Alt plus any letter, with no Shift
  • Alt+1 to Alt+9, with no Ctrl or Shift

The hub acts on these keys and ignores the rest:

Key Hub action
Ctrl+Alt+Left / Ctrl+Alt+Right Go to the previous or next hub app.
Alt+1 to Alt+9 Go to the hub app with that number.
Ctrl+Alt+P Open the hub project picker.
Ctrl+Alt+W Open the hub config-dir picker.
Ctrl+Alt+A Open the hub app launcher.

The help overlay (?) shows a Hub group with the first three rows. It does not list Ctrl+Alt+W or Ctrl+Alt+A. Standalone, the Hub group is hidden, because the keys do nothing there. See Keyboard shortcuts for the keys of the app itself.

The light or dark mode and the color theme sync with the other hub apps in both directions. Change the theme in Claude Code Marketplace, and the other apps follow. Change it in another app, and Claude Code Marketplace follows.

The hub project picker (Ctrl+Alt+P) sets the project for all hub apps. When you pick a project there, Claude Code Marketplace switches to it and reloads its data. Project and local scope then refer to that project. The hub choice wins over the last project that the app remembers.

You can still use the app’s own project picker, the folder button in the top bar or Shift+P. See Install, enable, and remove plugins for what the scopes do.

Standalone, the server sends Content-Security-Policy: frame-ancestors 'none' and X-Frame-Options: DENY, so no page can put the app in a frame.

When HUB_URL is set, the server sends frame-ancestors 'self' http://localhost:* http://127.0.0.1:*, and drops X-Frame-Options. If the hub address is not on localhost or 127.0.0.1, the server adds the hub origin to that list. The server also accepts requests that carry the hub origin in the Origin header.

The page sends and accepts hub messages only for the hub origin. It ignores messages that do not come from its parent window.