That JSON is the model printing what an exec call would look like, not OpenClaw actually executing the exec tool.
When a tool really runs, OpenClaw receives a structured tool call from the provider (not plain text), executes it, and you’ll see the command output / tool result in the trace. With ollama/qwen2.5-coder:32b it’s pretty common that the model “roleplays tool use” and just emits {"name": "...", "arguments": ...} as text → nothing executes → no file.
Things to check (quick, in order):
- Version (important): run and paste:
openclaw --version
- Is the model actually tool-capable in OpenClaw? (if it’s not, tools won’t be exposed at all):
openclaw models status
openclaw models list --provider ollama