Your first run¶
By the end of this you will have installed skillup, run it against a marketplace you create, and seen it catch a change that would have reached nobody.
Nothing here touches a real repository. Everything happens in a throwaway directory you delete at the end.
You need: Go 1.26.5 or newer, and git.
1. Install it¶
Check it runs — $(go env GOPATH)/bin needs to be on your PATH:
$ skillup --help
Version the segments of a Claude Code plugin marketplace
Usage:
skillup [command]
Available Commands:
apply skillup apply
check skillup check
completion Generate the autocompletion script for the specified shell
help Help about any command
plan skillup plan
tag skillup tag
version Print version, commit, and build date
No Go toolchain, or you would rather build from a clone? See Install skillup.
2. Make a marketplace to point it at¶
mkdir -p /tmp/demo/plugins/alpha/.claude-plugin /tmp/demo/.claude-plugin
cd /tmp/demo
git init -q .
cat > .claude-plugin/marketplace.json <<'JSON'
{
"name": "demo",
"owner": { "name": "you" },
"plugins": [{ "name": "alpha", "source": "./plugins/alpha" }]
}
JSON
cat > plugins/alpha/.claude-plugin/plugin.json <<'JSON'
{
"name": "alpha",
"description": "A demo segment",
"version": "0.3.0"
}
JSON
git add -A && git commit -qm "chore: seed the marketplace"
One segment, at 0.3.0, and no tags anywhere. That matters — you will see
why shortly.
3. Ask what should happen¶
Nothing has changed since the manifest was written, so there is nothing to do.
4. Make a change, the way you normally would¶
echo "a new capability" > plugins/alpha/feature.md
git add -A && git commit -qm "feat(alpha): add a capability"
Now ask again:
A feat: earns a minor. Had you written fix:, it would say 0.3.1.
This is the moment the tool exists for. If you committed and pushed now, the
content would be on the branch and the version would still say 0.3.0 — and
because both harnesses cache by version, nobody would ever receive it. No error,
no warning.
5. Watch the gate fail¶
check is what CI runs:
$ skillup check --path .
alpha is 0.3.0 but its commits warrant 0.4.0 (minor)
f1e2d3c4 feat(alpha): add a capability (minor)
To fix, on your branch:
skillup apply --path .
git add -u && git commit --amend --no-edit # or a new commit
The version is what ships a segment: both harnesses cache by
<marketplace>/<plugin>/<version> and neither resolves a git ref, so a
version that does not move withholds your change from every consumer.
2026/08/11 14:07:14 ERRO a segment's version is behind what its commits warrant hints="run `skillup apply` and commit the result alongside your change; a version that does not move withholds the change from every consumer"
The instruction is printed on stdout above the error, deliberately. In a CI
log the last line is a red ERRO, and the reader scrolling to it is looking for
something to do, not a diagnosis.
6. Fix it¶
Look at what changed:
One line. The rest of the manifest is untouched, byte for byte.
Commit it with the change that earned it:
7. See that it needed no tags¶
You never created one. skillup worked out the previous version by reading the
git history of plugins/alpha/.claude-plugin/plugin.json — the commit where
that version last changed.
Prove it by making another change:
echo "a fix" >> plugins/alpha/feature.md
git add -A && git commit -qm "fix(alpha): correct it"
skillup plan --path .
It counted from 0.4.0 — the version you just committed — not from 0.3.0.
The manifest's own history is the baseline, which is why an untagged repository
is a perfectly good input.