Follow Discord
Sweep 25 Sep 2026 · 19:33Z Build v2.1.283 504 read Stable v2.1.274 Latest v2.1.283 Next v2.1.283 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One capture · claude-docs

One read of Claude Documentationclaude-docs-20260925T180706Z

76 pages moved out of 255 read.

Pages moved 76 significant first
Pages read 255 in this capture
Captured 18:07 UTC
Corpus hash 62975fc51967 corpus-hash

What this read moved

51-75 of 76, page 3 of 4

This capture is too large to show at once. Changes 51-75 of 76 are below, significant first; the rest are on the following screens.

plugins/create-with-claude New page · 112 lines, new page

# Create a plugin with Claude ## Create the plugin with Claude's help ### Start from the Add menu ### Describe and save the plugin ### Review what Claude made ## Use, disable, or remove your plugin ## Submit a plugin you created with Claude ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

# Create a plugin with Claude

> Make a plugin for your own workflow from claude.ai or the desktop app without writing files: choose Create with Claude and answer Claude's questions.

A [plugin](/docs/plugins/overview) packages skills, commands, and connectors. You can make one for yourself in claude.ai or the Claude desktop app without writing files: from [**Customize > Plugins**](https://claude.ai/customize/plugins), select **Add > Create with Claude**, describe what you need, and save the plugin Claude produces to your account.

A plugin you create this way is for you. It lives on your account, and on a Team or Enterprise plan you can [share it](/docs/plugins/share) with specific people or your whole organization from its page in Customize. It isn't a directory listing; if you later want that, see [Submit a plugin you created with Claude](#submit-a-plugin-you-created-with-claude) at the end of this page.

<Note>
  * If you'd rather write the files yourself, see [Plugin structure and testing](/docs/plugins/build)
  * If you want to make a plugin available to everyone in your organization, see [Publish a plugin to your organization](/docs/plugins/share#publish-a-plugin-to-your-organization)
</Note>

To begin, [start a new plugin from the Add menu](#start-from-the-add-menu), [describe it to Claude and save it](#describe-and-save-the-plugin), then [review the plugin Claude made](#review-what-claude-made).

## Create the plugin with Claude's help

When you create a plugin with Claude, you start a conversation from the **Add** menu on [**Customize > Plugins**](https://claude.ai/customize/plugins), describe the task you want the plugin to handle, and save the plugin that Claude produces.

### Start from the Add menu

To start a new plugin:

<Steps>
  <Step title="Open the Add menu">
    Go to [**Customize > Plugins**](https://claude.ai/customize/plugins) in claude.ai or the desktop app and select **Add**.
  </Step>

  <Step title="Choose how to create it">
    Choose one of these:

    * **Create with Claude**: start a new conversation, or a new Cowork task in the desktop app, with a request to create a plugin already filled in for you to send. Choose this when you can describe the task you want the plugin to handle but don't want to write skill files
    * **Create a plugin**: fill in a form with the plugin's name and what it helps with, then write its skills, commands, and connectors in an editor. Choose this when you already know what each piece should say
  </Step>
</Steps>

If neither item appears in the **Add** menu, plugin creation isn't available on your account. Your organization can turn it off, and so can your IT department's configuration of the desktop app. [Manage plugins for your organization](/docs/plugins/admin#control-what-members-add-themselves) covers the organization setting.

### Describe and save the plugin

After you choose **Create with Claude**, a conversation opens where you tell Claude what the plugin is for, and Claude assembles it as a `.plugin` file that you save to your account:

<Steps>
  <Step title="Describe what the plugin is for">
    Tell Claude the job the plugin should help with, in the same words you'd use to explain it to a colleague: the task, when it comes up, and what a good result looks like.
  </Step>

  <Step title="Answer Claude's questions">
    Answer Claude's follow-up questions, such as which of your connectors the plugin should use. You can change any of it later.
  </Step>

  <Step title="Save the plugin Claude assembles">
    Claude writes the skills and commands, includes the connectors you chose, and shows the result as a file card in the conversation. Select **Save plugin** on that card to add it to your account. It's then listed under **Customize > Plugins**, on the **Yours** view.
  </Step>
</Steps>

### Review what Claude made

Check the plugin before you rely on it:

<Steps>
  <Step title="Open the plugin">
    Open **Customize > Plugins** and select the new plugin.
  </Step>

  <Step title="Read what it contains">
    Read the skills, commands, and connectors it contains.
  </Step>

  <Step title="Sign in to its connectors">
    Sign in to any bundled connector from the plugin's page.
  </Step>

  <Step title="Try it on a real request">
    Start a chat, or a Cowork task in the desktop app, with the kind of request the plugin is for, and check that Claude follows the plugin's skills.
  </Step>
</Steps>

## Use, disable, or remove your plugin

The plugin is on your account for the organization you created it in, so it's available in your chats, in Cowork, and in Claude Code as a synced plugin.

Open the plugin from **Customize > Plugins** to disable or remove it:

* **Disable it**: turn off the plugin's toggle
* **Remove it**: open its menu and select **Remove** to delete it from your account

To give the plugin to other people in your organization, see [Share a plugin with teammates](/docs/plugins/share). It covers sharing with specific people and publishing to your organization's library, both on Team and Enterprise plans.

## Submit a plugin you created with Claude

Anthropic's directory reads plugins from a GitHub repository, so a plugin that lives only on your account can't be submitted as it is. If you decide you want it listed, get its files from the same conversation and go through the normal submission route:

<Steps>
  <Step title="Ask Claude for the plugin as a folder">
    In the conversation where Claude made the plugin, ask for it "as a plugin folder I can push to GitHub for the directory", download the zip Claude produces, and check that it has `.claude-plugin/plugin.json`, the `skills/` folder, a `README.md`, and a `LICENSE`.
  </Step>

  <Step title="Check the manifest and README">
    Unzip the folder and compare `plugin.json` with [Write the manifest](/docs/plugins/build#write-the-manifest). Claude may include fields the manifest doesn't use and leaves placeholders such as your name for you to fill in. If you have Claude Code installed, run `claude plugin validate` on the folder, as [Check the plugin on your machine](/docs/plugins/pre-submission-checklist#check-the-plugin-on-your-machine-optional) describes.
  </Step>

  <Step title="Push and submit">
    Push the folder to a public GitHub repository, then follow [Submit a plugin](/docs/plugins/submit).
  </Step>
</Steps>

## Next steps

* [Plugins](/docs/plugins/overview#manage-installed-plugins): turn off, remove, or update plugins on your account
* [Plugin feature support across platforms](/docs/plugins/platform-support): check which of the plugin's components work in chat, Cowork, and Claude Code
* [Share a plugin with teammates](/docs/plugins/share): give the plugin to specific people or your organization

plugins/org-rollout New page · 101 lines, new page

# Roll out a plugin to your whole organization ## Choose a rollout route ## Roll out through both routes ### If a developer has the plugin from both routes ## Build one repository for both audiences ## Update a plugin you've rolled out ### Update through organization settings ### Update through managed settings ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

# Roll out a plugin to your whole organization

> Get your organization's plugin to members in claude.ai and Cowork and to developers in Claude Code by using organization settings and managed settings together.

You can get your organization's own plugin to every member two ways, and each reaches different people:

* **Organization settings on claude.ai**: members get the plugin on their accounts, where chat and Cowork use it. Plugins you add this way stay private to your organization
* **Claude Code managed settings**: Claude Code installs the plugin on developers' machines

This page is for the person rolling out a plugin their organization built, on a Team or Enterprise plan.

<Note>
  * If you want to list a plugin publicly, see [Publish to the directory](/docs/directory/publish)
  * If you haven't built the plugin yet, see [Build your first plugin](/docs/plugins/quickstart) and [Plugin structure and testing](/docs/plugins/build)
</Note>

## Choose a rollout route

The table compares organization settings on claude.ai with Claude Code managed settings on who receives the plugin and what each route asks of you.

|                           | Organization settings on claude.ai                                                                                 | Claude Code managed settings                                                                                                    |
| :------------------------ | :----------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
| Who receives the plugin   | Members, on their claude.ai account: in chat, in Cowork, and in Claude Code sessions that sync from that account   | Claude Code on every machine that receives the settings                                                                         |
| Where you set it up       | [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory)              | Server-managed settings, an MDM policy, or a `managed-settings.json` file                                                       |
| What you set              | An availability for each plugin, such as **Installed by default** or **Required**                                  | `extraKnownMarketplaces` to register your marketplace and `enabledPlugins` to install plugins from it                           |
| Access to your repository | Members need none. Organization sync reads the repository through your organization's GitHub or GitLab connection. | Each machine fetches the marketplace itself. For a private Git repository, it uses the Git credentials already on that machine. |
| Which components load     | Depends on the surface. See [Plugin feature support across platforms](/docs/plugins/platform-support).                  | Every component                                                                                                                 |
| Full setup steps          | [Manage plugins for your organization](/docs/plugins/admin)                                                             | [Manage Claude Code plugins for your organization](https://code.claude.com/docs/en/plugins/org) in the Claude Code docs         |

A plugin on a member's account reaches Claude Code as a synced plugin in Cowork and in terminal sessions where the member signs in with their claude.ai account on Claude Code v2.1.273 or later. [Plugins synced from claude.ai](https://code.claude.com/docs/en/plugins/loading#synced-plugins) has the sign-in and timing rules. For developers whose terminal sessions don't sync from a claude.ai account, use managed settings.

## Roll out through both routes

Use both routes when the plugin is for people in chat and Cowork and also for developers whose Claude Code sessions don't sync from a claude.ai account.

<Steps>
  <Step title="Lay out the repository as a marketplace">
    Put the plugin in a Git repository with a `.claude-plugin/marketplace.json` that lists it. You use the same repository for both routes. [Create a marketplace](https://code.claude.com/docs/en/plugins/create-marketplace) in the Claude Code docs covers the format.
  </Step>

  <Step title="Check the repository against the organization sync rules">
    Organization sync is stricter than Claude Code about the repository's visibility and about which plugin source types it accepts, and it rejects a plugin with a top-level `bin/` directory. Check [the plugin sources that organization sync accepts](/docs/plugins/org-sync#plugin-sources-that-organization-sync-accepts) before you continue.
  </Step>

  <Step title="Sync the repository from organization settings">
    In [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory), add the repository as [Add your own plugins](/docs/plugins/admin#add-your-own-plugins) describes, then [set each plugin's availability](/docs/plugins/admin#set-availability).
  </Step>

  <Step title="Register the same marketplace in managed settings">
    Set `extraKnownMarketplaces` and `enabledPlugins` as [Pre-install and require plugins](https://code.claude.com/docs/en/plugins/org#pre-install-and-require-plugins) describes. To limit developers to your marketplace, see [Restrict what users can install](https://code.claude.com/docs/en/plugins/org#restrict-what-users-can-install).
  </Step>

  <Step title="Confirm on each surface">
    * **In claude.ai**: as a member, open [**Customize > Plugins**](https://claude.ai/customize/plugins) and check that the plugin appears there
    * **On a developer's machine**: start Claude Code and run `/plugin`, which lists the marketplace and the plugin
  </Step>
</Steps>

### If a developer has the plugin from both routes

A developer can end up with the plugin from both routes. Claude Code loads one plugin per name. It loads the copy that managed settings install and reports the synced copy as not loaded, as [Name conflicts](https://code.claude.com/docs/en/plugins/loading#name-conflicts) describes.

## Build one repository for both audiences

One plugin folder can serve both audiences, because each surface skips the components it doesn't load. Hooks and agents load in Cowork and Claude Code and not in chat, and a local MCP server doesn't run in chat. Check each component you include against [Plugin feature support across platforms](/docs/plugins/platform-support) before you promise a behavior to people who only use chat.

## Update a plugin you've rolled out

You release an update by pushing to the repository. How the update reaches people depends on the route.

### Update through organization settings

Organization sync reads the repository's default branch, and members get the new version after the marketplace syncs. It syncs when an Owner selects **Re-sync** or, with **Sync automatically** on, when someone pushes to the default branch. Nothing syncs on a schedule. Tags aren't read, so a tag by itself releases nothing.

**Re-sync** syncs the marketplace now, so members get the version on the default branch without waiting for a push. To re-sync:

<Steps>
  <Step title="Open the Marketplaces tab">
    Go to [**Organization settings > Plugins & skills > Marketplaces**](https://claude.ai/admin-settings/skills?tab=marketplaces).
  </Step>

  <Step title="Re-sync the marketplace">
    Open the menu in the marketplace's row and select **Re-sync**.
  </Step>

  <Step title="Retry if you synced recently">
    If you see **You synced recently**, wait the number of seconds the message gives, then select **Re-sync** again.
  </Step>
</Steps>

### Update through managed settings

Claude Code refreshes a marketplace and updates the plugins installed from it when auto-update is on for that marketplace. [Set update policy](https://code.claude.com/docs/en/plugins/org#set-update-policy) covers turning it on for your fleet.

If your `plugin.json` sets `version`, raise it with every release, because Claude Code compares it to decide whether an installed plugin has an update.

## Next steps

* [Sync your organization's plugins from a repository](/docs/plugins/org-sync): check your repository and plugin sources against the rules organization sync enforces
* [Manage plugins for your organization](/docs/plugins/admin): set availability for everyone or for user groups, and control what members can add themselves
* [Manage Claude Code plugins for your organization](https://code.claude.com/docs/en/plugins/org): set the managed-settings keys and deliver them to developers' machines

plugins/org-sync New page · 113 lines, new page

# Sync your organization's plugins from a repository ## Give organization sync access to your repository ### Sync a marketplace from github.com ### Sync a GitLab-hosted marketplace ## Plugin sources that organization sync accepts ### Keep executables out of the top-level bin directory ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

# Sync your organization's plugins from a repository

> Distribute your organization's plugins from a GitHub or GitLab repository through organization settings, including repository requirements and GitLab setup.

You can distribute your organization's own plugins by syncing a Git repository that holds them from [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory). Members then find those plugins under **Customize > Plugins** with the availability you set.

This page is for the Owner who adds the repository and for the engineer who maintains it. It covers the requirements the repository and its plugin entries must meet for the sync to accept them.

<Note>
  * If you're choosing who gets each plugin once the repository syncs, see [Manage plugins for your organization](/docs/plugins/admin#set-availability)
  * If you're writing the `marketplace.json` file, see [Create a marketplace](https://code.claude.com/docs/en/plugins/create-marketplace) in the Claude Code docs
</Note>

To get started, check [how organization sync gets access to your repository](#give-organization-sync-access-to-your-repository) for your Git host, then check your `marketplace.json` against [the plugin sources that organization sync accepts](#plugin-sources-that-organization-sync-accepts).

## Give organization sync access to your repository

Members don't need access to the repository themselves, and their Git credentials aren't involved. Organization sync reads the marketplace repository's default branch through your organization's GitHub or GitLab connection on claude.ai, whichever matches the repository's host:

* **github.com**: the Claude GitHub App, which you install during [Sync a marketplace from github.com](#sync-a-marketplace-from-github-com)
* **Your GitHub Enterprise Server host**: your organization's [GitHub Enterprise App](https://code.claude.com/docs/en/github-enterprise-server#admin-setup)
* **gitlab.com or your self-managed GitLab instance**: the access token in your organization's [GitLab configuration](#sync-a-gitlab-hosted-marketplace) for that host

### Sync a marketplace from github.com

When you sync a marketplace from github.com, organization sync reads the repository through the Claude GitHub App, and you choose the availability its plugins start with as you add it. To sync a marketplace from a private or internal repository on github.com:

<Steps>
  <Step title="Open Plugins & skills">
    Go to [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory).
  </Step>

  <Step title="Select Sync from GitHub">
    Select **Add**, then **Sync from GitHub**.
  </Step>

  <Step title="Connect to GitHub">
    If the dialog shows **Connect to GitHub**, select it and authorize. GitHub returns you to the dialog.
  </Step>

  <Step title="Choose the repository">
    Search for the repository or enter it as `owner/repo`. The list shows private and internal repositories.
  </Step>

  <Step title="Install the Claude GitHub App if needed">
    If the repository isn't in the list, select **Install the Claude GitHub App** under **Repository missing?**, grant the app access to the repository on GitHub, and return to the dialog.
  </Step>

  <Step title="Leave automatic sync on">
    Leave **Sync automatically** on to sync each time someone pushes to the default branch. Claude creates the webhook on the repository for you.
  </Step>

  <Step title="Choose the default access">
    Choose the **Default access** for the plugins in this marketplace.
  </Step>

  <Step title="Create the marketplace">
    Select **Create**.
  </Step>
</Steps>

The marketplace's page opens, and **Last synced** shows **Syncing...** until the first sync finishes. If the dialog says **The Claude GitHub App is not installed on** the repository, grant the Claude GitHub App access to the repository on GitHub and try again.

To turn on automatic sync later, open the marketplace from the [**Marketplaces**](https://claude.ai/admin-settings/skills?tab=marketplaces) tab and turn on **Sync automatically**. If it shows **No webhook yet**, select **Configure webhook**, then **Enable webhook**.

### Sync a GitLab-hosted marketplace

Syncing a marketplace from GitLab needs a GitLab configuration for the host first, which holds the access token that organization sync reads the repository with. To sync a marketplace from gitlab.com or a self-managed GitLab instance:

<Steps>
  <Step title="Add a GitLab configuration">
    As an [Owner](https://code.claude.com/docs/en/server-managed-settings#access-control), add a GitLab configuration for that host at [**Organization settings > Claude Code**](https://claude.ai/admin-settings/claude-code). GitLab configurations are in public beta and apply only to plugin marketplace sync.
  </Step>

  <Step title="Sync from GitLab">
    In [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory), select **Add**, then **Sync from GitLab**, as [Add your own plugins](/docs/plugins/admin#add-your-own-plugins) describes. When you add it, enter the project's HTTPS URL, such as `https://gitlab.example.com/platform/claude-plugins`.
  </Step>
</Steps>

Organization sync reads the project's default branch. If you turn on **Sync automatically**, only pushes to the default branch start a sync.

## Plugin sources that organization sync accepts

The repository you sync is a [plugin marketplace](https://code.claude.com/docs/en/plugins/create-marketplace): it has a `.claude-plugin/marketplace.json` file that lists your plugins and the location of each one. On a Team or Enterprise plan, organization sync applies these rules to the marketplace repository and to each plugin source the marketplace lists:

* **Marketplace repository**: on github.com and gitlab.com, the marketplace repository must be private or internal
* **Plugin source types**: each plugin source must be of type `github`, `url`, or `git-subdir`, or a [relative path](https://code.claude.com/docs/en/plugins/marketplace-reference#relative-path-plugin-source) that starts with `./`. If you list a plugin by bare name under `metadata.pluginRoot`, organization sync rejects it as an unsupported source. Write the path out instead, such as `./plugins/deploy-tools`
* **Private plugin sources**: a plugin source can be private when it's one of the following:
  * A github.com source that shares the marketplace repository's owner
  * A source on your organization's GitHub Enterprise host with the GitHub Enterprise App installed on the repository
  * A `url` or `git-subdir` source on the same GitLab host as the marketplace repository. On gitlab.com, the source must also be under the same top-level group or user namespace as the marketplace repository
* **Public plugin sources**: any other plugin source must be a public repository on github.com, gitlab.com, or bitbucket.org, which organization sync fetches without credentials. Organization sync rejects plugin sources on hosts these rules don't cover

To include private plugins, place the plugin folders inside the marketplace repository and reference them with a relative path. Organization sync packages each plugin during distribution, so members never need access to a separate source repository. For example, this `marketplace.json` plugin entry references a plugin you committed at `plugins/deploy-tools` in the marketplace repository:

```json theme={null}
{
  "name": "deploy-tools",
  "source": "./plugins/deploy-tools"
}
```

### Keep executables out of the top-level bin directory

Don't include a top-level `bin/` directory in any plugin you distribute through organization settings. claude.ai rejects a plugin that has one, whether the plugin arrives by marketplace sync or by direct upload in [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory). The error message starts with `Plugin contains a top-level bin/ directory`. On marketplace sync, organization sync rejects that plugin and syncs the rest of the marketplace.

Keep executables in another directory, such as `scripts/`, and reference them as `${CLAUDE_PLUGIN_ROOT}/scripts/<name>` from your [skills, hooks, or MCP server configs](https://code.claude.com/docs/en/plugins/manifest-reference#environment-variables).

## Next steps

* [Manage plugins for your organization](/docs/plugins/admin#set-availability): set each synced plugin to available, installed by default, or required
* [Roll out a plugin to your whole organization](/docs/plugins/org-rollout): reach members in claude.ai and Cowork and developers in the Claude Code command line with one plugin
* [Create a marketplace](https://code.claude.com/docs/en/plugins/create-marketplace) in the Claude Code docs: write the `marketplace.json` file that lists your plugins

plugins/overview Changed · +124 / -67 lines

# Plugins ## Install a plugin ### Before you add a plugin ### Find and add a plugin ### Find the plugin in each app ### Bundled connectors ### Plugins your organization installs or requires ## Use a plugin ## Compare what each plugin component adds ## Manage installed plugins ## Track plugin usage in your organization ## Create your own plugin # Plugins overview ## What plugins do ## Plugin directory ## Origins in Claude Code ## Plugins in Cowork ## How plugins compose capabilities ## Availability

from line 1
1# Plugins overview
1# Plugins
22 
3> Extend Claude with reusable capability packages that bundle MCP connectors, skills, slash commands, and sub-agents
3> Add plugins to Claude: what a plugin adds, where to find and install one, and where it's available across chat, Cowork, and Claude Code.
44 
5Plugins are reusable capability packages that extend Claude with custom functionality. They bundle together [MCP connectors](/docs/connectors/overview), [skills](/docs/skills/overview), slash commands, and sub-agents into a single shareable unit — turning Claude into a specialist tailored to your role, team, and company.
5A plugin packages [skills](/docs/skills/overview), [MCP connectors](/docs/connectors/getting-started), and [commands and agents](#compare-what-each-plugin-component-adds) so you can add them to Claude as one unit. You add plugins from [**Customize > Plugins**](https://claude.ai/customize/plugins) in claude.ai or the Claude desktop app; **Customize** is the page that holds your connectors, skills, and plugins. Each plugin is saved to your account, so it's also available in Cowork and Claude Code without installing it again.
66 
7## What plugins do
7This page is for people using plugins in claude.ai, the Claude desktop app, and Cowork.
88 
9Plugins let you define how you like work done, which tools and data to pull from, how to handle critical workflows, and what slash commands to expose so your team gets consistent outcomes. Every component is file-based, so plugins are easy to build, edit, and share.
9<Note>
10 * If you want to build a plugin or submit one to the directory, see [Plugin structure and testing](/docs/plugins/build) and [Publish to the directory](/docs/directory/publish)
11 * If you install and manage plugins from the Claude Code command line, see [Install plugins](https://code.claude.com/docs/en/plugins/install) in the Claude Code docs
12 * If you have a `.mcpb` file to install into the Claude desktop app, see [Install a local connector in the desktop app](/docs/connectors/custom/add-unlisted#install-a-local-connector-in-the-desktop-app)
13</Note>
1014 
11As your team builds and shares plugins, Claude becomes a cross-functional expert. Best practices get baked into every interaction, so leaders and admins can spend less time enforcing processes and more time improving them.
15To get started, [find and add a plugin](#find-and-add-a-plugin), then see [how to use it in each app](#use-a-plugin) and [where it becomes available on your account](#find-the-plugin-in-each-app).
1216 
13## Plugin directory
17## Install a plugin
1418 
15To help you get started, Anthropic has open-sourced 11 plugins built and used internally:
19Every way of adding a plugin to your account starts from the **Plugins** page at [**Customize > Plugins**](https://claude.ai/customize/plugins) in claude.ai or the desktop app.
1620 
17| Plugin | What it does |
18| ---------------------- | ------------------------------------------------------------- |
19| **Productivity** | Manage tasks, calendars, and daily workflows |
20| **Enterprise search** | Find information across your company's tools and docs |
21| **Sales** | Research prospects, prep deals, and follow your sales process |
22| **Finance** | Analyze financials, build models, and track key metrics |
23| **Data** | Query, visualize, and interpret datasets |
24| **Legal** | Review documents, flag risks, and track compliance |
25| **Marketing** | Draft content, plan campaigns, and manage launches |
26| **Customer support** | Triage issues, draft responses, and surface solutions |
27| **Product management** | Write specs, prioritize roadmaps, and track progress |
28| **Biology research** | Search literature, analyze results, and plan experiments |
29| **Plugin Create** | Create and customize new plugins from scratch |
21### Before you add a plugin
3022 
31Browse the full collection at [claude.com/plugins](https://claude.com/plugins-for/cowork) or use the Plugin Create plugin to build your own.
23A plugin's skills and commands are instructions Claude follows, and its connectors reach outside services with the account you connect. In Cowork and Claude Code a plugin can also run agents and hooks, which run commands on your computer when certain events happen, and a connector marked **Runs in each session** runs a program on your computer. Anthropic reviews plugins listed in the directory: every version gets automated validation and a security scan, and a person reviews a new listing before it goes live, as [Prepare for review](/docs/directory/publish#prepare-for-review) describes. That review doesn't cover a plugin you add from a marketplace URL or upload yourself, so add those only from sources you trust. On Team and Enterprise plans, an Owner controls which sources members see and whether they can add their own, as [Manage plugins for your organization](/docs/plugins/admin) covers.
3224 
33## Origins in Claude Code
25### Find and add a plugin
3426 
35Plugins originated in [Claude Code](https://code.claude.com/docs/en/plugins), where developers create and distribute them as versioned, shareable directories. A Claude Code plugin lives in a directory with a manifest (`plugin.json`) that defines its identity, version, and available components.
27On the **Plugins** page, you add a plugin from **Discover**, **Add > Add marketplace**, or **Add > Upload plugin**:
3628 
37<Note>
38 For technical details on plugin structure, manifests, and configuration, see the [Claude Code plugins reference](https://code.claude.com/docs/en/plugins-reference).
39</Note>
29* **Discover**: see the plugins available to you. These are the ones in Anthropic's default marketplaces, the directory, and any your organization provides. Select one to read what it contains, then select **Add**. The directory's plugins appear on Pro, Max, Team, and Enterprise plans. On Team and Enterprise plans, an Owner chooses which Anthropic sources the organization includes, so you see the directory only if your organization keeps it
30* **Add > Add marketplace**: add a [plugin marketplace](https://code.claude.com/docs/en/plugins/create-marketplace), a Git repository that contains plugins, so its plugins appear alongside the others. Enter a repository URL such as `https://github.com/your-org/your-plugins` or the `owner/repo` shorthand for GitHub. For a marketplace you add yourself, GitHub and GitHub Enterprise repositories work, and so do public GitLab and Bitbucket repositories. To add a private GitHub repository, connect your GitHub account when the dialog asks and give the Claude GitHub App access to the repository. If access is missing, the dialog says so and shows **Connect GitHub** or **Install the Claude GitHub App**. Plugins your organization distributes from its own repositories come through [organization settings](/docs/plugins/admin#add-your-own-plugins) instead
31* **Add > Upload plugin**: upload a plugin you have as a folder on your computer, as a `.zip` or `.plugin` file. Zip either the plugin folder itself or its contents; both work as long as the archive holds one `.claude-plugin/plugin.json`
4032 
41## Plugins in Cowork
33[Plugin feature support across platforms](/docs/plugins/platform-support#compare-installation-sync-and-admin-controls) lists the size and count limits.
4234 
43Plugins are fully supported in [Cowork](https://support.claude.com/en/articles/13345190-getting-started-with-cowork), Anthropic's agentic workspace for complex, multi-step knowledge work. In Cowork, Claude runs inside an isolated virtual machine environment, executes tasks in parallel workstreams, and writes outputs directly to your file system — and plugins extend all of that capability.
35### Find the plugin in each app
4436 
45A sales plugin, for example, could connect Claude to your CRM and knowledge base, teach it your sales process, and give you slash commands for everything from prospect research to call follow-ups. You define what goes in the plugin once, and Claude pulls from that context whenever it's relevant.
37After you install a plugin, it's recorded on your account for the organization you're in, and you can use its components wherever you use that account:
4638 
47## How plugins compose capabilities
39* **Chat on the web, desktop, and mobile**: its skills, commands, and connectors are available in your conversations
40* **Cowork**: its skills, commands, agents, and connectors load into your tasks the next time you start one
41* **Claude Code**: it downloads as a synced plugin the next time you start a session signed in to the same account. Run `/reload-plugins` in that session to load it, or start Claude Code again. Plugins you install from the Claude Code command line stay on that machine and aren't added to your claude.ai account
4842 
49| Plugin component | What it adds | Example |
50| ------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------------------------- |
51| **Skills** | Specialized instructions Claude follows when relevant tasks arise | A "brand voice" skill that activates when drafting external communications |
52| **MCP connectors** | Access to external tools and data | A connector to a CRM that lets Claude read and update deal records |
53| **Slash commands** | Explicit, user-triggered workflows | `/sales:prospect-research` to kick off a structured research workflow |
54| **Sub-agents** | Delegated workstreams that run in parallel | A sub-agent that handles competitive analysis while another drafts the proposal |
43### Bundled connectors
5544 
56## Availability
45Adding a plugin doesn't add a connector to your account or sign you in to anything. To see the connectors a plugin includes, open the plugin from **Customize > Plugins** and select its **Connectors** tab. Each connector shows one of these states:
5746 
58Plugin support in Cowork is available as a beta for all paid Claude users. Plugins are currently saved locally to your machine. Org-wide sharing and management are coming in the weeks ahead.
47* **Connected**: the connector is already connected on your account, so there's nothing more to do
48* **Not connected**: the connector is on your account, but you haven't signed in to the service yet. Connect it from this tab
49* **Not added**: the connector isn't on your account yet. Add it from this tab, then connect it. On Team and Enterprise plans, an Owner adds the connector for the organization. If you can't add it yourself, ask an Owner to add it, then connect it with your own account
5950 
60| Platform | Plugin support |
61| ----------------- | ------------------------------------------------------------------ |
62| **Claude Code** | Full plugin support — create, install, and use plugins |
63| **Claude Cowork** | Full plugin support — plugins extend agentic, multi-step workflows |
51The plugin's skills load whether or not you connect anything. A skill that uses a connector's service can't reach that service until the connector shows **Connected**. After you add a connector, it also appears under **Customize > Connectors**. To disconnect one and keep the plugin, see [Manage installed plugins](#manage-installed-plugins).
6452 
65Looking to submit your own plugin? See [Submitting your plugin](/docs/plugins/submit#submitting-your-plugin).
53The service a connector reaches is run by its provider, which may require its own account or paid plan.
6654 
67## Next steps
55A bundled connector marked **Runs in each session** runs on your computer rather than over the internet. It works in Claude Code and in a Cowork session that runs on your computer in the desktop app, not in chat.
6856 
69<Columns cols={2}>
70 <Card title="Plugin directory" icon="grid-2" href="https://claude.com/plugins-for/cowork">
71 Browse the full plugin collection.
72 </Card>
57### Plugins your organization installs or requires
7358 
74 <Card title="Create plugins" icon="code" href="https://code.claude.com/docs/en/plugins">
75 Build and distribute plugins in Claude Code.
76 </Card>
59On Team and Enterprise plans, your organization can install a plugin for you as installed by default or as required:
7760 
78 <Card title="Skills overview" icon="sparkles" href="/docs/skills/overview">
79 Learn how skills work as a core plugin component.
80 </Card>
61* **Installed by default**: the plugin is already in your list under **Customize > Plugins** without you adding it, and you can turn it off
62* **Required**: the plugin is installed and always on. It's marked **This plugin is required by your organization**, and you can't turn it off or remove it
8163 
82 <Card title="Connectors overview" icon="plug" href="/docs/connectors/overview">
83 Understand MCP connectors that plugins can bundle.
84 </Card>
85</Columns>
64[Manage plugins for your organization](/docs/plugins/admin) covers those controls.
65 
66## Use a plugin
67 
68After you add a plugin, you use its skills and commands from the message box. To see the skills, commands, connectors, and agents a plugin contains, open it from **Customize > Plugins**, where its page lists each kind on its own tab.
69 
70You can run a plugin's skill or command in chat, Cowork, and Claude Code:
71 
72* **Chat in claude.ai or the desktop app**: describe the task, and Claude loads the plugin's skill when the task matches it. To pick one yourself:
73 
74 1. Type `/` in the message box. The menu lists your skills with the name of the plugin each one came from.
75 2. Type the plugin's name, or `plugin-name:skill-name`, to narrow the list.
76 3. Select the skill.
77 
78 A plugin's commands appear in the same menu as skills.
79* **Cowork**: type `/plugin-name:command` to run a command, or describe the task and let Claude load the matching skill. Cowork also runs the plugin's agents
80* **Claude Code**: type `/plugin-name:skill-name`. [Install and manage plugins](https://code.claude.com/docs/en/plugins/install) in the Claude Code docs covers the command line
81 
82If a skill or command uses one of the plugin's connectors, connect it first, as [Bundled connectors](#bundled-connectors) describes.
83 
84After you add a plugin, try it on a real task. If it doesn't help, turn it off with its **Disable plugin** toggle or select **Remove** from its menu, as [Manage installed plugins](#manage-installed-plugins) describes.
85 
86## Compare what each plugin component adds
87 
88A plugin can contain skills, commands, MCP connectors, and agents. Chat, Cowork, and Claude Code each load the components they support and skip the others, so one plugin can do more in Cowork than in a chat conversation.
89 
90| Component | What it adds for you | Where it works |
91| :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------ |
92| Skills | Instructions Claude follows when a task matches, such as your team's process for a weekly report. They're listed in **Customize > Skills** alongside your own skills. | Chat, Cowork, Claude Code |
93| Commands | Named actions. In Cowork and Claude Code you run one by typing `/plugin-name:command`. In chat a command loads as a skill. | Chat, Cowork, Claude Code |
94| MCP connectors | Access to an external tool or data source. You add or connect each one from the plugin's **Connectors** tab. | Chat, Cowork, Claude Code |
95| Agents | Specialists Claude can delegate part of a task to | Cowork, Claude Code |
96 
97[Plugin feature support across platforms](/docs/plugins/platform-support) lists every component by app.
98 
99## Manage installed plugins
100 
101After you install a plugin, you can turn it off, remove it, disconnect its connectors, or update it from **Customize > Plugins**. Plugins that other people share with you are listed there too.
102 
103* **Turn off a plugin**: open the plugin and turn off its toggle, which is labeled **Disable plugin**. Turn the toggle on again to enable the plugin
104* **Remove a plugin**: remove it from your account from its menu:
105 1. Open the plugin.
106 2. Open its menu.
107 3. Select **Remove**.
108* **Disconnect a bundled connector**: open the plugin's **Connectors** tab, or **Customize > Connectors**, and disconnect it. The plugin stays installed
109* **Use a plugin someone shared with you**: a plugin that another member of your organization shares with you appears under **Shared with you** on the **Your plugins** tab, turned off. Open it and turn on its toggle to use it. It stays in your list for as long as that person shares it. To share one of your own, see [Share a plugin with specific people](/docs/plugins/share#share-a-plugin-with-specific-people)
110* **Get updates**: plugins from a marketplace or the directory update from their source. After a new version syncs from the source, you get it on your account automatically, with nothing to accept. Claude Code's own marketplaces have a separate auto-update setting. To pull the latest from a marketplace you added, select **Check for updates**. For a marketplace you added yourself from github.com, you can also turn on **Sync automatically**. Marketplaces your organization syncs have their own setting, which [Sync your organization's plugins from a repository](/docs/plugins/org-sync) covers
111 
112If a plugin you added doesn't appear where you expect it, [Install plugins in Cowork](/docs/cowork/guide/plugins) covers how the desktop app loads and updates plugins, and [Synced plugins](https://code.claude.com/docs/en/plugins/loading#synced-plugins) covers Claude Code.
113 
114## Track plugin usage in your organization
115 
116On Team and Enterprise plans, a plugin's page in **Customize > Plugins** shows how much your organization uses it:
117 
118* **Adoption**: the number of people in your organization who used the plugin in the last 30 days. The count updates daily, and usage from older versions of Claude Code and the desktop app may not be counted
119* **Activity**: the number of runs in the last 30 days
120* **You**: the number of runs by you in the last 90 days. This one appears when you open the plugin from your own list
121 
122The plugin's **Skills** tab shows runs in the last 30 days for each skill. A skill's page in **Customize > Skills** shows the same three figures for that skill.
123 
124A plugin you made or that someone shared with you shows the organization figures only when a published copy of it is live in your organization. [Publish a plugin to your organization](/docs/plugins/share#publish-a-plugin-to-your-organization) covers publishing.
125 
126## Create your own plugin
127 
128You can make a plugin of your own from **Customize > Plugins > Add**.
129 
130* **Create with Claude**: start a conversation where Claude builds the plugin with you
131* **Create a plugin**: open an editor and write its files directly
132 
133[Create a plugin with Claude](/docs/plugins/create-with-claude) covers both, and [Plugin structure and testing](/docs/plugins/build) covers building one as a folder for other people to install. On Team and Enterprise plans, you can then [share the plugin with specific people](/docs/plugins/share#share-a-plugin-with-specific-people) or [publish it to your organization](/docs/plugins/share#publish-a-plugin-to-your-organization).
134 
135You can also submit a plugin you build to Anthropic's directory, where, once it passes review, people on Pro, Max, Team, and Enterprise plans can find and add it. [Build your first plugin](/docs/plugins/quickstart) builds and tests an example plugin, and [Publish to the directory](/docs/directory/publish) covers who can submit and what review involves.
136 
137## Next steps
138 
139* [Plugin feature support across platforms](/docs/plugins/platform-support): check which of a plugin's components work in chat, Cowork, the desktop app, and Claude Code
140* [Manage plugins for your organization](/docs/plugins/admin): make plugins available, installed by default, or required for members
141* [Install plugins](https://code.claude.com/docs/en/plugins/install) in the Claude Code docs: install and manage plugins from the command line, including the ones synced from your account
142* [Publish to the directory](/docs/directory/publish): submit a plugin to the directory, where Anthropic reviews it before it's listed
86143 

plugins/platform-support New page · 59 lines, new page

# Plugin feature support across platforms ## Compare component support by app ## Compare installation, sync, and admin controls ## Related resources

A whole new page. There's nothing to diff it against, so here is what it says.

# Plugin feature support across platforms

> Look up which plugin components and install paths work in claude.ai chat, Cowork, and Claude Code, and why a plugin behaves differently on each.

You can install the same plugin folder everywhere you use Claude, but chat, Cowork, and Claude Code each load a different subset of what the folder can contain. A surface skips a component it doesn't load, so a plugin can look complete in one place and partial in another.

This page is for anyone checking a component or behavior before relying on it, whether you're installing a plugin, building one, or submitting one to the directory.

<Note>
  * If you want to install and manage plugins, see [Plugins](/docs/plugins/overview)
  * If you're building a plugin, see [Plugin structure and testing](/docs/plugins/build)
  * If you run Claude Desktop on your own model provider, see its [Feature matrix](/docs/third-party/claude-desktop/feature-matrix) for feature availability
  * If you want to know where MCP Apps render, see [Add interactive UI with MCP Apps](/docs/connectors/building/mcp-apps/getting-started)
</Note>

## Compare component support by app

The tables on this page use these column names:

* **Chat**: conversations in claude.ai on the web, in the Claude desktop app, and in the mobile apps
* **Cowork**: Cowork tasks in the desktop app
* **Claude Code**: the terminal, the IDE extensions, and the desktop app's Code tab

A component marked "Ignored" is skipped on that surface, and a component marked "Can't be installed" makes that surface refuse the whole plugin.

| Component                                                             | Chat                                                                              | Cowork                                                                            | Claude Code                       | Notes                                                                                       |
| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------- | :-------------------------------- | :------------------------------------------------------------------------------------------ |
| Skills (`skills/<name>/SKILL.md`)                                     | Loads                                                                             | Loads                                                                             | Loads                             | [Create custom skills](/docs/skills/how-to)                                                      |
| Commands (`commands/*.md`)                                            | Loads as a skill; Claude applies it when it fits                                  | Loads; you run it by typing `/plugin-name:command`                                | Loads                             |                                                                                             |
| Agents (`agents/*.md`)                                                | Ignored                                                                           | Loads                                                                             | Loads                             |                                                                                             |
| Hooks (`hooks/hooks.json`)                                            | Ignored                                                                           | Loads                                                                             | Loads                             | [Hooks](https://code.claude.com/docs/en/plugins/components#hooks) in the Claude Code docs   |
| Remote MCP server, `http` or `sse` with a fixed URL                   | Listed on the plugin's **Connectors** tab; works once you add or connect it there | Loads; connect it from the plugin's **Connectors** tab                            | Loads                             | [Bundle a connector with its skill](/docs/plugins/build#bundle-an-mcp-connector-with-its-skill)  |
| Local MCP server, a command the app starts, including `.mcpb` bundles | Ignored                                                                           | Loads when the Cowork session runs on your computer                               | Loads                             | On the web, the plugin's **Connectors** tab marks it **Runs in each session**               |
| MCP server that references `${user_config.*}` values                  | Ignored when the URL contains the reference                                       | Ignored when a referenced option has no default; Cowork doesn't prompt for values | Loads; prompts you for the values | [User configuration](https://code.claude.com/docs/en/plugins/components#user-configuration) |
| Executables in a top-level `bin/` directory                           | Can't be installed                                                                | Can't be installed                                                                | Loads                             |                                                                                             |
| LSP servers, output styles, themes, `settings`                        | Ignored                                                                           | Ignored                                                                           | Loads                             | [Plugin components](https://code.claude.com/docs/en/plugins/components)                     |

When you submit a plugin to the directory, the portal derives the surfaces it supports from these same rules and shows them to you before you submit.

## Compare installation, sync, and admin controls

Chat and Cowork read plugins from your claude.ai account, and Claude Code reads them from the machine it runs on.

|                                          | Chat and Cowork                                                                                                                                                                                                                  | Claude Code                                                                                             | Notes                                                                                                                                                |
| :--------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------- |
| Where you add plugins                    | [**Customize > Plugins**](https://claude.ai/customize/plugins) in claude.ai or the desktop app                                                                                                                                   | `/plugin` in a session, or `claude plugin install`                                                      | [Plugins](/docs/plugins/overview), [Install plugins](https://code.claude.com/docs/en/plugins/install)                                                     |
| What an install is attached to           | Your account, for the organization you're in                                                                                                                                                                                     | The machine, at user, project, or local scope                                                           |                                                                                                                                                      |
| Which way installs travel                | A plugin you install on your account also appears in Claude Code as a synced plugin at the next session start                                                                                                                    | A plugin you install from the command line stays on that machine and isn't added to your account        | [Synced plugins](https://code.claude.com/docs/en/plugins/loading#synced-plugins)                                                                     |
| Hosts for a marketplace you add yourself | GitHub and GitHub Enterprise repositories, and public GitLab and Bitbucket repositories                                                                                                                                          | Any Git repository, GitHub shorthand, URL, or local path                                                | Repositories your organization syncs to distribute plugins follow [different rules](/docs/plugins/org-sync#plugin-sources-that-organization-sync-accepts) |
| Marketplace and plugin limits            | Up to 25 marketplaces that you add yourself, counted for your account in each organization. Each plugin can contain up to 5,000 files and 200 MB, and 200 MB is also the largest file that **Upload plugin** accepts.            | No account limits apply; installs are per machine                                                       |                                                                                                                                                      |
| Install from a file                      | **Add > Upload plugin** with a zip of the folder                                                                                                                                                                                 | `claude --plugin-dir <path>` for one session                                                            | [Plugin structure and testing](/docs/plugins/build#test-the-plugin-on-each-surface)                                                                       |
| Browse the directory                     | **Discover** in **Customize > Plugins**, on Pro, Max, Team, and Enterprise plans. On Team and Enterprise plans, an Owner can [remove the directory as a source](/docs/plugins/admin#manage-synced-marketplaces) for the organization. | Not in `/plugin`; a plugin added from the directory on claude.ai reaches Claude Code as a synced plugin | [Publish to the directory](/docs/directory/publish)                                                                                                       |
| Organization controls                    | An Owner sets each plugin to **Not available**, **Available to install**, **Installed by default**, or **Required**                                                                                                              | In managed settings, an admin allowlists or blocks marketplaces and force-installs plugins              | [Manage plugins for your organization](/docs/plugins/admin), and the [Claude Code equivalent](https://code.claude.com/docs/en/plugins/org)                |

## Related resources

* [Plugin structure and testing](/docs/plugins/build): lay out the plugin folder and write the manifest that all three surfaces load
* [Plugin components](https://code.claude.com/docs/en/plugins/components) in the Claude Code docs: look up every component type, including the Claude Code-only ones
* [Manage plugins for your organization](/docs/plugins/admin): as an Owner, set each plugin's availability for members

plugins/pre-submission-checklist New page · 197 lines, new page

# Plugin pre-submission checklist ## Run the checks before you submit ### Check the plugin on your machine (optional) ### Validate in the developer portal ### Read a validation result ## Review what validation and the scan check ### Repository and folder layout ### Manifest and plugin name ### README and license ### Files in the plugin folder ### Review what the plugin runs and connects to ### Choices a reviewer always checks ### Hooks, skills, commands, and agents ## Prepare for the security scan ## Test the plugin's behavior before you submit ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

# Plugin pre-submission checklist

> Fix every finding before you submit a plugin to the Claude plugin directory: what the developer portal's validation and scan check, and what each result means.

Before the [Claude plugin directory](/docs/directory/publish) lists your plugin, the developer portal checks the plugin's files at two points. Validation runs in the plugin submission form at [claude.ai/directory/manage](https://claude.ai/directory/manage) when you select the **Validate** button. A scan runs after you submit, on each new commit that the directory picks up from the branch or tag that it follows. The scan checks the plugin's files again and runs a security scan.

Use this checklist to fix problems before you [submit your plugin](/docs/plugins/submit) from the developer portal on claude.ai. The checklist covers the automated checks only, and every plugin in the directory also has to follow the [Anthropic Software Directory Policy](https://support.claude.com/en/articles/13145358-anthropic-software-directory-policy). Start by [running the checks](#run-the-checks-before-you-submit) and [reading a validation result](#read-a-validation-result). Then use the tables in [what validation and the scan check](#review-what-validation-and-the-scan-check) to fix each finding, and [prepare for the security scan](#prepare-for-the-security-scan) that runs after you submit.

## Run the checks before you submit

Checking a plugin before you submit it takes three steps:

1. Optional: [check the plugin on your machine](#check-the-plugin-on-your-machine-optional) with Claude Code's `claude plugin validate` command, which catches syntax and schema errors before you push
2. [Validate in the developer portal](#validate-in-the-developer-portal), which runs every directory check in the tables on this page
3. [Read the result](#read-a-validation-result), fix every finding that the report marks **Blocking**, and then submit

The portal is open to the people who [can submit](/docs/directory/publish#confirm-you-can-submit-to-the-directory). If you can't submit, ask someone who can to run **Validate**.

### Check the plugin on your machine (optional)

If you have [Claude Code](https://code.claude.com/docs/en/setup), Anthropic's command-line coding tool, installed, you can catch syntax and schema errors before you push. Open a terminal in the folder that contains your plugin folder and run:

```bash theme={null}
claude plugin validate ./your-plugin
```

A plugin with no problems prints `✔ Validation passed`. Otherwise the output lists each error or warning with the file and field it's in; fix those and run the command again.

The `claude plugin validate` command only checks that your files are well-formed. It doesn't check the directory's requirements, such as whether you have a README and license or whether the name is taken; the portal's **Validate** checks those. [`plugin validate`](https://code.claude.com/docs/en/plugins/cli-reference#plugin-validate) in the Claude Code docs lists exactly what the command checks.

### Validate in the developer portal

The portal's **Validate** button runs every check in this page's tables against your repository and gives you a report before you submit anything.

<Steps>
  <Step title="Start a submission">
    Open the [developer portal](https://claude.ai/directory/manage) and select **Submit new**.
  </Step>

  <Step title="Choose Plugin bundle">
    When the portal asks **What would you like to submit?**, select **Plugin bundle**.
  </Step>

  <Step title="Enter the repository">
    On the **Source** step, enter the repository. [Submit your plugin](/docs/plugins/submit#submit-a-plugin) describes each field.
  </Step>

  <Step title="Validate">
    Select **Validate**. The report lists each finding with its result and, for many findings, a fix.
  </Step>

  <Step title="Fix blocking findings and validate again">
    The report covers only the commit that validation read, so it doesn't change when you push a fix. Push the fix, then select **Re-validate** on the **Source** step of the same form. When the new report has no findings with the **Blocks** result, continue through the form to submit the plugin.
  </Step>
</Steps>

### Read a validation result

Validation produces a report in the submission form, and the scan's results appear on the plugin's page in the developer portal. Each finding has one of these results:

* **Blocks:** the report marks the finding **Blocking**. You can't submit the plugin until you fix the problem and validate again
* **Held for a reviewer:** the report marks the finding **Policy hold**. You can submit, and an Anthropic reviewer reads the held version before it can go live. A hold isn't a rejection. The scan can raise the same hold again on each new version.
* **Warning:** the report shows the finding, and you can submit without fixing it. The plugin still has to follow the Anthropic Software Directory Policy
* **Note:** the report gives information, and nothing needs fixing

Some problems with the repository stop validation before there is a report. The submission form then shows one error, such as **Couldn’t validate that repository**, and no findings. The tables in [what validation and the scan check](#review-what-validation-and-the-scan-check) mark those checks as "Validation stops".

[Submit your plugin](/docs/plugins/submit#after-you-submit-a-plugin) explains how review and publishing proceed after you submit.

## Review what validation and the scan check

The plugin folder is the folder that contains `.claude-plugin/plugin.json`, the plugin's manifest. It can be the repository root or a subfolder. People who install the plugin get only the plugin folder, so everything the plugin runs has to be inside it.

Most checks read the plugin folder, and a few also read the rest of the repository. Fix every row marked **Blocks** before you submit.

Each table gives the result at validation, unless a row says that the result comes after you submit. For a finding with no title in the report, the report states the rule in words instead.

### Repository and folder layout

The repository and folder layout checks cover the plugin's location in the repository and what the repository as a whole contains.

| What to do                                                                                                                                                                                                                                                 | [Result if you don't](#read-a-validation-result)                      | Title in the report, if it has one                                                                                                                     |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Submit a folder that contains `.claude-plugin/plugin.json`                                                                                                                                                                                                 | Blocks                                                                |                                                                                                                                                        |
| Submit one plugin at a time. In a [marketplace repository](https://code.claude.com/docs/en/plugins/create-marketplace) with several plugins, validate and submit each plugin folder on its own.                                                            | Blocks                                                                | **Pick one plugin first**, when you select **Submit for review**                                                                                       |
| Keep every file that a hook, an MCP server command, or a script uses inside the plugin folder, and point every component path in `plugin.json` inside it                                                                                                   | Blocks for a `plugin.json` path that points outside the plugin folder |                                                                                                                                                        |
| Commit regular files and folders for everything the plugin loads, not symbolic links, Git submodules, or Git LFS pointer files                                                                                                                             | Blocks where the plugin loads the entry. Warning elsewhere.           |                                                                                                                                                        |
| Remove `.DS_Store`, `Thumbs.db`, `desktop.ini`, and `__MACOSX` entries from the plugin folder                                                                                                                                                              | Blocks                                                                | In validation, a message that begins "This is a macOS or Windows system file". After you submit, **Files in the repository the scanner won’t accept**. |
| Use file and folder names that are valid on both Windows and macOS: no colon, no trailing dot or space, no Windows device name such as `con.md` or `prn`, and no two names that differ only by capitalization                                              | Validation stops                                                      | **Couldn’t validate that repository**                                                                                                                  |
| Name each folder on the path to the plugin with letters, digits, dots, hyphens, and underscores only, and enter the plugin path with the same capitalization as the repository                                                                             | Validation stops                                                      | **Couldn’t validate that repository**                                                                                                                  |
| Keep `export-ignore` and `export-subst` out of every `.gitattributes` file. Keep `filter`, Git LFS included, and other attributes that rewrite file contents out of `.gitattributes` files at the repository root, above the plugin folder, and inside it. | Validation stops                                                      | **Couldn’t validate that repository**                                                                                                                  |
| Keep the repository under 50 MiB as GitHub archives it and under 256 MiB unpacked, with fewer than 10,000 files and folders, and keep every file in the plugin folder under 5 MiB                                                                          | Validation stops                                                      | **Repository too large to validate**                                                                                                                   |

The file-name, plugin-path, and `.gitattributes` checks all produce **Couldn’t validate that repository**. The error doesn't say which cause applies, so check each of them. [Files in the plugin folder](#files-in-the-plugin-folder) has tighter file limits that hold a version for a reviewer.

### Manifest and plugin name

`plugin.json` is the plugin's manifest. Beyond the syntax and schema errors that `claude plugin validate` catches, the directory runs the checks in this table. Settle the name before you submit, and raise `version` with every release, as [version management](https://code.claude.com/docs/en/plugins/loading#versions-and-updates) describes.

| What to do                                                                                                                                                                                                                                                                                                                                                       | [Result if you don't](#read-a-validation-result)                                                                | Title in the report, if it has one                                                                                                                      |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Use a `name` made of lowercase letters, digits, and hyphens, up to 64 characters, that starts and ends with a letter or digit                                                                                                                                                                                                                                    | Blocks for non-ASCII characters. Warning for any other name that breaks the pattern, such as uppercase letters. | **Non-ASCII identifier** when blocked                                                                                                                   |
| Build the name around your own distinctive product or project name: not a reserved word such as `claude`, `anthropic`, `official`, `plugin`, `mcp`, or `test` as the whole name, not a [marketplace name reserved for Anthropic](https://code.claude.com/docs/en/plugins/marketplace-reference#reserved-names), and nothing that presents the plugin as official | Blocks. Held for a reviewer for a name made only of generic words, such as `test-plugin`.                       | **Name is taken** when blocked. **Name may be confused with an existing listing** when held.                                                            |
| Choose a name that no other organization's plugin uses. A name that differs only in capitalization or punctuation counts as the same name.                                                                                                                                                                                                                       | Blocks for the same name. Held for a reviewer for a look-alike.                                                 | **Name is taken** when blocked. **Name may be confused with an existing listing** when held.                                                            |
| Choose a name, `displayName`, and `author.name` that can't be mistaken for an existing plugin, publisher, connector, or well-known brand that isn't yours                                                                                                                                                                                                        | Held for a reviewer                                                                                             | **Name matches a known brand**, **Name may be confused with an existing listing**, or **Publisher name may be confused with another** for `author.name` |
| In a fork, give the plugin a name of its own. Forks are allowed.                                                                                                                                                                                                                                                                                                 | Held for a reviewer                                                                                             | **Fork uses the upstream project’s name**                                                                                                               |
| Write `displayName` and `author.name` in one writing system, without look-alike letters or invisible characters                                                                                                                                                                                                                                                  | Blocks                                                                                                          |                                                                                                                                                         |
| Spell the keys that declare components, such as `hooks` and `mcpServers`, exactly as the [plugins reference](https://code.claude.com/docs/en/plugins/manifest-reference) does, and keep them out of the `experimental` object                                                                                                                                    | Blocks                                                                                                          |                                                                                                                                                         |
| Set `description`, `author`, and `version`                                                                                                                                                                                                                                                                                                                       | Warning                                                                                                         |                                                                                                                                                         |

### README and license

The directory shows your README as the listing's description and requires a license before it lists the plugin.

| What to do                                                                                                                  | [Result if you don't](#read-a-validation-result) | Title in the report, if it has one       |
| --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------------------- |
| Put a README of at least 40 words in the plugin folder, preferably named `README.md`. Words inside code blocks don't count. | Blocks                                           | **README missing**, **README too short** |
| Add a `LICENSE` file to the plugin folder, or set `license` in `plugin.json`                                                | Blocks                                           | **License missing**                      |

### Files in the plugin folder

The file checks apply to every file in the plugin folder, including images and documents.

| What to do                                                                                                                                                                                           | [Result if you don't](#read-a-validation-result)             | Title in the report, if it has one                    |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------- |
| Keep every file that isn't an image or font under 256 KiB                                                                                                                                            | Held for a reviewer                                          | **Files or downloads the validator couldn’t inspect** |
| Keep the plugin to 512 files or fewer                                                                                                                                                                | Held for a reviewer                                          | **Files or downloads the validator couldn’t inspect** |
| Include only text files, SVG included, complete PNG, JPEG, GIF, and WebP images, and font files. Any other binary file, such as an `.ico`, `.pdf`, or `.zip` file or a compiled executable, is held. | Held for a reviewer                                          | **Files or downloads the validator couldn’t inspect** |
| To show a bundled image in the README, use Markdown image syntax. Don't refer to bundled images or fonts from commands, hooks, or scripts, or write their paths in backticks or a code block.        | Held for a reviewer                                          |                                                       |
| Declare each MCP server with `command` and `args` or with `url`, not a `.mcpb` or `.dxt` bundle                                                                                                      | Held for a reviewer. Blocks for a bundle fetched from a URL. | **Bundled MCP server not inspected** when held        |

### Review what the plugin runs and connects to

A package launcher is a command that downloads a package and runs it: `npx`, `bunx`, `pnpm dlx`, `yarn dlx`, `uvx`, `pipx run`, and `uv run` all count. `${CLAUDE_PLUGIN_ROOT}` is the variable that Claude Code sets to the plugin's installation directory.

| What to do                                                                                                                                                                                                                                                                                           | [Result if you don't](#read-a-validation-result)                        | Title in the report, if it has one                                    |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Pin every package that a launcher runs to an exact version, such as `npx <package>@1.2.3` or `uvx <package>==1.2.3`, not a range or `@latest`. Run `uv run` with `--locked` or `--frozen`.                                                                                                           | Blocks                                                                  | **Unpinned npx launcher**, **Unpinned uvx launcher**                  |
| In a plugin that uses a launcher or runs a package install, don't include a package-manager configuration file that sets a registry, index, proxy, or other package source, such as `.npmrc`, `bunfig.toml`, or `uv.toml`                                                                            | Blocks with a launcher. Held for a reviewer with a package install.     | **Install may use a custom registry or package source** when held     |
| Keep real credentials out of every file, documentation and examples included. Ask for each value through a `userConfig` entry in `plugin.json` with `sensitive: true`, and refer to it as `${user_config.KEY}`.                                                                                      | Blocks                                                                  | **Secret in MCP headers** for a credential in an MCP server's headers |
| Don't read a credential that is already set in the user's environment, such as `$GITHUB_TOKEN`, and send it to a server, even in a README example. Ask for it through `userConfig` instead.                                                                                                          | Held for a reviewer. Blocks for an HTTP hook that sends the credential. | **Uses a credential from the user’s machine** when held               |
| Make `.mcp.json` valid JSON in which every server entry matches the schema in the [MCP documentation](https://code.claude.com/docs/en/mcp)                                                                                                                                                           | Blocks                                                                  | **.mcp.json can’t be parsed** for invalid JSON                        |
| Give each remote MCP server a `type` of `http`, `sse`, or `ws` and a `url` that is an absolute `https://` or `wss://` URL, a `${user_config.KEY}` reference, or `""` when the plugin has no fixed endpoint                                                                                           | Blocks                                                                  | **MCP server URL is not https** for a URL with another scheme         |
| Start each local MCP server by running a file in the plugin with plain arguments, such as `node ${CLAUDE_PLUGIN_ROOT}/server.js`, not through a shell, an inline program such as `-c`, or a package-manager script such as `npm run`                                                                 | Held for a reviewer                                                     | **MCP server command wasn’t read**                                    |
| In the command of a hook or an MCP server, write each path in full from `${CLAUDE_PLUGIN_ROOT}`, with no other variable, command substitution, wildcard, or inline program such as `python3 -c`                                                                                                      | Blocks when the plugin folder is a subfolder of the repository          |                                                                       |
| Keep launchers and package installs out of each script that a hook or an MCP server runs. When the plugin folder is a subfolder of the repository, also keep shell variables other than `${CLAUDE_PLUGIN_ROOT}`, command substitutions, and calls to other files in the plugin out of those scripts. | Held for a reviewer                                                     | **Scripts the validator couldn’t follow**                             |

### Choices a reviewer always checks

These choices are held for a reviewer even when the plugin meets every other check:

* **A package from a registry:** a launcher that runs a package pinned to an exact version, or `uv run` with `--locked` or `--frozen`, is still held, because the package's own dependencies resolve at install time. The finding is **Runs a pinned npx or uvx package**
* **A lockfile install:** `package.json` beside `package-lock.json`, `npm-shrinkwrap.json`, `bun.lock`, or `bun.lockb` in the root of the plugin folder is held, because Claude Code [installs the packages in that lockfile](https://code.claude.com/docs/en/plugins/loading#node-js-package-dependencies) when a user installs the plugin. The finding is **Dependencies install from a lockfile**
* **A program the validator can't read through, when the plugin folder is a subfolder of the repository:** the validator follows only plain shell scripts. When a hook, an MCP or LSP server command, or a `` !`…` `` line in a skill or command runs a non-shell file from the plugin, passes a whole directory to an interpreter, or runs a shell script that itself runs another file, that file is held. A script that `SKILL.md` only tells Claude to run isn't part of this check. To avoid the hold, keep the plugin at the root of its own repository, or keep the logic a hook or server runs in shell scripts that name each path as `${CLAUDE_PLUGIN_ROOT}/<file>`. The finding is **Scripts the validator couldn’t follow**

If you bundle a package's code into the plugin instead, the launcher or install finding no longer applies, and a reviewer hold can still apply. Validation and the scan check the bundled file like every other file in the plugin folder, including the 256 KiB limit in [Files in the plugin folder](#files-in-the-plugin-folder).

### Hooks, skills, commands, and agents

The component checks confirm that Claude Code can load each hook, skill, command, and agent file in the plugin.

| What to do                                                                                                                                                                                                       | [Result if you don't](#read-a-validation-result)                                                                                | Title in the report, if it has one         |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| Make `hooks/hooks.json` valid JSON with a top-level `hooks` object, only the hook events and hook types in the [hooks reference](https://code.claude.com/docs/en/hooks), and an `https://` URL on each HTTP hook | Blocks                                                                                                                          | **hooks.json is invalid** for invalid JSON |
| Leave `hooks/hooks.json` out of the `hooks` field in `plugin.json`, because Claude Code loads that file automatically                                                                                            | Warning                                                                                                                         |                                            |
| Write valid YAML front matter in each skill, command, and agent file, with `description` as a single text value, not a list                                                                                      | Blocks for front matter that doesn't parse or a `description` that isn't text. Warning for no front matter or no `description`. |                                            |
| Name component folders and files with the exact spelling and capitalization Claude Code expects, such as `hooks/`, `skills/`, and `SKILL.md`                                                                     | Blocks                                                                                                                          |                                            |

## Prepare for the security scan

The security scan looks for behavior that a plugin doesn't disclose, such as sending data elsewhere, running hidden code, or changing Claude's permission settings.

A first submission that fails the security scan is rejected, and a later version that fails can't go live. A new version that the scan flags is held for a reviewer. The **Versions** tab on the plugin's page in the developer portal shows **Didn’t pass the security scan**, or the category of the finding, such as **Sends data to an undisclosed destination**. [Submit your plugin](/docs/plugins/submit#fix-a-failed-version) explains what to do when a version doesn't pass.

To prepare, make the plugin's behavior visible in its README and its source:

* Describe in the README everything the plugin runs, sends, or fetches. A complete README doesn't make a behavior allowed. The [Anthropic Software Directory Policy](https://support.claude.com/en/articles/13145358-anthropic-software-directory-policy) sets what a plugin is allowed to do
* Commit readable source instead of compiled, packed, or minified code. Code that the security scan can't read is held for a reviewer

## Test the plugin's behavior before you submit

Validation and the scan check how the plugin is built. They don't check whether the plugin helps the people who install it. Before you submit, test the plugin's output and how it loads on the surfaces your users will use:

<Steps>
  <Step title="Compare output with and without the plugin">
    Run the plugin's skills on real prompts and compare the output with what Claude produces without the plugin. [`claude plugin eval`](https://code.claude.com/docs/en/plugin-evals) runs that comparison for the whole plugin in Claude Code, and [Measure whether the skill improves the output](/docs/skills/how-to#measure-whether-the-skill-improves-the-output) covers one skill at a time.
  </Step>

  <Step title="Load the plugin on each surface">
    Load the plugin on each surface your users will use, as [Test the plugin on each surface](/docs/plugins/build#test-the-plugin-on-each-surface) describes.
  </Step>
</Steps>

## Next steps

* [Submit your plugin](/docs/plugins/submit): enter the repository in the developer portal, follow the review, and publish
* [Publish to the directory](/docs/directory/publish): confirm your plan and role can submit, and see what Anthropic's review involves

plugins/quickstart New page · 187 lines, new page

# Build your first plugin ## Before you create the plugin ## Create the plugin ## Test the plugin in Claude Code ## Validate the plugin ## Push the plugin to GitHub ## Submit your own plugin ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

# Build your first plugin

> Build a plugin with one skill and an optional MCP connector, test it in Claude Code, validate it, and push it to GitHub, ready to submit your own.

By the end of this quickstart, you have a working example plugin with one skill and, optionally, one remote MCP connector, tested in Claude Code, validated, and pushed to GitHub, which is everything a plugin needs before you submit it to [Anthropic's directory](/docs/directory/publish). A plugin is a folder that packages skills, MCP connectors, commands, and agents, in any combination, so that people add them together.

This quickstart is for developers who have Claude Code installed and want to learn the plugin format by building one. You can follow it with a product that has a remote MCP server, or with only a skill.

<Note>
  * If you want to make a plugin from a conversation without writing files, see [Create a plugin with Claude](/docs/plugins/create-with-claude)
  * If you want to distribute a plugin only inside your own organization, see [Roll out a plugin to your whole organization](/docs/plugins/org-rollout)
  * If you want to look up the folder layout, the manifest fields, or what each surface loads, see [Plugin structure and testing](/docs/plugins/build)
</Note>

## Before you create the plugin

Check that you have each of these before you create the plugin:

* **Claude Code**: [install Claude Code](https://code.claude.com/docs/en/setup). You use it to test and validate the plugin
* **A GitHub repository**: the directory reads plugins from repositories on github.com, and the repository must be public before the listing goes live

## Create the plugin

The steps in this section build a plugin named `expense-reports` for a fictional finance product whose MCP server is at `mcp.example.com`. Replace the names and values with your own.

<Steps>
  <Step title="Write the manifest">
    Create a folder named `expense-reports`, and create `.claude-plugin/plugin.json` inside it. Put only the manifest inside `.claude-plugin/`. Everything else goes at the plugin's top level.

    The directory requires the manifest, and the example has the fields that every surface and the directory read:

    ```json theme={null}
    {
      "name": "expense-reports",
      "displayName": "Expense Reports",
      "version": "1.0.0",
      "description": "File, track, and approve expense reports from a conversation, using your finance system's connector and your company's approval rules.",
      "author": { "name": "Example Corp", "url": "https://example.com" },
      "license": "MIT"
    }
    ```

    People install and refer to the plugin by its `name`. Use lowercase words joined by hyphens, make the name specific to your product, and never change it after release. [Manifest and plugin name](/docs/plugins/pre-submission-checklist#manifest-and-plugin-name) lists the directory's checks on the name.
  </Step>

  <Step title="Add a skill">
    Create `skills/file-expense/SKILL.md`. A skill tells Claude when and how to do a task. The example calls tools from the MCP connector that you add in the next step, so leave the tool calls out of your own skill if your plugin has no connector:

    ```markdown theme={null}
    ---
    name: file-expense
    description: File an expense report. Use when the user mentions a receipt, reimbursement, or expense, or asks to submit spending for approval.
    ---

    To file an expense:

    1. Ask for the receipt if the user hasn't attached one, and read the amount, date, merchant, and currency from it.
    2. Call the expenses connector's `create_report` tool with those fields. Default the category from the merchant type; ask only if it's ambiguous.
    3. If the amount is over the user's approval limit (check with `get_policy`), add their manager as approver before submitting.
    4. Reply with the report number and its approval status. Don't paste the full API response.
    ```

    Claude decides when to load the skill from the `description` line, so write it as the situations a user would be in. [Create custom skills](/docs/skills/how-to) covers the frontmatter fields, resource files, scripts, and testing.
  </Step>

  <Step title="Add an MCP connector">
    Skip this step if your plugin has only a skill. If your product has a remote MCP server, create `.mcp.json` at the plugin root and reference the server by URL:

    ```json theme={null}
    {
      "mcpServers": {
        "expenses": {
          "type": "http",
          "url": "https://mcp.example.com/mcp"
        }
      }
    }
    ```

    There is no server at `mcp.example.com`, so this example connector fails to connect when you test the plugin. Replace the URL with your own server's, or leave `.mcp.json` out.

    Don't put API keys or other secrets in this file, because every person who installs the plugin receives its files. On claude.ai and in Cowork, the entry is listed on the plugin's **Connectors** tab, where the user [adds or connects it](/docs/plugins/overview#bundled-connectors) and signs in through your server's OAuth flow. On Team and Enterprise plans, an Owner adds the connector for the organization, and members then connect with their own account.
  </Step>

  <Step title="Write the README">
    Create `README.md` in the plugin folder with at least 40 words. Words inside code blocks don't count. Say what the plugin does, how to use it, and what data it sends. The directory shows your README as the listing's description, and [README and license](/docs/plugins/pre-submission-checklist#readme-and-license) lists what validation checks.

    This README covers those three points for the example plugin:

    ```markdown theme={null}
    # Expense Reports

    File, track, and approve expense reports from a conversation with Claude.

    ## Use it

    Attach a receipt and ask Claude to file it. Claude reads the amount, date,
    and merchant, files the report through the Expense Reports connector, and
    replies with the report number. Ask what's waiting on you to list the
    reports that need your approval.

    ## Data

    The plugin sends receipt details and report fields to your Example Corp
    account through mcp.example.com. It stores nothing itself.
    ```
  </Step>

  <Step title="Check the license">
    The directory requires a `LICENSE` file in the plugin folder or `license` in `plugin.json`, and validation blocks a plugin that has neither. The example manifest sets `license`, which meets the requirement. If you remove that field, add a `LICENSE` file to the plugin folder instead.
  </Step>
</Steps>

## Test the plugin in Claude Code

Load the plugin from your working copy before you push it. From the folder that contains `expense-reports`, start a Claude Code session with the plugin loaded:

```bash theme={null}
claude --plugin-dir ./expense-reports
```

In that session, your skill appears as `/expense-reports:file-expense`. If you added the connector, `/mcp` shows the server's connection state. With the example's `mcp.example.com` URL, the `expenses` server shows as failed because no server exists at that address, and Claude reports that it can't reach the server when the skill calls its tools.

To try the skill, describe one of the situations that its `description` line names, such as a receipt you want reimbursed. Claude decides when to load the skill from that line.

To test the plugin on claude.ai and in Cowork as well, see [Test the plugin on each surface](/docs/plugins/build#test-the-plugin-on-each-surface).

## Validate the plugin

Run `claude plugin validate` on the folder to catch syntax and schema errors on your machine before you push:

```bash theme={null}
claude plugin validate ./expense-reports
```

The command prints `✔ Validation passed` when the manifest and the component files parse, and names the field to fix when they don't.

The plugin is checked at these points before it's listed, and the portal checks more than the command does:

* **The command**: checks the plugin for syntax and schema errors
* **Validate in the developer portal**: the **Validate** button in the [developer portal](https://claude.ai/directory/manage) runs every validation check. The directory's own checks, such as the README, license, and name checks, run there and not in the command
* **The scan after you submit**: checks the plugin's files again and runs a security scan

The [Plugin pre-submission checklist](/docs/plugins/pre-submission-checklist) lists every check and what each result means.

## Push the plugin to GitHub

The directory reads plugins from repositories on github.com, so the plugin folder goes in a GitHub repository.

<Steps>
  <Step title="Create the repository">
    Create an empty repository on github.com for the plugin. The repository must be public before the listing goes live.
  </Step>

  <Step title="Remove system files">
    Remove `.DS_Store`, `Thumbs.db`, `desktop.ini`, and `__MACOSX` entries from the plugin folder, and add them to `.gitignore`. Validation blocks a plugin that contains them.
  </Step>

  <Step title="Commit and push">
    From inside the `expense-reports` folder, commit the files and push them. The example pushes to a repository named `example-corp/expense-reports`, so replace that name with your own:

    ```bash theme={null}
    git init -b main
    git add .
    git commit -m "Add the expense-reports plugin"
    git remote add origin https://github.com/example-corp/expense-reports.git
    git push -u origin main
    ```

    The repository's page on github.com now shows `.claude-plugin/`, `skills/`, and the other plugin files at the repository root.
  </Step>
</Steps>

## Submit your own plugin

The `expense-reports` plugin you built on this page is a small demonstration of the format, so there's no reason to submit it: the directory is for plugins other people will use, and it refuses a name another organization has already listed. Use the same steps to build your own plugin, with its own name, skills, and connector.

When your plugin validates and is pushed to a public GitHub repository, submit it from the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage): select **Submit new**, choose **Plugin bundle**, and follow [Submit a plugin](/docs/plugins/submit#submit-a-plugin) for each field and for what happens after you submit. If your plugin points at a remote MCP server you run, [submit that server as a connector too](/docs/directory/publish#submit-your-plugin-and-your-mcp-server-as-a-connector). [Who can submit to the directory](/docs/directory/publish#confirm-you-can-submit-to-the-directory) has the plan and role requirements.

## Next steps

* [Plugin structure and testing](/docs/plugins/build): look up the folder layout and manifest fields, and test on claude.ai and in Cowork
* [Plugin pre-submission checklist](/docs/plugins/pre-submission-checklist): fix each validation and scan finding before you submit
* [Submit a plugin](/docs/plugins/submit): fill in each portal field, then publish and update the listed plugin
* [Track your submission](/docs/directory/submission-status): check what your submission's status means and who acts next
* [Plugin feature support across platforms](/docs/plugins/platform-support): check which of the plugin's components load in chat, Cowork, and Claude Code
* [`claude plugin eval`](https://code.claude.com/docs/en/plugin-evals): write eval cases and compare the plugin's results against a run without the plugin

plugins/share New page · 92 lines, new page

# Share a plugin with teammates ## Share a plugin with specific people ### Choose how to distribute a plugin ### Share the plugin ### What the people you share with get ### Stop sharing a plugin ### If you can't share a plugin ## Publish a plugin to your organization ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

# Share a plugin with teammates

> Share a plugin you made with specific people in your Team or Enterprise organization, or publish it to your organization's library.

On a Team or Enterprise plan, you can get a [plugin](/docs/plugins/overview) you made to other people in your organization. You share it with specific people yourself, or you publish it to your organization's library, where an Owner decides who can find and install it.

This page is for someone on a Team or Enterprise plan who created or uploaded a plugin, for example with [Create a plugin with Claude](/docs/plugins/create-with-claude).

<Note>
  * If you're an Owner reviewing what members publish, see [Manage plugins for your organization](/docs/plugins/admin)
  * If you want a wider audience than your organization, see [Plugin structure and testing](/docs/plugins/build) and [Publish to the directory](/docs/directory/publish)
</Note>

To give the plugin to people you name, go to [Share a plugin with specific people](#share-a-plugin-with-specific-people). To reach the whole organization, go to [Publish a plugin to your organization](#publish-a-plugin-to-your-organization).

## Share a plugin with specific people

On a Team or Enterprise plan, you can give a plugin you created or uploaded to specific people in your organization yourself. You don't need an Owner, and nothing is published or reviewed.

### Choose how to distribute a plugin

You can get the plugin to specific people, to your organization's library, to someone outside your organization, or to a wider audience:

* **Share**: specific people in your organization get the plugin from you directly
* **Publish to org**: the plugin goes to your organization's library, where an Owner decides who can find and install it. See [Publish a plugin to your organization](#publish-a-plugin-to-your-organization)
* **The plugin file**: someone in another organization or on a personal plan adds the `.plugin` file or a zip of the plugin with **Add > Upload plugin**. It becomes a separate plugin on their account
* **A marketplace or the directory**: for a wider audience, put the plugin in a Git repository as a folder, as [Plugin structure and testing](/docs/plugins/build) describes, then share it through [your own marketplace](https://code.claude.com/docs/en/plugins/create-marketplace) or [the directory](/docs/directory/publish)

### Share the plugin

Sharing gives the people you name your plugin in their **Customize > Plugins** list, turned off until they turn it on. To share with specific people:

<Steps>
  <Step title="Open the plugin and select Share">
    Go to [**Customize > Plugins**](https://claude.ai/customize/plugins) in claude.ai or the desktop app and open the plugin. Select **Share** at the top of its page. The plugin's menu in your **Your plugins** list has the same **Share** item.
  </Step>

  <Step title="Add people">
    Add each person by name or email address, then confirm the share.
  </Step>
</Steps>

### What the people you share with get

**Share** reaches only members of your organization, and the people you share with can use the plugin but not change it:

* **Who you can share with**: members of the organization you're in. If you enter the email address of someone who isn't a member yet, they're invited to join your organization first, where your organization lets members send invitations. On Enterprise, where an Owner has turned on **Share with groups**, you can also add a user group. To reach someone in another organization or on a personal plan, send them the plugin file instead. **Share** has no option for the whole organization. To reach everyone, [publish the plugin to your organization](#publish-a-plugin-to-your-organization)
* **What they see**: a notice in claude.ai that you shared the plugin, and the plugin listed under **Shared with you** on the **Your plugins** tab of **Customize > Plugins**. It's turned off until they turn it on
* **What they do**: open the plugin and turn on its toggle. When the plugin includes something that runs on their computer, such as a local MCP server or a hook, Claude asks them to confirm first
* **What they can change**: nothing in the plugin. They can view it, turn it on or off, and use it. It stays in their list for as long as you share it
* **Your later edits**: people who turned the plugin on get your new version wherever they use Claude, including chat on the web
* **Connectors**: your connector sign-ins aren't shared. Each person adds or connects the plugin's connectors with their own account, as [Bundled connectors](/docs/plugins/overview#bundled-connectors) describes
* **The link**: **Copy link** in the share dialog copies a link to the plugin's page. Only people you've shared the plugin with can open it

### Stop sharing a plugin

When you stop sharing a plugin with someone, the plugin stops loading for them. To stop sharing, select **Share** again and remove the person from the list of people with access.

### If you can't share a plugin

**Share** appears only on a plugin you created or uploaded yourself, not on one you added from a marketplace or that your organization provides. On your own plugin, these are the cases where you can't share:

* **The share dialog says "Direct sharing is turned off for your organization"**: an Owner turned off **Skill sharing**, the setting that covers both skills and plugins. Ask an Owner to turn it on in [**Organization settings > Plugins & skills > Policy**](https://claude.ai/admin-settings/skills?tab=policy). Until then you can open **Share** to remove people, but you can't add anyone
* **Share is missing and Skills is turned off for your organization**: ask an Owner to turn on **Skills** on the same **Policy** tab
* **Share is missing and your organization's security scan blocked the plugin**: a blocked plugin can't be shared
* **You're on a personal plan**: sharing with specific people needs a Team or Enterprise plan. **Share** either offers an upgrade to a Team plan or doesn't appear

## Publish a plugin to your organization

Publishing puts your plugin in your organization's library, where an Owner decides who can find and install it. It's available on Team and Enterprise plans, and whether you can do it depends on the **Publishing** setting an Owner has chosen for your organization.

Sharing reaches only the people you name and needs no approval. Publishing can reach the whole organization, and under the **Requires review** setting it waits for an Owner to approve it.

To publish, open the plugin from **Customize > Plugins** and select **Publish to org** at the top of its page. This is what happens next under each **Publishing** setting:

* **Requires review**: you submit the plugin for review and propose how it installs for members: **Available to install**, **Installed by default**, or **Required**. The version you submit is frozen, so edits you make afterward aren't part of the request. The reviewer sees your proposal and can change it before approving. An Owner approves or denies it in [**Organization settings > Plugins & skills > Requests**](https://claude.ai/admin-settings/skills?tab=requests), and you can't approve your own submission. You get the decision by email, with the reviewer's reason if it's denied
* **Open**: the plugin is published without review. Where your organization scans what members publish, it goes live after the security scan passes
* **Off**: your organization doesn't accept plugins from members, and **Publish to org** doesn't appear on your plugin

On a Team plan, the **Publishing** setting is **Open** unless an Owner has changed it. [Review plugins that members publish](/docs/plugins/admin#review-plugins-that-members-publish) lists the default for each plan.

You see the result on the plugin's own page, which shows whether the submission is waiting for review, denied, or published:

* **While it's waiting**: you can withdraw it from the plugin's page
* **If it's denied**: the page shows the date and the reviewer's reason, and **Publish to org** is available again so that you can revise the plugin and submit a new request
* **After a version is published**: later edits reach your organization only when you publish again

## Next steps

* [Create a plugin with Claude](/docs/plugins/create-with-claude): make a plugin in claude.ai or the desktop app with Claude's help
* [Manage plugins for your organization](/docs/plugins/admin): if you're an Owner, turn sharing and publishing on or off for members
* [Plugin structure and testing](/docs/plugins/build): write the plugin as a folder for a marketplace or the directory

plugins/submit Changed · +162 / -82 lines

# Submit your plugin ## Before you submit a plugin ## Submit a plugin ### Submission limits and duplicates ## After you submit a plugin ### Fix a failed version ### Publish a passing version ## Update a published plugin ### Change the tracked branch or tag ## Withdraw or delist a plugin ## Next steps # Submitting your plugin ## Getting your plugin to users ## Plugin Directory: Community vs. Anthropic Verified ## What makes a good plugin ### Guiding Claude through MCP setup ### Using safe MCP connectors in plugins ## Directory terms & conditions ## Security ## Submitting your plugin ### Before you start

from line 1
1# Submitting your plugin
1# Submit your plugin
22 
3> Submit your plugin to the plugin directory for Cowork
3> Submit a plugin from a GitHub repository to Anthropic's directory through the developer portal, follow its review, publish it, and release updates.
44 
5The [plugin directory](https://claude.com/plugins-for/cowork) is a community-driven directory where developers can submit plugins for use in Cowork and Claude Code. In Claude Code, this directory is surfaced as the official `claude-plugins-official` marketplace and is automatically available to all users — see [Discover and install plugins](https://code.claude.com/docs/en/discover-plugins#official-anthropic-marketplace). This is a separate and complementary directory from the [Connectors Directory](/docs/connectors/directory), which is specific to MCP connectors.
5To list a plugin in [Anthropic's directory](/docs/directory/publish), you submit it from a GitHub repository through the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage). Anthropic checks each version before it can go live, and people can then add the plugin from claude.ai and use it in chat, Cowork, and Claude Code.
66 
7## Getting your plugin to users
7Use this page if your plugin is already in a GitHub repository and you want it listed. If the plugin references a remote MCP server you run, submit that server as an MCP connector too, as [Submit your plugin, and your MCP server as a connector](/docs/directory/publish#submit-your-plugin-and-your-mcp-server-as-a-connector) explains.
88 
9Once you've built a plugin, there are several ways to get it to users:
9<Note>
10 * To build the plugin first, see [Plugin structure and testing](/docs/plugins/build)
11 * To share it without a public listing, see [Share a plugin with teammates](/docs/plugins/share) or [Roll out a plugin to your whole organization](/docs/plugins/org-rollout)
12 * If you submitted through the earlier Claude Console form, see [Move an earlier submission to the developer portal](/docs/directory/publish#move-an-earlier-submission-to-the-developer-portal)
13</Note>
1014 
111. **Direct install** — You can install specific plugins yourself, or guide select users to install them. This is the simplest path for internal tools or small teams.
122. **Your own plugin marketplace** — You can serve your own [plugin marketplace](https://code.claude.com/docs/en/plugin-marketplaces), which allows a subset of opted-in users to access any plugin you share. This is a great fit for enterprise contexts or communities with shared tasks. See the [Claude Code docs on sharing a marketplace](https://code.claude.com/docs/en/plugin-marketplaces) for setup instructions.
133. **[Submit to the Claude plugin directory](#submitting-your-plugin)** — You can submit to the Claude plugin directory, which is made available to all users of Cowork and Claude Code.
15## Before you submit a plugin
1416 
15## Plugin Directory: Community vs. Anthropic Verified
17You need the following to submit from the developer portal on claude.ai:
1618 
17Plugins are submitted by developers and creators in the community. Anthropic performs basic automated review on submissions before adding them to the directory. Plugins with an "Anthropic Verified" badge have undergone additional review from a quality and safety perspective. That said, there are limits to what Anthropic is able to review — you should only install plugins from developers you trust.
19* **A GitHub repository that holds the plugin.** The directory reads plugins from repositories on github.com, and the repository must be public before the listing goes live. If the portal shows **Couldn’t find that repository, branch or tag**, check that the repository and the branch or tag exist
20* **A plan and role that can submit.** See [who can submit to the directory](/docs/directory/publish#confirm-you-can-submit-to-the-directory)
1821 
19There are no guarantees that any community plugin will become Anthropic Verified.
22Every plugin in the directory must comply with the [Anthropic Software Directory Terms](https://support.claude.com/en/articles/13145338-anthropic-software-directory-terms) and the [Anthropic Software Directory Policy](https://support.claude.com/en/articles/13145358-anthropic-software-directory-policy).
2023 
21<Warning>
22 Exercise caution when installing community plugins. Always review a plugin's permissions, connected services, and data access before use.
23</Warning>
24Before you open the portal, work through the [plugin pre-submission checklist](/docs/plugins/pre-submission-checklist). It covers what the directory's checks look for in `plugin.json`, the README, the license, and the rest of the plugin folder. In your terminal, from the folder that contains the plugin folder, run `claude plugin validate ./<plugin-folder>` first to catch formatting and structure problems. The portal's **Validate** step runs more checks than the command does.
2425 
25## What makes a good plugin
26## Submit a plugin
2627 
27The best plugins bundle related capabilities together into a coherent package that solves a specific job function or workflow end-to-end. Rather than exposing a single tool, a good plugin combines skills, connectors, slash commands, and sub-agents so Claude has everything it needs to handle a category of work.
28Each plugin folder is its own submission in the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage), so a repository that holds several plugins needs one submission for each.
2829 
29For example, a sales plugin might bundle a CRM connector, a skill that teaches Claude your sales process, slash commands for common tasks like prospect research and call follow-ups, and a sub-agent that handles competitive analysis in parallel. Together, these components make Claude a specialist — individually, they're just building blocks.
30<Steps>
31 <Step title="Open the portal">
32 1. Open the [developer portal](https://claude.ai/directory/manage) and select **Submit new**.
33 2. When the portal asks **What would you like to submit?**, select **Plugin bundle**.
3034 
31Plugins can include any combination of:
35 <Note>
36 The other option, **MCP connector**, submits one remote MCP server as its own connector listing. If your plugin references an MCP server you built and you haven't submitted that server yet, submit it separately with **MCP connector** by following [Submit your connector](/docs/connectors/building/submission). [Submit your plugin, and your MCP server as a connector](/docs/directory/publish#submit-your-plugin-and-your-mcp-server-as-a-connector) explains why you submit both.
37 </Note>
38 </Step>
3239 
33* **Skills** — Task-specific instructions that Claude activates dynamically based on context
34* **MCP connectors** — Connections to external tools and data sources. Plugins can contain any MCP, including remote MCPs, local MCPs, and MCPBs. The MCP configuration within a plugin is highly customizable.
35* **Slash commands** — User-invoked commands for triggering specific workflows
36* **Sub-agents** — Custom agent definitions for delegating complex work
40 <Step title="Enter the source and validate">
41 On the **Source** step, fill in the fields:
3742 
38### Guiding Claude through MCP setup
43 * **Repository**: the GitHub repository's URL, or `owner/repo`. If you paste a link to a folder on a branch, the portal fills in the path and branch for you
44 * **Plugin path (optional)**: the folder that holds `.claude-plugin/plugin.json`, if the plugin isn't at the repository root
45 * **Branch or tag (optional)**: the branch or tag that the directory follows for new versions. The portal calls this the tracked branch or tag. Leave the field empty to follow the repository's default branch. A tag stays on its commit until you change the tag. If the branch name contains a slash, type the name in this field or enter `owner/repo@branch` in **Repository**, instead of pasting a folder link
3946 
40Plugins can include a `SETUP.md` skill to guide Claude through configuring and connecting any MCP servers bundled in the plugin. This lets you define step-by-step setup instructions that Claude follows when a user installs or activates your plugin.
47 Then validate the plugin:
4148 
42### Using safe MCP connectors in plugins
49 1. Select **Validate** to run the directory's validation checks on the plugin.
50 2. If a finding blocks submission, fix it in the repository and push the fix.
51 3. Validate again.
4352 
44While a plugin can include any MCP of any kind in its `.mcp.json` definition, we strongly encourage using connectors that already exist in the [Connectors Directory](/docs/connectors/directory) or come from well-known developers. This will increase the likelihood of verification and will reduce the number of warnings shown to users.
53 The [plugin pre-submission checklist](/docs/plugins/pre-submission-checklist) explains what each kind of finding means.
4554 
46## Directory terms & conditions
55 A validation result applies to one commit. If you push to the branch after validating, validate again before you continue.
56 </Step>
4757 
48All plugins in the directory must comply with:
58 <Step title="Check the listing details">
59 The **Listing details** step shows how the plugin appears in the directory, read from `plugin.json` and the README. To change a field before you submit, edit `plugin.json` or the README in the repository and validate again. Once the plugin is listed, its name and short description follow the version that's live, so to change them later, edit `plugin.json` or the README and publish a new version.
60 </Step>
4961 
50* [Anthropic Software Directory Terms](https://support.claude.com/en/articles/13145338-anthropic-software-directory-terms)
51* [Anthropic Software Directory Policy](https://support.claude.com/en/articles/13145358-anthropic-software-directory-policy)
62 <Step title="Answer the data handling questions">
63 On the **Data handling** step, answer each question: whether the plugin reads or stores personal data, whether it sends data to services other than its declared connectors, how long it keeps data, and whether it's intended for people under 18.
64 </Step>
5265 
53## Security
66 <Step title="Complete the compliance step">
67 On the **Compliance** step, check the contact email and select the acknowledgements:
5468 
55Each plugin in the directory includes a link to where you can review its contents before installing. Plugins are capable of loading remote MCP servers, local MCP servers, and other local software tools to assist you in doing work. You should review any additional software that may be installed by a plugin, as community plugins may install unverified, third-party software that could be malicious or result in unintended behavior.
69 1. Check that the contact email is an address where Anthropic can reach you about the submission.
70 2. Select all four acknowledgements.
71 </Step>
5672 
57Best practices when using community plugins:
73 <Step title="Review and submit">
74 On the **Review and submit** step, confirm the details, choose how new versions arrive, and submit:
5875 
59* Review the plugin's source code before installing
60* Check which MCP connectors are included and what permissions they request
61* Prefer Anthropic Verified plugins for production workflows
62* Report any suspicious activity to Anthropic
76 1. Confirm the details.
77 2. Under **How new versions reach the directory**, choose **GitHub push webhook**, which is selected by default, or **Scheduled check only**. With either option, the directory also checks the tracked branch or tag for new commits on a schedule.
78 3. Select **Submit for review**.
6379 
64## Submitting your plugin
80 If you kept **GitHub push webhook**, the **Plugin submitted for review** page offers **Set up push updates**. You need admin access to the repository on GitHub to set up the webhook.
6581 
66To submit a plugin to the directory, share a GitHub link to your plugin. The repo must be public—closed-source plugins are not accepted.
82 To set it up later, open the plugin from **Submissions** in the developer portal and select **Set up** under **Updates** on the **Settings** tab.
83 </Step>
84</Steps>
6785 
68Before submitting, run `claude plugin validate` to check formatting and structure. Review times vary with queue volume.
86### Submission limits and duplicates
6987 
70### Before you start
88An organization can create up to 10 submissions in any 24-hour period, and saved drafts and withdrawn submissions count toward the limit. When your organization reaches the limit, the portal shows **Daily submission limit reached**.
7189 
72Both submission forms require you to be signed in with sufficient permissions:
90Your organization can have one submission for each repository and folder. To continue an existing submission, open it from **Submissions** in the developer portal instead of creating a second one.
7391 
74* **claude.ai** requires a Team or Enterprise organization and directory management access. Organization Owners have this by default; on Enterprise, an Owner can delegate it through a custom role, as described in the [connector submission access requirements](/docs/connectors/building/submission#before-you-start).
75* **Console** requires a Developer, Admin, or Owner role on a Console organization. Individual authors who aren't part of a claude.ai Team or Enterprise organization can sign up for Console at [platform.claude.com](https://platform.claude.com) and submit there.
92If another organization has already submitted the same repository and folder, the portal refuses **Submit for review** with **Already submitted by another organization**. If your organization owns the repository, email `[email protected]`.
7693 
77To submit please use one of our in-app submission forms:
94## After you submit a plugin
7895 
79* **Claude.ai** — [https://claude.ai/admin-settings/directory/submissions/plugins/new](https://claude.ai/admin-settings/directory/submissions/plugins/new)
80* **Console** — [https://platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)
96When you select **Submit for review**, the directory scans the newest commit on the tracked branch or tag. Each scan validates the plugin against the directory's rules again and runs a security scan. [Prepare for the security scan](/docs/plugins/pre-submission-checklist#prepare-for-the-security-scan) describes what the security scan looks for.
8197 
82After you submit on claude.ai, the **Directory** page in your organization settings ([claude.ai/admin-settings/directory/submissions](https://claude.ai/admin-settings/directory/submissions)) lists your submissions with their review status.
98To follow the submission, open the plugin from **Submissions** in the [developer portal](https://claude.ai/directory/manage). The **Versions** tab on the plugin's page lists each scanned commit with the result of its checks. When the newest version isn't live, the plugin's page says why. [Track your directory submission](/docs/directory/submission-status#plugin-bundle-statuses) explains what each status in the portal means and who acts next.
8399 
84After your plugin is published, updates pushed to your GitHub repo are picked up automatically—CI mirrors changes to the public marketplace and runs automated screening on each update. You do not need to re-submit the form for updates.
100A finished scan leaves the version in one of these states:
85101 
86<Note>
87 Need help building your plugin? See the [Claude Code plugin guide](https://code.claude.com/docs/en/plugins) for a complete walkthrough of plugin structure, manifests, and testing, or the [plugins reference](https://code.claude.com/docs/en/plugins-reference) for full technical specifications.
88</Note>
102* **Passes every check:** the version can be published, as described in [Publish a passing version](#publish-a-passing-version)
103* **Held for a reviewer:** an Anthropic reviewer reads the version, and it can go live only after the reviewer clears it. The [plugin pre-submission checklist](/docs/plugins/pre-submission-checklist) lists the findings that hold a version
104* **Doesn't pass:** the portal lists the rules that the version breaks. For a failed security scan, the portal shows the category of the finding when the scan recorded one, such as **Sends data to an undisclosed destination**
105 
106If the directory can't fetch a commit, or a scan ends without a result, the plugin's page says whether the directory retries on its own or whether something in the repository needs fixing. After any fix, select **Check for new commits** on the plugin's page to run the scan again.
107 
108### Fix a failed version
109 
110To fix a version that doesn't pass, first check whether the submission was rejected. A rejected submission says that the version was not approved, and only a rejected submission shows **Resubmit for review** on its **Review** tab. A reviewer's decision rejects a submission, and so does a failed security scan on a plugin that has never been published.
111 
112* **If the submission was rejected:** the directory stops scanning it. To resubmit:
113 1. Read any changes that the reviewer asked for under **Requested changes** on the **Review** tab.
114 2. Update the plugin and push the fix.
115 3. Select **Resubmit for review** on the **Review** tab. Resubmitting runs every check again.
116* **If the submission wasn't rejected:** push a fix to the tracked branch, then select **Check for new commits** on the plugin's page. Without that step, the directory finds the new commit at its next scheduled check
117 
118### Publish a passing version
119 
120A version that passes every check isn't live until it's published. When the version passes, select **Publish** on the plugin's page. By default, the portal records this as a request for an Anthropic reviewer, who then publishes the version.
121 
122The **Auto-publish** row on the plugin's **Overview** tab says which publish setting Anthropic has applied to your plugin. The settings include:
123 
124* **An Anthropic reviewer publishes each version**: the default. For every version that passes, you select **Publish** and a reviewer publishes it
125* **The reviewer publishes only the first version**: you select **Publish** for the first version and a reviewer publishes it. Later versions that pass go live by themselves unless you turn auto-publish off or the security scan flags a version, which holds later versions for a reviewer
126 
127You set auto-publish with the **Auto-publish passing versions** toggle on the **Review and submit** step. After you submit, change it with the **Publish new versions automatically** toggle on the plugin's **Settings** tab. Auto-publish doesn't apply while a reviewer publishes each version.
128 
129If a submission is stuck, [Contact Anthropic about a submission](/docs/directory/submission-status#contact-anthropic-about-a-submission) gives the channel for a plugin.
130 
131## Update a published plugin
132 
133To release a new version, push to the tracked branch. You don't submit the form again. If the submission follows a tag, release a new version by changing the tag, as described in [Change the tracked branch or tag](#change-the-tracked-branch-or-tag).
134 
135The directory checks the tracked branch for new commits on a schedule. If you set up the GitHub push webhook, the directory also checks when you push, without waiting for the schedule.
136 
137* **To set up the webhook after you submit:** select **Set up** under **Updates** on the plugin's **Settings** tab
138* **To check right away:** open the plugin from **Submissions** in the [developer portal](https://claude.ai/directory/manage) and select **Check for new commits**
139 
140A new version that passes is published according to the plugin's [publish setting](#publish-a-passing-version). The listing keeps serving the last published version until a new version is published, including when a new version doesn't pass or is held for a reviewer. If the security scan flags or fails a new version, later versions also wait until an Anthropic reviewer clears the plugin.
141 
142If your `plugin.json` sets `version`, raise it with every release.
143 
144### Change the tracked branch or tag
145 
146The tracked branch or tag is where the directory checks for new versions of your plugin. To follow a different one, edit the **Tracked branch or tag** field on the plugin's **Settings** tab and select **Save**. The directory then scans the newest commit there as a new version; when it passes, select **Publish** again, or **Publish update** if a version is already live.
147 
148A version that is already live stays up when you change the tracked branch or tag, and the directory cancels a publish request that is still waiting. You can't change the branch or tag while the plugin is with a reviewer.
149 
150You can't change a submission's repository and folder after you submit. To list a plugin from a different repository or folder, create a new submission.
151 
152## Withdraw or delist a plugin
153 
154You can take a submission back at any stage from its page in the developer portal. Open the plugin from **Submissions** at [claude.ai/directory/manage](https://claude.ai/directory/manage); which control you see depends on how far the submission got:
155 
156* **A draft you haven't submitted**: select **Delete draft**. The draft leaves your list.
157* **A submission that's in review and was never published**: select **Withdraw submission**, in the page header or on the **Settings** tab. The submission leaves your list and drops out of scanning and review, and nothing is published. To try again later, submit the same repository and path, which reopens it. A withdrawn submission still counts toward the [10 submissions per 24 hours](#submission-limits-and-duplicates) limit.
158* **A plugin that's live in the directory**: open the menu in the page header and select **Delist plugin**. This asks the directory to stop listing it, which can take time to reach every Claude app. People who already installed the plugin stop getting updates, and their copy may be removed. While the request is pending, the menu shows **Delist requested**.
159 
160To bring a delisted plugin back, select **Relist plugin** on its page. Relisting is a request, not an instant switch: the directory may apply it directly or send it to a reviewer, and it can be declined. To change what's listed rather than remove it, [update the published plugin](#update-a-published-plugin) instead.
161 
162## Next steps
163 
164* [Track your submission](/docs/directory/submission-status#plugin-bundle-statuses): check what the status next to your plugin's name means and who acts next
165* [Plugin pre-submission checklist](/docs/plugins/pre-submission-checklist): fix each validation and scan finding
166* [After publishing](/docs/connectors/building/after-publishing): update your plugin and listing, and delist
167* [Track published plugin usage](/docs/connectors/building/after-publishing#track-published-plugin-usage): see installs, versions, runs, and error rates on the plugin's **Usage** tab
168* [Manage your directory listing](/docs/connectors/building/managing-your-listing): for an MCP connector, check health and usage metrics and edit the listing
89169 

skills/how-to Changed · +602 / -105 lines

# Create custom skills ## Decide what skill to create ## Create a `SKILL.md` file ### Write the instructions ## Add resources ## Add scripts ## Package your skill ## Test your skill ### In Claude Code ### Measure whether the skill improves the output ## Share or package your skill ## Next steps # Creating custom skills ## Creating a `SKILL.md` file ### Markdown body ## Adding resources ## Adding scripts ## Packaging your skill ## Testing your skill ## Security considerations ## Related topics

The two sides of this change are more than 400 edits apart, too far apart to line up, so this is the differ's own diff of it and the words inside a line are not marked.

from line 1
1# Creating custom skills
2 
3> Learn how to create, structure, and test your own custom skills
4 
5Custom skills extend Claude with specialized knowledge and workflows. This guide explains how to create, structure, and test your own skills.
6 
7Skills can range from simple instruction sets to multi-file packages with executable code. Effective skills:
8 
9* Solve a specific, repeatable task
10* Have clear instructions Claude can follow
11* Include examples when helpful
12* Define when they should be used
13* Focus on one workflow rather than trying to do everything
1# Create custom skills
2 
3> Create a custom skill for Claude: write the SKILL.md file, add resources and scripts, package the skill, and test it.
4 
5export const Piece = ({id, children}) => <div className="pe-piece" data-piece={id}>{children}</div>;
6 
7export const PluginExplorer = ({children, variant}) => {
8 const SKILL_PIECES = [{
9 id: 'skillmd',
10 required: 'Required',
11 name: 'SKILL.md',
12 path: 'brand-guidelines/SKILL.md',
13 lines: [{
14 depth: 0,
15 kind: 'file',
16 text: 'SKILL.md'
17 }],
18 href: '/skills/how-to#create-a-skillmd-file',
19 linkText: 'Go to Create a SKILL.md file'
20 }, {
21 id: 'references',
22 name: 'Reference file',
23 path: 'brand-guidelines/references/voice-and-tone.md',
24 lines: [{
25 depth: 0,
26 kind: 'folder',
27 text: 'references/'
28 }, {
29 depth: 1,
30 kind: 'file',
31 text: 'voice-and-tone.md'
32 }],
33 href: '/skills/how-to#add-resources',
34 linkText: 'Go to Add resources'
35 }, {
36 id: 'assets',
37 name: 'Asset',
38 path: 'brand-guidelines/assets/slide-template.md',
39 lines: [{
40 depth: 0,
41 kind: 'folder',
42 text: 'assets/'
43 }, {
44 depth: 1,
45 kind: 'file',
46 text: 'slide-template.md'
47 }],
48 href: '/skills/how-to#add-resources',
49 linkText: 'Go to Add resources'
50 }, {
51 id: 'scripts',
52 name: 'Script',
53 path: 'brand-guidelines/scripts/check_contrast.py',
54 lines: [{
55 depth: 0,
56 kind: 'folder',
57 text: 'scripts/'
58 }, {
59 depth: 1,
60 kind: 'file',
61 text: 'check_contrast.py'
62 }],
63 href: '/skills/how-to#add-scripts',
64 linkText: 'Go to Add scripts'
65 }];
66 const PLUGIN_PIECES = [{
67 id: 'manifest',
68 required: 'Required',
69 name: 'Manifest',
70 path: '.claude-plugin/plugin.json',
71 lines: [{
72 depth: 0,
73 kind: 'folder',
74 text: '.claude-plugin/'
75 }, {
76 depth: 1,
77 kind: 'file',
78 text: 'plugin.json'
79 }],
80 href: '/plugins/build#write-the-manifest',
81 linkText: 'Go to Write the manifest'
82 }, {
83 id: 'skills',
84 name: 'Skill',
85 path: 'skills/file-expense/SKILL.md',
86 lines: [{
87 depth: 0,
88 kind: 'folder',
89 text: 'skills/'
90 }, {
91 depth: 1,
92 kind: 'folder',
93 text: 'file-expense/'
94 }, {
95 depth: 2,
96 kind: 'file',
97 text: 'SKILL.md'
98 }],
99 href: '/skills/how-to',
100 linkText: 'Go to Create custom skills'
101 }, {
102 id: 'references',
103 name: 'Skill reference file',
104 path: 'skills/file-expense/references/categories.md',
105 lines: [{
106 depth: 2,
107 kind: 'folder',
108 text: 'references/'
109 }, {
110 depth: 3,
111 kind: 'file',
112 text: 'categories.md'
113 }],
114 href: '/skills/how-to#add-resources',
115 linkText: 'Go to Add resources'
116 }, {
117 id: 'scripts',
118 name: 'Skill script',
119 path: 'skills/file-expense/scripts/total.py',
120 lines: [{
121 depth: 2,
122 kind: 'folder',
123 text: 'scripts/'
124 }, {
125 depth: 3,
126 kind: 'file',
127 text: 'total.py'
128 }],
129 href: '/skills/how-to#add-scripts',
130 linkText: 'Go to Add scripts'
131 }, {
132 id: 'commands',
133 name: 'Command',
134 path: 'commands/summarize.md',
135 lines: [{
136 depth: 0,
137 kind: 'folder',
138 text: 'commands/'
139 }, {
140 depth: 1,
141 kind: 'file',
142 text: 'summarize.md'
143 }],
144 href: '/plugins/platform-support#compare-component-support-by-app',
145 linkText: 'Go to component support by app'
146 }, {
147 id: 'mcp',
148 name: 'MCP connector',
149 path: '.mcp.json',
150 lines: [{
151 depth: 0,
152 kind: 'file',
153 text: '.mcp.json'
154 }],
155 href: '/plugins/build#bundle-an-mcp-connector-with-its-skill',
156 linkText: 'Go to Bundle an MCP connector with its skill'
157 }, {
158 id: 'readme',
159 required: 'Required to publish',
160 name: 'README',
161 path: 'README.md',
162 lines: [{
163 depth: 0,
164 kind: 'file',
165 text: 'README.md'
166 }],
167 href: '/plugins/pre-submission-checklist#readme-and-license',
168 linkText: 'Go to README and license checks'
169 }, {
170 id: 'license',
171 required: 'Required to publish',
172 name: 'License',
173 path: 'LICENSE',
174 lines: [{
175 depth: 0,
176 kind: 'file',
177 text: 'LICENSE'
178 }],
179 href: '/plugins/pre-submission-checklist#readme-and-license',
180 linkText: 'Go to README and license checks'
181 }];
182 const isSkill = variant === 'skill';
183 const PIECES = isSkill ? SKILL_PIECES : PLUGIN_PIECES;
184 const rootLabel = isSkill ? 'brand-guidelines/' : 'expense-reports/';
185 const title = isSkill ? 'What goes in the skill folder' : 'What goes in the plugin folder';
186 const treeCaption = isSkill ? 'Skill folder' : 'Plugin folder';
187 const [selectedId, setSelectedId] = useState(isSkill ? 'skillmd' : 'manifest');
188 const [isFullscreen, setIsFullscreen] = useState(false);
189 const rootRef = useRef(null);
190 useEffect(() => {
191 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);
192 document.addEventListener('fullscreenchange', onFsChange);
193 return () => document.removeEventListener('fullscreenchange', onFsChange);
194 }, []);
195 const toggleFullscreen = () => {
196 if (!rootRef.current) return;
197 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});
198 };
199 const selected = PIECES.find(p => p.id === selectedId) || PIECES[0];
200 const onTreeKeyDown = e => {
201 const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];
202 if (keys.indexOf(e.key) === -1) return;
203 const i = PIECES.findIndex(p => p.id === selectedId);
204 let next = i;
205 if (e.key === 'ArrowDown') next = Math.min(PIECES.length - 1, i + 1);
206 if (e.key === 'ArrowUp') next = Math.max(0, i - 1);
207 if (e.key === 'Home') next = 0;
208 if (e.key === 'End') next = PIECES.length - 1;
209 e.preventDefault();
210 if (next === i) return;
211 const id = PIECES[next].id;
212 setSelectedId(id);
213 const el = document.getElementById('pe-node-' + id);
214 if (el) el.focus();
215 };
216 const FolderIcon = () => <svg className="pe-icon" width="15" height="15" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.3" strokeLinejoin="round" aria-hidden="true">
217 <path d="M1.5 4.5a1 1 0 0 1 1-1h3.2l1.3 1.5h6a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1h-10.5a1 1 0 0 1-1-1z" />
218 </svg>;
219 const FileIcon = () => <svg className="pe-icon" width="15" height="15" viewBox="0 0 16 16" fill="none" stroke="currentColor" strokeWidth="1.3" strokeLinejoin="round" aria-hidden="true">
220 <path d="M4 1.5h5.5L13 5v9.5H4z" />
221 <path d="M9.5 1.5V5H13" />
222 </svg>;
223 return <div ref={rootRef} className={isFullscreen ? 'pe-root pe-fullscreen not-prose' : 'pe-root not-prose'} data-selected={selected.id}>
224 <style>{`
225 .pe-root {
226 --pe-mono: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);
227 --pe-accent: #D97757;
228 --pe-accent-text: #A8502F;
229 --pe-accent-bg: rgba(217,119,87,0.10);
230 --pe-bg: #FFFFFF;
231 --pe-surface: #FAFAF7;
232 --pe-hover: #F0EEE6;
233 --pe-border: #E8E6DC;
234 --pe-text: #141413;
235 --pe-text-2: #3D3D3A;
236 --pe-text-3: #5E5D59;
237 font-family: inherit;
238 background: var(--pe-bg);
239 color: var(--pe-text);
240 border: 1px solid var(--pe-border);
241 border-radius: 12px;
242 margin: 1.5rem 0;
243 overflow: hidden;
244 box-sizing: border-box;
245 }
246 .dark .pe-root {
247 --pe-accent-text: #EBA98F;
248 --pe-accent-bg: rgba(217,119,87,0.18);
249 --pe-bg: #1A1918;
250 --pe-surface: #232221;
251 --pe-hover: #2E2D2B;
252 --pe-border: #3A3936;
253 --pe-text: #F1EFE9;
254 --pe-text-2: #D6D4CA;
255 --pe-text-3: #B8B5AD;
256 }
257 .pe-root *, .pe-root *::before, .pe-root *::after { box-sizing: border-box; }
258 .pe-head { display: flex; align-items: flex-start; gap: 12px; padding: 18px 24px 16px; border-bottom: 1px solid var(--pe-border); }
259 .pe-head-text { flex: 1; min-width: 0; }
260 .pe-fs-btn { flex-shrink: 0; width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--pe-border); border-radius: 6px; background: var(--pe-surface); color: var(--pe-text-2); font-size: 15px; line-height: 1; cursor: pointer; }
261 .pe-fs-btn:hover { background: var(--pe-hover); }
262 .pe-fs-btn:focus-visible { outline: 2px solid var(--pe-accent); outline-offset: 2px; }
263 .pe-fullscreen { border-radius: 0; height: 100vh; display: flex; flex-direction: column; overflow: auto; }
264 .pe-fullscreen .pe-body { flex: 1; }
265 .pe-title { font-size: 19px; font-weight: 600; line-height: 1.3; color: var(--pe-text); margin: 0; }
266 .pe-sub { font-size: 15px; line-height: 1.5; color: var(--pe-text-3); margin: 4px 0 0; }
267 .pe-sub code { font-family: var(--pe-mono); font-size: 0.88em; padding: 1px 5px; border-radius: 4px; background: var(--pe-surface); border: 1px solid var(--pe-border); }
268 .pe-body { display: flex; align-items: stretch; }
269 .pe-tree-pane { width: 270px; flex-shrink: 0; background: var(--pe-surface); border-right: 1px solid var(--pe-border); padding: 16px 0 12px; }
270 .pe-panel { flex: 1; min-width: 0; padding: 16px 24px 24px; }
271 .pe-caption { font-size: 13px; font-weight: 600; color: var(--pe-text-3); margin: 0 0 10px; }
272 .pe-tree-pane .pe-caption { padding: 0 16px; }
273 .pe-rootline { display: flex; align-items: center; gap: 7px; padding: 3px 16px; font-family: var(--pe-mono); font-size: 13.5px; color: var(--pe-text-3); }
274 .pe-node {
275 display: block; width: 100%; margin: 0; padding: 3px 16px 3px 30px; text-align: left; cursor: pointer;
276 background: transparent; color: var(--pe-text-2);
277 border: none; border-left: 3px solid transparent;
278 font-family: var(--pe-mono); font-size: 13.5px; line-height: 1.4;
279 }
280 .pe-node:hover { background: var(--pe-hover); }
281 .pe-node:focus-visible { outline: 2px solid var(--pe-accent); outline-offset: -2px; }
282 .pe-node[aria-pressed="true"] { background: var(--pe-accent-bg); border-left-color: var(--pe-accent); color: var(--pe-accent-text); font-weight: 600; }
283 .pe-line { display: flex; align-items: center; gap: 7px; padding: 2px 0; }
284 .pe-line span { overflow-wrap: anywhere; }
285 .pe-line > span:not(.pe-req) { white-space: nowrap; flex-shrink: 0; }
286 .pe-req { flex-shrink: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; margin-left: 8px; padding: 0 6px; border-radius: 999px; font-size: 11px; line-height: 18px; font-family: var(--pe-sans, inherit); letter-spacing: .02em; color: var(--pe-accent-text); border: 1px solid var(--pe-border); background: var(--pe-surface); white-space: nowrap; }
287 .pe-piece { display: none; font-size: 16px; line-height: 1.6; color: var(--pe-text-2); }
288 ${PIECES.map(p => '.pe-root[data-selected="' + p.id + '"] .pe-piece[data-piece="' + p.id + '"]').join(',\n ')} { display: block; }
289 .pe-piece p { margin: 0 0 10px; }
290 .pe-piece p:last-child { margin-bottom: 0; }
291 .pe-piece ul { list-style: disc; padding-left: 1.25em; margin: 0 0 10px; }
292 .pe-piece li { margin: 2px 0; }
293 .pe-piece code { font-family: var(--pe-mono); font-size: 0.88em; padding: 1px 5px; border-radius: 4px; background: var(--pe-surface); border: 1px solid var(--pe-border); }
294 .pe-piece .code-block { margin: 12px 0 0; }
295 .pe-piece pre code { padding: 0; border: none; background: none; }
296 .pe-piece a { color: var(--pe-accent-text); }
297 .pe-line-compact { display: none; }
298 .pe-icon { flex-shrink: 0; }
299 .pe-name { font-size: 22px; font-weight: 600; line-height: 1.25; letter-spacing: -0.2px; color: var(--pe-text); margin: 0; }
300 .pe-path { font-family: var(--pe-mono); font-size: 13.5px; color: var(--pe-accent-text); margin: 4px 0 0; overflow-wrap: anywhere; }
301 .pe-block { margin: 20px 0 0; }
302 .pe-link {
303 display: inline-block; margin: 24px 0 0; padding: 8px 14px; border-radius: 8px;
304 font-size: 14.5px; font-weight: 600; text-decoration: none;
305 color: var(--pe-accent-text); background: var(--pe-accent-bg); border: 1px solid var(--pe-accent);
306 }
307 .pe-link:hover { filter: brightness(0.97); }
308 .pe-link:focus-visible { outline: 2px solid var(--pe-accent); outline-offset: 2px; }
309 @media (max-width: 700px) {
310 .pe-head { padding: 16px 16px 14px; }
311 .pe-body { flex-direction: column; }
312 .pe-tree-pane { width: 100%; border-right: none; border-bottom: 1px solid var(--pe-border); }
313 .pe-line-tree { display: none; }
314 .pe-line-compact { display: flex; }
315 .pe-panel { padding: 16px 16px 20px; }
316 }
317 `}</style>
318 
319 <div className="pe-head">
320 <div className="pe-head-text">
321 <div className="pe-title">{title}</div>
322 {isSkill ? <div className="pe-sub">This example skill, <code>brand-guidelines</code>, has one of each kind of file a skill can carry. Select a file to read what it's for and see a minimal example.</div> : <div className="pe-sub">This example plugin, <code>expense-reports</code>, has one of each file that chat, Cowork, and Claude Code all load, plus the README and license the directory requires. Select a file to read what it’s for and see a minimal example.</div>}
323 </div>
324 <button type="button" className="pe-fs-btn" onClick={toggleFullscreen} aria-label={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}>
325 {isFullscreen ? '⤡' : '⛶'}
326 </button>
327 </div>
328 
329 <div className="pe-body">
330 <div className="pe-tree-pane">
331 <div className="pe-caption" id="pe-tree-caption">{treeCaption}</div>
332 <div role="group" aria-labelledby="pe-tree-caption" onKeyDown={onTreeKeyDown}>
333 <div className="pe-rootline"><FolderIcon /><span>{rootLabel}</span></div>
334 {PIECES.map(p => <button key={p.id} id={'pe-node-' + p.id} type="button" className="pe-node" aria-pressed={p.id === selected.id} aria-label={p.name + ', ' + p.path} onClick={() => setSelectedId(p.id)}>
335 {p.lines.map((line, i) => <span key={i} className="pe-line pe-line-tree" style={{
336 paddingLeft: line.depth * 18 + 'px'
337 }}>
338 {line.kind === 'folder' ? <FolderIcon /> : <FileIcon />}
339 <span>{line.text}</span>
340 {p.required && i === p.lines.length - 1 ? <span className="pe-req" title={p.required}>Required</span> : null}
341 </span>)}
342 <span className="pe-line pe-line-compact">
343 <FileIcon />
344 <span>{p.path}</span>
345 {p.required ? <span className="pe-req" title={p.required}>Required</span> : null}
346 </span>
347 </button>)}
348 </div>
349 </div>
350 
351 <div className="pe-panel" role="region" aria-labelledby="pe-panel-caption" aria-live="polite" aria-atomic="true">
352 <div className="pe-caption" id="pe-panel-caption">Selected file</div>
353 <div className="pe-name">{selected.name}{selected.required ? <span className="pe-req">{selected.required}</span> : null}</div>
354 <div className="pe-path">{selected.path}</div>
355 
356 <div className="pe-block">{children}</div>
357 
358 <a className="pe-link" href={selected.href}>{selected.linkText}</a>
359 </div>
360 </div>
361 </div>;
362};
363 
364A custom skill is a folder with a `SKILL.md` file of instructions, and optionally scripts and reference files, that Claude loads when a task matches the skill's description. This guide is for anyone writing a skill of their own. It explains how to create, structure, and test one.
365 
366If you already know what the skill should do, start with the [directory structure](#directory-structure). If you're not sure a skill is the right tool, read [Decide what skill to create](#decide-what-skill-to-create) first.
14367 
15368<Note>
16 Skills follow the [Agent Skills specification](https://agentskills.io/specification) — see the specification for more in-depth information.
369 Skills follow the [Agent Skills specification](https://agentskills.io/specification). See the specification for more in-depth information.
17370</Note>
18371 
372## Decide what skill to create
373 
374A skill pays off when Claude does a task for you repeatedly and you want it done the same way every time. Good candidates are tasks where you find yourself correcting Claude with the same instructions, such as a report format your team uses, a review checklist, a multi-step procedure, or work that needs a reference file or a script to come out right. A skill can also teach Claude how your team uses a tool you've connected, such as which project new issues go in and which labels and template to use in your issue tracker. Write the skill once, and Claude applies it whenever a request matches the skill's description, for you and for anyone you share it with.
375 
376A skill isn't the right tool for everything:
377 
378* **A one-off task**: describe what you want in the conversation instead
379* **Live data from another service**: that's what an [MCP connector](/docs/connectors/getting-started) provides. A skill can tell Claude how to use a connector, but it can't reach the service itself
380* **Instructions for every conversation**: put those in your [personal preferences or project instructions](https://support.claude.com/en/articles/10185728-understanding-claude-s-personalization-features) rather than a skill, which loads only when a task matches
381 
382To start, write down the task in one sentence and what a good result looks like. That sentence becomes the skill's `description`, and the rest becomes the instructions. If you'd rather have Claude draft the skill with you, ask it to use the [skill-creator skill](#measure-whether-the-skill-improves-the-output), then edit what it produces.
383 
19384## Directory structure
20385 
21A skill is a directory containing at minimum a `SKILL.md` file:
22 
23```
24brand-guidelines/
25├── SKILL.md
26├── scripts/ # Optional: executable code
27├── references/ # Optional: additional documentation
28└── assets/ # Optional: templates, images, data files
29```
386A skill is a folder named after the skill. The only required file is `SKILL.md`; the other folders are optional and hold material that `SKILL.md` points Claude to. Select a file in the explorer to see what goes in it and what Claude does with it.
387 
388<PluginExplorer variant="skill">
389 <Piece id="skillmd">
390 <p>The one required file. Its frontmatter names and describes the skill, and Claude reads the <code>description</code> to decide when the skill applies. The body holds the instructions Claude follows once it does.</p>
391 <p>In this example, the skill applies Acme's brand guidelines and tells Claude where the supporting files are:</p>
392 
393 ```markdown SKILL.md theme={null}
394 ---
395 name: brand-guidelines
396 description: Apply Acme Corp brand guidelines to presentations and documents, including official colors, fonts, and logo usage.
397 ---
398 Use these guidelines whenever you produce a document or deck for Acme.
399 
400 1. Use the colors and fonts in the sections below.
401 2. For wording, follow `references/voice-and-tone.md`.
402 3. For slides, start from `assets/slide-template.md`.
403 4. Before you finish, run `python3 ${CLAUDE_SKILL_DIR}/scripts/check_contrast.py` on any color pairs you chose.
404 ```
405 </Piece>
406 
407 <Piece id="references">
408 <p>Longer background that Claude reads only when a step calls for it, so it doesn't crowd <code>SKILL.md</code>. Mention the file by path at the step where Claude needs it.</p>
409 <p>In this example, the file holds the writing rules the instructions point to in step 2:</p>
410 
411 ```markdown references/voice-and-tone.md theme={null}
412 # Voice and tone
413 - Write in the second person and the present tense.
414 - Prefer short sentences. Avoid exclamation marks.
415 - Product names are always capitalized: Acme Cloud, Acme Sync.
416 ```
417 </Piece>
418 
419 <Piece id="assets">
420 <p>Templates, images, and data files that Claude copies or fills in rather than reads for guidance.</p>
421 <p>In this example, the asset is the slide outline that step 3 tells Claude to start from:</p>
422 
423 ```markdown assets/slide-template.md theme={null}
424 # [Deck title]
425 ## Agenda
426 ## [Section 1]
427 ## [Section 2]
428 ## Next steps
429 ```
430 </Piece>
431 
432 <Piece id="scripts">
433 <p>Code that Claude runs while following the skill, for work that is more reliable as a program than as instructions. Reference it from `SKILL.md` with `${CLAUDE_SKILL_DIR}` so the path resolves wherever the skill is installed.</p>
434 <p>In this example, the script checks that a text and background color pair has enough contrast:</p>
435 
436 ```python scripts/check_contrast.py theme={null}
437 import sys
438 
439 def luminance(hex_color):
440 r, g, b = (int(hex_color[i:i+2], 16) / 255 for i in (1, 3, 5))
441 f = lambda c: c / 12.92 if c <= 0.03928 else ((c + 0.055) / 1.055) ** 2.4
442 return 0.2126 * f(r) + 0.7152 * f(g) + 0.0722 * f(b)
443 
444 fg, bg = sys.argv[1], sys.argv[2]
445 l1, l2 = sorted((luminance(fg), luminance(bg)), reverse=True)
446 ratio = (l1 + 0.05) / (l2 + 0.05)
447 print(f"{ratio:.2f}", "OK" if ratio >= 4.5 else "LOW")
448 ```
449 </Piece>
450</PluginExplorer>
30451 
31452The directory name must match the `name` field in your `SKILL.md`.
32453 
33## Creating a `SKILL.md` file
454## Create a `SKILL.md` file
34455 
35456The `SKILL.md` file must start with YAML frontmatter containing required metadata, followed by markdown instructions.
36457 
37458### Required fields
459 
460A `SKILL.md` file starts with YAML frontmatter that names and describes the skill:
38461 
39462```markdown SKILL.md theme={null}
40463---
from line 466
43466---
44467```
45468 
46**name**: Lowercase letters, numbers, and hyphens only. Maximum 64 characters. Must match the directory name.
47 
48**description**: Explains what the skill does and when to use it. Claude uses this to determine when to invoke your skill. Maximum 1,024 characters, the same limit as the [Agent Skills specification](https://agentskills.io/specification).
49 
50### Markdown body
51 
52After the frontmatter, write markdown instructions for Claude. Include:
469Both frontmatter fields are required:
470 
471| Field | Type | Description |
472| :------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
473| `name` | string | Lowercase letters, numbers, and hyphens only, up to 64 characters. Must match the skill's directory name |
474| `description` | string | What the skill does and when to use it. Claude reads this to decide when to load the skill. Up to 1,024 characters, the limit in the [Agent Skills specification](https://agentskills.io/specification) |
475 
476### Write the instructions
477 
478After the frontmatter, the rest of the file is the instructions Claude follows when the skill loads, written as ordinary text. You can add headings, lists, and bold with Markdown formatting, the lightweight markup many note-taking apps use, but plain paragraphs work too. Useful things to include:
53479 
54480* Step-by-step procedures
55481* Examples of inputs and outputs
from line 524
98524See the [assets/](assets/) folder for logo files and font downloads.
99525```
100526 
101## Adding resources
102 
103For content too detailed for `SKILL.md`, add files to your skill directory:
527## Add resources
528 
529Claude reads all of `SKILL.md` every time the skill loads, so anything long that Claude needs only some of the time is better kept in a separate file that `SKILL.md` points to. Claude then opens that file only when a step calls for it, which keeps the skill quick to load and leaves more of the conversation for your actual task. Separate files also let a skill carry things that aren't instructions at all, such as a template to fill in or a table to look values up in. Put them in folders next to `SKILL.md`:
104530 
105531* **`references/`**: Additional documentation Claude can read when needed
106532* **`assets/`**: Templates, images, lookup tables, schemas
107* **`scripts/`**: Executable code (see below)
108 
109Reference these files in `SKILL.md` so Claude knows when to load them. Keep files focused—smaller files mean less context usage.
110 
111## Adding scripts
112 
113Skills can include executable code in Python, JavaScript/Node.js, or Bash. Place scripts in the `scripts/` directory.
114 
115Claude can install packages from standard repositories (PyPI, npm) when loading skills. Declare dependencies in your frontmatter:
116 
117```markdown SKILL.md theme={null}
118---
119name: data-analysis
120description: Analyze CSV files and generate visualizations.
121dependencies: python>=3.8, pandas>=1.5.0, matplotlib
122---
533* **`scripts/`**: Executable code, which [Add scripts](#add-scripts) covers
534 
535Mention each file in `SKILL.md` at the step where Claude should use it, for example "Fill in `assets/report-template.md`", so Claude knows when to open it. Keep each file focused on one thing.
536 
537## Add scripts
538 
539A skill can include scripts that Claude runs while following it, in any language available where the skill runs: in Claude Code that's whatever is installed on your machine, and in chat on claude.ai it's what the code-execution environment provides. Put scripts in a `scripts/` folder inside the skill's own folder, next to `SKILL.md`. In a plugin, that looks like this:
540 
541```text theme={null}
542my-plugin/
543└── skills/
544 └── render-chart/
545 ├── SKILL.md
546 └── scripts/
547 └── render.py
123548```
124549 
125## Packaging your skill
126 
127To upload a skill to Claude:
128 
1291. Ensure the directory name matches your skill's `name` field
1302. Create a ZIP file containing the skill directory
131 
132**Correct structure:**
550In `SKILL.md`, write the script's path with `${CLAUDE_SKILL_DIR}`, for example `python3 ${CLAUDE_SKILL_DIR}/scripts/render.py`. Claude Code and Cowork replace `${CLAUDE_SKILL_DIR}` with the skill's folder when the skill loads. It's a placeholder in the skill text, not an environment variable. In chat on claude.ai, the skill's whole folder, scripts included, is copied into the code execution sandbox, so also keep the path readable relative to `SKILL.md`, such as `scripts/render.py`.
551 
552In Claude Code, running a script is a Bash tool call, so it needs your permission. When you test with [`claude -p`](https://code.claude.com/docs/en/headless), which can't stop to ask, allow the script on the command line, for example `--allowedTools "Bash(python3 /path/to/my-plugin/skills/render-chart/scripts/render.py *)"`, using the script's absolute path. Claude runs the script by its absolute path, and `Bash()` rules match the whole command line, so a rule that names the exact path approves only that script; a wildcard before the path would approve more than you intend.
553 
554Don't put API keys, passwords, or other credentials in a script or anywhere else in the skill: everyone you share the skill with receives its files. When a script needs to reach an outside service, have Claude use a [connector](/docs/connectors/getting-started) for that service instead, so each person signs in with their own account.
555 
556## Package your skill
557 
558You upload a skill to Claude as a ZIP file. The ZIP must contain the skill directory itself as its top level, because Claude looks for `<skill-name>/SKILL.md` inside the archive; a `SKILL.md` sitting at the root of the ZIP isn't recognized as a skill. The packaged file looks like this:
133559 
134560```
135561my-skill.zip
from line 564
138564 └── scripts/
139565```
140566 
141**Incorrect structure:**
142 
143```
144my-skill.zip
145├── SKILL.md # files directly in ZIP root
146└── scripts/
147```
148 
149## Testing your skill
567<Steps>
568 <Step title="Check the directory name">
569 Make sure the directory name matches the `name` field in `SKILL.md`.
570 </Step>
571 
572 <Step title="Zip the directory from its parent folder">
573 Where the `zip` command is available, such as on macOS and Linux, run it from the folder that contains the skill directory, so the directory becomes the top level of the archive:
574 
575 ```bash theme={null}
576 zip -r my-skill.zip my-skill/
577 ```
578 
579 If you use another tool to create the ZIP, compress the skill folder itself rather than the files inside it.
580 </Step>
581 
582 <Step title="Confirm the structure">
583 List the archive and check that every entry starts with `my-skill/`:
584 
585 ```bash theme={null}
586 unzip -l my-skill.zip
587 ```
588 
589 If `SKILL.md` appears without the `my-skill/` prefix, you zipped the contents instead of the folder; zip again from the parent folder.
590 </Step>
591</Steps>
592 
593To check the skill's contents rather than the archive shape, [validate it before uploading](#before-uploading) with `skills-ref validate` or `claude plugin validate`, or ask Claude to review the folder against the [Agent Skills specification](https://agentskills.io/specification).
594 
595## Test your skill
596 
597Test the skill's files before you upload it, try it in Claude Code if you have it, confirm that Claude loads it after you upload, and then measure whether it improves Claude's output.
150598 
151599### Before uploading
152600 
1531. Review `SKILL.md` for clarity
1542. Verify the description accurately reflects when Claude should use the skill
1553. Check that all referenced files exist
1564. Validate using `skills-ref validate ./my-skill` ([validation tool](https://github.com/agentskills/agentskills/tree/main/skills-ref))
601Before you upload the ZIP, check the skill's files:
602 
603<Steps>
604 <Step title="Review SKILL.md">
605 Review `SKILL.md` for clarity.
606 </Step>
607 
608 <Step title="Check the description">
609 Verify the description accurately reflects when Claude should use the skill.
610 </Step>
611 
612 <Step title="Check referenced files">
613 Check that all referenced files exist.
614 </Step>
615 
616 <Step title="Validate the skill">
617 Check the frontmatter against the Agent Skills specification with the [`skills-ref` reference tool](https://github.com/agentskills/agentskills/tree/main/skills-ref). It isn't preinstalled: clone that repository and install it into a Python virtual environment as its README describes, which puts `skills-ref` on your `PATH` while the environment is active. Then, from the folder that contains the skill directory, run:
618 
619 ```bash theme={null}
620 skills-ref validate ./my-skill
621 ```
622 
623 A skill that passes prints `Valid skill: ./my-skill`. Otherwise the command lists each problem, such as a `name` that doesn't match the directory or a frontmatter field the specification doesn't define.
624 
625 If the skill is inside a plugin folder, running `claude plugin validate ./my-plugin` in your terminal also parses each skill's frontmatter: it reports a `SKILL.md` whose frontmatter doesn't parse, and prints `✔ Validation passed` when the plugin passes.
626 </Step>
627</Steps>
628 
629### In Claude Code
630 
631If you use [Claude Code](https://code.claude.com/docs/en/overview), you can try the skill from your terminal without uploading it. Copy the skill folder into `~/.claude/skills/`, so the file sits at `~/.claude/skills/my-skill/SKILL.md`, then start `claude` in any project. Describe a task the skill's `description` covers and check that Claude uses it, or type `/my-skill` to run it directly. If Claude doesn't pick the skill up on its own, revise the description. [Extend Claude with skills](https://code.claude.com/docs/en/skills) covers the other places Claude Code loads skills from, including a project's `.claude/skills/` folder and plugins.
157632 
158633### After uploading
159634 
1601. Enable the skill in **Customize > Skills**
1612. Try prompts that should trigger it
1623. Review Claude's thinking to confirm it's loading the skill
1634. Iterate on the description if Claude isn't using it when expected
635After you upload, confirm that Claude loads the skill when it should:
636 
637<Steps>
638 <Step title="Turn the skill on">
639 Go to [**Customize > Skills**](https://claude.ai/customize/skills) in claude.ai or the desktop app and turn the skill on.
640 </Step>
641 
642 <Step title="Try prompts that should trigger it">
643 Send prompts that should trigger the skill, and review Claude's thinking to confirm it's loading the skill.
644 </Step>
645 
646 <Step title="Iterate on the description">
647 Iterate on the description if Claude isn't using it when expected.
648 </Step>
649</Steps>
650 
651### Measure whether the skill improves the output
652 
653Trying a few prompts tells you the skill loads, not whether Claude's answers are better with it. To check that, use [`skill-creator`](https://github.com/anthropics/skills/tree/main/skills/skill-creator), a skill from Anthropic that runs your skill on test prompts you agree on, shows you the results, and helps you revise it. On claude.ai, turn it on under [**Customize > Skills**](https://claude.ai/customize/skills), where it's listed as from Anthropic, then ask Claude to evaluate your skill.
654 
655`skill-creator` does more in Cowork and Claude Code than in chat:
656 
657* **Chat**: `skill-creator` works through the test prompts one at a time and shows you the results in the conversation
658* **Cowork and Claude Code**: it also runs the same prompts without the skill as a baseline, runs everything in parallel, and adds pass rates, timing, and token counts so you can compare the two. In Claude Code you install it as a plugin, as [Run evals with skill-creator](https://code.claude.com/docs/en/skills#run-evals-with-skill-creator) describes
659 
660If the skill is part of a plugin, you can also test the whole plugin from the Claude Code command line with [`claude plugin eval`](https://code.claude.com/docs/en/plugin-evals), which grades eval cases you write and compares against a run without the plugin.
164661 
165662## Best practices
166663 
167**Keep it focused**: Create separate skills for different workflows. Multiple focused skills compose better than one large skill.
168 
169**Write clear descriptions**: Be specific about when the skill applies. Include keywords that help Claude identify relevant tasks.
170 
171**Start simple**: Begin with markdown instructions before adding scripts.
172 
173**Use examples**: Include example inputs and outputs to help Claude understand what success looks like.
174 
175**Test incrementally**: Test after each significant change.
176 
177**Leverage composability**: Claude can use multiple skills together automatically.
178 
179## Security considerations
180 
181* Don't hardcode sensitive information (API keys, passwords)
182* Review any downloaded skills before enabling them
183* Use MCP connections for external service access
664Follow these practices when you write a skill:
665 
666* **Keep it focused**: create separate skills for different workflows. Several focused skills combine better than one large skill, and Claude can use more than one in a conversation
667* **Write a specific description**: say when the skill applies and include the words a request for that task would use. The description is the only part Claude reads before deciding to load the skill
668* **Start with instructions**: begin with Markdown instructions and add scripts only when a step needs code
669* **Show the output you expect**: include example inputs and outputs so Claude can match them
670* **Test after each change**: run the skill on a real request after each significant edit, as [Test your skill](#test-your-skill) describes
671 
672For more, the Agent Skills site covers [best practices for skill creation](https://agentskills.io/skill-creation/best-practices) and [writing descriptions that trigger reliably](https://agentskills.io/skill-creation/optimizing-descriptions) in depth.
184673 
185674## Example skills
186675 
187See [github.com/anthropics/skills](https://github.com/anthropics/skills/tree/main/skills) for example skills you can use as templates.
188 
189## Related topics
190 
191<Columns cols={2}>
192 <Card title="Skills in Claude Code" icon="terminal" href="https://code.claude.com/docs/en/skills">
193 Create and test skills from the Claude Code CLI, including the `/skills` manager.
194 </Card>
195 
196 <Card title="Distribute as a plugin" icon="puzzle-piece" href="/docs/plugins/submit">
197 Package your skill for the plugin directory.
198 </Card>
199</Columns>
676Anthropic's [skills repository](https://github.com/anthropics/skills/tree/main/skills) has working skills you can read and copy. These four cover the common shapes, from instructions only to instructions with reference files and scripts:
677 
678* **[brand-guidelines](https://github.com/anthropics/skills/tree/main/skills/brand-guidelines)**: a single `SKILL.md` with no scripts or reference files. A good model for a skill that is only instructions, such as a style or formatting rule
679* **[internal-comms](https://github.com/anthropics/skills/tree/main/skills/internal-comms)**: instructions plus an `examples/` folder of sample documents that `SKILL.md` tells Claude to consult, the pattern from [Add resources](#add-resources)
680* **[pdf](https://github.com/anthropics/skills/tree/main/skills/pdf)**: instructions, two reference files for less common tasks, and a `scripts/` folder Claude runs to fill forms and extract tables, the pattern from [Add scripts](#add-scripts)
681* **[skill-creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator)**: the skill that helps you write and test other skills, described in [Measure whether the skill improves the output](#measure-whether-the-skill-improves-the-output)
682 
683Copy a skill's structure rather than its contents: keep the folder layout and frontmatter, and replace the instructions with your own.
684 
685## Share or package your skill
686 
687After your skill works, you can give it to other people on its own or as part of a plugin. People you share it with should be able to read what it does, so keep the instructions and scripts plain enough to review.
688 
689* **Share or publish one skill**: on Team and Enterprise plans, open the skill from **Customize > Skills** and use the same **Share** and **Publish to org** controls that a plugin has. They work the way [sharing a plugin with specific people](/docs/plugins/share#share-a-plugin-with-specific-people) and [publishing a plugin to your organization](/docs/plugins/share#publish-a-plugin-to-your-organization) describe
690* **Package skills and connectors together**: when you want several skills, or a skill plus the connector it uses, installed together, [build a plugin](/docs/plugins/build) that contains them
691 
692## Next steps
693 
694* [Skills in Claude Code](https://code.claude.com/docs/en/skills): create and test skills from the Claude Code CLI, including the `/skills` manager
695* [Plugin structure and testing](/docs/plugins/build): package your skill as a plugin so other people can install it
696* [Submit your plugin](/docs/plugins/submit): submit the plugin to the directory, where Anthropic reviews it before it's listed
200697 

skills/overview Changed · +54 / -34 lines

## Understand how skills work ## Find, turn on, and use skills ## Compare skills with other features ## Use skills beyond Claude ## Next steps ## Availability ## How skills work ## Skills vs. other features ## Open standard ## Related topics

from line 1
11# Skills overview
22 
3> Extend Claude's capabilities with specialized instructions and workflows
3> Find, turn on, and use skills: directories of instructions, scripts, and resources that Claude loads to handle specific tasks
44 
55Skills are directories containing instructions, scripts, and resources that Claude dynamically loads to handle specific tasks. Each skill has a `SKILL.md` file that defines when it should be activated and what instructions Claude should follow.
66 
7## Availability
7This page is for people who want to find, turn on, and use skills in Claude.
88 
9Skills are available for users on Pro, Max, Team, and Enterprise plans. The Skills feature requires code execution to be enabled.
9<Note>
10 * Skills are available on Pro, Max, Team, and Enterprise plans. They run in Claude's code sandbox, so **Code execution and file creation** must be on: turn it on under [**Settings > Capabilities**](https://claude.ai/settings/capabilities), or on Team and Enterprise plans ask an Owner to turn it on under **Organization settings > Capabilities**
11 * If you want to write a skill of your own, see [Create custom skills](/docs/skills/how-to)
12</Note>
1013 
11## How skills work
14For the steps, go to [Find, turn on, and use skills](#find-turn-on-and-use-skills).
1215 
13Skills use progressive disclosure to manage context efficiently:
16## Understand how skills work
1417 
151. **Metadata loading**: Claude reads skill names and descriptions at startup (\~100 tokens each)
162. **Activation**: When a task matches a skill's description, Claude loads the full `SKILL.md` content
173. **Resource loading**: Additional files (scripts, references) are loaded only when needed
18Claude doesn't read every skill in full at the start of a conversation. It works through three stages:
1819 
19This approach prevents context window overload while providing specialized capabilities on demand.
20* **Knows what's available**: Claude sees each skill's name and one-line description
21* **Loads the one that fits**: when your request matches a description, Claude reads that skill's `SKILL.md` instructions
22* **Opens extra files only when needed**: if the instructions point to scripts or reference files, Claude opens them at that point
2023 
21## Types of skills
24A skill's description matters because it's the only part Claude sees before deciding to use the skill.
2225 
23* **Anthropic skills**: Pre-built skills for document creation (Excel, Word, PowerPoint, PDF) that activate automatically when relevant.
24* **Partner skills**: Skills from partners like Notion, Figma, and Atlassian designed for seamless MCP connector integration.
25* **Organization-provisioned skills**: Skills deployed organization-wide by Team and Enterprise administrators.
26* **Custom skills**: Skills you create for specialized workflows—generating emails, applying brand guidelines, integrating with tools like JIRA or Linear, and more!
26## Find, turn on, and use skills
2727 
28## Skills vs. other features
28All of your skills are listed at [**Customize > Skills**](https://claude.ai/customize/skills) in claude.ai and the desktop app, including skills that came inside a plugin.
2929 
30| Feature | Purpose |
31| -------------------------------- | --------------------------------------------------------------------------------- |
32| **Skills** | Task-specific procedures that load dynamically |
33| **[Plugins](/docs/plugins/overview)** | Shareable packages that bundle skills, connectors, slash commands, and sub-agents |
34| **Projects** | Static background knowledge always loaded in specific chats |
35| **MCP** | Connects Claude to external services |
36| **Custom Instructions** | Broad preferences applied to all conversations |
30<Steps>
31 <Step title="Open Customize > Skills">
32 The **Your skills** tab lists the skills you have, grouped by where they came from: **Created by you**, **From your organization**, **Shared with you**, and **From Anthropic & Partners**. The **Discover** tab lists skills you can add.
33 </Step>
3734 
38## Open standard
35 <Step title="Turn a skill on">
36 Select **Turn on** on the skill's row, or open the skill and use the switch at the top of its page. A skill's instructions and any scripts it carries run as part of your conversation, and skills someone shares with you or that you upload yourself aren't reviewed by Anthropic, so open the skill and read its `SKILL.md` and files before you turn it on.
37 </Step>
3938 
40Skills follow the [Agent Skills specification](https://agentskills.io/specification), a platform-agnostic standard. Skills you create can work across any platform adopting the standard.
39 <Step title="Use it in a conversation">
40 Describe your task, and Claude loads a skill that's turned on when the task matches the skill's description. To pick one yourself, type `/` in the message box and select the skill.
41 </Step>
42</Steps>
4143 
42See [Creating custom skills](/docs/skills/how-to) to learn how to build your own, or bundle skills into [plugins](/docs/plugins/overview) to share them with your team.
44A plugin's skills appear on **Your skills** too, labeled with the plugin's name. They turn on and off with the plugin, which you manage from [**Customize > Plugins**](/docs/plugins/overview#manage-installed-plugins).
4345 
44## Related topics
46On Team and Enterprise plans, a skill's page also shows **Adoption**, **Activity**, and **You** figures for how much your organization and you have used it. [How a plugin is used in your organization](/docs/plugins/overview#track-plugin-usage-in-your-organization) explains each one.
4547 
46<Columns cols={2}>
47 <Card title="Skills in Claude Code" icon="terminal" href="https://code.claude.com/docs/en/skills">
48 Create, install, and invoke skills from the Claude Code CLI.
49 </Card>
48## Types of skills
5049 
51 <Card title="Plugins" icon="puzzle-piece" href="/docs/plugins/overview">
52 Bundle skills with connectors and commands.
53 </Card>
54</Columns>
50The skills available to you come from several sources:
51 
52* **Anthropic skills**: pre-built skills for creating Excel, Word, PowerPoint, and PDF documents that activate automatically when relevant
53* **Partner skills**: skills from Anthropic's partners, built to work with their MCP connectors
54* **Organization-provisioned skills**: skills that an Owner on a Team or Enterprise plan deploys organization-wide
55* **Custom skills**: skills you create for specialized workflows, such as generating emails, applying brand guidelines, and integrating with your issue tracker
56 
57## Compare skills with other features
58 
59| Feature | Purpose |
60| -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
61| **Skills** | Task-specific procedures that Claude loads when a request matches |
62| **[Plugins](/docs/plugins/overview)** | Packages that contain several skills together with connectors, commands, and agents, so that you add them as one unit |
63| **[Projects](https://support.claude.com/en/articles/9517075-what-are-projects)** | Background knowledge that's always loaded in that project's chats |
64| **[MCP connectors](/docs/connectors/getting-started)** | Connections that let Claude reach external services and data |
65 
66## Use skills beyond Claude
67 
68Skills follow the [Agent Skills specification](https://agentskills.io/specification), an open standard, so a skill you write for Claude also works in other tools that adopt the specification.
69 
70## Next steps
71 
72* [Create custom skills](/docs/skills/how-to): create, structure, and test your own skill
73* [Plugins](/docs/plugins/overview): add a plugin that bundles skills with connectors and commands
74* [Skills in Claude Code](https://code.claude.com/docs/en/skills): create, install, and invoke skills from the Claude Code CLI
5575 

third-party/claude-desktop/bootstrap Changed · +9 / -1 lines

from line 35
3535 
3636### Availability
3737 
38The cached response is held **in memory only**; there is no on-disk fallback to a previous session's response. If your bootstrap server is unreachable when Claude Desktop launches, the user stays in the degraded sign-in state until the server recovers. A failed refetch *during* a running session keeps the in-memory response and retries, so an outage that starts mid-session does not disrupt active users until they relaunch.
38The full response is held **in memory only**. If your bootstrap server is unreachable when Claude Desktop launches, the user stays in the degraded sign-in state until the server recovers. A failed refetch *during* a running session keeps the in-memory response and retries, so an outage that starts mid-session does not disrupt active users until they relaunch.
39 
40Each device also keeps a small record from the last response it applied, and applies the settings in that record at the next launch until your server answers. Signing out of Claude Desktop deletes the record. It holds only these values, when the response sets them:
41 
42* `deploymentOrganizationUuid` and `deploymentDisplayName`
43* `disableEssentialTelemetry`, `disableNonessentialTelemetry`, `disableDeploymentModeChooser`, `microsoftAuthBroker`, and `modelCatalogUrl`
44* Any restriction the response turns on, such as `isLocalDevMcpEnabled` set to `false`
45 
46The record holds no credentials, inference provider settings, MCP servers, or other lists.
3947 
4048Run the endpoint across multiple replicas or regions behind a load balancer. Do not rely on response caching for availability: responses are per-user and carry credentials (see the `Cache-Control: no-store` guidance under [Server responsibilities](#server-responsibilities)). If your configuration data lives in a database, a read replica of that store improves availability without caching responses.
4149 

third-party/claude-desktop/configuration Changed · +5 / -5 lines

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

from line 326
326326 
327327 **Extended context** (`supports1m`) is a capability assertion you make about your deployment; only set it for models you've confirmed support the 1M-token window:
328328 
329 ```json theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
329 ```json theme={null}
330330 [{"name": "claude-sonnet-5", "supports1m": true}, "claude-opus-4-8"]
331331 ```
332332 
from line 334
334334 
335335 **Display label** (`labelOverride`) is for IDs the picker can't derive a friendly name from (Bedrock ARNs, gateway routing aliases). Display-only; `name` is still what the app sends:
336336 
337 ```json theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
337 ```json theme={null}
338338 [{"name": "arn:aws:bedrock:us-east-1:123:application-inference-profile/abc", "labelOverride": "Claude Opus (Prod)"}]
339339 ```
340340 
341341 **Tier mapping** (`anthropicFamilyTier`) tells the app which Claude tier (`haiku`/`sonnet`/`opus`/`fable`/`mythos`) an entry stands in for, so bare tier aliases (e.g. in Code sessions) resolve to your model. `isFamilyDefault: true` picks the winner when several entries share a tier:
342342 
343 ```json theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
343 ```json theme={null}
344344 [{"name": "us.anthropic.claude-opus-4-8", "anthropicFamilyTier": "opus"}]
345345 ```
346346 
from line 374
374374 <Accordion title="inferenceModelPricing details">
375375 Each row replaces Anthropic list price for one model in the Usage page's estimate, in USD per million tokens (`inputPerMtok`, `outputPerMtok`, `cacheReadPerMtok`, `cacheWritePerMtok`, all four required; `cacheWritePerMtok` prices both 5-minute and 1-hour cache writes); rows apply only while `inferenceModelPricingEnabled` is `true` and do not turn the estimate on by themselves. Mirrors Claude Code's managed `modelPricing.overrides`, and `name` is matched the same way: a built-in Claude model ID (e.g. `claude-sonnet-4-6`, or its Bedrock, Vertex, or Foundry ID) covers every dated and provider spelling of that model; any other value (a gateway alias, an inference-profile ARN) matches that exact ID only (case-insensitive) and wins over a built-in row. An ID Claude Code cannot map to a Claude model at all gets no estimate until a row here prices it. `inferenceModelPricingMultiplier` still applies on top of a row.
376376 
377 ```json theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
377 ```json theme={null}
378378 {"inferenceModelPricingEnabled": true, "inferenceModelPricingMultiplier": 0.9, "inferenceModelPricing": [{"name": "claude-sonnet-4-6", "inputPerMtok": 2.4, "outputPerMtok": 12, "cacheReadPerMtok": 0.24, "cacheWritePerMtok": 3}]}
379379 ```
380380 
from line 1079
10791079 <Accordion title="orgPluginSettings details">
10801080 Locks per-tool permissions on MCP servers provided by any installed plugin — from the org-plugins directory or a plugin marketplace, remote or run locally — one entry per server name (compared case-insensitively):
10811081 
1082 ```json theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
1082 ```json theme={null}
10831083 [{"serverName": "internal-search", "tools": [{"toolName": "delete_document", "permission": "blocked"}]}]
10841084 ```
10851085 
from line 1089
10891089 
10901090 For a plugin server that Claude Code launches or connects to itself (a marketplace plugin's), the permissions travel on Claude Code's managed-settings channel: another Claude Code [managed-settings source](https://claude.com/docs/third-party/claude-desktop/code#interaction-with-claude-code%E2%80%99s-own-managed-settings) on the device replaces them unless that source sets `parentSettingsBehavior` to `"merge"`. `blocked` on a server the app connects to itself holds either way.
10911091 
1092 | Field | Type
1092 | Field | Type | Default | Description |
1093 | ------------------ | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------- |
1094 | `serverName` | `string` | — | Name of the plugin-de

third-party/claude-desktop/gateway Changed · +4 / -4 lines

from line 298
298298 
299299### Models
300300 
301When `inferenceModels` is unset, Claude Desktop on 3P populates the model picker from your gateway's `GET /v1/models` response. Auto-discovery shows only models whose IDs are recognizably Claude; if your gateway advertises models under opaque aliases, set `inferenceModels` explicitly. Set [`inferenceModels`](/docs/third-party/claude-desktop/configuration#models) to override discovery with an explicit list — the picker will show exactly the entries you provide. Use the model IDs your gateway expects (for example `bedrock/us.anthropic.claude-opus-5` for a LiteLLM-style routing prefix).
301When `inferenceModels` is unset, Claude Desktop on 3P populates the model picker from your gateway's `GET /v1/models` response. Auto-discovery shows only models whose IDs are recognizably Claude. Set [`inferenceModels`](/docs/third-party/claude-desktop/configuration#models) to replace discovery with an explicit list. Use the model IDs your gateway expects (for example `bedrock/us.anthropic.claude-opus-5` for a LiteLLM-style routing prefix).
302302 
303If your gateway serves a Claude model under an opaque routing alias, it can mark the model as Claude by returning an `anthropic_family_tier` field (a Claude tier name such as `sonnet` or `opus`) on that model object in its `/v1/models` response, optionally with `is_family_default: true` when several models map to the same tier. Models marked this way pass the auto-discovery filter. The app also reads other optional fields on each model object. `display_name` sets the picker label when the app cannot derive one from the model ID, as with an opaque alias. `description` adds a one-line description beneath the label (Claude Desktop 1.49585.0 or later). `supports_1m: true`, or a `max_input_tokens` value of 1,000,000 or more, marks a discovered model as supporting the 1M-token context window, as `supports1m` does on an `inferenceModels` entry.
303Your gateway can mark which Claude tier a model serves by returning an `anthropic_family_tier` field (a tier name such as `sonnet` or `opus`) on that model object in its `/v1/models` response, optionally with `is_family_default: true` when several models map to the same tier. The app uses the marked model when it needs that tier, for example to resolve a bare `sonnet` alias. The app also reads other optional fields on each model object. `display_name` sets the picker label when the app cannot derive one from the model ID. `description` adds a one-line description beneath the label (Claude Desktop 1.49585.0 or later). `supports_1m: true`, or a `max_input_tokens` value of 1,000,000 or more, marks a discovered model as supporting the 1M-token context window, as `supports1m` does on an `inferenceModels` entry.
304304 
305305If your gateway does not implement `GET /v1/models`, give every `inferenceModels` entry the full model ID your gateway accepts; bare tier aliases such as `sonnet` rely on discovery to resolve. When every entry is a full model ID, the app skips the `/v1/models` call automatically. A list that contains a bare alias keeps discovery on, so for a gateway without the endpoint, replace the alias with the full model ID; a bare alias cannot be resolved without discovery. On earlier app versions that do not skip the call automatically, also set [`modelDiscoveryEnabled`](/docs/third-party/claude-desktop/configuration#modeldiscoveryenabled) to `false` to avoid the discovery attempt. The cost of leaving discovery on without the endpoint depends on how the gateway fails: an error response makes the app fall back to the `inferenceModels` list immediately, while an endpoint that accepts the request and hangs delays the model list by up to 10 seconds at launch.
306306 
from line 338
338338 Google Workspace can be used as the identity provider, but in the default `id_token` mode Google does not issue a fresh ID token on background refresh, so users are prompted to sign in again roughly once an hour. Setting `bearerTokenType` to `access_token` avoids this. Entra ID and Okta are not affected in either mode.
339339</Note>
340340 
341**Model picker is empty or missing models.** Auto-discovery filters out model IDs that are not recognizably Claude, so models your gateway serves under opaque aliases appear only if the gateway marks them with `anthropic_family_tier` in its `/v1/models` response or you list them in `inferenceModels` (see [Models](#models)). When `/v1/models` is unreachable or returns an error, the picker falls back to the `inferenceModels` list; if that list is empty, so is the picker.
341**Model picker is empty or missing models.** Check your gateway's `GET /v1/models` response and your `inferenceModels` list (see [Models](#models)). When `/v1/models` is unreachable or returns an error, the picker falls back to the `inferenceModels` list; if that list is empty, so is the picker.
342342 
343343**The 1M context window entry does not appear in the picker.** `supports1m` takes effect only when the entry's `name` matches the model ID the picker uses. Setting it on a bare alias (for example `sonnet`) while discovery returns full model IDs produces no match. Set `supports1m` on an entry whose `name` is the exact ID your gateway's `/v1/models` endpoint returns.
344344 

claude-science/corporate-networks Changed · +1 / -1 lines

from line 91
9191 
9292### Mirror traffic and your other network controls
9393 
94Configuring a mirror removes the public package hosts from the sandbox's network allowlist and admits the mirror host in their place, so a misconfigured mirror fails with an error that names the mirror rather than falling back to the public hosts. To keep the public hosts reachable alongside the mirror, re-add them under **Settings** > **Network** (`pypi.org`, `*.pypi.org`, `files.pythonhosted.org` for pip, and `conda.anaconda.org`, `repo.anaconda.com`, `anaconda.org`, `*.anaconda.org` for conda). When the organization manages the network allowlist, **Network** settings are read-only, so a member can't re-add them, and the hosts a mirror replaces stay removed even if they are switched on in the organization's list.
94Configuring a mirror removes the public package hosts from the sandbox's network allowlist and admits the mirror host in their place, so a misconfigured mirror fails with an error that names the mirror rather than falling back to the public hosts. To keep the public hosts reachable alongside the mirror, re-add them under **Settings > Network** (`pypi.org` and `files.pythonhosted.org` for pip, and `conda.anaconda.org`, `repo.anaconda.com`, and `anaconda.org` for conda). **Network** settings accept exact hostnames only. To allow subdomains as well, add `*.pypi.org` and `*.anaconda.org` to `[sandbox.network] allowed_domains` in `config.toml`. When the organization manages the network allowlist, **Network** settings are read-only, so a member can't re-add them, and the hosts a mirror replaces stay removed even if they are switched on in the organization's list.
9595 
9696Environment builds connect to the mirror host directly, never through your outbound proxy: the workstation needs a direct route (typically your VPN or internal network), any workstation firewall must allow the mirror host as a direct destination, and a proxy allowlist entry alone does not reach it. A package failure that names the mirror on a proxy-only network therefore means the mirror is unreachable directly, and a SaaS repository such as `yourorg.jfrog.io` works only if the workstation can reach it directly, so on a proxy-only network host the mirror inside your network. On a proxy-configured machine the **Check** button and a real build can take different paths, so treat a test environment build as the authoritative signal (a known limitation).
9797 

claude-science/network-requirements Changed · +1 / -1 lines

from line 40
4040 
4141## Analysis sandbox domains
4242 
43When Claude runs code, its network access passes through a local filtering proxy that allows only the domains on the sandbox's built-in allowlist, grouped by purpose below. By default, each member manages the list on their own computer. Members can turn off any group except package management, during onboarding or under **Settings** > **Network**, and add allowed domains of their own in Settings. An administrator can also use the per-device configuration file, whose `[sandbox.network]` keys add allowed or denied domains, or disable sandbox networking entirely.
43When Claude runs code, its network access passes through a local filtering proxy that allows only the domains on the sandbox's built-in allowlist, grouped by purpose below. By default, each member manages the list on their own computer. Members can turn off any group except package management, during onboarding or under **Settings > Network**, and add allowed domains of their own in Settings, one at a time or by pasting a list. An administrator can also use the per-device configuration file, whose `[sandbox.network]` keys add allowed or denied domains, or disable sandbox networking entirely.
4444 
4545An organization can instead manage the list for every member from **Organization settings** > **Claude Science**, with one switch per domain and custom domains of its own. Members then see their **Network** settings read-only, and the domains a member or a configuration file added are set aside while the organization manages the list. See [Network allowlist](/docs/claude-science/admin-controls#network-allowlist) for what the organization's list covers and how changes reach members.
4646 

claude-tag/admins/connections/custom Changed · +1 / -1 lines

from line 101
101101 
102102## Add a custom MCP server
103103 
104The server must be a remote endpoint that Claude can reach at a URL over the internet. An MCP server that runs on a person's machine over stdio, including one packaged as a [desktop extension](/docs/connectors/custom/desktop-extensions), can't be connected, because [sessions](/docs/claude-tag/concepts/glossary#session) run in a cloud sandbox that Anthropic hosts, not on anyone's machine. Host the server as a remote endpoint first, then follow the steps below.
104The server must be a remote endpoint that Claude can reach at a URL over the internet. An MCP server that runs on a person's machine over stdio, including one packaged as a [desktop extension](/docs/connectors/custom/add-unlisted#install-a-local-connector-in-the-desktop-app), can't be connected, because [sessions](/docs/claude-tag/concepts/glossary#session) run in a cloud sandbox that Anthropic hosts, not on anyone's machine. Host the server as a remote endpoint first, then follow the steps below.
105105 
106106To give Claude an MCP server (one you run, or a vendor's hosted MCP endpoint), the pattern is a plugin plus a credential:
107107 

claude-tag/admins/skills-repo Changed · +2 / -2 lines

from line 18
1818 </Step>
1919 
2020 <Step title="Register the repository as a plugin marketplace">
21 For a github.com repository, the GitHub connector must be enabled for your organization. On the **Plugins** page at [`claude.ai/admin-settings/plugins`](https://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**.
21 For a github.com repository, the GitHub connector must be enabled for your organization. In [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory), click **Add** and choose **Sync from GitHub**. Select the repository, leave **Sync automatically** on (the default), and click **Create**.
2222 
2323 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](#upload-a-plugin-as-a-zip-file) instead.
2424 </Step>
from line 68
6868 
6969## Upload a plugin as a zip file
7070 
71To upload instead, on the **Plugins** page at [`claude.ai/admin-settings/plugins`](https://claude.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](https://code.claude.com/docs/en/plugins), laid out in one of these ways:
71To upload instead, in [**Organization settings > Plugins & skills**](https://claude.ai/admin-settings/skills?tab=inventory), click **Add**, choose **Upload a plugin**, and upload a `.zip` or `.plugin` archive of up to 200 MB. The archive has to be a [Claude Code plugin](https://code.claude.com/docs/en/plugins), laid out in one of these ways:
7272 
7373* A `.claude-plugin/plugin.json` manifest at the archive root, with each skill in its own folder at `skills/<name>/SKILL.md`
7474* The same layout inside a single top-level folder

claude-tag/concepts/agent-identity Changed · +2 / -2 lines

from line 100
100100 
101101### Personal connectors in a channel
102102 
103A channel session works with the channel's Access bundles, so the [connectors on your own claude.ai account](/docs/connectors/overview) are not part of it. Personal connectors in channels is available to a limited number of organizations. Where it is available and a task you hand Claude needs something only your connectors can reach, Claude can use your connector for that part of the work, and it asks you before it starts. The work runs with your permissions and is recorded under your name. Requests other people make to Claude in the task's thread run with the channel's own access, not with your connectors. Claude is designed to take direction from you, treating what other people post in the thread as information for the task rather than as instructions.
103A channel session works with the channel's Access bundles, so the [connectors on your own claude.ai account](/docs/connectors/getting-started) are not part of it. Personal connectors in channels is available to a limited number of organizations. Where it is available and a task you hand Claude needs something only your connectors can reach, Claude can use your connector for that part of the work, and it asks you before it starts. The work runs with your permissions and is recorded under your name. Requests other people make to Claude in the task's thread run with the channel's own access, not with your connectors. Claude is designed to take direction from you, treating what other people post in the thread as information for the task rather than as instructions.
104104 
105105[Personal connectors in channels](/docs/claude-tag/concepts/personal-connectors) covers how you approve connector use, when Claude holds a result for your review before posting, what other people in the channel see, and how to stop a task.
106106 
from line 123
123123 
124124Three of those differences are worth spelling out.
125125 
126* **Connectors.** The [connectors on your account](/docs/connectors/overview) are available, including MCP servers you've added.
126* **Connectors.** The [connectors on your account](/docs/connectors/getting-started) are available, including MCP servers you've added.
127127* **Billing.** Usage bills to your seat rather than the organization's service key.
128128* **Channel-side configuration.** It doesn't follow you in; the agent's connections and repository grants don't apply in DMs.
129129 

claude-tag/concepts/personal-connectors Changed · +2 / -2 lines

from line 26
2626* **Claude starts work on its own.** [Routines](/docs/claude-tag/users/proactivity) and other work Claude starts on its own in a channel use the channel's connections, never your connectors.
2727* **You ask in a direct message (DM).** Your connectors apply on their own, because a DM runs on [your own claude.ai account](/docs/claude-tag/concepts/agent-identity#direct-message-channels).
2828 
29To add or remove connectors on your account, open the **Customize > Connectors** page on claude.ai; see [connectors on claude.ai](/docs/connectors/overview) for setup.
29To add or remove connectors on your account, open the **Customize > Connectors** page on claude.ai; see [connectors on claude.ai](/docs/connectors/getting-started) for setup.
3030 
3131## Control connector use
3232 
from line 84
8484## Related resources
8585 
8686* [How agent identity works](/docs/claude-tag/concepts/agent-identity): whose identity and access Claude uses in channels and DMs
87* [Connectors](/docs/connectors/overview): set up and manage connectors on your claude.ai account
87* [Connectors](/docs/connectors/getting-started): set up and manage connectors on your claude.ai account
8888* [Get started](/docs/claude-tag/users/getting-started): hand Claude your first task in a channel
8989 

claude-tag/concepts/settings-map Changed · +1 / -1 lines

from line 53
5353 
5454Connectors you add to your own claude.ai account, under **Customize > Connectors**, apply in DMs with Claude, because [a DM runs on your own account](/docs/claude-tag/concepts/agent-identity#direct-message-channels). A channel session uses the connections an admin attached to it. In organizations where [personal connectors in channels](/docs/claude-tag/concepts/personal-connectors) is available, Claude can also use your personal connectors there for your own tasks, after you allow it. Slack has no connector settings of its own.
5555 
56See [connectors on claude.ai](/docs/connectors/overview) for setting one up, and [the troubleshooting entry](/docs/claude-tag/users/troubleshooting#a-connector-works-on-claude-ai-but-not-in-slack) if a connector you use on claude.ai is missing in Slack.
56See [connectors on claude.ai](/docs/connectors/getting-started) for setting one up, and [the troubleshooting entry](/docs/claude-tag/users/troubleshooting#a-connector-works-on-claude-ai-but-not-in-slack) if a connector you use on claude.ai is missing in Slack.
5757 
5858## Claude Tag versus Claude Managed Agents
5959 

claude-tag/users/getting-started Changed · +1 / -1 lines

from line 14
1414 
1515* **Channel** for shared team work. The work happens in the open, so anything Claude does in the thread, including its checklist and results, is visible to everyone in the channel, and anyone can reply to steer the work. An admin sets what Claude can reach in each channel, and everyone who asks there gets the same access. By default you don't need a Claude account to tag Claude in a channel; the work bills to the organization. An admin can [restrict who can invoke Claude](/docs/claude-tag/admins/restrict-access#restrict-who-can-use-claude).
1616 * Example: `@Claude where are we on the launch checklist? Pull what's still open from this channel and #design-review.`
17* **DM** for personal tasks. A DM runs on your own claude.ai account with [your own connectors](/docs/connectors/overview). Every DM message reaches Claude without an @-mention. You can also DM Claude questions about getting started, like how to word a task or what to try first. DMs are one-to-one only; group DMs aren't supported.
17* **DM** for personal tasks. A DM runs on your own claude.ai account with [your own connectors](/docs/connectors/getting-started). Every DM message reaches Claude without an @-mention. You can also DM Claude questions about getting started, like how to word a task or what to try first. DMs are one-to-one only; group DMs aren't supported.
1818 * Example: `Pull my afternoon meetings from my calendar and draft a one-line prep note for each.`
1919 
2020See [team channels and personal DMs](/docs/claude-tag/concepts/how-it-works#team-channels-and-personal-dms) for the full comparison.

claude-tag/users/troubleshooting Changed · +1 / -1 lines

from line 492
492492 
4934931. Check that your Claude account is connected. DM `@Claude` and it prompts you to connect if it isn't.
4944942. Check that the connector shows as connected under **Customize > Connectors** on claude.ai.
4953. For a custom connector on a Team or Enterprise plan, an Owner adds it to the organization before you can connect it; see [third party connectors with remote MCP](/docs/connectors/custom/remote-mcp).
4953. For a custom connector on a Team or Enterprise plan, an Owner adds it to the organization before you can connect it; see [add a connector by URL](/docs/connectors/custom/add-unlisted#add-a-connector-by-url).
4964964. After connecting or reconnecting the connector on claude.ai, send Claude a new top-level direct message. A session loads its connectors when it starts, so your existing DM threads keep the set they started with and don't pick up the change.
497497 
498498### Claude says it has no internet access or can't open a link

government/config/plugins-and-connectors Changed · +2 / -2 lines

from line 10
1010 
1111A connector gives Claude access to another service, such as a search tool your agency runs, and the **Connectors** card is the way to deliver a connector to members. A plugin is a package that changes how Claude works. It can add skills, slash commands, and sub-agents, and it can carry hooks, which are scripts a plugin author includes to run automatically at defined points during a session, such as when a session starts. For adding a connector, see [Connectors](/docs/government/connectors/overview). For what a plugin can contain across Claude products, see the [Plugins overview](/docs/plugins/overview); the Claude for Government differences are covered below.
1212 
13A plugin you upload on the **Plugins** card delivers its skills, slash commands, sub-agents, and hooks to members, and its hooks run on the member's machine. A plugin can also declare [MCP servers](/docs/connectors/overview) of its own, and [Plugins that run code](#plugins-that-run-code) describes how they behave. To deliver a connector to members, add it on the **Connectors** card.
13A plugin you upload on the **Plugins** card delivers its skills, slash commands, sub-agents, and hooks to members, and its hooks run on the member's machine. A plugin can also declare [MCP servers](/docs/connectors/getting-started) of its own, and [Plugins that run code](#plugins-that-run-code) describes how they behave. To deliver a connector to members, add it on the **Connectors** card.
1414 
1515## Plugin archive formats
1616 
from line 38
3838 
3939## Plugins that run code
4040 
41The upload preview marks any plugin that declares components that can run code on the member's machine, for example hooks or an [MCP server](/docs/connectors/overview), and you confirm that you trust such a package before it is added. For a marketplace archive, one confirmation covers every marked plugin in the batch. After you add it, the plugin's row on the **Plugins** card keeps a **Runs code** marker, so you can see at a glance which of the plugins you have added contain these components.
41The upload preview marks any plugin that declares components that can run code on the member's machine, for example hooks or an [MCP server](/docs/connectors/getting-started), and you confirm that you trust such a package before it is added. For a marketplace archive, one confirmation covers every marked plugin in the batch. After you add it, the plugin's row on the **Plugins** card keeps a **Runs code** marker, so you can see at a glance which of the plugins you have added contain these components.
4242 
4343The marker reflects what a plugin declares. In Claude for Government, a marked plugin's hooks run on the member's machine at defined points during a session. Claude Desktop can also run a local MCP server that the plugin declares on the member's machine, or connect to a remote one.
4444 

third-party/claude-desktop/browser Changed · +3 / -1 lines

from line 38
3838 
3939### Restrict which sites Claude can open
4040 
41[`builtinBrowserDefaultDomainPolicy`](/docs/third-party/claude-desktop/configuration#builtinbrowserdefaultdomainpolicy) decides whether Claude can open every site except the ones you block, or only the sites you allow.
41[`builtinBrowserDefaultDomainPolicy`](/docs/third-party/claude-desktop/configuration#builtinbrowserdefaultdomainpolicy) decides whether Claude can open every site except the ones you block, or only the sites you allow. Under either value, a site that Anthropic's [site safety check](#site-safety-check) blocks stays blocked to Claude, even when `builtinBrowserAllowedDomains` lists it.
4242 
4343| Value | Behavior |
4444| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
4545| Unset or `allow` | Claude can open every site except the entries in [`builtinBrowserBlockedDomains`](/docs/third-party/claude-desktop/configuration#builtinbrowserblockeddomains) |
4646| `block` | Claude can open only the entries in [`builtinBrowserAllowedDomains`](/docs/third-party/claude-desktop/configuration#builtinbrowseralloweddomains) |
47 
48The policy also governs sites that the site safety check flags for confirmation rather than blocks. Under the default `allow` policy, Claude asks the user before each of its actions on such a site. Under `block`, listing the site in `builtinBrowserAllowedDomains` is your organization vouching for it, so Claude works with it without asking before each action. For a site on your private network, Claude Desktop still asks before each action until the user chooses **Always allow** for that site.
4749 
4850For example, this configuration lets Claude open only a documentation site and a wiki:
4951 
Feedback