diff --git a/browse/src/sidebar-agent.ts b/browse/src/sidebar-agent.ts index d4826535..61bbaa45 100644 --- a/browse/src/sidebar-agent.ts +++ b/browse/src/sidebar-agent.ts @@ -167,7 +167,11 @@ function describeToolCall(tool: string, input: any): string { return short.length > 100 ? short.slice(0, 100) + '…' : short; } - if (tool === 'Read' && input.file_path) return `Reading ${shorten(input.file_path)}`; + if (tool === 'Read' && input.file_path) { + // Skip Claude's internal tool-result file reads — they're plumbing, not user-facing + if (input.file_path.includes('/tool-results/') || input.file_path.includes('/.claude/projects/')) return ''; + return `Reading ${shorten(input.file_path)}`; + } if (tool === 'Edit' && input.file_path) return `Editing ${shorten(input.file_path)}`; if (tool === 'Write' && input.file_path) return `Writing ${shorten(input.file_path)}`; if (tool === 'Grep' && input.pattern) return `Searching for "${input.pattern}"`; diff --git a/extension/sidepanel.js b/extension/sidepanel.js index 9547a64c..f3dfca42 100644 --- a/extension/sidepanel.js +++ b/extension/sidepanel.js @@ -241,11 +241,15 @@ function handleAgentEvent(entry) { if (thinking) thinking.remove(); if (entry.type === 'tool_use') { - const toolEl = document.createElement('div'); - toolEl.className = 'agent-tool'; const toolName = entry.tool || 'Tool'; const toolInput = entry.input || ''; + // Skip tool uses with no description (e.g. internal tool-result file reads) + if (!toolInput) return; + + const toolEl = document.createElement('div'); + toolEl.className = 'agent-tool'; + // Use the verbose description as the primary text // The tool name becomes a subtle badge const toolIcon = toolName === 'Bash' ? '▸' : toolName === 'Read' ? '📄' : toolName === 'Grep' ? '🔍' : toolName === 'Glob' ? '📁' : '⚡';