This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Skills and Claude Code plugins marketplace for the opendatahub-io organization. registry.yaml is the single source of truth — all other files are generated from it.
# Install Python dependencies (needed for all scripts)
pip install pyyaml jsonschema
# Validate registry.yaml against schema
python3 scripts/validate_registry.py
# Regenerate marketplace.json from registry.yaml
python3 scripts/sync_marketplace.py
# Regenerate catalog.md from registry.yaml
python3 scripts/generate_catalog.py
# Regenerate site content from registry.yaml
python3 scripts/generate_site.py
# Check plugin repo versions against registry
python3 scripts/check_versions.py --dry-run
# Validate and also clone/check new plugin repos
python3 scripts/validate_registry.py --diff origin/main --validate-remote-pluginsBefore committing any change to registry.yaml, run all four generators (validate, sync marketplace, generate catalog, generate site). CI checks that every generated file matches -- it does not auto-commit.
registry.yaml— source of truth, edited by humans.claude-plugin/marketplace.json— generated, Claude Code reads thiscatalog.md— generated, human-readable listingschema/registry.schema.json— JSON Schema for validationsite/— MkDocs Material documentation site (generated + static)scripts/— automation (sync, validate, generate, version check)
See @ARCHITECTURE.md for detailed diagrams and design documentation.
Plugins without .claude-plugin/plugin.json in their repo must set strict: false and skills_dir in their registry entry. Without these, Claude Code cannot discover skills when the plugin is installed via the marketplace. Auto-discovery of .claude/skills/ only works locally, not for marketplace installs.
strict: true(default): repo hasplugin.json, Claude Code reads itstrict: false: marketplace defines everything,skills_dirrequired
The schema enforces skills_dir requires strict to be present (dependentRequired), and the validation script checks skills_dir is only used with strict: false.
The source field in marketplace.json uses "source": "github" (not "type"). The skills field must be an array (e.g., ["./.claude/skills"]), not a string. The sync script handles both correctly.
Plugins can include agents (defined in agents/ directories) alongside skills. Agents run in isolated context windows and are auto-delegated by Claude or selected via /agents. The agents_dir field works like skills_dir — only valid with strict: false.
See @CONTRIBUTING.md for the full process. Quick checklist:
- Add entry to
registry.yamlwith correctstrict/skills_dirsettings - Run
python3 scripts/validate_registry.py - Run
python3 scripts/sync_marketplace.py - Run
python3 scripts/generate_catalog.py - Run
python3 scripts/generate_site.py - Commit all changed files and open a PR
To test changes before merging, install the marketplace from a branch:
claude plugin marketplace add opendatahub-io/skills-registry#branch-nameTo update after already adding:
claude plugin marketplace remove opendatahub-skills
claude plugin marketplace add opendatahub-io/skills-registry#branch-name- Claude Code skills — SKILL.md frontmatter spec (
user-invocable,disable-model-invocation,allowed-tools, etc.) - Claude Code sub-agents — agent frontmatter spec
- Claude Code plugins — plugin manifest and marketplace format
- Agent Skills specification — open standard that Claude Code skills conform to