Skip to content
zero2vibecodelearn vibe coding
Level 5 · Memory and the team 9 min Reviewed by the author · Oct 15, 2026 Verified against Claude Code v2.1.292 · Oct 15, 2026Official docs: Plugins: create marketplace, SettingsSomething out of date? Tell us

A shared kit for the team

What everyone needs is committed to the repository; what is yours stays out of git. A marketplace right in the repository plus two keys in .claude/settings.json give everyone who clones the project and trusts the folder a shared plugin without a single install command.

Level 5 · 0 / 4 lessons0%
In this lesson

Over the last levels you built your own setup: permission rules, hooks, skills, subagents. Now you need to hand it to the team — so that everyone gets the same thing, while your personal settings stay yours.

What to commit and what not to

Committed — for everyoneStays with you
.claude/settings.json.claude/settings.local.json
CLAUDE.md and .claude/rules/CLAUDE.local.md
skills, agents, .mcp.json

The local settings file wins over the shared one: a teammate can override a team setting for themselves without a commit. The exception is lists such as permission rules: they are not replaced but merged.

Add both personal files to the project’s .gitignore yourself. The rule Claude Code writes for settings.local.json goes into your global git ignore list — your teammates do not have it. And CLAUDE.local.md is created by hand, so keeping it out of git is on you too.

A marketplace in the repository

A packages skills, agents and hooks into one unit. A is a folder where a .claude-plugin/marketplace.json file lists plugins. You can put one right in the repository:

team-marketplace/
  .claude-plugin/marketplace.json     ← the team-tools marketplace
  plugins/team-kit/
    .claude-plugin/plugin.json        ← the team-kit plugin
    skills/onboard/SKILL.md
    agents/config-reviewer.md

In marketplace.json, the plugin is given by a relative path:

{
  "name": "team-tools",
  "owner": { "name": "The team" },
  "plugins": [
    { "name": "team-kit", "source": "./plugins/team-kit" }
  ]
}

The entry’s name (team-kit) must match name in the plugin’s plugin.json.

Checking before you commit

claude plugin validate ./team-marketplace
claude plugin validate ./team-marketplace/plugins/team-kit --strict

You need both runs. Validating the marketplace checks its file and entries, but does not open the skills and agents inside the plugins. The second run opens them, and --strict turns warnings into errors. Success ends with the line Validation passed.

Two keys in the settings

In .claude/settings.json:

{
  "extraKnownMarketplaces": {
    "team-tools": {
      "source": { "source": "directory", "path": "./team-marketplace" }
    }
  },
  "enabledPlugins": {
    "team-kit@team-tools": true
  }
}
  • the key inside extraKnownMarketplaces is the marketplace’s name;
  • the plugin’s identifier is entry-name@marketplace-name;
  • the value is true, not the string "true";
  • the relative path is resolved from the main copy of the repository, so a session in a uses the same team-marketplace/.

Commit team-marketplace/ and .claude/settings.json. A teammate clones the repository, runs claude, accepts the trust dialog — and the plugin loads with no install command. The skill is invoked as /team-kit:onboard, the subagent as team-kit:config-reviewer.

A plugin from a folder on disk loads in place: an edit in team-marketplace/ is picked up at the next start or after /reload-plugins, with no need to bump the version number.

For yourself

Turn the shared plugin off just for you. In .claude/settings.local.json:

{ "enabledPlugins": { "team-kit@team-tools": false } }

Then /reload-plugins. For everyone else the plugin stays on.

Try it without connecting it. claude --plugin-dir ./team-marketplace/plugins/team-kit loads the plugin for one session and writes nothing to the settings.

Pitfalls

  • Trust. A marketplace from the repository silently waits until the person accepts the folder trust dialog. claude -p connects it only in a folder that was already trusted in an interactive session. A cloud session shows no dialog — such a marketplace never connects there. Shared permission rules wait for the same dialog.
  • Duplicates. A component left in both .claude/ and the plugin loads twice: both /tdd and /team-kit:tdd will work, and a hook will fire twice.
  • The name is forever. A plugin is enabled as name@marketplace. A renamed plugin is a different plugin for everyone who had it enabled. If you need a new label, change displayName, not name.

Quick check

You renamed the team-kit plugin to dev-kit in plugin.json and marketplace.json. What will your teammates see?

Careful

Practice in the terminal

Try it on a real marketplace

Check your understanding

Answered 0/3
Mode:

A teammate cloned the repository with the marketplace in team-marketplace and ran claude. The plugin is not there, and there is no error either. What is most likely?

How do you turn the shared plugin off just for yourself, without touching the team's commit?

The tdd skill is in both .claude/skills and the team-kit plugin. What happens?

Finish the task in the terminal and answer the questions to complete the lesson.

📝 My notes

Saved automatically in this browser · shows up on the Notes page.

Task

The team-tools marketplace with the team-kit plugin is already in team-marketplace. Connect it for the whole team in .claude/settings.json, and keep personal files out of git.

Tab complete · ↑ history · Ctrl+L clear · help commands

  • Not done: The marketplace is declared in the shared settings
  • Not done: The path to the marketplace is relative
  • Not done: The team-kit plugin is enabled for everyone
  • Not done: Personal settings stay out of git
  • Not done: Personal memory stays out of git

Lesson Q&A

A teammate cloned the repository with the marketplace in team-marketplace and ran claude. The plugin is not there, and there is no error either. What is most likely?

They have not accepted the folder trust dialog yet — until then, a marketplace from the repository silently waits — A marketplace declared in project settings is registered only after the person has trusted the folder. Until then the entry is ignored without a message. A cloud session shows no trust dialog, so such a marketplace never connects there at all.

How do you turn the shared plugin off just for yourself, without touching the team's commit?

Set it to false in enabledPlugins in .claude/settings.local.json and run /reload-plugins — The local settings file wins over the shared one, so false there turns the plugin off only for you. /reload-plugins applies the change without a restart.

The tdd skill is in both .claude/skills and the team-kit plugin. What happens?

Both load — /tdd and /team-kit:tdd — and a moved hook would fire twice — A component left in both .claude/ and a plugin loads twice. Once you have moved it into the plugin, delete the original from .claude/.

You renamed the team-kit plugin to dev-kit in plugin.json and marketplace.json. What will your teammates see?

Plugins are enabled and configured by name@marketplace, so renaming creates a new plugin. displayName exists for a new label.

Commands in this lesson

Terms in this lesson

Move between lessons with ← → · search with ⌘K

Written and reviewed by Mikhail Kuzmitskii