Daemon Architecture
Beads runs a background daemon for auto-sync and performance.
Overview
Each workspace gets its own daemon process:
- Auto-starts on first
bdcommand - Handles database ↔ JSONL synchronization
- Listens on
.beads/bd.sock(Unix) or.beads/bd.pipe(Windows) - Version checking prevents mismatches after upgrades
How It Works
CLI Command
↓
RPC to Daemon
↓
Daemon executes
↓
Auto-sync to JSONL (5s debounce)
Without daemon, commands access the database directly (slower, no auto-sync).
Managing Daemons
# List all running daemons
bd daemons list
bd daemons list --json
# Check health and version mismatches
bd daemons health
bd daemons health --json
# View daemon logs
bd daemons logs . -n 100
# Restart all daemons
bd daemons killall
bd daemons killall --json
Daemon Info
bd info
Shows:
- Daemon status (running/stopped)
- Daemon version vs CLI version
- Socket location
- Auto-sync status
Disabling Daemon
Use --no-daemon flag to bypass the daemon:
bd --no-daemon ready
bd --no-daemon list
When to disable:
- Git worktrees (required)
- CI/CD pipelines
- Resource-constrained environments
- Debugging sync issues
Event-Driven Mode (Experimental)
Event-driven mode replaces 5-second polling with instant reactivity:
# Enable globally
export BEADS_DAEMON_MODE=events
bd daemons killall # Restart to apply
Benefits:
- Less than 500ms latency (vs 5s polling)
- ~60% less CPU usage
- Instant sync after changes
How to verify:
bd info | grep "daemon mode"
Troubleshooting
Daemon not starting
# Check if socket exists
ls -la .beads/bd.sock
# Try direct mode
bd --no-daemon info
# Restart daemon
bd daemons killall
bd info
Version mismatch
After upgrading bd:
bd daemons killall
bd info # Should show matching versions
Sync not happening
# Force sync
bd sync
# Check daemon logs
bd daemons logs . -n 50
# Verify git status
git status .beads/
Port/socket conflicts
# Kill all daemons
bd daemons killall
# Remove stale socket
rm -f .beads/bd.sock
# Restart
bd info
Configuration
Daemon behavior can be configured:
# Set sync debounce interval
bd config set daemon.sync_interval 10s
# Disable auto-start
bd config set daemon.auto_start false
# Set log level
bd config set daemon.log_level debug
See Configuration for all options.