skt — toolchain manager

Give skt a `<tool>@<version>` and a platform. It resolves the full version, downloads and checksum-verifies the artifact, extracts it into a content cache, and prints the resulting binary path. That's the whole job — your shell or your pipeline owns PATH.

What skt is

skt (skalpai toolchain) is a single static binary that installs developer toolchains — language runtimes like go, node, rust, python, and CLIs like kubectl, trivy, helm — at an exact, pinned version.

It is a version manager in the same family as mise, proto, and asdf, but deliberately smaller in scope: it installs and reports, and nothing else.

Why skt exists

skt replaces the mise dependency in the skalpai toolchain. mise brought a second runtime to bake and pin into CI images, a fragile global-pin/shim mechanism, several MISE_* environment variables leaking into sandboxes, and a plugin registry we did not own.

skt is built around three principles:

The model

skt has exactly one mental model — three layers:

  1. Host — the machine you run on. skt detects your OS and CPU architecture (normalised to Go-style tokens like linux/amd64).
  2. Versioned cache — installs live under <cache>/<tool>/<resolved-version>/<os>-<arch>/. The cache key uses the resolved version, so node@24 and node@24.16.0 share one entry, and a partial pin upgrades automatically when upstream ships a new patch.
  3. Binary path — the only output that matters. skt returns the directory containing the executable (and the executable itself); the caller prepends it to PATH.
{ "tool": "node", "requested": "24", "resolved": "24.16.0",
  "bin_dir": "/cache/node/24.16.0/linux-x64/bin",
  "bin": "/cache/node/24.16.0/linux-x64/bin/node", "cached": true }

A warm cache skips all network access and returns "cached": true.

Quick start

# Install a pinned Go and learn where it landed
skt install go@1.25.5 --json

# Resolve a partial pin to the concrete version, no download
skt resolve node@24

# Run a one-off command against a pinned runtime
skt exec node@24 -- node --version

Next