Sentinel is the dashboard for the Node apps Dark Avian Labs runs under PM2. CPU, memory, HTTP latency, event-loop lag, and restarts show up as charts on the machine that hosts the fleet.
It is for the person who wants the graphs when something feels slow, without standing up a second monitoring stack.
A fleet list. Each app shows how many restarts and crashes it had in the last day. Open one for the charts.
The numbers that explain a stall. CPU and memory sit next to HTTP p95 latency and event-loop lag. A process can look idle on CPU and still be late on requests. Both are on the same page.
Restarts and crashes, split apart. A clean restart and a crash are different events. The app page lists them for the time range you picked.
Samples from the apps themselves. Hosted apps can post metrics to /api/ingest. A PM2 bridge on the server host can do the same. The charts are whatever those samples contain.
The dashboard is limited to admin accounts. A normal Dark Avian Labs sign-in is not enough. The same account system is the one Codex and Armory use. The left rail still jumps between the hosted apps.
Ping and error digests stay in pm2-discord. Sentinel is the page you open for the graphs.
The charts stay empty until something posts a sample. A fresh install shows the empty state on purpose.
Live: sentinel.darkavianlabs.com
Node 26 or newer, and pnpm 12. Copy .env.example to .env.development. pnpm dev reads that file. Production refuses to start without Clerk keys, and the example already says so.
pnpm install
pnpm dev
Set SENTINEL_INGEST_TOKEN and give that same token to each app or to the PM2 bridge. A hosted process needs NODE_ENV=production and .env.production. Fill the Clerk keys before pnpm run build, because the client bundle reads VITE_ values at build time. Sentinel only sees processes that can reach its ingest URL, so it belongs on the host that runs the fleet, or somewhere those agents can post to.
MIT
