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 install | One exact version of one plugin | Any 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> |
| Auth | An axhub login or a plugins:read PAT, only while installing | A dedicated marketplace:read PAT — issued and renewed by axhub git setup --marketplace |
| Updating | Rerun axhub plugin install with the new version | Update the marketplace in Claude Code or Codex |
| Curated plugins provided by axhub | Can't be installed | Can 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 visibility | The plugin |
|---|---|
| Private · Invite-only | Doesn't appear in the list, installs, downloads, or the marketplace, even once approved |
| Internal | Company members can install it |
| External | Company 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.
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 --marketplaceIt 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/gitCheck 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>/gitLines 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.
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>codex plugin marketplace add https://api.axhub.ai/api/v1/marketplace/<company address>/git
codex plugin add <install name>@axhub-<company address>Start a new session and the plugin loads.
- Only a dedicated
marketplace:readPAT 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 aremote: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 --marketplacekeeps a stored token that has 7 or more days left, so you can rerun it anytime; add--rotateto issue a new one.axhub auth logoutrevokes it along with the rest. - You get the files exactly as uploaded. Executable files keep their execute permission (
100755), and the plugin's.gitignoreisn't applied. Only the plugin's.gitattributesis 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 --yesCheck — 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/hooksReinstall — remove it with the CLI-install removal commands in Security recall, then run the install command again.
Update — refresh the marketplace, then update the plugin.
# Claude Code
claude plugin marketplace update axhub-<company address>
claude plugin update <install name>@axhub-<company address>
# Codex
codex plugin marketplace upgrade axhub-<company address>
codex plugin add <install name>@axhub-<company address>Reinstall — remove it, then install it again.
# Claude Code
claude plugin uninstall <install name>@axhub-<company address>
claude plugin install <install name>@axhub-<company address>
# Codex
codex plugin remove <install name>@axhub-<company address>
codex plugin add <install name>@axhub-<company address>Check execute permission — clone the marketplace and look at the plugin files' modes. Executables show 100755, everything else 100644.
GIT_TERMINAL_PROMPT=0 git clone https://api.axhub.ai/api/v1/marketplace/<company address>/git axhub-marketplace-check
git -C axhub-marketplace-check ls-tree -r HEAD plugins/<install name>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.
| Delist | Security recall | |
|---|---|---|
| Who | App admins (owner, co-owners, workspace app admins) | The axhub security team |
| What | Every published version of the app | The versions with a confirmed problem |
| New installs and downloads | Blocked | Blocked |
| Publication review requests in progress | Withdrawn | Requests whose automated review hasn't ended are closed |
| Where installed with the CLI | Stays as is | Stays as is — you must remove it yourself |
| Where connected through the marketplace | Leaves 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 commands | Same — remove already installed copies yourself |
| Notification | None | The owning company's admins are notified, and axhub contacts the companies that received it |
| To serve it again | Upload a new version and get a publication review | Upload 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
delistmust run with your login (OAuth) — if the publishing PAT is active, clear it first withaxhub 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.
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.jsonIf you installed it through the marketplace, look for the plugin with @axhub-<company address> in claude plugin list or codex plugin list.
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>.
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.
Rotate keys
Treat the keys and tokens reachable from the computers where the plugin ran as exposed, and rotate them.
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.