magus v0.4.2 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
2 min read

Install on macOS

Note

Neither macOS target is covered by CI. darwin/arm64 is the primary development platform, so the suite runs against it constantly by hand. darwin/amd64 is built natively on an Intel runner, so it compiles and links, but is never executed.

See platform support for the full matrix.

magus ships as a single self-contained binary. Download it with curl, extract it into a PATH directory you own - no root, no sudo - then verify it before first run.

Quick install

# The hosted docs substitute the latest release tag below; on GitHub it reads
# literally - get the real value from https://github.com/egladman/magus/releases
VERSION=v0.4.2
ASSET=magus_${VERSION}_darwin_arm64_static.tar.gz       # Apple Silicon
# Intel Macs:
#   ASSET=magus_${VERSION}_darwin_amd64_static.tar.gz
curl -fLO "https://github.com/egladman/magus/releases/download/${VERSION}/${ASSET}"
mkdir -p ~/.local/bin
tar -xzf "${ASSET}" magus
mv magus ~/.local/bin/
magus version

The archive also carries LICENSE, THIRD-PARTY-NOTICES, README.md, and a BUILDINFO file naming the exact version, commit, platform, and variant. Naming magus on the tar line above extracts just the binary; drop it to unpack all of them. BUILDINFO is readable without running anything, which is the point if a dynamically linked build will not start.

${VERSION} above is the current release. The _static archive is the installer default and what magus self update fetches.

Verify the download

Fetch the manifest and its signature next to the tarball:

curl -fLO "https://github.com/egladman/magus/releases/download/${VERSION}/SHA256SUMS"
curl -fLO "https://github.com/egladman/magus/releases/download/${VERSION}/SHA256SUMS.sig"

Then verify the Ed25519 signature first, and only then the checksum - checking a hash against an unverified manifest proves nothing. The exact commands (macOS uses shasum -a 256) are in Verify a release.

OpenSSL 3

Both the install script and the manual openssl pkeyutl steps above need OpenSSL 3 with Ed25519 support. Stock macOS ships LibreSSL as /usr/bin/openssl, which does not have it, so signature verification fails with OpenSSL 3 with Ed25519 support is required to verify releases until a real OpenSSL 3 is ahead of it on PATH:

brew install openssl@3

Homebrew does not link openssl@3 onto PATH by default (it would shadow the system one); either add its bin directory ahead of /usr/bin in your shell rc, or invoke it explicitly as $(brew --prefix openssl@3)/bin/openssl for the verification commands in Verify a release.

Clear the quarantine flag

If macOS blocks the binary ("cannot be opened, unidentified developer"), strip the quarantine attribute Gatekeeper added on download:

xattr -d com.apple.quarantine ~/.local/bin/magus

Put it on your PATH

If magus version prints command not found, the install directory is not on your PATH. Add it once, in your shell rc:

# zsh (default) or bash: append to ~/.zshrc or ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"

Open a new shell afterward, then re-run magus version.

Next steps

downloadinstallmacosapple siliconquarantinepath
Last updated (4f8cc295)
Earlier changes on this page (3)

Full history ↗ · Blame source ↗

Glossary

Target

A named operation (build, test, ...) you invoke with magus run <target>; it may compose a spell's tool-native operations and depend on other targets. See targets.

Op

A single tool-native command a target composes (long form: operation); the middle of the work hierarchy (Spell to Op to Target). See operations.

Ward

A coded diagnostic that inspects a resolved op and nudges or blocks an anti-pattern before it runs. See wards.

CI

An ordinary magusfile-defined target you compose yourself with magus\needs - magus does not hardcode its stages. Magus.RunCI treats it specially only in that it strips the rw charm, it is the anchor magus affected ci keys off, and a selected scope with no project declaring it is a load error rather than a silent no-op. See targets.

Lease

One row of the lease ledger: a piece of work an orchestrating agent handed out, with its goal, the checkpoint it was cut against, and the paths it owns or must not touch. The ledger records; the agent guard is what reads those facts back when grading a write. See doctrine.

Conventions

Admonitions

Call-outs are rendered from GitHub-style alert blockquotes and carry a colored accent per type:

Note

Context worth knowing, but not a warning.

Warning

Something that can bite you if ignored.

The types are NOTE, TIP, IMPORTANT, WARNING, and CAUTION.