Skip to content

Board: keep "needs input" until I answer, and show per-agent run state #8634

Open

Description

@Mariusfaitducode

Summary

  • I run many agents across many workspaces and lose track of which ones are waiting on me
  • Once I open a workspace, I can't tell later whether its agent is still waiting for my reply
  • With several agents in one workspace, I can't see at a glance which are running and which are idle or stopped

Today
The Board view groups workspaces by state, and the sidebar emphasizes live work. The docs don't say whether "Needs attention" survives opening the workspace, and agent chips only show when several agents run.

Proposal

  • "Needs input" stays until I actually reply or approve, not until I view the workspace
  • On the Board and in the sidebar, list each agent with its state (running / waiting for input / idle / stopped)
  • A filter: "waiting for me" across all workspaces
  • Settings to customize this: which states count as "needs me", what the sidebar shows per agent, and the order and visibility of Board columns

I'd be happy to contribute a PR once we agree on the approach.

Environment
Superset 1.37.0, macOS arm64

Activity

  1. github-actions commented on Oct 19, 2026

    @github-actions
    Contributor

    This is a feature request about the agent status display, not a crash. The reporter runs many agents and wants three things. First, a "waiting on me" state that stays until they actually reply, instead of clearing when they open the workspace. Second, each agent's own state shown on the Board and in the sidebar. Third, a cross-workspace "waiting for me" filter and settings for all of this. From reading the code, half of the first point already works: permission requests and failures are not cleared by viewing. The state that viewing clears is "Ready for review" (the agent finished its turn and is waiting for the next prompt). Clicking a workspace in the sidebar clears it for every agent in that workspace, which matches "once I open a workspace, I can't tell later".

    How it works today

    Workspace status is the highest status among its agents.

    • useAccessibleV2Workspaces.ts:641-685 computes each terminal agent's status with deriveTerminalAgentStatus and reduces them with pickHigherStatus. The result is one agentStatus per workspace (:719). Each agent's own status is dropped at this point.
    • deriveBoardColumn.ts:77-94: permission/failed go to Needs attention, working goes to Working, and review goes to Needs review (not for session workspaces). The column order is fixed on purpose (deriveBoardColumn.ts:16, "never user-reorderable").

    What viewing clears, and what it doesn't

    • deriveTerminalAgentStatus.ts:4-23: only review is gated on a "seen" timestamp. Its comment says permission is deliberately not seen-gated. failed isn't either. Both stay until the agent's next hook event (packages/shared/src/agent-status.ts:22-37). So "Needs attention" already survives opening the workspace, and it clears when the agent resumes, which is effectively when the user answers.
    • review → idle happens in two places:
      • useClearActivePaneAttention.ts:35-46: when the user focuses a pane whose agent is in review. This is per pane, so it's reasonable.
      • useDashboardSidebarWorkspaceItemActions.ts:82-112 → useMarkSidebarWorkspaceTerminalsSeen (DashboardSidebarWorkspaceStatusProvider.tsx:474-494): a click on a sidebar workspace row marks every terminal with an agent binding in that workspace as seen. With several agents in one workspace, opening it clears "Ready for review" on agents the user never looked at. This is the most concrete gap behind the report.

    Sidebar agent chips

    • DashboardSidebarWorkspaceChips.tsx:40-49: the chip only renders when runningAgents.length > 1 or the one agent has subagents. It also depends on the workspaceAgentsRowEnabled setting. The hover card (DashboardSidebarAgentsChip.tsx:126-134) already lists each agent with its status, but only behind that gate.

    Filters

    • An Agent status filter already exists: V2_WORKSPACES_AGENT_STATUS_FILTERS (v2WorkspacesFilterStore.ts:26-54), with idle / working / permission / review / failed, applied in useAccessibleV2Workspaces.ts:224-229. Selecting permission + failed (+ review) works as a manual "waiting for me" filter. A one-click preset would be a small addition.

    Reproducing the main gap

    1. Open one workspace with two agent terminals A and B.
    2. Let both finish a turn (each emits Stop, so both are review).
    3. Switch to another workspace, then click the first workspace's row in the sidebar.
    4. Expected: B stays "Ready for review" until its pane is focused. Actual: both A and B become idle, so the workspace leaves the "Needs review" column and the review filter.

    As a bun:test sketch: the logic below is plain and can be tested directly. Call deriveTerminalAgentStatus({ lastEventType: "Stop", lastEventAt: 100, lastSeenAt }). It returns review when lastSeenAt is undefined and idle when it is 100. Then show that useMarkSidebarWorkspaceTerminalsSeen writes terminalSeenAt for every binding in the workspace, not only the focused pane's.

    Possible directions

    1. Stop clearing everything on a row click. Drop the markWorkspaceTerminalsSeen() call from handleClick and let useClearActivePaneAttention clear only the pane the user actually focuses. Keep the clear-all behaviour for the explicit "mark read" and "clear status" actions (:237-254). This is the smallest change for proposal 1. A stricter option is to treat review like permission (cleared only by the next Start). That would change dock badges and notifications too, so it should be a setting, not the default.
    2. Per-agent state on the Board. Keep each agent's status in the agentActivityEntries reduction (it already tracks agents per workspace at :668-671) and render it on Board cards. The sidebar could reuse DashboardSidebarAgentHoverRow. Showing the chip for a single agent means relaxing the > 1 gate, ideally behind the existing workspaceAgentsRowEnabled setting or a new one.
    3. "Waiting for me" filter. Add a preset over the existing agent-status filter. Which statuses count could become a setting.
    4. User-reorderable or hideable Board columns. This goes against a deliberate design choice (deriveBoardColumn.ts:16), so a maintainer should decide it before anyone writes a PR.

    Any new strings need Lingui macros and translations (bun run check:i18n). New persisted settings must be registered under the desktop localStorage policy (apps/desktop/AGENTS.md).

  2. kasrakhosravi commented on Oct 27, 2026

    @kasrakhosravi

    @Mariusfaitducode How many agents do you usually have running at once when you lose track of the waiting ones?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions