Verify the binary. Diagnose the connection. Change only your named client entry.

The Apache-2.0 CLI is published as immutable Linux AMD64 and ARM64 binaries with SHA-256 checksums and GitHub build provenance. It never accepts a gateway credential as a command-line value or writes one into client configuration.

Install the immutable release

Choose amd64 for x86_64, or arm64 for aarch64 and arm64. Verify the downloaded digest against the release checksum file, then verify that GitHub's signed provenance binds the binary to null-select/cli and its tag-triggered workflow.

Terminal
VERSION=v0.2.0
ARCH=amd64 # use arm64 on aarch64/arm64 systems
curl -fLO "https://github.com/null-select/cli/releases/download/$VERSION/nullselect_linux_$ARCH"
curl -fLO "https://github.com/null-select/cli/releases/download/$VERSION/checksums.txt"
shasum -a 256 --check checksums.txt --ignore-missing
gh attestation verify "nullselect_linux_$ARCH" --repo null-select/cli
install -m 0755 "nullselect_linux_$ARCH" "$HOME/.local/bin/nullselect"
nullselect version

Provenance identifies where and how the artifact was built. It does not replace review, endpoint policy, or runtime controls.

Keep the credential out of arguments and files

Copy the one-time credential from Access into an environment variable. The CLI receives only the variable name during installation. mcp doctor reads the value at runtime and verifies authentication, protocol negotiation, server identity, and tool discovery.

Terminal
export NULL_SELECT_CREDENTIAL='the credential shown once in Access'
nullselect mcp doctor
nullselect mcp install --client codex
# or: nullselect mcp install --client claude-code --scope user

Use the client paths tested from the release artifact.

Codex CLI 0.162.1

User-scope native Streamable HTTP configuration stores the endpoint and NULL_SELECT_CREDENTIAL variable name. Add, inspect, remove, doctor, and post-revocation denial passed.

Claude Code 2.1.296

User- and project-scope native HTTP configuration expands the environment variable at runtime. Add, live connection, inspect, remove, doctor, and revocation passed.

Portable project config

The CLI can atomically add or remove its named entry in workspace .mcp.json while retaining unrelated entries and writing a backup before replacement.

Configuration-only targets

Cursor, VS Code, and GitHub Copilot configuration contracts pass release-artifact install/remove tests. They are not supported application rows.

Verify an evidence packet offline

Download one signed packet from an execution in Audit, then verify it without a null.select account, gateway credential, or network connection. The verifier checks the canonical Ed25519 manifest, exact ZIP members and member digests, the complete audit hash chain, release evidence, and activation evidence. The release embeds the current production public key. The published key set supports retained rotation keys.

Terminal
nullselect evidence verify null-select-pkt_….zip

# For a retained key added after this binary was released:
curl -fLo evidence-keys.json   https://console.null.select/.well-known/null-select-evidence-keys.json
nullselect evidence verify --keyring evidence-keys.json null-select-pkt_….zip

The packet omits raw arguments, prompts, outputs, upstream response bodies, and secrets. Verification establishes packet integrity; it is not a certification of upstream effects that null.select could not observe.

Remove only the null.select entry

Uninstall is idempotent and targets the selected server name. File-based changes preserve unrelated JSON and create a timestamped backup.

Terminal
nullselect mcp uninstall --client codex
# or: nullselect mcp uninstall --client claude-code --scope user
unset NULL_SELECT_CREDENTIAL

Linux is the published binary matrix.

The release contains only Linux AMD64, Linux ARM64, and their checksum file. macOS and Windows builds are not customer downloads. Claude Desktop is rejected on Linux rather than inventing an unsupported path. Exact artifact digests and verification evidence are recorded in the public repository.

Issue an expiring credential, then verify the connection before opening your client.

Open Access