This repository has been archived on 2026-06-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
nerve/packages/daemon

@uncaged/nerve-daemon

The observation engine runtime for nerve — runs senses, routes signals, schedules reflexes, and manages workflows.

Architecture

Module Responsibility
Kernel Top-level orchestrator — spawns workers, wires up signal bus, scheduler, and workflow manager. Supports hot reload and graceful shutdown.
Sense Runtime Per-sense SQLite database (via node:sqlite + Drizzle ORM), migration runner, peer DB read access.
Sense Worker Forked child process — one per sense group. Runs compute functions in isolation.
Signal Bus In-memory pub/sub. Sense computes emit signals; reflexes and workflows subscribe.
Reflex Scheduler Drives compute triggers — interval timers, signal-based events, throttle/coalesce logic.
Workflow Manager Concurrency control (drop/queue), thread lifecycle, worker process management (RFC-002).
Log Store Structured log storage in WAL-mode SQLite. Supports retention policies, archival to JSONL, and workflow run tracking.
Blob Store Binary artifact storage for workflow outputs.
File Watcher Watches nerve.yaml and sense files for hot reload.
Daemon IPC Unix socket server for CLI ↔ daemon communication.

Key Design Decisions

  • One worker process per sense group — isolation between groups, shared compute within a group
  • node:sqlite (DatabaseSync) — zero native addons, WAL mode, built into Node.js ≥ 22.5
  • Throttle + coalesce — if compute is in-flight, at most one pending trigger is queued (no unbounded accumulation)
  • Log ≠ Signal — logs are queryable data assets but cannot trigger reflexes (prevents feedback loops)

Usage

The daemon is typically started via the CLI (nerve daemon start), but can be used programmatically:

import { createKernel } from "@uncaged/nerve-daemon";

const kernel = await createKernel(nerveRoot);
await kernel.ready;

// Trigger a sense manually
kernel.triggerSense("cpu-usage");

// Check health
const health = kernel.getHealth();

// Graceful shutdown
await kernel.stop();

Install

pnpm add @uncaged/nerve-daemon

Requires Node.js ≥ 22.5 (for node:sqlite).

License

MIT