# Verifying the install **Status**: Stable **See also**: [[Installation]] | [[FOSS-Quickstart]] `curl ... | sh` asks you to run code you have not read, from a machine you do not control. That is a real thing to be uneasy about. This page says exactly what the hive-mcp installer trusts, what it proves, and how to check it yourself. ## What the one-liner trusts ```bash curl -fsSL https://hive-mcp.com/install.sh | sh ``` 1. **TLS to hive-mcp.com**, which redirects to the installer attached to the latest release on GitHub. It points at a *release asset*, not at a branch, so a push to `main` cannot change what your one-liner runs. 2. **The release assets.** This is the part you do not have to take on faith: every file is checked against a signed `SHA256SUMS` before it is made executable. 3. **Nothing else.** It never asks for root, writes only to `~/.local/bin` and your skills directory, and touches no shell rc file unless you pass `--setup`. ## What it proves, and what it says when it cannot The installer reports three tiers when it finishes. A tier that could not run says so; it is never quietly counted as a pass. | Tier | Checks | Needs | On failure | |---|---|---|---| | **Checksums** | the sha256 of every downloaded file against `SHA256SUMS` | `sha256sum`, `shasum` or `openssl` | hard stop, nothing installed | | **Signature** | an Ed25519 signature over `SHA256SUMS` | an `openssl` that does raw Ed25519 | hard stop | | **Provenance** | which workflow, repo and commit built the binary | `gh` | reported unavailable, install continues | Two details matter more than they look: **"Cannot check" is never reported as "checked."** Before trusting `openssl` for the signature, the installer verifies a published [RFC 8032](https://datatracker.ietf.org/doc/html/rfc8032#section-7.1) test vector with it. If that fails, the tool cannot do Ed25519 (macOS ships LibreSSL as `openssl`, which cannot) and the tier reports itself *unavailable*. If the test vector passes but your download does not, that is not a tooling problem, and the install stops. **The script is parsed before any of it runs.** Everything is inside a function called on the last line, so a connection that drops mid-transfer cannot leave you having executed half an installer. ## Checking it yourself The strongest check available to you is a **second origin**. The script and the binaries come from GitHub; the expected checksum and the signing key are served from our own cluster. Passing both means both systems would have to be compromised and agree on the same lie, rather than either one being enough. ```bash curl -fsSL https://hive-mcp.com/install.sh -o install.sh curl -fsSL https://hive-mcp.com/install.sh.sha256 sha256sum -c install.sh.sha256 # macOS: shasum -a 256 -c less install.sh sh install.sh ``` To check the pinned signing key against that second origin: ```bash curl -fsSL https://hive-mcp.com/hive-signing-key.pub sed -n 's/^HIVE_SIGNING_KEY="\(.*\)"$/\1/p' install.sh ``` They must be the same string. The installer pins the key so it can verify with no network beyond the download; the cluster publishes it so you can check the pin against something that is not GitHub. To check a release's provenance directly: ```bash gh attestation verify ~/.local/bin/hive --repo hive-agi/hive-mcp-cli ``` That names the workflow and the commit that produced the binary. It is the one check a stolen signing key would not survive, because the attestation is bound to a GitHub OIDC identity rather than to a key we hold. ## If you would rather not run it at all The installer is a convenience. Nothing it does is secret: ```bash go install github.com/hive-agi/hive-mcp-cli/cmd/hive@latest go install github.com/hive-agi/hive-mcp-cli/cmd/hive-setup-mcp@latest hive guide --install hive setup ``` Or skip the CLI and follow [[Installation]] by hand. ## What this does not cover Being straight about the edges: - **The host and its addons.** `hive setup` clones hive-mcp over HTTPS and resolves Maven artifacts from Clojars. Those carry their own trust story, and it is not this one. - **A compromise of both origins at once.** If GitHub and our cluster were compromised together, every check here passes. Provenance is the layer that still helps, because it is anchored in a public transparency log rather than in anything we hold. - **Reproducible builds.** The binaries are not yet byte-reproducible from source, so provenance tells you *which* workflow built them, not that you can rebuild the same bytes yourself. ## Reporting a mismatch If a checksum or signature ever fails, **do not retry, and do not work around it**. A retry that succeeds is worse than the failure. Open an issue at with the two hashes the installer printed.