Install skillup¶
Three ways in, in the order you should reach for them.
From the Go module proxy¶
Needs Go 1.26.5 or newer. The binary lands in $(go env GOPATH)/bin, which has
to be on your PATH.
The main package lives at cmd/skillup/, so the path ends in /cmd/skillup.
Installing the module root fails — it has no main package.
Pin it¶
Install a tag, not @latest. skillup decides whether a change ships to
consumers; a pipeline that installs @latest changes that decision without a
commit saying so, and the change arrives on whichever merge request happens to
run next.
A pinned version is also something Renovate can raise a merge request for, so pinning costs nothing in currency and buys a reviewable diff:
Below 1.0 the CLI surface may change between minor versions, which is the other reason to pin.
From a release binary¶
Every release attaches pre-built archives for Linux, macOS and Windows on amd64
and arm64, plus a checksums.txt. Use these where there is no Go toolchain.
Take them from the releases page, or via the API:
VERSION=v0.1.0
ASSET=skillup_Linux_x86_64.tar.gz
URL=$(curl -sSf "https://gitlab.com/api/v4/projects/phpboyscout%2Fskillup/releases/${VERSION}" \
| python3 -c "import json,sys;print(next(l['url'] for l in json.load(sys.stdin)['assets']['links'] if l['name']=='${ASSET}'))")
curl -sSfL "$URL" | tar -xz skillup
sudo install -m 0755 skillup /usr/local/bin/skillup
The archive names follow the pattern skillup_{Linux,Darwin,Windows}_{x86_64,arm64}.tar.gz.
Verify against checksums.txt from the same release if you care to — it is
attached alongside the archives.
From a clone¶
Only worth it when you intend to change skillup itself.
git clone https://gitlab.com/phpboyscout/skillup.git
cd skillup
just # tidy + generate + build → bin/skillup
Without just:
Check it worked¶
$ skillup version
Version: v0.1.0
Build: b49e74b79b7ae285ca9cc85867919519456ffc46
Date: 2026-08-06T14:38:29Z
That command exists for exactly this reason: it is the one framework built-in skillup keeps, because "which build produced this answer" is a fair question to ask of a tool that decides what ships.
A release binary reports the tag. A build from a clone reports a Go
pseudo-version instead — derived from the last tag and the commit it was built
at, with +dirty appended when the working tree was modified:
$ skillup version
Version: v0.1.1-0.20260811135546-3ed0c64277ef+dirty
Build: 3ed0c64277efdb8d06ac9f6ea91f407382107a1e-dirty
Date: 2026-08-11T13:55:46Z
So a released build and a local one are never mistakable for each other — which is the thing you want to establish first when a pipeline starts disagreeing with you.
$ 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
There is nothing to configure and nothing to initialise — skillup takes everything it needs from its arguments and the repository in front of it.
Where next¶
- Your first run — ten minutes, nothing permanent
- Set up the gate in GitLab CI or in GitHub Actions