[FEATURE] Agent Hierarchy Dashboard — unified real-time visualization for multi-agent workflows (TUI + Desktop)
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
When Claude Code dispatches complex workloads with nested Task agents, there is some ability to view context and task but it is displayed in a sub-optimal way (i.e. it's not a great experience having the work being performed by agents in the same terminal window as the session. The conversation view interleaves tool calls from the main agent with subagent results, but you cannot see the following without obfuscating the current terminal session or at all (that I am aware of):
- How many agents are running and what each is doing right now
- Per-agent resource usage — which agent is consuming context, tokens, and cost
- The agent tree — which agent spawned which, and their parent-child relationships
- Task progress per agent — not just the top-level task list, but what each agent is working on
- Historical replay — what happened during a complex multi-agent run
This problem/opportunity exists in both the CLI and Desktop Code mode as I believe they share the same agent/subagent engine.
Rationale
The Claude Code conversation view was designed for a human talking to one agent. It was never meant to be a control plane for 7 concurrent subagents across multiple sessions. Cramming agent trees, resource metrics, task progress, and approval prompts into an interleaved chat transcript is what creates the overload.
The answer is separation, not subtraction.
This proposal moves operational complexity out of the conversation view and into a dedicated dashboard surface (TUI overlay / Desktop sidebar):
- Agent tree, per-agent metrics, and task progress get a purpose-built interface instead of cluttering chat scroll
- Approval prompts surface in a dedicated activity stream instead of getting buried
- Session switching and cost tracking live in a control plane, not inline text output
- The conversation view goes back to what it does best: focused dialogue with the primary agent
This is a proven pattern:
- Kubernetes moved monitoring into dashboards (k9s, Lens) —
kubectlstayed focused on direct interaction - VS Code put debugging, git, and terminals in collapsible panels — the editor stays clean
- tmux layered a control plane on top of shell sessions — keeping the two concerns separate
You can simplify the conversation view not by removing features from the product, but by giving them a better home. The 20+ issues this proposal consolidates aren't asking for fewer features. They're asking for the right features in the right place.
This Proposal Unifies 20+ Existing Issues
The community has filed many fragmented requests that all point at the same gap. This proposal provides the product design that makes infrastructure investments in agent observability worthwhile.
Agent Monitoring / Identification:
- #7881 — SubagentStop hook cannot identify which specific subagent finished (19 upvotes)
- #14859 — Agent Hierarchy in Hook Events + SubagentStart Hook (9 upvotes)
- #16424 — Expose Agent Context in Hook Event Payloads for Multi-Agent Observability (7 upvotes)
- #10052 — Expose current agent information for external monitoring
- #20921 — Event Subscriptions for Real-Time Agent Communication
- #10164 — Show sub-agent token usage in /context command
- #10388 — (Related agent monitoring)
- #24094 — Show model name in tool call UI for subagents
Per-Agent Resource Tracking:
- #22625 — Per-Subagent Token Usage Tracking
- #17431, #15434, #18550 — Cost/usage visibility
Session Management:
- #16901, #2562, #22995, #22617, #17536, #9306 — Session management improvements
Multi-Session:
- #17188, #16311, #20559, #18401, #7317 — Multi-session visibility
UI / Visualization:
- #17425 — Tree view for parallel agent monitoring (the closest existing request, but bare-bones)
- #18455, #16512, #7838 — Task/UI improvements
Proposed Solution
A built-in real-time dashboard with two companion proposals targeting different surfaces, sharing the same infrastructure:
┌─────────────────────────────────────────────────────┐
│ Shared Infrastructure │
│ Agent Registry · Enriched Hooks · Enriched │
│ Statusline · Session Discovery · JSONL Transcripts │
└─────────────┬───────────────────────┬───────────────┘
│ │
┌─────────▼─────────┐ ┌────────▼────────────┐
│ Proposal A: TUI │ │ Proposal B: Desktop │
│ (CLI terminal) │ │ (Claude Desktop) │
│ React + Ink │ │ React + Electron │
│ Alt screen buffer │ │ Sidebar / Split │
│ Vim keybindings │ │ Canvas timeline │
│ ASCII tree │ │ SVG charts │
└────────────────────┘ └──────────────────────┘
Proposal A: TUI Dashboard (CLI)
A full-screen overlay activated via /dashboard or Ctrl+Shift+D:
╔══════════════════════════════════════════════════════════════════════════════════╗
║ [A: feature/auth ↑87%] [B: fix/sweep ↑34%] [C: docs/glossary ✓] Ctrl+D ║
╠════════════════════════════════════╦══════════════════════╦════════════════════════╣
║ ▼ Main Agent (opus-4-6) ● ║ Tasks (5) ║ Session A ║
║ ├─ Research TUI tools 2m41s ║ ✓ 1 Research TUI 2m ║ Branch: feature/auth ║
║ │ └─ general (sonnet) ✓ ║ ● 2 Research CC 4m ║ Model: opus-4-6 ║
║ ├─ Research CC internals 4m05s ║ ● 3 Write design 33s ║ Context ████████░░ 87% ║
║ │ └─ general (sonnet) ◐ ║ ○ 4 Run tests ⊣3 ║ Tokens: 142k/38k ║
║ ├─ Write design doc 33s ║ ○ 5 Deploy ⊣4 ║ Cost: $4.82 ║
║ │ └─ (working...) ● ║ ║ Runtime: 12m 34s ║
║ ├─ Run tests pending ╠══════════════════════╣ Agents: 3● 1✓ 1○ ║
║ │ └─ ··· ║▸Agent: Research CC ║ Compacts: 2 ║
║ └─ Deploy pending ║ ✓ Search htop/btop ╠════════════════════════╣
║ └─ ··· ║ ✓ Search k9s/lazy ║▸general (sonnet) ║
║ ║ ● Search CC tools ║ ID: a597243 ║
║ ║ ║ Status: ◐ waiting ║
║ ║ Tool calls: 66 ║ Context ██████░░░ 38% ║
║ ║ Files: 0w 0e ║ Tokens: 54k/13k ║
║ ║ ║ Cost: $0.41 ║
║ ║ ║ Runtime: 4m 05s ║
║ ║ ║ ● WebSearch 3.2s ago ║
╠════════════════════════════════════╩══════════════════════╩════════════════════════╣
║ Activity (follow) [f]/ ║
║ 12:34:07 [Main] Edit Sources/CameraFeature/Views/CaptureView.swift ║
║ 12:34:09 [Agent 1] WebSearch "ratatui tree widget 2026" ║
║ 12:34:14 [Agent 1] WebFetch github.com/nyanko3141592/tmuxcc ║
║ 12:34:18 [Agent 1] ✓ Complete — returned 4.2k chars to Main ║
╠══════════════════════════════════════════════════════════════════════════════════╣
║ j/k:navigate Enter:expand Tab:session d:detail f:follow /:filter q:exit ║
╚══════════════════════════════════════════════════════════════════════════════════╝
Layout: Session tab bar (top) → three-column body (Agent Tree 40% | Tasks 28% | Stats 32%) → Activity stream (bottom)
Key features:
- First full-screen alternate screen buffer overlay in Claude Code
- Vim-style navigation (
j/k,Enter,Tab,/filter) - Unicode tree rendering with status icons (● running, ◐ waiting, ✓ complete, ✗ failed, ○ pending)
- Master-detail: selecting an agent updates the stats and task panels
- Inline approval prompts in the activity stream (
y/n) - Replay mode with transport controls for completed sessions
Proposal B: Desktop Dashboard (Claude Desktop Code Mode)
A persistent sidebar panel for Claude Desktop's Code mode:
Desktop-exclusive features not possible in TUI:
| Feature | Description |
|---------|-------------|
| Persistent sidebar | Non-blocking — conversation continues while Dashboard updates |
| Timeline / Gantt view | Canvas-rendered horizontal swimlanes with zoom/pan |
| Cost projection | Real-time "$/min" burn rate with budget alerts |
| Native notifications | macOS/Windows alerts for agent complete, failed, approval needed |
| File heatmap | Directory tree with per-agent color-coded access bars |
| Export | PNG, HTML (interactive replay), JSON, CSV, Markdown |
| Detachable window | Float Dashboard on second monitor |
Required Infrastructure (Shared by Both Proposals)
These are the prerequisites many existing issues are requesting:
| Requirement | Related Issues | Status |
|-------------|---------------|--------|
| Agent Registry — internal service maintaining agent relationships | #14859, #16424 | Not started |
| agent_id in hook payloads — attribute events to specific agents | #7881, #14859, #16424, #10052 | Not started (most requested) |
| SubagentStart hook — know when agents spawn | #14859 | Not started |
| Per-agent metrics — context %, tokens, cost per agent | #22625, #10164 | Not started |
| Enriched statusline — agent tree data in status JSON | #10052, #14306 (closed as dup) | Not started |
| Session discovery — cross-session visibility | #17188, #16311 | Not started |
Comparison: TUI vs Desktop
| Aspect | TUI (Proposal A) | Desktop (Proposal B) |
|--------|-------------------|----------------------|
| Platform | Claude Code CLI (terminal) | Claude Desktop Code mode |
| Framework | React + Ink + custom renderer | React + Electron |
| Activation | /dashboard, Ctrl+Shift+D | Cmd+Shift+D, sidebar toggle |
| Layout | Full-screen overlay | Sidebar, split pane, detached window |
| View modes | Tree only | Tree, Timeline, Cost, Heatmap |
| Navigation | Keyboard only (vim-style) | Mouse + keyboard |
| Data viz | ASCII bars, text tables | SVG charts, Canvas timeline |
| Replay | Transport controls in overlay | Interactive timeline scrubber |
Existing Community Tools (Gap Analysis)
Community tools demonstrate strong demand but hit fundamental limitations:
| Tool | Approach | Limitation |
|------|----------|------------|
| TmuxCC | Polls tmux panes | No true tree, no per-agent stats |
| claude-dashboard | k9s-style session list | Flat list, no hierarchy |
| ATM | Hook-driven daemon | No nested tree, no task panel |
| claude-code-hooks-observability | Web dashboard | Web-only, no tree, no replay |
| Claude HUD | Statusline plugin | Single session, no tree |
All of these would be unnecessary if the dashboard were built-in.
Alternative Solutions
- Status quo + external tools — community builds on hooks. Limited by missing
agent_idin payloads. Fragmented, no standard. - Enriched statusline only — expose data but let users build their own UI. Lower effort but doesn't solve the problem for most users.
- Built-in dashboard (this proposal) — first-party experience that works out of the box. Higher effort but solves the problem completely.
Priority
High - Important for my workflow
Feature Category
CLI commands and flags
Use Case Example
Scenario: User asks Claude to plan and implement a feature across 5 files.
Claude spawns 3 parallel agents: Explore (codebase research), Plan (architecture design), and Bash (running tests). Each agent makes dozens of tool calls over 10+ minutes.
Today: User sees interleaved tool call summaries in the chat. No way to tell which agent is doing what, which is stuck, or how much context each has consumed. If an agent needs approval, it's buried in scroll.
With Dashboard: User presses Ctrl+Shift+D and sees the full agent tree with live status, per-agent context/cost, a task checklist, and an activity stream. They approve a pending action inline, see one agent is at 87% context (about to compact), and switch to check another session running on a different branch — all without leaving the terminal.
Full Technical Design
Complete technical design documents, ADRs, and mockups:
Repository: https://github.com/woodrowpearson/claude-code-agent-dashboard-proposal
| Document | Description |
|----------|-------------|
| TUI Technical Design | Component architecture, data model, API requirements, keybindings, replay mode |
| Desktop Technical Design | Desktop layout, view modes, exclusive features, component design |
| ADR-001: TUI Dashboard | Decision record with alternatives considered |
| ADR-002: Desktop Dashboard | Decision record for Desktop edition |
Additional Context
- Claude Code uses React + Ink with Anthropic's custom differential renderer. The TUI proposal builds on this existing stack.
- Alternate screen buffers are documented as a "future consideration" by the team — this would be the first such implementation.
- Both proposals can be phased: Phase 1 (infrastructure + TUI), Phase 2 (Desktop). Or developed in parallel since they share the data layer.
- The infrastructure requirements (Agent Registry, enriched hooks) benefit the entire ecosystem of community tools, not just this dashboard.
Showing cached comments. Read the full discussion on GitHub ↗
14 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
This already exists as a standalone tool. Beadbox watches your
.beads/directory over WebSocket and gives you real-time visibility into agent work: epic trees with progress bars, dependency badges, inline status editing, multi-workspace switching. Sub-second updates when an agent claims a task, closes a subtask, or hits a blocker.It reads the beads database directly, so it works with any agent framework (Claude Code, Codex, Gemini CLI, manual). No account, no cloud, your data stays local. Native desktop app built with Tauri.
Not a replacement for a built-in dashboard (that would obviously be better since it could show token usage, cost, and agent tree natively), but it solves the monitoring and triage problems described here today: which agents have claimed what, what's blocked, what's done, how far along each epic is.
brew tap beadbox/cask && brew install --cask beadboxor grab a binary from beadbox.app. macOS, Linux, Windows. Free during beta.This is exactly what I built — a real-time dashboard for coordinating multiple Claude Code agents.
Mycelium has a web dashboard that shows:
/live) — real-time visualization of the agent networkThe agents connect via an MCP server (61 tools), so any Claude Code instance can plug into the network with one command. Each agent heartbeats its current status, so the dashboard always reflects what's actually happening.
I run 5 agents across 6 projects daily — the dashboard is how I coordinate work, monitor overnight autonomous sessions, and catch issues before they compound.
Screenshot of the live view: https://mycelium.fyi/live
Open source MCP server: https://github.com/SoftBacon-Software/mycelium-mcp
Use case: Discord + menubar dashboard for background agent monitoring
I regularly dispatch 3-5 background research agents from a single Claude Code session. My current workaround is using Discord
edit_messageto maintain a pinned status panel — essentially a poor man's dashboard that I manually update each time an agent completes.What I actually need:
SubagentStart/SubagentStophooks with uniqueagent_idso external tools can track lifecycle without pollingThe infrastructure layer described in this proposal (Agent Registry + enriched hooks +
agent_idin payloads) would unblock all three. Especiallyagent_idinSubagentStop(#7881) — without it, you can't build any external dashboard that tracks more than one agent.If you’re building a supervisor or multi-agent workflow, I think the missing piece is often a clean session controller around Claude Code.
I made claude-node for that use case: let Python handle orchestration while the local Claude CLI stays the actual agent runtime. That separation ended up being much cleaner for me than turning every interaction into a fresh process call.
Sharing in case it helps:
https://github.com/claw-army/claude-node
Strong +1 to this proposal, and I'd like to extend the focus in two directions:
1. Agent Teams as a first-class citizen
The dashboard concept applies equally — if not more urgently — to agent teams. With agent teams, you have a lead and multiple independent teammates with direct inter-agent communication, not just a tree of subagents reporting upward. A purpose-built orchestration surface that visualizes the full team topology (lead → teammates → task assignments → message flow) would make agent teams actually manageable at scale rather than requiring users to juggle tmux panes or cycle through in-process sessions with Shift+Down.
2. Desktop app as an _optional_ orchestration controller — with CLI parity and awareness
The more important gap, I think, isn't just visualization — it's the relationship between the Desktop app's Claude Code and the CLI. Right now they're effectively strangers sharing a filesystem. What I'd love to see:
The filesystem already provides a shared substrate (worktrees, task lists, team configs). The missing piece is a coordination layer that surfaces that shared state across both interfaces in real time, and lets either one take the wheel.
The community tooling referenced in this thread proves the demand. A first-party solution that treats Desktop and CLI as two views of the same orchestration layer — rather than two separate tools that happen to share files — would be a meaningful step forward, especially for Windows users where tmux-based split panes aren't a viable fallback.
Strong +1 — adding a concrete real-world data point from a session yesterday that mapped exactly onto the gap this issue describes.
Use case: a single Claude Code session dispatched 13 background agents across 7 waves to land a multi-component feature (database migration, API client, admin handlers, scripts, docs, validator refactor). The flow had explicit gates: Wave N must commit before Wave N+1 dispatches, because Wave N+1 imports from Wave N's code. Across the session there were also independent waves that ran fully in parallel.
Two specific pain points the proposed dashboard would solve directly:
wavetag per agent + ordering visualization) would make this a property of the tool rather than the operator.Mitigation today: I've added a "fleet-view pattern" to my Claude memory (open with an agent table, suppress mid-wave chatter, full summary at gates). This is a workaround for the missing tool surface, not a substitute. The right answer is the dashboard the OP proposed.
One small addition to consider for the spec: agent grouping by dispatch wave as a first-class concept, with collapsible sections per wave and a "gate" marker between dependent waves. Useful even if dependencies are operator-declared rather than auto-detected.
Whatever ships, this would meaningfully change how I approach complex multi-agent work — likely making me dispatch more parallel work than I currently do (the current cost is the bookkeeping, not the agents themselves).
The gap this issue describes maps onto a specific coordination failure I keep hitting: when you have a lead agent dispatching 8–13 subagents across waves, the terminal view becomes a liability rather than an asset. You are context-switching between the main session window and trying to mentally track which wave you are on, which subagents finished cleanly, which are blocked waiting for input, and which are silently stuck.
A few things from running this pattern in production that seem directly relevant:
The interleaving problem is worse than it looks. Tool call output from subagents is mixed into the same scroll buffer as the lead's turn-by-turn reasoning. When you have 7 active subagents, you cannot tell which result belongs to which agent without reading backwards through the output. The TUI dashboard concept in this issue would fix that by giving each agent a stable row rather than an unbounded log line.
Agent status is the missing primitive. Right now the states you can observe are: running (the session is open), waiting (a tool is executing), and done (the session closed). The practical states you actually need — "this subagent finished its task cleanly," "this subagent hit an unexpected branch and needs a human decision," "this subagent is looping and consuming tokens without making progress" — aren't surfaced anywhere.
The desktop vs. TUI split matters. Some folks want this in the terminal; others want it as a web view or native app. A few tools (Beadbox, Mycelium, the Discord bot workaround mentioned earlier in this thread) fill the gap from outside Claude Code today. The right long-term fix is a first-class API surface that exposes agent state so dashboards can be built against it — rather than each workaround scraping terminal output.
The strongest case for this feature is unattended or overnight workflows: when Claude Code dispatches a large fleet before you step away, there is currently no reliable way to check status without reattaching to every session individually. A unified status surface — even just a file Claude Code writes to — would unlock a class of safe autonomous workflows that are too risky right now.
(Building Claudeverse — claudeverse.ai — a scheduling + coordination layer for Claude Code, so this is a pain point we track closely.)
theres a small cluster of tools doing the dashboard half of this now (AgentNexus, Mycelium, Beadbox), so worth being clear about what differentiates one.
the angle i took with repowire is that the dashboard is fed by the same mesh that carries the messaging, so its not a passive viewer, you can ask/notify a peer from the live view and steer it. it also spans runtimes, so a lead agents codex and gemini subagents show up in the same tree as the claude ones, which a claude-only dashboard cant do.
honest gap vs what youre describing: repowire shows peer/ask/spawn state and live status, but not yet a full per-agent token/cost meter or historical replay. so the spawn-tree + live-status + steer parts are there, the resource-accounting + replay parts are not.
@prassanna-ravishankar good roundup, and agreed these are mostly complementary. One clarification, since Mycelium got grouped under "claude-only dashboard" — it's neither claude-only nor a passive viewer:
Repo: https://github.com/SoftBacon-Software/mycelium
For this dashboard to stay trustworthy, I would anchor it on provider events rather than scraped terminal text.
Useful backing model:
The stale/unknown state matters. A dashboard that only shows running/completed will repeat the same failure mode as the transcript view: missing child completion looks like success or silence instead of an inspectable gap.
---
_Generated with ax._
Adding one narrower UI datapoint from building a small macOS companion surface for this problem: I think there are two different product surfaces here, and both matter.
For long unattended runs, the second one matters more than I expected. Most of the time I do not want to open a dashboard; I just need a trustworthy state transition outside the terminal so I know whether to keep working, step in, or leave it alone.
That pushes the infrastructure requirement in the same direction this issue describes: the backing API should expose durable state transitions, not just terminal-rendered text. At minimum, external surfaces need:
I built Agent Island for the smaller peripheral layer on macOS: https://github.com/tristan666666/agent-island
It is not an agent hierarchy dashboard, but it is the kind of companion surface that becomes much more reliable if Claude Code exposes first-class agent/session state instead of every tool scraping transcripts or terminal output.
Good write-up of the problem. The "conversation view as control plane" issue is real - once you have 5+ subagents the interleaved transcript becomes actively harmful for understanding system state.
One pattern that has helped in practice: a separate poller process that reads the Claude Code hooks output stream and writes structured agent state to a side file (agent ID, task, token count, last tool call). This gives you a rough real-time view without blocking the agent loop. It is not the unified dashboard this issue is requesting - just a stopgap - but it moves the observability surface out of the terminal scroll.
The per-agent cost breakdown is the hardest piece. Right now you can infer it post-hoc from the session log but there is no streaming attribution while the run is in flight. If Anthropic does implement the agent tree view this issue proposes, tying token deltas to specific agent nodes would make cost attribution tractable in real time.
The 20+ fragmented issues this references are pointing at the same thing: the mental model of "chat with one assistant" does not compose to "supervise a team of agents". The surface needs to change, not just the features.
Surfacing this for anyone following along: the "buried approval prompts + no per-agent visibility" pain is real and well-articulated here. I've been building exactly in this space -- a session manager that surfaces per-agent status, cost, and coordination state without requiring you to read through interleaved scrollback.
The point about Kubernetes/k9s as the mental model is right. The conversation pane should stay conversational; the control plane belongs in a separate surface.
A few questions for the thread that might inform the design:
Happy to share what I've built so far if it's useful context for the feature discussion.
-- Kyle Carriedo, building Claudiverse (misfit labs) -- a session coordination layer for Claude Code