#My OpenClaw always wants to access the tool "read"
1 messages · Page 1 of 1 (latest)
Yep, that points much more to tool policy than to Telegram or LXC.
read is a built-in OpenClaw tool, and skills use it to open SKILL.md. If you see Tool read not found, the session’s effective tool set is stripping filesystem tools.
Most likely causes:
tools.profile: "messaging"or"minimal"tools.denycontainsreadorgroup:fstools.allow/tools.byProvider/agents.*.toolsis too restrictive- if this is a Telegram group/topic, group sandbox/tool policy is denying
group:fs
Quick checks:
openclaw --version
openclaw status
openclaw config get tools
openclaw config get agents
openclaw skills list --verbose
openclaw logs --follow
What you want to see:
tools.profileshould usually becodingfor a normal local assistantgroup:fsshould not be denylisted- no provider-specific or agent-specific tool policy should remove
read
Important bit: read lives in group:fs.
So the fix is usually either:
- set
tools.profile: "coding", or - keep your restrictive profile, but make sure the same policy layer still allows
group:fs
Also, after installing a skill, start a new session so OpenClaw picks it up.
Docs:
- https://docs.openclaw.ai/help/faq
- https://docs.openclaw.ai/tools
- https://docs.openclaw.ai/tools/skills
- https://docs.openclaw.ai/gateway/configuration-reference
If you paste the output of:
openclaw config get tools
openclaw config get agents
I can tell you exactly which line is killing read. Glad you caught the Control UI clue, that was the right place to look. 🦐
If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it.
Ok, thanks! But obviously the tools are missing
Yes, missing from that session. I should’ve been clearer.
What I mean is:
readis a core OpenClaw tool- so if the agent says
Tool read not found, then either:- the session’s tool policy filtered it out, or
- the runtime tool catalog is broken/regressed
So you’re right, from the AI’s point of view the tool is missing. It just usually means “missing from effective tools”, not “this skill forgot to install something”.
Can you paste these?
openclaw config get tools
openclaw config get agents
openclaw logs --follow
Then trigger the failure once more.
I’m especially looking for:
tools.profile: "messaging"/"minimal"- any
deny: ["group:fs"]ordeny: ["read"] - provider-specific
tools.byProvider - warnings about tool allowlists in the logs
If those look clean, then I’d start suspecting a 2026.4.21 bug/regression, not your Telegram/LXC setup.
root@openclaw:~ openclaw config get tools
🦞 OpenClaw 2026.4.21 (f788c88) — I don't just autocomplete—I auto-commit (emotionally), then ask you to review (logically).
{
"profile": "minimal",
"web": {
"search": {
"enabled": false,
"provider": "tavily"
}
}
}
{
"defaults": {
"model": {
"primary": "google/gemini-2.5-flash",
"fallbacks": [
"openrouter/openrouter/elephant-alpha",
"openrouter/google/gemma-4-31b-it:free",
"openrouter/google/gemma-4-26b-a4b-it:free"
]
},
"models": {
"openrouter/openrouter/free": {
"alias": "Auto (Free Router)"
},
"openrouter/openrouter/elephant-alpha": {},
"openrouter/google/gemma-4-31b-it:free": {},
"openrouter/google/gemma-4-26b-a4b-it:free": {},
"google/gemini-3.1-pro-preview": {
"alias": "gemini"
},
"google/gemini-2.5-flash": {},
"groq/openai/gpt-oss-20b": {},
"groq/openai/gpt-oss-120b": {},
"groq/groq/compound": {},
"groq/groq/compound-mini": {},
"groq/llama-3.1-8b-instant": {},
"nvidia/moonshotai/kimi-k2.5": {},
"nvidia/nvidia/llama-3.1-nemotron-70b-instruct": {},
"nvidia/meta/llama-3.3-70b-instruct": {},
"nvidia/nvidia/mistral-nemo-minitron-8b-8k-instruct": {},
"groq/meta-llama/llama-4-scout-17b-16e-instruct": {}
},
"workspace": "/root/.openclaw/workspace",
"memorySearch": {
"enabled": false
},
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
}
Yep, that’s it. You found the cause.
tools.profile: "minimal" means the agent basically gets only session_status. So read is absolutely missing there, and any skill that tries to load SKILL.md will fail.
So this is not a Telegram/LXC problem, it’s your tool policy.
Fix
Recommended:
openclaw config set tools.profile coding
Then start a new session in Telegram, or use /new, and try the skill again.
Why
minimal= almost no tools- skills commonly need
read codingincludes filesystem tools likeread,write,edit,apply_patch
If you want to verify:
openclaw config get tools
You should then see:
{
"profile": "coding"
}
If it still acts weird after that, restart the gateway once:
openclaw gateway restart
Docs:
- https://docs.openclaw.ai/tools
- https://docs.openclaw.ai/tools/skills
- https://docs.openclaw.ai/gateway/configuration-reference
If you want, paste openclaw config get agents too, but I’m pretty confident profile: "minimal" is the whole problem here. 🦐
If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it.
Yep, that agents block looks fine. I don’t see any agent-level tool restriction there.
So this narrows it down nicely:
agents.defaultsshown here is not removingread- your global
tools.profile: "minimal"is removingread
So I’m pretty confident the fix is just:
openclaw config set tools.profile coding
Then do one of these:
openclaw gateway restart
and start a new chat/session in Telegram, or use /new.
Why I’m confident
Your pasted agents config has no tools section under:
agents.defaults.tools- or any
agents.list[].tools
So there’s no visible per-agent override fighting the global setting.
After changing it, verify
openclaw config get tools
You want it to show:
{
"profile": "coding",
"web": {
"search": {
"enabled": false,
"provider": "tavily"
}
}
}
If it still fails after that, then paste:
openclaw logs --follow
right after reproducing it once, but honestly, I think we got it. minimal was starving the agent of filesystem tools.
Docs:
- https://docs.openclaw.ai/help/faq
- https://docs.openclaw.ai/tools
- https://docs.openclaw.ai/tools/skills
- https://docs.openclaw.ai/gateway/configuration-reference
Glad you pasted both configs, that made this much clearer. 🦐
If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution.
info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✓ commands.list 259ms conn=4083230c…a1ba id=551be421…4ce2
20:06:14+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✓ models.list 267ms conn=4083230c…a1ba id=58cec7d6…7c84
20:10:42+00:00 warn bonjour {"subsystem":"bonjour"} watchdog detected non-announced service; attempting re-advertise (gateway fqdn=openclaw (19)._openclaw-gw._tcp.local. host=openclaw-(19).local. port=18789 state=probing)
20:10:42+00:00 info gateway/reload {"subsystem":"gateway/reload"} config change detected; evaluating reload (tools.profile)
20:10:42+00:00 info gateway/reload {"subsystem":"gateway/reload"} config change applied (dynamic reads: tools.profile)
20:10:43+00:00 warn bonjour {"subsystem":"bonjour"} gateway name conflict resolved; newName="openclaw (19)"
20:10:43+00:00 warn bonjour {"subsystem":"bonjour"} gateway hostname conflict resolved; newHostname="openclaw-(19)"
20:10:57+00:00 info gateway {"subsystem":"gateway"} signal SIGTERM received
20:10:57+00:00 info gateway {"subsystem":"gateway"} received SIGTERM; shutting down
20:10:57+00:00 info gmail-watcher {"subsystem":"gmail-watcher"} gmail watcher stopped
20:10:57+00:00 info gateway/ws {"subsystem":"gateway/ws"} webchat disconnected code=1012 reason=service restart conn=4083230c-684d-443e-bd6a-791722d5a1ba
20:11:08+00:00 info gateway {"subsystem":"gateway"} loading configuration…
20:11:08+00:00 info gateway {"subsystem":"gateway"} resolving authentication…
20:11:08+00:00 info gateway {"subsystem":"gateway"} starting...
20:11:10+00:00 error (node:30254) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead.
(Use node --trace-deprecation ... to show where the warning was created)
20:11:26+00:00 info gateway {"subsystem":"gateway"} starting HTTP server...
20:11:26+00:00 info gateway/canvas {"subsystem":"gateway/canvas"} canvas host mounted at http://0.0.0.0:18789/__openclaw__/canvas/ (root /root/.openclaw/canvas)
20:11:26+00:00 warn gateway {"subsystem":"gateway"} ⚠️ Gateway is binding to a non-loopback address. Ensure authentication is configured before exposing to public networks.
20:11:26+00:00 info gateway/health-monitor {"subsystem":"gateway/health-monitor"} started (interval: 300s, startup-grace: 60s, channel-connect-grace: 120s)
20:11:26+00:00 info gateway {"subsystem":"gateway"} agent model: google/gemini-2.5-flash
20:11:26+00:00 info gateway {"subsystem":"gateway"} ready (6 plugins: acpx, browser, device-pair, phone-control, talk-voice, telegram; 18.0s)
20:11:26+00:00 info gateway {"subsystem":"gateway"} log file: /tmp/openclaw/openclaw-2026-04-23.log
20:11:26+00:00 warn gateway {"subsystem":"gateway"} security warning: dangerous config flags enabled: gateway.controlUi.allowInsecureAuth=true, gateway.controlUi.dangerouslyDisableDeviceAuth=true. Run openclaw security audit.
20:11:26+00:00 info gateway/heartbeat {"subsystem":"gateway/heartbeat"} {"intervalMs":1800000} heartbeat: started
20:11:26+00:00 info gateway {"subsystem":"gateway"} starting channels and sidecars...
20:11:26+00:00 info cron {"module":"cron","storePath":"/root/.openclaw/cron/jobs.json"} {"enabled":true,"jobs":0,"nextWakeAtMs":null} cron: started
20:11:26+00:00 info gateway/hooks {"subsystem":"gateway/hooks"} loaded 4 internal hook handlers
20:11:36+00:00 warn bonjour {"subsystem":"bonjour"} watchdog detected non-announced service; attempting re-advertise (gateway fqdn=openclaw._openclaw-gw._tcp.local. host=openclaw.local. port=18789 state=probing)
20:11:36+00:00 info bonjour: advertised gateway fqdn=openclaw._openclaw-gw._tcp.local. host=openclaw.local. port=18789 state=announcing
20:11:42+00:00 info gateway/ws {"subsystem":"gateway/ws"} webchat connected conn=505973aa-02ad-49c7-bb1e-f4ff6691f5fd remote=192.168.178.112 client=openclaw-control-ui webchat v2026.4.15
20:11:44+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✗ chat.history 0ms errorCode=UNAVAILABLE errorMessage=chat.history unavailable during gateway startup conn=505973aa…f5fd id=0afde9c3…effc
20:11:44+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✗ models.list 1ms errorCode=UNAVAILABLE errorMessage=models.list unavailable during gateway startup conn=505973aa…f5fd id=6b2297ac…07f8
20:11:44+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✓ commands.list 295ms conn=505973aa…f5fd id=6f7de9a1…fd70
20:11:44+00:00 info plugins {"subsystem":"plugins"} embedded acpx runtime backend registered (cwd: /root/.openclaw/workspace)
20:11:44+00:00 info browser/server {"subsystem":"browser/server"} Browser control listening on http://127.0.0.1:18791/ (auth=token)
20:11:44+00:00 info gateway/channels/telegram {"subsystem":"gateway/channels/telegram"} [default] starting provider (@paulgerhardt_bot)
20:11:45+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✗ chat.history 0ms errorCode=UNAVAILABLE errorMessage=chat.history unavailable during gateway startup conn=505973aa…f5fd id=d866bfce…c3af
20:11:45+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✓ node.list 1416ms conn=505973aa…f5fd id=3aeb44ed…4d57
20:11:45+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✓ device.pair.list 1425ms conn=505973aa…f5fd id=09a97dee…f25b
20:11:46+00:00 info gateway/ws {"subsystem":"gateway/ws"} ⇄ res ✗ chat.history 0ms errorCode=UNAVAILABLE errorMessage=chat.history unavailable during gateway startup conn=505973aa…f5fd id=fb909cdc…bcbe
20:11:46+00:00 info plugins {"subsystem":"plugins"} embedded acpx runtime backend ready
20:11:46+00:00 warn bonjour {"subsystem":"bonjour"} gateway name conflict resolved; newName="openclaw (2)"
20:11:46+00:00 warn bonjour {"subsystem":"bonjour"} gateway hostname conflict resolved; newHostname="openclaw-(2)"
20:11:47+00:00 warn bonjour {"subsystem":"bonjour"} restarting advertiser (service stuck in announcing for 11433ms (gateway fqdn=openclaw (2)._openclaw-gw._tcp.local. host=openclaw-(2).local. port=18789 state=announcing))
20:11:50+00:00 info bonjour: advertised gateway fqdn=openclaw._openclaw-gw._tcp.local. host=openclaw.local. port=18789 state=announcing