Set up the skills repository
1
Create the repository
A private or internal GitHub repository, laid out as a Claude Code plugin marketplace: a
.claude-plugin/marketplace.json file at the root that lists each plugin, and one folder per plugin. Each plugin bundles one or more skills. A public repository can’t be selected in the next step; fork it into a private one first.2
Register the repository as a plugin marketplace
For a github.com repository, the GitHub connector must be enabled for your organization. On the Plugins page at
claude.ai/admin-settings/plugins, click Add plugins and choose Sync from GitHub. Select the repository, leave Sync automatically on (the default), and click Create.When you click Create, and on every sync after that, the whole repository is downloaded as one archive, and the archive can’t be larger than 512 MiB. A repository over that size, such as a large monorepo, is rejected with Download too large (>536.9MB) even when the plugins in it are small. Put the plugins in a smaller dedicated repository, or upload the plugin as a zip file instead.3
Grant Claude write access to the repository
Open an Access bundle, go to its Repositories tab, and add the repository. The Claude GitHub App must already be linked to your GitHub organization; see Configure GitHub access.
4
Attach the plugins to a scope
In the same bundle’s Plugins tab, toggle on the plugins from your new marketplace; each is off until you enable it. See Attach plugins.
How updates propagate
Once the repository is set up, Claude can propose changes and they reach channels automatically after you merge:
Every skill change reaches channels only after a human approves the merge; Claude opens the PR, you merge it.
Prompt Claude to propose updates
Claude won’t open skill PRs unprompted. Ask in the channel when something it learned should stick:Why a repository instead of uploading skills
You can also upload individual skills in the console without a repository. The repository pattern is worth the setup because Claude can propose changes to it, every change goes through version control and code review, and you can attach the same skills to multiple bundles without uploading them again.Upload a plugin as a zip file
To upload instead, on the Plugins page atclaude.ai/admin-settings/plugins, click Add plugins, choose Upload a file, and upload a .zip or .plugin archive of up to 200 MB. The archive has to be a Claude Code plugin, laid out in one of these ways:
- A
.claude-plugin/plugin.jsonmanifest at the archive root, with each skill in its own folder atskills/<name>/SKILL.md - The same layout inside a single top-level folder
- For a single skill, a
SKILL.mdat the top level whose frontmatter declares the plugin’s components
plugin.json, or with the manifest anywhere else is rejected at upload. After upload, the plugin is in your organization’s catalog but not attached anywhere. To make it available in channels, toggle it on in a bundle’s Plugins tab or add it directly on a scope; see Attach plugins.
Repository context files and MCP servers
A granted repository’sCLAUDE.md and .claude/rules/*.md load when Claude clones it, in the same format as Claude Code; see What loads from a repository and the Claude Code memory docs. A repository’s .mcp.json is not loaded. To give Claude an MCP server, put the .mcp.json in a plugin, next to its .claude-plugin/plugin.json, and attach the plugin; the Claude Code plugin docs cover the .mcp.json format, and Add a custom MCP server covers the credential the server needs.
What belongs in the repository
Skills in the repository reach every channel under the scope.
Related resources
- Attach plugins: how plugins and skills load into a scope
- Configure GitHub access: granting Claude write access to a repository
- What Claude Tag remembers: when channel memory is the right place instead