Skip to content

Install skillup

Three ways in, in the order you should reach for them.

From the Go module proxy

go install gitlab.com/phpboyscout/skillup/cmd/skillup@v0.1.0

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:

{ "extends": ["gitlab>phpboyscout/cicd:go"] }

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:

go build -o bin/skillup ./cmd/skillup

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