- TypeScript 29%
- JavaScript 24%
- CSS 24%
- Shell 10%
- Python 9%
- 2 more languages 4%
PulseMonitor #
Real-time web dashboard for monitoring remote AI agent sessions over SSH.
PulseMonitor connects to a remote machine where your AI coding agent runs, reads its logs and session database, and presents a live dashboard with activity feed, todo tracking, tool call statistics, agent reasoning, and system metrics.
Screenshots #

Screenshots are in
docs/screenshots/. Run the monitor and capture your own withscripts/screenshot.sh.
Features #
- Activity Feed - Real-time stream of tool calls (read, exec, edit, grep, etc.) with timestamps and color-coded tags
- Todo List - Live todo list extracted from the agent's session database, with progress bar and per-item status
- Tool Call Statistics - Horizontal bar chart showing the distribution of tool calls (read, grep, exec, edit, etc.)
- Agent Reasoning - Recent assistant commentary messages showing what the agent is thinking and doing
- System Metrics - Session age, message count, process memory, thread count, system load, RAM usage, repo disk size
- Git Panel - Current branch, recent commits, working tree changes on the remote repo
- Status Badge - Running, stopped, connecting, or idle state with live duration counter
- Noise Filtering - Filters out wrapper artifacts (usage trackers) and internal noise from the activity feed
Supported Harnesses #
| Harness | Status | Notes |
|---|---|---|
| Devin CLI | Supported | Full support: logs, session DB, todos, commentary, tool stats |
| Claude Code | Planned | See Roadmap |
| Codex | Planned | See Roadmap |
| OpenCode | Planned | See Roadmap |
To add a harness, see docs/harness-development.md.
Quick Start #
Prerequisites #
- Node.js 18 or later
- SSH access to a remote machine running an AI agent CLI
- The agent CLI must write logs to a known directory and/or a session database
Install #
Linux / macOS:
git clone https://github.com/Dvorinka/pulsemonitor.git
cd pulsemonitor
chmod +x scripts/install.sh
./scripts/install.sh
Windows (PowerShell):
git clone https://github.com/Dvorinka/pulsemonitor.git
cd pulsemonitor
.\scripts\install.ps1
The install script will:
- Install npm dependencies
- Build the frontend
- Deploy helper scripts to the remote machine
- Set up a systemd (Linux) or launchd (macOS) service, or print instructions for manual start
Manual Start #
npm install
npm run build
AGENT_MONITOR_SSH_HOST=root@server AGENT_MONITOR_SSH_KEY=~/.ssh/id_rsa npm start
Then open http://localhost:5656 in your browser.
Development #
npm install
npm run dev
This starts Vite (frontend) on port 5656 and the API server on port 5657. The Vite dev server proxies /api requests to the API server.
Configuration #
All configuration is via environment variables. Copy .env.example to .env and fill in your values, or set them inline.
| Variable | Default | Description |
|---|---|---|
AGENT_MONITOR_SSH_HOST |
localhost |
SSH target (e.g. root@10.0.0.1) |
AGENT_MONITOR_SSH_KEY |
~/.ssh/id_rsa |
SSH private key path |
AGENT_MONITOR_PORT |
5656 |
Local port for the dashboard |
AGENT_MONITOR_REPO_PATH |
auto-detect | Remote repo path (auto-detected from agent process CWD if not set) |
AGENT_MONITOR_HARNESS |
devin |
Agent harness to monitor |
AGENT_MONITOR_THEME |
default |
Theme preset (default, proxmox, or custom) |
AGENT_MONITOR_MAX_LOG_LINES |
300 |
Max log lines to fetch per poll |
Themes #
PulseMonitor supports theme presets for customization. Themes control the accent color, logo, and display name.
Built-in Themes #
| Theme | Accent | Logo | Description |
|---|---|---|---|
default |
Cyan (#06b6d4) | Radar/scope | Clean, generic monitoring look |
proxmox |
Orange (#e8700f) | Proxmox | Proxmox-branded monitoring |
Custom Themes #
Create a JSON file in themes/ with any name:
{
"name": "mytheme",
"displayName": "My Dashboard",
"accent": "#8b5cf6",
"accentLight": "#a78bfa",
"accentDim": "#7c3aed",
"accentGlow": "rgba(139, 92, 246, 0.12)",
"accentBorder": "rgba(139, 92, 246, 0.25)",
"shadowGlow": "0 0 24px rgba(139, 92, 246, 0.12)",
"logo": "radar",
"logoTitle": "MY MONITOR"
}
Set AGENT_MONITOR_THEME=mytheme to activate it.
The logo field accepts "radar" (default) or "proxmox". To add a custom logo, extend the ThemeLogo component in src/App.tsx.
Hook Script #
For easy integration with your agent dispatch workflow, source the hook script:
source /path/to/pulsemonitor/scripts/hook.sh
# Start the monitor before dispatching an agent task
agent_monitor_start "root@server" "~/.ssh/my-key" "/root/my-repo"
# ... dispatch your agent task ...
# Stop the monitor when done
agent_monitor_stop
Commands:
agent_monitor_start [host] [key] [repo]- Start the monitor in the backgroundagent_monitor_stop- Stop the running monitoragent_monitor_status- Check if the monitor is running
API #
The monitor exposes a simple HTTP API:
| Endpoint | Description |
|---|---|
GET /api/status |
Session status, activity feed, git info |
GET /api/todos |
Todo list from the agent's session database |
GET /api/details |
Tool call stats, agent commentary, system metrics |
GET /api/health |
Health check |
All endpoints return JSON. The API is read-only - it only reads data from the remote machine, never writes.
How It Works #
Browser (React) <--HTTP/4s poll--> API Server (Node.js) <--SSH/20s timeout--> Remote Machine
| |
| +-- Agent CLI logs
| +-- Session database (SQLite)
| +-- /proc metrics
| +-- Git repo state
|
+-- Parses logs into events
+-- Queries session DB for todos/commentary
+-- Returns JSON to frontend
The API server makes a single SSH round-trip per poll to collect all data, minimizing latency and SSH connection overhead. The frontend polls every 4 seconds.
Roadmap #
Contributing #
Contributions are welcome. See CONTRIBUTING.md for guidelines.
License #
MIT - See LICENSE.