Skip to main content

Claude Dashboard

Real-time CLI dashboard for Claude Code tool events with an integrated logging library for plugin developers.

Features

  • Multi-file monitoring: Watches all .jsonl files in the .claude/logs/ directory
  • Real-time updates: Live dashboard refresh every second
  • Separate sections: Each log file displayed in its own section
  • Tool statistics: Aggregated statistics across all log files
  • Color-coded tools: Easy visual identification of different tools

Installation

Using UV (recommended):

uv add claude-dashboard

Or install from source:

cd plugins/claude-dashboard
uv pip install -e .

CLI Usage

Basic Usage

Run the dashboard from any directory containing a .claude/logs/ folder:

claude-dash

Options

# Show version
claude-dash --version

# Specify a custom logs directory
claude-dash --logs-dir /path/to/logs

# Watch a single log file
claude-dash --log-file /path/to/file.jsonl

Dashboard Layout

The dashboard displays events from multiple log files in separate sections:

┌─────────────────────────────────────────────────────────────────┐
│              Claude Code Observability Dashboard                 │
├─────────────────────────────────────────────────────────────────┤
│ observability                                                    │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Time     │ Type  │ Tool  │ Details                          │ │
│ │ 14:32:01 │ Pre   │ Bash  │ git status                       │ │
│ │ 14:32:02 │ Post  │ Bash  │ git status                       │ │
│ └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ bash-safety                                                      │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Time     │ Type  │ Tool  │ Details                          │ │
│ │ 14:32:01 │ warn  │ Bash  │ Blocked: rm -rf                  │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘

Library Usage

The claude-dashboard package also provides a logging library for plugin developers to write consistent JSONL logs.

Quick Start

from pathlib import Path
from claude_dashboard import get_logger, log_event
import logging

# Create a logger for your plugin
logger = get_logger(
    plugin_name="my-plugin",
    log_file=Path(".claude/logs/my-plugin.jsonl")
)

# Log events using the standard logging interface
logger.info("Plugin started", extra={"event": "startup"})

logger.warning("Something needs attention", extra={
    "event": "warning_issued",
    "details": {"key": "value"}
})

# Or use the convenience function
log_event(
    logger,
    level=logging.INFO,
    message="Task completed",
    event="task_complete",
    duration_ms=150,
    result="success"
)

API Reference

get_logger(plugin_name, log_file, level=DEBUG, max_bytes=None)

Create and configure a logger for a plugin.

Parameters:

  • plugin_name (str): Identifier for the plugin (e.g., "bash-safety", "observability")
  • log_file (Path): Path to the JSONL log file
  • level (int): Logging level (default: logging.DEBUG)
  • max_bytes (int, optional): Max file size before rotation (not implemented yet)

Returns: Configured logging.Logger instance

Example:

from pathlib import Path
from claude_dashboard import get_logger

logger = get_logger("my-plugin", Path(".claude/logs/my-plugin.jsonl"))

log_event(logger, level, message, event, **kwargs)

Convenience function to log an event with standard fields.

Parameters:

  • logger (Logger): Logger instance from get_logger()
  • level (int): Logging level (e.g., logging.INFO, logging.WARNING)
  • message (str): Human-readable message
  • event (str): Event type in snake_case (e.g., "command_blocked", "test_completed")
  • **kwargs: Additional plugin-specific fields

Example:

import logging
from claude_dashboard import log_event

log_event(
    logger,
    level=logging.WARNING,
    message="Command blocked for safety",
    event="command_blocked",
    command="rm -rf /",
    reasons=["dangerous_pattern"]
)

PluginJsonFormatter

Custom JSON formatter class that adds plugin name and ISO timestamp to every log record.

Fields added automatically:

  • timestamp: ISO 8601 timestamp with timezone
  • plugin: Plugin name specified during logger creation
  • level: Log level (INFO, WARNING, etc.)
  • event: Event type (defaults to log level name if not provided)

Log Output Format

Each log entry is a JSON object on its own line (JSONL format):

{"timestamp": "2024-01-15T14:32:01.123456+00:00", "level": "INFO", "plugin": "my-plugin", "event": "startup", "message": "Plugin started"}
{"timestamp": "2024-01-15T14:32:02.456789+00:00", "level": "WARNING", "plugin": "my-plugin", "event": "command_blocked", "message": "Blocked dangerous command", "command": "rm -rf /", "reasons": ["dangerous_pattern"]}

Development

Running from source

cd plugins/claude-dashboard
uv run claude-dash

Running tests

uv run pytest

License

MIT License - see LICENSE for details.

Release files for claude-dashboard 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for claude-dashboard 0.2.0
File Size Uploaded
claude_dashboard-0.2.0.tar.gz 24.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for claude-dashboard 0.2.0
File Interpreter ABI Platform
claude_dashboard-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.7 kB

Release files / claude_dashboard-0.2.0.tar.gz

Download URL claude_dashboard-0.2.0.tar.gz
Size 24.1 kB
Tags Source
SHA-256 checksum
How to use checksums
7605988adce7df51852786914603267298ccdb9e03c06bf57e22071f27d13316
BLAKE2b-256 checksum
How to use checksums
5383111ced908ac96ae6ac0bf02846bdaae9b635ec554f59edbd35869c84b213
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 30, 2025.

Transparency log

Release files / claude_dashboard-0.2.0-py3-none-any.whl

Download URL claude_dashboard-0.2.0-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
913e241c9f028f47deb6eb8d1808b0e30cbe83897b3376d8b1c6875b041fcde7
BLAKE2b-256 checksum
How to use checksums
3d50735d63b2ea55a9b6b0c213837c3922a2615fb34609ecd3eed94acadcf12b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 30, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page