#My OpenClaw always wants to access the tool "read"

1 messages · Page 1 of 1 (latest)

tacit jacinth
#

Actually I am using my OpenClaw via Telegram. I told it to install a skill from ClawHub, but it failed! So I looked at chat via the ControlUi and saw the AI wants to access the tool read and it showed "Tool read not found". I'm using OpenClaw 2026.4.21 and it's running on an LXC on ProxMox.

gloomy domeBOT
#

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

near vesselBOT
crystal pebbleBOT
#

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.deny contains read or group:fs
  • tools.allow / tools.byProvider / agents.*.tools is 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.profile should usually be coding for a normal local assistant
  • group:fs should 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:

#

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.

tacit jacinth
#

Ok, thanks! But obviously the tools are missing

crystal pebbleBOT
#

Yes, missing from that session. I should’ve been clearer.

What I mean is:

  • read is a core OpenClaw tool
  • so if the agent says Tool read not found, then either:
    1. the session’s tool policy filtered it out, or
    2. 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"] or deny: ["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.

tacit jacinth
#

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
}
}
}

crystal pebbleBOT
#

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
  • coding includes filesystem tools like read, write, edit, apply_patch

If you want to verify:

openclaw config get tools

You should then see:

{
  "profile": "coding"
}
#

Yep, that agents block looks fine. I don’t see any agent-level tool restriction there.

So this narrows it down nicely:

  • agents.defaults shown here is not removing read
  • your global tools.profile: "minimal" is removing read

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:

Glad you pasted both configs, that made this much clearer. 🦐

If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution.

tacit jacinth
#

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