Team and Enterprise Distribution
- Describe the three Claude Code distribution mechanisms — managed settings, project skills, and cloud sync — and identify which applies to enterprise, team, and personal deployment scenarios
- Use skillOverrides in settings.json to control skill visibility across a team without editing SKILL.md files
- Configure Hermes external_dirs for read-only shared skill directories and explain how profiles limit skill exposure per context
Three Paths to Team Distribution
Getting a skill from your machine to your team's workflow happens through three mechanisms in Claude Code and one additional pattern in Hermes. The right choice depends on whether skills should be organization-wide, project-scoped, or user-optional — and whether your team uses Claude Code, Hermes, or both.
Claude Code: Managed Settings for Enterprise Deployment
Enterprise deployments configure a managed settings directory that applies to every Claude Code installation in the organization. Skills placed in this directory's .claude/skills/ subfolder load for all users automatically, at the highest priority in the resolution order — enterprise settings override personal and project settings when names conflict.
/etc/claude-code/.claude/skills/<skill-name>//Library/Application Support/Claude Code/.claude/skills/<skill-name>/%ProgramData%Claude Code.claudeskills<skill-name>The full resolution priority: Enterprise (managed settings) > Personal (~/.claude/skills/) > Project (.claude/skills/) > Bundled. Enterprise skills are the right path for organization-wide standards: a coding conventions skill, a deployment checklist, or a security review procedure every developer should run.
Claude Code: Project Skills for Team Sharing
The simplest team distribution path is committing skills to the repository. Any skill placed in .claude/skills/ at the project root is available to every developer who clones the repo — no installation step, no managed settings, no environment variables required.
Project skills version-control alongside the code they document. When the deployment procedure changes, the deploy skill changes in the same commit. When a new developer joins and clones, they get current skills immediately. This alignment prevents the drift that makes personal skills go stale: the skill and the thing it describes evolve together under the same review process.
For most teams, project skills are the recommended first choice. They require no enterprise IT setup, work with any Claude Code version, and git history on the .claude/skills/ directory is a free audit trail of every skill change.
Claude Code: skillOverrides for Visibility Control
The skillOverrides setting controls skill visibility without touching SKILL.md files. Use it to roll out a new skill gradually, retire a legacy one, or prevent Claude from auto-invoking a skill while keeping it user-accessible.
{
"skillOverrides": {
"legacy-deploy": "off",
"new-deploy": "on",
"internal-docs": "user-invocable-only"
}
}
"on""name-only""user-invocable-only""off"Place skillOverrides in settings.json (committed to the repo) for team-wide effect, or in settings.local.json (gitignored) for personal overrides that don't affect teammates.
The Cloud Sync Gotcha
Personal skills in ~/.claude/skills/ silently do not load in Cowork sessions or Claude Code cloud sessions. A developer who built a personal skill library will find it absent the moment they open a Cowork tab or run a scheduled routine. Three options address this:
- Enable sync with the environment flag. Set
CLAUDE_CODE_SYNC_SKILLS=1before starting a terminal session (requires Claude Code v2.1.273+ and a/loginsession, not API key). This downloads account-enabled skills into~/.claude/skills/synced/before the first prompt. Never name a skills directorysynced— that name is reserved for this mechanism. - Commit to
.claude/skills/. Project skills load in all session types including cloud and Cowork. This is the natural home for any skill the team shares. - Ship in a plugin. Plugins declared in
.claude/settings.jsoninstall their bundled skills across all session types.
Synced skills carry one important limitation — several dynamic features are disabled in cloud and Cowork contexts:
! shell command injection@ file references${CLAUDE_PROJECT_DIR}${CLAUDE_SESSION_ID}Design any skill intended for cloud sessions to degrade gracefully when these features are unavailable — or route it through project skills instead.
Hermes: external_dirs and Profiles
Hermes provides direct team sharing through external_dirs in config.yaml. Point Hermes at any directory and its skills become available without copying files into the primary ~/.hermes/skills/ tree:
# config.yaml
skills:
external_dirs:
- /mnt/team-skills
- /opt/org-skills
Team members mount the shared directory (via network share, NFS, or a symlink to a locally cloned repo). Updates pulled to the shared directory are visible on the next session — no re-install needed.
One precedence rule to know: local skills shadow external ones by name. If a developer places their own version of a skill in ~/.hermes/skills/, it takes priority over the identically named skill in external_dirs. This prevents accidental overwrites but can create "works on my machine" discrepancies. Team naming conventions prevent most collisions.
Hermes profiles allow different skill subsets per context. A backend profile exposes backend-specific team skills; a frontend profile exposes frontend skills. Profiles prevent list pollution — developers see only the skills relevant to their current context rather than the entire team library.
Naming Governance
Establish naming conventions before distributing skills. The team- prefix keeps team-distributed skills visually distinct from personal and community skills in any listing:
team-deploy-prod— notdeploy, which collides with personal or community skillsteam-review-pr— notreview-pr, which may already exist in community registriesteam-setup-env— notsetup, which is too generic to distinguish
Document conventions in the team skills README before the first skill ships. Governance before distribution is easier than renaming after — rename collisions in skillOverrides can mask bugs for weeks if the wrong skill silently runs in place of the intended one.
- Project skills in .claude/skills/ are the easiest team distribution path — they version-control alongside the code they document and load in all session types including Cowork and cloud
- Personal skills in ~/.claude/skills/ silently do not load in Cowork or cloud sessions — design team skills for .claude/skills/ or plugins, not personal directories
- skillOverrides: "off" hides a skill from both Claude and the / menu without deleting the file — use it to retire skills at the settings layer rather than removing the SKILL.md