Once OpenClaw is installed locally, the next decision is where you talk to it. The BoxminingAI channel's preferred surface is Discord, and the reason is structural: Discord channels map one-to-one to agents, and threads inside a channel map to subtasks. That sounds like a small UI nicety, but it is the difference between a workspace that scales to five bots and one that collapses into a megathread after the first day. This article walks through the structural case for Discord and then covers what the 3.7 release added to the integration (the context engine plugin and ACP persistent binding) so you understand why the bridge is the way it is in mid-2026.

What you'll learn

  • The channel-per-agent + threads-per-subtask rule is the structural reason Discord beat Slack, Telegram, and WhatsApp as the BoxminingAI default.
  • The host's team is organised around Avengers-character agents (Stark, Banner, etc.), with one bot per channel and threads per sub-task.
  • The 3.7 release shipped the context engine plugin, which fixes the "Discord thread forgets the main chat" problem — pre-3.7 the main branch lost track of what happened inside a thread.
  • ACP persistent binding (also 3.7) makes Claude Code usable across sessions inside an OpenClaw agent — the loop between planning and execution stops re-briefing itself every time.
  • The native OpenAI stack support in 3.7 is the cost lever: GPT 5.4 or Gemini 3.1 Flash for cost-sensitive tasks, Opus only when the quality ceiling matters.
  • Why Discord's permission model (per-channel scopes, role-based access) maps cleanly onto OpenClaw's pairing policy, and why this is the missing piece most chat surfaces lack.
  • The structural difference between Discord's "channel = persistent topic" and Telegram's "DM = transient query" — and how each shapes the agent's behaviour on that surface.
  • The cost arithmetic behind picking Discord as the always-on team surface versus Telegram as the on-the-go mobile surface.

Why Discord: the structural case in detail

Discord isn't the most popular chat surface in 2026 — that title goes to WhatsApp, WeChat, or Telegram depending on the demographic. But for an OpenClaw multi-agent setup, Discord's specific affordances make it the only sensible default. The argument isn't brand loyalty; it's that Discord's three structural choices line up exactly with what an OpenClaw fleet needs.

Channels as persistent topic silos. A Discord channel is a named, persistent, scrollable topic. Every message in #stark-dev is part of the same ongoing conversation about Stark's work; every message in #banner-research is about Banner's research. The bot's reading scope can be set per-channel, which means each bot's attention is bounded by design. There's no equivalent in WhatsApp (one continuous chat per contact) or Telegram (DMs and groups, but neither has the persistent-channel structure). Slack has channels, but the per-channel bot scope is harder to enforce and the free tier is more restrictive for personal setups.

Threads as sub-task tabs. Inside a channel, Discord threads are the unit of sub-task. The bot working in a thread keeps the main channel clean while still being reachable. Threads are searchable by name, scrollable independently, and have their own "join" event the bot can listen for. Slack has threads too, but the API ergonomics are worse and the thread-on-thread nesting is more limited. Telegram has "topics in groups" via the forum mode, but the bot integration story is less mature than Discord's.

Roles and permissions as the safety rail. Discord's role system maps onto OpenClaw's pairing policy. You can have a @stark-team role that grants access to the Stark channel, a separate role for Banner's channel, and an @everyone fallback. The bot reads the role to decide who it's allowed to respond to. WhatsApp and Telegram both lack this granularity — you get "everyone in the group" or "no one in the group," with no per-user scope inside a group.

The economic case. Discord is free for personal servers. There are no per-message fees, no per-bot fees, and the rate limits are generous for the kind of low-volume, latency-tolerant traffic an OpenClaw agent generates. Telegram bots are also free, but the streaming-vs-silence problem (see §4.4) and the lack of per-channel bot scopes make it a worse always-on team surface. Slack free tier caps at 90 days of message history and 10 integrations — a non-starter for an agent that wants to read its own past.

The combination — persistent channels, native threads, role-based access, generous free tier — is what makes Discord the right default. The BoxminingAI team's choice of Discord isn't arbitrary; it's the surface where OpenClaw's mental model (one bot per topic, threads for sub-tasks, allowlists for safety) maps 1:1 to the platform's primitives.

Video 1: Setup OpenClaw with Discord (Complete Guide)

This is the canonical walkthrough. The host's whole team runs on Discord because each channel maps to a single agent — he names his after Avengers characters, so "Stark" lives in one channel for research and presentations, "Banner" lives in another, and the team can interact with each bot in its own lane. Each bot only reads its own channel, which is what keeps the workspace "clean, tidy, and neat." Inside a single channel, you open a thread for a subtask — for example @Bob research task — and the conversation stays focused in its own tab rather than polluting the parent channel.

The setup has three parts: create the bot in Discord's Developer Portal, configure OpenClaw locally via the CLI, and invite the bot to your server.

Step A — Create the bot. Go to discord.com/developers, create a New Application, name it whatever you want (he calls his human Bob), and save. Then go to the Bot tab. There are two intents that have to be enabled before you save the bot page: Server Members Intent and Message Content Intent. Without both of these, the bot will appear online in your server but will not actually read any messages you type. The token you see after clicking Reset Token is what OpenClaw will use to authenticate. Treat it like a private key: the host explicitly says "if you lose this, someone else can access your bot" and rotates his on stream. The token paste is a one-time visible moment — copy it once into OpenClaw and never re-share it.

Step B — Configure OpenClaw locally. The host tested both setup paths and the local CLI flow won decisively: "out of three times out of four, if I just kept talking to my agent and tell him to set up Discord, it just blows up." The reliable path is openclaw configure in your local terminal. Select Discord, paste the bot token, let it scan your servers, and then paste the channel IDs for the channels you want the bot to read.

The channel-ID step has a hidden gotcha: Discord's right-click "Copy Channel ID" only appears if Developer Mode is on, and Developer Mode is off by default. Go to User Settings → Advanced and flip it on first, otherwise you'll right-click a channel and have no idea why there's no copy option. Once Developer Mode is on, right-click each channel you want the agent to monitor and Copy Channel ID, then paste it into the configure prompt. Answer Yes to both configure pairing and configure Discord to access channels.

Step C — Restart the gateway and invite the bot. Run openclaw gateway restart to bring the connection up. Then back in the Developer Portal, go to OAuth2 → URL Generator, tick bot and applications.commands, and pick Guild Install (not a global install — you're putting the bot on your own private server). For permissions he just picks Administrator and says the exact permission set "doesn't really matter that much" for a personal setup. Copy the generated URL, open it, and authorize the bot onto your server. After authorize, the bot should appear online in your member list — that's the moment to test it, not before.

One thing the host emphasizes at the end: by default the bot will only reply when you @mention it. After the bot joins, send it a chat message asking it to always-reply in that channel. Otherwise it will look broken when you post a normal message and get silence. The other tip is the second video he links, which is a short recovery guide for the "gateway doesn't start up again after a bad config" failure mode. Book that video before you start configuring, because the failure is most likely to hit right after your first openclaw gateway restart.

Video 2: NEW Openclaw 3.7 Update is INSANE!

The 3.7 release dropped on March 7th (3.7) with a marketing-friendly "40+ features and 30+ bug fixes" changelog. The honest take from the channel is that life after the update is "slightly" better — the headline is the headline, but the workflows that actually changed are concentrated in three places. The first two are deeply relevant to the Discord bridge: the context engine plug-in system and ACP persistent binding.

Context engine plugin — fixes the Discord thread problem. The host describes the pain that motivated the plugin in plain terms: "before if you open a thread, it doesn't update the main chat." The team's actual workflow is to spawn a new Discord thread for every small topic (an AI news aggregator, a cloud panel research task, a new dashboard) and have the agent work inside that thread. In the old world, opening a thread meant the main branch of the conversation "doesn't update the main chat" — your agent had no idea what you had just discussed elsewhere. The context engine plugin connects the thread back to the main branch, so "everything ties together. It's more coherent, more cohesive." If you run more than one OpenClaw instance (he runs the Avengers cast), this is the change that actually improves your daily flow, not one of the other 36 bullet points on the changelog.

The context engine plugin works by treating each Discord thread as a child context of the parent channel. When you open a thread, the plugin snapshots the parent's context and attaches it to the thread's session. When messages flow inside the thread, the plugin updates both the thread session and the parent's read of the thread (via the channel-level "this thread has new activity" indicator). When the thread closes or ages out, the plugin archives the thread context into the parent's long-term memory.

The practical effect: the agent in a thread knows what you discussed in the main channel before the thread opened. If you said "summarise today's AI news" in #stark-dev and then opened a thread for a follow-up, the thread's bot knows what "today's AI news" referred to.

ACP persistent binding — makes Claude Code usable across sessions. The second relevant change is for users who wire Claude Code into their OpenClaw agent. The host built the boxminingai.com site itself this way: he brainstormed the dashboard layout with his agent, then told the agent to use Claude Code to execute. Before 3.7, every time you started a new session, Claude Code had to be re-briefed on what it was building. ACP persistent binding "remembers what Claude Code has been building" across sessions, which "substantially" improves the loop when you're bouncing between planning (OpenClaw) and execution (Claude Code / Windsurf). The takeaway: enable this before you start any Claude Code project, or your agent will re-brief Claude on every session and you'll feel like nothing is sticking.

ACP persistent binding works by attaching a stable session ID to each Claude Code invocation from OpenClaw. When the agent spawns Claude Code, the session ID is recorded in OpenClaw's persistent state. When the agent needs Claude Code again — same project, same goal, even days later — it passes the session ID and Claude Code resumes from the last checkpoint instead of starting from scratch. The "persistent" word in the name is doing real work: the binding survives across OpenClaw restarts, OpenClaw upgrades, and even gateway crashes.

The rest of the changelog. Native OpenAI-stack support is in, so you can pin GPT 5.4 or Gemini 3.1 Flash for cost-sensitive tasks without leaving the bridge. China-side users get a Longcat integration. The other 36+ items in the changelog the channel calls background fixes, not workflow changes — skip them on the first read.

Model cost reality check. The host runs the most expensive tier (Opus) and is burning $30–$60/day on it. The co-host is on the Minimax developer plan, which is a flat $20/month, and reports it working "substantially better" — but only after about two weeks of context optimization. The 2-week number is the one to remember: don't judge a new model setup on day one. The 2-week window is the time it takes for the context engine plugin to learn your routing preferences, for ACP persistent binding to warm up its session cache, and for the agent's skill directories to stabilise around your actual workflow.

One operational note. The team strongly recommends updating OpenClaw via terminal, not by asking your agent. Open Termius, ssh in, and run openclaw update directly. Agent-driven updates "hit permission errors and disconnects" because the agent itself is the thing being restarted, and you get a UI notification rather than a silent disconnect. If you ever do an auto-update through the agent and the gateway goes down, fall back to the manual openclaw update path and it usually recovers cleanly.

The exact failure mode: the agent says "I'll update myself" and runs openclaw update from inside the agent runtime. The update changes the binary the agent is running on, which means the agent process itself gets replaced mid-execution. The kernel sends SIGTERM to the old process; the old process is the agent; the agent was about to receive the SIGTERM but is also the thing orchestrating the update. The result: a race condition where the update half-applies and the gateway goes down. The fix is to run openclaw update from a separate shell session — ssh into the VPS and run it from there, not from inside the agent.

Try it yourself

These are the steps the host actually walks through on stream, in order. Skip the chat-based agent path — the host tested it and it "blows up" 3 out of 4 times.

  1. Build the bot. In Discord, open User Settings → Advanced and turn on Developer Mode (do this first; the rest of the flow depends on it). Then go to discord.com/developers, click New Application, name it, and Save Changes. Move to the Bot tab, enable Server Members Intent and Message Content Intent, and Save Changes again. Click Reset Token, copy the token once, and paste it somewhere safe — you will not be able to see it again without resetting.
  2. Wire the bot to OpenClaw locally. In your terminal (ssh in via Termius if you're on a VPS), run openclaw configure. Select Discord, paste the token, and answer Yes to the configure Discord to access channels and configure pairing prompts. Right-click each Discord channel you want the agent to read, choose Copy Channel ID, and paste each ID into the configure prompt.
  3. Restart the gateway and verify. Run openclaw gateway restart. Confirm the bot is showing online in your server member list. If it is offline, do not proceed — the rest of the steps will silently fail.
  4. Invite the bot to the server. In the Developer Portal, go to OAuth2 → URL Generator, tick bot + applications.commands, pick Guild Install, choose Administrator (or whatever you prefer for a personal setup), and open the generated URL. Authorize. The bot should appear in your member list as online.
  5. Set it to always-reply. Send a normal message in the bot's channel (no @mention) and watch what happens. If it doesn't respond, send it a chat instruction to always-reply in that channel. Test again. If it's still silent, bookmark the host's gateway-recovery video and walk through it before debugging the bot.
  6. Upgrade to 3.7 wiring. On a stable 3.7 install, install the context engine plugin (this is the change that makes thread conversations remember the main chat). If you use Claude Code, enable ACP persistent binding before you start your next project so the briefing carries over. After upgrading, restart the gateway and re-verify the bot is online.
  7. Update the right way. When a new release drops, do not ask your agent to run the update. Ssh in via Termius and run openclaw update directly. If you previously auto-updated and the gateway is down, this is the recovery path that works.
  8. Set up the channel-per-agent layout. Create one Discord channel per agent on your server (#stark-dev, #banner-research, #jarvis-general, etc.). Each bot reads only its own channel. The channel list becomes a map of your agent fleet.
  9. Test the topic-per-thread discipline. In one channel, open three threads for three different topics. Send a message in each. Confirm the bot replies in the right thread, not in the main channel, and that each thread carries its own context.
  10. Verify the cross-device experience. Open Discord in the browser and on your phone. Send a message from one. Confirm it appears on the other. The gateway should be replicating to both clients in real time.
  11. Audit the gateway. Run openclaw status. Confirm the gateway reports "up" and the Discord integration is "connected." If it reports anything else, see §4.3 for the recovery flow.

Common pitfalls

  • Developer Mode is off. The single most common stuck-step in the Discord flow is right-clicking a channel and finding no "Copy Channel ID" option. The toggle is in User Settings → Advanced and is off by default — the host calls this out explicitly. Enable it before you start, not after.
  • Missing one of the two intents. If you save the Bot page without Server Members Intent and Message Content Intent both enabled, the bot will appear online in your server but will not actually read any messages. The symptom looks identical to "the bot is broken" — it isn't, you just need to flip both switches and reset the token.
  • Asking the agent to do the wiring. The host tested both paths and the chat-based setup "blows up" three times out of four. Use openclaw configure from the terminal; the conversational path is a coin flip at best.
  • Bot only replies to @mention. After the bot joins, it defaults to mention-only mode. If you post a normal message and get silence, you have not told the bot to always-reply. Send it a chat instruction, then test again.
  • Gateway dies after a config change. This is the #1 failure mode and the reason the host made a separate recovery video. If openclaw gateway restart doesn't bring it back, the next step is to ssh in via Termius and try the manual openclaw update path — agent-driven updates can't recover from a restart that takes down the agent itself.
  • Judging a new model on day one. The co-host reports the Minimax $20/month plan only became "substantially better" after roughly two weeks of context tuning. If you're on a new model setup and the first session feels rough, give it the two-week window before switching back.
  • Thread conversations don't carry context. This is the pre-3.7 default and the reason the context engine plugin is the headliner. If you haven't installed it, every new Discord thread is a fresh agent that knows nothing about the main chat. Install the plugin first if you run more than one thread per channel.
  • Running one channel for five agents. Each bot only reads its own channel, so this just means everything is one bot's problem. Split channels per agent.
  • Treating Discord permissions as cosmetic. For personal setups the host says Administrator is fine. For shared servers, tighten to specific permissions (Send Messages, Embed Links, Read Message History, Use Slash Commands).
  • Forgetting the OpenClaw version check. 3.7+ for thread context, 3.2+ for Telegram streaming. Run openclaw --version before starting the setup.
  • Trusting the bot's "I'm online" without testing a message. The bot can be online but not reading messages (intents off) or online but not replying (mention-only mode). Always send a test message after gateway restart.

Sources

  • Setup OpenClaw with Discord (Complete Guide) — 7,682 views · video_id: VfmG9Q69p1o
  • NEW Openclaw 3.7 Update is INSANE! — 7,974 views · video_id: p3aB9Qd-PIs
  • Supabase query (project ttxdssgydwyurwwnjogq): SELECT video_id, title, views, summary_content, summary_key_takeaways, transcript_content FROM public.videos WHERE video_id = ANY(ARRAY['VfmG9Q69p1o', 'p3aB9Qd-PIs']);