We need help debugging an OpenClaw companion setup where Bryan handles Telegram image turns, but some supplement turns stall after image receipt.
Current setup:
OpenClaw gateway on Telegram
custom hooks enabled
companion-server backend
model currently google/gemini-3-flash-preview
images now mostly go through the normal native path, not the old heavy doc path
What the logs show on April 16, 2026 around 00:59-01:00 Rome:
a 2-image turn arrived and went through visual-ingress ... bypass
Bryan sent one reply successfully
then more image turns arrived normally
after that, a supplement path tried to run:
openclaw supplement lookup "NOW Ashwagandha 450mg" && openclaw supplement lookup "Healthygift MBP Milk Protein Extract"
that failed with:
EBUSY: resource busy or locked ... exec-approvals.json
after that, no matching Telegram send appears for the later image turns
Question:
why is a supplement/image turn still trying to use an exec-based shell lookup path at all
and can that exec-approvals.json lock failure leave the turn hanging / suppress the final reply
Another clue from startup logs:
OpenClaw warns that tools.allow contains unknown entries like log_meal, companion_message, tts, pdf
so tool exposure/config may also be mismatched on this runtime/model lane
What we need to understand:
whether this is a bad tool registration / model capability mismatch
whether managed exec approvals can deadlock or block image turns after an EBUSY
how to fully remove remaining shell-style supplement lookup from the runtime path