setup-os-monitor
Setup os-monitor
Use this skill to reliably install and configure os-monitor in a Node.js project.
What to do
- Confirm runtime and package-manager context.
- Install the correct package version (
latestvslegacy). - Add a minimal monitor setup.
- Add production-oriented config (thresholds, events, throttling, stream mode when needed).
- Verify behavior with a quick run and explain tuning knobs.
Inputs to gather first
Ask for missing details before changing files:
- Project package manager (
npm,pnpm, oryarn). - Node.js version in the target environment.
- Whether the user needs
CommonJS(require) orESM(import) style. - Which conditions should trigger alerts:
- low free memory
- high load average (1/5/15 min)
- low disk space on specific paths
- uptime threshold
- Desired monitor interval (
delay). - Whether output should be event callbacks only or readable stream mode.
If the user does not provide preferences, choose sensible defaults and call them out clearly.
Installation logic
Use this decision tree:
- If Node.js is
>= 18.15.x, install:npm install os-monitor --ignore-scripts
- If Node.js is
< 18.15.xor explicitly very old, install:npm install os-monitor@legacy --ignore-scripts
When in doubt, ask the user to confirm target Node version before proceeding.
Baseline implementation
Start from this baseline (CommonJS):
const { createMonitor } = require("os-monitor");
const monitor = createMonitor();
monitor.on("monitor", (event) => {
console.log("[monitor]", event);
});
monitor.on("freemem", (event) => {
console.warn("[freemem]", event.freemem, "bytes free");
});
monitor.on("loadavg1", (event) => {
console.warn("[loadavg1]", event.loadavg[0]);
});
monitor.start({
delay: 3000,
freemem: 0, // replace with threshold later
critical1: require("os").cpus().length,
critical5: require("os").cpus().length,
critical15: require("os").cpus().length,
silent: false,
stream: false,
immediate: false,
});
For ESM, adapt imports and keep behavior equivalent.
Configuration guidance
Use these rules while tuning:
delay: default3000ms; increase for lower overhead.freemem: allow bytes or fraction of total memory (for example0.2for 20%).critical1,critical5,critical15: default toos.cpus().length; lower values make alerts more sensitive.diskfree: only use wherefs.statfssupport is available (Node >= 18.15.x).silent: truedisables recurringmonitorevents when logs are too noisy.stream: truewhen piping output to stdout/files/processors.immediate: truewhen an initial sample is needed right afterstart().
If throttling is useful, add:
monitor.throttle("loadavg5", (event) => {
console.warn("[loadavg5 throttled]", event.loadavg[1]);
}, monitor.minutes(5));
Disk monitoring pattern
When user asks for disk alerts, convert byte thresholds to blocks:
monitor.start({
diskfree: {
"/": monitor.blocks(100000000, 4096),
},
});
Explain that block size depends on the filesystem and should match the environment.
Validation checklist
After setup, verify all of the following:
- Package appears in
dependencies. - Monitor starts without runtime errors.
- At least one event handler logs expected payload structure.
monitor.isRunning()reportstrueafter start andfalseafter stop.- If stream mode is enabled, output is piped and visible.
- If
diskfreewas configured, user confirms runtime supportsstatfs.
Note: Whenever you start a server for validation, ensure you stop the process once the check is complete. Do not leave background processes hanging in the user's environment.
Troubleshooting
- No events firing:
- Check thresholds are realistic and not too strict.
- Enable
immediate: truefor instant first cycle.
- Too many logs:
- Increase
delay. - Set
silent: trueand keep only targeted event handlers. - Add throttled handlers for noisy events.
- Increase
- Diskfree not working:
- Confirm Node version is new enough for
fs.statfs. - Re-check block threshold conversion.
- Confirm Node version is new enough for
Output format
When completing a setup task, return:
- What you installed and why (
latestvslegacy). - Files changed.
- Final monitor config used.
- How to run and validate.
- Suggested next tuning steps for production workloads.
More from lfortin/skills
create-stellar-system
Use this skill when the user asks to design, simulate, or document a physically coherent stellar system, including stars, planets, orbital stability, thermal zones, and chemical composition/distribution for worldbuilding or hard-sci-fi settings.
10setup-cgi-core
Install and configure the Node.js `cgi-core` package to host CGI scripts via CLI or middleware for HTTP server, including interpreter mappings, buffer/timeouts, status pages, env injection, and proxy-safe `trustProxy` usage. Use this skill whenever users need to run legacy CGI scripts (Perl, Python, Bash, Node, etc.) in a modern Node setup, replace Apache for lightweight CGI hosting, or wire `/cgi-bin` routing in local/dev environments.
9