Open Agent Broker — stdio JSON-RPC を通じて Discord を ACP 対応の coding CLI(Claude Code、Codex、Gemini、Kiro、Cursor)にブリッジする軽量な Rust ハーネス。このテンプレートは Cursor Agent CLI をエージェントバックエンドとして使用します。 ソース:https://github.com/openabdev/openab

OpenAB は、stdio JSON-RPC を通じて Discord を Agent Client Protocol 対応の coding CLI にブリッジする軽量なオープンソース Rust ハーネスです。
このテンプレートは Cursor バリアント(openab-cursor)をデプロイし、cursor-agent をエージェントバックエンドとして使用します。
cursor-agent login を実行してください(下記参照)。0.8.3-beta.4)を使用します。アップグレードするには Zeabur Dashboard → サービス → 設定でイメージタグを変更してください。可用なタグ:GitHub Packages。/home/agent が永続ボリュームで、認証情報(~/.cursor/)、MCP 設定、approvals が保持されます。bot → 必要な権限を選択してサーバーに招待Discord Bot Token を入力してデプロイします。
起動スクリプトは Cursor の認証 env var を強制しません。以下のいずれかを選んでください:
オプション A:Device Flow(インタラクティブ、env var 不要)
サービス起動後、Zeabur Dashboard → サービス → Exec で以下を実行:
runuser -u agent -- cursor-agent login
ℹ️
runuser -u agentはagentユーザーとしてログインを実行するため、HOMEが自動的に/home/agentに設定され、認証情報は最初からagent所有になります — chown や再起動は不要です。
ブラウザで認証を完了してください。新しい会話は次のセッションから新しい認証を自動的に使用します — 再起動はメモリ上の既存セッションを無効化したい場合のみ必要です。
オプション B:CURSOR_API_KEY 環境変数(ターミナル不要)
CURSOR_API_KEY を追加し、上記キーを設定cursor-agent が env var を直接読み取るため、cursor-agent login の実行は不要ですTelegram、LINE、Feishu/Lark、Google Chat、MS Teams を接続するには、同じ Zeabur プロジェクトに OpenAB Gateway テンプレート をデプロイしてから、このサービスに次の環境変数を設定してください:
GATEWAY_URL = ws://openab-gateway:8080/wsGATEWAY_PLATFORM = telegram、line、feishu、googlechat、teams のいずれかサービスを再起動すると、起動スクリプトが config.toml に [gateway] セクションを自動追加します。
| ファイル | 説明 |
|---|---|
/home/agent/.config/openab/config.toml | OpenAB 設定(sessions、reactions、STT など) |
config.toml は初回起動時に内蔵テンプレートから作成されます。以降は直接ファイルを編集してください。デフォルトにリセットするには:rm /home/agent/.config/openab/config.toml
デフォルトでは、openab は他の bot や webhook からのメッセージを無視します。webhook トリガーのメッセージ(自動テストや CI パイプラインなど)を許可するには、config.toml に以下を追加してください:
[discord]
allow_bot_messages = "mentions"
この設定により、openab は @mention された bot や webhook のメッセージに応答します。特定の webhook のみに制限するには、さらに追加:
trusted_bot_ids = ["YOUR_WEBHOOK_USER_ID"]
Webhook ユーザー ID は webhook URL の数字 ID です:https://discord.com/api/webhooks/<ID>/...
Discord Bot Token を空のままにすると、サービスはクラッシュせずにスリープモードに入ります。