#how to fix
1 messages · Page 1 of 1 (latest)
If you’re seeing a “shell commands failing” notice, it usually means the exec tool (the thing that runs shell commands) is erroring out — but there are a few totally different root causes.
Can you paste all three so I can point to the exact fix?
openclaw --version- OS (macOS? Linux? Windows/WSL?)
- The exact error text when a shell command fails (1–2 lines is enough)
Common causes we’ve seen:
- macOS Tahoe/Sequoia:
spawn EBADF→execfails instantly. Workaround people use: run the gateway/exec on a headless Linux node host (even on the same machine) and route exec through that, or sometimes a full reboot clears it. - Tool allowlist blocking exec → if you enabled
tools.allow, make sure it includesexec(and not typos / unknown entries). - Gateway running under launchd with different env/config → works in terminal, fails as a service because it’s loading different
.env/config.
Docs for the general checklist: https://docs.openclaw.ai/gateway/troubleshooting
Drop the version + error line and I’ll narrow it down fast.
version 2026.2.26 os mac and the ui told me it was failing no error message
That “shell commands failing” banner is basically: the exec/system.run tool can’t successfully run commands right now (either it’s being denied by policy/approvals or it’s crashing at the OS/process level). The Control UI often doesn’t show the underlying error inline, so you have to grab it from logs.
On macOS, the fastest way to get the real reason is the troubleshooting ladder from the docs:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Then, try one shell-command action again (whatever you did that triggered the banner) while openclaw logs --follow is running, and you should see a concrete line like:
SYSTEM_RUN_DENIED: approval requiredor... allowlist miss→ it’s exec approvals / allowlist, not a crash
Docs: https://docs.openclaw.ai/tools/exec-approvalsNODE_BACKGROUND_UNAVAILABLE→ you’re running it via a node and the node app is backgrounded
Docs: https://docs.openclaw.ai/nodes/troubleshooting
spawn EBADF(macOS) or similar → OS/runtime issue (we’ll need the exact log line + your macOS version)
If you paste just the 5–15 log lines around the first failure (from openclaw logs --follow) + your macOS version (e.g. 14.x / 15.x), I can tell you which bucket you’re in and the exact fix.
I dont care to be doing all that just jow do I allow all the tools to be used?
There are two separate gates:
1) “Allow all tools” (so the model is even allowed to call them)
In your openclaw.json, make sure you’re not restricting tools via tools.profile, tools.allow, tools.deny (or per‑agent overrides).
Simplest “everything on”:
{
tools: {
profile: "full", // or just delete tools.profile entirely
allow: ["*"],
deny: [],
},
}
Notes:
denywins overallow.*wildcard is supported. Docs: https://docs.openclaw.ai/tools
Then restart the gateway:
openclaw gateway restart
2) “Shell commands” specifically (exec approvals on macOS)
Even if tools are allowed, shell commands can still be blocked by Exec Approvals (common on macOS).
Fastest “stop blocking exec” path:
Control UI → Nodes → Exec approvals (pick Gateway or your Mac node) → set:
- Security = full
- Ask = off
→ Save
Docs: https://docs.openclaw.ai/tools/exec-approvals
If you do (1) and (2), the banner should go away unless you’re hitting an actual macOS runtime error (in which case it’ll show up in openclaw logs --follow).
its working now what about when i get tool is not available?
“Tool is not available” is almost always policy/config, not a runtime crash.
It means: that tool wasn’t included in the toolset OpenClaw sent to the model (so the model literally can’t call it).
Common reasons:
- Tool allow/deny/profile is restricting it
tools.profileset tominimal/coding/messagingtools.allowdoesn’t include it (or you used a typo likediscord.message/web.fetchinstead of real tool names / groups)tools.denyincludes it (deny always wins)- or a per-agent override under
agents.list[].tools.*
- Provider-specific restriction
tools.byProvidercan silently narrow tools for a specific provider/model.
- It’s a plugin tool that isn’t loaded
- Some tool names only exist if the plugin is installed/enabled.
Fast “I don’t want to think about it” config is:
tools.profile: "full"tools.allow: ["*"]tools.deny: []
(and make sure you didn’t also set restrictiveagents.list[].tools...overrides)
Docs: https://docs.openclaw.ai/tools
If you paste the exact “tool is not available” line and the tool name (e.g. browser, web_fetch, message, exec, etc.), I can tell you which of the above buckets it is in one reply.
it just says
Tool Output
Tool not found