Beeper adapter · v0.16.11
Use Beeper through 32 supported actions.
Wrench exposes 32 semantic operations for one already-authorized Beeper Desktop account: 26 operations use the pinned official Beeper CLI 0.6.2, while 6 are fixed Desktop loopback reads. Each request binds its executable or fixed endpoint, account realm, Desktop target, operation contract, input, output, and risk level.
This page describes adapter beeper-local 2.4.0 in v0.16.11. Run wrench capabilities beeper-local --json for the exact state installed on your machine.
Choose direct Beeper or Wrench
Use Beeper directly when you want its first-party breadth. Connect the built-in Beeper Desktop MCP to a supported client, or use the official Beeper CLI for its broader first-party command surface.
Choose Wrench when the boundary is part of the requirement. Native Beeper CLI and Desktop MCP paths may expose broader first-party breadth. Wrench adds exact executable and adapter-version pinning; a named, typed semantic allowlist; write previews, durable receipts, contract-specific reconciliation for generic CLI mutations, and no blind retry after an indeterminate dispatch; encrypted snapshots; and versioned Message Like Me and contact-interaction exports. It wraps only the actions listed for this release.
Read, manage, and send through named contracts
Read
List and read accounts and bridges; list, search, and read contacts and conversations; read message pages, exact messages, and surrounding context; and search bounded message-content windows.
Manage state
Set reactions, archive or pin conversations, change mute or priority state, set or clear private drafts and reminders, and focus one exact Desktop conversation.
Send and change
Send text, files, stickers, or voice; edit an authored message; start a conversation; change read state or group metadata; set disappearing-message retention; send Notify Anyway; and emit bounded presence.
Bind one official CLI and one Desktop target
Install the pinned official CLI, authorize it to the local Desktop app, install Wrench's reviewed adapter manifests, then bind an auth identity to the exact Beeper account and Desktop realm.
brew install beeper/tap/cli
beeper setup
wrench adapter sync-bundled --json
wrench auth add beeper-main --linked-device beeper \
--device-store "${HOME}/.beeper"
wrench auth bind beeper-main --site beeperIf a package manager installs different bytes, extract the matching release asset for your platform and place the executable at <WRENCH_STATE_HOME>/tools/beeper/0.6.2/beeper. When WRENCH_STATE_HOME is unset, the default state root is ~/.local/share/wrench. The artifact table below links the direct official asset for every supported macOS and Linux architecture. Wrench rejects an unpinned executable before private work. The authoritative executable identity is @beeper/cli 0.6.2. Its exact reviewed provenance records this discrepancy: Official v0.6.2 binaries.json and the exact executable report 0.6.2, while package.json at tag a416af06023449a87312dc11e54643fd9dc94b8c declares 0.6.1; executable runtime identity remains authoritative. The tagged source path is packages/cli/package.json, and its declared 0.6.1 is provenance only. A Beeper Desktop update changes the bound runtime realm and requires explicit review and rebind.
What Wrench adds to the official Beeper CLI
Beeper publishes the upstream CLI. Wrench exposes reviewed outcomes from that CLI for 26 operations and from 6 fixed Desktop loopback reads instead of exposing a command name and arbitrary arguments or a caller-selected request. The caller cannot select a command, flag, endpoint, target, environment variable, output path, or user-installed CLI plugin.
Wrench starts the executable directly without a shell, removes ambient credentials and target defaults, isolates oclif user-plugin state, and stages files only from digest-bound plan assets. Private text accepted by the upstream CLI as an argument can remain visible to same-account local process inspection while the child runs.
Each supported platform is bound to exact archive and executable SHA-256 values. A reported version, package-manager formula, release tag, or compatible-looking update is not execution authority.
Keep each version boundary separate
| Boundary | Current identity | What it controls |
|---|---|---|
| Wrench release | v0.16.11 | The installable CLI, SDK, plugin catalog, and public support directory |
| Adapter | beeper-local 2.4.0 | The public operation catalog and selected source-plugin contracts |
| Semantic contracts | Contract versions 1, 2, 3 across the current 32 operations | Each operation's input, output, risk, side effect, and completeness |
| Official CLI | Beeper CLI 0.6.2 at a416af06023449a87312dc11e54643fd9dc94b8c | The exact upstream client, further bound by one executable digest per platform |
| Reviewed SDK semantics | @beeper/desktop-api 5.0.0 at b9c1714410139c2139b597338cd002d785653e85 | The response semantics reviewed behind the CLI, not a claim about the running Desktop version |
| Runtime Desktop realm | Bound bundle ID, advertised version, loopback target, and hashed self account | The exact local Desktop instance authorized to execute |
These identities answer different questions and do not form a compatibility range. A new CLI artifact or Desktop build requires separate review.
Pinned executable artifacts
The reviewed CLI release commit is a416af06023449a87312dc11e54643fd9dc94b8c. Its release-manifest SHA-256 is 5c52b533180151b97e26138ef687b6b819170687b34a478184e5648335356950. Review the official 0.6.2 release and the CLI manual.
| Runtime | Download | Archive SHA-256 | Executable SHA-256 |
|---|---|---|---|
| macOS arm64 | Official release asset | 688ccde7e7d044d33980cd06474bf1ae7215ccf8ca79967262fa3bfb85a2589a | 48aa895449129c793a212ea19f69a534adc34a8adc4037ca1d7da9e648716425 |
| macOS x64 | Official release asset | 4113a1979cfbd7839f14743158e70c12efa941313afb77ab2b11a08309196186 | 83bb89edb6eeb9c61ebdb6ec940e0db30c90ecbca61d60a7408fe336e255f22e |
| Linux arm64 | Official release asset | 2bd37043a4ed863621edc59e28aaa652e8193e55abca0e9477f5aeae1c65d629 | 102b8725bd99b03905dcff9fff645f3742e1697ce8d43ab9d8656896aafd12a8 |
| Linux x64 | Official release asset | a881e1d2bc91e31218b251716644ec5f8d161d5ccb30e7eab66cf2ba6410511d | 723cc3a6c556fa21b6ba11db8377d6a29776aca1660da48f0072883d6452ae3d |
Resolve and preview one exact Beeper turn
Keep each request and result in a distinct owner-only file. routes returns the V2 bounded discovery artifact and opaque references. Put one candidate routeRef in the private V2 resolve request. Wrench reloads the checked account and conversation target from encrypted private state and performs conversations.read. The caller never resupplies a network, account, conversation ID, name, title, or participant match.
{"schemaVersion":2,"format":"wrench.messaging-route-resolve-request","routeRef":"<candidate-route-ref>"}wrench messaging routes --input @/absolute/private/beeper-routes-request.json \
--private-output /absolute/private/beeper-routes.json --json
wrench messaging resolve --input @/absolute/private/beeper-resolve-request.json \
--private-output /absolute/private/beeper-route.json --json
wrench messaging context --input @/absolute/private/beeper-context-request.json \
--private-output /absolute/private/beeper-context.json --json
wrench messaging preview --input @/absolute/private/beeper-turn.json \
--private-output /absolute/private/beeper-preview.json --jsonThe private preview shows the exact recipient, conversation, ordered bubbles, replies, expiry, and digest. Stop after preview by default. Confirm only after the owner reviews that exact private preview and makes a fresh same-turn request to send the visible recipient and bubbles.
wrench confirm <preview-digest> \
--private-output /absolute/private/beeper-receipt.json \
--receipt-binding-output /absolute/private/beeper-receipt-binding.json --jsonFor agentic text sends, Wrench performs one fixed POST to the bound Beeper Desktop loopback endpoint after the exact route and context preflight. This path does not call the CLI or SDK and never retries. Desktop's returned pendingMessageID proves submission to Desktop only, not network delivery. A separately obtained exact read may be inspected after a timeout, signal, malformed response, or lost response, but it cannot match this run by body, recipient, time, or nearby messages. Without an already accepted exact provider message identity, the run remains indeterminate and unretriable; only that identity could make reconciliation categorical.
Export local history for another bounded tool
Separate Wrench workflows can produce a private Message Like Me bundle or a body-free contact-interaction summary from Beeper's locally materialized history. These workflows are not part of the 32 supported actions.
wrench beeper export-message-like-me --auth beeper-main \
--output /absolute/path/to/new-message-like-me-bundle --json
umask 077
wrench beeper export-contact-interactions --auth beeper-main --json \
> /absolute/private/path/beeper-contact-interactions.jsonBoth exports retain incomplete-coverage evidence. The contact view excludes message bodies, attachments, reactions, media, group messages, names, titles, handles, credentials, and local paths. Provider coordinates can identify a person, so body-free does not mean anonymous.
Limits remain visible
Beeper CLI 0.6.2 exposes no continuation for several list and search commands and may cap those CLI-backed results below the requested limit. Contact list contract 3 walks Desktop contact pages with opaque before/after cursors and can return up to 200 contacts in one call; contracts 1 and 2 stay on the official CLI first-page window. Desktop message reads use the same cursor style plus an optional sender filter; callers must pass those returned values rather than deriving cursors from message IDs. Wrench returns bounded candidate windows instead of claiming complete history.
The checked coverage ledger fully accounts for all 101 public manual command paths; that is provenance coverage, not supported-command parity. Forty-one paths collapse to the 32 semantic operations. accounts use is absorbed into explicit account IDs; targets status, version, and top-level export are internal; accounts add, accounts remove, and messages delete are R4 and unavailable to provider dispatch; and plain status is among the 53 unsupported paths. None of those three R4 paths appears in the selected 32-operation provider adapter.
messages.delete is deliberately inert. Upstream --for-everyone requests can fall back to deletion for only the authenticated user when a network cannot delete for everyone, while the reviewed Desktop endpoint returns a void success response. Wrench therefore cannot prove the requested network-visible effect, never dispatches this action, and does not turn a local disappearance into a deletion receipt.
media.download remains unavailable because the official CLI buffers the complete media body to stdout before Wrench can enforce a streaming byte bound; no reviewed bounded worker accepts only a prior-message-bound opaque media handle. watch and outbound webhooks remain unavailable because their open-ended stream has no reviewed finite supervisor and proven termination contract. The top-level CLI export is internal-only: Wrench invokes a fixed, bounded, owner-private shard workflow with --no-attachments; callers cannot select raw export arguments, paths, or coverage claims.
Beeper recommends its Desktop API for personal use and warns that sending too many messages may result in suspension by connected networks. Wrench bounds each operation, but it cannot waive Beeper's terms or a network's throttling, automation, or suspension rules.