AI Agent Dashboard

A real-time desktop widget that tracks what your AI coding agents are doing.

View on GitHub
Home Claude Code HTTP API Development

Claude Code is Anthropic’s official command-line coding agent. The dashboard integrates via lifecycle hooks — Claude Code fires named events at specific moments during a session, and a small Python script turns each event into a status update for the widget.

Session identity

Each Claude Code session becomes one row in the widget. The row’s id is derived from the session’s current working directory — if cwd sits under the configured projects_root, the relative path becomes the id with slashes, dashes, and underscores replaced by spaces. Sessions outside projects_root fall back to the folder’s base name; sessions with no cwd use the first eight characters of the Claude session id.

Live status

The row’s state pill tracks the agent in real time:

Sticky original prompt

During approval cycles — when Claude asks “Can I run bash X?” and waits for you to type yes — the row keeps displaying your original task prompt rather than the approval question or the yes. The pill still flips to WAIT so you see the agent is blocked, but the label reads what you actually asked for. The timer pauses during WAIT and resumes on the next WORK. A new top-level prompt after DONE / IDLE starts a fresh task boundary and captures a new original prompt.

Live token count

When the hook provides a transcript_path, the widget tails the session’s JSONL transcript and pulls the most recent assistant turn’s input-side token count (input_tokens + cache_creation_input_tokens + cache_read_input_tokens). The token display is colored green → amber → red based on the configured thresholds relative to the model’s context window — so you can tell at a glance whether /compact is due.

Setup

Install the widget and verify it’s running: the tray icon should be visible.

Copy integrations/claude_hook.py — distributed with the widget source — and point Claude Code at it from ~/.claude/settings.json:

{
  "hooks": {
    "SessionStart":      [{"hooks": [{"type": "command", "command": "python3 <repo>/integrations/claude_hook.py"}]}],
    "UserPromptSubmit":  [{"hooks": [{"type": "command", "command": "python3 <repo>/integrations/claude_hook.py"}]}],
    "Notification":      [{"hooks": [{"type": "command", "command": "python3 <repo>/integrations/claude_hook.py"}]}],
    "Stop":              [{"hooks": [{"type": "command", "command": "python3 <repo>/integrations/claude_hook.py"}]}],
    "SessionEnd":        [{"hooks": [{"type": "command", "command": "python3 <repo>/integrations/claude_hook.py"}]}]
  }
}

Replace <repo> with the absolute path to your clone of this repo. Restart Claude Code — new sessions will appear in the widget.

Optional: set projects_root in config.json to the folder your projects live under, so session ids become short folder-relative names instead of bare folder basenames.

The hook talks to the widget at http://127.0.0.1:9077 by default. To use a different port or host, export TAURI_DASHBOARD_URL (e.g. TAURI_DASHBOARD_URL=http://127.0.0.1:9100) before launching Claude Code.

Features

Standard features