# RunBoard

All your runs on one board, grouped by what they need, with live clocks, the newest steps, filters and actions.

- **Use it for**: Many runs across threads, grouped by what they need.
- **Not for**: One run in detail. Try [RunInspector](https://unseenui.com/components/run-inspector/), [RunSummaryCard](https://unseenui.com/components/run-summary-card/).

## Installation

```bash
npm install @stackunseen/ui
```

## Usage

```tsx
import { RunBoard } from '@stackunseen/ui/conversation-flow';
import '@stackunseen/ui/styles.css';
import '@stackunseen/ui/conversation-flow.css';

<RunBoard variant="board" runs={runs} now={clock} onAction={request} />
```

## All props

| Prop | Type | Description |
| --- | --- | --- |
| `emptyMessage` | `string` |  |
| `filter` | `RunBoardFilter` |  |
| `hideLabel` | `boolean` | Keeps the label for screen readers only, when the page already shows what the list is. |
| `hrefFor` | `((card: RunCard) => string \| undefined)` | A link for each card, so it can open in a new tab; a plain click still calls onSelect. |
| `label` | `string` |  |
| `locale` | `string` |  |
| `now` | `string` | The host clock, for deterministic rendering. |
| `onAction` | `((request: RunActionRequest) => void)` |  |
| `onFilterChange` | `((filter: RunBoardFilter) => void)` |  |
| `onSelect` | `((runId: string) => void)` |  |
| `receipts` | `readonly CommandReceipt[]` | Receipts for actions already requested; a pending receipt disables the card's actions. |
| `renderCardTrailing` | `((card: RunCard) => ReactNode)` | Trusted extra content at the end of each card's title row, such as a DiffStat. |
| `runs` (required) | `readonly RunCard[]` |  |
| `selectedId` | `string \| null` |  |
| `staleAfterMs` | `number` | Heartbeat age after which a running card is marked stale. |
| `timeZone` | `string` |  |
| `variant` | `"list" \| "compact" \| "board"` |  |

## Keyboard

Arrow keys move between cards and columns; Home and End jump within a column; Enter opens a run.

## Works with

[AgentLanes](https://unseenui.com/components/agent-lanes/), [SubagentTree](https://unseenui.com/components/subagent-tree/), [ExecutionTimeline](https://unseenui.com/components/execution-timeline/), [WorkflowGraph](https://unseenui.com/components/workflow-graph/), [AttentionQueue](https://unseenui.com/components/attention-queue/), [RunCompare](https://unseenui.com/components/run-compare/), [ContextBar](https://unseenui.com/components/context-bar/), [Plan](https://unseenui.com/components/plan/), [AgentSteering](https://unseenui.com/components/agent-steering/), [CostLedger](https://unseenui.com/components/cost-ledger/), [ContextWindowMeter](https://unseenui.com/components/context-window-meter/), [MemoryPanel](https://unseenui.com/components/memory-panel/)

Page: https://unseenui.com/components/run-board/
