The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Whisper listing page.
Give your agent a real, routable Whisper IPv6 identity - one command.
whisper is the command-line client for Whisper: a single
static binary that gives an agent a real, routable IPv6 /128 on AS219419, wires
egress so the agent's traffic sources from that address, and verifies it end-to-end.
The address is the identity - DNSSEC-signed, DANE-pinned, and resolvable in public
RDAP. One binary, standard ports, no config to get
started.
It is two surfaces over one core: a fully scriptable Cobra
CLI, and a full-screen Bubble Tea TUI when
you run whisper on a terminal with no subcommand. And it talks to the
whisper.security graph: whisper query for raw Cypher,
whisper graph for the 29-recipe catalog (below).
The one-liner fetches the signed binary straight from this repo's GitHub Releases,
verifies its SHA-256 (and its PGP signature when gpg is present), and puts it on your
PATH:
Windows (PowerShell):
Homebrew (macOS/Linux):
Scoop (Windows):
With Go:
With mise (GitHub-release backend, no plugin):
(asdf has no built-in GitHub-release backend, so on asdf use mise, or a community
ubi-style plugin.)
On Debian/Ubuntu (apt) - signed repo:
On Fedora/RHEL (dnf) - signed repo:
On Alpine (apk) - signed repo:
All three repos are served from our own infrastructure (AS219419) and signed with the
Whisper package key (get.whisper.online/whisper.gpg; the apk repo uses its own
whisper-apk.rsa.pub).
Or download the binary for your platform from the
Releases page, make it
executable, and put it on your PATH.
The installers (
scripts/install.sh,scripts/install.ps1) are published here so the whole install path is inspectable. They are the same scriptsget.whisper.onlineserves, differing only in where they download from by default: these fetchwhisper-<os>-<arch>(plus.sha256and.asc) from this repo's releases, the served copy fetches the same binaries fromcli.whisper.online/dl. Either way SHA-256 is a hard gate - a mismatch aborts the install - and the PGP check is an extra layer. PointWHISPER_CLI_BASEat any mirror to override the source.
Releases are signed with the AS219419 PGP key:
The public key is published at https://as219419.net/. To verify a binary you downloaded manually:
A good signature reports Good signature from the key with the fingerprint above.
Run whisper with no arguments for the guided flow. It signs you in (browser device
login or a pasted API key), helps you name and create an agent if you don't have one,
then connects and verifies:
Naming is mandatory - an agent's name is part of its identity, so the flow asks before it creates one. The same steps are scriptable:
whisper ip is exit-code-first: 0 when the observed egress address is inside
2a04:2a01::/32 and equals your selected agent's /128, 1 otherwise - so scripts
and agents can gate on it. Add --json to any command for the raw, scriptable envelope.
Per-project agent identity for Claude Code. whisper init claude makes a project
zero-config: run it once in a directory and Claude Code there - and every subagent it
spawns - egresses from that project's own /128, over SOCKS5 (default) or --tier wireguard. It pins the project's agent + tier in .whisper/config, wires a local proxy
into .claude/settings.local.json (merge-safe - it never clobbers your settings), and
keeps the connection up via a small auto-reconnecting daemon. Different projects, different
identities, nothing to remember. Pass --agent <name|/128> to reuse an existing agent or
--name <new> to mint one.
Other useful commands: whisper list, whisper logs, whisper policy, `whisper rdap
The same whisper.security graph the Whisper resolver
consults on every lookup - 7.4B nodes (hostnames, IPs, ASNs, certs, threat intel), 39B
relationships - is a first-class CLI surface. whisper query runs raw parameterised
Cypher; whisper graph runs a named recipe from the embedded catalog:
Direct recipes answer with one result table (--json emits the raw
{columns,rows,statistics} envelope); flow recipes stream their steps as NDJSON - pipe
them to jq. Every recipe documents itself: whisper graph <recipe> --help.
query and graph authenticate with your API key (whisper login, WHISPER_API_KEY,
or --key). The graph endpoint itself is two-tier: the direct read verbs
(whisper.identify, whisper.assess, whisper.variants, whisper.explain,
db.schema, ...) also answer keyless and rate-limited - no account needed:
A key lifts the rate limit and unlocks raw Cypher and the multi-step flows. The same
tools ride the MCP server (whisper mcp): whisper_graph_query plus one tool per
recipe. Docs: www.whisper.security/docs - the raw
Cypher API at /docs/cypher-api, per-verb
pages under /docs/whisper-graph.
Your agent's /128 carries a per-agent EC P-256 key, pinned in DNSSEC-signed DNS - so it can sign a document as itself and anyone can verify it with no account and no certificate authority. Trust is anchored by DANE, not a CA you have to install.
The per-agent verification key a stranger resolves is the agent's DANE TLSA 3 1 1 (and, for signatures, its SMIMEA 3 1 1) - both DNSSEC-signed and checkable with dig + openssl, no Whisper account. Full guide, including the byte-exact signature envelope: https://whisper.online/docs/sign-encrypt.
/128 out of 2a04:2a01::/32, announced by AS219419 - your
own internet address, not a shared NAT pool.ip6.arpa PTR) resolves to the agent; the assignment is
visible in public RDAP at rdap.whisper.online.whisper connect provisions a local proxy whose
traffic sources from your /128; whisper ip proves the source address is yours,
node-free and with no third party in the loop. --tier wireguard brings the /128 up
as a routed address over a userspace WireGuard tunnel (wireguard-go netstack - still
no root, no kernel wg, no TUN device), fronted by the same local proxy so tools need
no change.Same identity + egress from your language of choice - thin wrappers over this CLI:
Python - pip install whisper-id
Node - npm i whisper-id
The official image runs the CLI as an egress sidecar so any container leaves from your /128:
whisper init compose and whisper init k8s emit a ready-to-merge sidecar manifest.
Multi-arch (amd64/arm64), distroless, ~18 MB.
Requires Go 1.25+.
Cross-compile every supported platform into dist/ (binaries + .sha256, named exactly
as the release assets):
platforms.txt is the single source of truth for the target matrix - shared by
build-all.sh and the installers.
This repository is the Whisper client: identity, egress, connect, verify, the security-graph surface and the TUI. It is MIT, and what you build from it is that client.
The published binaries are not only that. whisper also carries Whisper's endpoint
sensor - the service, sensor and posture commands - and the sensor is not open
source today. It ships as a binary and its sources stay closed, so a binary from a release,
from curl -fsSL https://get.whisper.online | sh, or from apt, dnf, apk, brew or scoop has those
commands. Anything BUILT from this tree does not: go install, a local go build, and the
snap, which snapcraft builds from source.
Two consequences worth stating plainly. The MIT licence covers the source in this repository, not the additional closed component in the published binaries. And if you want the endpoint sensor, install a released binary rather than building from source.
| OS \ Arch | amd64 | arm64 | arm | riscv64 | mips | mipsle | 386 |
|---|---|---|---|---|---|---|---|
| linux | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| darwin | ✓ | ✓ | |||||
| windows | ✓ | ✓ |
linux-arm is 32-bit ARMv7. Every target is a static, CGO-free build, and every one is
signed with the AS219419 release key.
Issues and pull requests are welcome - see CONTRIBUTING.md. Run
go build ./..., go vet ./..., go test ./..., and gofmt -l . before opening a PR.
To report a security issue, see SECURITY.md.
MIT © 2026 viaGraph B.V. (Whisper Security) - for the source in this repository. The published binaries additionally contain the closed-source endpoint sensor; see Source here, binaries there.
The embedded Mozilla CA certificate list
(internal/client/cabundle/mozilla-cacert.pem) is distributed under the Mozilla Public
License 2.0.