OpenClaw only chats and won't use tools after update
Fix OpenClaw when it suddenly stops reading files, patching code, or running commands after a recent update. The most common cause is `tools.profile: messaging` or a narrower tool policy.
Symptoms
- OpenClaw still responds in chat, but it will not:
- read local files
- write or patch files
- run shell commands
- You may see replies like:
I don't have the read tool availableagent has no exec/read/write tools, only message and sessionsCreate this file manually
- This often appears right after updating or reinstalling OpenClaw in early March 2026.
Cause
There are two common root causes that feel similar in practice:
- Tool policy change: your tool allowlist no longer includes filesystem/runtime tools.
- Tool-calling regression / non-tool-capable model: the model canât (or wonât) call tools reliably, so the agent âonly chatsâ even though tools are enabled.
Some early-March install or onboarding paths left affected machines with:
{
tools: {
profile: 'messaging',
},
}
The messaging profile is narrower than a coding-oriented tool profile, but it does not include the classic
filesystem/runtime tools people expect for coding workflows.
That means the agent can still chat and manage sessions, but it may lose read, write, apply_patch, and exec for
that specific config/profile.
This exact symptom cluster appears in recent GitHub reports such as:
#34810â agent reduced to âmessage and sessionsâ and no longer able to useexec/read/write#36968â user cannot read a file in the workspace because thereadtool is unavailable
June 2026 note: separate tool policy from disabled skill/plugin loading
The OpenClaw v2026.6.1 release highlights clearer stale disabled skills/plugin loading recovery. Do not assume every âonly chatsâ symptom is tools.profile: if logs point at disabled skills/plugins or stale plugin loading, route to plugin/skill recovery and update flow instead of widening tool policy first.
Use /guides/clawhub-usage-guide and /plugins for plugin and skill recovery context, /guides/openclaw-configuration for config precedence, and /guides/updating-and-migration for the update path. The root diagnosis on this page remains tool policy unless your evidence points elsewhere.
Fix
0) Quick check: is this actually a tool-calling regression?
If you see the model printing tool calls as literal text (for example exec({...})) instead of actually running them, you are not debugging tools.profile.
Do this first:
- Switch to a known tool-capable model (and restart), or
- Pin/rollback to the last version that worked in your environment.
Related reading:
- /troubleshooting/solutions/model-outputs-historical-context-tool-call-text
- /guides/updating-and-migration
1) Check your current tools profile
Run:
openclaw config get tools
If you see something like:
{
"profile": "messaging"
}
that is likely the reason for the chat-only behavior on that install.
2) Restore coding tools for local development
If this is your own machine and you want the classic coding-agent behavior, set:
{
tools: {
profile: 'coding',
},
}
Edit ~/.openclaw/openclaw.json, save, then restart OpenClaw.
3) Or keep messaging and add only what you need
If you want a narrower policy, use:
{
tools: {
profile: 'messaging',
allow: ['group:fs', 'group:runtime'],
},
}
This restores most file and command workflows without fully broadening tool access.
4) Restart and test
openclaw doctor
openclaw gateway restart
openclaw health
Then test a simple task:
- read a known file in your workspace
- run
pwd - apply a small patch to a harmless file
Verify
The fix is working if OpenClaw can once again:
- read a file without asking you to paste it manually
- run a simple command instead of describing it
- patch a file directly instead of printing code for you to copy
If changing the profile did not fix it
Check these next:
tools.denymay still blockexecorread- an individual agent may override the global profile with
agents.list[].tools.profile - your gateway may be running from a different state dir or config path than the one you edited
Use:
openclaw config get tools.deny
openclaw gateway status
openclaw status --deep
If tools look enabled but tool runs still donât happen, check the model/runtime layer:
- Confirm the resolved model/provider is reachable:
openclaw models status --probe
- Try switching to a model you already have working (a model ref that passes probe):
openclaw config set agents.defaults.model.primary <provider/model>
openclaw gateway restart
- If this started immediately after an update, use the updater to pin a known-good version (replace
<version>with the last working one):
openclaw update --tag <version>
openclaw gateway restart
Recommended next steps
- Full guide: /guides/openclaw-not-using-tools-after-update
- Config basics: /guides/openclaw-configuration
- Update workflow: /guides/updating-and-migration