Priority: P1
User report
When the LLM runs a command, the chat often just displays "Ran command". There is no clear visual cue for which commands are still running, and sometimes the timeline only shows "Working" with a timer while the model is waiting on a command.
Follow-up product direction:
- The UI does not need to expose the full command line while a command is running.
- It should make it obvious that a command/tool call is still active, so the user does not read the chat as idle or stuck.
- Prefer a subtle/minimal indicator on the existing command work-log row, such as an animated dot/pulse/progress shimmer beside
Running command or Command running.
- Once the command finishes, the row should settle into the normal completed
Ran command state.
Why
Command execution is one of the highest-risk and longest-running agent activities. The timeline should make active commands visible, distinguish running from completed commands, and show what the LLM is waiting on. This is a high-value QOL fix because it reduces the feeling that nothing is happening during long commands without making the transcript noisy.
Starting points
apps/web/src/session-logic.ts derives work-log entries and normalizes labels such as "ran command".
apps/web/src/components/chat/MessagesTimeline.logic.ts adds a generic working row.
apps/web/src/components/chat/MessagesTimeline.tsx renders WorkingTimelineRow and work entries.
- Command/tool metadata appears through
command_execution, requestKind === "command", toolTitle, command, and rawCommand fields.
- Terminal/process state is tracked separately in
apps/web/src/terminalStateStore.ts and apps/server/src/terminal/Layers/Manager.ts.
Product behavior
- Running command rows should stay compact and visually calm.
- The default visible label can be generic, such as
Running command, without printing the raw command line.
- If a safe summary/title already exists, it can be used, but the running-state affordance is more important than command detail.
- The generic
Working row should not be the only sign of activity when the model is actually waiting on a command.
- Completed rows should remain scannable and should not keep the running animation.
Acceptance criteria
Priority: P1
User report
When the LLM runs a command, the chat often just displays "Ran command". There is no clear visual cue for which commands are still running, and sometimes the timeline only shows "Working" with a timer while the model is waiting on a command.
Follow-up product direction:
Running commandorCommand running.Ran commandstate.Why
Command execution is one of the highest-risk and longest-running agent activities. The timeline should make active commands visible, distinguish running from completed commands, and show what the LLM is waiting on. This is a high-value QOL fix because it reduces the feeling that nothing is happening during long commands without making the transcript noisy.
Starting points
apps/web/src/session-logic.tsderives work-log entries and normalizes labels such as "ran command".apps/web/src/components/chat/MessagesTimeline.logic.tsadds a genericworkingrow.apps/web/src/components/chat/MessagesTimeline.tsxrendersWorkingTimelineRowand work entries.command_execution,requestKind === "command",toolTitle,command, andrawCommandfields.apps/web/src/terminalStateStore.tsandapps/server/src/terminal/Layers/Manager.ts.Product behavior
Running command, without printing the raw command line.Workingrow should not be the only sign of activity when the model is actually waiting on a command.Acceptance criteria
Running command; raw command text is optional and should not be required for the first pass.Ran commandor another clearly completed state.Workingrow points to or is visually associated with that command state.