Problem
When the agent invokes tools, the chat sometimes shows raw JSON tool call blocks instead of formatted tool execution display.
Common with Ollama local models that emit tool calls inline as text.
Fix
In runner.py: detect tool call patterns in LLM text responses and parse/execute them.
In SessionPanel.ts: client-side filter to strip tool call blocks from displayed text.
Problem
When the agent invokes tools, the chat sometimes shows raw JSON tool call blocks instead of formatted tool execution display.
Common with Ollama local models that emit tool calls inline as text.
Fix
In runner.py: detect tool call patterns in LLM text responses and parse/execute them.
In SessionPanel.ts: client-side filter to strip tool call blocks from displayed text.