awslabs / awslabs/cli-agent-orchestrator

[Feat] Non-technical Runs UI: start-a-run wizard, plain-language live board, animated flow graph (implementation available)

Open
#292 1 comment 0 reactions 1 assignee Claimed by @call-me-ram View on GitHub
feature
Dominant language
Python
Stars
1.3k
Forks
267
Avg merge
1d 23h
Merged PRs (30d)
70

Description

## Overview
The web dashboard currently speaks tmux: sessions, terminals, windows, providers. For the people who'd benefit most from CAO — someone who wants a team of agents to build something without touching a terminal — that's a wall. I built a non-technical front door on a branch and it's been validated end-to-end with Playwright against live agents. Filing as a feature suggestion + offer to upstream.

Branch: **https://github.com/call-me-ram/cli-agent-orchestrator/tree/feat/ops-mcp-orchestration-driver** (UI work is in `web/`, server enablers included; also fixes #281 and #282 — details below)

## What it adds

**"Runs" board (new default tab)**
- A CAO session is shown as a *run*: the supervisor is "the planner", other terminals are "workers", statuses map to plain language ("The planner is working…", "Worker developer needs your answer", "Hit a problem").
- **Flow-graph view per run**: planner node on the left, workers on the right, status-colored nodes — and an **animated pulse travels the edge for every live agent-to-agent message** (amber planner→worker on handoff/assign, green worker→planner on send_message). Pure SVG/SMIL, no graph dependency. Backed by a new `flow.message` bus event published at both send sites and multiplexed into the existing `/events` SSE stream.
- Answer dialog (shows the agent's actual question, sends the reply), Instruct dialog (message the planner mid-run), one-click end-run.

**Start-a-run wizard**
- Three steps: describe the goal in plain words → pick a planner profile → launch. Launch = existing `POST /sessions` + the goal as the planner's first message; one transparent retry absorbs cold-start init flakes.

**Zero status polling**
- One `EventSource('/events')` replaces all the 3s per-terminal `setInterval` polls; a Playwright test watches the network and fails if any status GET happens during a quiet window.

**Fixes for existing issues**
- **#281**: removing a *default* agent-profile directory now persists (new `disabled_agent_dirs` setting); the UI shows removed defaults with one-click Restore and renders the effective state the server returns, so "Settings saved" can't mislead.
- **#282**: a "Browse…" button opens an in-app folder picker backed by a new `GET /fs/dirs` (server-side listing, directories only) — wired into Settings *and* the wizard's project-folder field.

**Friction killers found by real use**
- Windows paths accepted everywhere a directory is entered (`C:\Users\me\project` → `/mnt/c/...` under WSL, Explorer "Copy as path" quotes stripped, missing folder auto-created, clear 400s instead of opaque 500s).
- Claude's workspace-trust dialog pre-seeded (`~/.claude.json`) so launching in a fresh directory can't stall init.
- Mouse-wheel scrolling in the web terminal (tmux mouse mode per CAO session).
- Per-agent **LLM model visibility** ("provider · model" on the board and terminal header), resolving the provider CLI's configured default when the profile doesn't pin one.
- Relative timestamps corrected for server/browser clock skew via an `X-Server-Time` header (WSL2 clock drift made a just-spawned session show "Active 6h ago").
- Terminal output viewer strips cursor-visibility and OSC-8 hyperlink escapes that leaked as `␛[?25h` garbage.

## Verification
Playwright e2e in `web/e2e/`: dashboard front door, the no-polling proof, and a full LIVE run (wizard → real claude planner → live narration → teardown) — all green. 47 vitest unit tests; server-side suite ~2,350.

Happy to split into reviewable PRs if there's interest.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.