Skip to main content
For production or always-on deployments, use PM2 to manage the Claudeye process.

PM2 ecosystem config

Create an ecosystem.config.cjs file:
ecosystem.config.cjs
module.exports = {
  apps: [{
    name: 'claudeye',
    script: 'node_modules/.bin/next',
    args: 'start',
    interpreter: 'bun',
    cwd: '/path/to/claudeye',
    env: {
      PORT: 8020,
      HOSTNAME: '0.0.0.0',
      CLAUDE_PROJECTS_PATH: '/home/user/.claude/projects',
      CLAUDEYE_EVALS_MODULE: './my-evals.js',
      CLAUDEYE_QUEUE_INTERVAL: '60',
    },
  }],
};

Start and monitor

# Start
pm2 start ecosystem.config.cjs

# Monitor logs and CPU/memory
pm2 monit

# View logs
pm2 logs claudeye

Auto-restart on reboot

# Generate startup script for your OS
pm2 startup

# Save the current process list
pm2 save
After running pm2 startup, follow the printed instructions to register the startup hook. pm2 save persists the current process list so Claudeye restarts automatically after a reboot.

Environment variables

All Claudeye configuration can be passed via env in the ecosystem config:
VariableDescription
PORTPort to bind (default: 8020)
HOSTNAMEHost to bind (0.0.0.0 for network access)
CLAUDE_PROJECTS_PATHPath to Claude projects directory
CLAUDEYE_EVALS_MODULEPath to your evals JS file
CLAUDEYE_QUEUE_INTERVALBackground scan interval in seconds
CLAUDEYE_QUEUE_CONCURRENCYMax parallel items per batch
CLAUDEYE_AUTH_USERSComma-separated user:password pairs
See the full CLI Reference for all available environment variables.

Running evals directly with Node or Bun

If your evals file includes app.listen(), you can also run it directly without the Claudeye CLI:
# Runs the dashboard as a child process
node my-evals.js

# Or with Bun
bun my-evals.js
When loaded via --evals or CLAUDEYE_EVALS_MODULE, app.listen() is a no-op - it won’t start a duplicate server.