Skip to content

Repository files navigation

errmeter

🇺🇸 English🇯🇵 日本語🇨🇳 简体中文🇹🇭 ไทย

errmeter: a shout that is never lost. Four connected nodes carry an alert from emit through a local spool and a sink to watch.

CI: local matrix License: MIT npm Node 18+ macOS | Linux | Windows Dependencies: none

errmeter reports failed or silent AI agents and scheduled jobs, so unnoticed failures across machines reach a shared board and a repair hook.

A shout that is never lost.

🔧 Engineering: architecture | 📘 Reference: contract

Sound familiar?What it doesWhat you needGet startedWhy it's safeLearn moreLicense


Sound familiar?

Running jobs on several machines makes silence easy to miss.

  • A nightly job stopped a week ago, and you only noticed today.
  • An agent failed at 3 a.m.; its error stayed on a machine you rarely open.
  • Your laptop was asleep when it was supposed to watch the other agents.
  • Someone said it was fixed, but nobody can trace what actually happened.

errmeter gives those machines one shared place to report what happened.


What it does

An agent writes its report to local disk first; a forwarder delivers it when the network allows, and a watcher hands failures to your repair hook.

flowchart LR
    E[emit] --> P[spool: local disk]
    P --> S[sink: GitHub Issues]
    S --> W[watch]
    W --> D[dispatch hook]
    W --> N[notify]
Loading
  • 📣 Emit — report a failure or send an “I am alive” heartbeat.
  • 💾 Spool — keep the report locally until delivery is acknowledged.
  • 📮 Sink — forward reports to your private GitHub Issues board.
  • 👀 Watch — claim failures, run your repair hook, and escalate to you.

Repeated errors share an Issue, so you can trace occurrences and repair outcomes. You supply the repair hook and notification settings; errmeter does not repair code by itself or merge repair PRs.

The disk-first design has limits: storage exhaustion can lose reports; overflow reduces detail, and its ceiling drops further occurrences. A host without a loop retries for a bounded linger period and at its next emit. If every machine is down, none can notify you. See durability and loss boundaries.

That shared board needs only a runtime, a repository, and a narrowly scoped token.


What you need

Start on one agent machine with these three things.

  • Node.js 18+ — no package dependencies, build step, or database.
  • A private GitHub repository — for example, owner/errmeter-inbox.
  • A fine-grained token — limited to that repository's Issues and metadata.
Environment Support What to know
macOS ✅ Supported Native launchd registration
Linux, user-scope systemd ⚠️ Unverified Starts at login; boot needs user lingering; real-host validation pending
Linux, system-scope systemd ⚠️ Unverified Requires validation on a real host
Windows ⚠️ Unverified Native Task Scheduler path; real-host validation pending
Node.js 18 / 20 / 22 / 24 ✅ Local matrix Tests run locally on macOS (all four majors) and on a Linux VPS (Node 22, 2026-09-09); no GitHub Actions
Any process that can run a command ✅ Command interface Call errmeter emit
Claude Code ✅ Hook integration Owner-applied hooks; see integrations
Codex ✅ Notify integration Owner-applied notify hook; see integrations
cron / launchd jobs ✅ Job wrappers Preserve the job's exit status

The local matrix policy describes verification; the integration index explains the owner tools. Monitoring needs watch on an always-on machine; an agent-only host can run the lighter agent-host loop.

With those prerequisites ready, install and send your first report.


Get started

Install on one machine first, then connect its report to your private board.

Ask your AI to install it

Paste this into the agent you use:

https://github.com/caty-ai/errmeter
Install this with: npm install -g errmeter — then help me configure it.
If npm is missing, follow the README's prerequisites and install guidance.

The command is spelled out so your agent uses the intended npm package and install route.

Install it yourself

Open a terminal and install the command:

npm install -g errmeter
errmeter --help

Create your private inbox repository first. Replace <owner>/<inbox> below with its name (for example, owner/errmeter-inbox); do not type the angle brackets.

errmeter init --repo <owner>/<inbox> --role agent-host

Use init --api-base URL for a custom HTTPS API endpoint (HTTP is allowed only for localhost/127.0.0.1); uninstall and install/uninstall dry-runs need no token, and stale install records are noted in dry-run previews. Linux user status probes linger only with --check or when a registered service's status is degraded.

Save your fine-grained token in ~/.errmeter/github-token as plain text, with file mode 0600 on macOS/Linux (only your user can read and write it). On Windows, use %USERPROFILE%\.errmeter\github-token and restrict its profile ACL to your user. Keep the token out of shell history, messages, and logs.

With that token in place, verify access. This check uses the network, creates the required labels, and creates and closes a probe Issue; it needs a valid token. Review the token's permission page yourself too: the probe cannot prove least privilege.

errmeter status --check

Save a small, non-sensitive log as ./last.log, then send a report:

errmeter emit --agent my-agent --message "something broke" --detail-file ./last.log

The report is queued locally and delivery is attempted separately. Exit 0 does not confirm that the board received it. A fresh board can report degraded status because no watcher is known yet; finish the watcher and heartbeat setup and configure your repair and notification hooks before relying on alerts.

Token setup, file location, or command not found?

A fine-grained personal access token is a GitHub credential whose repositories and permissions you choose. In GitHub's developer settings, select only your private inbox, Issues: Read and write, and Metadata: Read. No Contents or Pull requests permission is needed. See the token boundary.

The default home is ~/.errmeter (%USERPROFILE%\.errmeter on Windows). If you set ERRMETER_HOME, put the token at the sink.token_file path in that home's config.json; ERRMETER_GITHUB_TOKEN takes precedence if set. A file permissions editor can set mode 0600 on POSIX systems; Windows uses profile access controls instead.

If npm is missing, install Node.js 18+ with npm using your operating system's installer or your existing Node version manager, then reopen the terminal. If errmeter is still not found, check that npm's global executable directory is on your PATH. A terminal is the application where you paste commands: Terminal on macOS/Linux, or PowerShell on Windows.

Once the first report is queued, check the boundaries before connecting more jobs.


Why it's safe

The contract defines these boundaries.

  • Your agent — emit returns fast with exit 0; CLI misuse returns 2 (§11).
  • Your token — inbox Issues and metadata only; review its permissions (§8).
  • Your logs — a redacted tail leaves; known secrets are masked (§4).
  • Your choiceerrmeter uninstall removes boot registration (§11).
  • Your machine — only watch runs long-term; no HTTP server (architecture §9).

The owner hook tools also restore their backups; uninstalling boot registration does not remove hooks or erase your records. No hosted server or paid CI is needed: laptops may run an agent-host loop or emit without one. Redaction is pattern-based, so review sensitive log content before forwarding it; repair hooks run as the watcher's OS user and need their own credentials.

Not for you if you have a single machine and a single agent, or you already have a paid monitoring stack that covers this need.

For configuration, operating limits, and contributions, use the references below.


Learn more

Choose the reference for the next decision you need to make.

What you want Where to look
User stories and non-goals Requirements
Data flow and module map Architecture
Configuration, commands, and boundaries Contract
Agent hooks, job wrappers, and heartbeats Integrations
Local tests and contribution process Contributing
Private vulnerability reports Security policy
README editions English / 日本語 / 简体中文 / ไทย

Part of the Caty AI family — open tools for running a family of AI agents. The full map, including modules still being prepared for release, lives in Family OS.

Axis Module What it does State
Map Family OS The map of the whole family — every module, its state, and how they fit published, MIT
Rules Family Dev Handbook The rules of the road — issues, PRs, worktrees, handoffs, parallel development published, MIT
Vertical · foundation Caty Agent Harness Task backbone for AI agents — retries, checkpoints, and honest completion published, MIT
Vertical context-kit Six-piece context hygiene kit for one agent — bounded output, delegation briefs, safety guards, recall, worktree snapshots published, MIT
Vertical Persona Engine Layers relationship and emotion onto an agent's existing persona published, MIT
Vertical Persona Growth Loop Grows the persona itself — minimal, idempotent proposals published, MIT
Vertical X Collector Turns X and the web into one daily digest — for people and agents published, MIT
Vertical Self Growth Loop Lets an agent grow its own abilities — proposals, governance, adoption records published, MIT
Horizontal · foundation Family Memory Architecture The memory bus — how the family shares what it knows published, MIT
Horizontal Sitter Babysits delegated agent runs — watches, keeps evidence, restarts only within declared bounds published, MIT
Horizontal Alpha Nightshift Nightly autonomous maintenance loop — isolated night lanes behind a deny-by-default guard; humans cherry-pick in the morning published, MIT
Horizontal errmeter Reports failed or silent AI agents and scheduled jobs across machines — emit, spool, shared board, repair hook; a shout that is never lost published, MIT
Vertical Caty Gateway PC-side gateway for CatyPhone — one-line install; pairs your phone with the agent running on your machine (Claude Code / Codex CLI / OpenClaw / Hermes / OpenAI-compatible) published, MIT

License

MIT, so you can use, modify, and incorporate errmeter into your own tools under its notice and warranty terms.

Zero dependenciesNode 18+No CI required

About

Error meter reading for AI agent families: emit → spool → sink → watch. Zero deps, Node 18+, no CI required.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages