Dashcam
Getting Started

Configuration

Customize capture behavior, window management, and more.

Configuration

Dashcam is configured through a single JSON file at ~/.dashcam/config.json. The file is created with sensible defaults during dashcam init — most users never need to touch it.

Full Configuration Reference

~/.dashcam/config.json
{
  "port": 57580,
  "host": "127.0.0.1",
  "database": "~/.dashcam/dashcam.db",
  "capturesDir": "~/.dashcam/captures",

  "capture": {
    "enabled": true,
    "minInterval": 30,
    "triggerTools": ["Write", "Edit"],
    "devServerPorts": [3000, 3001, 4000, 5173, 5174, 8080, 8081],
    "customUrl": null,
    "dedup": true,
    "thumbnailSize": [320, 240]
  },

  "video": {
    "enabled": true,
    "triggerCommands": ["playwright test", "vitest", "jest", "pytest", "cypress run"],
    "quality": "medium",
    "maxDuration": 600
  },

  "window": {
    "duration": 18000,
    "warnings": [14400, 16200, 17100],
    "windDownAt": 17700,
    "cooldownDuration": 300,
    "autoManage": false
  },

  "retention": {
    "events": -1,
    "screenshots": 30,
    "videos": 14
  },

  "bridges": {
    "loki": false,
    "ecc": false,
    "squad": false
  },

  "theme": "system"
}

Server Settings

OptionTypeDefaultDescription
portnumber57580HTTP and WebSocket server port
hoststring"127.0.0.1"Bind address. Use "0.0.0.0" for remote access
databasestring"~/.dashcam/dashcam.db"Path to the SQLite database file
capturesDirstring"~/.dashcam/captures"Directory for screenshots and video recordings

Binding to 127.0.0.1 means the dashboard is only accessible from your local machine. Change to 0.0.0.0 when running on a remote server — but always pair it with an SSH tunnel or HTTPS reverse proxy.

Capture Settings

Control when and how Dashcam captures screenshots of your running application.

OptionTypeDefaultDescription
capture.enabledbooleantrueMaster toggle for screenshot capture
capture.minIntervalnumber30Minimum seconds between captures. Prevents flooding during rapid file edits
capture.triggerToolsstring[]["Write", "Edit"]Claude Code tool names that trigger a capture attempt
capture.devServerPortsnumber[][3000, 3001, 4000, 5173, 5174, 8080, 8081]Ports scanned for a running dev server
capture.customUrlstring | nullnullOverride auto-detection with a specific URL (e.g., "http://localhost:4321")
capture.dedupbooleantrueSkip captures that are visually identical to the previous one (perceptual hashing)
capture.thumbnailSize[number, number][320, 240]Width and height of generated thumbnails

When Claude Code invokes a Write or Edit tool, Dashcam checks whether at least minInterval seconds have passed since the last capture. If so, it scans devServerPorts for an HTTP 200 response, launches a headless Chromium instance via Playwright, and captures a screenshot. A perceptual hash is computed — if it matches the previous capture (meaning the page looks the same), the duplicate is discarded.

Example: Capture every file write, check Astro dev server
{
  "capture": {
    "minInterval": 10,
    "triggerTools": ["Write", "Edit", "Bash"],
    "devServerPorts": [4321],
    "dedup": true
  }
}

Video Settings

Dashcam can record video when it detects test commands running through Claude Code.

OptionTypeDefaultDescription
video.enabledbooleantrueMaster toggle for video recording
video.triggerCommandsstring[]["playwright test", "vitest", ...]Bash commands that trigger video recording
video.qualitystring"medium"Recording quality: "low", "medium", or "high"
video.maxDurationnumber600Maximum recording duration in seconds (failsafe)

When a PostToolUse event contains a matching command (e.g., npx playwright test), Dashcam starts a Playwright browser recording. The recording stops when the test command completes or the maxDuration limit is reached. Videos are stored as WebM files in the captures directory.

Window Management

Dashcam tracks 5-hour subscription windows and provides configurable warnings as the window approaches its limit.

OptionTypeDefaultDescription
window.durationnumber18000Window duration in seconds (18000 = 5 hours)
window.warningsnumber[][14400, 16200, 17100]Warning thresholds in seconds (4h, 4h30m, 4h45m)
window.windDownAtnumber17700Start wind-down at this many seconds (4h55m)
window.cooldownDurationnumber300Cooldown period between windows in seconds (5 minutes)
window.autoManagebooleanfalseAutomatically signal agents to stop at wind-down

The status bar displays a color-coded countdown timer:

  • Green: more than 1 hour remaining
  • Yellow: 30-60 minutes remaining
  • Orange: 10-30 minutes remaining
  • Red (pulsing): less than 10 minutes remaining

autoManage is an opt-in feature. When enabled, Dashcam sends a graceful stop signal to agents at the wind-down threshold and captures a work summary for the next session. Leave this false unless you want Dashcam to actively manage your agent sessions.

Retention Policies

Control how long Dashcam keeps different types of data.

OptionTypeDefaultDescription
retention.eventsnumber-1Days to keep events. -1 means forever
retention.screenshotsnumber30Days to keep screenshot files
retention.videosnumber14Days to keep video recordings

Events are tiny (roughly 1 KB each) and kept indefinitely by default. Screenshots dominate storage — expect roughly 500 MB per month of active use. Run npx dashcam prune to manually clean data older than the configured retention period.

Terminal
npx dashcam prune --older-than 30d

Bridge Toggles

Enable integration bridges for multi-agent frameworks that work alongside Claude Code.

OptionTypeDefaultDescription
bridges.lokibooleanfalseEnable Loki Mode bridge (watches .loki/ state files)
bridges.eccbooleanfalseEnable Everything Claude Code bridge
bridges.squadbooleanfalseEnable Claude Squad bridge (tmux session tracking)

Bridges can also be enabled at startup with CLI flags:

Terminal
npx dashcam start --loki --ecc --squad

Theme

OptionTypeDefaultDescription
themestring"system"Dashboard theme: "system", "dark", or "light"

The dashboard defaults to your operating system's preference. The theme can also be toggled from the top navigation bar in the dashboard itself.

Environment Variables

Configuration can be overridden with environment variables, useful for CI or Docker deployments:

VariableOverrides
DASHCAM_PORTport
DASHCAM_HOSThost
DASHCAM_DBdatabase
DASHCAM_CAPTURES_DIRcapturesDir
Terminal
DASHCAM_PORT=8080 DASHCAM_HOST=0.0.0.0 npx dashcam start

On this page