#448·shannon

Feature: interactive TUI dashboard (opencode-style) for managing scans

Author: AzizWaresCoCreated Sep 6, 2026Updated Sep 6, 2026

Feature Request: Interactive TUI (opencode-style dashboard)

Summary

Add a persistent, terminal-based TUI to Shannon — an interactive dashboard for launching, monitoring, and resuming pentest scans, in the style of modern coding-agent CLIs (e.g. opencode). Today the experience is splash screen + discrete commands (start, status, logs, stop). A TUI would unify those into one live, persistent interface.

Motivation

  • Single live surface: running a scan currently means juggling start (background), status, logs, and stop across terminals. A TUI gives one persistent view: scan list, live per-agent progress tree, streaming logs, and controls — the same terminal stays useful while a scan runs.
  • Lower onboarding friction: the current flow is splashes + help text + separate monitoring commands. A guided TUI (wizard-style launcher → live dashboard) matches how developers now expect agentic tools to behave.
  • Better scan triage: multiple workspaces side-by-side (running/completed/failed) would make shannon scans and status legible at a glance instead of per-command invocation.

Proposed Experience

  1. Launch: shannon (bare) opens the TUI. A "New scan" panel prompts for target URL, repo path, config, workspace name — like setup's existing clack prompts but inside the dashboard.
  2. Dashboard: persistent panel with:
    • scan list (running / completed / failed), selectable to focus;
    • live phase + agent tree (same data as status --json);
    • streaming combined log + per-agent log tabs (same data as logs);
    • actions: pause/stop/resume, open report path, copy report.
  3. Resume: pick a workspace from the list to resume rather than re-typing -w.
  4. CI-friendly fallback: full non-interactive behavior preserved (flags, --json) when stdout isn't a TTY.

Considerations / Open Questions

  • Library choice (e.g. ink, blessed, @clack-based panels) and how it composes with the existing clack prompts.
  • Keep the TUI as a thin layer over the existing CLI commands / Temporal client so business logic and --json contracts stay shared.
  • Accessibility: NO_COLOR, reduced-motion, and keyboard-only navigation.

Related

  • Current CLI surface: apps/cli/src/index.ts, apps/cli/src/commands/
  • Live progress already exposed via status --json and the Temporal client (apps/cli/src/temporal-client.ts)

Happy to help prototype or flesh out the wireframe if maintainers are interested.