Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Code Agent Monitor

Real-time monitoring platform for code agent activity 🚀

A professional dashboard to track and visualize your code agent sessions, tool usage, and subagent orchestration in real-time. Built with Node.js, Express, React, and SQLite, it integrates directly with Claude Code and Codex via their native hook systems for seamless session tracking and analytics.

Claude CodeOpenAI CodexModel Context ProtocolNode.jsReactSQLiteDockerMIT License

Full stack detail (Express, Vite, TypeScript, Tailwind, Electron, VS Code, Kubernetes/Terraform, Prometheus/Grafana, and more) is in ARCHITECTURE.md.

Note

Need task-first help? The product wiki is the English product and architecture tour (GitHub Wiki is disabled for this repo); exact technical contracts stay in docs/.


Table of Contents


Overview

Track sessions, monitor agents in real-time, visualize tool usage, and observe subagent orchestration through a professional dark-themed web interface. Integrates directly with Claude Code & Codex via their native hook systems, and mirrors Helm Code sessions read-only from their local state database.

graph LR
A["Claude Code<br/>Session"] -->|hooks fire on<br/>tool use / stop| B["Hook Handler<br/>(Node.js script)"]
B -->|HTTP POST| C["Dashboard Server<br/>(Express + SQLite)"]
C -->|WebSocket<br/>broadcast| D["Dashboard UI<br/>(React + Tailwind)"]
style A fill:#6366f1,stroke:#818cf8,color:#fff
style B fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style C fill:#1a1a28,stroke:#2a2a3d,color:#e4e4ed
style D fill:#10b981,stroke:#34d399,color:#fff
Loading

In addition to the real-time monitoring dashboard, it also includes a local MCP server implementation in mcp/ that exposes a catalog of tools for introspecting and managing the dashboard itself, making it easy to integrate dashboard operations directly into your Claude Code & Codex workflows. There is also an agent extension layer, which provides Claude Code & Codex plugins, skills, and subagents for dashboard interaction, analytics, and workflow intelligence.

The UI is English-only (i18next + react-i18next namespace resources — architecture in docs/I18N.md).

User Interface

Comes with a sleek dark theme, responsive design, and intuitive navigation to explore your agent activity:

Dashboard — MonitorKanban Board

SessionsSession Detail — Conversation

AnalyticsWorkflows

Run AgentSettings

The sidebar gives quick access to Dashboard, Kanban Board, Sessions, Activity Feed, Analytics, Workflows, Agent Config, Run, and Settings — each with real-time updates. Full page-by-page tour, including Health, Task Progress, Alerts/Webhooks, and Remote Data Sources, is in the product wiki.


Features

Full detail for every row below is in ARCHITECTURE.md → Feature Reference.

Cursor sessions too (informational): CAM ingests whatever agent transcripts land under ~/.claude — on this machine and on synced remotes. Cursor usage counts the same way: Cursor happens to store its agent sessions in those paths alongside Claude Code. CAM does not distinguish which app wrote a file.

FeatureDescription
Task ProgressOwner-attributed task tracking derived from observable provider state: current Claude TaskCreate / TaskGet / TaskUpdate / TaskList and lifecycle even…
DashboardTwo tabs persisted in localStorage: Monitor — overview stats (6 stat cards), active agent cards with collapsible subagent hierarchy, and recent activit…
Kanban BoardTwo views with a header toggle (persisted in localStorage): Agents — 4 columns (Working / Waiting / Completed / Error) — and Sessions — 5 columns (…
SessionsSearchable, filterable, server-paginated table of every recorded session.
Session DetailPer-session real-time overview panel with active-agent banner (current tool + task), six tile counters (events with events/min rate, tool calls, subagents, c…
Activity FeedReal-time streaming event log with pause/resume, multi-dimension filters (same toolbar as Session Detail plus a Session filter), server-driven "Load more" pa…
AnalyticsToken usage, tool frequency, activity heatmap (centered, day-of-week aligned starting Sunday, day-name tooltips), session trends, live/offline connection ind…
Live UpdatesWebSocket push -- no polling, instant UI updates
Auto-DiscoverySessions and agents are created automatically from provider signals.
History ImportProvider-aware Import History brings in Claude Code transcripts from ~/.claude/ and Codex rollout JSONL from ~/.codex/sessions.
Helm Code MonitorProvides read-only monitoring of Helm Code development sessions by mirroring the threads of ~/.helmcode/userdata/state.sqlite (or a Settings ove…
Subagent HierarchyCollapsible parent-child agent tree on Dashboard and Session Detail.
Background AgentsCorrectly tracks backgrounded subagents without premature completion
Subagent Tool AttributionSubagent-internal tool calls (Read, Bash, Edit, Grep, …) live only in per-subagent JSONL files — Claude Code emits no hooks for them.
Cost TrackingPer-model cost estimation with configurable pricing rules and per-session breakdowns.
Transcript CacheReal-time extraction from JSONL transcripts: tokens, compactions, API errors (isApiErrorMessage entries stored as APIError events), turn durations (store…
NotificationsFull Web Push (VAPID) pipeline for reliable delivery.
AlertsRules-based alerting engine — configured entirely in Settings → Alerts & Notifications, a tabbed Rules / Channels / Activity control center (no separ…
Update NotifierServer periodically runs a non-blocking git fetch and compares the local checkout to origin/master/origin/main/origin/HEAD.
SettingsSystem info, hook status, model pricing management, notification preferences, data export and restore (the Import History panel's Restore backup mode…
Run Agent + Agent Config/run begins with a Claude Code / Codex choice and keeps the provider toggle beside its Live status.
Codex Agent ConfigThe Codex half of Agent Config reads the full local account model catalog without the generic preview limit that could falsely show zero models, and always i…
MCP Server (Local)Comprehensive local MCP server in mcp/ with three transport modes (stdio, HTTP+SSE, interactive REPL) and 97 typed tools across 16 domain modules.
WorkflowsD3.js-powered visualization page with 11 interactive sections: agent orchestration DAG, tool execution Sankey diagram, collaboration network, subagent effect…
Compaction TrackingDetects /compact events from JSONL transcripts, creates compaction agents and events.
Subsessions/Resumed SessionsAutomatically reactivates sessions when new events arrive, correctly handles /resume and orphaned sessions.
Pre-Existing Session DetectionSessions already running when the server starts are imported as "active" (based on recent JSONL file modification).
Continuous Project SyncThe startup auto-import of ~/.claude/projects is one-time (marker-gated), so a project folder created after first launch — whose sessions never flow th…
Remote Data SourcesLive remote / multi-machine Claude Code and Codex collection over SSH.
Responsive DesignMobile-friendly layouts with stacking grids, scrollable tables, and collapsible sidebar
UI Copy CoverageUser-visible text runs through i18next/react-i18next namespace bundles (English only — see docs/I18N.md) rather tha…
Seed DataBuilt-in seed script for demos and development
StatuslineColor-coded CLI statusline showing model, context usage, git branch, per-direction tokens, and session cost (USD)
Model Name FormattingHuman-friendly model names throughout the UI: raw identifiers like claude-opus-4-7-20260101 or claude-opus-4-7[1m] display as "Claude Opus 4.7" or "Claud…
Claude + Codex Plugin MarketplaceOne 14-plugin source tree ships canonical Claude manifests, Codex .codex-plugin/plugin.json manifests, both marketplace catalogs, 66 bundled plugin skills,…
Run ClaudeSpawn claude subprocesses directly from the dashboard with a chat-style streaming UI.
Claude Config ExplorerA 12-tab inspector at /cc-config for everything Claude Code knows about: skills, subagents, slash commands, output styles, plugins (with per-plugin contrib…
TabbyA floating cat companion pinned to the bottom-right corner of every page.
Sound CuesSubtle audio feedback for live activity, on by default and fully opt-out.
Progressive Web App (PWA)Three independent PWAs — dashboard, landing page, and wiki — each with its own Web App Manifest and Service Worker.
Desktop App (macOS)Optional native desktop app built with Electron 35, living in the desktop/ workspace alongside client/, server/, mcp/, and vscode-extension/.
Self-hosted assets (no CDN)Every font and script is served locally, so the dashboard and docs make zero third-party CDN requests — they render fully offline and leak nothing to ext…
Session splash screenA brief branding splash on app load (once per browser session): a time-aware greeting (Good morning / afternoon / evening / Working late), a bold tagline…
Command PaletteGlobal Cmd+K / Ctrl+K jump-to overlay (client/src/components/CommandPalette.tsx), mounted once at the app root.
Terminal FocusA button on active-session cards raises the OS terminal window running that session (POST /api/sessions/{id}/focus-terminal, server/lib/terminal-focus.js).
Linear Ticket LinkingRead-only integration with Linear (scoped to Linear only — no Jira, no GitHub Issues): link a dashboard session to a Linear issue by pa…

Provider scope and homes: Settings keeps the Claude Code / Codex / Both choice globally consistent, and lets you change either session-data home without restarting the dashboard.

Local safety boundaries: Run Agent accepts any existing absolute working directory and canonicalizes it before use, so home and recent-project launches remain supported. Hosted webhook providers require HTTPS; generic and n8n targets may use HTTP for local/self-hosted receivers, and delivery never follows redirects.


Quick Start

Prerequisites

  • Node.js >= 22.22.0 (24 LTS recommended)
  • npm >= 9.0.0

1. Install

git clone https://github.com/buluma/Code-Agent-Monitor.git
cd Code-Agent-Monitor
npm run setup

2. Configure Claude Code Hooks

npm run install-hooks

Interactive multi-select for Claude Code, Codex (beta), or both. Codex rollouts and Helm Code sessions (mirrored read-only, no hooks) are also auto-discovered. Full detail: INSTALL.md and docs/HOOKS.md.

3. Start

# Development (hot reload on both server and client)
npm run dev
# Production (single process, built client)
npm run build && npm start

4. Open

ModeURL
Developmenthttp://localhost:5173
Productionhttp://localhost:4820

5. Optional: Run the local MCP server

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

See mcp/README.md for host configuration, transports, and the full tool catalog.

Alternatives

How It Works

sequenceDiagram
participant CC as Claude Code
participant HH as Hook Handler
participant API as Express Server
participant DB as SQLite
participant WS as WebSocket
participant UI as React Client
CC->>HH: stdin (JSON event)
HH->>API: POST /api/hooks/event
API->>DB: Insert/update records
API->>WS: Broadcast update
WS->>UI: Push message
UI->>UI: Re-render component
Note over CC,HH: Hooks fire on SessionStart,<br/>PreToolUse, PostToolUse,<br/>Stop, SubagentStop,<br/>SessionEnd, Notification.<br/>Compaction detected from JSONL
Note over API,DB: Transactional writes<br/>with auto session/agent creation
Note over WS,UI: ~0ms latency,<br/>no polling
Loading

Full hook lifecycle, agent/session state machines, and cost calculation flow: ARCHITECTURE.md, docs/HOOKS.md, and docs/DATABASE.md.

Configuration

Important

Secure by default. The server binds 127.0.0.1 and is not reachable from the network out of the box (GHSA-gr74-4xfh-6jw9). To expose it on a LAN, set bothDASHBOARD_HOST (e.g. 0.0.0.0) andDASHBOARD_TOKEN, and list your LAN hostnames in DASHBOARD_ALLOWED_HOSTS.

Full environment variable reference — ports, import limits, MCP, tokens, watchdog/liveness tuning, remote sync: INSTALL.md → Environment variables and .env.example.

The server periodically git fetches origin and surfaces a modal with the exact upgrade command when you're behind — it never pulls or restarts itself.

cam CLI

The dashboard's full feature surface is also available from any terminal via the dependency-free cam CLI (bin/cam.js), linked automatically by npm run setup.

cam status # is the dashboard running?
cam stats # totals, today's events, status distributions
cam tail # live event feed in the terminal

Full command reference, discovery, and safety model: docs/CLI.md.

npm Scripts

Full reference for every script (setup, dev, build, test, MCP, desktop, docker): INSTALL.md → Scripts reference. Fastest local gate: npm run verify.

Agent Extensions

A shared extension layer for Claude Code (CLAUDE.md, .claude/rules/, .claude/skills/, .claude/agents/) and Codex (AGENTS.md, .codex/rules/, .codex/agents/, .codex/skills/), plus distributable plugins under plugins/ with both marketplace manifests.

Architecture diagram and layer breakdown: ARCHITECTURE.md → Agent Extension Layer. Setup: INSTALL.md → Agent extension packs.

MCP Integration

A local MCP server at mcp/ with 97 typed tools across 16 domain modules, exposing every supported dashboard action — scoped data reads, transcripts/images, pricing, workflows, alerts/webhooks, import/backup, Claude/Codex config, Run Agent, remote sources, settings, push, and guarded maintenance. Three transport modes: stdio, HTTP+SSE, and an interactive REPL.

npm run mcp:install && npm run mcp:build
cam mcp stdio # stable launcher used by bundled plugins

Architecture, tool catalog, safety model, transports, and configuration: mcp/README.md — the canonical MCP doc.

API Reference

Every route is documented by a single OpenAPI 3.0.3 spec (server/openapi.js), explorable three ways with the dashboard running (default port 4820):

MethodPathDescription
GET/api/docsInteractive Swagger UI — try-it-out request execution
GET/api/redocReDoc reference — read-optimized three-panel view
GET/api/openapi.jsonRaw OpenAPI 3.0.3 JSON spec

A committed openapi.yaml at the repo root mirrors the live spec (regenerate with npm run openapi:yaml). Prometheus metrics are exposed at GET /api/metrics.

Full endpoint reference (sessions, agents, events, stats, analytics, hooks, pricing, workflows, settings, import history, cc-config, run, WebSocket protocol): docs/API.md.

Hook Events

The dashboard processes 13 event types: 7 native Claude Code hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SubagentStop, Notification, SessionEnd) plus 5 synthesized from JSONL transcripts (Compaction, APIError, TurnDuration, ToolError, Interrupted).

Full per-hook reference — trigger, payload, and dashboard state transition: docs/HOOKS.md.

Browser Notifications

Persistent browser notifications via Web Push (VAPID), delivered even when the tab is unfocused or the browser is backgrounded — configurable per event in Settings. The dashboard, landing page, and wiki each ship as independent installable PWAs with their own manifest and Service Worker.

Per-event defaults, VAPID pipeline, and PWA caching strategy: ARCHITECTURE.md → Browser Notification System.

Update Notifier

Watches its own git checkout and surfaces a modal when the canonical branch is ahead of HEAD — branch- and fork-aware, with the exact command to run yourself. The server never pulls or restarts itself.

Dashboard update modal with copy-to-clipboard command

Detection pipeline, payload shape, and failure modes: ARCHITECTURE.md → Update Notifier Subsystem.

Tabby — Floating Cat Companion

A floating cat companion pinned to the bottom-right corner, turning the live session stream into a reactive mascot with 8 moods, speech bubbles, and an Ask box that hands off to Run Claude for anything beyond a quick status lookup.

Tabby the reactive dashboard mascot, shown in various moods and with a speech bubble

Full mood table, panel, and accessibility detail: ARCHITECTURE.md → Tabby Companion Subsystem.

Sound Cues

Subtle audio feedback for live session activity — on by default, one click to disable. Every cue is synthesized in the browser via the Web Audio API (no audio assets, no library). Guarded by a per-cue cooldown and a global burst budget so a flood of WebSocket events never becomes a flood of beeps.

Full cue table, synthesis details, and Settings behavior: client/README.md → Audio cues.

Connection Status Modal

Click the Live / Disconnected pill in the sidebar footer for WebSocket transport details: endpoint, uptime, throughput sparkline, top event types, and recent activity.

Connection details modal with throughput sparkline, top event types, and recent activity

Full detail: client/README.md → Connection Status Modal.

VS Code Extension

Monitor agent activity without leaving your editor: live sidebar, status bar pulse, and an embedded dashboard tab.

VS Code Extension Screenshot

Install: INSTALL.md → VS Code extension. Architecture: ARCHITECTURE.md → VS Code Extension Architecture.

Tip

Extension on VS Code Marketplace: Code Agent Monitor

Desktop App (macOS)

An optional native desktop app (Electron 35, in desktop/) — a macOS .app/.dmg that embeds the same dashboard with a tray icon, Open-at-Login, and a single-instance lock. Same UI, real OS window.

Claude Code Monitor running as a native desktop app

Install, build, and runtime behavior (port adoption, data directory, logs): INSTALL.md → Desktop App (macOS). Architecture: ARCHITECTURE.md → Desktop App Architecture. Contributor reference: desktop/README.md. Full user guide: DESKTOP.md.

Data Storage

SQLite 3 (better-sqlite3 or node:sqlite), WAL mode, at data/dashboard.db. Delete that file to reset.

Full schema, ERD, and query reference: docs/DATABASE.md.

Plugin Marketplace

CAM ships 14 plugins (66 plugin skills, 18 subagents, 34 commands) from one shared source tree, installable for Claude Code, Codex, or via the skills.sh-compatible skills CLI.

# Claude Code
claude plugin marketplace add buluma/Code-Agent-Monitor
claude plugin install cam-platform@claude-code-agent-monitor-plugins
# Codex
codex plugin marketplace add buluma/Code-Agent-Monitor
codex plugin add cam-platform@claude-code-agent-monitor-plugins

The skills.sh-compatible skills CLI discovers 76 total repository skills (the 66 plugin skills plus repository-maintenance skills). Full catalog, skills CLI usage, and per-plugin breakdown: docs/PLUGINS.md.

Statusline

Standalone CLI statusline utility for Claude Code: model, user, cwd, git branch, context-window usage bar, token counts, and session cost, color-coded.

buluma@host ~/agent-dashboard/client | Sonnet 4.6 | main | ████████░░ 79% | 3↑ 2↓ 156586c | $0.4231

Segment reference and color thresholds: ARCHITECTURE.md → Statusline Utility. Install: statusline/README.md.

Server Architecture

Full module dependency graph: ARCHITECTURE.md → Server Architecture and server/README.md.


Client Routing

Full route table and diagram: client/README.md → Routing.


Hook Handler Flow

stdin → parse JSON → POST /api/hooks/event → exit(0), with a 3s request timeout and a 5s safety-net fallback so a hung dashboard never blocks Claude Code. Full flowchart: ARCHITECTURE.md → Hook Handler Design.


Deployment Modes

Development (2-process, HMR), production (1-process), desktop app, MCP sidecar, container, and cloud deployment modes are all covered in ARCHITECTURE.md → Deployment Modes. For hands-on deploy commands, see DEPLOYMENT.md and INSTALL.md.


Project Structure

Code-Agent-Monitor/
├── server/ # Express API, hook ingestion, SQLite, WebSocket
├── client/ # React + Vite dashboard UI
├── mcp/ # Local MCP server (stdio / HTTP+SSE / REPL)
├── desktop/ # Electron desktop app (macOS)
├── vscode-extension/ # VS Code extension
├── scripts/ # Hook installer/handler, import, seed, cleanup
├── plugins/ # Claude Code + Codex plugin marketplace (14 plugins)
├── deployments/ # Docker/Podman, Helm, Kustomize, Terraform
├── docs/ # Canonical reference docs (API, hooks, DB, MCP, ...)
└── wiki/ # Static product wiki (GitHub Pages)

Full annotated tree, per-file responsibilities: ARCHITECTURE.md → Project Structure.

Troubleshooting

Full troubleshooting guide: INSTALL.md.


Contributing

Contributions are welcome — see .github/CONTRIBUTING.md for the full guide.

All contributors must sign the Contributor License Agreement. This is enforced automatically on every pull request by the 🖋️ CLA Assistant GitHub Action: the first time you open a PR, a bot asks you to sign by commenting I have read the CLA Document and I hereby sign the CLA. The PR's CLA Assistant status check stays red until you do, and signing once covers all future contributions.


License

MIT. See LICENSE for details.

About

Real-time monitoring platform for code agent activity.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages