#Claw instance multi discord channel full access

1 messages · Page 1 of 1 (latest)

shadow kindle
#

I gave a task to my claw instance to create a progress table in one of my discord channels.

though, its having issues creating and posting and other channels from general channel.

claw responses:
The block is currently OpenClaw session visibility
Error:
Session send visibility is restricted to the current session tree

So even with channel access on Discord, this runtime still can’t directly message that separate channel session via sessions_send from here.

glossy wrenBOT
radiant summitBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

carmine bluffBOT
#

Yep, that error is the session-tools guard, not a Discord permission failure.

What’s happening:

  • sessions_send is for sending into another OpenClaw session
  • Discord guild channels are separate sessions
  • default tools.sessions.visibility is tree, which only allows the current session + its spawned children
  • so trying to jump from one channel session to a different channel session gets blocked with that exact error

The fix

If the goal is “post a table into another Discord channel”, the agent should usually use the message tool, not sessions_send.

Use an explicit Discord target like:

#

Also, before we dig deeper, what does this show?

openclaw --version

If you paste that plus the relevant bit of your agent/tool config, I can tell you the exact change to make.

shadow kindle
#

im running the newest version - version 2026.4.15. what are the exact changes my claw instance needs to make to have full cross channel access

carmine bluffBOT
#

If you want one Claw agent to read/write across your Discord channels, these are the exact knobs to change.

1) Let it use the message tool

This is the big one.

A lot of installs are on tools.profile: "coding", which includes session tools, but not message.
That makes the agent try sessions_send, which is the wrong tool for “post in another Discord channel”.

In your config, make sure the agent has message access:

{
  tools: {
    profile: "coding",
    allow: ["group:messaging"],
  },
#
}

If you already have a tools.allow list, merge group:messaging into it, do not replace the whole array blindly.

2) Expand session visibility

For cross-channel session access under the same agent id:

{
  tools: {
    sessions: {
      visibility: "agent"
    }
  }
#
}

That changes session-tool scope from the default tree to all sessions owned by this agent.

3) If sandbox is on, remove the sandbox clamp

If your channel sessions are sandboxed, this can still force visibility back down.

Add:

{
  agents: {
    defaults: {
      sandbox: {
#
        sessionToolsVisibility: "all"
      }
    }
  }
}

If you have a per-agent sandbox override in agents.list[], put it there instead.

4) Restart the gateway

After saving config:

openclaw gateway restart
#

Minimal working config

{
  tools: {
    profile: "coding",
    allow: ["group:messaging"],
    sessions: {
      visibility: "agent"
    }
  },
  agents: {
    defaults: {
      sandbox: {
#
        sessionToolsVisibility: "all"
      }
    }
  }
}

What the agent should do after that

For posting to another Discord channel, it should use:

message action=send channel=discord target=channel:<channelId> message="..."
#

Not sessions_send.

Use sessions_send only when you want it to talk to another OpenClaw session.


Only if you truly mean “everything”

If you want access across different agent ids, not just different channels on the same agent:

{
  tools: {
    sessions: {
      visibility: "all"
    },
    agentToAgent: {
shadow kindle
#

im still getting an error from my openclaw instance.

error my claw is stating:
I can’t complete the cross-channel send from the tools exposed in this runtime right now. The correct message tool support that OpenClaw support referenced is not actually available in my current tool list here, even after the config change and restart.

So the truthful answer is:

Can I post to #project-status right now from this session?No, not with the currently exposed tools.

Why not?
Because this runtime gives me:
sessions_send
not the first-class message tool support that support told us to use

And:
sessions_send was blocked before by visibility
notify CLI is disabled by plugin allowlist
and I do not have a real Discord-admin/message tool surfaced here in-tool
So this is now narrowed down to:
either the gateway/runtime hasn’t re-exposed the messaging surface to this session yet
or this agent environment simply does not include the message tool despite the config patch

Net:
I was wrong to imply I could just finish it immediately. I can’t from this exact tool surface.

If you want, next I can do one of two useful things:
diagnose why the message tool still isn’t exposed after the config change
give you the exact remaining config/runtime step needed so it truly becomes available

carmine bluffBOT
#

Yep, this narrows it down a lot.

If message is still missing after the restart, the remaining blocker is almost certainly tool policy, most likely the sandbox tool allowlist for channel sessions.

What’s actually happening

In Discord, channel/group sessions are often run as non-main sessions. If sandboxing is enabled, there is a second tool allowlist:

  • global tool policy: tools.allow / tools.deny
  • sandbox tool policy: tools.sandbox.tools.allow / tools.sandbox.tools.deny
  • possibly per-agent overrides too: agents.list[].tools.* and agents.list[].tools.sandbox.tools.*

Important rule from the docs:

if allow is non-empty, everything else is blocked

So if you added group:messaging globally, but your sandbox allowlist only has group:sessions, the message tool still disappears.

#

Exact remaining change

Keep these

{
  tools: {
    sessions: {
      visibility: "agent"
    },
    allow: ["group:messaging"]
  },
  agents: {
    defaults: {
      sandbox: {
        sessionToolsVisibility: "all"
      }
#
    }
  }
}

And also add group:messaging to the sandbox allowlist

{
  tools: {
    sandbox: {
      tools: {
        allow: [
          "group:messaging",
          "group:sessions"
        ]
#
      }
    }
  }
}

If you already have a sandbox allow list, merge group:messaging into it, do not replace the whole array unless you mean to.

Also check for denies

Make sure neither of these contain message / group:messaging:

  • tools.deny
  • tools.sandbox.tools.deny
  • agents.list[].tools.deny
  • agents.list[].tools.sandbox.tools.deny
#

Very common miss

If your Discord route is using a named agent from agents.list[], changing only agents.defaults may not be enough.
In that case, put the same fixes under that specific agent too.

Best verification command

Run this:

openclaw sandbox explain --json

That should tell you the effective sandbox/tool policy for the session and usually makes the blocker obvious.

Docs:

shadow kindle
#

ok. now we're having different issues. i switched to opus 4.7 to fix it but now every reply is "ok got it doing" with a tool error:

Yeah — let me read the current config and sandbox explain output so I can give you a real answer, not a guess.
<tool_use>
{"name": "exec", "input": {"cmd": "cat ~/.openclaw/openclaw.json"}}
</tool_use>

carmine bluffBOT
#

Ah, this is a different class of failure now.

That output means the session is likely stale/corrupted at the tool-call layer, not blocked by Discord perms anymore.

The tell is this part:

<tool_use>
{"name": "exec", ...}
</tool_use>

It’s leaking a literal tool block into chat instead of making a real tool call.

Most likely fix

OpenClaw’s FAQ has a known fix for this exact family of errors after tool/schema/model changes:

#

Start a fresh session with /new as a standalone message.

Docs:

The relevant FAQ item is the one about:

messages.content.tool_use.input field required

Different surface symptom, same usual root cause: the thread history/tool state got weird after changes.

What I’d do next

  1. In that Discord thread/channel, send:
/new
#
  1. Then retry a small tool task first, not the whole workflow. For example:

    • “What tools do you have available right now?”
    • or “Read my config and summarize only the Discord/tool policy parts.”
  2. If it still prints raw <tool_use> blocks in the fresh session, then we’re no longer in “bad thread state”, we’re in provider/tool transport mismatch territory.

At that point, paste:

openclaw status --all

and the relevant lines from:

openclaw logs --follow
#

Short version

I would not keep debugging inside this same thread.
I’d /new first, because this really looks like a poisoned transcript after all the tool/config/model switching.

If /new doesn’t clear it, send the status/log output and I’ll help you pin down the next layer.

shadow kindle
#

i did /new but still same tool error: On it — pulling today's calendar now.

<tool name="exec">
<parameter name="command">gog cal list --from "2026-04-17T00:00:00-04:00" --to "2026-04-17T23:59:59-04:00"</parameter>
</tool>

carmine bluffBOT
#

Yep, /new rules out bad thread state.

This is now very likely a provider/runtime route problem, not a Discord/session problem.

The giveaway is the raw text tool markup:

<tool name="exec">
  <parameter name="command">...</parameter>
</tool>

That means the model is emitting a textual tool dialect instead of making a real OpenClaw tool call.

My strongest read

You probably switched onto one of these paths:

#

What I’d change

If you’re using claude-cli/...

Enable MCP tool bridging:

{
  agents: {
    defaults: {
      cliBackends: {
        "claude-cli": {
          bundleMcp: true
        }
      }
    }
  }
#
}

If you’re using a proxy/shim route

Move this agent back to a native Anthropic provider route for tool-heavy Discord work, instead of a proxy/OpenAI-compatible path.

That is the cleaner fix.

One command that will tell us which case this is

Please paste:

openclaw models status
#

I mainly want to see whether this is resolving as:

  • native anthropic/...
  • claude-cli/...
  • or some proxy provider route

Because right now this really looks like “wrong transport for tools”, not “wrong permissions”.

shadow kindle
#

models status:
Config : ~/.openclaw/openclaw.json
Agent dir : ~/.openclaw/agents/main/agent
Default : anthropic/claude-opus-4-7
Fallbacks (1) : openai-codex/gpt-5.4

OAuth/token status

  • anthropic
    • anthropic:manual static
  • openai-codex usage: 5h 15% left ⏱21m · Week 81% left ⏱3d 9h

logs:
17:02:04+00:00 warn agent/embedded {"subsystem":"agent/embedded"} {"event":"embedded_run_agent_end","tags":["error_handling","lifecycle","agent_end","assistant_error"],"runId":"768424","isError":true,"error":"LLM request rejected: \","failoverReason":"format","model":"claude-opus-4-7","provider":"anthropic","rawErrorPreview":"400 {"type":"error","error":{"type":"invalid_request_error","message":"\"thinking.type.enabled\" is not supported for this model. Use \"thinking.type.adaptive\" and \"output_config.effort\" to control thinking behavior."},"request_id":"sha256:"}","rawErrorHash":"sha256:","rawErrorFingerprint":"sha256:","httpCode":"400","providerRuntimeFailureKind":"schema","providerErrorType":"invalid_request_error","providerErrorMessagePreview":""thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.","requestIdHash":"sha256:"} embedded run agent end
17:02:04+00:00 warn agent/embedded {"subsystem":"agent/embedded"} unsupported thinking level for anthropic/claude-opus-4-7; retrying with off
17:02:12+00:00 warn plugins {"subsystem":"plugins"} openclaw-mem0: recall timed out after 8000ms, skipping
17:02:13+00:00 warn plugins {"subsystem":"plugins"} openclaw-mem0: recall timed out after 8000ms, skipping

carmine bluffBOT
#

Okay, this is much clearer, and I was partly wrong earlier, you are on native Anthropic.

The real failure is in this log line:

"thinking.type.enabled" is not supported for this model.
Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

So the immediate problem is bad thinking config for Opus 4.7, not Discord permissions.

What to change

1) Clear any sticky session thinking override

In the chat/thread, send:

#
/think:off

That clears a session-level thinking setting if one got stuck.

2) Fix config defaults

For stability, I’d set this agent to:

{
  agents: {
    defaults: {
      thinkingDefault: "off"
    }
  }
#
}

Or per-agent:

{
  agents: {
    list: [
      {
        id: "main",
        thinkingDefault: "off"
      }
    ]
  }
#
}

3) If you want thinking on this model, use adaptive, not enabled

Valid direction for this model is:

{
  agents: {
    defaults: {
      models: {
        "anthropic/claude-opus-4-7": {
          params: { thinking: "adaptive" }
        }
      }
#
    }
  }
}

What you do not want anywhere is anything like:

  • thinking: "enabled"
  • thinking: { type: "enabled" }
  • an old /think on style state that maps to enabled

4) Restart after config change

openclaw gateway restart
#

After that

Do this in order:

  1. /think:off
  2. update config
  3. openclaw gateway restart
  4. /new
  5. retry the task

Side note

These lines are not the main problem right now:

openclaw-mem0: recall timed out after 8000ms, skipping

Annoying, but unrelated.

shadow kindle
carmine bluffBOT
#

Ah, got it, and I’m sorry, we crossed two separate issues.

The cross-channel advice was about sessions_send vs message, but what you’re seeing now with:

🛠️ exec
gog calendar list --date today

is a different thing.

Good news: that line itself is not the bug

That exact 🛠️ exec ... bubble is what OpenClaw shows when verbose tool logging is on.

From the docs, /verbose on makes tool calls show up as separate messages like:

#
  • 🛠️ exec: ...

So for Google Calendar, seeing exec gog ... is actually normal if verbose is enabled, because the gog skill shells out under exec.

The actual breakage from your logs is still this

"thinking.type.enabled" is not supported for this model

So I’d reset both session toggles first:

/verbose off
/trace off
/think off
#

Then restart after fixing config:

openclaw gateway restart

Config change I still recommend

Set the agent’s default thinking to off for now:

{
  agents: {
    defaults: {
      thinkingDefault: "off"
    }
#
  }
}

And remove any legacy thinking config like:

  • thinking: "enabled"
  • thinking: { type: "enabled" }

If you want thinking on that model later, use adaptive, not enabled.

Important nuance

So right now there are probably two things mixed together:

  1. verbose mode is on, which is why you’re seeing 🛠️ exec
#
  1. thinking config is broken, which is why turns are failing weirdly

Next best step

Please try, in this order:

/verbose off
/trace off
/think off

then retry one simple message.

If it still stops after the tool bubble and never gives the final answer, paste the next gateway log lines after that turn.
That will tell us whether the tool ran and the model failed on the follow-up, or whether the tool itself failed.

#

And yeah, thank you for calling out that this started during the fix. I’m glad we caught the fact that it’s not just the original channel-access issue.

shadow kindle
#

ok but my claw instance is not doing anything now. just replying with " on it " and the leaked tool call. its completely broken

carmine bluffBOT
#

Yeah, at this point I’d stop tweaking the cross-channel stuff and do a straight recovery rollback first.

Your bot is failing before it gets to the useful part, which is why you only get:

  • “on it”
  • leaked tool call
  • no real answer

Fastest recovery path

1) Reset the sticky chat toggles

Send these as standalone messages:

/verbose off
/trace off
#
/think off

2) Force safe thinking default

Run:

openclaw config set agents.defaults.thinkingDefault off
openclaw gateway restart

3) If it is still broken, roll back the model switch

I’d temporarily put the bot back on the last model that was working before this started, then restart again.

That gives you a clean “is the bot healthy again?” check.

#

Why I’m recommending rollback

Because right now you have a broken runtime state, not just a bad channel config.

The leaked tool call means the model turn is not completing properly.
The earlier logs already showed a bad thinking config for the new model, so I would get back to a stable baseline first, then re-do the cross-channel fix after the bot can answer normal questions again.

Important

I do not think the message vs sessions_send advice is what broke calendar/tool use by itself.

What likely happened is:

  1. we changed cross-channel config
  2. then changed model / thinking behavior while debugging
  3. now the bot is failing much earlier in the run
#

My recommendation

Do this in order:

  1. /verbose off
  2. /trace off
  3. /think off
  4. openclaw config set agents.defaults.thinkingDefault off
  5. openclaw gateway restart
  6. if still broken, revert the model to the last known good one
  7. test a simple prompt like “say hi”

If you want, paste your current agents.defaults block and I’ll tell you exactly what to revert.

shadow kindle
#

this happens to any model. is there any way to revert to previous openclaw state? it has nothing to do with verbose. i have a broken openclaw instance.

carmine bluffBOT
#

Yes. At this point I’d stop debugging and roll back to a known-good state.

Best recovery order

1) Back up current broken state first

openclaw backup create --only-config

2) Restore the previous config backup

OpenClaw commonly keeps config backups like:

  • ~/.openclaw/openclaw.json.bak
  • ~/.openclaw/openclaw.json.bak.1
  • ~/.openclaw/openclaw.json.bak.2

If one of those is from before this started, restore it over the current config, then restart:

#
cp ~/.openclaw/openclaw.json.bak ~/.openclaw/openclaw.json
openclaw gateway restart

If .bak is too new, try an older .bak.N.

3) If config rollback does not fix it, roll back the OpenClaw version too

If you installed via npm:

npm i -g openclaw@<previous-working-version>
openclaw doctor
openclaw gateway restart
#

If you run from source:

git fetch origin
git checkout <previous-working-commit-or-tag>
pnpm install
pnpm build
openclaw gateway restart

Last resort

If the state itself is poisoned and config rollback is not enough:

openclaw backup create
openclaw reset --scope config+creds+sessions --yes --non-interactive
shadow kindle
#

how can i see the openclaw backups:
OpenClaw commonly keeps config backups like:

~/.openclaw/openclaw.json.bak
~/.openclaw/openclaw.json.bak.1
~/.openclaw/openclaw.json.bak.2

carmine bluffBOT
#

Yep, easiest way is:

ls -lt ~/.openclaw/openclaw.json*

That will show:

  • openclaw.json
  • openclaw.json.bak
  • openclaw.json.bak.1
  • openclaw.json.bak.2
  • etc, sorted newest first

If you want just the backup files:

#
ls -lt ~/.openclaw/openclaw.json.bak*

If you want to inspect one:

cat ~/.openclaw/openclaw.json.bak

or compare current vs backup:

diff -u ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak

If ls says no such file, then those backup files probably were never created on this machine.

shadow kindle
#

ok i want this backup: Apr 16 20:40 /Users/jacob/.openclaw/openclaw.json.bak.1

how can i restore to this backup

carmine bluffBOT
#

Do this:

cp -p /Users/jacob/.openclaw/openclaw.json /Users/jacob/.openclaw/openclaw.json.before-restore
cp -p /Users/jacob/.openclaw/openclaw.json.bak.1 /Users/jacob/.openclaw/openclaw.json
openclaw gateway restart

That will:

  1. save your current config as openclaw.json.before-restore
  2. replace openclaw.json with openclaw.json.bak.1
  3. restart OpenClaw

Then test with a simple prompt.

If you want to confirm before restarting: