This skill is used to maintain rock-marketplace this plugin repository. This repository is asingle plugin (rock) + multi-skill structure, and the key constraint is:any change that alters plugin behavior or the externally exposed surface must be synchronized to six locations and version-bumped according to semver. Missing any one of them will cause the version installed users get to be inconsistent with what the marketplace declares, or cause some installation path (npx skills add / /plugin install / /plugin marketplace add) to behave inconsistently—this kind of inconsistency is hard to detect, yet it will genuinely trip up users.
Once you understand this "why," all the rules below become entirely natural.
Six locations that must stay in sync
After each change, check whether these six locations are consistent:
| # | Location | What to change | When to change |
|---|---|---|---|
| 1 | plugins/rock/skills/<skill>/ |
Actual skill content (SKILL.md + scripts/ + references/) | When adding/deleting/updating a skill |
| 2 | skills/<skill> |
Top-level symlink → ../plugins/rock/skills/<skill> |
Create only when adding a skill; remove when deleting a skill |
| 3 | plugins/rock/plugin.json |
version + description |
Every change that affects behavior |
| 4 | marketplace/registry.json |
version + description + skills[] + updated_at |
Every change that affects behavior |
| 5 | .claude-plugin/marketplace.json |
The inner plugin's description(plus the outer marketplace description if involved) |
When the description changes |
| 6 | README.md |
Structure diagram + "Included skills" table | When skills are added/removed or the description changes |
The three installation paths each rely on different manifests, so all of them must stay consistent:
npx skills addonly recognizes the top-levelskills/symlink (location 2)/plugin installgoes throughplugins/+registry.json(locations 3 and 4)/plugin marketplace addreads.claude-plugin/marketplace.json(location 5)
Location 5 is especially easy to miss—it is independent of registry.json and contains both the outer marketplace and inner plugin two descriptions. Historically, when adding a skill, only the registry was changed and this was missed, causing the description shown in the marketplace list to lag behind reality. The validation script checks whether it has kept up based on keywords.
Consistency validation (mandatory)
This skill has a built-in validation script;it must be run before and after any change:
python3 .claude/skills/rock-plugin-release/scripts/check_consistency.py
It checks: whether the version number is consistent between plugin.json/registry.json, whether the registry's skills list matches the actual directories, whether each SKILL.md has valid frontmatter, whether the top-level symlinks are complete and point correctly, whether the README mentions all skills, and the updated_at format. Exit code 0 = all consistent, 1 = problems.
The script is read-only and does not modify anything, so you can safely run it repeatedly.After the changes are complete, you must see "consistency check passed" before finishing—this step is the fallback to prevent missed changes.
Version number (semver) determination
The version bump is determined by you (the agent executing the skill) based on the type of changeand suggested, butthe final version number must be confirmed by the user—do not bump it on your own. Determination rules:
This repository's simplified rules (overriding standard semver): only when the skill list has additions or removals(adding a skill or deleting/renaming a skill) do you bump
minor; all other changes—updates to skill internal content (including new capabilities, fixes), documentation/README/metadata/hooks adjustments—are always bumped aspatch. Unless the user instructs otherwise, do not bumpmajor。
| Change type | Bump | Example |
|---|---|---|
| Add skill | minor |
Add rock-eval |
| Delete / rename skill | minor |
Any change to the skill list bumps minor |
| Update skill content(enhancements/fixes/new capabilities, without adding or removing skills) | patch |
Add a runbook within a skill, fix a bug, add agent team orchestration |
| Only change docs/README/metadata | patch |
Adjust description wording, align marketplace.json |
| Modify hooks behavior | patch |
Unless the user requests higher |
When judging, hold to one principle:has the skill list (registry.json in skills[] and the top-level symlinks) changed? If changed, bump minor; if not, bump patch. If unclear, treat it as patch and ask the user to confirm.
When bumping the versionplugin.json and registry.json must be kept in sync—the version in both places must be exactly consistent. This repository has previously had plugin.json=1.0.0 while registry.json=1.1.0 was inconsistent (the validation script was created precisely to catch this kind of problem).
Typical operation flow
Add a skill (e.g. rock-xxx)
- Create
plugins/rock/skills/rock-xxx/SKILL.md(with valid frontmatter:namematches the directory name,descriptionclearly states the trigger scenarios). - Create the top-level symlink:
ln -s ../plugins/rock/skills/rock-xxx skills/rock-xxx(run in the repository root). plugin.json:descriptionUpdate if the new skill needs to be reflected; bump version (per the table above, usually minor).registry.json:skillsAdd"rock-xxx"to the array; sync version and description; updateupdated_at(use today's date, formatYYYY-MM-DD)。.claude-plugin/marketplace.json: if the description changed, the innerrockplugin's description (and if necessary the outer marketplace description) must also be kept in sync.README.md: add one line for the symlink + directory in the structure diagram, and one row in the skills table.- Run the validation script and confirm it passes.
Delete a skill
- Delete the
plugins/rock/skills/<skill>/directory. - Delete the top-level symlink
skills/<skill>。 registry.jsonremove that item from theskillsarray; sync version (a change to the skill list, bump minor); updateupdated_at。plugin.jsonsync version, change description if necessary..claude-plugin/marketplace.json: if the description changed, sync the inner (and if necessary outer) description.README.mdRemove the corresponding lines from the structure diagram and table.- Run the validation script.
Update skill content (fix/enhance, without adding or removing)
- Change files under
plugins/rock/skills/<skill>/(symlinks follow automatically, no need to touch the top-levelskills/)。 - Bump patch (skill list unchanged), sync the version of
plugin.jsonandregistry.json; updateregistry.jsoninupdated_at。 - If the description changes substantively, sync the description in all four places:
plugin.json/registry.json/.claude-plugin/marketplace.jsonInner / README table. - Run the validation script.
Metadata / documentation only
Just run the validation script; version usually gets a patch bump (or stays the same, depending on the user's preference).
updated_at date
registry.json of updated_at inany change that affects version must be refreshed to today. For "today" in the current session, confirm with the user or use a known date; do not fabricate a future date (the validation script will flag future dates as warnings).
Final checklist
Before committing each change, confirm against the following:
- The validation script outputs "consistency check passed"
-
plugin.jsonis exactly consistent with the version ofregistry.jsonis completely identical to the version of - If version changed,
registry.json'supdated_athas been refreshed - Newly added/removed skills are consistent in the registry
skills[], top-level symlinks, and README - If description changed,
.claude-plugin/marketplace.jsonhas been synced (very easy to miss) - The suggested version number and rationale have been explained to the user and confirmed
Per project convention, the commit message format is <type>(<scope>): <description>, e.g. feat(rock): add rock-xxx skill。