Short answer: yes — OpenClaw supports multiple Slack "accounts" (multiple Slack apps / bot tokens) and you can route them to different agents. Both Socket Mode and HTTP mode are supported (HTTP needs unique webhookPath per account). Your config shape is correct in principle.
Why you see everything go to the default agent
- That behaviour means the incoming event is being handled as if it belonged to the default account (so ResolveAgentRoute is being called with the default accountId), or the agent binding doesn't match the inbound metadata. In practice the usual causes are:
- The gateway never started a monitor for the second account (invalid/missing tokens → only the default account is running).
- The token(s) you put for the second account actually belong to the same Slack app/bot as the default account (so events always go to the same app).
- The message is not addressed to the second bot user (wrong mention/DM), so the other app never sees it.
- A binding/accountId mismatch (accountId in your bindings must equal the config key after OpenClaw’s normalization — lowercase + allowed chars).
What I checked in the code (quick summary)
- monitorSlackProvider uses the accountId you configure and starts a Bolt App per account (so multiple socket-mode apps in one gateway process are supported).
- prepareSlackMessage calls resolveAgentRoute({ accountId: account.accountId, teamId: ctx.teamId, ... }), so routing will match on accountId (and teamId/peer) — it will only match a binding for accountId if the monitor handling the event is running for that account.
- The gateway starts a monitor per configured account (channel manager calls plugin.gateway.startAccount for every channels.slack.accounts key).
How to debug / fix (step-by-step)
- Confirm both Slack account monitors are running
- Run: