#My agent is exposing internal reasoning and context - how can I turn this off?

1 messages · Page 1 of 1 (latest)

burnt snow
#

It seems that with the 2026.04.5 update make it so that the agents internal reasoning also is displayed in the messages facing the operator. I am using discord.

I have tried to google and asked the agent about it, it does not seem to understand why it is happening and keeps saying it should stop doing it.

How can I turn this off?

Here is an example:

"Benny: "memory/NAVIGATION.md rewritten successfully—daily log paths now point to memory/YYYY-MM-DD.md (root), not memory/daily/. Fixed all incorrect references in NAVIGATION.md, lessons.md, skills.md, README.md, and memory-framework-research.md. Also updated active-tasks.md with correct sub-agent policy (multi-step or >10s work, not all tasks). Default model's Mimo Baseline (we're on Codex). All outdated references addressed—let me know if anything else needs fixing."

(Context: User reported EDIT failure in memory/NAVIGATION.md. Response confirms full rewrite with correct paths, lists all fixed files, notes active-tasks.md policy correction. Commits to thoroughness per SOUL.md's 'resourceful before asking' and 'be genuinely helpful'. Brief, no preface, mentions default model as runtime differs.)"

sinful starBOT
#

Yep — that output is internal/meta text leaking through, and you can usually shut it off from the thread itself:

/verbose off
/reasoning off
/status

You want /status to show verbose + reasoning as off for that session.

If it still appears, set defaults in config (JSON5) and restart:

{
agents: {
defaults: {
#

Also, can you paste the output of:

openclaw --version

If you’re on 2026.4.5 and this still leaks after /verbose off + /reasoning off, that’s likely a bug/regression and should be filed here: https://github.com/openclaw/openclaw/issues (include your sample message + version).

burnt snow
#

OpenClaw 2026.4.5 (3e72c03)

Both reasoning and verbose are off.

sinful starBOT
#

Perfect, thanks — that confirms it: this is not /reasoning or /verbose.

What you’re seeing is leaked internal completion context (usually from subagent/task-completion events), and 2026.4.5 can still let that through in some flows.

Two workarounds that actually stop it

  1. Disable Discord live streaming previews (can leak intermediate/commentary text):
{
channels: {
discord: {
streaming: "off",
},
},
}
#
  1. Block subagent spawning (stops those completion-context handoffs entirely):
{
agents: {
list: [
{
id: "main",
tools: {
deny: ["sessions_spawn", "subagents"],
},
},
],
},
}

Then restart gateway.

#

If you want, I can help you do a minimal config patch that keeps everything else unchanged.
Also, this is worth reporting as a bug with your exact sample + version: https://github.com/openclaw/openclaw/issues
(there isn’t currently a clean “hide internal completion context only” toggle).

burnt snow
#

Streaming is off already.

I can test with blocking subagent spawning and see if that helps. But it feels like a bad solution.

sinful starBOT
#

100% agree — blocking subagents is a diagnostic workaround, not a good long-term fix.

Given streaming/verbose/reasoning are already off, this is likely a 2026.4.5 regression in how completion context gets rewritten.

Better workaround (keep subagents on)

Add a hard rule in your AGENTS.md:

## Internal event privacy (must follow)
- Never expose runtime/system/internal context to users.
- Never output parenthetical/internal summaries like:
"(Context: ...)", "Result:", "Status:", "Stats:", "session_key", or "internal event".
- If a completion/update includes internal metadata, rewrite it into a normal user-facing message only.
- If no user-facing update is needed, reply with exactly: NO_REPLY

Then run /new in the thread (so you’re not stuck in old session behavior) and test again.

#

If that still leaks, it’s definitely core behavior in this release (not your config).
At that point, I’d file it as a bug with your sample + version here: https://github.com/openclaw/openclaw/issues

If you want, I can help you write a super clean reproducible bug report text you can paste directly.

burnt snow
#

I have done some light testing and it had definitely improved. I got an error and switched models though but I will continue to monitor it.

sinful starBOT
#

Nice — that’s a good sign. If it improved after the AGENTS guardrails, we’re probably dealing with a rewrite/completion-event behavior issue (not your Discord settings).

If it pops up again, grab these so we can pin it fast:

  1. exact leaked message text
  2. exact error text from the model switch
  3. openclaw --version
  4. rough timestamp (UTC)

Then we can turn that into a clean bug report immediately.

If it stays stable after more testing, you’re probably good 🎯
(And if so, please mark the solution in-thread so Answer Overflow can index it.)

burnt snow
#

It seems that it has appeared again. But I also belive that the guardrail that was set in place is no longer there.

However, I think that the guardrail shouldn't be needed as the internal thinking leakage shouldn't happen at all?

sinful starBOT
#

⚠️ Missing API key for provider "openai". Configure the gateway auth for that provider, then try again.

burnt snow
#

Pardon me?

sinful starBOT
#

⚠️ Missing API key for provider "openai". Configure the gateway auth for that provider, then try again.

hot dagger
#

dude built something to solve this exact problem.

sinful starBOT
#

⚠️ Missing API key for provider "openai". Configure the gateway auth for that provider, then try again.

hot dagger
#

if you want me to share happy to assist.

sinful starBOT
#

⚠️ Missing API key for provider "openai". Configure the gateway auth for that provider, then try again.

burnt snow
#

@hot dagger Yes please do. This is quite annoying. I figured out that it only happens with reasoning models but from what I understand the reasoning shouldn't be leaking to the end-user-chat.

sinful starBOT
#

Yeah, that should not leak in normal replies.

Verified behavior from docs is:

  • reasoning is controlled by /reasoning on|off|stream
  • when enabled, it should be a separate message prefixed Reasoning:
  • default/fallback is off

So your example showing it inline is a bug or bad persisted session state, not intended behavior.

Try this in the affected Discord thread first:

  1. /reasoning off
  2. /reasoning to confirm the session now says off

Docs: https://docs.openclaw.ai/tools/thinking

#

Also check your agent config for this and make sure it is not set to on:

agents: {
  list: [
    {
      reasoningDefault: "off"
    }
  ]
}

Reference: https://docs.openclaw.ai/gateway/configuration-reference

One more important bit: if you are using ACP/Codex or certain reasoning providers, there have been fixes for hidden thinking leaking into visible text. I would strongly recommend updating past 2026.4.5, restarting the gateway, and then testing again in a fresh thread or after /reset.

Please paste these 3 things and I can narrow it down fast:

#
  • openclaw --version
  • the result of /reasoning in that thread
  • whether this agent is running via ACP/Codex, Ollama, MiniMax, or something else

If /reasoning off fixes it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it.

burnt snow
#

Version: OpenClaw 2026.4.8 (9ece252)
Reasoning: Off
Model: openrouter/nvidia/nemotron-3-super-120b-a12b:free

sinful starBOT
#

Aha, this explains it.

Reasoning: Off is not the same as Thinking: Off.

For OpenClaw those are separate:

  • /reasoning off = hide separate Reasoning: output
  • /think off = disable the model’s reasoning/thinking budget

And per docs, reasoning-capable models default to thinking: low unless you explicitly turn it off: https://docs.openclaw.ai/tools/thinking

So in your case, the likely issue is:

  1. reasoning visibility is off, but
  2. the model is still thinking, and
  3. on an OpenRouter proxy route, if that model spills its meta/planning text as normal assistant text, OpenClaw cannot reliably strip it after the fact.
#

That matches your example pretty well.

What to do

In the affected thread, run:

/think off

Then check:

/think
/reasoning
#

If you want it off by default, set this in config:

{
  agents: {
    defaults: {
      thinkingDefault: "off",
      reasoningDefault: "off"
    }
  }
}

or per-agent: