Before submitting
Area
apps/web
Steps to reproduce
- Run any Bash tool call in a Claude-provider thread (desktop or web).
- Expand the tool-call activity in the chat timeline.
Expected behavior
The command is shown once.
Actual behavior
The command is shown twice: once as the plain command preview, and once again below it prefixed with Bash: .
Root cause (traced against the live event log + source)
The canonical item.completed activity carries the same command in two places on one payload:
payload.data.input.command — bare command, e.g. cd ... && grep ...
payload.detail — the same command with a tool-name prefix baked in, e.g. Bash: cd ... && grep ...
extractToolDetail (apps/web/src/session-logic.ts) is designed to suppress detail when it's redundant with the already-rendered command preview — it normalizes both strings via normalizePreviewForComparison → normalizeCompactToolLabel and only returns detail if the normalized strings differ.
normalizeCompactToolLabel only strips a trailing complete/completed suffix:
function normalizeCompactToolLabel(value: string): string {
return value.replace(/\s+(?:complete|completed)\s*$/i, "").trim();
}
It never strips the leading "<ToolName>: " prefix that's already baked into payload.detail. So normalizedCommand ("cd ... && grep ...") and normalizedDetail ("bash: cd ... && grep ...") never match, the dedup check in extractToolDetail treats them as different content, and the redundant detail line renders anyway — directly under the command that was already shown.
Example payload from a live session (Claude provider)
{
"type": "item.completed",
"payload": {
"itemType": "command_execution",
"title": "Command run",
"detail": "Bash: cd /Users/.../eksaq-platform/knowledge-base && grep -n -E \"F0[0-9][0-9]\" TRACKER.md | grep -i -E \"hpc|F0\" | sed -n '1,120p'",
"data": {
"toolName": "Bash",
"input": {
"command": "cd /Users/.../eksaq-platform/knowledge-base && grep -n -E \"F0[0-9][0-9]\" TRACKER.md | grep -i -E \"hpc|F0\" | sed -n '1,120p'"
}
}
}
}
Impact
Cosmetic, but consistently reproducible on every Bash tool call — clutters the timeline for any thread with meaningful shell usage.
Version or commit
Nightly, macOS desktop, Claude provider.
Suggested fix
Strip the "<ToolName>: " prefix (or any leading toolName + ": ") from detail before the redundancy comparison in extractToolDetail/normalizePreviewForComparison, so it's correctly recognized as duplicate content when it only differs from the command preview by that prefix.
Before submitting
Bash:), output isn't affected.Area
apps/web
Steps to reproduce
Expected behavior
The command is shown once.
Actual behavior
The command is shown twice: once as the plain command preview, and once again below it prefixed with
Bash:.Root cause (traced against the live event log + source)
The canonical
item.completedactivity carries the same command in two places on one payload:payload.data.input.command— bare command, e.g.cd ... && grep ...payload.detail— the same command with a tool-name prefix baked in, e.g.Bash: cd ... && grep ...extractToolDetail(apps/web/src/session-logic.ts) is designed to suppressdetailwhen it's redundant with the already-rendered command preview — it normalizes both strings vianormalizePreviewForComparison→normalizeCompactToolLabeland only returnsdetailif the normalized strings differ.normalizeCompactToolLabelonly strips a trailingcomplete/completedsuffix:It never strips the leading
"<ToolName>: "prefix that's already baked intopayload.detail. SonormalizedCommand("cd ... && grep ...") andnormalizedDetail("bash: cd ... && grep ...") never match, the dedup check inextractToolDetailtreats them as different content, and the redundantdetailline renders anyway — directly under the command that was already shown.Example payload from a live session (Claude provider)
{ "type": "item.completed", "payload": { "itemType": "command_execution", "title": "Command run", "detail": "Bash: cd /Users/.../eksaq-platform/knowledge-base && grep -n -E \"F0[0-9][0-9]\" TRACKER.md | grep -i -E \"hpc|F0\" | sed -n '1,120p'", "data": { "toolName": "Bash", "input": { "command": "cd /Users/.../eksaq-platform/knowledge-base && grep -n -E \"F0[0-9][0-9]\" TRACKER.md | grep -i -E \"hpc|F0\" | sed -n '1,120p'" } } } }Impact
Cosmetic, but consistently reproducible on every Bash tool call — clutters the timeline for any thread with meaningful shell usage.
Version or commit
Nightly, macOS desktop, Claude provider.
Suggested fix
Strip the
"<ToolName>: "prefix (or any leadingtoolName + ": ") fromdetailbefore the redundancy comparison inextractToolDetail/normalizePreviewForComparison, so it's correctly recognized as duplicate content when it only differs from the command preview by that prefix.