Skip to content

Show active command execution state in the chat timeline #16

Description

@badcuban

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

  • Running commands appear as active timeline rows with a subtle minimalist activity indicator.
  • Completed commands are visually distinct from active commands.
  • A running command row can use generic copy like Running command; raw command text is optional and should not be required for the first pass.
  • Completed command rows settle back to Ran command or another clearly completed state.
  • If the model is waiting on a command, the generic Working row points to or is visually associated with that command state.
  • Failed/cancelled commands get a distinct non-running terminal state.
  • Add tests for running command, completed command, failed command, and generic working fallback states.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequested improvement or new capability.needs-triageIssue needs maintainer review and initial categorization.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions