Sync to claude.ai
claude.ai, Claude Desktop and Cowork get organization plugins from a marketplace synced from a GitHub or GitLab repository. Waxell keeps that repository up to date: every time you approve or revoke something, Waxell commits the change, and claude.ai picks it up — usually within seconds.
Waxell approves ──▶ commit to your repo ──▶ claude.ai syncs (webhook) ──▶ Desktop · Cowork · claude.ai
You connect two things once:
| Connection | Who | Gives |
|---|---|---|
| Waxell → your repository | Waxell admin | Waxell write access to the repository, to commit approvals. |
| claude.ai → your repository | claude.ai Owner | claude.ai read access, to sync the marketplace. |
They are separate credentials; neither sees the other's.
Choose your provider: GitHub · GitLab
Managing several clients? Use one GitHub App for all of them instead of a token per client.
GitHub
Step 1 — Create the repository
Create a private repository for the marketplace, for example
your-org/claude-plugins, under your GitHub organization. Initialize it with
a README — Waxell needs at least one commit to write to.
Use a dedicated repository. Waxell manages plugins/,
.claude-plugin/marketplace.json and README.md; it never touches anything
else in the repository.
Step 2 — Give Waxell write access
Create a fine-grained personal access token at GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token:
| Field | Set to |
|---|---|
| Resource owner | Your organization (not your username) |
| Expiration | Your policy — Waxell shows when a token stops working |
| Repository access | Only select repositories → the marketplace repository |
| Permissions → Repository → Contents | Read and write |
Leave everything else at its default (GitHub adds Metadata: Read-only itself). The token can write files in that one repository and nothing else.
The organization must allow fine-grained tokens: Organization settings → Personal access tokens → Settings. If it requires approval, approve the token under Pending requests.
Step 3 — Connect it in Waxell
- Open Govern → Skills & Plugins → Settings.
- Under Approved marketplace, step 2 Claude Desktop, Cowork and claude.ai — sync through a repository, click Connect a repository.
- Fill in:
- Provider: GitHub
- Repository:
your-org/claude-plugins(or its URL). On GitHub Enterprise — Cloud (yourco.ghe.com) or Server — paste the full URL. - Branch:
main - Access token: the token from step 2
- Click Connect and sync.
Waxell checks the token can push before saving it, stores it encrypted with your workspace's own key, and makes the first commit.
Step 4 — Connect it in claude.ai
As a claude.ai Owner:
- Admin settings → Git providers → GitHub → Enable GitHub integration, then Connect. Install the Claude GitHub App on your organization and, under repository access, select only the marketplace repository.
- Admin settings → Plugins & skills → Add → Add marketplace → Sync from GitHub, and pick the repository.
- Turn on Sync automatically.
Then continue with Set who sees it.
For a repository on GitHub Enterprise rather than github.com, step 4 uses Admin settings → Git providers → GitHub Enterprise → Connect instead: enter the hostname and the details of a GitHub App created on that instance (with the callback URL claude.ai shows). Install that app only on the organization that holds the marketplace repository.
GitLab
Step 1 — Create the project
Create a private project for the marketplace, for example
your-group/claude-plugins. gitlab.com and self-managed GitLab both work.
Use a dedicated project. Waxell manages plugins/,
.claude-plugin/marketplace.json and README.md; it never touches anything
else in the project.
Step 2 — Give Waxell write access
In the project, Settings → Access tokens → Add new token:
| Field | Set to |
|---|---|
| Role | Developer (or higher) |
| Scopes | api |
| Expiration | Your policy |
Step 3 — Connect it in Waxell
- Open Govern → Skills & Plugins → Settings.
- Under Approved marketplace, step 2 Claude Desktop, Cowork and claude.ai — sync through a repository, click Connect a repository.
- Fill in:
- Provider: GitLab
- Repository:
https://gitlab.com/your-group/claude-plugins(or the path; for self-managed GitLab, use your instance's URL) - Branch:
main - Access token: the token from step 2
- Click Connect and sync.
Step 4 — Connect it in claude.ai
As a claude.ai Owner:
-
Admin settings → Git providers → GitLab → Connect. Enter your GitLab hostname and an access token for claude.ai to read with.
Use anapi+ Maintainer token hereWith the api scope and the Maintainer role, claude.ai installs a push webhook on the project, so every Waxell commit syncs in seconds. A read-only token works too, but claude.ai then syncs on its own schedule.
-
Admin settings → Plugins & skills → Add → Add marketplace → Sync from GitLab, and pick the project.
-
Turn on Sync automatically.
Set who sees it
A new marketplace in claude.ai starts at Default access: Not available. Approvals sync, but nobody sees them until you change it.
In claude.ai, open the marketplace (Plugins & skills → Marketplaces) and set Default access:
| Setting | Effect for each approved plugin |
|---|---|
| Not available | Hidden. |
| Available to install | Listed; people install it themselves. |
| Installed by default | Installed for everyone; they can remove it. |
| Required | Installed for everyone; they can't remove it. |
To make a single plugin Required — for example one you marked Required in Waxell — set it on that plugin's row in Inventory. claude.ai keeps these per-plugin settings across every sync.
What happens on each decision
| In Waxell you… | Waxell commits | In claude.ai |
|---|---|---|
| Approve | Adds the plugin to the repository | Appears in the marketplace (per its access setting) |
| Revoke | Removes it | Removed from the marketplace |
| Approve a new version | Replaces the old one | Updates in place; its access setting is kept |
| Change install mode only | Nothing | — (set access in claude.ai) |
Approvals made in quick succession are committed together. A bare skill is published as a single-skill plugin of the same name.
When nothing is approved, the repository holds one empty placeholder plugin,
waxell-placeholder — it contains no skills, commands, hooks or servers. This
keeps the marketplace valid so a revoke always takes effect in claude.ai.
Manage the connection
In Settings → Approved marketplace, step 2:
| Control | Does |
|---|---|
| Sync now | Re-checks the repository and commits anything missing. Safe to press any time. |
| Edit | Change the repository, branch or token. Leave the token blank to keep the stored one. |
| Pause / Resume | Stop committing approvals, without disconnecting. |
| Disconnect | Stop writing to the repository. The repository is left as it is. |
The status line shows In sync, the last commit (linked), and how many plugins are in the repository. If a sync fails, it says why — see Troubleshooting.
Each repository's history is a full record: every commit says what was approved or revoked, and by whom.