wipeme CLI encrypts locally and supports text, attachments,
manual passphrases, generated passwords, one-time reading, and direct child-process
injection.
Install the CLI
Install
wipeme with Homebrew, APT, DNF, a release archive, or Go.#; otherwise a shell may treat the fragment as a
comment. The fragment remains local decryption material and is never sent to the
server.
Create a message
Runwipeme, enter a multiline message, and press Ctrl-D:
3-3-3#3-3-3-3.
Manual-passphrase creation
SettingWIPEME_PASSPHRASE selects manual mode. The passphrase may contain
Unicode text from 8 through 256 characters and is not included in the link:
WIPEME_PASSPHRASE always selects manual mode. Leave it unset
for an automatic fragment-key link.
Attachments and pipelines
--attach flags are supported. Each encrypted
attachment has a corresponding ordered document block, so attachment-only messages
remain visible in the browser. Filenames, MIME types, presentation kind, dimensions,
and bytes remain encrypted.
Generate and transfer a password
portable, alnum,
base58, base64url, hex, digits, letters, and ascii. Use --alphabet
for an exact custom printable-ASCII alphabet and --no-require-each to disable
applicable class guarantees.
During generated child execution, stdout belongs only to the child. Use
--link-file for a mode-0600 link file or --copy; otherwise a labelled private
link is written to stderr before the child starts.
Read a one-time message
- URL fragment
--passphrase-file FILE--passphrase-stdin--passphrase-env NAMEWIPEME_PASSPHRASE- Up to three hidden terminal prompts, unless
--non-interactiveis enabled
0600 and existing files are never overwritten.
Attachment filenames are reduced to safe basenames. read intentionally exposes
selected plaintext on stdout unless an output file is selected.
Inject a secret into a child process
exec consumes a message and places the first compatible text block in a child
environment variable:
-- is executed directly; the CLI never inserts a shell. The
secret is not placed in child arguments or CLI output. Child exit status is
propagated, and SIGINT/SIGTERM are forwarded on Unix.
Credential transport variables—including WIPEME_PASSPHRASE, --passphrase-env,
and --link-env sources—are removed from the child environment. Unrelated parent
variables remain. The child can still print or exfiltrate its own environment, so
only execute trusted programs.
Exit codes
After a child starts,
exec propagates its exit status directly.
MCP server
wipeme mcp is included in the published v0.3.0-alpha.3 preview. See the
dedicated MCP guide for recommended workflows and
installation instructions.
MCP stdin and stdout belong only to newline-delimited JSON-RPC. The default
host
mode relies on the MCP host, operating-system permissions, sandbox, and approval
flow. Restricted mode additionally requires configured roots and uses
administrator-defined process profiles. Commands execute directly without a shell,
and process stdout/stderr are never returned.
0600 inside a
mode-0700 directory and permit retries after destructive retrieval without a
second server request.
Protected link sources
A complete private link is a bearer capability.read, exec, and delete accept
exactly one of:
- positional private link;
--link-file FILE;--link-env NAME.
--passphrase-stdin is rejected for exec because it conflicts with
child stdin.
Do not use plaintext read output on stdout in an agent-controlled terminal. Prefer
read --output for a protected, non-indexed file or exec --set-env for direct
injection into a trusted child process.
Delete an unopened message
Output, receipts, and progress
0600 and refuse to overwrite existing paths. A
manual-mode creator receipt contains the passphrase and must be protected like the
message itself.
--qr keeps the private link on the first output line, prints a compatibility
caption, and then uses the QR library’s native compact half-block renderer. Compact
output requires a Unicode terminal with block-character support and a monospaced
font. If it is distorted or unreadable, use --qr-big for the library’s full-size
compatibility renderer. --qr and --qr-big are mutually exclusive.
--qr-invert works with either renderer and swaps module colors for the opposite
terminal background. An automatic-key QR contains the complete private link and its
fragment secret, so terminal screenshots and recordings containing it are secret.
A manual-passphrase QR contains only the public link; the recipient still needs the
separately shared passphrase. Neither QR mode can be combined with --json.
On an interactive terminal, stderr displays byte-counted encryption and upload
progress. Progress is suppressed when stderr is redirected or JSON output is used.
Configuration
Preferences may be stored in/etc/wipeme/config.yaml or
~/.wipeme/config.yaml:
api_url and site_url independently.
Configuration priority is CLI flags, environment, user file, system file, then
built-in defaults. Supported environment preferences include
WIPEME_SERVER_URL, WIPEME_API_URL, WIPEME_SITE_URL, WIPEME_EXPIRES, and
WIPEME_COPY. Do not store private links or passphrases in YAML configuration.
Attachment metadata cleanup
Before encryption, the CLI removes supported private metadata from a temporary local copy and never changes the source file:- JPEG/JPG: EXIF/XMP, IPTC/Photoshop metadata, and comments;
- PNG/APNG:
eXIf, textual metadata, time, and physical-dimension chunks; - WebP: EXIF and XMP chunks and their feature flags;
- MP3: ID3v2 and ID3v1 tags.
Installation
Installation is documented separately so the command examples remain easy to scan.CLI installation
Choose Homebrew, APT, DNF, direct downloads, or Go installation.
Limits and security status
Free anonymous messages are limited to a 3 MiB encrypted envelope and a maximum unopened expiry of 14 days. Every message is claimed at most once. For implementation details and the complete flag reference, see thewipe-me/cli repository.