Architecture

ada daemon start
# Spawns: workers/daemon.js --daemon-worker (detached)
#   ├── PID file → logs/daemon.pid
#   ├── Log file → logs/daemon.log (daily rotation)
#   └── Timers via setTimeout + setInterval
#         ├── ultralearn  → every 6h
#         ├── consolidate → every 2h
#         ├── audit       → daily at midnight
#         └── cve-scan    → every 72h

ada daemon status   # running | stopped + uptime
ada daemon stop     # SIGTERM → graceful shutdown (2s grace period)
ada daemon logs     # tail logs/daemon.log

Workers

WorkerFrequencyDescription
ultralearnevery 6hDistill trajectories into patterns; update ReasoningBank
consolidateevery 2hMerge duplicate insights, archive old trajectories
auditdaily midnightOWASP security audit on plugins and hooks
cve-scanevery 72hnpm/pip CVE scan on project dependencies
dashboardmanualGenerate SVG performance dashboard
cost-reportmanualDetailed cost breakdown by agent/model
team-sync-pushauto (≥5 responses)Sync Thompson priors to remote team registry
topic-wikimanualGenerate wiki pages from trajectory clusters

Custom Schedule

# ~/.ada.json — daemon.schedule overrides
{
  "daemon": {
    "schedule": {
      "ultralearn":  "4h",   // min 1m, max 7d
      "consolidate": "90m",
      "audit":       "48h",
      "cve-scan":    "7d"
    }
  }
}

# Supported formats: "6h" "30m" "90s" "2d"
# Run a worker manually now:
ada daemon run ultralearn
Graceful Shutdown

SIGTERM → clears all timers → unlinks daemon.pid → 2-second grace period → exits. Never send SIGKILL unless the daemon is stuck.