Evidence, not verdicts

Your cron job says it succeeded. Night Watchman checks if it actually did.

Output monitoring + AI investigation for scheduled jobs. Self-hosted. Calm, precise, and built for the failures heartbeat tools miss.

Exit code 0 is only the process talking. Night Watchman inspects the artifact: rows, schema, size, freshness, history, and logs.

The problem

Green checkmarks do not restore broken data.

The expensive failures are quiet. The job ran. The backup existed. The dashboard refreshed. The artifact was wrong.

“Backups ran successfully for 3 weeks. Every tape was empty.”

status: process succeeded / artifact useless

“A 0-byte dump, discovered at restore time.”

signal missed: output size

“A corrupted file auto-backed up for 2 weeks, overwriting every good copy.”

signal missed: history anomaly

How it works

Three layers. One rule: cite the evidence.

1. Detect

Deterministic Python checks the artifact against declared expectations and history. No LLM in the detection layer.

min_rows: expected ≥ 2
actual: 1
source: data/prices.csv

2. Investigate

GPT-5.6 receives a bounded evidence package and writes a dossier. Claims without source pointers are rejected.

finding: schema mismatch
cites: log:42, artifact:1
not_checked: upstream API

3. Approve

Telegram buttons offer only bounded actions: rerun, or quarantine and rerun. Then Night Watchman re-inspects.

[quarantine_and_rerun]
[rerun_only]
post-action flags remain explicit

Actual dossier shape

Not a verdict. Not a confident hallucination. A compact decision packet with sources, gaps, and bounded next actions.

suspected_area: external truncation or malformed append
sources:
  - data/prices.csv:1
  - logs/prices.log:42-57
  - history.jsonl:last_7_runs
not_checked:
  - upstream API response body
human_decision:
  1. quarantine_and_rerun
  2. rerun_only

Demo

Watch the silent failure happen.

The demo truncates a CSV, the job continues to exit 0, and Night Watchman escalates the contradiction with evidence.

Honest limits

Designed for a focused v0.2, not a pretend enterprise suite.

These constraints are intentional. Night Watchman is useful because it is narrow, inspectable, and honest about what it does not know.

  • File-artifact jobs only
  • Telegram + one operator
  • Bring your own OpenAI key

Pricing

Free for five jobs. $39 once if it earns its keep.

Free

$0
  • Monitor up to 5 jobs
  • All features enabled
  • Self-hosted
Install free

Early-bird license

$39
  • Unlimited jobs
  • All v1.x releases
  • 3 machine activations
  • No subscription
Buy license

License posture

Monitoring reliability beats license enforcement. If the license server is unavailable, Night Watchman uses a cached result or safely falls back to the five-job free tier.

Read license

Install

One command, then run the wizard.

The installer creates a local virtualenv, installs dependencies, and hands off to the setup wizard.

curl -fsSL https://raw.githubusercontent.com/ssddee-dev/code-batman/main/install.sh | bash
cd ~/night-watchman
.venv/bin/python -m watchman.setup

Full README on GitHub

FAQ

Short answers before you install.

What does Night Watchman monitor?

Night Watchman monitors file-artifact cron jobs: scripts that produce CSVs, JSON, reports, dumps, logs, exports, or similar files.

Does Night Watchman trust exit code 0?

No. Exit code 0 is one weak process signal. Night Watchman checks the output artifact for freshness, size, rows, schema, and history.

Does Night Watchman automatically fix jobs?

No. It sends evidence and bounded actions to a human operator for Telegram approval, then re-inspects after execution.

How much does Night Watchman cost?

Night Watchman is free for up to 5 jobs. The early-bird license is $39 one-time for unlimited jobs through v1.x.