Company plugin marketplace

When a plugin is served, connecting the company marketplace to Claude Code or Codex, updating and reinstalling, and delisting versus a security recall

This page covers the two ways to install company plugins, and how to update, delist, and recall them after they're installed.
If you're installing for the first time, start with the Company plugins quickstart. The commands on this page are for axhub CLI v0.50.0.

Two ways to install

Install with the CLI (axhub plugin install)Connect the company marketplace
What you installOne exact version of one pluginAny plugin you pick from the company marketplace list
Name shown in Claude Code or Codex<install name>@axhub-app-<app ID><install name>@axhub-<company address>
AuthAn axhub login or a plugins:read PAT, only while installingA dedicated marketplace:read PAT — issued and renewed by axhub git setup --marketplace
UpdatingRerun axhub plugin install with the new versionUpdate the marketplace in Claude Code or Codex
Curated plugins provided by axhubCan't be installedCan be installed

<app ID> is the plugin app's UUID without hyphens (32 characters). Use the CLI install to pin an exact version, and connect the marketplace to pick and update all company plugins inside the host.

When a plugin is served

A plugin is served only when its publication review is approved and the app's visibility is Internal or External.

App visibilityThe plugin
Private · Invite-onlyDoesn't appear in the list, installs, downloads, or the marketplace, even once approved
InternalCompany members can install it
ExternalCompany members can install it, and anyone outside the company can download it without signing in

When visibility is why it isn't served, axhub plugin manage status --app <app> says [공개범위 때문에 미제공] (not served because of visibility). There's no way yet to share a plugin only with invited people. To widen the visibility, get a visibility review (Visibility & access). Narrowing the visibility keeps the approval and only stops serving; once a review that widens it again is approved, it's served again without another approval.

Connect the company marketplace

This lets Claude Code or Codex read the company marketplace directly, like a git repository. No token goes into the URL; the axhub CLI hands git the credential instead.

1

Set up the connection

Run it while signed in (axhub auth login). If you belong to more than one company, --tenant is required.

axhub --tenant <company UUID or address> git setup --marketplace

It issues a dedicated 30-day marketplace:read PAT, keeps it in axhub's git credential store, and has axhub answer git's credential requests for the marketplace address. The token value is never printed.

Configured the plugin marketplace for tenant acme (issued a new 30-day marketplace:read credential).
URL: https://api.axhub.ai/api/v1/marketplace/acme/git
Check: GIT_TERMINAL_PROMPT=0 git ls-remote https://api.axhub.ai/api/v1/marketplace/acme/git
Add to Claude Code: claude plugin marketplace add https://api.axhub.ai/api/v1/marketplace/acme/git
Add to Codex: codex plugin marketplace add https://api.axhub.ai/api/v1/marketplace/acme/git
2

Check the connection

Run the output's Check command. GIT_TERMINAL_PROMPT=0 makes git fail right away instead of asking for a password when there's no credential.

GIT_TERMINAL_PROMPT=0 git ls-remote https://api.axhub.ai/api/v1/marketplace/<company address>/git

Lines with a commit hash mean you're connected. On failure, git shows the reason and the fix command as remote: lines. Rerunning axhub --tenant <company> git setup --marketplace fixes most of them.

3

Add it to Claude Code or Codex and install

claude plugin marketplace add https://api.axhub.ai/api/v1/marketplace/<company address>/git
claude plugin install <install name>@axhub-<company address>

Start a new session and the plugin loads.

  • Only a dedicated marketplace:read PAT is accepted. The token is stored as a git credential, so it carries only marketplace read access. A full-access PAT or a scoped PAT with other scopes is refused, and git shows why as a remote: line.
  • Don't put a token in the URL. A https://<token>@… URL stays as is in your shell history and in the Claude Code or Codex settings files.
  • The token lasts 30 days. When it's refused, axhub issues a new one once through your login session. git setup --marketplace keeps a stored token that has 7 or more days left, so you can rerun it anytime; add --rotate to issue a new one. axhub auth logout revokes it along with the rest.
  • You get the files exactly as uploaded. Executable files keep their execute permission (100755), and the plugin's .gitignore isn't applied. Only the plugin's .gitattributes is left out of the marketplace git — so line-ending conversion or LFS handling on the receiving checkout can't break hooks. The ZIP (axhub plugin download, CLI install) still contains it.

Update, reinstall, and check execution

Once a new version is approved and served, update it the way you installed it. After an update or reinstall, restart Claude Code or Codex for the new version to load.

Update — rerun the install command with the new version and it's replaced in place.

axhub plugin install --tenant <company UUID> --app <app> --version <new version> --host claude --execute --yes

Check — see that claude plugin list or codex plugin list shows the new version. The CLI install record ~/.axhub/plugins/<app UUID>/<claude or codex>/marketplace/.axhub-install.json also keeps version and sha256 (on Windows, .axhub\plugins in your user home).

Check execute permission — executables must be -rwx------, everything else -rw-------.

ls -l ~/.axhub/plugins/<app UUID>/claude/marketplace/plugin/hooks

Reinstall — remove it with the CLI-install removal commands in Security recall, then run the install command again.

Older versions that lost execute permission

If hook scripts or bin/ tools don't run, they lost their execute permission. The fix depends on the cause.

  • A version published with a CLI older than v0.50.0 — the uploaded files themselves carry no execute permission, so fixing the server and the installer doesn't bring it back. The author must publish a new version number with CLI v0.50.0 or newer and get a publication review. On Windows, publish from inside a git repository or mark executables with --executable <path>. Users update as above once the new version is served.
  • Installed with a CLI older than v0.50.0 — the version is fine, but it was installed without execute permission. Upgrade the CLI and reinstall.
  • Installed through the company marketplace — the marketplace git used to drop execute permission too. Update the marketplace, then reinstall.

After fixing it, check again with the execute-permission check above.

Delisting versus a security recall

Both stop new installs, but who does it and what remains differ.

DelistSecurity recall
WhoApp admins (owner, co-owners, workspace app admins)The axhub security team
WhatEvery published version of the appThe versions with a confirmed problem
New installs and downloadsBlockedBlocked
Publication review requests in progressWithdrawnRequests whose automated review hasn't ended are closed
Where installed with the CLIStays as isStays as is — you must remove it yourself
Where connected through the marketplaceLeaves the list from the next marketplace update, so it can't be newly installed or updated. To be sure an installed copy is gone, use the removal commandsSame — remove already installed copies yourself
NotificationNoneThe owning company's admins are notified, and axhub contacts the companies that received it
To serve it againUpload a new version and get a publication reviewUpload a fixed new version and get a publication review. A recall can't be undone

axhub can't remotely turn off or delete a plugin that's already installed. After a delist or a recall, its hooks, MCP servers, and skills can keep running on the computers where it's installed until they're removed.

Where to ask for a delist

  • A plugin you manage — press Delist on the Deploy tab of the app console. With the CLI, preview it and then run it. The CLI delist must run with your login (OAuth) — if the publishing PAT is active, clear it first with axhub auth pat unset.

    axhub plugin delist --app <app>
    axhub plugin delist --app <app> --execute --yes
  • A plugin someone else made — ask the app's owner (shown on the app's store page) or your workspace admin. Workspace app admins can delist it too.

  • A security issue (a leaked secret, a malicious hook, …) — tell your workspace admin right away and report it to the axhub team with axhub feedback -m "<plugin name> <version> security recall request: <what's wrong>". Don't include secret values. While waiting for the recall, an app admin can delist it first to stop new installs.

The plugin skill (plugins) doesn't delist. Use the paths above.

Security recall

When axhub recalls a version for a security issue, it's taken out of downloads, CLI installs, and the company marketplace (list, ZIP, git), and axhub plugin manage status --app shows it as [보안 회수됨] (security recall). Remove it yourself where it's installed, in this order.

1

Find where it's installed

If you installed it with the CLI, read install_name, version, sha256, and marketplace_name from the install records.

cat "${AXHUB_PLUGIN_HOME:-$HOME/.axhub/plugins}"/*/*/marketplace/.axhub-install.json

If you installed it through the marketplace, look for the plugin with @axhub-<company address> in claude plugin list or codex plugin list.

2

Remove it from Claude Code or Codex

Installed with the CLI — <install name> and <marketplace_name> are the values from the install record.

# Claude Code
claude plugin uninstall <install name>@<marketplace_name> --scope user
claude plugin marketplace remove <marketplace_name> --scope user
# Codex
codex plugin remove <install name>@<marketplace_name>
codex plugin marketplace remove <marketplace_name>

Delete the local copy after removing it from the host. Deleting it first leaves the host pointing at a missing path.

rm -rf "${AXHUB_PLUGIN_HOME:-$HOME/.axhub/plugins}/<app UUID>/<claude or codex>"

Installed through the marketplace

# Claude Code (if installed at project scope, run with --scope project in that project)
claude plugin uninstall <install name>@axhub-<company address> --scope user
# Codex
codex plugin remove <install name>@axhub-<company address>

To disconnect the marketplace as well, run claude plugin marketplace remove axhub-<company address> --scope user or codex plugin marketplace remove axhub-<company address>.

3

Restart and check

Restart Claude Code or Codex so running hooks and MCP servers stop. Check that it's gone from claude plugin list or codex plugin list.

4

Rotate keys

Treat the keys and tokens reachable from the computers where the plugin ran as exposed, and rotate them.

5

Return to a safe version

Once the owner publishes a fixed new version and it's approved, install it again following Update. A recalled version number isn't reused.