mirror of
https://github.com/different-ai/openwork
synced 2026-05-14 19:16:24 +02:00
* fix(owpenbot): make token saves fast and resilient Persist Telegram/Slack tokens even when owpenbot is offline, bound adapter restarts to avoid long hangs, and refresh UI status with apply warnings. * chore: update Cargo.lock Keep desktop Cargo.lock in sync with the crate version so CI cargo --locked passes.
Owpenbot
Simple Slack + WhatsApp + Telegram bridge for a running OpenCode server.
Install + Run (WhatsApp)
One-command install (recommended):
curl -fsSL https://raw.githubusercontent.com/different-ai/openwork/dev/packages/owpenbot/install.sh | bash
Or install from npm:
npm install -g owpenwork
Quick run without install:
npx owpenwork
Then follow the guided setup (choose what to configure, link WhatsApp, start).
- One-command setup (installs deps, builds, creates
.envif missing):
pnpm -C packages/owpenbot setup
- (Optional) Fill in
packages/owpenbot/.env(see.env.example).
Required:
OPENCODE_URLOPENCODE_DIRECTORYWHATSAPP_AUTH_DIR
Recommended:
OPENCODE_SERVER_USERNAMEOPENCODE_SERVER_PASSWORD
- Run owpenwork and follow the guided setup:
owpenwork
Owpenwork keeps the WhatsApp session alive once connected.
- Pair a user with the bot (only if DM policy is pairing):
- Run
owpenwork pairing listto view pending codes. - Approve a code:
owpenwork pairing approve <code>. - The user can then message again to receive OpenCode replies.
Usage Flows
One-person flow (personal testing)
Use your own WhatsApp account as the bot and test from a second number you control.
- Run
owpenworkand choose “personal number.” - Scan the QR when prompted.
- Message yourself or from a second number; your number is already allowlisted.
Note: WhatsApp’s “message yourself” thread is not reliable for bot testing.
Two-person flow (dedicated bot)
Use a separate WhatsApp number as the bot account so it stays independent from your personal chat history.
- Create a new WhatsApp account for the dedicated number.
- Run
owpenworkand choose “dedicated number.” - Scan the QR when prompted.
- If DM policy is pairing, approve codes with
owpenwork pairing approve <code>.
Telegram (Untested)
Telegram support is wired but not E2E tested yet. To try it:
- Run
owpenwork login telegram --token <token>. - Or set
TELEGRAM_BOT_TOKENandTELEGRAM_ENABLED=true.
Slack (Socket Mode)
Slack support uses Socket Mode and replies in threads when @mentioned in channels.
- Create a Slack app.
- Enable Socket Mode and generate an app token (
xapp-...). - Add bot token scopes:
chat:writeapp_mentions:readim:history
- Subscribe to events (bot events):
app_mentionmessage.im
- Set env vars (or save via
owpenbot slack set-tokens ...):SLACK_BOT_TOKEN=xoxb-...SLACK_APP_TOKEN=xapp-...SLACK_ENABLED=true
Commands
owpenwork
owpenwork --non-interactive
owpenwork login whatsapp
owpenwork login telegram --token <token>
owpenwork slack status
owpenwork slack set-tokens <xoxb> <xapp>
owpenwork pairing list
owpenwork pairing approve <code>
owpenwork status
owpenwork doctor --reset
Defaults
- SQLite at
~/.openwork/owpenbot/owpenbot.dbunless overridden. - Config stored at
~/.openwork/owpenbot/owpenbot.json(created byowpenworkorowpenwork setup). - DM policy defaults to
pairingunless changed in setup. - Group chats are disabled unless
GROUPS_ENABLED=true.
Tests
pnpm -C packages/owpenbot test:unit
pnpm -C packages/owpenbot test:smoke
pnpm -C packages/owpenbot test:cli
pnpm -C packages/owpenbot test:npx