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
{
"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
| Option | Type | Default | Description |
|---|---|---|---|
port | number | 57580 | HTTP and WebSocket server port |
host | string | "127.0.0.1" | Bind address. Use "0.0.0.0" for remote access |
database | string | "~/.dashcam/dashcam.db" | Path to the SQLite database file |
capturesDir | string | "~/.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.
| Option | Type | Default | Description |
|---|---|---|---|
capture.enabled | boolean | true | Master toggle for screenshot capture |
capture.minInterval | number | 30 | Minimum seconds between captures. Prevents flooding during rapid file edits |
capture.triggerTools | string[] | ["Write", "Edit"] | Claude Code tool names that trigger a capture attempt |
capture.devServerPorts | number[] | [3000, 3001, 4000, 5173, 5174, 8080, 8081] | Ports scanned for a running dev server |
capture.customUrl | string | null | null | Override auto-detection with a specific URL (e.g., "http://localhost:4321") |
capture.dedup | boolean | true | Skip 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.
{
"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.
| Option | Type | Default | Description |
|---|---|---|---|
video.enabled | boolean | true | Master toggle for video recording |
video.triggerCommands | string[] | ["playwright test", "vitest", ...] | Bash commands that trigger video recording |
video.quality | string | "medium" | Recording quality: "low", "medium", or "high" |
video.maxDuration | number | 600 | Maximum 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.
| Option | Type | Default | Description |
|---|---|---|---|
window.duration | number | 18000 | Window duration in seconds (18000 = 5 hours) |
window.warnings | number[] | [14400, 16200, 17100] | Warning thresholds in seconds (4h, 4h30m, 4h45m) |
window.windDownAt | number | 17700 | Start wind-down at this many seconds (4h55m) |
window.cooldownDuration | number | 300 | Cooldown period between windows in seconds (5 minutes) |
window.autoManage | boolean | false | Automatically 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.
| Option | Type | Default | Description |
|---|---|---|---|
retention.events | number | -1 | Days to keep events. -1 means forever |
retention.screenshots | number | 30 | Days to keep screenshot files |
retention.videos | number | 14 | Days 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.
npx dashcam prune --older-than 30dBridge Toggles
Enable integration bridges for multi-agent frameworks that work alongside Claude Code.
| Option | Type | Default | Description |
|---|---|---|---|
bridges.loki | boolean | false | Enable Loki Mode bridge (watches .loki/ state files) |
bridges.ecc | boolean | false | Enable Everything Claude Code bridge |
bridges.squad | boolean | false | Enable Claude Squad bridge (tmux session tracking) |
Bridges can also be enabled at startup with CLI flags:
npx dashcam start --loki --ecc --squadTheme
| Option | Type | Default | Description |
|---|---|---|---|
theme | string | "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:
| Variable | Overrides |
|---|---|
DASHCAM_PORT | port |
DASHCAM_HOST | host |
DASHCAM_DB | database |
DASHCAM_CAPTURES_DIR | capturesDir |
DASHCAM_PORT=8080 DASHCAM_HOST=0.0.0.0 npx dashcam start