Thanks to visit codestin.com
Credit goes to GitHub.com

Skip to content

mukul975/claude-team-dashboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

141 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– Claude Agent Dashboard

Stop Flying Blind β€” Monitor Your Claude Code Agent Teams in Real Time

npm npm downloads License: MIT Node.js JavaScript Vite WebSocket PRs Welcome GitHub Stars

Monitor, track, and orchestrate your Claude Code agent teams from a single, unified dashboard β€” with zero-delay WebSocket streaming.

Get Started Β· See Features Β· Live Demo Β· Docs Β· Contributing


🎯 Why This Exists

The Problem

You're running multiple Claude Code agents across projects. Suddenly, chaos:

  • Lost visibility: Which agent is doing what? You have no idea.
  • Ghost messages: Agents talk to each other. You can't see it.
  • Debug hell: Something breaks. You're stuck playing detective across 5 terminal windows.
  • Task black holes: Tasks start, disappear, maybe finish. Who knows?

Running multi-agent workflows without monitoring is like driving blindfolded.

The Solution

Claude Agent Dashboard gives you X-ray vision into your agent teams:

βœ… See everything β€” Live status, tasks, messages, system metrics βœ… Debug faster β€” Trace inter-agent communication in real time βœ… Stay in control β€” Know exactly what's happening, always βœ… Ship with confidence β€” Spot failures before they cascade

Built by a cybersecurity researcher who knows that visibility is the first line of defense β€” even for AI agents.


✨ Highlights

πŸš€ Zero-Config Real-Time Monitoring

Launch the dashboard with one command. WebSocket streaming auto-discovers agents. No configuration needed.

πŸ“‹ Visual Task Management

See tasks as they flow through your agent team. Progress bars, status badges, dependency chains β€” all live-updated.

πŸ’¬ Inter-Agent Message Inspector

Debug coordination issues instantly. Watch agents communicate in real time with full message history and conversation threads.

πŸŒ— Full Light & Dark Mode

Pixel-perfect theming with CSS custom properties. Every component β€” cards, charts, modals, toasts β€” adapts instantly when you toggle the theme.

β™Ώ WCAG-Accessible Interface

Every button has a descriptive aria-label. Interactive elements have role, tabIndex, and keyboard handlers. Status components use aria-live. Modals trap focus. Fully navigable without a mouse.

⌨️ Keyboard-First Navigation

Command palette (⌘K), tab shortcuts (⌘1-8), and a shortcuts modal (?) so you never have to touch the mouse.

πŸ“Š Live Activity Chronology

Every agent action β€” timestamped, color-coded, filterable. Never wonder "what happened?" again.

πŸ–₯️ System Performance Metrics

Track CPU, memory, and network usage across your agent infrastructure. Catch performance bottlenecks before they cause failures.

πŸ”” Smart Alerts & Notifications

Instant desktop notifications for task completions, errors, and state changes. Full notification center with grouping, mark-read, and tab navigation.

πŸ“€ One-Click Data Export

Export any team's tasks and inbox messages as JSON or CSV directly from the header. Full data portability built-in.

πŸ“± PWA β€” Installable & Offline-Ready

Works as a Progressive Web App β€” add to your home screen, get an app icon, and keep viewing cached data when the server is temporarily unreachable.

πŸ”’ Enterprise-Grade Security

Audited by 6 security specialists. OWASP scrypt password hashing, auth rate limiting, token rotation, tight CSP, CORP/COOP, Permissions-Policy, strict input validation on every route, WebSocket heartbeat + rate limiting, and followSymlinks: false on all file watchers. Zero npm vulnerabilities.

πŸ“˜ Deep dive: See FEATURES.md for the complete feature breakdown with architecture details.


πŸš€ Quick Start

βœ… Prerequisites

⚑ Install via npm (Recommended)

npm install -g claude-team-dashboard
claude-dashboard

Or run without installing:

npx claude-team-dashboard

Open http://localhost:3001 and you're monitoring agents in real time.

πŸ› οΈ Clone & Build (Development)

# 1. Clone the repo
git clone https://github.com/mukul975/claude-team-dashboard.git
cd claude-team-dashboard

# 2. Install dependencies
npm install

# 3. Build the frontend
npm run build

# 4. Start the dashboard
npm start

Open http://localhost:3001 and you're monitoring agents in real time.

πŸ”’ Password Authentication

The dashboard always requires a password. The first time you open it, you'll see a setup screen β€” create your password there. After that, you'll be asked for it on every visit.

First run:

npm start
β†’ open http://localhost:3001
β†’ "Set Up Dashboard" screen appears
β†’ enter and confirm your password
β†’ dashboard unlocks

Every run after that:

npm start
β†’ open http://localhost:3001
β†’ login screen appears
β†’ enter your password
β†’ dashboard unlocks

Your password is stored as a secure scrypt hash in ~/.claude/dashboard.key. The session token lives in sessionStorage and clears when the browser tab closes.

🎁 Dev Container (Instant Environment)

Have VS Code + Docker? Skip setup entirely:

  1. Open project in VS Code
  2. Click "Reopen in Container" when prompted
  3. Everything auto-installs. You're ready.

πŸ§‘β€πŸ’» Development Mode

To work on the frontend with hot-reload:

# Terminal 1 β€” backend
npm run server

# Terminal 2 β€” frontend dev server
npm run dev

What gets monitored automatically:

  • ~/.claude/teams/ β€” Active agent teams
  • ~/.claude/tasks/ β€” Task management
  • /tmp/claude/{project}/tasks/ β€” Agent outputs

🎬 Demo

πŸŽ₯ Demo video coming soon β€” Watch a 2-minute walkthrough of key features

Try it yourself: Clone the repo and run npm start β€” see your agent team in action within 60 seconds.


πŸ—οΈ How It Works

Architecture at a Glance

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Frontend (React + Vite)                                β”‚
β”‚  β”œβ”€β”€ Real-time UI components                            β”‚
β”‚  β”œβ”€β”€ WebSocket client                                   β”‚
β”‚  └── State management                                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚ WebSocket (bidirectional)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Backend (Node.js + Express)                            β”‚
β”‚  β”œβ”€β”€ WebSocket server                                   β”‚
β”‚  β”œβ”€β”€ Agent event aggregation                            β”‚
β”‚  └── File system monitoring (chokidar)                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚ Reads agent logs
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Claude Code Agent Teams                                β”‚
β”‚  β”œβ”€β”€ ~/.claude/projects/{project}/*.jsonl               β”‚
β”‚  └── Real-time agent session logs                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“¬ Inbox Monitoring

How Claude Code Agent Teams Communicate

When Claude Code creates a team, it creates this folder structure:

~/.claude/teams/
└── {team-name}/
    β”œβ”€β”€ config.json          ← team configuration & members
    └── inboxes/
        β”œβ”€β”€ team-lead.json   ← messages for team-lead
        β”œβ”€β”€ researcher.json  ← messages for researcher
        └── ...              ← one file per agent

Each inbox file is a JSON array of messages:

[
  {
    "from": "team-lead",
    "text": "Your task assignment...",
    "summary": "Brief summary",
    "timestamp": "2026-02-18T10:00:00.000Z",
    "read": false,
    "color": "green"
  }
]

Real-Time Inbox Monitoring

The dashboard watches ~/.claude/teams/*/inboxes/*.json with a dedicated chokidar watcher. Every time an inbox file changes:

  • The new messages are read immediately
  • An inbox_update WebSocket event is pushed to all connected dashboard clients
  • The UI updates in real-time β€” no polling required

On initial connection, allInboxes is included in the initial_data payload so you see all current messages instantly.

What the Dashboard Shows

Feature Description
Inbox Viewer Browse all teams β†’ agents β†’ message threads
Unread Badges Red badge on team cards and Inboxes tab
Activity Timeline All agent messages in chronological order
Desktop Notifications Browser notifications for new messages
Search Full-text search across all messages
Export Download messages as JSON or CSV

API Endpoints

Endpoint Description
GET /api/inboxes All teams' inboxes at once
GET /api/teams/:teamName/inboxes All agents' inboxes for one team
GET /api/teams/:teamName/inboxes/:agentName Specific agent's inbox

WebSocket Events

// On connect β€” full inbox snapshot
{ type: 'initial_data', allInboxes: { [teamName]: { [agentName]: { messages, messageCount } } } }

// On inbox change β€” targeted update
{ type: 'inbox_update', teamName: string, inboxes: { [agentName]: { messages, messageCount } } }

Project Structure

claude-team-dashboard/
β”œβ”€β”€ src/                      # Frontend source code
β”‚   β”œβ”€β”€ components/           # React UI components
β”‚   β”‚   β”œβ”€β”€ InboxViewer.jsx       # Browse agent inbox messages
β”‚   β”‚   └── TeamTimeline.jsx      # Chronological activity timeline
β”‚   β”œβ”€β”€ hooks/                # Custom React hooks
β”‚   β”‚   └── useInboxNotifications.js  # Browser notifications for new messages
β”‚   β”œβ”€β”€ utils/                # Shared utilities
β”‚   β”‚   β”œβ”€β”€ messageParser.js      # Natural language message parsing
β”‚   β”‚   └── formatting.js         # Time, color, initials utilities
β”‚   β”œβ”€β”€ config/               # Configuration constants
β”‚   β”œβ”€β”€ styles/               # CSS stylesheets
β”‚   └── test/                 # Test setup
β”œβ”€β”€ .devcontainer/            # VS Code dev container config
β”œβ”€β”€ .github/                  # GitHub templates & workflows
β”‚   └── workflows/            # CI/CD pipelines
β”œβ”€β”€ test/                     # Test files
β”œβ”€β”€ dist/                     # Production build output
β”œβ”€β”€ server.js                 # WebSocket backend server
β”œβ”€β”€ start.js                  # Launcher script
β”œβ”€β”€ cleanup.js                # Process cleanup utility
β”œβ”€β”€ config.js                 # Server configuration
β”œβ”€β”€ vite.config.js            # Vite bundler config
β”œβ”€β”€ FEATURES.md               # Detailed feature list
β”œβ”€β”€ CONTRIBUTING.md           # Contribution guide
└── CODE_OF_CONDUCT.md        # Community standards

πŸ› οΈ Built With

React
React 19.2
UI Framework
Node.js
Node.js 18+
Backend Runtime
Vite
Vite 7.x
Build Tool
JavaScript
JavaScript ES6+
Core Language

Core Technologies:

  • WebSocket (ws) β€” Real-time bidirectional communication
  • Express.js β€” Backend API framework
  • Chokidar β€” File system monitoring for agent logs
  • Lucide React β€” Icon library
  • Vitest β€” Unit testing framework

πŸ“– Documentation

Document Description
FEATURES.md Complete feature breakdown with technical architecture
NATURAL_LANGUAGE_AND_LIFECYCLE.md πŸ“– Comprehensive guide to message parsing and team lifecycle tracking
CONTRIBUTING.md How to contribute β€” setup, coding standards, PR process
CODE_OF_CONDUCT.md Community guidelines and standards
Natural Language Features How the dashboard translates technical agent messages to readable format
Team Lifecycle Tracking Automatic team monitoring, archiving, and history management

Need help? Open a Discussion or check existing Issues.


πŸ’¬ Natural Language Message Parsing

One of the dashboard's most powerful features is its ability to automatically translate technical agent messages into human-readable natural language. This makes it easy to understand what your agents are doing without decoding JSON or technical jargon.

How It Works

The dashboard intelligently parses inter-agent messages and converts them from raw technical format to friendly, contextual descriptions:

Message Type Detection

The parser automatically identifies message types and formats them appropriately:

Status Updates

// Raw message:
{"type": "idle_notification", "lastTaskSubject": "Fix authentication bug"}

// Displayed as:
πŸ’€ Finished "Fix authentication bug" - ready for next task

Task Completions

// Raw message:
{"type": "task_completed", "taskSubject": "Write documentation"}

// Displayed as:
βœ… Completed: Write documentation

Task Assignments

// Raw message:
{"type": "task_assigned", "taskSubject": "Review pull request"}

// Displayed as:
πŸ“‹ Started working on: Review pull request

Coordination Messages

// Raw message:
{"type": "coordination", "message": "Waiting for backend team to finish API endpoint"}

// Displayed as:
🀝 Waiting for backend team to finish API endpoint

Questions

// Raw message:
{"type": "question", "message": "Should I use the staging or production database?"}

// Displayed as:
❓ Should I use the staging or production database?

Message Classification

Messages are automatically categorized into four types with distinct visual styling:

Type Icon Color Use Case
Status πŸ“Š Blue General updates, progress reports, idle notifications
Completion βœ… Green Task completions, success notifications
Coordination 🀝 Purple Team communication, help requests, discussions
Question ❓ Yellow Questions requiring attention or clarification

Smart Features

Summary Prioritization: If a message includes a summary field, the dashboard displays it instead of the full technical content, making messages more concise.

Truncation: Long messages are automatically truncated to 150 characters with "..." to prevent UI clutter.

Fallback Handling: If a message can't be parsed as JSON, it's displayed as-is with intelligent handling of empty or malformed messages.

Real-Time Translation: Messages are parsed and displayed instantly as they arrive via WebSocket β€” no delays or batch processing.

Viewing Messages

The dashboard provides two views for agent communication:

1. Live Communication Panel (LiveCommunication.jsx)

  • Chat-style interface showing conversation flow
  • Team selector to focus on specific team messages
  • Auto-scroll feature (can be toggled)
  • Shows sender β†’ recipient for each message
  • Updates every 5 seconds

2. Agent Inter-Communication Stream (RealTimeMessages.jsx)

  • Aggregated view across all teams
  • Filter messages by type (all, status, completion, coordination, question)
  • Displays last 100 messages across all teams
  • Shows team context for each message
  • Visual stats showing breakdown by message type

Technical Implementation

The parsing logic is located in:

  • File: src/components/RealTimeMessages.jsx (lines 8-83)
  • Function: parseMessageToNatural(text, summary)

Message Sources: Messages are fetched from the Claude Code inbox files:

~/.claude/teams/{team-name}/inboxes/{agent-name}.json

API Endpoints:

  • GET /api/teams/:teamName/inboxes - Get all inboxes for a team
  • GET /api/teams/:teamName/inboxes/:agentName - Get specific agent's inbox

Example: Message Flow

1. Agent sends technical message
   β†’ Claude Code writes to ~/.claude/teams/my-team/inboxes/agent-1.json

2. Dashboard fetches message via API
   β†’ GET /api/teams/my-team/inboxes

3. Parser processes message
   β†’ parseMessageToNatural(rawMessage)

4. Natural language message displayed
   β†’ "πŸ’€ Finished 'Fix bug' - ready for next task"

Benefits

  • No Technical Knowledge Required: Anyone can understand what agents are doing
  • Quick Status Checks: Glance at communication panel to see team progress
  • Contextual Understanding: Message types provide instant context
  • Reduced Cognitive Load: No need to parse JSON or technical logs
  • Instant Clarity: Messages are translated in real-time as they arrive

πŸ”„ Team Lifecycle Tracking

The dashboard automatically tracks the complete lifecycle of every agent team from creation to completion, with automatic archiving for historical reference.

Automatic Team Monitoring

The dashboard watches the Claude Code teams directory (~/.claude/teams/) in real-time and tracks:

Team Creation

  • Automatically detected when a new config.json appears
  • Logs creation timestamp
  • Starts activity monitoring
  • Console notification: πŸŽ‰ New team created: {team-name}

Team Activity

  • Tracks every configuration change
  • Updates "last seen" timestamp
  • Monitors task progress
  • Records all agent actions
  • Console notification: πŸ”„ Team active: {team-name}

Team Completion

  • Detected when team directory is removed
  • Triggers automatic archiving
  • Records final state
  • Calculates session duration
  • Console notification: πŸ‘‹ Team completed: {team-name} - archiving for reference...

Automatic Archiving System

When a team completes its work, the dashboard automatically archives all team data for future reference.

What Gets Archived

Complete Team Snapshot:

  • Team configuration (name, description, lead, members)
  • All tasks (subject, description, status, owner, dependencies)
  • Team statistics (member count, task counts, completion rate)
  • Lifecycle metadata (created date, duration, last activity)

Natural Language Summary:

{
  "teamName": "dashboard-devops",
  "archivedAt": "2026-02-10T15:30:00.000Z",
  "summary": {
    "overview": "Team 'dashboard-devops' with 4 members worked on 12 tasks and completed 10.",
    "created": "Started on 02/10/2026",
    "members": [
      "team-lead (general-purpose)",
      "backend-dev (general-purpose)",
      "ui-polish-dev (general-purpose)",
      "archive-viewer-dev (general-purpose)"
    ],
    "accomplishments": [
      "βœ… Fix Communication tab to display natural language messages properly",
      "βœ… Verify and improve team lifecycle archiving",
      "βœ… Polish dashboard UI for better user experience",
      "βœ… Add archive viewer component to frontend",
      "βœ… Test all features and fix empty task outputs",
      "βœ… Document natural language features and team lifecycle",
      "βœ… Create archive viewer UI component",
      "βœ… Add API endpoint for retrieving archives",
      "βœ… Test archive functionality end-to-end",
      "βœ… Write comprehensive documentation"
    ],
    "duration": "Active for 45 minutes"
  },
  "rawData": {
    // Complete team data for detailed analysis
  }
}

Archive Storage

Location: ~/.claude/archive/

File Naming: {team-name}_{timestamp}.json

  • Example: dashboard-devops_2026-02-10T15-30-00-000Z.json
  • Timestamp in ISO format with colons replaced by hyphens (filesystem-safe)

Automatic Creation: Archive directory is created automatically if it doesn't exist

Duration Tracking

The dashboard calculates how long each team was active:

// Example console output:
"πŸ“Š Team 'dashboard-devops' was active for 45 minutes"

Tracking Method:

  1. Team created β†’ Start timestamp recorded
  2. Team activity β†’ Last seen timestamp updated
  3. Team completed β†’ Duration calculated from timestamps
  4. Duration included in archive summary

Archive Viewer (API)

Access archived team data programmatically:

Get All Archives

GET /api/archive

Response:

{
  "archives": [
    {
      "filename": "dashboard-devops_2026-02-10T15-30-00-000Z.json",
      "overview": "Team 'dashboard-devops' with 4 members worked on 12 tasks and completed 10.",
      "created": "Started on 02/10/2026",
      "members": ["team-lead (general-purpose)", "..."],
      "accomplishments": ["βœ… Task 1", "βœ… Task 2", "..."],
      "duration": "Active for 45 minutes",
      "archivedAt": "2026-02-10T15:30:00.000Z"
    }
  ],
  "count": 1
}

Get Specific Archive

GET /api/archive/{filename}

Response: Complete archive including raw data

Team History Tracking

The Team History feature provides a complete chronological view of all teams:

API Endpoint:

GET /api/team-history

Response:

{
  "history": [
    {
      "name": "dashboard-devops",
      "config": { /* team config */ },
      "tasks": [ /* all tasks */ ],
      "createdAt": "2026-02-10T14:45:00.000Z",
      "lastModified": "2026-02-10T15:30:00.000Z",
      "isActive": false
    }
  ]
}

Features:

  • Shows all teams (active and completed)
  • Sorted by last modified (most recent first)
  • Includes creation and modification timestamps
  • Active status indicator

Real-Time Notifications

The dashboard provides console notifications for all lifecycle events:

πŸŽ‰ New team created: dashboard-devops
πŸ”„ Team active: dashboard-devops
✨ New task created: task-123.json
πŸ“ Task updated: task-123.json
βœ… Task completed/removed: task-123.json
πŸ‘‹ Team completed: dashboard-devops - archiving for reference...
πŸ“¦ Team archived: dashboard-devops β†’ /home/user/.claude/archive/dashboard-devops_2026-02-10T15-30-00-000Z.json
πŸ“Š Team "dashboard-devops" was active for 45 minutes

File System Watchers

The lifecycle tracking is powered by three independent watchers:

1. Team Watcher (~/.claude/teams/**/*.json)

  • Monitors: config.json files
  • Triggers: Team creation, updates, completion

2. Task Watcher (~/.claude/tasks/**/*.json)

  • Monitors: Individual task files
  • Triggers: Task creation, updates, completion

3. Output Watcher (/tmp/claude/{project}/tasks/*.output)

  • Monitors: Agent output files
  • Triggers: Agent activity updates

Watch Options (configurable in config.js):

{
  persistent: true,         // Keep process running
  ignoreInitial: true,      // Don't trigger on startup
  usePolling: true,         // Use polling for cross-platform reliability
  interval: 1000,           // Polling interval (ms)
  depth: 10,                // Directory depth limit
  awaitWriteFinish: {       // Wait for complete writes
    stabilityThreshold: 500,
    pollInterval: 100
  }
}

Security Features

The dashboard was audited by a team of 6 security specialists. Every layer has been hardened:

πŸ” Authentication

  • First-time setup screen β€” set your password in the browser on first run; stored as an scrypt hash (N=16384, r=8, p=1 β€” OWASP recommended) in ~/.claude/dashboard.key (chmod 600)
  • Token rotation β€” a fresh 256-bit random token is issued on every successful login
  • Timing-safe comparison β€” crypto.timingSafeEqual used for both password and token validation (prevents timing attacks)
  • Auth rate limiter β€” max 5 login/setup attempts per IP per 15 minutes (separate from the global limiter)
  • sessionStorage β€” token clears on tab close; acceptable tradeoff for a localhost tool
  • Key file permission check β€” warns on startup if dashboard.key is world-readable

πŸ›‘οΈ HTTP Security Headers

  • CSP β€” strict allowlist: default-src 'self', explicit connect-src/img-src/font-src, frame-ancestors 'none', object-src 'none'
  • CORP / COOP β€” Cross-Origin-Resource-Policy: same-origin, Cross-Origin-Opener-Policy: same-origin
  • HSTS β€” max-age=31536000; includeSubDomains
  • Referrer-Policy β€” strict-origin-when-cross-origin
  • Permissions-Policy β€” camera=(), microphone=(), geolocation=(), payment=(), usb=()
  • Helmet β€” noSniff, frameguard: deny, xssFilter all enabled

πŸ” Input Validation

  • Strict sanitization β€” sanitizeTeamName(), sanitizeAgentName(), sanitizeFileName() enforce [a-zA-Z0-9_.-] allowlist with 100-char max on every route param
  • Exact-match validation β€” every parameterized route returns 400 if sanitized value β‰  original (catches partial encoding attacks)
  • Content-Type enforcement β€” POST requests without application/json get 415
  • Body type checking β€” rejects arrays, nulls, and non-object bodies on all POST endpoints
  • ReDoS-safe search β€” uses String.indexOf() not regex; 200-char query limit

πŸ”Œ WebSocket

  • Token always required β€” connection closed with 4001 if no valid token in query string
  • Ping/pong heartbeat β€” 30s interval, 10s pong timeout; dead clients terminated
  • Per-connection rate limit β€” 50 messages/sec max; exceeding closes with code 1008
  • Message size limit β€” 64 KB max; exceeding closes with code 1009
  • Connection audit log β€” IP logged on connect/disconnect/error

πŸ“ File System

  • validatePath() on every fs call β€” uses path.resolve() to block all path traversal
  • No symlink following β€” followSymlinks: false on all 5 chokidar watchers
  • Log injection prevention β€” team names sanitized before appearing in log output

🌐 Network

  • CORS β€” restricted to localhost:3001 and localhost:5173 only; no wildcard origins
  • Rate limiting β€” global limiter on all /api/ routes
  • Error hardening β€” global error handler never leaks stack traces or internal messages

Read-Only: The dashboard never modifies Claude Code files β€” it only reads and archives data.

Use Cases

Project Retrospectives: Review what a team accomplished and how long it took

Performance Analysis: Track team efficiency across multiple projects

Audit Trails: Maintain records of all agent activities for compliance

Learning: Study successful team patterns and task breakdowns

Recovery: Restore team context if needed from archived data

Benefits

  • Zero Configuration: Archiving happens automatically β€” nothing to set up
  • Complete History: Never lose team data when a project completes
  • Natural Language: Archive summaries are human-readable
  • Forensic Analysis: Full raw data included for detailed investigation
  • Storage Efficient: JSON format with automatic cleanup of old archives (future feature)
  • Fast Retrieval: Timestamped filenames for easy chronological sorting

πŸ—ΊοΈ Roadmap

βœ… Recently Shipped

  • Full security audit (6-expert team) β€” OWASP scrypt auth, auth rate limiting, token rotation, tight CSP, CORP/COOP, Permissions-Policy, strict input validation on every route, WebSocket heartbeat + rate limiting + size limits, followSymlinks: false on all watchers, 0 npm vulnerabilities
  • First-time setup flow β€” open dashboard β†’ set your password in the browser β†’ hash stored in ~/.claude/dashboard.key β†’ login on every subsequent visit; WebSocket reconnects immediately after login (no backoff delay)
  • Password auth (always on) β€” scrypt hash with OWASP params, timing-safe comparison, token rotation, 5-attempt rate limit per IP
  • Tailwind v4 + code splitting β€” @tailwindcss/vite installed; 4 heavy components lazy-loaded, cutting initial JS bundle by ~50 kB
  • Expanded test suite β€” 223 tests across 15 files covering all 4 custom hooks, key components, and utility functions
  • Full accessibility audit β€” 50+ buttons with aria-label, interactive divs with role/tabIndex/onKeyDown, aria-live on status components, role="alert" on error states, focus management in modals
  • Security hardening β€” server.js: fixed wrong sanitizer on inbox route, patched error message leakage in global handler, added path validation on archive listing, consistent error responses across all endpoints
  • Complete inline styles migration β€” All 30+ components now use React inline style={{}} for every sizing, color, animation, and layout value β€” no broken Tailwind arbitrary values remain
  • Production code cleanup β€” Removed 5 debug console.log statements from useWebSocket.js; cleaned unused imports across multiple components
  • Light / Dark mode β€” Full CSS-variable-based theme system; every component, card, chart, modal, and toast adapts instantly
  • Export reports β€” CSV & JSON export for tasks and inbox messages via the header Export menu
  • Performance analytics β€” Analytics panel with historical charts, team comparison, and performance scoring
  • Keyboard shortcuts β€” Command palette (⌘K), tab hotkeys (⌘1–8), shortcuts reference modal (?)
  • Notification center β€” Grouped notification tray (Just Now / Today / Earlier) with mark-read, clear-all, and direct tab navigation
  • PWA support β€” Installable progressive web app with offline caching via Service Worker
  • Agent network graph β€” Live D3 force-directed graph of inter-agent communication flows
  • Task dependency graph β€” Visual map of which tasks block which across the whole team
  • Team comparison β€” Side-by-side performance view across multiple active teams
  • Skeleton loaders β€” Smooth loading states instead of blank panels on first connect

🎯 Planned Features

  • Multi-project workspace β€” Switch between multiple Claude projects in one dashboard
  • Custom alerts β€” Webhook integrations (Slack, Discord, email)
  • Plugin system β€” Extensible architecture for custom visualizations
  • Docker deployment β€” One-command containerised setup
  • Agent replay β€” Rewind and replay agent sessions for debugging
  • Collaborative mode β€” Share dashboards with team members

πŸ’‘ Have an Idea?

We prioritize features based on community feedback. Open a feature request β†’


🀝 Contributing

We love contributions! Whether you're fixing bugs, adding features, or improving docs β€” every contribution matters.

πŸš€ Quick Contribution Guide

# 1. Fork & clone
git clone https://github.com/YOUR_USERNAME/claude-team-dashboard.git

# 2. Create feature branch
git checkout -b feature/amazing-feature

# 3. Make changes & commit
git commit -m "feat: add amazing feature"

# 4. Push & create PR
git push origin feature/amazing-feature

πŸ“– Read the full guide: CONTRIBUTING.md

🌟 Ways to Contribute

  • πŸ› Report bugs β€” Use the bug report template
  • ✨ Suggest features β€” Use the feature request template
  • πŸ“ Improve docs β€” Fix typos, add examples, clarify instructions
  • πŸ§ͺ Write tests β€” Increase code coverage and reliability
  • 🎨 Design improvements β€” UI/UX enhancements welcome

First time contributing? Check out issues labeled good first issue.


πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.

TL;DR: Free to use, modify, and distribute. Commercial use allowed. Just keep the license notice.


⭐ Star History

Star History Chart



⭐ If This Helps You β€” Star It!

Starring helps others discover this project. It takes 2 seconds and makes a huge difference.

GitHub stars


Built by Mahipal

Maintained by @mukul975 β€” cybersecurity researcher, AI agent enthusiast