From jmichaelschmidt-skills-public
Manage, sync, and publish Agent Skills across multiple AI platforms (Claude, Codex, Gemini, Copilot) and marketplace repositories. Use when users want to list skills, sync between platforms, publish to marketplace keys, mirror canonical skills, audit drift, or set up their environment. Triggers on phrases like "list skills", "sync skills", "publish skill", "skill marketplace", "deploy skill", "audit skills", or "skill inventory".
npx claudepluginhub jmichaelschmidt/skills-public --plugin skills-publicThis skill uses the workspace's default tool permissions.
Manage repo-canonical Agent Skills across marketplace repositories and runtime install surfaces.
config.jsonconfig.template.jsonreferences/platform-paths.mdscripts/audit-runtime.pyscripts/audit.pyscripts/config_resolver.pyscripts/init.pyscripts/install-from-marketplace.pyscripts/inventory.pyscripts/marketplace-distribute.pyscripts/marketplace-mirror.pyscripts/marketplace-sync.pyscripts/publish.pyscripts/repo_hygiene.pyscripts/sync.pyscripts/validate.pytests/test_skill_manager.pytests/test_workspace_validation.pyCreates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Manage repo-canonical Agent Skills across marketplace repositories and runtime install surfaces.
Skill-manager uses a repo-canonical model.
The intended release flow is:
~/.claude/skills/<skill>~/.codex/skills/<skill> to the Claude installDo not treat marketplace caches under ~/.claude/plugins/marketplaces/... as the canonical runtime path.
scripts/sync.py still exists for development-only movement of unpublished local skills. It is not the canonical release/install path.
| Platform | User Skills Path | Detection |
|---|---|---|
| Claude Code | ~/.claude/skills/ | ~/.claude/ exists |
| OpenAI Codex | ~/.codex/skills/ | ~/.codex/ exists |
| Gemini CLI | ~/.gemini/skills/ | ~/.gemini/ exists |
| GitHub Copilot | ~/.copilot/skills/ | ~/.copilot/ exists |
Run the interactive setup wizard:
scripts/init.py
This will:
claude primary, optional Codex mirror)Install a released skill from a local marketplace clone into the canonical machine runtime path:
scripts/install-from-marketplace.py --marketplace team --skill my-skill
This command:
~/.claude/skills/<skill>~/.codex/skills/<skill> as a symlink to the Claude installUse --all to refresh every published skill from a marketplace clone.
For unpublished or branch-only work, you can still sync a local skill directly:
scripts/sync.py /path/to/local/my-skill --to codex
Or sync all skills from a specific runtime platform:
scripts/sync.py --all --from-platform claude
Options:
--to claude,codex,gemini,copilot - Override target platforms--to auto - Auto-detect installed platforms--to all - Sync to all known platforms--mode symlink|copy - Override development sync mode--from-platform claude|codex|gemini|copilot - Required for --all unless legacy config still sets one--dry-run - Preview changes without applying--force - Overwrite existing skills without prompting--all - Sync all skills from source platformscripts/inventory.py
Options:
--platform claude|codex|gemini|copilot|all - Filter by platform--format table|json|yaml - Output format--verbose - Show full paths and metadata--source global|project|marketplace - Include selected source(s), repeatable--exclude-source global|project|marketplace - Exclude selected source(s), repeatable--global-only|--project-only|--marketplace-only - Single-source shortcuts--no-marketplace - Exclude marketplace entries--include-marketplace - Backward-compatible alias (marketplace is already included by default)scripts/inventory.py output includes all discovered sources:
--include-marketplace--include marketplace--include=marketplaceskill-manager works with marketplace keys from config.json (for example: private, team, public, partner, enterprise-core). Keys are identifiers only; repository names and plugin names can be arbitrary.
scripts/publish.py ~/.claude/skills/my-skill --to team
scripts/publish.py ~/.claude/skills/my-skill --to partner --in-development
Standard publish will:
In-development publish (--in-development) will:
skills-in-development/marketplace.json updates (so it is not installable from marketplace)If the source path includes skills-in-development/, publish mode is inferred automatically.
If you don't specify --to, you'll be prompted to choose.
README rule: For standard publishes, the repository README.md must stay current. publish.py now validates the "Available Skills" table and updates the skill row automatically. If the README is missing or malformed, publish should fail until the repo documentation is fixed.
Pull latest from your marketplace repositories:
scripts/marketplace-sync.py
scripts/marketplace-sync.py --marketplace team
scripts/marketplace-sync.py --status
scripts/marketplace-sync.py --status --marketplace team
scripts/marketplace-sync.py --branch master
scripts/marketplace-sync.py --auto-stash
scripts/marketplace-sync.py --prune-merged
marketplace-sync.py --status should be your first repo hygiene check. It reports:
origin/<default-branch>Use --prune-merged to delete local branches that are already merged into the tracked branch. Review unmerged extra branches manually before deleting them.
Mirror from a canonical source ref (tag, branch, or commit) into a target marketplace with manifest and README updates:
scripts/marketplace-mirror.py mirror --from public --to partner --source-ref v1.2.0
scripts/marketplace-mirror.py mirror --from public --to partner --source-ref 8ab12cd --skill skill-manager
scripts/marketplace-mirror.py mirror --from public --to partner --source-ref main --dry-run
Generate drift reports at any time:
scripts/marketplace-mirror.py drift --from public --to partner
scripts/marketplace-mirror.py drift --from public --to partner --source-ref v1.2.0
Audit how a skill moves from repo source to marketplace artifact to runtime install:
scripts/audit-runtime.py my-skill --marketplace team
scripts/audit-runtime.py my-skill --marketplace team --source ~/GitHub/skills-team/skills/my-skill
This reports:
marketplace-distribute.py remains available for advanced or legacy workflows that intentionally symlink marketplace clones into other platform skill directories. It is not the recommended release/install path for Claude plus Codex.
scripts/audit.py <skill-name>
scripts/audit.py --all
scripts/validate.py <skill-path>
# Repo hygiene
scripts/marketplace-sync.py --status
scripts/marketplace-sync.py --prune-merged
# List discovered skills
scripts/inventory.py
# Publish
scripts/publish.py ~/.claude/skills/my-skill --to team
# Install released runtime copy
scripts/install-from-marketplace.py --marketplace team --skill my-skill
# Mirror
scripts/marketplace-mirror.py mirror --from public --to team --source-ref main --skill my-skill
# Runtime audit
scripts/audit-runtime.py my-skill --marketplace team
# Marketplace drift
scripts/marketplace-mirror.py drift --from public --to team
Run this checklist before and after any marketplace skill update:
scripts/marketplace-sync.py --status and confirm each repo is on its tracked default branch.origin/<default-branch>.scripts/marketplace-sync.py --prune-merged to clear merged local branches.scripts/marketplace-sync.py --status on the default branch and verify the repo is aligned.README.md "Available Skills" table matches the published skills.Configuration is stored in your user-local config file (created by scripts/init.py, typically ~/.config/skill-manager/config.json):
{
"platforms": {
"claude": {
"enabled": true,
"user_path": "~/.claude/skills"
},
"codex": {
"enabled": true,
"user_path": "~/.codex/skills"
},
"gemini": {
"enabled": false,
"user_path": "~/.gemini/skills"
},
"copilot": {
"enabled": false,
"user_path": "~/.copilot/skills"
}
},
"runtime": {
"primary_platform": "claude",
"codex_mirrors_claude": true
},
"development_sync_mode": "copy",
"sync_mode": "copy",
"marketplaces": {
"private": {
"repo": "https://github.com/your-org/skills-internal",
"description": "Personal/experimental skills",
"visibility": "private"
},
"team": {
"repo": "https://github.com/your-org/skills-team",
"description": "Shared skills for collaborators",
"visibility": "private"
},
"public": {
"repo": "https://github.com/your-org/skills-public",
"description": "Freely available skills",
"visibility": "public"
}
},
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"local_repos_path": "~/GitHub"
}
| Field | Description |
|---|---|
platforms | Platform configurations (enabled, runtime path) |
runtime | Canonical runtime policy (primary platform and Codex mirror behavior) |
development_sync_mode | Default mode for ad hoc sync.py use |
sync_mode | Legacy alias preserved for backward compatibility |
marketplaces | GitHub repo URLs keyed by marketplace name |
owner | Your name and email for commits |
local_repos_path | Where marketplace repos are cloned |
Each marketplace repo follows this structure:
<repository-name>/
├── .claude-plugin/
│ └── marketplace.json # Plugin catalog
├── skills/
│ ├── skill-one/
│ │ ├── SKILL.md
│ │ └── scripts/
│ └── skill-two/
│ └── SKILL.md
├── skills-in-development/ # Optional: excluded from marketplace manifest
│ └── alpha-skill/
│ └── SKILL.md
└── README.md
{
"name": "skills-team",
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"metadata": {
"description": "Shared skills for collaborators",
"version": "1.0.0"
},
"plugins": [
{
"name": "skills-team",
"description": "Shared skills for collaborators",
"source": "./",
"strict": false,
"skills": [
"./skills/skill-one",
"./skills/skill-two"
]
}
]
}
Create and test your skill in a git repo checkout:
my-skill/
├── SKILL.md # Required
├── scripts/ # Optional
├── references/ # Optional
└── assets/ # Optional
scripts/validate.py /path/to/repo/skills/my-skill
scripts/publish.py /path/to/repo/skills/my-skill --to team
# For alpha/in-progress skills that should not be marketplace-installable:
scripts/publish.py /path/to/repo/skills/my-skill --to team --in-development
Review and merge the PR created in your marketplace repo.
Refresh the canonical machine runtime copy from the published marketplace artifact:
scripts/install-from-marketplace.py --marketplace team --skill my-skill
If the machine uses Codex, this command should also verify or recreate the Codex symlink to the Claude runtime copy.
| Mode | Pros | Cons |
|---|---|---|
| copy | Safe for unpublished development syncs | Must re-sync to propagate changes |
| symlink | Useful for advanced/temporary local workflows | Not the recommended release runtime model |
| Field | Required | Max Length | Rules |
|---|---|---|---|
name | Yes | 64 chars | Lowercase, hyphens, digits only |
description | Yes | 1024 chars | No angle brackets. Include WHAT and WHEN |
license | No | - | License name or file reference |
/plugin UI, go to Marketplaces tab and press u to updatecat ~/.config/skill-manager/config.json"enabled": true--all, pass --from-platform or set a runtime primary platform--dry-run to preview: scripts/sync.py --all --from-platform claude --dry-runscripts/init.py to reconfiguregh CLI is installed and authenticatedscripts/marketplace-sync.py --status to check repo state# Check runtime install
ls -la ~/.claude/skills/my-skill
# Check Codex mirror
ls -la ~/.codex/skills/my-skill
After syncing or publishing skills, you may need to reload your IDE window for changes to take effect:
Cmd+Shift+P → "Reload Window"skill-creator skill - For creating new skills from scratch