Files
omarchy-beeper/docs/SETUP.md
T
prdlk 56b8c73fd1 fix: filter the pile on chat flags and fetch snippets from the message index
Verified against Beeper Desktop 4.3.73 with a real token:

- inbox=primary combined with unreadOnly=true returned 0 of 78 genuinely
  unread chats, and includeMuted=false returned muted chats anyway. Both
  params are gone; muted/archived/low-priority are now decided here from
  isMuted/isArchived/isLowPriority, and a hand-marked-unread chat counts.
- Snippets now come from GET /v1/messages/search (1.1 ms/chat) instead of
  GET /v1/chats/{id}/messages (145 ms/chat), which is kept as the fallback
  for chats the index has not reached. list --limit 50 went 3.33s -> 0.16s.
2026-09-01 11:45:09 -04:00

3.1 KiB

Setup

1. Turn on the Beeper Desktop API

Beeper Desktop serves a local-only HTTP API on http://localhost:23373. Check it is up — this endpoint needs no token:

curl -s http://localhost:23373/v1/info

You should get JSON describing the app and "status": "running". If the connection is refused, Beeper Desktop is not running, or the API is disabled in its settings.

2. Create an access token

In Beeper Desktop: Settings → Integrations → create an access token.

Read access is all this plugin needs. It calls exactly seven endpoints:

Call Why
GET /v1/info Tell "Beeper is down" apart from "the token is wrong"
GET /v1/accounts Network names for the chips, and the account count
GET /v1/chats/search The unread pile (unreadOnly=true)
GET /v1/messages/search The last message of a visible row, for the snippet
GET /v1/chats/{chatID}/messages Snippet fallback for a chat the index has not reached
POST /v1/chats/{chatID}/read Mark a chat read
POST /v1/focus Bring Beeper Desktop forward on a chat

Nothing else. No sends, no edits, no reactions, no drafts.

3. Store the token

~/.config/omarchy/plugins/prdlk.beeper/bin/omarchy-beeper auth

The command refuses to run unless stdin and stderr are both terminals, so a token can never be piped in from a script or a shell history. It reads the token with a hidden prompt, verifies it with one GET /v1/accounts, and only then writes it to:

~/.config/omarchy-beeper/secrets/token.json   # mode 600
~/.config/omarchy-beeper/secrets/            # mode 700

The write is atomic: a temp file in the same directory, fchmod 600, fsync, rename, then fsync on the directory.

4. Check it

~/.config/omarchy/plugins/prdlk.beeper/bin/omarchy-beeper list --limit 5

A healthy answer starts with {"ok": true, "unread": …}. Then click the bar icon.

Troubleshooting

Message Meaning
Beeper Desktop is not running Nothing is listening on localhost:23373. Start Beeper.
token missing or invalid; run: omarchy-beeper auth No token stored, or Beeper rejected it (401/403). Re-run auth.
secret file for beeper is too open; chmod 600 it Someone widened the token file. chmod 600 ~/.config/omarchy-beeper/secrets/token.json.
secret directory for beeper is too open; chmod 700 it chmod 700 ~/.config/omarchy-beeper/secrets.
showing the newest 200 unread chats The pile is deeper than the display cap. Use A to clear it.
Snippets are blank Beeper is still indexing, or that chat has only media. Titles and counts are still correct.
python3 is required The bar could not find python3 on PATH.

The bar is not a login shell, so bin/omarchy-beeper only extends PATH with ~/.local/share/mise/shims and ~/.local/bin. If your python3 lives somewhere else, symlink it into ~/.local/bin.

Removing everything

omarchy plugin remove prdlk.beeper
rm -rf ~/.config/omarchy-beeper

Then revoke the token in Beeper Desktop → Settings → Integrations. Removing the plugin does not revoke it for you.