# Use Beeper through 32 supported actions.

Ghostget exposes 32 semantic operations for one already-authorized [Beeper Desktop](https://www.beeper.com/) 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.5.0 in v0.18.28. Run `ghostget capabilities beeper-local --json` for the exact state installed on your machine.

## Choose direct Beeper or Ghostget

**Use Beeper directly when you want its first-party breadth.** Connect the [built-in Beeper Desktop MCP](https://developers.beeper.com/desktop-api/mcp/) to a supported client, or use the [official Beeper CLI](https://github.com/beeper/cli) for its broader first-party command surface.

**Choose Ghostget when the boundary is part of the requirement.** Native Beeper CLI and Desktop MCP paths may expose broader first-party breadth. Ghostget 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.

Browse [Beeper's supported action names and access methods](https://ghostget.com/docs/reference/provider-capabilities/#provider-beeper).

## Bind one official CLI and one Desktop target

Install the pinned official CLI, authorize it to the local Desktop app, install Ghostget's reviewed adapter manifests, then bind an auth identity to the exact Beeper account and Desktop realm.

```
brew install beeper/tap/cli
beeper setup
ghostget adapter sync-bundled --json
ghostget auth add beeper-main --linked-device beeper \
  --device-store "${HOME}/.beeper"
ghostget auth bind beeper-main --site beeper
```

If a package manager installs different bytes, extract the matching release asset for your platform and place the executable at `<GHOSTGET_STATE_HOME>/tools/beeper/0.6.2/beeper`. When `GHOSTGET_STATE_HOME` is unset, the default state root is `~/.local/share/ghostget`. The artifact table below links the direct official asset for every supported macOS and Linux architecture. Ghostget 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 Ghostget adds to the official Beeper CLI

[Beeper publishes the upstream CLI](https://github.com/beeper/cli). Ghostget 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.

Ghostget 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 |
| --- | --- | --- |
| Ghostget release | `v0.18.28` | The installable CLI, SDK, plugin catalog, and public support directory |
| Adapter | `beeper-local` 2.5.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](https://github.com/beeper/cli/releases/tag/v0.6.2) and the [CLI manual](https://github.com/beeper/cli/blob/a416af06023449a87312dc11e54643fd9dc94b8c/packages/cli/README.md).

| Runtime | Download | Archive SHA-256 | Executable SHA-256 |
| --- | --- | --- | --- |
| macOS arm64 | [Official release asset](https://github.com/beeper/cli/releases/download/v0.6.2/beeper-cli-0.6.2-macos-arm64.zip) | `688ccde7e7d044d33980cd06474bf1ae7215ccf8ca79967262fa3bfb85a2589a` | `48aa895449129c793a212ea19f69a534adc34a8adc4037ca1d7da9e648716425` |
| macOS x64 | [Official release asset](https://github.com/beeper/cli/releases/download/v0.6.2/beeper-cli-0.6.2-macos-x64.zip) | `4113a1979cfbd7839f14743158e70c12efa941313afb77ab2b11a08309196186` | `83bb89edb6eeb9c61ebdb6ec940e0db30c90ecbca61d60a7408fe336e255f22e` |
| Linux arm64 | [Official release asset](https://github.com/beeper/cli/releases/download/v0.6.2/beeper-cli-0.6.2-linux-arm64.tar.gz) | `2bd37043a4ed863621edc59e28aaa652e8193e55abca0e9477f5aeae1c65d629` | `102b8725bd99b03905dcff9fff645f3742e1697ce8d43ab9d8656896aafd12a8` |
| Linux x64 | [Official release asset](https://github.com/beeper/cli/releases/download/v0.6.2/beeper-cli-0.6.2-linux-x64.tar.gz) | `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. Ghostget 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>"}
```

```
ghostget messaging routes --input @/absolute/private/beeper-routes-request.json \
  --private-output /absolute/private/beeper-routes.json --json
ghostget messaging resolve --input @/absolute/private/beeper-resolve-request.json \
  --private-output /absolute/private/beeper-route.json --json
ghostget messaging context --input @/absolute/private/beeper-context-request.json \
  --private-output /absolute/private/beeper-context.json --json
ghostget messaging preview --input @/absolute/private/beeper-turn.json \
  --private-output /absolute/private/beeper-preview.json --json
```

The 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.

```
ghostget confirm <preview-digest> \
  --private-output /absolute/private/beeper-receipt.json \
  --receipt-binding-output /absolute/private/beeper-receipt-binding.json --json
```

For agentic text sends, Ghostget 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 Ghostget 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.

```
ghostget beeper export-message-like-me --auth beeper-main \
  --output /absolute/path/to/new-message-like-me-bundle --json

umask 077
ghostget beeper export-contact-interactions --auth beeper-main --json \
  > /absolute/private/path/beeper-contact-interactions.json
```

Both 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. Ghostget 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. Ghostget 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 Ghostget 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: Ghostget 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](https://developers.beeper.com/desktop-api/) and warns that sending too many messages may result in suspension by connected networks. Ghostget bounds each operation, but it cannot waive Beeper's terms or a network's throttling, automation, or suspension rules.

## Inspect the local state before binding an account

Install [Ghostget v0.18.28](https://ghostget.com/docs/tutorials/getting-started/), run `ghostget doctor --json`, browse [Beeper's supported action names and access methods](https://ghostget.com/docs/reference/provider-capabilities/#provider-beeper), then read the [security and local-custody guide](https://ghostget.com/docs/explanation/security-model/).
