#Openclaw not working like it used to

1 messages · Page 1 of 1 (latest)

warm field
#

It appears thay my openclaw has turned more into a chatbot than an actual work partner. I give it instructions, and then it responds like it's understood my request, but then doens't actually do anything. It used to sit it "typing" while it worked and wouldn't respond until it was done. Now it responds right away, and doens't do much work

bold oliveBOT
real troutBOT
#

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

simple schoonerBOT
#

Yeah, that usually means the run is ending at the “plan/commentary” stage instead of actually taking tool steps.

First, what does this show?

openclaw --version
openclaw status --all
openclaw models status

Paste those 3 outputs.

Most common causes I’ve seen for this are:

  1. the model/provider changed to something with weak tool calling, especially Ollama, LM Studio, or generic OpenAI-compatible /v1 backends
  2. GPT-5/Codex is running without strict-agentic mode, so “I’ll do X” can get treated as success
  3. typing behavior changed, so it no longer shows progress as early
#

If you’re on GPT-5 or Codex, this is worth trying:

{
  agents: {
    defaults: {
      embeddedPi: { executionContract: "strict-agentic" },
      typingMode: "instant"
    }
  }
}

strict-agentic is specifically meant to stop plan-only turns and force act-or-block behavior.

Docs:
https://docs.openclaw.ai/help/faq

warm field
#

🦞 OpenClaw 2026.4.15 (041266a) — Your terminal just grew claws—type something and let the bot pinch the busywork.

Config : ~/.openclaw/openclaw.json
Agent dir : ~/.openclaw/agents/main/agent
Default : openai-codex/gpt-5.3-codex
Fallbacks (0) : -
Image model : -
Image fallbacks (0): -
Aliases (0) : -
Configured models (1): openai-codex/gpt-5.3-codex

Auth overview
Auth store : ~/.openclaw/agents/main/agent/auth-profiles.json
Shell env : off
Providers w/ OAuth/tokens (1): openai-codex (1)

  • openai-codex effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=1, token=0, api_key=0) | openai-codex:default=OAuth

OAuth/token status

  • openai-codex usage: 5h 100% left ⏱3h 59m · Week 100% left ⏱6d 7h
    • openai-codex:default ok expires in 9d
simple schoonerBOT
#

Nice, this narrows it down a lot.

A couple things jump out:

  • your Codex auth looks healthy, so this probably is not an auth/login issue
  • you’re hard-pinned to openai-codex/gpt-5.3-codex (Configured models (1) means your allowlist only contains that one model)
  • 2026.4.15 already has the strict-agentic feature, but it’s opt-in

So the most likely issue is: OpenClaw is accepting plan-y / commentary turns instead of forcing the next real action.

Can you paste these too:

openclaw status --all
openclaw config get agents.defaults.embeddedPi.executionContract
openclaw config get agents.defaults.typingMode
#

If executionContract is unset, I’d try this in your config, then restart the gateway:

{
  agents: {
    defaults: {
      embeddedPi: { executionContract: "strict-agentic" },
      typingMode: "instant"
    }
  }
}

Why these two:

  • strict-agentic = stops “I understand, here’s my plan” from counting as success
  • typingMode: "instant" = restores the early “working…” feel
warm field
#

🦞 OpenClaw 2026.4.15 (041266a) — I've read more man pages than any human should—so you don't have to.

Config path not found: agents.defaults.embeddedPi.executionContract

🦞 OpenClaw 2026.4.15 (041266a) — Somewhere between 'hello world' and 'oh god what have I built.'

Config path not found: agents.defaults.typingMode

simple schoonerBOT
#

Yep, that confirms both settings are just unset.

I’d do this first:

openclaw config set agents.defaults.embeddedPi.executionContract strict-agentic
openclaw config set agents.defaults.typingMode instant
openclaw gateway restart

Then retry one of the same prompts that used to work.

Important bit: typingMode is mostly the visual fix, strict-agentic is the behavior fix.

If it still feels chatty after that, paste these next:

#
openclaw status --all
openclaw config get agents.defaults.models

I’m asking for agents.defaults.models because you also look hard-pinned to a single Codex model, and that can absolutely make the agent feel worse if that one model/runtime is having an off day.

Docs:
https://docs.openclaw.ai/providers/openai#strict-agentic-gpt-mode
https://docs.openclaw.ai/concepts/typing-indicators
https://docs.openclaw.ai/help/troubleshooting

If you want, send the before/after behavior once you try those 3 commands and I’ll help from there.

warm field
#

Gateway connection details:
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: /Users/clawdbot/.openclaw/openclaw.json
Bind: loopback

âś“ Config: /Users/clawdbot/.openclaw/openclaw.json
âś“ Secret diagnostics (0)
âś“ Restart sentinel: none

Gateway last log line:
2026-04-21T09:41:12.142-06:00 [agent/embedded] empty response detected: runId=02c5f76f-6ddc-4c13-a580-6f3da9608d91 sessionId=5eb5511a-0746-48f9-8322-a320daf61f6d provider=openai-codex/gpt-5.3-codex — retrying 1/1 with visible-answer continuation
! Port 18789
Port 18789 is already in use.

  • pid 89532 clawdbot: openclaw-gateway (127.0.0.1:18789)
  • Gateway already running locally. Stop it (openclaw gateway stop) or use a different port.
    ! Tailscale: off · unknown
    ✓ Skills: 13 eligible · 0 missing · /Users/clawdbot/.openclaw/workspace
    âś“ Plugin compatibility (none)
simple schoonerBOT
#

That log line is the smoking gun:

[agent/embedded] empty response detected ... provider=openai-codex/gpt-5.3-codex

So OpenClaw is trying to work, but that model/runtime is giving it an empty turn, and OpenClaw is going into its recovery path.

A few quick notes:

  • the Port 18789 is already in use bit is not the problem here, it just means your gateway is already running
  • the real clue is the empty response from openai-codex/gpt-5.3-codex
  • since you’re pinned to that one model with no fallbacks, it has nowhere better to go

I’d do these next:

#
openclaw config get agents.defaults.embeddedPi.executionContract
openclaw config get agents.defaults.typingMode
openclaw models list --provider openai-codex

You want the first two to come back as:

  • strict-agentic
  • instant

If they don’t, set them again and restart:

openclaw config set agents.defaults.embeddedPi.executionContract strict-agentic
openclaw config set agents.defaults.typingMode instant
#
openclaw gateway restart

My honest bet: the bigger issue now is the hard pin to gpt-5.3-codex. If models list shows a newer Codex model on your account, I’d try that next.

If you want the fastest proof, do this:

openclaw logs --follow

Then send one prompt that usually fails and paste the lines around it. If it keeps showing empty response detected or similar, we’ve basically confirmed it’s the model/runtime path, not your channel or gateway.

Docs:
https://docs.openclaw.ai/help/troubleshooting
https://docs.openclaw.ai/concepts/models

warm field
#

What's a better set up than hardpinning to one model?

simple schoonerBOT
#

A better setup is usually:

  1. one primary
  2. one same-provider fallback
  3. one cross-provider fallback if you have another provider configured

So, not “allow exactly one model”, but “allow a small trusted set and order them.”

Shape-wise, that looks like:

{
  agents: {
    defaults: {
      model: {
        primary: "provider-a/model-main",
#
        fallbacks: [
          "provider-a/model-backup",
          "provider-b/model-backup"
        ]
      },
      models: {
        "provider-a/model-main": {},
        "provider-a/model-backup": {},
        "provider-b/model-backup": {}
      }
    }
  }
}

My recommendation for your case:

#
  • if you only have Codex auth right now, allow 2 Codex models, not 1
  • if you also have another provider available, add 1 cross-provider fallback
  • keep the allowlist small, like 2 to 4 models total

What I would avoid:

  • exactly 1 allowed model
  • 0 fallbacks
  • a giant model catalog with no clear primary

Use /model list or:

openclaw models list

to see what your current install/account actually exposes, then wire the best 2 to 4 into primary + fallbacks + models.

warm field
#

This is what I added
openai-codex/gpt-5.4 text+image 1025k no yes default,configured
openai-codex/gpt-5.3-codex text+image 266k no yes fallback#1,configured
openai/o4-mini text+image 195k no no fallback#2,configured

simple schoonerBOT
#

Yep, this is way better.

I like this shape:

  • openai-codex/gpt-5.4 as primary, good
  • openai-codex/gpt-5.3-codex as fallback #1, reasonable
  • openai/o4-mini as fallback #2, fine as a last-resort backup

My only caveat: I would treat o4-mini as an emergency fallback, not the model I’d expect to feel most agentic for real work.

So if it were me, I’d stop tweaking the model stack for a minute and test again with:

  • strict-agentic enabled
  • typingMode: instant
  • this new fallback chain

If it still feels chatbot-y after that, the next move is logs, not more model shuffling:

warm field
#

Here are logs from the last try
09:58:55-06:00 error [tools] message failed: guildId required raw_params={"action":"channel-list","channel":"discord","includeArchived":true,"limit":200}
09:58:55-06:00 error [tools] message failed: guildId required raw_params={"action":"channel-list","channel":"discord","includeArchived":true,"limit":200}
10:00:09-06:00 error [tools] read failed: ENOENT: no such file or directory, access '/Users/clawdbot/.openclaw/workspace/memory/2026-04-21.md' raw_params={"path":"/Users/clawdbot/.openclaw/workspace/memory/2026-04-21.md"}
10:00:09-06:00 error [tools] read failed: ENOENT: no such file or directory, access '/Users/clawdbot/.openclaw/workspace/memory/2026-04-21.md' raw_params={"path":"/Users/clawdbot/.openclaw/workspace/memory/2026-04-21.md"}
10:00:09-06:00 error [tools] read failed: ENOENT: no such file or directory, access '/Users/clawdbot/.openclaw/workspace/memory/2026-04-20.md' raw_params={"path":"/Users/clawdbot/.openclaw/workspace/memory/2026-04-20.md"}
10:00:09-06:00 error [tools] read failed: ENOENT: no such file or directory, access '/Users/clawdbot/.openclaw/workspace/memory/2026-04-20.md' raw_params={"path":"/Users/clawdbot/.openclaw/workspace/memory/2026-04-20.md"}
It definitely wasn't chatty. Actually hasn't responsded yet.

simple schoonerBOT
#

These logs are actually pretty telling.

What looks harmless:

  • the missing memory/2026-04-21.md and memory/2026-04-20.md reads
    That usually just means it probed for daily memory files and they don’t exist.

What looks not harmless:

  • message failed: guildId required on action:"channel-list"

That means the agent is trying to use the Discord message tool for channel listing, and it’s doing it wrong. If your task had nothing to do with Discord channel admin/listing, that’s a bad sign. It can absolutely derail a run.

So my next guess is: this is now less “bad model” and more “tool wandering / bad tool choice”.

I’d do this next:

#
openclaw config get tools.profile
openclaw config get tools.allow
openclaw config get tools.deny

If message is effectively allowed and you don’t actually need proactive Discord actions, I’d do a quick test with the normal coding profile:

openclaw config set tools.profile coding
openclaw gateway restart

Also, after changing model/tool config, start a fresh session (/new or a new chat) before retesting. Old session state can keep weird behavior around.

Then run: